Annotation of linux/kernel/blk_drv/scsi/hosts.h, revision 1.1.1.2

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: /*
1.1.1.2 ! root       17:        $Header: /usr/src/linux/kernel/blk_drv/scsi/RCS/hosts.h,v 1.1 1992/07/24 06:27:38 root Exp root $
1.1       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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.