Annotation of coherent/d/PS2_KERNEL/include/sys/aha154x.h, revision 1.1

1.1     ! root        1: #ifndef        AHA154X_H
        !             2: #define        AHA154X_H
        !             3: 
        !             4: /*
        !             5:  *     describe the data structures neccessary to
        !             6:  *     access the Hard/Firmware of the AHA-154x family.
        !             7:  *
        !             8:  *     First the hardware which consists of three I/O ports.
        !             9:  */
        !            10: 
        !            11: #define        AHA_CONTROL     (0*0+0)
        !            12: #define        AHA_HARDRESET   0x80    /* Hard */
        !            13: #define        AHA_SOFTRESET   0x40    /* Soft */
        !            14: #define        AHA_INTRRESET   0x20    /* Interrupt */
        !            15: #define        AHA_SCSIRESET   0x10    /* SCSI */
        !            16: /* ... Reserved ... */
        !            17: 
        !            18: #define        AHA_STATUS      (0*0+0)
        !            19: #define        AHA_SELFTEST    0x80            /* SELF TEST in progress */
        !            20: #define        AHA_DIAGFAIL    0x40            /* DIAGnostics FAILed */
        !            21: #define        AHA_INITMAIL    0x20            /* INIT of MAILbox required */
        !            22: #define        AHA_SCSIIDLE    0x10            /* SCSI host adaptor IDLE */
        !            23: #define        AHA_CDOPFULL    0x08            /* Command/Data Out Port FULL */
        !            24: #define        AHA_DIPFULL     0x04            /* Data In Port FULL */
        !            25: /* ... Reserved ... */
        !            26: #define        AHA_INVDCMD     0x01            /* INValiD CoMmanD */
        !            27: 
        !            28: #define        AHA_READ        (0*0+1)
        !            29: #define        AHA_WRITE       (0*0+1)
        !            30: 
        !            31: #define        AHA_INTERRUPT   (0*0+2)
        !            32: #define        AHA_ANY_INTER   0x80
        !            33: /* ... Reserved ... */
        !            34: #define        AHA_RESETED     0x08
        !            35: #define        AHA_CMD_DONE    0x04
        !            36: #define        AHA_MBO_EMPTY   0x02
        !            37: #define        AHA_MBI_STORED  0x01
        !            38: #define        AHA_ALL_INTERRUPTS      \
        !            39:        (AHA_RESETED|AHA_CMD_DONE|AHA_MBO_EMPTY|AHA_MBI_STORED)
        !            40: 
        !            41: /*
        !            42:  *     Command Control Block Opcodes.
        !            43:  */
        !            44: #define AHA_OP_SIC     0x00    /* SCSI Initiator Command Control Block */
        !            45: #define AHA_OP_TCC     0x01    /* SCSI Target Command Control Block */
        !            46: #define AHA_OP_SIC_SG  0x02    /* SCSI Initiator Command Control Block
        !            47:                                * with Scatter/Gather */
        !            48: #define AHA_OP_SIC_res 0x03    /* SCSI Initiator Command,
        !            49:                                 * residual data length returned.  */
        !            50: #define AHA_OP_SIC_SG_res 0x04 /* SCSI Initiator Command
        !            51:                                 * with Scatter/Gather,
        !            52:                                 * residual data length returned.  */
        !            53: #define AHA_OP_SPQR    0x81    /* SCSI Bus Device Reset
        !            54:                                 * (a work of the people :-)  */
        !            55: #define AHA_OP_INVALID 0x22    /* This randomly chosen command is used to
        !            56:                                 * mark a ccb as invalidated. */
        !            57: 
        !            58: /*
        !            59:  *     Adapter Firmware Components
        !            60:  */
        !            61: #define        AHA_DO_NOP              0x00
        !            62: #define        AHA_DO_MAILBOX_INIT     0x01
        !            63:        /* DATA send = MB count, MB adr[3] */
        !            64: #define        AHA_DO_SCSI_START       0x02
        !            65: #define        AHA_DO_BIOS_START       0x03
        !            66: #define        AHA_DO_INQUIRY          0x04
        !            67:        /* DATA recv =  board id (ASCII)
        !            68:                        special options id (standard = 'A')
        !            69:                        HW rev level (ASCII)
        !            70:                        FirmWare rev level (ASCII)*/
        !            71: #define        AHA_DO_MBO_INTR_ON      0x05
        !            72:        /* DATA send = 0/1 = Dis/Enable INTR */
        !            73: #define        AHA_DO_SET_TIMEOUT      0x06
        !            74:        /* DATA send =  0/1 = Dis/Enable Timeout
        !            75:                        ...reserved...
        !            76:                        value[MSB] default = 250 millisec
        !            77:                        value[LSB] */
        !            78: #define        AHA_DO_BUS_ON_TIME      0x07
        !            79:        /* DATA send =  2 to 15 microsec. */
        !            80: #define        AHA_DO_BUS_OFF_TIME     0x08
        !            81:        /* DATA send =  1 to 64 microsec. */
        !            82: #define        AHA_DO_XFER_SPEED       0x09
        !            83: #define        AHA_SPEED_5_0_MB        0x00
        !            84: #define        AHA_SPEED_6_7_MB        0x01
        !            85: #define        AHA_SPEED_8_0_MB        0x02
        !            86: #define        AHA_SPEED_10_MB         0x03
        !            87: #define        AHA_SPEED_5_7_MB        0x04
        !            88: #define        AHA_SPEED_CUSTOM        0x80
        !            89:        /* see Chap. 5.1.1.10 */
        !            90: #define        AHA_DO_GET_DEVICES      0x0A
        !            91:        /* DATA recv =  eight bytes, one per target
        !            92:                whereby each bit indicates if a LUN is installed */
        !            93: #define        AHA_DO_GET_CONFIG       0x0B
        !            94:        /* DATA recv =  DMA Arb. Priority,
        !            95:                        Inter. Channel,
        !            96:                        SCSI Id. */
        !            97: #define        AHA_DO_TARGET_ON        0x0C
        !            98:        /* DATA send =  0/1 = Dis/Enable Target Mode
        !            99:                        LUN mask, 1 -> LUN will respond in Target Mode */
        !           100: #define        AHA_DO_GET_SETUP        0x0D
        !           101:        /* DATA send =  n, count requested, 0 -> 256 bytes
        !           102:           DATA recv =  00 SDT + Parity,
        !           103:                        01 Transfer Speed,
        !           104:                        02 Bus On Time,
        !           105:                        03 Bus Off Time,
        !           106:                        04 # MB's,
        !           107:                        05-07 MailBox Adr,
        !           108:                        08-0F Sync Transfer Agreements,
        !           109:                        10-FF Reserved (default 00) */
        !           110:                        
        !           111: /* ... reserved ... */
        !           112: #define        AHA_DO_PUT_CH2_BUF      0x1A
        !           113:        /* DATA send =  00-02 Buffer Area (64 bytes) Address */
        !           114: #define        AHA_DO_GET_CH2_BUF      0x1B
        !           115:        /* DATA send =  00-02 Buffer Area (64 bytes) Address */
        !           116: #define        AHA_DO_PUT_FIFO_BUF     0x1C
        !           117:        /* DATA send =  00-02 FIFO Area (54 bytes) Address */
        !           118: #define        AHA_DO_GET_FIFO_BUF     0x1D
        !           119:        /* DATA send =  00-02 FIFO Area (54 bytes) Address */
        !           120: /* ... reserved ... */
        !           121: #define        AHA_DO_ECHO_CMD_DATA    0x1F
        !           122:        /* DATA send =  1 byte
        !           123:           DATA recv =  1 byte, hopefully the same one ! */
        !           124: 
        !           125: /* A P3 is a 3 byte physical address.  */
        !           126: typedef unsigned char P3[3];
        !           127: 
        !           128: typedef        struct  {
        !           129: #      define  MBO_IS_FREE     0x00
        !           130: #      define  MBO_TO_START    0x01
        !           131: #      define  MBO_IS_ABORT    0x02
        !           132:        char    state;
        !           133:        P3      ccb_adr;
        !           134: }      MBO;
        !           135: 
        !           136: /*
        !           137:  * MBI for CCB completed
        !           138:  */
        !           139: typedef        struct  {
        !           140: #      define  MBI_IS_FREE     0x00
        !           141: #      define  MBI_NO_ERROR    0x01
        !           142: #      define  MBI_IS_ABORT    0x02
        !           143: #      define  MBI_NOT_FOUND   0x03
        !           144: #      define  MBI_HAS_ERROR   0x04
        !           145:        char    state;
        !           146:        /* MBI for CCB required */
        !           147:        /* byte 0 */
        !           148: #      define  MBI_CCB_REQUEST 0x10
        !           149:                /* byte 1 */
        !           150: #              define  MBI_MSK_INITOR  0xE0
        !           151: #              define  MBI_WAS_READ    0x10
        !           152: #              define  MBI_WAS_WRITE   0x08
        !           153: #              define  MBI_MSK_LUN     0x03
        !           154:                /* byte 2,3 are data len */
        !           155:        P3      ccb_adr;
        !           156: }      MBI;
        !           157: 
        !           158: #ifndef        MAX_SCSICMD
        !           159: #define        MAX_SCSICMD     14
        !           160: #endif /* MAX_SCSICMD */
        !           161: 
        !           162: #ifndef        MAX_SENSEDATA
        !           163: #define        MAX_SENSEDATA   27
        !           164: #endif /* MAX_SENSEDATA */
        !           165: 
        !           166: typedef        struct  {
        !           167:        unsigned char   cmd;
        !           168:        P3      adr;
        !           169: }      mailentry;
        !           170: 
        !           171: #define        SENSE_UNIT_ATTENTION    6
        !           172: #define        CHECK_TARGET_STATUS     2
        !           173: typedef        struct  {
        !           174:        char    opcode;
        !           175:        char    target;
        !           176: #define        AHA_CCB_DATA_OUT        0x10
        !           177: #define        AHA_CCB_DATA_IN         0x08
        !           178:        char    cmdlen;
        !           179:        char    senselen;
        !           180:        P3      datalen;
        !           181:        P3      dataptr;
        !           182:        P3      linkptr;
        !           183:        char    linkid;
        !           184:        char    hoststatus;
        !           185:        char    targetstatus;
        !           186:        char    reserve[2];
        !           187:        unsigned char   cmd_status[MAX_SCSICMD+MAX_SENSEDATA];
        !           188:        scsi_work_t     *ccb_sw;
        !           189:        unsigned char   buffer[1];
        !           190: }      ccb_t;
        !           191:  
        !           192: #ifdef _I386
        !           193: /* These macros are for stashing away P3 addresses for ccbs.  */
        !           194: #define ccb_forget( a_ccb )    mem_forget( a_ccb )
        !           195: #define ccb_remember( a_ccb, a_p3 ) \
        !           196:        mem_remember( (a_ccb), aha_p3_to_l( a_p3 ) )
        !           197: #define ccb_recall( a_p3 )     mem_recall( aha_p3_to_l( a_p3 ) )
        !           198: 
        !           199: typedef struct {
        !           200:        P3 size;
        !           201:        P3 addr;
        !           202: } DSL_ENTRY;   
        !           203: #endif /* _I386 */
        !           204: 
        !           205: #endif /* of AHA154X_H */

unix.superglobalmegacorp.com

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