lpfc 8.3.27: Change algorithm for getting physical port name
Subsystems (2)
PATCH 3/6 lpfc 8.3.27: Change algorithm for getting physical port name
Implemented new algorithm for getting physical port name for all SLI4 devices
Signed-off-by Alex Iannicelli <[email protected]>
Signed-off-by James Smart <[email protected]>
---
lpfc_hw4.h | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++ lpfc_init.c | 17 ++++- lpfc_sli.c | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lpfc_sli4.h | 14 ++++ 4 files changed, 366 insertions(+), 6 deletions(-)
drivers/scsi/lpfc/lpfc_hw4.h +159 -2
@@ -785,6 +785,8 @@ union lpfc_sli4_cfg_shdr {#define LPFC_Q_CREATE_VERSION_2 2#define LPFC_Q_CREATE_VERSION_1 1#define LPFC_Q_CREATE_VERSION_0 0 +#define LPFC_OPCODE_VERSION_0 0 +#define LPFC_OPCODE_VERSION_1 1 } request;struct {uint32_t word6;
@@ -848,6 +850,7 @@ struct mbox_header {#define LPFC_MBOX_OPCODE_EQ_DESTROY 0x37#define LPFC_MBOX_OPCODE_QUERY_FW_CFG 0x3A#define LPFC_MBOX_OPCODE_FUNCTION_RESET 0x3D +#define LPFC_MBOX_OPCODE_GET_PORT_NAME 0x4D#define LPFC_MBOX_OPCODE_MQ_CREATE_EXT 0x5A#define LPFC_MBOX_OPCODE_GET_RSRC_EXTENT_INFO 0x9A#define LPFC_MBOX_OPCODE_GET_ALLOC_RSRC_EXTENT 0x9B
@@ -2030,6 +2033,15 @@ struct lpfc_mbx_read_config {#define lpfc_mbx_rd_conf_extnts_inuse_MASK 0x00000001#define lpfc_mbx_rd_conf_extnts_inuse_WORD word1uint32_t word2; +#define lpfc_mbx_rd_conf_lnk_numb_SHIFT 0 +#define lpfc_mbx_rd_conf_lnk_numb_MASK 0x0000003F +#define lpfc_mbx_rd_conf_lnk_numb_WORD word2 +#define lpfc_mbx_rd_conf_lnk_type_SHIFT 6 +#define lpfc_mbx_rd_conf_lnk_type_MASK 0x00000003 +#define lpfc_mbx_rd_conf_lnk_type_WORD word2 +#define lpfc_mbx_rd_conf_lnk_ldv_SHIFT 8 +#define lpfc_mbx_rd_conf_lnk_ldv_MASK 0x00000001 +#define lpfc_mbx_rd_conf_lnk_ldv_WORD word2#define lpfc_mbx_rd_conf_topology_SHIFT 24#define lpfc_mbx_rd_conf_topology_MASK 0x000000FF#define lpfc_mbx_rd_conf_topology_WORD word2
@@ -2563,8 +2575,152 @@ struct lpfc_mbx_get_prof_cfg { } u; }; +struct lpfc_controller_attribute { +uint32_t version_string[8 ]; +uint32_t manufacturer_name[8 ]; +uint32_t supported_modes; +uint32_t word17; +#define lpfc_cntl_attr_eprom_ver_lo_SHIFT 0 +#define lpfc_cntl_attr_eprom_ver_lo_MASK 0x000000ff +#define lpfc_cntl_attr_eprom_ver_lo_WORD word17 +#define lpfc_cntl_attr_eprom_ver_hi_SHIFT 8 +#define lpfc_cntl_attr_eprom_ver_hi_MASK 0x000000ff +#define lpfc_cntl_attr_eprom_ver_hi_WORD word17 +uint32_t mbx_da_struct_ver; +uint32_t ep_fw_da_struct_ver; +uint32_t ncsi_ver_str[3 ]; +uint32_t dflt_ext_timeout; +uint32_t model_number[8 ]; +uint32_t description[16 ]; +uint32_t serial_number[8 ]; +uint32_t ip_ver_str[8 ]; +uint32_t fw_ver_str[8 ]; +uint32_t bios_ver_str[8 ]; +uint32_t redboot_ver_str[8 ]; +uint32_t driver_ver_str[8 ]; +uint32_t flash_fw_ver_str[8 ]; +uint32_t functionality; +uint32_t word105; +#define lpfc_cntl_attr_max_cbd_len_SHIFT 0 +#define lpfc_cntl_attr_max_cbd_len_MASK 0x0000ffff +#define lpfc_cntl_attr_max_cbd_len_WORD word105 +#define lpfc_cntl_attr_asic_rev_SHIFT 16 +#define lpfc_cntl_attr_asic_rev_MASK 0x000000ff +#define lpfc_cntl_attr_asic_rev_WORD word105 +#define lpfc_cntl_attr_gen_guid0_SHIFT 24 +#define lpfc_cntl_attr_gen_guid0_MASK 0x000000ff +#define lpfc_cntl_attr_gen_guid0_WORD word105 +uint32_t gen_guid1_12[3 ]; +uint32_t word109; +#define lpfc_cntl_attr_gen_guid13_14_SHIFT 0 +#define lpfc_cntl_attr_gen_guid13_14_MASK 0x0000ffff +#define lpfc_cntl_attr_gen_guid13_14_WORD word109 +#define lpfc_cntl_attr_gen_guid15_SHIFT 16 +#define lpfc_cntl_attr_gen_guid15_MASK 0x000000ff +#define lpfc_cntl_attr_gen_guid15_WORD word109 +#define lpfc_cntl_attr_hba_port_cnt_SHIFT 24 +#define lpfc_cntl_attr_hba_port_cnt_MASK 0x000000ff +#define lpfc_cntl_attr_hba_port_cnt_WORD word109 +uint32_t word110; +#define lpfc_cntl_attr_dflt_lnk_tmo_SHIFT 0 +#define lpfc_cntl_attr_dflt_lnk_tmo_MASK 0x0000ffff +#define lpfc_cntl_attr_dflt_lnk_tmo_WORD word110 +#define lpfc_cntl_attr_multi_func_dev_SHIFT 24 +#define lpfc_cntl_attr_multi_func_dev_MASK 0x000000ff +#define lpfc_cntl_attr_multi_func_dev_WORD word110 +uint32_t word111; +#define lpfc_cntl_attr_cache_valid_SHIFT 0 +#define lpfc_cntl_attr_cache_valid_MASK 0x000000ff +#define lpfc_cntl_attr_cache_valid_WORD word111 +#define lpfc_cntl_attr_hba_status_SHIFT 8 +#define lpfc_cntl_attr_hba_status_MASK 0x000000ff +#define lpfc_cntl_attr_hba_status_WORD word111 +#define lpfc_cntl_attr_max_domain_SHIFT 16 +#define lpfc_cntl_attr_max_domain_MASK 0x000000ff +#define lpfc_cntl_attr_max_domain_WORD word111 +#define lpfc_cntl_attr_lnk_numb_SHIFT 24 +#define lpfc_cntl_attr_lnk_numb_MASK 0x0000003f +#define lpfc_cntl_attr_lnk_numb_WORD word111 +#define lpfc_cntl_attr_lnk_type_SHIFT 30 +#define lpfc_cntl_attr_lnk_type_MASK 0x00000003 +#define lpfc_cntl_attr_lnk_type_WORD word111 +uint32_t fw_post_status; +uint32_t hba_mtu[8 ]; +uint32_t word121; +uint32_t reserved1[3 ]; +uint32_t word125; +#define lpfc_cntl_attr_pci_vendor_id_SHIFT 0 +#define lpfc_cntl_attr_pci_vendor_id_MASK 0x0000ffff +#define lpfc_cntl_attr_pci_vendor_id_WORD word125 +#define lpfc_cntl_attr_pci_device_id_SHIFT 16 +#define lpfc_cntl_attr_pci_device_id_MASK 0x0000ffff +#define lpfc_cntl_attr_pci_device_id_WORD word125 +uint32_t word126; +#define lpfc_cntl_attr_pci_subvdr_id_SHIFT 0 +#define lpfc_cntl_attr_pci_subvdr_id_MASK 0x0000ffff +#define lpfc_cntl_attr_pci_subvdr_id_WORD word126 +#define lpfc_cntl_attr_pci_subsys_id_SHIFT 16 +#define lpfc_cntl_attr_pci_subsys_id_MASK 0x0000ffff +#define lpfc_cntl_attr_pci_subsys_id_WORD word126 +uint32_t word127; +#define lpfc_cntl_attr_pci_bus_num_SHIFT 0 +#define lpfc_cntl_attr_pci_bus_num_MASK 0x000000ff +#define lpfc_cntl_attr_pci_bus_num_WORD word127 +#define lpfc_cntl_attr_pci_dev_num_SHIFT 8 +#define lpfc_cntl_attr_pci_dev_num_MASK 0x000000ff +#define lpfc_cntl_attr_pci_dev_num_WORD word127 +#define lpfc_cntl_attr_pci_fnc_num_SHIFT 16 +#define lpfc_cntl_attr_pci_fnc_num_MASK 0x000000ff +#define lpfc_cntl_attr_pci_fnc_num_WORD word127 +#define lpfc_cntl_attr_inf_type_SHIFT 24 +#define lpfc_cntl_attr_inf_type_MASK 0x000000ff +#define lpfc_cntl_attr_inf_type_WORD word127 +uint32_t unique_id[2 ]; +uint32_t word130; +#define lpfc_cntl_attr_num_netfil_SHIFT 0 +#define lpfc_cntl_attr_num_netfil_MASK 0x000000ff +#define lpfc_cntl_attr_num_netfil_WORD word130 +uint32_t reserved2[4 ]; +}; + +struct lpfc_mbx_get_cntl_attributes { +union lpfc_sli4_cfg_shdr cfg_shdr; +struct lpfc_controller_attribute cntl_attr; +}; + +struct lpfc_mbx_get_port_name { +struct mbox_header header; +union { +struct { +uint32_t word4; +#define lpfc_mbx_get_port_name_lnk_type_SHIFT 0 +#define lpfc_mbx_get_port_name_lnk_type_MASK 0x00000003 +#define lpfc_mbx_get_port_name_lnk_type_WORD word4 + } request; +struct { +uint32_t word4; +#define lpfc_mbx_get_port_name_name0_SHIFT 0 +#define lpfc_mbx_get_port_name_name0_MASK 0x000000FF +#define lpfc_mbx_get_port_name_name0_WORD word4 +#define lpfc_mbx_get_port_name_name1_SHIFT 8 +#define lpfc_mbx_get_port_name_name1_MASK 0x000000FF +#define lpfc_mbx_get_port_name_name1_WORD word4 +#define lpfc_mbx_get_port_name_name2_SHIFT 16 +#define lpfc_mbx_get_port_name_name2_MASK 0x000000FF +#define lpfc_mbx_get_port_name_name2_WORD word4 +#define lpfc_mbx_get_port_name_name3_SHIFT 24 +#define lpfc_mbx_get_port_name_name3_MASK 0x000000FF +#define lpfc_mbx_get_port_name_name3_WORD word4 +#define LPFC_LINK_NUMBER_0 0 +#define LPFC_LINK_NUMBER_1 1 +#define LPFC_LINK_NUMBER_2 2 +#define LPFC_LINK_NUMBER_3 3 + } response; + } u; +}; +/* Mailbox Completion Queue Error Messages */ -#define MB_CQE_STATUS_SUCCESS 0x0 +#define MB_CQE_STATUS_SUCCESS 0x0#define MB_CQE_STATUS_INSUFFICIENT_PRIVILEGES 0x1#define MB_CQE_STATUS_INVALID_PARAMETER 0x2#define MB_CQE_STATUS_INSUFFICIENT_RESOURCES 0x3
@@ -2648,8 +2804,9 @@ struct lpfc_mqe {struct lpfc_mbx_run_link_diag_test link_diag_test;struct lpfc_mbx_get_func_cfg get_func_cfg;struct lpfc_mbx_get_prof_cfg get_prof_cfg; -struct lpfc_mbx_nop nop;struct lpfc_mbx_wr_object wr_object; +struct lpfc_mbx_get_port_name get_port_name; +struct lpfc_mbx_nop nop; } un; };
drivers/scsi/lpfc/lpfc_init.c +13 -4
@@ -1733,11 +1733,20 @@ lpfc_parse_vpd(struct lpfc_hba *phba, ui j =0 ; Length -= (3 +i);while (i--) { - phba->Port[j++] = vpd[index++]; -if (j ==19 ) -break ; +if ((phba->sli_rev ==LPFC_SLI_REV4 ) && + (phba->sli4_hba.pport_name_sta == +LPFC_SLI4_PPNAME_GET )) { + j++; + index++; + }else + phba->Port[j++] = vpd[index++]; +if (j ==19 ) +break ; } - phba->Port[j] =0 ; +if ((phba->sli_rev !=LPFC_SLI_REV4 ) || + (phba->sli4_hba.pport_name_sta == +LPFC_SLI4_PPNAME_NON )) + phba->Port[j] =0 ;continue ; }else {
drivers/scsi/lpfc/lpfc_sli4.h +14 -0
@@ -389,6 +389,16 @@ struct lpfc_iov {uint32_t vf_number; }; +struct lpfc_sli4_lnk_info { +uint8_t lnk_dv; +#define LPFC_LNK_DAT_INVAL 0 +#define LPFC_LNK_DAT_VAL 1 +uint8_t lnk_tp; +#define LPFC_LNK_GE 0x0/* FCoE */ +#define LPFC_LNK_FC 0x1/* FC */ +uint8_t lnk_no; +}; +/* SLI4 HBA data structure entries */ struct lpfc_sli4_hba {void __iomem *conf_regs_memmap_p;/* Kernel memory mapped address for
@@ -504,6 +514,10 @@ struct lpfc_sli4_hba {struct list_head sp_els_xri_aborted_work_queue;struct list_head sp_unsol_work_queue;struct lpfc_sli4_link link_state; +struct lpfc_sli4_lnk_info lnk_info; +uint32_t pport_name_sta; +#define LPFC_SLI4_PPNAME_NON 0 +#define LPFC_SLI4_PPNAME_GET 1struct lpfc_iov iov;spinlock_t abts_scsi_buf_list_lock;/* list of aborted SCSI IOs */ spinlock_t abts_sgl_list_lock;/* list of aborted els IOs */
drivers/scsi/lpfc/lpfc_sli.c +180 -0
192 lines not on this page · raw message