|
|
1.1 ! root 1: /* ! 2: * hosts.h Copyright (C) 1992 Drew Eckhardt ! 3: * mid to low-level SCSI driver interface header by ! 4: * Drew Eckhardt ! 5: * ! 6: * <[email protected]> ! 7: */ ! 8: ! 9: #ifndef _HOSTS_H ! 10: #define _HOSTS_H ! 11: ! 12: #ifndef MAX_SCSI_HOSTS ! 13: #include "max_hosts.h" ! 14: #endif ! 15: ! 16: /* ! 17: $Header: /usr/src/linux/kernel/blk_drv/scsi/RCS/hosts.h,v 1.1 1992/04/24 18:01:50 root Exp root $ ! 18: */ ! 19: ! 20: /* ! 21: The Scsi_Cmnd structure is used by scsi.c internally, and for communication with ! 22: low level drivers that support multiple outstanding commands. ! 23: */ ! 24: ! 25: typedef struct scsi_cmnd { ! 26: int host; ! 27: unsigned char target, lun; ! 28: unsigned char cmnd[10]; ! 29: unsigned bufflen; ! 30: void *buffer; ! 31: ! 32: unsigned char sense_cmnd[6]; ! 33: unsigned char *sense_buffer; ! 34: ! 35: unsigned flags; ! 36: ! 37: int retries; ! 38: int allowed; ! 39: int timeout_per_command, timeout_total, timeout; ! 40: ! 41: void (*done)(int,int); ! 42: struct scsi_cmnd *next, *prev; ! 43: } Scsi_Cmnd; ! 44: ! 45: /* ! 46: The Scsi_Host type has all that is needed to interface with a SCSI ! 47: host in a device independant matter. ! 48: */ ! 49: ! 50: typedef struct ! 51: { ! 52: /* ! 53: The name pointer is a pointer to the name of the SCSI ! 54: device detected. ! 55: */ ! 56: ! 57: char *name; ! 58: ! 59: /* ! 60: The detect function shall return non zero on detection, ! 61: and initialize all data necessary for this particular ! 62: SCSI driver. It is passed the host number, so this host ! 63: knows where it is in the hosts array ! 64: */ ! 65: ! 66: int (* detect)(int); ! 67: ! 68: /* ! 69: The info function will return whatever useful ! 70: information the developer sees fit. ! 71: */ ! 72: ! 73: char *(* info)(void); ! 74: ! 75: /* ! 76: The command function takes a target, a command (this is a SCSI ! 77: command formatted as per the SCSI spec, nothing strange), a ! 78: data buffer pointer, and data buffer length pointer. The return ! 79: is a status int, bit fielded as follows : ! 80: Byte What ! 81: 0 SCSI status code ! 82: 1 SCSI 1 byte message ! 83: 2 host error return. ! 84: 3 mid level error return ! 85: */ ! 86: ! 87: int (* command)(unsigned char target, const void *cmnd, ! 88: void *buff, int bufflen); ! 89: ! 90: /* ! 91: The QueueCommand function works in a similar manner ! 92: to the command function. It takes an additional parameter, ! 93: void (* done)(int host, int code) which is passed the host ! 94: # and exit result when the command is complete. ! 95: Host number is the POSITION IN THE hosts array of THIS ! 96: host adapter. ! 97: */ ! 98: ! 99: int (* queuecommand)(unsigned char target, const void *cmnd, ! 100: void *buff, int bufflen, void (*done)(int,int)); ! 101: ! 102: ! 103: /* ! 104: Since the mid level driver handles time outs, etc, we want to ! 105: be able to abort the current command. Abort returns 0 if the ! 106: abortion was successful. If non-zero, the code passed to it ! 107: will be used as the return code, otherwise ! 108: DID_ABORT should be returned. ! 109: ! 110: Note that the scsi driver should "clean up" after itself, ! 111: resetting the bus, etc. if necessary. ! 112: */ ! 113: ! 114: int (* abort)(int); ! 115: ! 116: /* ! 117: The reset function will reset the SCSI bus. Any executing ! 118: commands should fail with a DID_RESET in the host byte. ! 119: */ ! 120: ! 121: int (* reset)(void); ! 122: ! 123: /* ! 124: This determines if we will use a non-interrupt driven ! 125: or an interrupt driven scheme, It is set to the maximum number ! 126: of simulataneous commands a given host adapter will accept. ! 127: */ ! 128: ! 129: int can_queue; ! 130: ! 131: /* ! 132: In many instances, especially where disconnect / reconnect are ! 133: supported, our host also has an ID on the SCSI bus. If this is ! 134: the case, then it must be reserved. Please set this_id to -1 if your settup is in single initiator mode, and the host lacks an ! 135: ID. ! 136: */ ! 137: ! 138: int this_id; ! 139: ! 140: /* ! 141: present contains a flag as to weather we are present - ! 142: so we don't have to call detect multiple times. ! 143: */ ! 144: ! 145: unsigned present:1; ! 146: } Scsi_Host; ! 147: ! 148: /* ! 149: The scsi_hosts array is the array containing the data for all ! 150: possible <supported> scsi hosts. ! 151: */ ! 152: ! 153: extern Scsi_Host scsi_hosts[]; ! 154: ! 155: /* ! 156: This is our semaphore array, used by scsi.c, sd.c, st.c. ! 157: Other routines SHOULD NOT mess with it. Your driver should NOT mess with it. ! 158: This is used to protect against contention by disk and tape drivers. ! 159: */ ! 160: ! 161: extern volatile unsigned char host_busy[]; ! 162: extern volatile int host_timeout[]; ! 163: ! 164: /* ! 165: This is the queue of currently pending commands for a given ! 166: SCSI host. ! 167: */ ! 168: ! 169: extern volatile Scsi_Cmnd *host_queue[]; ! 170: ! 171: /* ! 172: scsi_init initializes the scsi hosts. ! 173: */ ! 174: ! 175: ! 176: void scsi_init(void); ! 177: ! 178: #define BLANK_HOST {"", 0, 0, 0, 0, 0, 0, 0, 0, 0} ! 179: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.