summaryrefslogtreecommitdiff
path: root/sys/dev/isa/wdsreg.h
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>1996-04-21 22:33:19 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>1996-04-21 22:33:19 +0000
commit67d88b0a9910a68bb666b448d2dac29cb4d3d8c2 (patch)
tree967b89f6e07398a22bd8c76d30179b648776542d /sys/dev/isa/wdsreg.h
parentba95d3c1d69cdb251d15a12ebf70f50b0ea2019b (diff)
partial sync with netbsd 960418, more to come
Diffstat (limited to 'sys/dev/isa/wdsreg.h')
-rw-r--r--sys/dev/isa/wdsreg.h147
1 files changed, 147 insertions, 0 deletions
diff --git a/sys/dev/isa/wdsreg.h b/sys/dev/isa/wdsreg.h
new file mode 100644
index 00000000000..e4f7bdafce7
--- /dev/null
+++ b/sys/dev/isa/wdsreg.h
@@ -0,0 +1,147 @@
+typedef u_char physaddr[3];
+typedef u_char physlen[3];
+#define ltophys _lto3b
+#define phystol _3btol
+
+/* WD7000 registers */
+#define WDS_STAT 0 /* read */
+#define WDS_IRQSTAT 1 /* read */
+
+#define WDS_CMD 0 /* write */
+#define WDS_IRQACK 1 /* write */
+#define WDS_HCR 2 /* write */
+
+/* WDS_STAT (read) defs */
+#define WDSS_IRQ 0x80
+#define WDSS_RDY 0x40
+#define WDSS_REJ 0x20
+#define WDSS_INIT 0x10
+
+/* WDS_IRQSTAT (read) defs */
+#define WDSI_MASK 0xc0
+#define WDSI_ERR 0x00
+#define WDSI_MFREE 0x80
+#define WDSI_MSVC 0xc0
+
+/* WDS_CMD (write) defs */
+#define WDSC_NOOP 0x00
+#define WDSC_INIT 0x01
+#define WDSC_DISUNSOL 0x02
+#define WDSC_ENAUNSOL 0x03
+#define WDSC_IRQMFREE 0x04
+#define WDSC_SCSIRESETSOFT 0x05
+#define WDSC_SCSIRESETHARD 0x06
+#define WDSC_MSTART(m) (0x80 + (m))
+#define WDSC_MMSTART(m) (0xc0 + (m))
+
+/* WDS_HCR (write) defs */
+#define WDSH_IRQEN 0x08
+#define WDSH_DRQEN 0x04
+#define WDSH_SCSIRESET 0x02
+#define WDSH_ASCRESET 0x01
+
+#define WDS_NSEG 17
+
+struct wds_scat_gath {
+ physlen seg_len;
+ physaddr seg_addr;
+};
+
+struct wds_cmd {
+ u_char opcode;
+ u_char targ;
+ struct scsi_generic scb;
+ u_char stat;
+ u_char venderr;
+ physlen len;
+ physaddr data;
+ physaddr link;
+ u_char write;
+ u_char xx[6];
+};
+
+struct wds_scb {
+ struct wds_cmd cmd;
+ struct wds_cmd sense;
+
+ struct wds_scat_gath scat_gath[WDS_NSEG];
+ struct scsi_sense_data sense_data;
+
+ TAILQ_ENTRY(wds_scb) chain;
+ struct wds_scb *nexthash;
+ long hashkey;
+ struct scsi_xfer *xs;
+ int flags;
+#define SCB_ALLOC 0x01
+#define SCB_ABORT 0x02
+#ifdef WDSDIAG
+#define SCB_SENDING 0x04
+#endif
+#define SCB_POLLED 0x08
+#define SCB_SENSE 0x10
+#define SCB_DONE 0x20 /* for internal commands only */
+#define SCB_BUFFER 0x40
+ int timeout;
+
+ struct wds_buf *buf;
+};
+
+#define WDSX_SCSICMD 0x00
+#define WDSX_SCSISG 0x01
+#define WDSX_OPEN_RCVBUF 0x80
+#define WDSX_RCV_CMD 0x81
+#define WDSX_RCV_DATA 0x82
+#define WDSX_RCV_DATASTAT 0x83
+#define WDSX_SND_DATA 0x84
+#define WDSX_SND_DATASTAT 0x85
+#define WDSX_SND_CMDSTAT 0x86
+#define WDSX_READINIT 0x88
+#define WDSX_READSCSIID 0x89
+#define WDSX_SETUNSOLIRQMASK 0x8a
+#define WDSX_GETUNSOLIRQMASK 0x8b
+#define WDSX_GETFIRMREV 0x8c
+#define WDSX_EXECDIAG 0x8d
+#define WDSX_SETEXECPARM 0x8e
+#define WDSX_GETEXECPARM 0x8f
+
+struct wds_mbx_out {
+ u_char cmd;
+ physaddr scb_addr;
+};
+
+struct wds_mbx_in {
+ u_char stat;
+ physaddr scb_addr;
+};
+
+/*
+ * mbo.cmd values
+ */
+#define WDS_MBO_FREE 0x0 /* MBO entry is free */
+#define WDS_MBO_START 0x1 /* MBO activate entry */
+
+/*
+ * mbi.stat values
+ */
+#define WDS_MBI_FREE 0x00 /* MBI entry is free */
+#define WDS_MBI_OK 0x01 /* completed without error */
+#define WDS_MBI_OKERR 0x02 /* completed with error */
+#define WDS_MBI_ETIME 0x04
+#define WDS_MBI_ERESET 0x05
+#define WDS_MBI_ETARCMD 0x06
+#define WDS_MBI_ERESEL 0x80
+#define WDS_MBI_ESEL 0x81
+#define WDS_MBI_EABORT 0x82
+#define WDS_MBI_ESRESET 0x83
+#define WDS_MBI_EHRESET 0x84
+
+struct wds_setup {
+ u_char opcode;
+ u_char scsi_id;
+ u_char buson_t;
+ u_char busoff_t;
+ u_char xx;
+ physaddr mbaddr;
+ u_char nomb;
+ u_char nimb;
+};