Annotation of Gnu-Mach/linux/src/drivers/scsi/aha1740.h, revision 1.1.1.1

1.1       root        1: #ifndef _AHA1740_H
                      2: 
                      3: /* $Id: aha1740.h,v 1.1 1999/04/26 05:54:13 tb Exp $
                      4:  *
                      5:  * Header file for the adaptec 1740 driver for Linux
                      6:  *
                      7:  * With minor revisions 3/31/93
                      8:  * Written and (C) 1992,1993 Brad McLean.  See aha1740.c
                      9:  * for more info
                     10:  *
                     11:  */
                     12: 
                     13: #include <linux/types.h>
                     14: #include <linux/kdev_t.h>
                     15: 
                     16: /* Eisa Enhanced mode operation - slot locating and addressing */
                     17: #define MINEISA 1   /* I don't have an EISA Spec to know these ranges, so I */
                     18: #define MAXEISA 8   /* Just took my machine's specifications.  Adjust to fit.*/
                     19:                    /* I just saw an ad, and bumped this from 6 to 8 */
                     20: #define        SLOTBASE(x)     ((x << 12) + 0xc80)
                     21: #define SLOTSIZE       0x5c
                     22: 
                     23: /* EISA configuration registers & values */
                     24: #define        HID0(base)      (base + 0x0)
                     25: #define        HID1(base)      (base + 0x1)
                     26: #define HID2(base)     (base + 0x2)
                     27: #define        HID3(base)      (base + 0x3)
                     28: #define        EBCNTRL(base)   (base + 0x4)
                     29: #define        PORTADR(base)   (base + 0x40)
                     30: #define BIOSADR(base)  (base + 0x41)
                     31: #define INTDEF(base)   (base + 0x42)
                     32: #define SCSIDEF(base)  (base + 0x43)
                     33: #define BUSDEF(base)   (base + 0x44)
                     34: #define        RESV0(base)     (base + 0x45)
                     35: #define RESV1(base)    (base + 0x46)
                     36: #define        RESV2(base)     (base + 0x47)
                     37: 
                     38: #define        HID_MFG "ADP"
                     39: #define        HID_PRD 0
                     40: #define HID_REV 2
                     41: #define EBCNTRL_VALUE 1
                     42: #define PORTADDR_ENH 0x80
                     43: /* READ */
                     44: #define        G2INTST(base)   (base + 0x56)
                     45: #define G2STAT(base)   (base + 0x57)
                     46: #define        MBOXIN0(base)   (base + 0x58)
                     47: #define        MBOXIN1(base)   (base + 0x59)
                     48: #define        MBOXIN2(base)   (base + 0x5a)
                     49: #define        MBOXIN3(base)   (base + 0x5b)
                     50: #define G2STAT2(base)  (base + 0x5c)
                     51: 
                     52: #define G2INTST_MASK           0xf0    /* isolate the status */
                     53: #define        G2INTST_CCBGOOD         0x10    /* CCB Completed */
                     54: #define        G2INTST_CCBRETRY        0x50    /* CCB Completed with a retry */
                     55: #define        G2INTST_HARDFAIL        0x70    /* Adapter Hardware Failure */
                     56: #define        G2INTST_CMDGOOD         0xa0    /* Immediate command success */
                     57: #define G2INTST_CCBERROR       0xc0    /* CCB Completed with error */
                     58: #define        G2INTST_ASNEVENT        0xd0    /* Asynchronous Event Notification */
                     59: #define        G2INTST_CMDERROR        0xe0    /* Immediate command error */
                     60: 
                     61: #define G2STAT_MBXOUT  4       /* Mailbox Out Empty Bit */
                     62: #define        G2STAT_INTPEND  2       /* Interrupt Pending Bit */
                     63: #define        G2STAT_BUSY     1       /* Busy Bit (attention pending) */
                     64: 
                     65: #define G2STAT2_READY  0       /* Host Ready Bit */
                     66: 
                     67: /* WRITE (and ReadBack) */
                     68: #define        MBOXOUT0(base)  (base + 0x50)
                     69: #define        MBOXOUT1(base)  (base + 0x51)
                     70: #define        MBOXOUT2(base)  (base + 0x52)
                     71: #define        MBOXOUT3(base)  (base + 0x53)
                     72: #define        ATTN(base)      (base + 0x54)
                     73: #define G2CNTRL(base)  (base + 0x55)
                     74: 
                     75: #define        ATTN_IMMED      0x10    /* Immediate Command */
                     76: #define        ATTN_START      0x40    /* Start CCB */
                     77: #define        ATTN_ABORT      0x50    /* Abort CCB */
                     78: 
                     79: #define G2CNTRL_HRST   0x80            /* Hard Reset */
                     80: #define G2CNTRL_IRST   0x40            /* Clear EISA Interrupt */
                     81: #define G2CNTRL_HRDY   0x20            /* Sets HOST ready */
                     82: 
                     83: /* This is used with scatter-gather */
                     84: struct aha1740_chain {
                     85:   u32  dataptr;                /* Location of data */
                     86:   u32  datalen;                /* Size of this part of chain */
                     87: };
                     88: 
                     89: /* These belong in scsi.h */
                     90: #define any2scsi(up, p)                                \
                     91: (up)[0] = (((unsigned long)(p)) >> 16)  ;      \
                     92: (up)[1] = (((unsigned long)(p)) >> 8);         \
                     93: (up)[2] = ((unsigned long)(p));
                     94: 
                     95: #define scsi2int(up) ( (((long)*(up)) << 16) + (((long)(up)[1]) << 8) + ((long)(up)[2]) )
                     96: 
                     97: #define xany2scsi(up, p)       \
                     98: (up)[0] = ((long)(p)) >> 24;   \
                     99: (up)[1] = ((long)(p)) >> 16;   \
                    100: (up)[2] = ((long)(p)) >> 8;    \
                    101: (up)[3] = ((long)(p));
                    102: 
                    103: #define xscsi2int(up) ( (((long)(up)[0]) << 24) + (((long)(up)[1]) << 16) \
                    104:                      + (((long)(up)[2]) <<  8) +  ((long)(up)[3]) )
                    105: 
                    106: #define MAX_CDB 12
                    107: #define MAX_SENSE 14
                    108: #define MAX_STATUS 32
                    109: 
                    110: struct ecb {                   /* Enhanced Control Block 6.1 */
                    111:   u16  cmdw;                   /* Command Word */
                    112:   /* Flag Word 1 */
                    113:   u16          cne:1,          /* Control Block Chaining */
                    114:        :6,     di:1,           /* Disable Interrupt */
                    115:        :2,     ses:1,          /* Suppress Underrun error */
                    116:        :1,     sg:1,           /* Scatter/Gather */
                    117:        :1,     dsb:1,          /* Disable Status Block */
                    118:                ars:1;          /* Automatic Request Sense */
                    119:   /* Flag Word 2 */
                    120:   u16          lun:3,          /* Logical Unit */
                    121:                tag:1,          /* Tagged Queuing */
                    122:                tt:2,           /* Tag Type */
                    123:                nd:1,           /* No Disconnect */
                    124:        :1,     dat:1,          /* Data transfer - check direction */
                    125:                dir:1,          /* Direction of transfer 1 = datain */
                    126:                st:1,           /* Suppress Transfer */
                    127:                chk:1,          /* Calculate Checksum */
                    128:        :2,     rec:1,  :1;     /* Error Recovery */
                    129:   u16  nil0;                   /* nothing */
                    130:   u32  dataptr;                /* Data or Scatter List ptr */
                    131:   u32  datalen;                /* Data or Scatter List len */
                    132:   u32  statusptr;              /* Status Block ptr */
                    133:   u32  linkptr;                /* Chain Address */
                    134:   u32  nil1;                   /* nothing */
                    135:   u32  senseptr;               /* Sense Info Pointer */
                    136:   u8   senselen;               /* Sense Length */
                    137:   u8   cdblen;                 /* CDB Length */
                    138:   u16  datacheck;              /* Data checksum */
                    139:   u8   cdb[MAX_CDB];           /* CDB area */
                    140: /* Hardware defined portion ends here, rest is driver defined */
                    141:   u8   sense[MAX_SENSE];       /* Sense area */ 
                    142:   u8   status[MAX_STATUS];     /* Status area */
                    143:   Scsi_Cmnd *SCpnt;            /* Link to the SCSI Command Block */
                    144:   void (*done)(Scsi_Cmnd *);   /* Completion Function */
                    145: };
                    146: 
                    147: #define        AHA1740CMD_NOP   0x00   /* No OP */
                    148: #define AHA1740CMD_INIT         0x01   /* Initiator SCSI Command */
                    149: #define AHA1740CMD_DIAG         0x05   /* Run Diagnostic Command */
                    150: #define AHA1740CMD_SCSI         0x06   /* Initialize SCSI */
                    151: #define AHA1740CMD_SENSE 0x08  /* Read Sense Information */
                    152: #define AHA1740CMD_DOWN  0x09  /* Download Firmware (yeah, I bet!) */
                    153: #define AHA1740CMD_RINQ  0x0a  /* Read Host Adapter Inquiry Data */
                    154: #define AHA1740CMD_TARG  0x10  /* Target SCSI Command */
                    155: 
                    156: int aha1740_detect(Scsi_Host_Template *);
                    157: int aha1740_command(Scsi_Cmnd *);
                    158: int aha1740_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
                    159: int aha1740_abort(Scsi_Cmnd *);
                    160: int aha1740_reset(Scsi_Cmnd *, unsigned int);
                    161: int aha1740_biosparam(Disk *, kdev_t, int*);
                    162: int aha1740_proc_info(char *buffer, char **start, off_t offset,
                    163:                                int length, int hostno, int inout);
                    164: 
                    165: #define AHA1740_ECBS 32
                    166: #define AHA1740_SCATTER 16
                    167: #define AHA1740_CMDLUN 1
                    168: 
                    169: #ifndef NULL
                    170:        #define NULL 0
                    171: #endif
                    172: 
                    173: extern struct proc_dir_entry proc_scsi_aha1740;
                    174: 
                    175: #define AHA1740 {NULL, NULL,                           \
                    176:                    &proc_scsi_aha1740,                 \
                    177:                   aha1740_proc_info,                   \
                    178:                   "Adaptec 174x (EISA)",               \
                    179:                   aha1740_detect,                      \
                    180:                   NULL,                                \
                    181:                   NULL,                                \
                    182:                   aha1740_command,                     \
                    183:                   aha1740_queuecommand,                \
                    184:                   aha1740_abort,                       \
                    185:                   aha1740_reset,                       \
                    186:                   NULL,                                \
                    187:                   aha1740_biosparam,                   \
                    188:                   AHA1740_ECBS,                        \
                    189:                   7,                                   \
                    190:                   AHA1740_SCATTER,                     \
                    191:                   AHA1740_CMDLUN,                      \
                    192:                   0,                                   \
                    193:                   0,                                   \
                    194:                   ENABLE_CLUSTERING}
                    195: 
                    196: #endif

unix.superglobalmegacorp.com

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