|
|
1.1 ! root 1: #ifndef _AHA152X_H ! 2: #define _AHA152X_H ! 3: ! 4: /* ! 5: * $Id: aha152x.h,v 1.1 1999/04/26 05:54:10 tb Exp $ ! 6: */ ! 7: ! 8: #if defined(__KERNEL__) ! 9: ! 10: #include <linux/blk.h> ! 11: #include "scsi.h" ! 12: #include <asm/io.h> ! 13: ! 14: int aha152x_detect(Scsi_Host_Template *); ! 15: int aha152x_command(Scsi_Cmnd *); ! 16: int aha152x_queue(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *)); ! 17: int aha152x_abort(Scsi_Cmnd *); ! 18: int aha152x_reset(Scsi_Cmnd *, unsigned int); ! 19: int aha152x_biosparam(Disk *, kdev_t, int*); ! 20: int aha152x_proc_info(char *buffer, char **start, off_t offset, int length, int hostno, int inout); ! 21: ! 22: /* number of queueable commands ! 23: (unless we support more than 1 cmd_per_lun this should do) */ ! 24: #define AHA152X_MAXQUEUE 7 ! 25: ! 26: #define AHA152X_REVID "Adaptec 152x SCSI driver; $Revision: 1.1 $" ! 27: ! 28: extern struct proc_dir_entry proc_scsi_aha152x; ! 29: ! 30: /* Initial value of Scsi_Host entry */ ! 31: #define AHA152X { /* next */ 0, \ ! 32: /* usage_count */ 0, \ ! 33: /* proc_dir */ &proc_scsi_aha152x, \ ! 34: /* proc_info */ aha152x_proc_info, \ ! 35: /* name */ AHA152X_REVID, \ ! 36: /* detect */ aha152x_detect, \ ! 37: /* release */ 0, \ ! 38: /* info */ 0, \ ! 39: /* command */ aha152x_command, \ ! 40: /* queuecommand */ aha152x_queue, \ ! 41: /* abort */ aha152x_abort, \ ! 42: /* reset */ aha152x_reset, \ ! 43: /* slave_attach */ 0, \ ! 44: /* bios_param */ aha152x_biosparam, \ ! 45: /* can_queue */ 1, \ ! 46: /* this_id */ 7, \ ! 47: /* sg_tablesize */ SG_ALL, \ ! 48: /* cmd_per_lun */ 1, \ ! 49: /* present */ 0, \ ! 50: /* unchecked_isa_dma */ 0, \ ! 51: /* use_clustering */ DISABLE_CLUSTERING } ! 52: #endif ! 53: ! 54: ! 55: /* port addresses */ ! 56: #define SCSISEQ (shpnt->io_port+0x00) /* SCSI sequence control */ ! 57: #define SXFRCTL0 (shpnt->io_port+0x01) /* SCSI transfer control 0 */ ! 58: #define SXFRCTL1 (shpnt->io_port+0x02) /* SCSI transfer control 1 */ ! 59: #define SCSISIG (shpnt->io_port+0x03) /* SCSI signal in/out */ ! 60: #define SCSIRATE (shpnt->io_port+0x04) /* SCSI rate control */ ! 61: #define SELID (shpnt->io_port+0x05) /* selection/reselection ID */ ! 62: #define SCSIID SELID /* SCSI ID */ ! 63: #define SCSIDAT (shpnt->io_port+0x06) /* SCSI latched data */ ! 64: #define SCSIBUS (shpnt->io_port+0x07) /* SCSI data bus */ ! 65: #define STCNT0 (shpnt->io_port+0x08) /* SCSI transfer count 0 */ ! 66: #define STCNT1 (shpnt->io_port+0x09) /* SCSI transfer count 1 */ ! 67: #define STCNT2 (shpnt->io_port+0x0a) /* SCSI transfer count 2 */ ! 68: #define SSTAT0 (shpnt->io_port+0x0b) /* SCSI interrupt status 0 */ ! 69: #define SSTAT1 (shpnt->io_port+0x0c) /* SCSI interrupt status 1 */ ! 70: #define SSTAT2 (shpnt->io_port+0x0d) /* SCSI interrupt status 2 */ ! 71: #define SCSITEST (shpnt->io_port+0x0e) /* SCSI test control */ ! 72: #define SSTAT3 SCSITEST /* SCSI interrupt status 3 */ ! 73: #define SSTAT4 (shpnt->io_port+0x0f) /* SCSI status 4 */ ! 74: #define SIMODE0 (shpnt->io_port+0x10) /* SCSI interrupt mode 0 */ ! 75: #define SIMODE1 (shpnt->io_port+0x11) /* SCSI interrupt mode 1 */ ! 76: #define DMACNTRL0 (shpnt->io_port+0x12) /* DMA control 0 */ ! 77: #define DMACNTRL1 (shpnt->io_port+0x13) /* DMA control 1 */ ! 78: #define DMASTAT (shpnt->io_port+0x14) /* DMA status */ ! 79: #define FIFOSTAT (shpnt->io_port+0x15) /* FIFO status */ ! 80: #define DATAPORT (shpnt->io_port+0x16) /* DATA port */ ! 81: #define BRSTCNTRL (shpnt->io_port+0x18) /* burst control */ ! 82: #define PORTA (shpnt->io_port+0x1a) /* PORT A */ ! 83: #define PORTB (shpnt->io_port+0x1b) /* PORT B */ ! 84: #define REV (shpnt->io_port+0x1c) /* revision */ ! 85: #define STACK (shpnt->io_port+0x1d) /* stack */ ! 86: #define TEST (shpnt->io_port+0x1e) /* test register */ ! 87: ! 88: /* used in aha152x_porttest */ ! 89: #define O_PORTA 0x1a /* PORT A */ ! 90: #define O_PORTB 0x1b /* PORT B */ ! 91: #define O_DMACNTRL1 0x13 /* DMA control 1 */ ! 92: #define O_STACK 0x1d /* stack */ ! 93: #define IO_RANGE 0x20 ! 94: ! 95: /* bits and bitmasks to ports */ ! 96: ! 97: /* SCSI sequence control */ ! 98: #define TEMODEO 0x80 ! 99: #define ENSELO 0x40 ! 100: #define ENSELI 0x20 ! 101: #define ENRESELI 0x10 ! 102: #define ENAUTOATNO 0x08 ! 103: #define ENAUTOATNI 0x04 ! 104: #define ENAUTOATNP 0x02 ! 105: #define SCSIRSTO 0x01 ! 106: ! 107: /* SCSI transfer control 0 */ ! 108: #define SCSIEN 0x80 ! 109: #define DMAEN 0x40 ! 110: #define CH1 0x20 ! 111: #define CLRSTCNT 0x10 ! 112: #define SPIOEN 0x08 ! 113: #define CLRCH1 0x02 ! 114: ! 115: /* SCSI transfer control 1 */ ! 116: #define BITBUCKET 0x80 ! 117: #define SWRAPEN 0x40 ! 118: #define ENSPCHK 0x20 ! 119: #define STIMESEL 0x18 /* mask */ ! 120: #define STIMESEL_ 3 ! 121: #define ENSTIMER 0x04 ! 122: #define BYTEALIGN 0x02 ! 123: ! 124: /* SCSI signal IN */ ! 125: #define CDI 0x80 ! 126: #define IOI 0x40 ! 127: #define MSGI 0x20 ! 128: #define ATNI 0x10 ! 129: #define SELI 0x08 ! 130: #define BSYI 0x04 ! 131: #define REQI 0x02 ! 132: #define ACKI 0x01 ! 133: ! 134: /* SCSI Phases */ ! 135: #define P_MASK (MSGI|CDI|IOI) ! 136: #define P_DATAO (0) ! 137: #define P_DATAI (IOI) ! 138: #define P_CMD (CDI) ! 139: #define P_STATUS (CDI|IOI) ! 140: #define P_MSGO (MSGI|CDI) ! 141: #define P_MSGI (MSGI|CDI|IOI) ! 142: ! 143: /* SCSI signal OUT */ ! 144: #define CDO 0x80 ! 145: #define IOO 0x40 ! 146: #define MSGO 0x20 ! 147: #define ATNO 0x10 ! 148: #define SELO 0x08 ! 149: #define BSYO 0x04 ! 150: #define REQO 0x02 ! 151: #define ACKO 0x01 ! 152: ! 153: /* SCSI rate control */ ! 154: #define SXFR 0x70 /* mask */ ! 155: #define SXFR_ 4 ! 156: #define SOFS 0x0f /* mask */ ! 157: ! 158: /* SCSI ID */ ! 159: #define OID 0x70 ! 160: #define OID_ 4 ! 161: #define TID 0x07 ! 162: ! 163: /* SCSI transfer count */ ! 164: #define GETSTCNT() ( (GETPORT(STCNT2)<<16) \ ! 165: + (GETPORT(STCNT1)<< 8) \ ! 166: + GETPORT(STCNT0) ) ! 167: ! 168: #define SETSTCNT(X) { SETPORT(STCNT2, ((X) & 0xFF0000) >> 16); \ ! 169: SETPORT(STCNT1, ((X) & 0x00FF00) >> 8); \ ! 170: SETPORT(STCNT0, ((X) & 0x0000FF) ); } ! 171: ! 172: /* SCSI interrupt status */ ! 173: #define TARGET 0x80 ! 174: #define SELDO 0x40 ! 175: #define SELDI 0x20 ! 176: #define SELINGO 0x10 ! 177: #define SWRAP 0x08 ! 178: #define SDONE 0x04 ! 179: #define SPIORDY 0x02 ! 180: #define DMADONE 0x01 ! 181: ! 182: #define SETSDONE 0x80 ! 183: #define CLRSELDO 0x40 ! 184: #define CLRSELDI 0x20 ! 185: #define CLRSELINGO 0x10 ! 186: #define CLRSWRAP 0x08 ! 187: #define CLRSDONE 0x04 ! 188: #define CLRSPIORDY 0x02 ! 189: #define CLRDMADONE 0x01 ! 190: ! 191: /* SCSI status 1 */ ! 192: #define SELTO 0x80 ! 193: #define ATNTARG 0x40 ! 194: #define SCSIRSTI 0x20 ! 195: #define PHASEMIS 0x10 ! 196: #define BUSFREE 0x08 ! 197: #define SCSIPERR 0x04 ! 198: #define PHASECHG 0x02 ! 199: #define REQINIT 0x01 ! 200: ! 201: #define CLRSELTIMO 0x80 ! 202: #define CLRATNO 0x40 ! 203: #define CLRSCSIRSTI 0x20 ! 204: #define CLRBUSFREE 0x08 ! 205: #define CLRSCSIPERR 0x04 ! 206: #define CLRPHASECHG 0x02 ! 207: #define CLRREQINIT 0x01 ! 208: ! 209: /* SCSI status 2 */ ! 210: #define SOFFSET 0x20 ! 211: #define SEMPTY 0x10 ! 212: #define SFULL 0x08 ! 213: #define SFCNT 0x07 /* mask */ ! 214: ! 215: /* SCSI status 3 */ ! 216: #define SCSICNT 0xf0 /* mask */ ! 217: #define SCSICNT_ 4 ! 218: #define OFFCNT 0x0f /* mask */ ! 219: ! 220: /* SCSI TEST control */ ! 221: #define SCTESTU 0x08 ! 222: #define SCTESTD 0x04 ! 223: #define STCTEST 0x01 ! 224: ! 225: /* SCSI status 4 */ ! 226: #define SYNCERR 0x04 ! 227: #define FWERR 0x02 ! 228: #define FRERR 0x01 ! 229: ! 230: #define CLRSYNCERR 0x04 ! 231: #define CLRFWERR 0x02 ! 232: #define CLRFRERR 0x01 ! 233: ! 234: /* SCSI interrupt mode 0 */ ! 235: #define ENSELDO 0x40 ! 236: #define ENSELDI 0x20 ! 237: #define ENSELINGO 0x10 ! 238: #define ENSWRAP 0x08 ! 239: #define ENSDONE 0x04 ! 240: #define ENSPIORDY 0x02 ! 241: #define ENDMADONE 0x01 ! 242: ! 243: /* SCSI interrupt mode 1 */ ! 244: #define ENSELTIMO 0x80 ! 245: #define ENATNTARG 0x40 ! 246: #define ENSCSIRST 0x20 ! 247: #define ENPHASEMIS 0x10 ! 248: #define ENBUSFREE 0x08 ! 249: #define ENSCSIPERR 0x04 ! 250: #define ENPHASECHG 0x02 ! 251: #define ENREQINIT 0x01 ! 252: ! 253: /* DMA control 0 */ ! 254: #define ENDMA 0x80 ! 255: #define _8BIT 0x40 ! 256: #define DMA 0x20 ! 257: #define WRITE_READ 0x08 ! 258: #define INTEN 0x04 ! 259: #define RSTFIFO 0x02 ! 260: #define SWINT 0x01 ! 261: ! 262: /* DMA control 1 */ ! 263: #define PWRDWN 0x80 ! 264: #define STK 0x07 /* mask */ ! 265: ! 266: /* DMA status */ ! 267: #define ATDONE 0x80 ! 268: #define WORDRDY 0x40 ! 269: #define INTSTAT 0x20 ! 270: #define DFIFOFULL 0x10 ! 271: #define DFIFOEMP 0x08 ! 272: ! 273: /* BURST control */ ! 274: #define BON 0xf0 ! 275: #define BOFF 0x0f ! 276: ! 277: /* TEST REGISTER */ ! 278: #define BOFFTMR 0x40 ! 279: #define BONTMR 0x20 ! 280: #define STCNTH 0x10 ! 281: #define STCNTM 0x08 ! 282: #define STCNTL 0x04 ! 283: #define SCSIBLK 0x02 ! 284: #define DMABLK 0x01 ! 285: ! 286: /* On the AHA-152x board PORTA and PORTB contain ! 287: some information about the board's configuration. */ ! 288: typedef union { ! 289: struct { ! 290: unsigned reserved:2; /* reserved */ ! 291: unsigned tardisc:1; /* Target disconnect: 0=disabled, 1=enabled */ ! 292: unsigned syncneg:1; /* Initial sync neg: 0=disabled, 1=enabled */ ! 293: unsigned msgclasses:2; /* Message classes ! 294: 0=#4 ! 295: 1=#0, #1, #2, #3, #4 ! 296: 2=#0, #3, #4 ! 297: 3=#0, #4 ! 298: */ ! 299: unsigned boot:1; /* boot: 0=disabled, 1=enabled */ ! 300: unsigned dma:1; /* Transfer mode: 0=PIO; 1=DMA */ ! 301: unsigned id:3; /* SCSI-id */ ! 302: unsigned irq:2; /* IRQ-Channel: 0,3=12, 1=10, 2=11 */ ! 303: unsigned dmachan:2; /* DMA-Channel: 0=0, 1=5, 2=6, 3=7 */ ! 304: unsigned parity:1; /* SCSI-parity: 1=enabled 0=disabled */ ! 305: } fields; ! 306: unsigned short port; ! 307: } aha152x_config ; ! 308: ! 309: #define cf_parity fields.parity ! 310: #define cf_dmachan fields.dmachan ! 311: #define cf_irq fields.irq ! 312: #define cf_id fields.id ! 313: #define cf_dma fields.dma ! 314: #define cf_boot fields.boot ! 315: #define cf_msgclasses fields.msgclasses ! 316: #define cf_syncneg fields.syncneg ! 317: #define cf_tardisc fields.tardisc ! 318: #define cf_port port ! 319: ! 320: /* Some macros to manipulate ports and their bits */ ! 321: ! 322: #define SETPORT(PORT, VAL) outb( (VAL), (PORT) ) ! 323: #define SETPORTP(PORT, VAL) outb_p( (VAL), (PORT) ) ! 324: #define SETPORTW(PORT, VAL) outw( (VAL), (PORT) ) ! 325: ! 326: #define GETPORT(PORT) inb( PORT ) ! 327: #define GETPORTW(PORT) inw( PORT ) ! 328: ! 329: #define SETBITS(PORT, BITS) outb( (inb(PORT) | (BITS)), (PORT) ) ! 330: #define CLRBITS(PORT, BITS) outb( (inb(PORT) & ~(BITS)), (PORT) ) ! 331: #define CLRSETBITS(PORT, CLR, SET) outb( (inb(PORT) & ~(CLR)) | (SET) , (PORT) ) ! 332: ! 333: #define TESTHI(PORT, BITS) ((inb(PORT) & (BITS)) == BITS) ! 334: #define TESTLO(PORT, BITS) ((inb(PORT) & (BITS)) == 0) ! 335: ! 336: #ifdef DEBUG_AHA152X ! 337: enum { ! 338: debug_skipports = 0x0001, ! 339: debug_queue = 0x0002, ! 340: debug_intr = 0x0004, ! 341: debug_selection = 0x0008, ! 342: debug_msgo = 0x0010, ! 343: debug_msgi = 0x0020, ! 344: debug_status = 0x0040, ! 345: debug_cmd = 0x0080, ! 346: debug_datai = 0x0100, ! 347: debug_datao = 0x0200, ! 348: debug_abort = 0x0400, ! 349: debug_done = 0x0800, ! 350: debug_biosparam = 0x1000, ! 351: debug_phases = 0x2000, ! 352: debug_queues = 0x4000, ! 353: debug_reset = 0x8000, ! 354: }; ! 355: #endif ! 356: ! 357: #endif /* _AHA152X_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.