Annotation of Gnu-Mach/i386/i386at/gpl/linux/scsi/aha152x.h, revision 1.1

1.1     ! root        1: #ifndef _AHA152X_H
        !             2: #define _AHA152X_H
        !             3: 
        !             4: /*
        !             5:  * $Id: aha152x.h,v 1.1.1.1 1997/02/25 21:27:46 thomas 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 *);
        !            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.1.1 $"
        !            27: 
        !            28: extern struct proc_dir_entry proc_scsi_aha152x;
        !            29: 
        !            30: /* Initial value of Scsi_Host entry */
        !            31: #define AHA152X       { /* next */             NULL,                       \
        !            32:                        /* usage_count */       NULL,                       \
        !            33:                        /* proc_dir */          &proc_scsi_aha152x,         \
        !            34:                        /* proc_info */         aha152x_proc_info,          \
        !            35:                        /* name */              AHA152X_REVID,              \
        !            36:                        /* detect */            aha152x_detect,             \
        !            37:                        /* release */           NULL,                       \
        !            38:                        /* info */              NULL,                       \
        !            39:                        /* command */           aha152x_command,            \
        !            40:                        /* queuecommand */      aha152x_queue,              \
        !            41:                        /* abort */             aha152x_abort,              \
        !            42:                        /* reset */             aha152x_reset,              \
        !            43:                        /* slave_attach */      /* NULL */  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)     \
        !           323:        outb( (VAL), (PORT) )
        !           324: 
        !           325: #define SETPORTP(PORT, VAL)    \
        !           326:        outb_p( (VAL), (PORT) )
        !           327: 
        !           328: #define SETPORTW(PORT, VAL)    \
        !           329:        outw( (VAL), (PORT) )
        !           330: 
        !           331: #define GETPORT(PORT)  \
        !           332:        inb( PORT )
        !           333: 
        !           334: #define GETPORTW(PORT) \
        !           335:        inw( PORT )
        !           336: 
        !           337: #define SETBITS(PORT, BITS)    \
        !           338:        outb( (inb(PORT) | (BITS)), (PORT) )
        !           339: 
        !           340: #define CLRBITS(PORT, BITS)    \
        !           341:        outb( (inb(PORT) & ~(BITS)), (PORT) )
        !           342: 
        !           343: #define CLRSETBITS(PORT, CLR, SET)     \
        !           344:        outb( (inb(PORT) & ~(CLR)) | (SET) , (PORT) )
        !           345: 
        !           346: #define TESTHI(PORT, BITS)     \
        !           347:        ((inb(PORT) & (BITS)) == BITS)
        !           348: 
        !           349: #define TESTLO(PORT, BITS)     \
        !           350:        ((inb(PORT) & (BITS)) == 0)
        !           351: 
        !           352: #ifdef DEBUG_AHA152X
        !           353: enum {
        !           354:        debug_skipports =0x0001,
        !           355:        debug_queue     =0x0002,
        !           356:        debug_intr      =0x0004,
        !           357:        debug_selection =0x0008,
        !           358:        debug_msgo      =0x0010,
        !           359:        debug_msgi      =0x0020,
        !           360:        debug_status    =0x0040,
        !           361:        debug_cmd       =0x0080,
        !           362:        debug_datai     =0x0100,
        !           363:        debug_datao     =0x0200,
        !           364:        debug_abort     =0x0400,
        !           365:        debug_done      =0x0800,
        !           366:        debug_biosparam =0x1000,
        !           367:        debug_phases    =0x2000,
        !           368:        debug_queues    =0x4000,
        !           369:        debug_reset     =0x8000,
        !           370: };
        !           371: #endif
        !           372: 
        !           373: #endif /* _AHA152X_H */

unix.superglobalmegacorp.com

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