📄 zfcp_def.h
字号:
#define ZFCP_DBF_ELS_PAYLOAD 32#define ZFCP_DBF_ELS_MAX_PAYLOAD 1024 u8 payload[ZFCP_DBF_ELS_PAYLOAD];} __attribute__ ((packed));struct zfcp_san_dbf_record { u8 tag[ZFCP_DBF_TAG_SIZE]; u64 fsf_reqid; u32 fsf_seqno; u32 s_id; u32 d_id; union { struct zfcp_san_dbf_record_ct ct; struct zfcp_san_dbf_record_els els; } type;} __attribute__ ((packed));struct zfcp_scsi_dbf_record { u8 tag[ZFCP_DBF_TAG_SIZE]; u8 tag2[ZFCP_DBF_TAG_SIZE]; u32 scsi_id; u32 scsi_lun; u32 scsi_result; u64 scsi_cmnd; u64 scsi_serial;#define ZFCP_DBF_SCSI_OPCODE 16 u8 scsi_opcode[ZFCP_DBF_SCSI_OPCODE]; u8 scsi_retries; u8 scsi_allowed; u64 fsf_reqid; u32 fsf_seqno; u64 fsf_issued; union { struct { u64 fsf_reqid; u32 fsf_seqno; u64 fsf_issued; } new_fsf_req; struct { u8 rsp_validity; u8 rsp_scsi_status; u32 rsp_resid; u8 rsp_code;#define ZFCP_DBF_SCSI_FCP_SNS_INFO 16#define ZFCP_DBF_SCSI_MAX_FCP_SNS_INFO 256 u32 sns_info_len; u8 sns_info[ZFCP_DBF_SCSI_FCP_SNS_INFO]; } fcp; } type;} __attribute__ ((packed));/* * FC-FS stuff */#define R_A_TOV 10 /* seconds */#define ZFCP_ELS_TIMEOUT (2 * R_A_TOV)#define ZFCP_LS_RLS 0x0f#define ZFCP_LS_ADISC 0x52#define ZFCP_LS_RPS 0x56#define ZFCP_LS_RSCN 0x61#define ZFCP_LS_RNID 0x78struct zfcp_ls_rjt_par { u8 action; u8 reason_code; u8 reason_expl; u8 vendor_unique;} __attribute__ ((packed));struct zfcp_ls_adisc { u8 code; u8 field[3]; u32 hard_nport_id; u64 wwpn; u64 wwnn; u32 nport_id;} __attribute__ ((packed));struct zfcp_ls_adisc_acc { u8 code; u8 field[3]; u32 hard_nport_id; u64 wwpn; u64 wwnn; u32 nport_id;} __attribute__ ((packed));struct zfcp_rc_entry { u8 code; const char *description;};/* * FC-GS-2 stuff */#define ZFCP_CT_REVISION 0x01#define ZFCP_CT_DIRECTORY_SERVICE 0xFC#define ZFCP_CT_NAME_SERVER 0x02#define ZFCP_CT_SYNCHRONOUS 0x00#define ZFCP_CT_GID_PN 0x0121#define ZFCP_CT_MAX_SIZE 0x1020#define ZFCP_CT_ACCEPT 0x8002#define ZFCP_CT_REJECT 0x8001/* * FC-GS-4 stuff */#define ZFCP_CT_TIMEOUT (3 * R_A_TOV)/******************** LOGGING MACROS AND DEFINES *****************************//* * Logging may be applied on certain kinds of driver operations * independently. Additionally, different log-levels are supported for * each of these areas. */#define ZFCP_NAME "zfcp"/* read-only LUN sharing switch initial value */#define ZFCP_RO_LUN_SHARING_DEFAULTS 0/* independent log areas */#define ZFCP_LOG_AREA_OTHER 0#define ZFCP_LOG_AREA_SCSI 1#define ZFCP_LOG_AREA_FSF 2#define ZFCP_LOG_AREA_CONFIG 3#define ZFCP_LOG_AREA_CIO 4#define ZFCP_LOG_AREA_QDIO 5#define ZFCP_LOG_AREA_ERP 6#define ZFCP_LOG_AREA_FC 7/* log level values*/#define ZFCP_LOG_LEVEL_NORMAL 0#define ZFCP_LOG_LEVEL_INFO 1#define ZFCP_LOG_LEVEL_DEBUG 2#define ZFCP_LOG_LEVEL_TRACE 3/* * this allows removal of logging code by the preprocessor * (the most detailed log level still to be compiled in is specified, * higher log levels are removed) */#define ZFCP_LOG_LEVEL_LIMIT ZFCP_LOG_LEVEL_TRACE/* get "loglevel" nibble assignment */#define ZFCP_GET_LOG_VALUE(zfcp_lognibble) \ ((atomic_read(&zfcp_data.loglevel) >> (zfcp_lognibble<<2)) & 0xF)/* set "loglevel" nibble */#define ZFCP_SET_LOG_NIBBLE(value, zfcp_lognibble) \ (value << (zfcp_lognibble << 2))/* all log-level defaults are combined to generate initial log-level */#define ZFCP_LOG_LEVEL_DEFAULTS \ (ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_OTHER) | \ ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_SCSI) | \ ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_FSF) | \ ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_CONFIG) | \ ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_CIO) | \ ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_QDIO) | \ ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_ERP) | \ ZFCP_SET_LOG_NIBBLE(ZFCP_LOG_LEVEL_NORMAL, ZFCP_LOG_AREA_FC))/* check whether we have the right level for logging */#define ZFCP_LOG_CHECK(level) \ ((ZFCP_GET_LOG_VALUE(ZFCP_LOG_AREA)) >= level)/* logging routine for zfcp */#define _ZFCP_LOG(fmt, args...) \ printk(KERN_ERR ZFCP_NAME": %s(%d): " fmt, __FUNCTION__, \ __LINE__ , ##args)#define ZFCP_LOG(level, fmt, args...) \do { \ if (ZFCP_LOG_CHECK(level)) \ _ZFCP_LOG(fmt, ##args); \} while (0) #if ZFCP_LOG_LEVEL_LIMIT < ZFCP_LOG_LEVEL_NORMAL# define ZFCP_LOG_NORMAL(fmt, args...)#else# define ZFCP_LOG_NORMAL(fmt, args...) \do { \ if (ZFCP_LOG_CHECK(ZFCP_LOG_LEVEL_NORMAL)) \ printk(KERN_ERR ZFCP_NAME": " fmt, ##args); \} while (0)#endif#if ZFCP_LOG_LEVEL_LIMIT < ZFCP_LOG_LEVEL_INFO# define ZFCP_LOG_INFO(fmt, args...)#else# define ZFCP_LOG_INFO(fmt, args...) \do { \ if (ZFCP_LOG_CHECK(ZFCP_LOG_LEVEL_INFO)) \ printk(KERN_ERR ZFCP_NAME": " fmt, ##args); \} while (0)#endif#if ZFCP_LOG_LEVEL_LIMIT < ZFCP_LOG_LEVEL_DEBUG# define ZFCP_LOG_DEBUG(fmt, args...)#else# define ZFCP_LOG_DEBUG(fmt, args...) \ ZFCP_LOG(ZFCP_LOG_LEVEL_DEBUG, fmt , ##args)#endif#if ZFCP_LOG_LEVEL_LIMIT < ZFCP_LOG_LEVEL_TRACE# define ZFCP_LOG_TRACE(fmt, args...)#else# define ZFCP_LOG_TRACE(fmt, args...) \ ZFCP_LOG(ZFCP_LOG_LEVEL_TRACE, fmt , ##args)#endif/*************** ADAPTER/PORT/UNIT AND FSF_REQ STATUS FLAGS ******************//* * Note, the leftmost status byte is common among adapter, port * and unit */#define ZFCP_COMMON_FLAGS 0xfff00000#define ZFCP_SPECIFIC_FLAGS 0x000fffff/* common status bits */#define ZFCP_STATUS_COMMON_REMOVE 0x80000000#define ZFCP_STATUS_COMMON_RUNNING 0x40000000#define ZFCP_STATUS_COMMON_ERP_FAILED 0x20000000#define ZFCP_STATUS_COMMON_UNBLOCKED 0x10000000#define ZFCP_STATUS_COMMON_OPENING 0x08000000#define ZFCP_STATUS_COMMON_OPEN 0x04000000#define ZFCP_STATUS_COMMON_CLOSING 0x02000000#define ZFCP_STATUS_COMMON_ERP_INUSE 0x01000000#define ZFCP_STATUS_COMMON_ACCESS_DENIED 0x00800000#define ZFCP_STATUS_COMMON_ACCESS_BOXED 0x00400000/* adapter status */#define ZFCP_STATUS_ADAPTER_QDIOUP 0x00000002#define ZFCP_STATUS_ADAPTER_REGISTERED 0x00000004#define ZFCP_STATUS_ADAPTER_XCONFIG_OK 0x00000008#define ZFCP_STATUS_ADAPTER_HOST_CON_INIT 0x00000010#define ZFCP_STATUS_ADAPTER_ERP_THREAD_UP 0x00000020#define ZFCP_STATUS_ADAPTER_ERP_THREAD_KILL 0x00000080#define ZFCP_STATUS_ADAPTER_ERP_PENDING 0x00000100#define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED 0x00000200#define ZFCP_STATUS_ADAPTER_XPORT_OK 0x00000800#define ZFCP_STATUS_ADAPTER_SCSI_UP \ (ZFCP_STATUS_COMMON_UNBLOCKED | \ ZFCP_STATUS_ADAPTER_REGISTERED)/* FC-PH/FC-GS well-known address identifiers for generic services */#define ZFCP_DID_MANAGEMENT_SERVICE 0xFFFFFA#define ZFCP_DID_TIME_SERVICE 0xFFFFFB#define ZFCP_DID_DIRECTORY_SERVICE 0xFFFFFC#define ZFCP_DID_ALIAS_SERVICE 0xFFFFF8#define ZFCP_DID_KEY_DISTRIBUTION_SERVICE 0xFFFFF7/* remote port status */#define ZFCP_STATUS_PORT_PHYS_OPEN 0x00000001#define ZFCP_STATUS_PORT_DID_DID 0x00000002#define ZFCP_STATUS_PORT_PHYS_CLOSING 0x00000004#define ZFCP_STATUS_PORT_NO_WWPN 0x00000008#define ZFCP_STATUS_PORT_NO_SCSI_ID 0x00000010#define ZFCP_STATUS_PORT_INVALID_WWPN 0x00000020#define ZFCP_STATUS_PORT_ACCESS_DENIED 0x00000040/* for ports with well known addresses */#define ZFCP_STATUS_PORT_WKA \ (ZFCP_STATUS_PORT_NO_WWPN | \ ZFCP_STATUS_PORT_NO_SCSI_ID)/* logical unit status */#define ZFCP_STATUS_UNIT_NOTSUPPUNITRESET 0x00000001#define ZFCP_STATUS_UNIT_TEMPORARY 0x00000002#define ZFCP_STATUS_UNIT_SHARED 0x00000004#define ZFCP_STATUS_UNIT_READONLY 0x00000008/* FSF request status (this does not have a common part) */#define ZFCP_STATUS_FSFREQ_NOT_INIT 0x00000000#define ZFCP_STATUS_FSFREQ_POOL 0x00000001#define ZFCP_STATUS_FSFREQ_TASK_MANAGEMENT 0x00000002#define ZFCP_STATUS_FSFREQ_COMPLETED 0x00000004#define ZFCP_STATUS_FSFREQ_ERROR 0x00000008#define ZFCP_STATUS_FSFREQ_CLEANUP 0x00000010#define ZFCP_STATUS_FSFREQ_ABORTING 0x00000020#define ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED 0x00000040#define ZFCP_STATUS_FSFREQ_ABORTNOTNEEDED 0x00000080#define ZFCP_STATUS_FSFREQ_ABORTED 0x00000100#define ZFCP_STATUS_FSFREQ_TMFUNCFAILED 0x00000200#define ZFCP_STATUS_FSFREQ_TMFUNCNOTSUPP 0x00000400#define ZFCP_STATUS_FSFREQ_RETRY 0x00000800#define ZFCP_STATUS_FSFREQ_DISMISSED 0x00001000/*********************** ERROR RECOVERY PROCEDURE DEFINES ********************/#define ZFCP_MAX_ERPS 3#define ZFCP_ERP_FSFREQ_TIMEOUT (30 * HZ)#define ZFCP_ERP_MEMWAIT_TIMEOUT HZ#define ZFCP_STATUS_ERP_TIMEDOUT 0x10000000#define ZFCP_STATUS_ERP_CLOSE_ONLY 0x01000000#define ZFCP_STATUS_ERP_DISMISSING 0x00100000#define ZFCP_STATUS_ERP_DISMISSED 0x00200000#define ZFCP_STATUS_ERP_LOWMEM 0x00400000#define ZFCP_ERP_STEP_UNINITIALIZED 0x00000000#define ZFCP_ERP_STEP_FSF_XCONFIG 0x00000001#define ZFCP_ERP_STEP_PHYS_PORT_CLOSING 0x00000010#define ZFCP_ERP_STEP_PORT_CLOSING 0x00000100#define ZFCP_ERP_STEP_NAMESERVER_OPEN 0x00000200#define ZFCP_ERP_STEP_NAMESERVER_LOOKUP 0x00000400#define ZFCP_ERP_STEP_PORT_OPENING 0x00000800#define ZFCP_ERP_STEP_UNIT_CLOSING 0x00001000#define ZFCP_ERP_STEP_UNIT_OPENING 0x00002000/* Ordered by escalation level (necessary for proper erp-code operation) */#define ZFCP_ERP_ACTION_REOPEN_ADAPTER 0x4#define ZFCP_ERP_ACTION_REOPEN_PORT_FORCED 0x3#define ZFCP_ERP_ACTION_REOPEN_PORT 0x2#define ZFCP_ERP_ACTION_REOPEN_UNIT 0x1#define ZFCP_ERP_ACTION_RUNNING 0x1#define ZFCP_ERP_ACTION_READY 0x2#define ZFCP_ERP_SUCCEEDED 0x0#define ZFCP_ERP_FAILED 0x1#define ZFCP_ERP_CONTINUES 0x2#define ZFCP_ERP_EXIT 0x3#define ZFCP_ERP_DISMISSED 0x4#define ZFCP_ERP_NOMEM 0x5/******************** CFDC SPECIFIC STUFF *****************************//* Firewall data channel sense data record */struct zfcp_cfdc_sense_data { u32 signature; /* Request signature */ u32 devno; /* FCP adapter device number */ u32 command; /* Command code */ u32 fsf_status; /* FSF request status and status qualifier */ u8 fsf_status_qual[FSF_STATUS_QUALIFIER_SIZE]; u8 payloads[256]; /* Access conflicts list */ u8 control_file[0]; /* Access control table */};#define ZFCP_CFDC_SIGNATURE 0xCFDCACDF#define ZFCP_CFDC_CMND_DOWNLOAD_NORMAL 0x00010001#define ZFCP_CFDC_CMND_DOWNLOAD_FORCE 0x00010101#define ZFCP_CFDC_CMND_FULL_ACCESS 0x00000201#define ZFCP_CFDC_CMND_RESTRICTED_ACCESS 0x00000401#define ZFCP_CFDC_CMND_UPLOAD 0x00010002#define ZFCP_CFDC_DOWNLOAD 0x00000001#define ZFCP_CFDC_UPLOAD 0x00000002#define ZFCP_CFDC_WITH_CONTROL_FILE 0x00010000#define ZFCP_CFDC_DEV_NAME "zfcp_cfdc"#define ZFCP_CFDC_DEV_MAJOR MISC_MAJOR#define ZFCP_CFDC_DEV_MINOR MISC_DYNAMIC_MINOR#define ZFCP_CFDC_MAX_CONTROL_FILE_SIZE 127 * 1024/************************* STRUCTURE DEFINITIONS *****************************/struct zfcp_fsf_req;/* holds various memory pools of an adapter */struct zfcp_adapter_mempool { mempool_t *fsf_req_erp; mempool_t *fsf_req_scsi; mempool_t *fsf_req_abort; mempool_t *fsf_req_status_read; mempool_t *data_status_read; mempool_t *data_gid_pn;};/* * header for CT_IU */struct ct_hdr { u8 revision; // 0x01 u8 in_id[3]; // 0x00 u8 gs_type; // 0xFC Directory Service u8 gs_subtype; // 0x02 Name Server u8 options; // 0x00 single bidirectional exchange u8 reserved0; u16 cmd_rsp_code; // 0x0121 GID_PN, or 0x0100 GA_NXT u16 max_res_size; // <= (4096 - 16) / 4 u8 reserved1; u8 reason_code; u8 reason_code_expl; u8 vendor_unique;} __attribute__ ((packed));/* nameserver request CT_IU -- for requests where * a port name is required */struct ct_iu_gid_pn_req {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -