Move all ASYNC definitions here (after all, they're mailbox registers).
Clarify FC initialization control block. Add macros for setting WWN into same. Add a wad more definitions in this area.
This commit is contained in:
parent
170521610e
commit
542648bf0e
@ -1,7 +1,6 @@
|
||||
/* $NetBSD: ispmbox.h,v 1.7 1998/07/18 21:05:39 mjacob Exp $ */
|
||||
/* $Id: ispmbox.h,v 1.7 1998/07/18 21:05:39 mjacob Exp $ */
|
||||
/* $Id: ispmbox.h,v 1.8 1998/09/08 07:24:23 mjacob Exp $ */
|
||||
/*
|
||||
* Mailbox and Command Definitions for for Qlogic ISP SCSI adapters.
|
||||
* Mailbox and Queue Entry Definitions for for Qlogic ISP SCSI adapters.
|
||||
*
|
||||
*---------------------------------------
|
||||
* Copyright (c) 1997, 1998 by Matthew Jacob
|
||||
@ -123,6 +122,9 @@
|
||||
#define MBOX_CLEAR_TASK_SET 0x67
|
||||
#define MBOX_ABORT_TASK_SET 0x68
|
||||
#define MBOX_GET_FW_STATE 0x69
|
||||
#define MBOX_GET_LINK_STATUS 0x6a
|
||||
#define MBOX_INIT_LIP_RESET 0x6c
|
||||
#define MBOX_INIT_LIP_LOGIN 0x72
|
||||
|
||||
#define ISP2100_SET_PCI_PARAM 0x00ff
|
||||
|
||||
@ -132,6 +134,42 @@ typedef struct {
|
||||
u_int16_t param[8];
|
||||
} mbreg_t;
|
||||
|
||||
/*
|
||||
* Mailbox Command Complete Status Codes
|
||||
*/
|
||||
#define MBOX_COMMAND_COMPLETE 0x4000
|
||||
#define MBOX_INVALID_COMMAND 0x4001
|
||||
#define MBOX_HOST_INTERFACE_ERROR 0x4002
|
||||
#define MBOX_TEST_FAILED 0x4003
|
||||
#define MBOX_COMMAND_ERROR 0x4005
|
||||
#define MBOX_COMMAND_PARAM_ERROR 0x4006
|
||||
|
||||
/*
|
||||
* Asynchronous event status codes
|
||||
*/
|
||||
#define ASYNC_BUS_RESET 0x8001
|
||||
#define ASYNC_SYSTEM_ERROR 0x8002
|
||||
#define ASYNC_RQS_XFER_ERR 0x8003
|
||||
#define ASYNC_RSP_XFER_ERR 0x8004
|
||||
#define ASYNC_QWAKEUP 0x8005
|
||||
#define ASYNC_TIMEOUT_RESET 0x8006
|
||||
#define ASYNC_UNSPEC_TMODE 0x8007
|
||||
#define ASYNC_EXTMSG_UNDERRUN 0x800A
|
||||
#define ASYNC_SCAM_INT 0x800B
|
||||
#define ASYNC_HUNG_SCSI 0x800C
|
||||
#define ASYNC_KILLED_BUS 0x800D
|
||||
#define ASYNC_BUS_TRANSIT 0x800E /* LVD -> HVD, eg. */
|
||||
#define ASYNC_CMD_CMPLT 0x8020
|
||||
#define ASYNC_CTIO_DONE 0x8021
|
||||
|
||||
/* for ISP2100 only */
|
||||
#define ASYNC_LIP_OCCURRED 0x8010
|
||||
#define ASYNC_LOOP_UP 0x8011
|
||||
#define ASYNC_LOOP_DOWN 0x8012
|
||||
#define ASYNC_LOOP_RESET 0x8013
|
||||
#define ASYNC_PDB_CHANGED 0x8014 /* Port Database Changed */
|
||||
#define ASYNC_CHANGE_NOTIFY 0x8015
|
||||
|
||||
/*
|
||||
* Command Structure Definitions
|
||||
*/
|
||||
@ -162,14 +200,31 @@ typedef struct {
|
||||
#define RQSFLAG_BADPACKET 0x08
|
||||
|
||||
/* RQS entry_type definitions */
|
||||
#define RQSTYPE_REQUEST 1
|
||||
#define RQSTYPE_DATASEG 2
|
||||
#define RQSTYPE_RESPONSE 3
|
||||
#define RQSTYPE_MARKER 4
|
||||
#define RQSTYPE_CMDONLY 5
|
||||
#define RQSTYPE_T2RQS 17
|
||||
#define RQSTYPE_T3RQS 25
|
||||
#define RQSTYPE_T1DSEG 10
|
||||
#define RQSTYPE_REQUEST 0x01
|
||||
#define RQSTYPE_DATASEG 0x02
|
||||
#define RQSTYPE_RESPONSE 0x03
|
||||
#define RQSTYPE_MARKER 0x04
|
||||
#define RQSTYPE_CMDONLY 0x05
|
||||
#define RQSTYPE_ATIO 0x06 /* Target Mode */
|
||||
#define RQSTYPE_CTIO0 0x07 /* Target Mode */
|
||||
#define RQSTYPE_SCAM 0x08
|
||||
#define RQSTYPE_A64 0x09
|
||||
#define RQSTYPE_A64_CONT 0x0a
|
||||
#define RQSTYPE_ENABLE_LUN 0x0b /* Target Mode */
|
||||
#define RQSTYPE_MODIFY_LUN 0x0c /* Target Mode */
|
||||
#define RQSTYPE_NOTIFY 0x0d /* Target Mode */
|
||||
#define RQSTYPE_NOTIFY_ACK 0x0e /* Target Mode */
|
||||
#define RQSTYPE_CTIO1 0x0f /* Target Mode */
|
||||
#define RQSTYPE_STATUS_CONT 0x10
|
||||
#define RQSTYPE_T2RQS 0x11
|
||||
|
||||
#define RQSTYPE_T4RQS 0x15
|
||||
#define RQSTYPE_ATIO2 0x16
|
||||
#define RQSTYPE_CTIO2 0x17
|
||||
#define RQSTYPE_CSET0 0x18
|
||||
#define RQSTYPE_T3RQS 0x19
|
||||
|
||||
#define RQSTYPE_CTIO3 0x1f
|
||||
|
||||
|
||||
#define ISP_RQDSEG 4
|
||||
@ -227,6 +282,13 @@ typedef struct {
|
||||
#define REQFLAG_DATA_UNKNOWN 0x0060
|
||||
|
||||
#define REQFLAG_DISARQ 0x0100
|
||||
#define REQFLAG_FRC_ASYNC 0x0200
|
||||
#define REQFLAG_FRC_SYNC 0x0400
|
||||
#define REQFLAG_FRC_WIDE 0x0800
|
||||
#define REQFLAG_NOPARITY 0x1000
|
||||
#define REQFLAG_STOPQ 0x2000
|
||||
#define REQFLAG_XTRASNS 0x4000
|
||||
#define REQFLAG_PRIORITY 0x8000
|
||||
|
||||
typedef struct {
|
||||
isphdr_t req_header;
|
||||
@ -321,6 +383,17 @@ typedef struct {
|
||||
#define RQCS_ID_MSG_FAILED 0x0013
|
||||
#define RQCS_UNEXP_BUS_FREE 0x0014
|
||||
#define RQCS_DATA_UNDERRUN 0x0015
|
||||
#define RQCS_XACT_ERR1 0x0018
|
||||
#define RQCS_XACT_ERR2 0x0019
|
||||
#define RQCS_XACT_ERR3 0x001A
|
||||
#define RQCS_BAD_ENTRY 0x001B
|
||||
#define RQCS_QUEUE_FULL 0x001C
|
||||
#define RQCS_PHASE_SKIPPED 0x001D
|
||||
#define RQCS_ARQS_FAILED 0x001E
|
||||
#define RQCS_WIDE_FAILED 0x001F
|
||||
#define RQCS_SYNCXFER_FAILED 0x0020
|
||||
#define RQCS_LVD_BUSERR 0x0021
|
||||
|
||||
/* 2100 Only Completion Codes */
|
||||
#define RQCS_PORT_UNAVAILABLE 0x0028
|
||||
#define RQCS_PORT_LOGGED_OUT 0x0029
|
||||
@ -350,12 +423,94 @@ typedef struct {
|
||||
#define RQSTF_TIMEOUT 0x0040
|
||||
#define RQSTF_NEGOTIATION 0x0080
|
||||
|
||||
/*
|
||||
* Target Mode Structures
|
||||
*/
|
||||
/*
|
||||
* Used for Enable LUN and Modify Lun types.
|
||||
* (for FC, pre-1.14 FW layout revision).
|
||||
*/
|
||||
typedef struct {
|
||||
isphdr_t req_header;
|
||||
u_int32_t req_handle;
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
u_int8_t _reserved0;
|
||||
u_int8_t req_lun; /* HOST->FW: LUN to enable */
|
||||
#else
|
||||
u_int8_t req_lun; /* HOST->FW: LUN to enable */
|
||||
u_int8_t _reserved0;
|
||||
#endif
|
||||
u_int16_t _reserved1[3];
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
u_int8_t _reserved2;
|
||||
u_int8_t req_status; /* FW->HOST: Status of Request */
|
||||
u_int8_t req_imcount; /* HOST->FW: Immediate Notify Count */
|
||||
u_int8_t req_cmdcount; /* HOST->FW: ATIO Count */
|
||||
#else
|
||||
u_int8_t req_status; /* FW->HOST: Status of Request */
|
||||
u_int8_t _reserved2;
|
||||
u_int8_t req_cmdcount; /* HOST->FW: ATIO Count */
|
||||
u_int8_t req_imcount; /* HOST->FW: Immediate Notify Count */
|
||||
#endif
|
||||
u_int16_t _reserved3;
|
||||
u_int16_t req_timeout; /* HOST->FW: Lun timeout value */
|
||||
} isplun_t;
|
||||
|
||||
typedef struct {
|
||||
isphdr_t req_header;
|
||||
u_int32_t req_handle;
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
u_int8_t req_initiator;
|
||||
u_int8_t req_lun;
|
||||
#else
|
||||
u_int8_t req_lun;
|
||||
u_int8_t req_initiator;
|
||||
#endif
|
||||
u_int16_t _reserved1[3];
|
||||
u_int16_t req_status;
|
||||
u_int16_t req_task_flags;
|
||||
u_int16_t req_sequence;
|
||||
} ispnotify_t;
|
||||
|
||||
typedef struct {
|
||||
isphdr_t req_header;
|
||||
u_int32_t req_handle;
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
u_int8_t req_initiator;
|
||||
u_int8_t req_lun;
|
||||
#else
|
||||
u_int8_t req_lun;
|
||||
u_int8_t req_initiator;
|
||||
#endif
|
||||
u_int16_t req_rxid;
|
||||
u_int16_t req_flags;
|
||||
u_int16_t req_status;
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
u_int8_t req_taskcodes;
|
||||
u_int8_t _reserved0;
|
||||
u_int8_t req_execodes;
|
||||
u_int8_t req_taskflags;
|
||||
#else
|
||||
u_int8_t _reserved0;
|
||||
u_int8_t req_taskcodes;
|
||||
u_int8_t req_taskflags;
|
||||
u_int8_t req_execodes;
|
||||
#endif
|
||||
u_int32_t req_cdb[4];
|
||||
u_int32_t req_datalen;
|
||||
u_int32_t _reserved1;;
|
||||
u_int16_t req_scsi_status;
|
||||
u_int8_t req_sense[8];
|
||||
} ispatiot2_t;
|
||||
|
||||
/*
|
||||
* FC (ISP2100) specific data structures
|
||||
*/
|
||||
|
||||
/*
|
||||
* Initialization Control Block
|
||||
*
|
||||
* Version One format.
|
||||
*/
|
||||
typedef struct {
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
@ -376,9 +531,16 @@ typedef struct {
|
||||
u_int8_t icb_retry_count;
|
||||
u_int8_t icb_retry_delay;
|
||||
#endif
|
||||
u_int16_t icb_nodename[4];
|
||||
u_int8_t icb_nodename[8];
|
||||
u_int16_t icb_hardaddr;
|
||||
u_int16_t _reserved1[5];
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
u_int8_t _reserved1;
|
||||
u_int8_t icb_iqdevtype;
|
||||
#else
|
||||
u_int8_t icb_iqdevtype;
|
||||
u_int8_t _reserved1;
|
||||
#endif
|
||||
u_int8_t icb_portname[8];
|
||||
u_int16_t icb_rqstout;
|
||||
u_int16_t icb_rspnsin;
|
||||
u_int16_t icb_rqstqlen;
|
||||
@ -386,10 +548,63 @@ typedef struct {
|
||||
u_int16_t icb_rqstaddr[4];
|
||||
u_int16_t icb_respaddr[4];
|
||||
} isp_icb_t;
|
||||
#define ICB_VERSION1 1
|
||||
|
||||
#define ICB_DFLT_FRMLEN 1024
|
||||
#define MAKE_NODE_NAME(isp, icbp) \
|
||||
(icbp)->icb_nodename[0] = 0, (icbp)->icb_nodename[1] = 0x5355,\
|
||||
(icbp)->icb_nodename[2] = 0x4E57, (icbp)->icb_nodename[3] = 0
|
||||
#define ICBOPT_HARD_ADDRESS (1<<0)
|
||||
#define ICBOPT_FAIRNESS (1<<1)
|
||||
#define ICBOPT_FULL_DUPLEX (1<<2)
|
||||
#define ICBOPT_FAST_POST (1<<3)
|
||||
#define ICBOPT_TGT_ENABLE (1<<4)
|
||||
#define ICBOPT_INI_DISABLE (1<<5)
|
||||
#define ICBOPT_INI_ADISC (1<<6)
|
||||
#define ICBOPT_INI_TGTTYPE (1<<7)
|
||||
#define ICBOPT_PDBCHANGE_AE (1<<8)
|
||||
#define ICBOPT_NOLIP (1<<9)
|
||||
#define ICBOPT_SRCHDOWN (1<<10)
|
||||
#define ICBOPT_PREVLOOP (1<<11)
|
||||
#define ICBOPT_STOP_ON_QFULL (1<<12)
|
||||
#define ICBOPT_FULL_LOGIN (1<<13)
|
||||
#define ICBOPT_USE_PORTNAME (1<<14)
|
||||
|
||||
|
||||
#define ICB_MIN_FRMLEN 256
|
||||
#define ICB_MAX_FRMLEN 2112
|
||||
#define ICB_DFLT_FRMLEN 1024
|
||||
|
||||
#define RQRSP_ADDR0015 0
|
||||
#define RQRSP_ADDR1631 1
|
||||
#define RQRSP_ADDR3247 2
|
||||
#define RQRSP_ADDR4863 3
|
||||
|
||||
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
#define ICB_NNM0 6
|
||||
#define ICB_NNM1 7
|
||||
#define ICB_NNM2 4
|
||||
#define ICB_NNM3 5
|
||||
#define ICB_NNM4 2
|
||||
#define ICB_NNM5 3
|
||||
#define ICB_NNM6 0
|
||||
#define ICB_NNM7 1
|
||||
#else
|
||||
#define ICB_NNM0 7
|
||||
#define ICB_NNM1 6
|
||||
#define ICB_NNM2 5
|
||||
#define ICB_NNM3 4
|
||||
#define ICB_NNM4 3
|
||||
#define ICB_NNM5 2
|
||||
#define ICB_NNM6 1
|
||||
#define ICB_NNM7 0
|
||||
#endif
|
||||
|
||||
#define MAKE_NODE_NAME_FROM_WWN(array, wwn) \
|
||||
array[ICB_NNM0] = (u_int8_t) ((wwn >> 0) & 0xff), \
|
||||
array[ICB_NNM1] = (u_int8_t) ((wwn >> 8) & 0xff), \
|
||||
array[ICB_NNM2] = (u_int8_t) ((wwn >> 16) & 0xff), \
|
||||
array[ICB_NNM3] = (u_int8_t) ((wwn >> 24) & 0xff), \
|
||||
array[ICB_NNM4] = (u_int8_t) ((wwn >> 32) & 0xff), \
|
||||
array[ICB_NNM5] = (u_int8_t) ((wwn >> 40) & 0xff), \
|
||||
array[ICB_NNM6] = (u_int8_t) ((wwn >> 48) & 0xff), \
|
||||
array[ICB_NNM7] = (u_int8_t) ((wwn >> 56) & 0xff)
|
||||
|
||||
#endif /* _ISPMBOX_H */
|
||||
|
Loading…
Reference in New Issue
Block a user