📄 ispmbox.h
字号:
#define RQCS_ABORTED 0x0005#define RQCS_TIMEOUT 0x0006#define RQCS_DATA_OVERRUN 0x0007#define RQCS_DATA_UNDERRUN 0x0015#define RQCS_QUEUE_FULL 0x001C/* 1X00 Only Completion Codes */#define RQCS_INCOMPLETE 0x0001#define RQCS_TRANSPORT_ERROR 0x0003#define RQCS_COMMAND_OVERRUN 0x0008#define RQCS_STATUS_OVERRUN 0x0009#define RQCS_BAD_MESSAGE 0x000a#define RQCS_NO_MESSAGE_OUT 0x000b#define RQCS_EXT_ID_FAILED 0x000c#define RQCS_IDE_MSG_FAILED 0x000d#define RQCS_ABORT_MSG_FAILED 0x000e#define RQCS_REJECT_MSG_FAILED 0x000f#define RQCS_NOP_MSG_FAILED 0x0010#define RQCS_PARITY_ERROR_MSG_FAILED 0x0011#define RQCS_DEVICE_RESET_MSG_FAILED 0x0012#define RQCS_ID_MSG_FAILED 0x0013#define RQCS_UNEXP_BUS_FREE 0x0014#define RQCS_XACT_ERR1 0x0018#define RQCS_XACT_ERR2 0x0019#define RQCS_XACT_ERR3 0x001A#define RQCS_BAD_ENTRY 0x001B#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/* 2X00 Only Completion Codes */#define RQCS_PORT_UNAVAILABLE 0x0028#define RQCS_PORT_LOGGED_OUT 0x0029#define RQCS_PORT_CHANGED 0x002A#define RQCS_PORT_BUSY 0x002B/* * 1X00 specific State Flags */#define RQSF_GOT_BUS 0x0100#define RQSF_GOT_TARGET 0x0200#define RQSF_SENT_CDB 0x0400#define RQSF_XFRD_DATA 0x0800#define RQSF_GOT_STATUS 0x1000#define RQSF_GOT_SENSE 0x2000#define RQSF_XFER_COMPLETE 0x4000/* * 2X00 specific State Flags * (same as 1X00 except RQSF_GOT_BUS/RQSF_GOT_TARGET are not available) */#define RQSF_DATA_IN 0x0020#define RQSF_DATA_OUT 0x0040#define RQSF_STAG 0x0008#define RQSF_OTAG 0x0004#define RQSF_HTAG 0x0002/* * 1X00 Status Flags */#define RQSTF_DISCONNECT 0x0001#define RQSTF_SYNCHRONOUS 0x0002#define RQSTF_PARITY_ERROR 0x0004#define RQSTF_BUS_RESET 0x0008#define RQSTF_DEVICE_RESET 0x0010#define RQSTF_ABORTED 0x0020#define RQSTF_TIMEOUT 0x0040#define RQSTF_NEGOTIATION 0x0080/* * 2X00 specific state flags *//* RQSF_SENT_CDB *//* RQSF_XFRD_DATA *//* RQSF_GOT_STATUS *//* RQSF_XFER_COMPLETE *//* * 2X00 specific status flags *//* RQSTF_ABORTED *//* RQSTF_TIMEOUT */#define RQSTF_DMA_ERROR 0x0080#define RQSTF_LOGOUT 0x2000/* * Miscellaneous */#ifndef ISP_EXEC_THROTTLE#define ISP_EXEC_THROTTLE 16#endif/* * About Firmware returns an 'attribute' word in mailbox 6. */#define ISP_FW_ATTR_TMODE 0x01#define ISP_FW_ATTR_SCCLUN 0x02#define ISP_FW_ATTR_FABRIC 0x04#define ISP_FW_ATTR_CLASS2 0x08#define ISP_FW_ATTR_FCTAPE 0x10#define ISP_FW_ATTR_IP 0x20/* * Reduced Interrupt Operation Response Queue Entreis */typedef struct { isphdr_t req_header; u_int32_t req_handles[15];} isp_rio1_t;typedef struct { isphdr_t req_header; u_int16_t req_handles[30];} isp_rio2_t;/* * FC (ISP2100) specific data structures *//* * Initialization Control Block * * Version One (prime) format. */typedef struct isp_icb { u_int8_t icb_version; u_int8_t _reserved0; u_int16_t icb_fwoptions; u_int16_t icb_maxfrmlen; u_int16_t icb_maxalloc; u_int16_t icb_execthrottle; u_int8_t icb_retry_count; u_int8_t icb_retry_delay; u_int8_t icb_portname[8]; u_int16_t icb_hardaddr; u_int8_t icb_iqdevtype; u_int8_t icb_logintime; u_int8_t icb_nodename[8]; u_int16_t icb_rqstout; u_int16_t icb_rspnsin; u_int16_t icb_rqstqlen; u_int16_t icb_rsltqlen; u_int16_t icb_rqstaddr[4]; u_int16_t icb_respaddr[4]; u_int16_t icb_lunenables; u_int8_t icb_ccnt; u_int8_t icb_icnt; u_int16_t icb_lunetimeout; u_int16_t _reserved1; u_int16_t icb_xfwoptions; u_int8_t icb_racctimer; u_int8_t icb_idelaytimer; u_int16_t icb_zfwoptions; u_int16_t _reserved2[13];} isp_icb_t;#define ICB_VERSION1 1#define ICBOPT_HARD_ADDRESS 0x0001#define ICBOPT_FAIRNESS 0x0002#define ICBOPT_FULL_DUPLEX 0x0004#define ICBOPT_FAST_POST 0x0008#define ICBOPT_TGT_ENABLE 0x0010#define ICBOPT_INI_DISABLE 0x0020#define ICBOPT_INI_ADISC 0x0040#define ICBOPT_INI_TGTTYPE 0x0080#define ICBOPT_PDBCHANGE_AE 0x0100#define ICBOPT_NOLIP 0x0200#define ICBOPT_SRCHDOWN 0x0400#define ICBOPT_PREVLOOP 0x0800#define ICBOPT_STOP_ON_QFULL 0x1000#define ICBOPT_FULL_LOGIN 0x2000#define ICBOPT_BOTH_WWNS 0x4000#define ICBOPT_EXTENDED 0x8000#define ICBXOPT_CLASS2_ACK0 0x0200#define ICBXOPT_CLASS2 0x0100#define ICBXOPT_LOOP_ONLY (0 << 4)#define ICBXOPT_PTP_ONLY (1 << 4)#define ICBXOPT_LOOP_2_PTP (2 << 4)#define ICBXOPT_PTP_2_LOOP (3 << 4)#define ICBXOPT_RIO_OFF 0#define ICBXOPT_RIO_16BIT 1#define ICBXOPT_RIO_32BIT 2#define ICBXOPT_RIO_16BIT_IOCB 3#define ICBXOPT_RIO_32BIT_IOCB 4#define ICBZOPT_ENA_RDXFR_RDY 0x01#define ICBZOPT_ENA_OOF (1 << 6) /* out of order frame handling *//* These 3 only apply to the 2300 */#define ICBZOPT_RATE_ONEGB (MBGSD_ONEGB << 14)#define ICBZOPT_RATE_TWOGB (MBGSD_TWOGB << 14)#define ICBZOPT_RATE_AUTO (MBGSD_AUTO << 14)#define ICB_MIN_FRMLEN 256#define ICB_MAX_FRMLEN 2112#define ICB_DFLT_FRMLEN 1024#define ICB_DFLT_ALLOC 256#define ICB_DFLT_THROTTLE 16#define ICB_DFLT_RDELAY 5#define ICB_DFLT_RCOUNT 3#define RQRSP_ADDR0015 0#define RQRSP_ADDR1631 1#define RQRSP_ADDR3247 2#define RQRSP_ADDR4863 3#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#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)/* * FC-AL Position Map * * This is an at most 128 byte map that returns either * the LILP or Firmware generated list of ports. * * We deviate a bit from the returned qlogic format to * use an extra bit to say whether this was a LILP or * f/w generated map. */typedef struct { u_int8_t fwmap : 1, count : 7; u_int8_t map[127];} fcpos_map_t;/* * Port Data Base Element */typedef struct { u_int16_t pdb_options; u_int8_t pdb_mstate; u_int8_t pdb_sstate;#define BITS2WORD(x) ((x)[0] << 16 | (x)[3] << 8 | (x)[2]) u_int8_t pdb_hardaddr_bits[4]; u_int8_t pdb_portid_bits[4]; u_int8_t pdb_nodename[8]; u_int8_t pdb_portname[8]; u_int16_t pdb_execthrottle; u_int16_t pdb_exec_count; u_int8_t pdb_retry_count; u_int8_t pdb_retry_delay; u_int16_t pdb_resalloc; u_int16_t pdb_curalloc; u_int16_t pdb_qhead; u_int16_t pdb_qtail; u_int16_t pdb_tl_next; u_int16_t pdb_tl_last; u_int16_t pdb_features; /* PLOGI, Common Service */ u_int16_t pdb_pconcurrnt; /* PLOGI, Common Service */ u_int16_t pdb_roi; /* PLOGI, Common Service */ u_int8_t pdb_target; u_int8_t pdb_initiator; /* PLOGI, Class 3 Control Flags */ u_int16_t pdb_rdsiz; /* PLOGI, Class 3 */ u_int16_t pdb_ncseq; /* PLOGI, Class 3 */ u_int16_t pdb_noseq; /* PLOGI, Class 3 */ u_int16_t pdb_labrtflg; u_int16_t pdb_lstopflg; u_int16_t pdb_sqhead; u_int16_t pdb_sqtail; u_int16_t pdb_ptimer; u_int16_t pdb_nxt_seqid; u_int16_t pdb_fcount; u_int16_t pdb_prli_len; u_int16_t pdb_prli_svc0; u_int16_t pdb_prli_svc3; u_int16_t pdb_loopid; u_int16_t pdb_il_ptr; u_int16_t pdb_sl_ptr;} isp_pdb_t;#define PDB_OPTIONS_XMITTING (1<<11)#define PDB_OPTIONS_LNKXMIT (1<<10)#define PDB_OPTIONS_ABORTED (1<<9)#define PDB_OPTIONS_ADISC (1<<1)#define PDB_STATE_DISCOVERY 0#define PDB_STATE_WDISC_ACK 1#define PDB_STATE_PLOGI 2#define PDB_STATE_PLOGI_ACK 3#define PDB_STATE_PRLI 4#define PDB_STATE_PRLI_ACK 5#define PDB_STATE_LOGGED_IN 6#define PDB_STATE_PORT_UNAVAIL 7#define PDB_STATE_PRLO 8#define PDB_STATE_PRLO_ACK 9#define PDB_STATE_PLOGO 10#define PDB_STATE_PLOG_ACK 11#define SVC3_TGT_ROLE 0x10#define SVC3_INI_ROLE 0x20#define SVC3_ROLE_MASK 0x30#define SVC3_ROLE_SHIFT 4/* * CT definition * * This is as the QLogic f/w documentations defines it- which is just opposite, * bit wise, from what the specification defines it as. Additionally, the * ct_response and ct_resid (really from FC-GS-2) need to be byte swapped. */typedef struct { u_int8_t ct_revision; u_int8_t ct_portid[3]; u_int8_t ct_fcs_type; u_int8_t ct_fcs_subtype; u_int8_t ct_options; u_int8_t ct_res0; u_int16_t ct_response; u_int16_t ct_resid; u_int8_t ct_res1; u_int8_t ct_reason; u_int8_t ct_explanation; u_int8_t ct_vunique;} ct_hdr_t;#define FS_ACC 0x8002#define FS_RJT 0x8001#define FC4_IP 5 /* ISO/EEC 8802-2 LLC/SNAP "Out of Order Delivery" */#define FC4_SCSI 8 /* SCSI-3 via Fivre Channel Protocol (FCP) */#define SNS_GA_NXT 0x100#define SNS_GPN_ID 0x112#define SNS_GNN_ID 0x113#define SNS_GID_FT 0x171#define SNS_RFT_ID 0x217typedef struct { u_int16_t snscb_rblen; /* response buffer length (words) */ u_int16_t snscb_res0; u_int16_t snscb_addr[4]; /* response buffer address */ u_int16_t snscb_sblen; /* subcommand buffer length (words) */ u_int16_t snscb_res1; u_int16_t snscb_data[1]; /* variable data */} sns_screq_t; /* Subcommand Request Structure */typedef struct { u_int16_t snscb_rblen; /* response buffer length (words) */ u_int16_t snscb_res0; u_int16_t snscb_addr[4]; /* response buffer address */ u_int16_t snscb_sblen; /* subcommand buffer length (words) */ u_int16_t snscb_res1; u_int16_t snscb_cmd; u_int16_t snscb_res2; u_int32_t snscb_res3; u_int32_t snscb_port;} sns_ga_nxt_req_t;#define SNS_GA_NXT_REQ_SIZE (sizeof (sns_ga_nxt_req_t))typedef struct { u_int16_t snscb_rblen; /* response buffer length (words) */ u_int16_t snscb_res0; u_int16_t snscb_addr[4]; /* response buffer address */ u_int16_t snscb_sblen; /* subcommand buffer length (words) */ u_int16_t snscb_res1; u_int16_t snscb_cmd; u_int16_t snscb_res2; u_int32_t snscb_res3; u_int32_t snscb_portid;} sns_gxn_id_req_t;#define SNS_GXN_ID_REQ_SIZE (sizeof (sns_gxn_id_req_t))typedef struct { u_int16_t snscb_rblen; /* response buffer length (words) */ u_int16_t snscb_res0; u_int16_t snscb_addr[4]; /* response buffer address */ u_int16_t snscb_sblen; /* subcommand buffer length (words) */ u_int16_t snscb_res1; u_int16_t snscb_cmd; u_int16_t snscb_mword_div_2; u_int32_t snscb_res3; u_int32_t snscb_fc4_type;} sns_gid_ft_req_t;#define SNS_GID_FT_REQ_SIZE (sizeof (sns_gid_ft_req_t))typedef struct { u_int16_t snscb_rblen; /* response buffer length (words) */ u_int16_t snscb_res0; u_int16_t snscb_addr[4]; /* response buffer address */ u_int16_t snscb_sblen; /* subcommand buffer length (words) */ u_int16_t snscb_res1; u_int16_t snscb_cmd; u_int16_t snscb_res2; u_int32_t snscb_res3; u_int32_t snscb_port; u_int32_t snscb_fc4_types[8];} sns_rft_id_req_t;#define SNS_RFT_ID_REQ_SIZE (sizeof (sns_rft_id_req_t))typedef struct { ct_hdr_t snscb_cthdr; u_int8_t snscb_port_type; u_int8_t snscb_port_id[3]; u_int8_t snscb_portname[8]; u_int16_t snscb_data[1]; /* variable data */} sns_scrsp_t; /* Subcommand Response Structure */typedef struct { ct_hdr_t snscb_cthdr; u_int8_t snscb_port_type; u_int8_t snscb_port_id[3]; u_int8_t snscb_portname[8]; u_int8_t snscb_pnlen; /* symbolic port name length */ u_int8_t snscb_pname[255]; /* symbolic port name */ u_int8_t snscb_nodename[8]; u_int8_t snscb_nnlen; /* symbolic node name length */ u_int8_t snscb_nname[255]; /* symbolic node name */ u_int8_t snscb_ipassoc[8]; u_int8_t snscb_ipaddr[16]; u_int8_t snscb_svc_class[4]; u_int8_t snscb_fc4_types[32]; u_int8_t snscb_fpname[8]; u_int8_t snscb_reserved; u_int8_t snscb_hardaddr[3];} sns_ga_nxt_rsp_t; /* Subcommand Response Structure */#define SNS_GA_NXT_RESP_SIZE (sizeof (sns_ga_nxt_rsp_t))typedef struct { ct_hdr_t snscb_cthdr; u_int8_t snscb_wwn[8];} sns_gxn_id_rsp_t;#define SNS_GXN_ID_RESP_SIZE (sizeof (sns_gxn_id_rsp_t))typedef struct { ct_hdr_t snscb_cthdr; struct { u_int8_t control; u_int8_t portid[3]; } snscb_ports[1];} sns_gid_ft_rsp_t;#define SNS_GID_FT_RESP_SIZE(x) ((sizeof (sns_gid_ft_rsp_t)) + ((x - 1) << 2))#define SNS_RFT_ID_RESP_SIZE (sizeof (ct_hdr_t))#endif /* _ISPMBOX_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -