summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authormjacob <mjacob@NetBSD.org>1997-08-16 00:18:36 +0000
committermjacob <mjacob@NetBSD.org>1997-08-16 00:18:36 +0000
commit49d40727ffe2cb6219865d75b2d0cc12f36fec0e (patch)
tree7e6788d0f471e7ba8cd691551f1decbb012fa3ce /sys/dev
parent2c7696de168aa6e79189d8b1cf5ccf0904d81459 (diff)
Defines and structures necessary to support the Qlogic 2100 (Fibre Channel
PCI card); Some additional defines to try and manage various flavors of the SCSI host adapters (parameters for various SYNC modes).
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ic/ispvar.h152
1 files changed, 109 insertions, 43 deletions
diff --git a/sys/dev/ic/ispvar.h b/sys/dev/ic/ispvar.h
index 04480eedea2..4a45d761a75 100644
--- a/sys/dev/ic/ispvar.h
+++ b/sys/dev/ic/ispvar.h
@@ -1,4 +1,4 @@
-/* $NetBSD: ispvar.h,v 1.5 1997/06/08 06:31:53 thorpej Exp $ */
+/* $NetBSD: ispvar.h,v 1.6 1997/08/16 00:18:36 mjacob Exp $ */
/*
* Soft Definitions for for Qlogic ISP SCSI adapters.
@@ -51,9 +51,11 @@ struct ispmdvec {
__P((struct ispsoftc *, struct scsi_xfer *, u_int32_t));
void (*dv_reset0) __P((struct ispsoftc *));
void (*dv_reset1) __P((struct ispsoftc *));
+ void (*dv_dregs) __P((struct ispsoftc *));
const u_int16_t *dv_ispfw; /* ptr to f/w */
u_int16_t dv_fwlen; /* length of f/w */
u_int16_t dv_codeorg; /* code ORG for f/w */
+ u_int16_t dv_fwrev; /* f/w revision */
/*
* Initial values for conf1 register
*/
@@ -63,15 +65,94 @@ struct ispmdvec {
#define MAX_TARGETS 16
#define MAX_LUNS 8
+#define MAX_FC_TARG 126
-#define RQUEST_QUEUE_LEN 256
-#define RESULT_QUEUE_LEN (RQUEST_QUEUE_LEN >> 3)
+#define MAXISPREQUEST 256
+#define RQUEST_QUEUE_LEN(isp) MAXISPREQUEST
+#define RESULT_QUEUE_LEN(isp) (RQUEST_QUEUE_LEN(isp) >> 2)
#define QENTRY_LEN 64
#define ISP_QUEUE_ENTRY(q, idx) ((q) + ((idx) * QENTRY_LEN))
#define ISP_QUEUE_SIZE(n) ((n) * QENTRY_LEN)
/*
+ * SCSI (as opposed to FC-PH) Specific Host Adapter Parameters
+ */
+
+typedef struct {
+ u_int16_t isp_adapter_enabled : 1,
+ isp_req_ack_active_neg : 1,
+ isp_data_line_active_neg: 1,
+ isp_cmd_dma_burst_enable: 1,
+ isp_data_dma_burst_enabl: 1,
+ isp_fifo_threshold : 2,
+ isp_diffmode : 1,
+ isp_initiator_id : 4,
+ isp_async_data_setup : 4;
+ u_int16_t isp_selection_timeout;
+ u_int16_t isp_max_queue_depth;
+ u_int16_t isp_clock;
+ u_int8_t isp_tag_aging;
+ u_int8_t isp_bus_reset_delay;
+ u_int8_t isp_retry_count;
+ u_int8_t isp_retry_delay;
+ struct {
+ u_int8_t dev_flags; /* Device Flags - see below */
+ u_int8_t exc_throttle;
+ u_int8_t sync_period;
+ u_int8_t sync_offset : 4,
+ dev_enable : 1;
+ } isp_devparam[MAX_TARGETS];
+} sdparam; /* scsi device parameters */
+
+/*
+ * Device Flags
+ */
+#define DPARM_DISC 0x80
+#define DPARM_PARITY 0x40
+#define DPARM_WIDE 0x20
+#define DPARM_SYNC 0x10
+#define DPARM_TQING 0x08
+#define DPARM_ARQ 0x04
+#define DPARM_QFRZ 0x02
+#define DPARM_RENEG 0x01
+#define DPARM_DEFAULT (0xff & ~DPARM_QFRZ)
+
+#define ISP_20M_SYNCPARMS 0x080c
+#define ISP_10M_SYNCPARMS 0x0c19
+#define ISP_08M_SYNCPARMS 0x0c25
+#define ISP_05M_SYNCPARMS 0x0c32
+#define ISP_04M_SYNCPARMS 0x0c41
+
+/*
+ * Fibre Channel Specifics
+ */
+typedef struct {
+ u_int64_t isp_wwn; /* WWN of adapter */
+ u_int8_t isp_loopid; /* FCAL of this adapter inst */
+ u_int8_t isp_retry_count;
+ u_int8_t isp_retry_delay;
+ u_int8_t isp_fwstate; /* ISP F/W state */
+
+ /*
+ * Scratch DMA mapped in area to fetch Port Database stuff, etc.
+ */
+ volatile caddr_t isp_scratch;
+ u_int32_t isp_scdma;
+} fcparam;
+
+#define ISP2100_SCRLEN 0x100
+
+#define FW_CONFIG_WAIT 0x0000
+#define FW_WAIT_AL_PA 0x0001
+#define FW_WAIT_LOGIN 0x0002
+#define FW_READY 0x0003
+#define FW_LOSS_OF_SYNC 0x0004
+#define FW_ERROR 0x0005
+#define FW_REINIT 0x0006
+#define FW_NON_PART 0x0007
+
+/*
* Soft Structure per host adapter
*/
struct ispsoftc {
@@ -79,33 +160,17 @@ struct ispsoftc {
struct ispmdvec * isp_mdvec;
#define isp_name isp_dev.dv_xname
struct scsi_link isp_link;
- u_int8_t isp_max_target;
u_int8_t isp_state;
+ int8_t isp_dblev;
+ u_int16_t isp_fwrev;
+
/*
- * Host Adapter Parameters, nominally stored in NVRAM
+ * Host Adapter Type and Parameters.
+ * Some parameters nominally stored in NVRAM on card.
*/
- u_int16_t isp_adapter_enabled : 1,
- isp_req_ack_active_neg : 1,
- isp_data_line_active_neg: 1,
- isp_cmd_dma_burst_enable: 1,
- isp_data_dma_burst_enabl: 1,
- isp_fifo_threshold : 2,
- : 1,
- isp_initiator_id : 4,
- isp_async_data_setup : 4;
- u_int16_t isp_selection_timeout;
- u_int16_t isp_max_queue_depth;
- u_int8_t isp_tag_aging;
- u_int8_t isp_bus_reset_delay;
- u_int8_t isp_retry_count;
- u_int8_t isp_retry_delay;
- struct {
- u_int8_t dev_flags; /* Device Flags - see below */
- u_int8_t exc_throttle;
- u_int8_t sync_period;
- u_int8_t sync_offset : 4,
- dev_enable : 1;
- } isp_devparam[MAX_TARGETS];
+ u_int8_t isp_type;
+ void * isp_param;
+
/*
* Result and Request Queues.
*/
@@ -113,6 +178,7 @@ struct ispsoftc {
volatile u_int8_t isp_residx; /* index of next result */
volatile u_int8_t isp_sendmarker;
volatile u_int8_t isp_seqno;
+
/*
* Sheer laziness, but it gets us around the problem
* where we don't have a clean way of remembering
@@ -122,9 +188,10 @@ struct ispsoftc {
* jeez, so I blow a couple of KB per host adapter...
* and it *is* faster.
*/
- volatile struct scsi_xfer *isp_xflist[RQUEST_QUEUE_LEN];
+ volatile struct scsi_xfer *isp_xflist[MAXISPREQUEST];
+
/*
- * request/result queue
+ * request/result queues
*/
volatile caddr_t isp_rquest;
volatile caddr_t isp_result;
@@ -133,6 +200,17 @@ struct ispsoftc {
};
/*
+ * Adapter Variants
+ */
+#define ISP_HA_SCSI 0xf
+#define ISP_HA_SCSI_UNKNOWN 0x0
+#define ISP_HA_SCSI_1020 0x1
+#define ISP_HA_SCSI_1040A 0x2
+#define ISP_HA_SCSI_1040B 0x3
+#define ISP_HA_FC 0xf0
+#define ISP_HA_FC_2100 0x10
+
+/*
* ISP States
*/
#define ISP_NILSTATE 0
@@ -141,19 +219,6 @@ struct ispsoftc {
#define ISP_RUNSTATE 3
-/*
- * Device Flags
- */
-#define DPARM_DISC 0x80
-#define DPARM_PARITY 0x40
-#define DPARM_WIDE 0x20
-#define DPARM_SYNC 0x10
-#define DPARM_TQING 0x08
-#define DPARM_ARQ 0x04
-#define DPARM_QFRZ 0x02
-#define DPARM_RENEG 0x01
-
-#define DPARM_DEFAULT (0xff & ~DPARM_QFRZ)
/*
@@ -180,7 +245,8 @@ struct ispsoftc {
if ((isp)->isp_mdvec->dv_reset0) (*(isp)->isp_mdvec->dv_reset0)((isp))
#define ISP_RESET1(isp) \
if ((isp)->isp_mdvec->dv_reset1) (*(isp)->isp_mdvec->dv_reset1)((isp))
-
+#define ISP_DUMPREGS(isp) \
+ if ((isp)->isp_mdvec->dv_dregs) (*(isp)->isp_mdvec->dv_dregs)((isp))
#define ISP_SETBITS(isp, reg, val) \
(*(isp)->isp_mdvec->dv_wr_reg)((isp), (reg), ISP_READ((isp), (reg)) | (val))