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