/* SPDX-License-Identifier: GPL-2.0 */ /* Huawei Hifc PCI Express Linux driver * Copyright(c) 2017 Huawei Technologies Co., Ltd * */ #ifndef __UNF_COMMON_H #define __UNF_COMMON_H #include "unf_scsi_common.h" /* V/C version number */ #define UNF_MAJOR_VERSION "3" /* B version, B0XX Corresponding x.x */ #define UNF_B_VERSION "5.0" /* Indicates the minor version number of the driver */ #define UNF_DRIVER_VERSION "12" /* version num */ #define UNF_FC_VERSION UNF_MAJOR_VERSION "." UNF_B_VERSION "." UNF_DRIVER_VERSION extern unsigned int unf_dbg_level; extern unsigned int hifc_dif_type; extern unsigned int hifc_dif_enable; extern unsigned char hifc_guard; #define RETURN_ERROR_S32 (-1) #define UNF_RETURN_ERROR_S32 (-1) #define UNF_IO_SUCCESS 0x00000000 /* the host system aborted the command */ #define UNF_IO_ABORTED 0x00000001 #define UNF_IO_FAILED 0x00000002 #define UNF_IO_ABORT_ABTS 0x00000003 #define UNF_IO_ABORT_LOGIN 0x00000004 /* abort login */ /* reset event aborted the transport */ #define UNF_IO_ABORT_REET 0x00000005 #define UNF_IO_ABORT_FAILED 0x00000006 /* abort failed */ /* data out of order ,data reassembly error */ #define UNF_IO_OUTOF_ORDER 0x00000007 #define UNF_IO_FTO 0x00000008 /* frame time out */ #define UNF_IO_LINK_FAILURE 0x00000009 #define UNF_IO_OVER_FLOW 0x0000000a /* data over run */ #define UNF_IO_RSP_OVER 0x0000000b #define UNF_IO_LOST_FRAME 0x0000000c #define UNF_IO_UNDER_FLOW 0x0000000d /* data under run */ #define UNF_IO_HOST_PROG_ERROR 0x0000000e #define UNF_IO_SEST_PROG_ERROR 0x0000000f #define UNF_IO_INVALID_ENTRY 0x00000010 #define UNF_IO_ABORT_SEQ_NOT 0x00000011 #define UNF_IO_REJECT 0x00000012 #define UNF_IO_RS_INFO 0x00000013 #define UNF_IO_EDC_IN_ERROR 0x00000014 #define UNF_IO_EDC_OUT_ERROR 0x00000015 #define UNF_IO_UNINIT_KEK_ERR 0x00000016 #define UNF_IO_DEK_OUTOF_RANGE 0x00000017 #define UNF_IO_KEY_UNWRAP_ERR 0x00000018 #define UNF_IO_KEY_TAG_ERR 0x00000019 #define UNF_IO_KEY_ECC_ERR 0x0000001a #define UNF_IO_BLOCK_SIZE_ERROR 0x0000001b #define UNF_IO_ILLEGAL_CIPHER_MODE 0x0000001c #define UNF_IO_CLEAN_UP 0x0000001d #define UNF_SRR_RECEIVE 0x0000001e /* receive srr */ /* The target device sent an ABTS to abort the I/O. */ #define UNF_IO_ABORTED_BY_TARGET 0x0000001f #define UNF_IO_TRANSPORT_ERROR 0x00000020 #define UNF_IO_LINK_FLASH 0x00000021 #define UNF_IO_TIMEOUT 0x00000022 #define UNF_IO_PORT_UNAVAILABLE 0x00000023 #define UNF_IO_PORT_LOGOUT 0x00000024 #define UNF_IO_PORT_CFG_CHG 0x00000025 #define UNF_IO_FIRMWARE_RES_UNAVAILABLE 0x00000026 #define UNF_IO_TASK_MGT_OVERRUN 0x00000027 #define UNF_IO_DMA_ERROR 0x00000028 #define UNF_IO_DIF_ERROR 0x00000029 #define UNF_IO_NO_LPORT 0x0000002a #define UNF_IO_NO_XCHG 0x0000002b #define UNF_IO_SOFT_ERR 0x0000002c #define UNF_IO_XCHG_ADD_ERROR 0x0000002d #define UNF_IO_NO_LOGIN 0x0000002e #define UNF_IO_NO_BUFFER 0x0000002f #define UNF_IO_DID_ERROR 0x00000030 #define UNF_IO_UNSUPPORT 0x00000031 #define UNF_IO_NOREADY 0x00000032 #define UNF_IO_NPORTID_REUSED 0x00000033 #define UNF_IO_NPORT_HANDLE_REUSED 0x00000034 #define UNF_IO_NO_NPORT_HANDLE 0x00000035 #define UNF_IO_ABORT_BY_FW 0x00000036 #define UNF_IO_ABORT_PORT_REMOVING 0x00000037 #define UNF_IO_INCOMPLETE 0x00000038 #define UNF_IO_DIF_REF_ERROR 0x00000039 #define UNF_IO_DIF_GEN_ERROR 0x0000003a #define UNF_IO_ERREND 0xFFFFFFFF /* define bits */ #define UNF_BIT(n) (0x1UL << (n)) #define UNF_BIT_0 UNF_BIT(0) #define UNF_BIT_1 UNF_BIT(1) #define UNF_BIT_2 UNF_BIT(2) #define UNF_BIT_3 UNF_BIT(3) #define UNF_BIT_4 UNF_BIT(4) #define UNF_BIT_5 UNF_BIT(5) struct buff_list_s { u8 *vaddr; dma_addr_t paddr; }; struct buf_describe_s { struct buff_list_s *buflist; u32 buf_size; u32 buf_num; }; #define BUF_LIST_PAGE_SIZE (PAGE_SIZE << 8) /* Echo macro define */ #define ECHO_MG_VERSION_LOCAL 1 #define ECHO_MG_VERSION_REMOTE 2 /* save hba info macro define */ #define SAVE_PORT_INFO_LEN 1016 #define UNF_GET_NAME_HIGH_WORD(v_name) \ (((v_name) >> 32) & 0xffffffff) #define UNF_GET_NAME_LOW_WORD(v_name) \ ((v_name) & 0xffffffff) #define UNF_FIRST_LPORT_ID_MASK 0xffffff00 #define HIFC_MAX_COUNTER_TYPE 128 #define UNF_EVENT_ASYN 0 #define UNF_EVENT_SYN 1 #define UNF_GLOBAL_EVENT_ASYN 2 #define UNF_GLOBAL_EVENT_SYN 3 /* define sfp err */ #define UNF_SFP_PRESENT_FAIL 0x1 #define UNF_SFP_POWER_FAIL 0x2 #define UNF_9545_FAIL 0x3 /* obtain the values of board type and ID */ #define UNF_GET_BOARD_TYPE_AND_SLOT_ID_BY_PORTID(port_id) \ (((port_id) & 0x00FF00) >> 8) #define UNF_FC_SERVER_BOARD_8_G 13 /* 8G mode */ #define UNF_FC_SERVER_BOARD_16_G 7 /* 16G mode */ #define UNF_FC_SERVER_BOARD_32_G 6 /* 32G mode */ #define UNF_PORT_TYPE_FC_QSFP 1 #define UNF_PORT_TYPE_FC_SFP 0 #define UNF_PORT_UNGRADE_FW_RESET_ACTIVE 0 #define UNF_PORT_UNGRADE_FW_RESET_INACTIVE 1 #ifndef __BIG_ENDIAN__ #define __BIG_ENDIAN__ 0x4321 #endif #ifndef __LITTLE_ENDIAN__ #define __LITTLE_ENDIAN__ 0x1234 #endif #ifdef __BYTE_ORDER__ #undef __BYTE_ORDER__ #endif #define __BYTE_ORDER__ __LITTLE_ENDIAN__ #ifndef INVALID_VALUE64 #define INVALID_VALUE64 0xFFFFFFFFFFFFFFFFULL #endif /* INVALID_VALUE64 */ #ifndef INVALID_VALUE32 #define INVALID_VALUE32 0xFFFFFFFF #endif /* INVALID_VALUE32 */ #ifndef INVALID_VALUE16 #define INVALID_VALUE16 0xFFFF #endif /* INVALID_VALUE16 */ #ifndef INVALID_VALUE8 #define INVALID_VALUE8 0xFF #endif /* INVALID_VALUE8 */ #ifndef RETURN_OK #define RETURN_OK 0 #endif #ifndef RETURN_ERROR #define RETURN_ERROR (~0) #endif #define UNF_RETURN_ERROR (~0) #ifndef UNF_RETURN_NOT_SUPPORT #define UNF_RETURN_NOT_SUPPORT (2) #endif enum int_e { UNF_FALSE = 0, UNF_TRUE = 1 }; #define DRV_DIF_CRC_ERR 0x1001 #define DRV_DIF_LBA_ERR 0x1002 #define DRV_DIF_APP_ERR 0x1003 #define UNF_SCSI_SENSE_DATA_LEN SCSI_SENSE_DATA_LEN /* RPort Management information related to Rport, * only used at the boundary between common and lowlevel */ struct unf_rport_info_s { unsigned int local_nport_id; unsigned int nport_id; unsigned int rport_index; unsigned long long port_name; unsigned char rsvd0[3]; }; struct unf_cfg_item_s { char *name; unsigned int min_value; unsigned int default_value; unsigned int max_value; }; struct unf_port_params_s { unsigned int ra_tov; unsigned int ed_tov; }; /* get wwpn adn wwnn */ struct unf_get_chip_info_argout { unsigned char board_type; unsigned long long wwpn; unsigned long long wwnn; unsigned long long sys_mac; }; /* get sfp info: present and speed */ struct unf_get_port_info_argout { unsigned char sfp_speed; unsigned char present; unsigned char rsvd[2]; }; /* SFF-8436(QSFP+) Rev 4.7 */ struct sfp_plus_field_a0_s { unsigned char identifier; /* offset 1~2 */ struct { unsigned char reserved; unsigned char status; } status_indicator; /* offset 3~21 */ struct { unsigned char rx_tx_los; unsigned char tx_fault; unsigned char all_resv; unsigned char ini_complete : 1; unsigned char bit_resv : 3; unsigned char temp_low_warn : 1; unsigned char temp_high_warn : 1; unsigned char temp_low_alarm : 1; unsigned char temp_high_alarm : 1; unsigned char resv : 4; unsigned char vcc_low_warn : 1; unsigned char vcc_high_warn : 1; unsigned char vcc_low_alarm : 1; unsigned char vcc_high_alarm : 1; unsigned char resv8; unsigned char rx_pow[2]; unsigned char tx_bias[2]; unsigned char reserved[6]; unsigned char vendor_specifics[3]; } interrupt_flag; /* offset 22~33 */ struct { unsigned char temp[2]; unsigned char reserved[2]; unsigned char supply_vol[2]; unsigned char reserveds[2]; unsigned char vendor_specific[4]; } module_monitors; /* offset 34~81 */ struct { unsigned char rx_pow[8]; unsigned char tx_bias[8]; unsigned char reserved[16]; unsigned char vendor_specific[16]; } channel_monitor_val; /* offset 82~85 */ unsigned char reserved[4]; /* offset 86~97 */ struct { /* 86~88 */ unsigned char tx_disable; unsigned char rx_rate_select; unsigned char tx_rate_select; /* 89~92 */ unsigned char rx_4_app_select; unsigned char rx_3_app_select; unsigned char rx_2_app_select; unsigned char rx_1_app_select; /* 93 */ unsigned char power_override : 1; unsigned char power_set : 1; unsigned char reserved : 6; /* 94~97 */ unsigned char tx_4_app_select; unsigned char tx_3_app_select; unsigned char tx_2_app_select; unsigned char tx_1_app_select; /* 98~99 */ unsigned char auc_reserved[2]; } control; /* 100~106 */ struct { /* 100 */ unsigned char mrx_1_os : 1; unsigned char mrx_2_los : 1; unsigned char mrx_3_los : 1; unsigned char mrx_4_los : 1; unsigned char mtx_1_los : 1; unsigned char mtx_2_los : 1; unsigned char mtx_3_los : 1; unsigned char mtx_4_los : 1; /* 101 */ unsigned char mtx_1_fault : 1; unsigned char mtx_2_fault : 1; unsigned char mtx_3_fault : 1; unsigned char mtx_4_fault : 1; unsigned char reserved : 4; /* 102 */ unsigned char uc_reserved; /* 103 */ unsigned char mini_cmp_flag : 1; unsigned char rsv : 3; unsigned char mtemp_low_warn : 1; unsigned char mtemp_high_warn : 1; unsigned char mtemp_low_alarm : 1; unsigned char mtemp_high_alarm : 1; /* 104 */ unsigned char rsv1 : 4; unsigned char mvcc_low_warn : 1; unsigned char mvcc_high_warn : 1; unsigned char mvcc_low_alarm : 1; unsigned char mvcc_high_alarm : 1; /* 105~106 */ unsigned char vendor_specific[2]; } module_channel_mask_bit; /* 107~118 */ unsigned char auc_resv[12]; /* 119~126 */ unsigned char auc_reserved[8]; /* 127 */ unsigned char page_select; }; /* page 00 */ struct sfp_plus_field_00_s { /* 128~191 */ struct { unsigned char id; unsigned char id_ext; unsigned char connector; unsigned char speci_com[6]; unsigned char mode; unsigned char speed; unsigned char encoding; unsigned char br_nominal; unsigned char ext_rate_select_com; unsigned char length_smf; unsigned char length_om3; unsigned char length_om2; unsigned char length_om1; unsigned char length_copper; unsigned char device_tech; unsigned char vendor_name[16]; unsigned char ex_module; unsigned char vendor_oui[3]; unsigned char vendor_pn[16]; unsigned char vendor_rev[2]; /* Wave length or Copper cable Attenuation */ unsigned char wave_or_copper_attenuation[2]; unsigned char wave_length_toler[2]; /* Wavelength tolerance */ unsigned char max_temp; unsigned char cc_base; } base_id_fields; /* 192~223 */ struct { unsigned char options[4]; unsigned char vendor_sn[16]; unsigned char date_code[8]; unsigned char diagn_monit_type; unsigned char enhance_opt; unsigned char uc_reserved; unsigned char ccext; } ext_id_fields; /* 224~255 */ unsigned char vendor_spec_eeprom[32]; }; /* page 01 */ struct sfp_field_01_s { unsigned char optiona_l01[128]; }; /* page 02 */ struct sfp_field_02_s { unsigned char optiona_l02[128]; }; /* page 03 */ struct sfp_field_03_s { unsigned char temp_high_alarm[2]; unsigned char temp_low_alarm[2]; unsigned char temp_high_warn[2]; unsigned char temp_low_warn[2]; unsigned char reserved1[8]; unsigned char vcc_high_alarm[2]; unsigned char vcc_low_alarm[2]; unsigned char vcc_high_warn[2]; unsigned char vcc_low_warn[2]; unsigned char reserved2[8]; unsigned char vendor_specific1[16]; unsigned char pow_high_alarm[2]; unsigned char pow_low_alarm[2]; unsigned char pow_high_warn[2]; unsigned char pow_low_warn[2]; unsigned char bias_high_alarm[2]; unsigned char bias_low_alarm[2]; unsigned char bias_high_warn[2]; unsigned char bias_low_warn[2]; unsigned char tx_power_high_alarm[2]; unsigned char tx_power_low_alarm[2]; unsigned char reserved3[4]; unsigned char reserved4[8]; unsigned char vendor_specific2[16]; unsigned char reserved5[2]; unsigned char vendor_specific3[12]; unsigned char rx_ampl[2]; unsigned char rx_tx_sq_disable; unsigned char rx_output_disable; unsigned char chan_monit_mask[12]; unsigned char reserved6[2]; }; struct sfp_plus_info_s { struct sfp_plus_field_a0_s sfp_plus_info_a0; struct sfp_plus_field_00_s sfp_plus_info_00; struct sfp_field_01_s sfp_plus_info_01; struct sfp_field_02_s sfp_plus_info_02; struct sfp_field_03_s sfp_plus_info_03; }; /* SFF-8472 Rev 10.4 */ struct unf_sfp_data_field_a0_s { /* Offset 0~63 */ struct { unsigned char id; unsigned char id_ext; unsigned char connector; unsigned char atransceiver[8]; unsigned char encoding; /* Nominal signalling rate, units of 100MBd. */ unsigned char br_nominal; /* Type of rate select functionality */ unsigned char rate_identifier; /* Link length supported for single mode fiber, units of km */ unsigned char length_smf_km; /* Link length supported for single mode fiber, * units of 100 m */ unsigned char length_smf; /* Link length supported for 50 um OM2 fiber, units of 10 m */ unsigned char length_smf_om2; /* Link length supported for 62.5 um OM1 fiber, units of 10 m */ unsigned char length_smf_om1; /* Link length supported for copper or direct attach cable, * units of m */ unsigned char length_cable; /* Link length supported for 50 um OM3 fiber, units of 10 m */ unsigned char length_om3; unsigned char vendor_name[16]; /* ASCII */ /* Code for electronic or optical compatibility */ unsigned char transceiver; unsigned char vendor_oui[3]; /* SFP vendor IEEE company ID */ /* Part number provided by SFP vendor (ASCII) */ unsigned char vendor_pn[16]; /* Revision level for part number provided by vendor (ASCII) */ unsigned char vendor_rev[4]; /* Laser wavelength (Passive/Active Cable * Specification Compliance) */ unsigned char wave_length[2]; unsigned char unallocated; /* Check code for Base ID Fields (addresses 0 to 62) */ unsigned char cc_base; } base_id_fields; /* Offset 64~95 */ struct { unsigned char options[2]; unsigned char br_max; unsigned char br_min; unsigned char vendor_sn[16]; unsigned char date_code[8]; unsigned char diag_monitoring_type; unsigned char enhanced_options; unsigned char sff8472_compliance; unsigned char cc_ext; } ext_id_fields; /* Offset 96~255 */ struct { unsigned char vendor_spec_eeprom[32]; unsigned char rsvd[128]; } vendor_spec_id_fields; }; struct unf_sfp_data_field_a2_s { /* Offset 0~119 */ struct { /* 0~39 */ struct { unsigned char temp_alarm_high[2]; unsigned char temp_alarm_low[2]; unsigned char temp_warning_high[2]; unsigned char temp_warning_low[2]; unsigned char vcc_alarm_high[2]; unsigned char vcc_alarm_low[2]; unsigned char vcc_warning_high[2]; unsigned char vcc_warning_low[2]; unsigned char bias_alarm_high[2]; unsigned char bias_alarm_low[2]; unsigned char bias_warning_high[2]; unsigned char bias_warning_low[2]; unsigned char tx_alarm_high[2]; unsigned char tx_alarm_low[2]; unsigned char tx_warning_high[2]; unsigned char tx_warning_low[2]; unsigned char rx_alarm_high[2]; unsigned char rx_alarm_low[2]; unsigned char rx_warning_high[2]; unsigned char rx_warning_low[2]; } alarm_warn_th; unsigned char unallocated0[16]; unsigned char ext_cal_constants[36]; unsigned char unallocated1[3]; unsigned char cc_dmi; /* 96~105 */ struct { unsigned char temp[2]; unsigned char vcc[2]; unsigned char tx_bias[2]; unsigned char tx_power[2]; unsigned char rx_power[2]; } diag; unsigned char unallocated2[4]; struct { unsigned char data_rdy_bar_state : 1; unsigned char rx_los : 1; unsigned char tx_fault_state : 1; unsigned char soft_rate_select_state : 1; unsigned char rate_select_state : 1; unsigned char rs_state : 1; unsigned char soft_tx_disable_select : 1; unsigned char tx_disable_state : 1; } status_ctrl; unsigned char rsvd; /* 112~113 */ struct { /* 112 */ unsigned char tx_alarm_low : 1; unsigned char tx_alarm_high : 1; unsigned char tx_bias_alarm_low : 1; unsigned char tx_bias_alarm_high : 1; unsigned char vcc_alarm_low : 1; unsigned char vcc_alarm_high : 1; unsigned char temp_alarm_low : 1; unsigned char temp_alarm_high : 1; /* 113 */ unsigned char rsvd : 6; unsigned char rx_alarm_low : 1; unsigned char rx_alarm_high : 1; } alarm; unsigned char unallocated3[2]; /* 116~117 */ struct { /* 116 */ unsigned char tx_warn_lo : 1; unsigned char tx_warn_hi : 1; unsigned char bias_warn_lo : 1; unsigned char bias_warn_hi : 1; unsigned char vcc_warn_lo : 1; unsigned char vcc_warn_hi : 1; unsigned char temp_warn_lo : 1; unsigned char temp_warn_hi : 1; /* 117 */ unsigned char rsvd : 6; unsigned char rx_warn_lo : 1; unsigned char rx_warn_hi : 1; } warning; unsigned char ext_status_and_ctrl[2]; } diag; /* Offset 120~255 */ struct { unsigned char vendor_spec[8]; unsigned char user_eeprom[120]; unsigned char vendor_ctrl[8]; } general_use_fields; }; struct unf_sfp_info_s { struct unf_sfp_data_field_a0_s sfp_info_a0; struct unf_sfp_data_field_a2_s sfp_info_a2; }; union unf_sfp_eeprome_info { struct unf_sfp_info_s sfp_info; struct sfp_plus_info_s sfp_plus_info; }; /* sfp info end */ struct unf_lport_sfp_info { unsigned int status; union unf_sfp_eeprome_info sfp_eeprom_info; }; struct unf_err_code_s { unsigned int loss_of_signal_count; unsigned int bad_rx_char_count; unsigned int loss_of_sync_count; unsigned int link_fail_count; unsigned int rx_eo_fa_count; unsigned int dis_frame_count; unsigned int bad_crc_count; unsigned int proto_error_count; }; /* config file */ enum unf_scsi_mode_e { UNF_PORT_MODE_UNKNOWN = 0x00, UNF_PORT_MODE_TGT = 0x10, UNF_PORT_MODE_INI = 0x20, UNF_PORT_MODE_BOTH = 0x30 }; enum unf_port_upgrade_e { UNF_PORT_UNSUPPORT_UPGRADE_REPORT = 0x00, UNF_PORT_SUPPORT_UPGRADE_REPORT = 0x01, UNF_PORT_UPGRADE_BUTT }; #define UNF_BYTES_OF_DWORD 0x4 static inline void __attribute__((unused)) unf_big_end_to_cpu( unsigned char *v_buffer, unsigned int v_size) { unsigned int *buffer = NULL; unsigned int word_sum = 0; unsigned int i = 0; if (!v_buffer) return; buffer = (unsigned int *)v_buffer; /* byte to word */ if (v_size % UNF_BYTES_OF_DWORD == 0) word_sum = v_size / UNF_BYTES_OF_DWORD; else return; /* word to byte */ while (i < word_sum) { *buffer = be32_to_cpu(*buffer); buffer++; i++; } } static inline void __attribute__((unused)) unf_cpu_to_big_end( void *v_buffer, unsigned int v_size) { #define DWORD_BIT 32 #define BYTE_BIT 8 unsigned int *buffer = NULL; unsigned int word_sum = 0; unsigned int i = 0; unsigned int tmp = 0; if (!v_buffer) return; buffer = (unsigned int *)v_buffer; /* byte to dword */ word_sum = v_size / 4; /* dword to byte */ while (i < word_sum) { *buffer = cpu_to_be32(*buffer); buffer++; i++; } if (v_size % 4) { tmp = cpu_to_be32(*buffer); tmp = tmp >> (DWORD_BIT - (v_size % 4) * BYTE_BIT); memcpy(buffer, &tmp, (v_size % 4)); } } #define UNF_FUNCTION_RETURN_CHECK(ret, dstlen) \ do { \ if (((ret) <= 0) || ((ret) >= (dstlen))) { \ UNF_TRACE(UNF_EVTLOG_DRIVER_ERR, \ UNF_LOG_REG_ATT, UNF_ERR, \ "function return (%d) check invalid, dst len(%d).", \ (ret), (dstlen)); \ } \ } while (0) #define UNF_TOP_AUTO_MASK 0x0f #define UNF_NORMAL_MODE 0 #define UNF_SET_NOMAL_MODE(mode) (mode = UNF_NORMAL_MODE) /* * SCSI status */ #define SCSI_CHECK_CONDITION 0x02 enum unf_act_topo_e { UNF_ACT_TOP_PUBLIC_LOOP = 0x1, UNF_ACT_TOP_PRIVATE_LOOP = 0x2, UNF_ACT_TOP_P2P_DIRECT = 0x4, UNF_ACT_TOP_P2P_FABRIC = 0x8, UNF_TOP_LOOP_MASK = 0x03, UNF_TOP_P2P_MASK = 0x0c, UNF_TOP_FCOE_MASK = 0x30, UNF_ACT_TOP_UNKNOWN }; #define UNF_FL_PORT_LOOP_ADDR 0x00 #define UNF_FC_PROTOCOL_TYPE 0x100 #define UNF_LOOP_ROLE_MASTER_OR_SLAVE 0x0 #define UNF_TOU16_CHECK(dest, src, over_action) \ do { \ if (unlikely((src) > 0xFFFF)) { \ UNF_TRACE(UNF_EVTLOG_DRIVER_ERR, UNF_LOG_REG_ATT, \ UNF_ERR, "ToU16 error, src 0x%x ", (src)); \ over_action; \ } \ ((dest) = (unsigned short)(src)); \ } while (0) #define UNF_PORT_SPEED_AUTO 0 #define UNF_PORT_SPEED_2_G 2 #define UNF_PORT_SPEED_4_G 4 #define UNF_PORT_SPEED_8_G 8 #define UNF_PORT_SPEED_10_G 10 #define UNF_PORT_SPEED_16_G 16 #define UNF_PORT_SPEED_32_G 32 #define UNF_PORT_SPEED_UNKNOWN (~0) #define UNF_PORT_SFP_SPEED_ERR 0xFF #define UNF_FW_VERSION_LEN 32 #define UNF_HW_VERSION_LEN 32 /* max frame size */ #define UNF_MAX_FRAME_SIZE 2112 /* default */ #define UNF_DEFAULT_FRAME_SIZE 2048 #define UNF_DEFAULT_EDTOV 2000 #define UNF_DEFAULT_RATOV 10000 #define UNF_DEFAULT_FABRIC_RATOV 10000 #define UNF_MAX_RETRY_COUNT 3 #define UNF_DEFAULT_RRTOV (10000 + 500) /* FCP-4 10.4.10 */ #define UNF_RRQ_MIN_TIMEOUT_INTERVAL 30000 #define UNF_LOGO_TIMEOUT_INTERVAL 3000 #define UNF_WRITE_RRQ_SENDERR_INTERVAL 3000 #define UNF_REC_TOV 3000 #define UNF_WAIT_SEM_TIMEOUT (5000UL) #define UNF_WAIT_ABTS_RSP_TIMEOUT (20000UL) #define UNF_INI_RRQ_REDUNDANT_TIME 500 #define UNF_INI_ELS_REDUNDANT_TIME 2000 /* ELS command values */ #define UNF_ELS_CMND_HIGH_MASK 0xff000000 #define UNF_ELS_CMND_RJT 0x01000000 #define UNF_ELS_CMND_ACC 0x02000000 #define UNF_ELS_CMND_PLOGI 0x03000000 #define UNF_ELS_CMND_FLOGI 0x04000000 #define UNF_ELS_CMND_LOGO 0x05000000 #define UNF_ELS_CMND_RLS 0x0F000000 #define UNF_ELS_CMND_ECHO 0x10000000 #define UNF_ELS_CMND_REC 0x13000000 #define UNF_ELS_CMND_RRQ 0x12000000 #define UNF_ELS_CMND_PRLI 0x20000000 #define UNF_ELS_CMND_PRLO 0x21000000 #define UNF_ELS_CMND_PDISC 0x50000000 #define UNF_ELS_CMND_FDISC 0x51000000 #define UNF_ELS_CMND_ADISC 0x52000000 #define UNF_ELS_CMND_FAN 0x60000000 #define UNF_ELS_CMND_RSCN 0x61000000 #define UNF_FCP_CMND_SRR 0x14000000 #define UNF_GS_CMND_SCR 0x62000000 #define UNF_PLOGI_VERSION_UPPER 0x20 #define UNF_PLOGI_VERSION_LOWER 0x20 #define UNF_PLOGI_CONCURRENT_SEQ 0x00FF #define UNF_PLOGI_RO_CATEGORY 0x00FE #define UNF_PLOGI_SEQ_PER_XCHG 0x0001 /* CT_IU pream defines */ #define UNF_REV_NPORTID_INIT 0x01000000 #define UNF_FSTYPE_OPT_INIT 0xfc020000 #define UNF_FSTYPE_RFT_ID 0x02170000 #define UNF_FSTYPE_GID_PT 0x01A10000 #define UNF_FSTYPE_GID_FT 0x01710000 #define UNF_FSTYPE_RFF_ID 0x021F0000 #define UNF_FSTYPE_GFF_ID 0x011F0000 #define UNF_FSTYPE_GNN_ID 0x01130000 #define UNF_FSTYPE_GPN_ID 0x01120000 #define UNF_CT_IU_RSP_MASK 0xffff0000 #define UNF_CT_IU_REASON_MASK 0x00ff0000 #define UNF_CT_IU_EXPLAN_MASK 0x0000ff00 #define UNF_CT_IU_REJECT 0x80010000 #define UNF_CT_IU_ACCEPT 0x80020000 #define UNF_FABRIC_FULL_REG 0x00000003 #define UNF_FC4_SCSI_BIT8 0x00000100 #define UNF_FC4_FCP_TYPE 0x00000008 #define UNF_FRAG_REASON_VENDOR 0 /* GID_PT, GID_FT */ #define UNF_GID_PT_TYPE 0x7F000000 #define UNF_GID_FT_TYPE 0x00000008 /* * FC4 defines */ #define UNF_FC4_FRAME_PAGE_SIZE 0x10 #define UNF_FC4_FRAME_PAGE_SIZE_SHIFT 16 #define UNF_FC4_FRAME_PARM_0_FCP 0x08000000 #define UNF_FC4_FRAME_PARM_0_I_PAIR 0x00002000 #define UNF_FC4_FRAME_PARM_0_GOOD_RSP_CODE 0x00000100 #define UNF_FC4_FRAME_PARM_3_INI 0x00000020 #define UNF_FC4_FRAME_PARM_3_TGT 0x00000010 #define UNF_FC4_FRAME_PARM_3_R_XFER_DIS 0x00000002 #define UNF_FC4_FRAME_PARM_3_CONF_ALLOW 0x00000080 /* bit 7 */ #define UNF_FC4_FRAME_PARM_3_REC_SUPPORT 0x00000400 /* bit 10 */ #define UNF_FC4_FRAME_PARM_3_TASK_RETRY_ID_SUPPORT 0x00000200 /* bit 9 */ #define UNF_FC4_FRAME_PARM_3_RETRY_SUPPORT 0x00000100 /* bit 8 */ #define UNF_FC4_FRAME_PARM_3_CONF_ALLOW 0x00000080 /* bit 7 */ #define UNF_GFF_ACC_MASK 0xFF000000 /* Reject CT_IU Reason Codes */ #define UNF_CTIU_RJT_MASK 0xffff0000 #define UNF_CTIU_RJT_INVALID_COMMAND 0x00010000 #define UNF_CTIU_RJT_INVALID_VERSION 0x00020000 #define UNF_CTIU_RJT_LOGIC_ERR 0x00030000 #define UNF_CTIU_RJT_INVALID_SIZE 0x00040000 #define UNF_CTIU_RJT_LOGIC_BUSY 0x00050000 #define UNF_CTIU_RJT_PROTOCOL_ERR 0x00070000 #define UNF_CTIU_RJT_UNABLE_PERFORM 0x00090000 #define UNF_CTIU_RJT_NOT_SUPPORTED 0x000B0000 /* FS_RJT Reason code explanations, FC-GS-2 6.5 */ #define UNF_CTIU_RJT_EXP_MASK 0x0000FF00 #define UNF_CTIU_RJT_EXP_NO_ADDTION 0x00000000 #define UNF_CTIU_RJT_EXP_PORTID_NO_REG 0x00000100 #define UNF_CTIU_RJT_EXP_PORTNAME_NO_REG 0x00000200 #define UNF_CTIU_RJT_EXP_NODENAME_NO_REG 0x00000300 #define UNF_CTIU_RJT_EXP_FC4TYPE_NO_REG 0x00000700 #define UNF_CTIU_RJT_EXP_PORTTYPE_NO_REG 0x00000A00 /* * LS_RJT defines */ #define UNF_FC_LS_RJT_REASON_MASK 0x00ff0000 /* * LS_RJT reason code defines */ #define UNF_LS_OK 0x00000000 #define UNF_LS_RJT_INVALID_COMMAND 0x00010000 #define UNF_LS_RJT_LOGICAL_ERROR 0x00030000 #define UNF_LS_RJT_BUSY 0x00050000 #define UNF_LS_RJT_PROTOCOL_ERROR 0x00070000 #define UNF_LS_RJT_REQUEST_DENIED 0x00090000 #define UNF_LS_RJT_NOT_SUPPORTED 0x000b0000 #define UNF_LS_RJT_CLASS_ERROR 0x000c0000 /* * LS_RJT code explanation */ #define UNF_LS_RJT_NO_ADDITIONAL_INFO 0x00000000 #define UNF_LS_RJT_INV_DATA_FIELD_SIZE 0x00000700 #define UNF_LS_RJT_INV_COMMON_SERV_PARAM 0x00000F00 #define UNF_LS_RJT_INVALID_OXID_RXID 0x00001700 #define UNF_LS_RJT_COMMAND_IN_PROGRESS 0x00001900 #define UNF_LS_RJT_INSUFFICIENT_RESOURCES 0x00002900 #define UNF_LS_RJT_COMMAND_NOT_SUPPORTED 0x00002C00 #define UNF_LS_RJT_UNABLE_TO_SUPLY_REQ_DATA 0x00002A00 #define UNF_LS_RJT_INVALID_PAYLOAD_LENGTH 0x00002D00 #define UNF_P2P_LOCAL_NPORT_ID 0x000000EF #define UNF_P2P_REMOTE_NPORT_ID 0x000000D6 #define UNF_BBCREDIT_MANAGE_NFPORT 0 #define UNF_BBCREDIT_MANAGE_LPORT 1 #define UNF_BBCREDIT_LPORT 0 #define UNF_CONTIN_INCREASE_SUPPORT 1 #define UNF_CLASS_VALID 1 #define UNF_CLASS_INVALID 0 #define UNF_NOT_MEANINGFUL 0 #define UNF_NO_SERVICE_PARAMS 0 #define UNF_CLEAN_ADDRESS_DEFAULT 0 #define UNF_PRIORITY_ENABLE 1 #define UNF_PRIORITY_DISABLE 0 #define UNF_SEQUEN_DELIVERY_REQ 1 /* Sequential delivery requested */ /* RSCN */ #define UNF_RSCN_PORT_ADDR 0x0 #define UNF_RSCN_AREA_ADDR_GROUP 0x1 #define UNF_RSCN_DOMAIN_ADDR_GROUP 0x2 #define UNF_RSCN_FABRIC_ADDR_GROUP 0x3 #define UNF_GET_RSCN_PLD_LEN(v_cmnd) ((v_cmnd)&0x0000ffff) #define UNF_RSCN_PAGE_LEN 0x4 #define UNF_PORT_LINK_UP 0x0000 #define UNF_PORT_LINK_DOWN 0x0001 #define UNF_PORT_RESET_START 0x0002 #define UNF_PORT_RESET_END 0x0003 #define UNF_PORT_LINK_UNKNOWN 0x0004 #define UNF_PORT_NOP 0x0005 #define UNF_PORT_CORE_FATAL_ERROR 0x0006 #define UNF_PORT_CORE_UNRECOVERABLE_ERROR 0x0007 #define UNF_PORT_CORE_RECOVERABLE_ERROR 0x0008 #define UNF_PORT_UPDATE_PROCESS 0x000b #define UNF_PORT_DEBUG_DUMP 0x000c #define UNF_PORT_GET_FWLOG 0x000d #define UNF_PORT_CLEAN_DONE 0x000e #define UNF_PORT_BEGIN_REMOVE 0x000f #define UNF_PORT_RELEASE_RPORT_INDEX 0x0010 #define UNF_PORT_ABNORMAL_RESET 0x0012 #define UNF_READ 0 #define UNF_WRITE 1 #define UNF_READ_64 2 #define UNF_WRITE_64 3 /* *SCSI begin */ #define SCSIOPC_TEST_UNIT_READY 0x00 #define SCSIOPC_INQUIRY 0x12 #define SCSIOPC_MODE_SENSE_6 0x1A #define SCSIOPC_MODE_SENSE_10 0x5A #define SCSIOPC_MODE_SELECT_6 0x15 #define SCSIOPC_RESERVE 0x16 #define SCSIOPC_RELEASE 0x17 #define SCSIOPC_START_STOP_UNIT 0x1B #define SCSIOPC_READ_CAPACITY_10 0x25 #define SCSIOPC_READ_CAPACITY_16 0x9E #define SCSIOPC_READ_6 0x08 #define SCSIOPC_READ_10 0x28 #define SCSIOPC_READ_12 0xA8 #define SCSIOPC_READ_16 0x88 #define SCSIOPC_WRITE_6 0x0A #define SCSIOPC_WRITE_10 0x2A #define SCSIOPC_WRITE_12 0xAA #define SCSIOPC_WRITE_16 0x8A #define SCSIOPC_WRITE_VERIFY 0x2E #define SCSIOPC_VERIFY_10 0x2F #define SCSIOPC_VERIFY_12 0xAF #define SCSIOPC_VERIFY_16 0x8F #define SCSIOPC_REQUEST_SENSE 0x03 #define SCSIOPC_REPORT_LUN 0xA0 #define SCSIOPC_FORMAT_UNIT 0x04 #define SCSIOPC_SEND_DIAGNOSTIC 0x1D #define SCSIOPC_WRITE_SAME_10 0x41 #define SCSIOPC_WRITE_SAME_16 0x93 #define SCSIOPC_READ_BUFFER 0x3C #define SCSIOPC_WRITE_BUFFER 0x3B #define SCSIOPC_LOG_SENSE 0x4D #define SCSIOPC_MODE_SELECT_10 0x55 #define SCSIOPC_SYNCHRONIZE_CACHE_10 0x35 #define SCSIOPC_SYNCHRONIZE_CACHE_16 0x91 #define SCSIOPC_WRITE_AND_VERIFY_10 0x2E #define SCSIOPC_WRITE_AND_VERIFY_12 0xAE #define SCSIOPC_WRITE_AND_VERIFY_16 0x8E #define SCSIOPC_READ_MEDIA_SERIAL_NUMBER 0xAB #define SCSIOPC_REASSIGN_BLOCKS 0x07 #define SCSIOPC_ATA_PASSTHROUGH_16 0x85 #define SCSIOPC_ATA_PASSTHROUGH_12 0xa1 /* * SCSI end */ #define IS_READ_COMMAND(opcode) ((opcode) == SCSIOPC_READ_6 || \ (opcode) == SCSIOPC_READ_10 || \ (opcode) == SCSIOPC_READ_12 || \ (opcode) == SCSIOPC_READ_16) #define IS_WRITE_COMMAND(opcode) ((opcode) == SCSIOPC_WRITE_6 || \ (opcode) == SCSIOPC_WRITE_10 || \ (opcode) == SCSIOPC_WRITE_12 || \ (opcode) == SCSIOPC_WRITE_16) #define FCP_RSP_LEN_VALID_MASK 0x1 #define FCP_SNS_LEN_VALID_MASK 0x2 #define FCP_RESID_OVER_MASK 0x4 #define FCP_RESID_UNDER_MASK 0x8 #define FCP_CONF_REQ_MASK 0x10 #define FCP_SCSI_STATUS_GOOD 0x0 #define UNF_DELAYED_WORK_SYNC(v_ret, v_pord_id, v_work, v_work_symb) \ do { \ if (!cancel_delayed_work_sync(v_work)) { \ UNF_TRACE(UNF_EVTLOG_DRIVER_INFO, UNF_LOG_REG_ATT, \ UNF_INFO, \ "[info]LPort or RPort(0x%x) %s worker can't destroy, or no worker", \ v_pord_id, v_work_symb); \ v_ret = UNF_RETURN_ERROR; \ } else { \ v_ret = RETURN_OK; \ } \ } while (0) #define UNF_DELAYED_WORK(v_ret, v_pord_id, v_work, v_work_symb) \ do { \ if (!cancel_delayed_work(v_work)) { \ UNF_TRACE(UNF_EVTLOG_DRIVER_INFO, UNF_LOG_REG_ATT, \ UNF_MAJOR, \ "LPort or RPort(0x%x) %s worker can't destroy, or no worker.", \ v_pord_id, v_work_symb); \ v_ret = UNF_RETURN_ERROR; \ } else { \ v_ret = RETURN_OK; \ } \ } while (0) #define UNF_DELAYED_WORK_CONFUSED(v_ret, v_pord_id, v_work, v_work_symb) \ do { \ if (in_interrupt()) { \ UNF_DELAYED_WORK(v_ret, v_pord_id, v_work, \ v_work_symb) \ } else { \ UNF_DELAYED_WORK_SYNC(v_ret, v_pord_id, v_work, \ v_work_symb) \ } \ } while (0) #define UNF_GET_IO_XCHG_TAG(v_pkg) \ ((unsigned short)((v_pkg)->private[PKG_PRIVATE_XCHG_HOT_POOL_INDEX])) #define UNF_GET_SFS_ENTRY(v_pkg) ((union unf_sfs_u *)(void *) \ (((struct unf_frame_pkg_s *)v_pkg)->unf_cmnd_pload_bl.buffer_ptr)) /* FLOGI */ #define UNF_GET_FLOGI_PAYLOAD(v_pkg) (&(((union unf_sfs_u *) \ (UNF_GET_SFS_ENTRY(v_pkg)))->flogi.flogi_payload)) #define UNF_FLOGI_PAYLOAD_LEN sizeof(struct unf_flogi_payload_s) /* FLOGI ACC */ #define UNF_GET_FLOGI_ACC_PAYLOAD(v_pkg) (&(((union unf_sfs_u *) \ (UNF_GET_SFS_ENTRY(v_pkg)))->flogi_acc.flogi_payload)) #define UNF_FLOGI_ACC_PAYLOAD_LEN sizeof(struct unf_flogi_payload_s) /* FDISC */ #define UNF_FDISC_PAYLOAD_LEN UNF_FLOGI_PAYLOAD_LEN #define UNF_FDISC_ACC_PAYLOAD_LEN UNF_FLOGI_ACC_PAYLOAD_LEN /* PLOGI */ #define UNF_GET_PLOGI_PAYLOAD(v_pkg) \ (&(((union unf_sfs_u *)(UNF_GET_SFS_ENTRY(v_pkg)))->plogi.payload)) #define UNF_PLOGI_PAYLOAD_LEN sizeof(struct unf_plogi_payload_s) /* PLOGI ACC */ #define UNF_GET_PLOGI_ACC_PAYLOAD(v_pkg) \ (&(((union unf_sfs_u *)(UNF_GET_SFS_ENTRY(v_pkg)))->plogi_acc.payload)) #define UNF_PLOGI_ACC_PAYLOAD_LEN sizeof(struct unf_plogi_payload_s) /* LOGO */ #define UNF_LOGO_PAYLOAD_LEN sizeof(struct unf_logo_payload_s) /* ECHO */ #define UNF_GET_ECHO_PAYLOAD(v_pkg) \ (((union unf_sfs_u *)(UNF_GET_SFS_ENTRY(v_pkg)))->echo.echo_pld) /* ECHO PHYADDR */ #define UNF_GET_ECHO_PAYLOAD_PHYADDR(v_pkg) \ (((union unf_sfs_u *)(UNF_GET_SFS_ENTRY(v_pkg)))->echo.phy_echo_addr) #define UNF_ECHO_PAYLOAD_LEN sizeof(struct unf_echo_payload_s) /* RLS */ #define UNF_RLS_PAYLOAD_LEN sizeof(struct unf_rls_payload_s) /* ECHO ACC */ #define UNF_ECHO_ACC_PAYLOAD_LEN sizeof(struct unf_echo_payload_s) /* REC */ #define UNF_REC_PAYLOAD_LEN sizeof(struct unf_rec_pld_s) /* REC ACC */ #define UNF_GET_REC_ACC_PAYLOAD(v_pkg) \ (&(((union unf_sfs_u *)(UNF_GET_SFS_ENTRY(v_pkg)))->els_acc.cmnd)) #define UNF_REC_ACC_PAYLOAD_LEN (sizeof(struct unf_els_acc_s) - \ sizeof(struct unf_fchead_s)) /* RRQ */ #define UNF_RRQ_PAYLOAD_LEN (sizeof(struct unf_rrq_s) - \ sizeof(struct unf_fchead_s)) /* PRLI */ #define UNF_PRLI_PAYLOAD_LEN sizeof(struct unf_pril_payload_s) /* PRLI ACC */ #define UNF_PRLI_ACC_PAYLOAD_LEN sizeof(struct unf_pril_payload_s) /* PRLO */ #define UNF_PRLO_PAYLOAD_LEN sizeof(struct unf_pril_payload_s) #define UNF_PRLO_ACC_PAYLOAD_LEN sizeof(struct unf_pril_payload_s) /* PDISC */ #define UNF_PDISC_PAYLOAD_LEN sizeof(struct unf_plogi_payload_s) /* PDISC ACC */ #define UNF_PDISC_ACC_PAYLOAD_LEN sizeof(struct unf_plogi_payload_s) /* ADISC */ #define UNF_ADISC_PAYLOAD_LEN sizeof(struct unf_adisc_payload_s) /* ADISC ACC */ #define UNF_ADISC_ACC_PAYLOAD_LEN sizeof(struct unf_adisc_payload_s) /* RSCN ACC */ #define UNF_GET_RSCN_ACC_PAYLOAD(v_pkg) \ (&(((union unf_sfs_u *)(UNF_GET_SFS_ENTRY(v_pkg)))->els_acc.cmnd)) #define UNF_RSCN_ACC_PAYLOAD_LEN (sizeof(struct unf_els_acc_s) - \ sizeof(struct unf_fchead_s)) /* LOGO ACC */ #define UNF_LOGO_ACC_PAYLOAD_LEN (sizeof(struct unf_els_acc_s) - \ sizeof(struct unf_fchead_s)) /* RRQ ACC */ #define UNF_RRQ_ACC_PAYLOAD_LEN (sizeof(struct unf_els_acc_s) - \ sizeof(struct unf_fchead_s)) /* RLS ACC */ #define UNF_RLS_ACC_PAYLOAD_LEN (sizeof(struct unf_rls_acc_s) - \ sizeof(struct unf_fchead_s)) /* GPN_ID */ #define UNF_GPNID_PAYLOAD_LEN (sizeof(struct unf_gpnid_s) - \ sizeof(struct unf_fchead_s)) #define UNF_GPNID_RSP_PAYLOAD_LEN (sizeof(struct unf_gpnid_rsp_s) - \ sizeof(struct unf_fchead_s)) /* GNN_ID */ #define UNF_GNNID_PAYLOAD_LEN (sizeof(struct unf_gnnid_s) - \ sizeof(struct unf_fchead_s)) #define UNF_GNNID_RSP_PAYLOAD_LEN (sizeof(struct unf_gnnid_rsp_s) - \ sizeof(struct unf_fchead_s)) /* GFF_ID */ #define UNF_GFFID_PAYLOAD_LEN (sizeof(struct unf_gffid_s) - \ sizeof(struct unf_fchead_s)) #define UNF_GFFID_RSP_PAYLOAD_LEN (sizeof(struct unf_gffid_rsp_s) - \ sizeof(struct unf_fchead_s)) /* GID_FT/GID_PT */ #define UNF_GET_GID_PAYLOAD(v_pkg) (&(((union unf_sfs_u *) \ UNF_GET_SFS_ENTRY(v_pkg))->get_id.gid_req.ctiu_pream)) #define UNF_GID_PAYLOAD_LEN (sizeof(struct unf_ctiu_prem_s) + \ sizeof(unsigned int)) #define UNF_GID_ACC_PAYLOAD_LEN sizeof(struct unf_gif_acc_pld_s) /* RFT_ID */ #define UNF_RFTID_PAYLOAD_LEN (sizeof(struct unf_rftid_s) - \ sizeof(struct unf_fchead_s)) #define UNF_RFTID_RSP_PAYLOAD_LEN sizeof(struct unf_ctiu_prem_s) /* RFF_ID */ #define UNF_RFFID_PAYLOAD_LEN (sizeof(struct unf_rffid_s) - \ sizeof(struct unf_fchead_s)) #define UNF_RFFID_RSP_PAYLOAD_LEN sizeof(struct unf_ctiu_prem_s) /* SRR */ #define UNF_SRR_PAYLOAD_LEN \ sizeof(struct unf_srr_payload_s) /* ACC&RJT */ #define UNF_ELS_ACC_RJT_LEN (sizeof(struct unf_els_rjt_s) - \ sizeof(struct unf_fchead_s)) /* SCR */ #define UNF_SCR_PAYLOAD_LEN (sizeof(struct unf_scr_s) - \ sizeof(struct unf_fchead_s)) #define UNF_SCR_RSP_PAYLOAD_LEN (sizeof(struct unf_els_acc_s) - \ sizeof(struct unf_fchead_s)) /**********************************************************/ #define UNF_GET_XCHG_TAG(v_pkg) (((struct unf_frame_pkg_s *) \ v_pkg)->private[PKG_PRIVATE_XCHG_HOT_POOL_INDEX]) #define UNF_GET_SID(v_pkg) (((struct unf_frame_pkg_s *) \ v_pkg)->frame_head.csctl_sid & UNF_NPORTID_MASK) #define UNF_GET_DID(v_pkg) (((struct unf_frame_pkg_s *) \ v_pkg)->frame_head.rctl_did & UNF_NPORTID_MASK) #define UNF_GET_OXID(v_pkg) (((struct unf_frame_pkg_s *) \ v_pkg)->frame_head.oxid_rxid >> 16) #define UNF_GET_RXID(v_pkg) ((unsigned short)((struct unf_frame_pkg_s *) \ v_pkg)->frame_head.oxid_rxid) #define UNF_GET_XFER_LEN(v_pkg) (((struct unf_frame_pkg_s *)v_pkg)->transfer_len) /* ioc abort */ #define UNF_GETXCHGALLOCTIME(v_pkg) \ (((struct unf_frame_pkg_s *)v_pkg)->private[PKG_PRIVATE_XCHG_ALLOC_TIME]) #define UNF_SET_XCHG_ALLOC_TIME(pkg, xchg) \ (((struct unf_frame_pkg_s *)(pkg))->private[PKG_PRIVATE_XCHG_ALLOC_TIME] = \ (((struct unf_xchg_s *)(xchg))->private[PKG_PRIVATE_XCHG_ALLOC_TIME])) #define UNF_SET_ABORT_INFO_IOTYPE(pkg, xchg) \ (((struct unf_frame_pkg_s *)(pkg))->private[PKG_PRIVATE_XCHG_ABORT_INFO] |= \ (((unsigned char)(((struct unf_xchg_s *)(xchg))->data_direction & 0x7))\ << 2)) #define UNF_CHECK_NPORT_FPORT_BIT(els_payload) \ (((struct unf_flogi_payload_s *)els_payload)->fabric_parms.co_parms.n_port) #define UNF_N_PORT 0 #define UNF_F_PORT 1 #define UNF_GET_RA_TOV_FROM_PARAMS(params) \ (((struct unf_fabric_parms_s *)params)->co_parms.r_a_tov) #define UNF_GET_RT_TOV_FROM_PARAMS(params) \ (((struct unf_fabric_parms_s *)params)->co_parms.r_t_tov) #define UNF_GET_E_D_TOV_FROM_PARAMS(params) \ (((struct unf_fabric_parms_s *)params)->co_parms.e_d_tov) #define UNF_GET_E_D_TOV_RESOLUTION_FROM_PARAMS(params) \ (((struct unf_fabric_parms_s *)params)->co_parms.e_d_tov_resolution) #define UNF_GET_BB_SC_N_FROM_PARAMS(params) \ (((struct unf_fabric_parms_s *)params)->co_parms.bb_scn) #define UNF_GET_BB_CREDIT_FROM_PARAMS(params) \ (((struct unf_fabric_parms_s *)params)->co_parms.bb_credit) enum unf_pcie_error_code_e { UNF_PCIE_ERROR_NONE = 0, UNF_PCIE_DATAPARITYDETECTED = 1, UNF_PCIE_SIGNALTARGETABORT, UNF_PCIE_RECEIVEDTARGETABORT, UNF_PCIE_RECEIVEDMASTERABORT, UNF_PCIE_SIGNALEDSYSTEMERROR, UNF_PCIE_DETECTEDPARITYERROR, UNF_PCIE_CORRECTABLEERRORDETECTED, UNF_PCIE_NONFATALERRORDETECTED, UNF_PCIE_FATALERRORDETECTED, UNF_PCIE_UNSUPPORTEDREQUESTDETECTED, UNF_PCIE_AUXILIARYPOWERDETECTED, UNF_PCIE_TRANSACTIONSPENDING, UNF_PCIE_UNCORRECTINTERERRSTATUS, UNF_PCIE_UNSUPPORTREQERRSTATUS, UNF_PCIE_ECRCERRORSTATUS, UNF_PCIE_MALFORMEDTLPSTATUS, UNF_PCIE_RECEIVEROVERFLOWSTATUS, UNF_PCIE_UNEXPECTCOMPLETESTATUS, UNF_PCIE_COMPLETERABORTSTATUS, UNF_PCIE_COMPLETIONTIMEOUTSTATUS, UNF_PCIE_FLOWCTRLPROTOCOLERRSTATUS, UNF_PCIE_POISONEDTLPSTATUS, UNF_PCIE_SURPRISEDOWNERRORSTATUS, UNF_PCIE_DATALINKPROTOCOLERRSTATUS, UNF_PCIE_ADVISORYNONFATALERRSTATUS, UNF_PCIE_REPLAYTIMERTIMEOUTSTATUS, UNF_PCIE_REPLAYNUMROLLOVERSTATUS, UNF_PCIE_BADDLLPSTATUS, UNF_PCIE_BADTLPSTATUS, UNF_PCIE_RECEIVERERRORSTATUS, UNF_PCIE_BUTT }; #define UNF_DMA_HI32(a) (((a) >> 32) & 0xffffffff) #define UNF_DMA_LO32(a) ((a) & 0xffffffff) #define UNF_WWN_LEN 8 #define UNF_MAC_LEN 6 /* send BLS/ELS/BLS REPLY/ELS REPLY/GS/ */ /* rcvd BLS/ELS/REQ DONE/REPLY DONE */ #define UNF_PKG_BLS_REQ 0x0100 #define UNF_PKG_BLS_REQ_DONE 0x0101 #define UNF_PKG_ELS_REQ 0x0200 #define UNF_PKG_ELS_REQ_DONE 0x0201 #define UNF_PKG_ELS_REPLY 0x0202 #define UNF_PKG_ELS_REPLY_DONE 0x0203 #define UNF_PKG_GS_REQ 0x0300 #define UNF_PKG_GS_REQ_DONE 0x0301 #define UNF_PKG_INI_IO 0x0500 #define UNF_PKG_INI_RCV_TGT_RSP 0x0507 /* external sgl struct start */ struct unf_esgl_page_s { unsigned long long page_address; dma_addr_t esgl_phyaddr; unsigned int page_size; }; struct unf_esgl_s { struct list_head entry_esgl; struct unf_esgl_page_s page; }; /* external sgl struct end */ struct unf_frame_payld_s { unsigned char *buffer_ptr; dma_addr_t buf_dma_addr; unsigned int length; }; enum pkg_private_index_e { PKG_PRIVATE_LOWLEVEL_XCHG_ADD = 0, PKG_PRIVATE_XCHG_HOT_POOL_INDEX = 1, /* Hot Pool Index */ PKG_PRIVATE_XCHG_RPORT_INDEX = 2, /* RPort index */ PKG_PRIVATE_XCHG_VP_INDEX = 3, /* VPort index */ PKG_PRIVATE_RPORT_RX_SIZE, PKG_PRIVATE_XCHG_TIMEER, PKG_PRIVATE_XCHG_ALLOC_TIME, PKG_PRIVATE_XCHG_ABORT_INFO, PKG_PRIVATE_ECHO_CMD_SND_TIME, /* local send echo cmd time stamp */ PKG_PRIVATE_ECHO_ACC_RCV_TIME, /* local receive echo acc time stamp */ PKG_PRIVATE_ECHO_CMD_RCV_TIME, /* remote receive echo cmd time stamp */ PKG_PRIVATE_ECHO_RSP_SND_TIME, /* remote send echo rsp time stamp */ PKG_MAX_PRIVATE_DATA_SIZE }; extern unsigned int dix_flag; extern unsigned int dif_sgl_mode; extern unsigned int dif_app_esc_check; extern unsigned int dif_ref_esc_check; #define UNF_DIF_ACTION_NONE 0 enum unf_adm_dif_mode_e { UNF_SWITCH_DIF_DIX = 0, UNF_APP_REF_ESCAPE, ALL_DIF_MODE = 20, }; #define UNF_VERIFY_CRC_MASK (1 << 1) #define UNF_VERIFY_APP_MASK (1 << 2) #define UNF_VERIFY_LBA_MASK (1 << 3) #define UNF_REPLACE_CRC_MASK (1 << 8) #define UNF_REPLACE_APP_MASK (1 << 9) #define UNF_REPLACE_LBA_MASK (1 << 10) #define UNF_DIF_ACTION_MASK (0xff << 16) #define UNF_DIF_ACTION_INSERT (0x1 << 16) #define UNF_DIF_ACTION_VERIFY_AND_DELETE (0x2 << 16) #define UNF_DIF_ACTION_VERIFY_AND_FORWARD (0x3 << 16) #define UNF_DIF_ACTION_VERIFY_AND_REPLACE (0x4 << 16) #define UNF_DIF_ACTION_NO_INCREASE_REFTAG (0x1 << 24) #define UNF_DEFAULT_CRC_GUARD_SEED (0) #define UNF_CAL_BLOCK_CNT(data_len, sector_size) ((data_len) / (sector_size)) #define UNF_DIF_DOUBLE_SGL (1 << 1) #define UNF_DIF_SECTSIZE_4KB (1 << 2) #define UNF_DIF_LBA_NONE_INCREASE (1 << 3) #define UNF_DIF_TYPE3 (1 << 4) #define HIFC_DIF_APP_REF_ESC_NOT_CHECK 1 #define HIFC_DIF_APP_REF_ESC_CHECK 0 enum unf_io_state_e { UNF_INI_IO = 0, UNF_TGT_XFER = 1, UNF_TGT_RSP = 2 }; #define UNF_PKG_LAST_RESPONSE 0 #define UNF_PKG_NOT_LAST_RESPONSE 1 #define UNF_PKG_LAST_REQUEST 1 #define UNF_PKG_NOT_LAST_REQUEST 0 struct unf_frame_pkg_s { /* pkt type:BLS/ELS/FC4LS/CMND/XFER/RSP */ unsigned int type; unsigned int last_pkg_flag; #define UNF_FCP_RESPONSE_VALID 0x01 #define UNF_FCP_SENSE_VALID 0x02 /* resp and sense vailed flag */ unsigned int response_and_sense_valid_flag; unsigned int cmnd; struct unf_fchead_s frame_head; unsigned int entry_count; void *xchg_contex; unsigned int transfer_len; unsigned int residus_len; unsigned int status; unsigned int status_sub_code; enum unf_io_state_e io_state; unsigned int qos_level; unsigned int private[PKG_MAX_PRIVATE_DATA_SIZE]; unsigned char byte_orders; struct unf_fcp_cmnd_s *fcp_cmnd; struct unf_dif_control_info_s dif_control; struct unf_frame_payld_s unf_cmnd_pload_bl; struct unf_frame_payld_s unf_rsp_pload_bl; struct unf_frame_payld_s unf_sense_pload_bl; void *upper_cmd; unsigned int abts_maker_status; }; #define UNF_MAX_SFS_XCHG 2048 #define UNF_RESERVE_SFS_XCHG 128 /* times on exchange mgr num */ struct unf_lport_cfg_item_s { unsigned int port_id; unsigned int port_mode; /* INI(0x20) TGT(0x10) BOTH(0x30) */ unsigned int port_topology; /* 0x3:loop , 0xc:p2p ,0xf:auto */ unsigned int max_queue_depth; unsigned int max_io; /* Recommended Value 512-4096 */ unsigned int max_login; unsigned int max_sfs_xchg; /* 0:auto 1:1Gbps 2:2Gbps 4:4Gbps 8:8Gbps 16:16Gbps */ unsigned int port_speed; unsigned int tape_support; /* tape support */ unsigned int fcp_conf; /* fcp confirm support */ unsigned int bb_scn; unsigned int sum_resource; enum int_e res_mgmt_enabled; }; struct unf_port_dynamic_info_s { unsigned int sfp_posion; unsigned int sfp_valid; unsigned int phy_link; unsigned int firmware_state; unsigned int cur_speed; unsigned int mailbox_timeout_cnt; }; struct unf_hinicam_pkg { unsigned int msg_format; void *buff_in; void *buff_out; unsigned int in_size; unsigned int *out_size; }; struct unf_version_str_s { char *buf; unsigned int buf_len; }; struct unf_buf_s { unsigned char *cbuf; unsigned int buf_len; }; struct unf_rw_reg_param_s { unsigned int rw_type; unsigned int offset; unsigned long long value; }; /* get ucode & up ver */ #define HIFC_VER_LEN (16) #define HIFC_COMPILE_TIME_LEN (20) struct unf_fw_version_s { unsigned int message_type; unsigned char fw_version[HIFC_VER_LEN]; }; enum unf_port_config_set_op_e { UNF_PORT_CFG_SET_SPEED, UNF_PORT_CFG_SET_TOPO, UNF_PORT_CFG_SET_BBSCN, UNF_PORT_CFG_SET_MODE, UNF_PORT_CFG_SET_SFP_SWITCH, UNF_PORT_CFG_SET_PORT_SWITCH, UNF_PORT_CFG_SET_POWER_STATE, UNF_PORT_CFG_SET_PORT_STATE, UNF_PORT_CFG_SET_INTR_COALSEC, UNF_PORT_CFG_UPDATE_PORT, UNF_PORT_CFG_UPDATE_WWN, UNF_PORT_CFG_TEST_FLASH, UNF_PORT_CFG_SET_FCP_CONF, UNF_PORT_CFG_SET_LOOP_ROLE, UNF_PORT_CFG_SET_INIT_REQ, UNF_PORT_CFG_SET_MAX_SUPPORT_SPEED, UNF_PORT_CFG_SET_MAC_ADDR, UNF_PORT_CFG_SET_SFP_USEDTIME, UNF_PORT_CFG_SET_PORT_TRANSFER_PARAMETER, UNF_PORT_CFG_SET_SFP_REG_WRITE, UNF_PORT_CFG_UPDATE_SFP, UNF_PORT_CFG_UPDATE_FABRIC_PARAM, UNF_PORT_CFG_UPDATE_PLOGI_PARAM, UNF_PORT_CFG_UPDATE_FDISC_PARAM, UNF_PORT_CFG_SAVE_HBA_INFO, UNF_PORT_CFG_SET_HBA_BASE_INFO, UNF_PORT_CFG_SET_FLASH_DATA_INFO, UNF_PORT_CFG_SET_BUTT }; enum unf_port_config_get_op_e { UNF_PORT_CFG_GET_SPEED_CFG, UNF_PORT_CFG_GET_SPEED_ACT, UNF_PORT_CFG_GET_TOPO_CFG, UNF_PORT_CFG_GET_TOPO_ACT, UNF_PORT_CFG_GET_MODE, UNF_PORT_CFG_GET_LOOP_MAP, UNF_PORT_CFG_GET_TOV, UNF_PORT_CFG_GET_SFP_PRESENT, UNF_PORT_CFG_GET_SFP_INFO, UNF_PORT_CFG_GET_FW_VER, UNF_PORT_CFG_GET_HW_VER, UNF_PORT_CFG_GET_LESB_THEN_CLR, /* Link Error Status Block, LESB */ UNF_PORT_CFG_GET_DYNAMIC_INFO, UNF_PORT_CFG_GET_VITAL_REGS, UNF_PORT_CFG_CLR_LESB, UNF_PORT_CFG_GET_WORKBALE_BBCREDIT, UNF_PORT_CFG_GET_WORKBALE_BBSCN, UNF_PORT_CFG_GET_FC_SERDES, UNF_PORT_CFG_GET_LOOP_ALPA, UNF_PORT_CFG_GET_SFP_DYNAMIC_INFO, UNF_PORT_CFG_GET_MAC_ADDR, UNF_PORT_CFG_GET_SFP_USEDTIME, UNF_PORT_CFG_GET_PORT_INFO, UNF_PORT_CFG_DDT_TEST, UNF_PORT_CFG_GET_LED_STATE, UNF_PORT_CFG_GET_VLAN, UNF_PORT_CFG_GET_SFP_REG_READ, UNF_PORT_CFG_GET_SFP_VER, UNF_PORT_CFG_GET_SFP_SUPPORT_UPDATE, UNF_PORT_CFG_GET_SFP_LOG, UNF_PORT_CFG_GET_FEC, UNF_PORT_CFG_GET_PCIE_LINK_STATE, UNF_PORT_CFG_GET_FLASH_DATA_INFO, UNF_PORT_CFG_GET_BUTT }; enum unf_port_diag_op_e { UNF_PORT_DIAG_PORT_DETAIL, UNF_PORT_DIAG_RD_WR_REG, UNF_PORT_DIAG_BUTT }; enum unf_port_config_state_e { UNF_PORT_CONFIG_STATE_START, UNF_PORT_CONFIG_STATE_STOP, UNF_PORT_CONFIG_STATE_RESET, UNF_PORT_CONFIG_STATE_STOP_INTR, UNF_PORT_CONFIG_STATE_BUTT }; struct unf_port_login_parms_s { enum unf_act_topo_e en_act_topo; unsigned int rport_index; unsigned int seq_cnt : 1; unsigned int ed_tov : 1; unsigned int reserved : 14; unsigned int tx_mfs : 16; unsigned int ed_tov_timer_val; unsigned char remote_rttov_tag; unsigned char remote_edtov_tag; unsigned short remote_bbcredit; unsigned short compared_bbscn; unsigned int compared_edtov_val; unsigned int compared_ratov_val; unsigned int els_cmnd_code; }; #define HIFC_FLASH_MAX_LEN 1024 // bytes struct unf_mbox_head_info_s { /* mbox header */ unsigned char cmnd_type; unsigned char length; unsigned char port_id; unsigned char pad0; /* operation */ unsigned int op_code : 4; unsigned int pad1 : 28; }; #define HIFC_FLASH_MBOX_HEAD_MAX_LEN 8 // bytes struct unf_mbox_head_sts_s { /* mbox header */ unsigned char cmnd_type; unsigned char length; unsigned char port_id; unsigned char pad0; /* operation */ unsigned short pad1; unsigned char pad2; unsigned char status; }; #define HIFC_FLASH_UEFI_MAX_LEN 16 // bytes struct unf_flash_uefi_switch_s { unsigned char writeflag; unsigned char sanbooten; unsigned char reserved[14]; }; #define HIFC_MGMT_UEFI_MAGIC_NUM 0xAF #define HIFC_MGMT_TMO_MAGIC_NUM 0xAE #define HIFC_FLASH_LINK_TMO_MAX_LEN 16 // bytes struct unf_flash_link_tmo_s { unsigned char writeflag; unsigned char link_tmo0; unsigned char link_tmo1; unsigned char link_tmo2; unsigned char link_tmo3; unsigned char reserved[11]; }; #define HIFC_FLASH_DATA_MAX_LEN (HIFC_FLASH_MAX_LEN - \ HIFC_FLASH_MBOX_HEAD_MAX_LEN) // bytes struct unf_flash_data_s { struct unf_flash_uefi_switch_s uefi_switch; // 16 bytes struct unf_flash_link_tmo_s link_tmo; // 16 bytes /* once the related struct change, the reserved size needs modify */ unsigned char reserved[HIFC_FLASH_DATA_MAX_LEN - 32]; }; /* size of hifc_flash_data_mgmt not more than 1024 bytes */ struct unf_mbox_flash_data_mgmt_s { struct unf_mbox_head_info_s mbox_head; // 8 bytes struct unf_flash_data_s flash_data; }; struct unf_flash_data_mgmt_sts_s { struct unf_mbox_head_sts_s mbox_head; // 8 bytes struct unf_flash_data_s flash_data; }; struct unf_low_level_service_op_s { unsigned int (*pfn_unf_els_send)(void *, struct unf_frame_pkg_s *); unsigned int (*pfn_unf_bls_send)(void *, struct unf_frame_pkg_s *); unsigned int (*pfn_unf_gs_send)(void *, struct unf_frame_pkg_s *); unsigned int (*pfn_unf_fc_4_ls_send)(void *, struct unf_frame_pkg_s *); unsigned int (*pfn_unf_cmnd_send)(void *, struct unf_frame_pkg_s *); unsigned int (*pfn_ll_relese_xchg_res)(void *, struct unf_frame_pkg_s *); unsigned int (*pfn_unf_release_rport_res)(void *, struct unf_rport_info_s *); unsigned int (*pfn_unf_get_consumed_res)(void *, struct unf_frame_pkg_s *); unsigned int (*pfn_unf_flush_ini_resp_que)(void *); unsigned int (*pfn_unf_alloc_rport_res)(void *, struct unf_rport_info_s *); unsigned int (*pfn_unf_rport_session_rst)(void *, struct unf_rport_info_s *); }; struct unf_low_level_port_mgr_op_s { /* fcport/opcode/input parameter */ unsigned int (*pfn_ll_port_config_set) (void *v_fc_port, enum unf_port_config_set_op_e v_op_code, void *v_para_in); /* fcport/opcode/output parameter */ unsigned int (*pfn_ll_port_config_get) (void *v_fc_port, enum unf_port_config_get_op_e v_op_code, void *v_para_out); /* fcport/opcode/input parameter/output parameter */ unsigned int (*pfn_ll_port_diagnose) (void *v_fc_port, enum unf_port_diag_op_e v_op_code, void *v_para); }; struct unf_chip_info_s { unsigned char chip_type; unsigned char chip_work_mode; unsigned char disable_err_flag; }; struct unf_low_level_function_op_s { struct unf_chip_info_s chip_info; /* low level type */ unsigned int low_level_type; /* low level name, fc etc. */ const char *name; struct pci_dev *dev; unsigned long long sys_node_name; unsigned long long sys_port_name; struct unf_lport_cfg_item_s lport_cfg_items; /* low level Xchg mgr type, * active --alloc oxid and rxid * passtive -- not alloc oxid and rxid */ #define UNF_LOW_LEVEL_MGR_TYPE_ACTIVE 0 #define UNF_LOW_LEVEL_MGR_TYPE_PASSTIVE 1 const unsigned int xchg_mgr_type; #define UNF_NO_EXTRA_ABTS_XCHG 0x0 #define UNF_LL_IOC_ABTS_XCHG 0x1 const unsigned int abts_xchg; #define UNF_CM_RPORT_SET_QUALIFIER 0x0 #define UNF_CM_RPORT_SET_QUALIFIER_REUSE 0x1 #define UNF_CM_RPORT_SET_QUALIFIER_HIFC 0x2 /* low level pass-through flag. */ #define UNF_LOW_LEVEL_PASS_THROUGH_FIP 0x0 #define UNF_LOW_LEVEL_PASS_THROUGH_FABRIC_LOGIN 0x1 #define UNF_LOW_LEVEL_PASS_THROUGH_PORT_LOGIN 0x2 unsigned int pass_through_flag; /* low level parameter */ unsigned int support_max_npiv_num; unsigned int support_max_speed; unsigned int fc_ser_max_speed; unsigned int support_max_rport; unsigned int support_max_xid_range; unsigned int sfp_type; unsigned int update_fw_reset_active; unsigned int support_upgrade_report; unsigned int multi_conf_support; unsigned int port_type; #define UNF_LOW_LEVEL_RELEASE_RPORT_SYNC 0x0 #define UNF_LOW_LEVEL_RELEASE_RPORT_ASYNC 0x1 unsigned char rport_release_type; #define UNF_LOW_LEVEL_SIRT_PAGE_MODE_FIXED 0x0 #define UNF_LOW_LEVEL_SIRT_PAGE_MODE_XCHG 0x1 unsigned char sirt_page_mode; unsigned char sfp_speed; /* IO reference */ struct unf_low_level_service_op_s service_op; /* Port Mgr reference */ struct unf_low_level_port_mgr_op_s port_mgr_op; unsigned char chip_id; }; struct unf_cm_handle_op_s { /* return:L_Port */ void *(*pfn_unf_alloc_local_port)(void *, struct unf_low_level_function_op_s *); /* input para:L_Port */ unsigned int (*pfn_unf_release_local_port)(void *); /* input para:lport vn2vnid,output para:ok/err */ unsigned int (*pfn_unf_set_vn2vn_id)(void *, unsigned int); unsigned char (*pfn_unf_get_loop_id)(unsigned int v_port_id); /* input para:L_Port, FRAME_PKG_S */ unsigned int (*pfn_unf_receive_els_pkg)(void *v_lport, struct unf_frame_pkg_s *v_pkg); /* input para:L_Port, FRAME_PKG_S */ unsigned int (*pfn_unf_receive_gs_pkg)(void *v_lport, struct unf_frame_pkg_s *v_pkg); /* input para:L_Port, FRAME_PKG_S */ unsigned int (*pfn_unf_receive_bls_pkg)(void *v_lport, struct unf_frame_pkg_s *v_pkg); /* input para:L_Port, FRAME_PKG_S */ unsigned int (*pfn_unf_receive_fc4_ls_pkg)( void *v_lport, struct unf_frame_pkg_s *v_pkg); /* input para:L_Port, FRAME_PKG_S */ unsigned int (*pfn_unf_send_els_done)(void *v_lport, struct unf_frame_pkg_s *v_pkg); unsigned int (*pfn_unf_send_fc4_ls_done)(void *v_lport, struct unf_frame_pkg_s *v_pkg); /* input para:L_Port, FRAME_PKG_S */ unsigned int (*pfn_unf_receive_marker_status)( void *v_lport, struct unf_frame_pkg_s *v_pkg); unsigned int (*pfn_unf_receive_abts_marker_status)( void *v_lport, struct unf_frame_pkg_s *v_pkg); /* input para:L_Port, FRAME_PKG_S */ unsigned int (*pfn_unf_receive_ini_rsponse)( void *v_lport, struct unf_frame_pkg_s *v_pkg); int (*pfn_unf_get_cfg_parms)(char *v_section_name, struct unf_cfg_item_s *v_cfg_parm, unsigned int *v_cfg_value, unsigned int v_item_num); unsigned int (*pfn_unf_cm_get_sgl_entry)(void *v_pkg, char **v_buf, unsigned int *v_buf_len); unsigned int (*pfn_unf_cm_get_dif_sgl_entry)(void *v_pkg, char **v_buf, unsigned int *v_buf_len); struct unf_esgl_page_s *(*pfn_unf_get_one_free_esgl_page)( void *v_lport, struct unf_frame_pkg_s *v_pkg); /* input para:L_Port, EVENT */ unsigned int (*pfn_unf_fc_port_link_event)(void *v_lport, unsigned int v_events, void *v_input); unsigned int (*pfn_unf_fcoe_update_fcf_name)(void *v_lport, void *v_input); int (*pfn_unf_ioctl_to_com_handler)(void *v_lport, struct unf_hinicam_pkg *v_pkg); }; unsigned int unf_get_cm_handle_op(struct unf_cm_handle_op_s *v_cm_handle); int unf_common_init(void); void unf_common_exit(void); struct unf_port_info_entry_s { unsigned int bb_scn; unsigned int speed; unsigned int topo; unsigned int fec; }; enum drv_cable_connector_type_e { DRV_CABLE_CONNECTOR_NONE, DRV_CABLE_CONNECTOR_OPTICAL, DRV_CABLE_CONNECTOR_COPPER, DRV_CABLE_CONNECTOR_INVALID, DRV_CABLE_CONNECTOR_BUTT }; #endif