[BACK]Return to wdsreg.h CVS log [TXT][DIR] Up to [local] / sys / dev / isa

Annotation of sys/dev/isa/wdsreg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: wdsreg.h,v 1.4 1997/11/07 08:07:11 niklas Exp $       */
                      2:
                      3: typedef u_int8_t physaddr[3];
                      4: typedef u_int8_t physlen[3];
                      5: #define        ltophys _lto3b
                      6: #define        phystol _3btol
                      7:
                      8: /* WD7000 registers */
                      9: #define WDS_STAT               0       /* read */
                     10: #define WDS_IRQSTAT            1       /* read */
                     11:
                     12: #define WDS_CMD                        0       /* write */
                     13: #define WDS_IRQACK             1       /* write */
                     14: #define WDS_HCR                        2       /* write */
                     15:
                     16: #define        WDS_IO_PORTS            8       /* size in I/O-space */
                     17:
                     18: /* WDS_STAT (read) defs */
                     19: #define WDSS_IRQ               0x80
                     20: #define WDSS_RDY               0x40
                     21: #define WDSS_REJ               0x20
                     22: #define WDSS_INIT              0x10
                     23:
                     24: /* WDS_IRQSTAT (read) defs */
                     25: #define WDSI_MASK              0xc0
                     26: #define WDSI_ERR               0x00
                     27: #define WDSI_MFREE             0x80
                     28: #define WDSI_MSVC              0xc0
                     29:
                     30: /* WDS_CMD (write) defs */
                     31: #define WDSC_NOOP              0x00
                     32: #define WDSC_INIT              0x01
                     33: #define WDSC_DISUNSOL          0x02
                     34: #define WDSC_ENAUNSOL          0x03
                     35: #define WDSC_IRQMFREE          0x04
                     36: #define WDSC_SCSIRESETSOFT     0x05
                     37: #define WDSC_SCSIRESETHARD     0x06
                     38: #define WDSC_MSTART(m)         (0x80 + (m))
                     39: #define WDSC_MMSTART(m)                (0xc0 + (m))
                     40:
                     41: /* WDS_HCR (write) defs */
                     42: #define WDSH_IRQEN             0x08
                     43: #define WDSH_DRQEN             0x04
                     44: #define WDSH_SCSIRESET         0x02
                     45: #define WDSH_ASCRESET          0x01
                     46:
                     47: #define WDS_NSEG       17
                     48:
                     49: struct wds_scat_gath {
                     50:        physlen seg_len;
                     51:        physaddr seg_addr;
                     52: };
                     53:
                     54: struct wds_cmd {
                     55:        u_int8_t opcode;
                     56:        u_int8_t targ;
                     57:        struct scsi_generic scb;
                     58:        u_int8_t stat;
                     59:        u_int8_t venderr;
                     60:        physlen len;
                     61:        physaddr data;
                     62:        physaddr link;
                     63:        u_int8_t write;
                     64:        u_int8_t xx[6];
                     65: };
                     66:
                     67: struct wds_scb {
                     68:        struct wds_cmd cmd;
                     69:        struct wds_cmd sense;
                     70:
                     71:        struct wds_scat_gath scat_gath[WDS_NSEG];
                     72:        struct scsi_sense_data sense_data;
                     73:        /*----------------------------------------------------------------*/
                     74: #define SCB_PHYS_SIZE ((int)&((struct wds_scb *)0)->chain)
                     75:
                     76:        TAILQ_ENTRY(wds_scb) chain;
                     77:        struct wds_scb *nexthash;
                     78:        long hashkey;
                     79:        struct scsi_xfer *xs;
                     80:        int flags;
                     81: #define        SCB_ALLOC       0x01
                     82: #define        SCB_ABORT       0x02
                     83: #ifdef WDSDIAG
                     84: #define        SCB_SENDING     0x04
                     85: #endif
                     86: #define        SCB_POLLED      0x08
                     87: #define        SCB_SENSE       0x10
                     88: #define        SCB_DONE        0x20    /* for internal commands only */
                     89: #define        SCB_BUFFER      0x40
                     90:        int timeout;
                     91:
                     92: #ifdef notyet
                     93:        struct isadma_seg scb_phys[1];  /* phys segment of this scb */
                     94:        struct isadma_seg data_phys[WDS_NSEG];  /* phys segments of data */
                     95:        int data_nseg;                  /* number of phys segments of data */
                     96: #endif
                     97:        struct wds_buf *buf;
                     98: };
                     99:
                    100: #define WDSX_SCSICMD           0x00
                    101: #define WDSX_SCSISG            0x01
                    102: #define WDSX_OPEN_RCVBUF       0x80
                    103: #define WDSX_RCV_CMD           0x81
                    104: #define WDSX_RCV_DATA          0x82
                    105: #define WDSX_RCV_DATASTAT      0x83
                    106: #define WDSX_SND_DATA          0x84
                    107: #define WDSX_SND_DATASTAT      0x85
                    108: #define WDSX_SND_CMDSTAT       0x86
                    109: #define WDSX_READINIT          0x88
                    110: #define WDSX_READSCSIID                0x89
                    111: #define WDSX_SETUNSOLIRQMASK   0x8a
                    112: #define WDSX_GETUNSOLIRQMASK   0x8b
                    113: #define WDSX_GETFIRMREV                0x8c
                    114: #define WDSX_EXECDIAG          0x8d
                    115: #define WDSX_SETEXECPARM       0x8e
                    116: #define WDSX_GETEXECPARM       0x8f
                    117:
                    118: struct wds_mbx_out {
                    119:        u_int8_t cmd;
                    120:        physaddr scb_addr;
                    121: };
                    122:
                    123: struct wds_mbx_in {
                    124:        u_int8_t stat;
                    125:        physaddr scb_addr;
                    126: };
                    127:
                    128: /*
                    129:  * mbo.cmd values
                    130:  */
                    131: #define        WDS_MBO_FREE            0x0     /* MBO entry is free */
                    132: #define        WDS_MBO_START           0x1     /* MBO activate entry */
                    133:
                    134: /*
                    135:  * mbi.stat values
                    136:  */
                    137: #define        WDS_MBI_FREE            0x00    /* MBI entry is free */
                    138: #define WDS_MBI_OK             0x01    /* completed without error */
                    139: #define WDS_MBI_OKERR          0x02    /* completed with error */
                    140: #define WDS_MBI_ETIME          0x04
                    141: #define WDS_MBI_ERESET         0x05
                    142: #define WDS_MBI_ETARCMD                0x06
                    143: #define WDS_MBI_ERESEL         0x80
                    144: #define WDS_MBI_ESEL           0x81
                    145: #define WDS_MBI_EABORT         0x82
                    146: #define WDS_MBI_ESRESET                0x83
                    147: #define WDS_MBI_EHRESET                0x84
                    148:
                    149: struct wds_setup {
                    150:        u_int8_t opcode;
                    151:        u_int8_t scsi_id;
                    152:        u_int8_t buson_t;
                    153:        u_int8_t busoff_t;
                    154:        u_int8_t xx;
                    155:        physaddr mbaddr;
                    156:        u_int8_t nomb;
                    157:        u_int8_t nimb;
                    158: };

CVSweb