diff options
| author | mjacob <mjacob@NetBSD.org> | 1997-08-16 00:18:36 +0000 |
|---|---|---|
| committer | mjacob <mjacob@NetBSD.org> | 1997-08-16 00:18:36 +0000 |
| commit | 49d40727ffe2cb6219865d75b2d0cc12f36fec0e (patch) | |
| tree | 7e6788d0f471e7ba8cd691551f1decbb012fa3ce /sys/dev | |
| parent | 2c7696de168aa6e79189d8b1cf5ccf0904d81459 (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.h | 152 |
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)) |
