Lines Matching refs:bp

192 static int bnx2x_get_port_type(struct bnx2x *bp)  in bnx2x_get_port_type()  argument
195 u32 phy_idx = bnx2x_get_cur_phy_idx(bp); in bnx2x_get_port_type()
196 switch (bp->link_params.phy[phy_idx].media_type) { in bnx2x_get_port_type()
224 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_vf_settings() local
226 if (bp->state == BNX2X_STATE_OPEN) { in bnx2x_get_vf_settings()
228 &bp->vf_link_vars.link_report_flags)) in bnx2x_get_vf_settings()
233 ethtool_cmd_speed_set(cmd, bp->vf_link_vars.line_speed); in bnx2x_get_vf_settings()
260 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_settings() local
261 int cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_get_settings()
265 cmd->supported = bp->port.supported[cfg_idx] | in bnx2x_get_settings()
266 (bp->port.supported[cfg_idx ^ 1] & in bnx2x_get_settings()
268 cmd->advertising = bp->port.advertising[cfg_idx]; in bnx2x_get_settings()
269 media_type = bp->link_params.phy[bnx2x_get_cur_phy_idx(bp)].media_type; in bnx2x_get_settings()
275 if ((bp->state == BNX2X_STATE_OPEN) && bp->link_vars.link_up && in bnx2x_get_settings()
276 !(bp->flags & MF_FUNC_DIS)) { in bnx2x_get_settings()
277 cmd->duplex = bp->link_vars.duplex; in bnx2x_get_settings()
279 if (IS_MF(bp) && !BP_NOMCP(bp)) in bnx2x_get_settings()
280 ethtool_cmd_speed_set(cmd, bnx2x_get_mf_speed(bp)); in bnx2x_get_settings()
282 ethtool_cmd_speed_set(cmd, bp->link_vars.line_speed); in bnx2x_get_settings()
288 cmd->port = bnx2x_get_port_type(bp); in bnx2x_get_settings()
290 cmd->phy_address = bp->mdio.prtad; in bnx2x_get_settings()
293 if (bp->link_params.req_line_speed[cfg_idx] == SPEED_AUTO_NEG) in bnx2x_get_settings()
299 if (bp->link_vars.link_status & LINK_STATUS_AUTO_NEGOTIATE_COMPLETE) { in bnx2x_get_settings()
300 u32 status = bp->link_vars.link_status; in bnx2x_get_settings()
359 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_settings() local
363 if (IS_MF_SD(bp)) in bnx2x_set_settings()
381 if (IS_MF_SI(bp)) { in bnx2x_set_settings()
383 u32 line_speed = bp->link_vars.line_speed; in bnx2x_set_settings()
389 if (bp->common.bc_ver < REQ_BC_VER_4_SET_MF_BW) { in bnx2x_set_settings()
404 if (bp->state != BNX2X_STATE_OPEN) in bnx2x_set_settings()
406 bp->pending_max = part; in bnx2x_set_settings()
408 bnx2x_update_max_mf_config(bp, part); in bnx2x_set_settings()
413 cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_set_settings()
414 old_multi_phy_config = bp->link_params.multi_phy_config; in bnx2x_set_settings()
415 if (cmd->port != bnx2x_get_port_type(bp)) { in bnx2x_set_settings()
418 if (!(bp->port.supported[0] & SUPPORTED_TP || in bnx2x_set_settings()
419 bp->port.supported[1] & SUPPORTED_TP)) { in bnx2x_set_settings()
424 bp->link_params.multi_phy_config &= in bnx2x_set_settings()
426 if (bp->link_params.multi_phy_config & in bnx2x_set_settings()
428 bp->link_params.multi_phy_config |= in bnx2x_set_settings()
431 bp->link_params.multi_phy_config |= in bnx2x_set_settings()
437 if (!(bp->port.supported[0] & SUPPORTED_FIBRE || in bnx2x_set_settings()
438 bp->port.supported[1] & SUPPORTED_FIBRE)) { in bnx2x_set_settings()
443 bp->link_params.multi_phy_config &= in bnx2x_set_settings()
445 if (bp->link_params.multi_phy_config & in bnx2x_set_settings()
447 bp->link_params.multi_phy_config |= in bnx2x_set_settings()
450 bp->link_params.multi_phy_config |= in bnx2x_set_settings()
459 new_multi_phy_config = bp->link_params.multi_phy_config; in bnx2x_set_settings()
461 cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_set_settings()
463 bp->link_params.multi_phy_config = old_multi_phy_config; in bnx2x_set_settings()
467 u32 an_supported_speed = bp->port.supported[cfg_idx]; in bnx2x_set_settings()
468 if (bp->link_params.phy[EXT_PHY1].type == in bnx2x_set_settings()
472 if (!(bp->port.supported[cfg_idx] & SUPPORTED_Autoneg)) { in bnx2x_set_settings()
484 bp->link_params.req_line_speed[cfg_idx] = SPEED_AUTO_NEG; in bnx2x_set_settings()
485 bp->link_params.req_duplex[cfg_idx] = cmd->duplex; in bnx2x_set_settings()
486 bp->port.advertising[cfg_idx] = (ADVERTISED_Autoneg | in bnx2x_set_settings()
490 bp->link_params.speed_cap_mask[cfg_idx] = 0; in bnx2x_set_settings()
492 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_settings()
496 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_settings()
500 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_settings()
504 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_settings()
508 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_settings()
513 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_settings()
519 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_settings()
523 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_settings()
531 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_settings()
541 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_settings()
555 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_settings()
565 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_settings()
584 if (bp->port.supported[cfg_idx] & in bnx2x_set_settings()
589 } else if (bp->port.supported[cfg_idx] & in bnx2x_set_settings()
607 if (!(bp->port.supported[cfg_idx] in bnx2x_set_settings()
624 phy_idx = bnx2x_get_cur_phy_idx(bp); in bnx2x_set_settings()
625 if ((bp->port.supported[cfg_idx] & in bnx2x_set_settings()
627 (bp->link_params.phy[phy_idx].media_type != in bnx2x_set_settings()
631 } else if (bp->port.supported[cfg_idx] & in bnx2x_set_settings()
648 bp->link_params.req_line_speed[cfg_idx] = speed; in bnx2x_set_settings()
649 bp->link_params.req_duplex[cfg_idx] = cmd->duplex; in bnx2x_set_settings()
650 bp->port.advertising[cfg_idx] = advertising; in bnx2x_set_settings()
655 bp->link_params.req_line_speed[cfg_idx], in bnx2x_set_settings()
656 bp->link_params.req_duplex[cfg_idx], in bnx2x_set_settings()
657 bp->port.advertising[cfg_idx]); in bnx2x_set_settings()
660 bp->link_params.multi_phy_config = new_multi_phy_config; in bnx2x_set_settings()
662 bnx2x_stats_handle(bp, STATS_EVENT_STOP); in bnx2x_set_settings()
663 bnx2x_force_link_reset(bp); in bnx2x_set_settings()
664 bnx2x_link_set(bp); in bnx2x_set_settings()
673 static int __bnx2x_get_preset_regs_len(struct bnx2x *bp, u32 preset) in __bnx2x_get_preset_regs_len() argument
675 if (CHIP_IS_E1(bp)) in __bnx2x_get_preset_regs_len()
677 else if (CHIP_IS_E1H(bp)) in __bnx2x_get_preset_regs_len()
679 else if (CHIP_IS_E2(bp)) in __bnx2x_get_preset_regs_len()
681 else if (CHIP_IS_E3A0(bp)) in __bnx2x_get_preset_regs_len()
683 else if (CHIP_IS_E3B0(bp)) in __bnx2x_get_preset_regs_len()
689 static int __bnx2x_get_regs_len(struct bnx2x *bp) in __bnx2x_get_regs_len() argument
696 regdump_len += __bnx2x_get_preset_regs_len(bp, preset_idx); in __bnx2x_get_regs_len()
703 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_regs_len() local
706 if (IS_VF(bp)) in bnx2x_get_regs_len()
709 regdump_len = __bnx2x_get_regs_len(bp); in bnx2x_get_regs_len()
726 static const u32 *__bnx2x_get_page_addr_ar(struct bnx2x *bp) in __bnx2x_get_page_addr_ar() argument
728 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_addr_ar()
730 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_addr_ar()
736 static u32 __bnx2x_get_page_reg_num(struct bnx2x *bp) in __bnx2x_get_page_reg_num() argument
738 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_reg_num()
740 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_reg_num()
746 static const u32 *__bnx2x_get_page_write_ar(struct bnx2x *bp) in __bnx2x_get_page_write_ar() argument
748 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_write_ar()
750 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_write_ar()
756 static u32 __bnx2x_get_page_write_num(struct bnx2x *bp) in __bnx2x_get_page_write_num() argument
758 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_write_num()
760 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_write_num()
766 static const struct reg_addr *__bnx2x_get_page_read_ar(struct bnx2x *bp) in __bnx2x_get_page_read_ar() argument
768 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_read_ar()
770 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_read_ar()
776 static u32 __bnx2x_get_page_read_num(struct bnx2x *bp) in __bnx2x_get_page_read_num() argument
778 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_read_num()
780 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_read_num()
786 static bool bnx2x_is_reg_in_chip(struct bnx2x *bp, in bnx2x_is_reg_in_chip() argument
789 if (CHIP_IS_E1(bp)) in bnx2x_is_reg_in_chip()
791 else if (CHIP_IS_E1H(bp)) in bnx2x_is_reg_in_chip()
793 else if (CHIP_IS_E2(bp)) in bnx2x_is_reg_in_chip()
795 else if (CHIP_IS_E3A0(bp)) in bnx2x_is_reg_in_chip()
797 else if (CHIP_IS_E3B0(bp)) in bnx2x_is_reg_in_chip()
803 static bool bnx2x_is_wreg_in_chip(struct bnx2x *bp, in bnx2x_is_wreg_in_chip() argument
806 if (CHIP_IS_E1(bp)) in bnx2x_is_wreg_in_chip()
808 else if (CHIP_IS_E1H(bp)) in bnx2x_is_wreg_in_chip()
810 else if (CHIP_IS_E2(bp)) in bnx2x_is_wreg_in_chip()
812 else if (CHIP_IS_E3A0(bp)) in bnx2x_is_wreg_in_chip()
814 else if (CHIP_IS_E3B0(bp)) in bnx2x_is_wreg_in_chip()
831 static void bnx2x_read_pages_regs(struct bnx2x *bp, u32 *p, u32 preset) in bnx2x_read_pages_regs() argument
836 const u32 *page_addr = __bnx2x_get_page_addr_ar(bp); in bnx2x_read_pages_regs()
838 int num_pages = __bnx2x_get_page_reg_num(bp); in bnx2x_read_pages_regs()
840 const u32 *write_addr = __bnx2x_get_page_write_ar(bp); in bnx2x_read_pages_regs()
842 int write_num = __bnx2x_get_page_write_num(bp); in bnx2x_read_pages_regs()
844 const struct reg_addr *read_addr = __bnx2x_get_page_read_ar(bp); in bnx2x_read_pages_regs()
846 int read_num = __bnx2x_get_page_read_num(bp); in bnx2x_read_pages_regs()
851 REG_WR(bp, write_addr[j], page_addr[i]); in bnx2x_read_pages_regs()
859 *p++ = REG_RD(bp, addr); in bnx2x_read_pages_regs()
867 static int __bnx2x_get_preset_regs(struct bnx2x *bp, u32 *p, u32 preset) in __bnx2x_get_preset_regs() argument
872 if (CHIP_IS_E1(bp)) in __bnx2x_get_preset_regs()
874 else if (CHIP_IS_E1H(bp)) in __bnx2x_get_preset_regs()
876 else if (CHIP_IS_E2(bp)) in __bnx2x_get_preset_regs()
878 else if (CHIP_IS_E3A0(bp)) in __bnx2x_get_preset_regs()
880 else if (CHIP_IS_E3B0(bp)) in __bnx2x_get_preset_regs()
885 if (bnx2x_is_reg_in_chip(bp, &idle_reg_addrs[i]) && in __bnx2x_get_preset_regs()
888 *p++ = REG_RD(bp, idle_reg_addrs[i].addr + j*4); in __bnx2x_get_preset_regs()
894 if (bnx2x_is_reg_in_chip(bp, &reg_addrs[i]) && in __bnx2x_get_preset_regs()
897 *p++ = REG_RD(bp, reg_addrs[i].addr + j*4); in __bnx2x_get_preset_regs()
902 if (bnx2x_is_wreg_in_chip(bp, wreg_addr_p) && in __bnx2x_get_preset_regs()
905 *p++ = REG_RD(bp, wreg_addr_p->addr + i*4); in __bnx2x_get_preset_regs()
912 *p++ = REG_RD(bp, addr + j*4); in __bnx2x_get_preset_regs()
918 if (CHIP_IS_E2(bp) || CHIP_IS_E3(bp)) { in __bnx2x_get_preset_regs()
920 bnx2x_read_pages_regs(bp, p, preset); in __bnx2x_get_preset_regs()
926 static void __bnx2x_get_regs(struct bnx2x *bp, u32 *p) in __bnx2x_get_regs() argument
938 __bnx2x_get_preset_regs(bp, p, preset_idx); in __bnx2x_get_regs()
939 p += __bnx2x_get_preset_regs_len(bp, preset_idx); in __bnx2x_get_regs()
947 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_regs() local
953 if (!netif_running(bp->dev)) in bnx2x_get_regs()
961 bnx2x_disable_blocks_parity(bp); in bnx2x_get_regs()
968 if (CHIP_IS_E1(bp)) { in bnx2x_get_regs()
970 } else if (CHIP_IS_E1H(bp)) { in bnx2x_get_regs()
972 } else if (CHIP_IS_E2(bp)) { in bnx2x_get_regs()
974 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_regs()
975 } else if (CHIP_IS_E3A0(bp)) { in bnx2x_get_regs()
977 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_regs()
978 } else if (CHIP_IS_E3B0(bp)) { in bnx2x_get_regs()
980 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_regs()
987 __bnx2x_get_regs(bp, p); in bnx2x_get_regs()
990 bnx2x_clear_blocks_parity(bp); in bnx2x_get_regs()
991 bnx2x_enable_blocks_parity(bp); in bnx2x_get_regs()
996 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_preset_regs_len() local
999 regdump_len = __bnx2x_get_preset_regs_len(bp, preset); in bnx2x_get_preset_regs_len()
1008 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_dump() local
1014 bp->dump_preset_idx = val->flag; in bnx2x_set_dump()
1021 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_dump_flag() local
1024 dump->flag = bp->dump_preset_idx; in bnx2x_get_dump_flag()
1026 dump->len = bnx2x_get_preset_regs_len(dev, bp->dump_preset_idx); in bnx2x_get_dump_flag()
1028 bp->dump_preset_idx, dump->len); in bnx2x_get_dump_flag()
1037 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_dump_data() local
1045 bnx2x_disable_blocks_parity(bp); in bnx2x_get_dump_data()
1048 dump_hdr.preset = bp->dump_preset_idx; in bnx2x_get_dump_data()
1054 if (CHIP_IS_E1(bp)) { in bnx2x_get_dump_data()
1056 } else if (CHIP_IS_E1H(bp)) { in bnx2x_get_dump_data()
1058 } else if (CHIP_IS_E2(bp)) { in bnx2x_get_dump_data()
1060 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_dump_data()
1061 } else if (CHIP_IS_E3A0(bp)) { in bnx2x_get_dump_data()
1063 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_dump_data()
1064 } else if (CHIP_IS_E3B0(bp)) { in bnx2x_get_dump_data()
1066 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_dump_data()
1073 __bnx2x_get_preset_regs(bp, p, dump_hdr.preset); in bnx2x_get_dump_data()
1076 bnx2x_clear_blocks_parity(bp); in bnx2x_get_dump_data()
1077 bnx2x_enable_blocks_parity(bp); in bnx2x_get_dump_data()
1085 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_drvinfo() local
1090 bnx2x_fill_fw_str(bp, info->fw_version, sizeof(info->fw_version)); in bnx2x_get_drvinfo()
1092 strlcpy(info->bus_info, pci_name(bp->pdev), sizeof(info->bus_info)); in bnx2x_get_drvinfo()
1097 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_wol() local
1099 if (bp->flags & NO_WOL_FLAG) { in bnx2x_get_wol()
1104 if (bp->wol) in bnx2x_get_wol()
1114 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_wol() local
1122 if (bp->flags & NO_WOL_FLAG) { in bnx2x_set_wol()
1126 bp->wol = 1; in bnx2x_set_wol()
1128 bp->wol = 0; in bnx2x_set_wol()
1130 if (SHMEM2_HAS(bp, curr_cfg)) in bnx2x_set_wol()
1131 SHMEM2_WR(bp, curr_cfg, CURR_CFG_MET_OS); in bnx2x_set_wol()
1138 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_msglevel() local
1140 return bp->msg_enable; in bnx2x_get_msglevel()
1145 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_msglevel() local
1149 if (IS_PF(bp) && (level & BNX2X_MSG_MCP)) in bnx2x_set_msglevel()
1150 bnx2x_fw_dump_lvl(bp, KERN_INFO); in bnx2x_set_msglevel()
1151 bp->msg_enable = level; in bnx2x_set_msglevel()
1157 struct bnx2x *bp = netdev_priv(dev); in bnx2x_nway_reset() local
1159 if (!bp->port.pmf) in bnx2x_nway_reset()
1163 bnx2x_stats_handle(bp, STATS_EVENT_STOP); in bnx2x_nway_reset()
1164 bnx2x_force_link_reset(bp); in bnx2x_nway_reset()
1165 bnx2x_link_set(bp); in bnx2x_nway_reset()
1173 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_link() local
1175 if (bp->flags & MF_FUNC_DIS || (bp->state != BNX2X_STATE_OPEN)) in bnx2x_get_link()
1178 if (IS_VF(bp)) in bnx2x_get_link()
1180 &bp->vf_link_vars.link_report_flags); in bnx2x_get_link()
1182 return bp->link_vars.link_up; in bnx2x_get_link()
1187 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_eeprom_len() local
1189 return bp->common.flash_size; in bnx2x_get_eeprom_len()
1205 static int bnx2x_acquire_nvram_lock(struct bnx2x *bp) in bnx2x_acquire_nvram_lock() argument
1207 int port = BP_PORT(bp); in bnx2x_acquire_nvram_lock()
1212 bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_NVRAM); in bnx2x_acquire_nvram_lock()
1216 if (CHIP_REV_IS_SLOW(bp)) in bnx2x_acquire_nvram_lock()
1220 REG_WR(bp, MCP_REG_MCPR_NVM_SW_ARB, in bnx2x_acquire_nvram_lock()
1224 val = REG_RD(bp, MCP_REG_MCPR_NVM_SW_ARB); in bnx2x_acquire_nvram_lock()
1234 bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_NVRAM); in bnx2x_acquire_nvram_lock()
1241 static int bnx2x_release_nvram_lock(struct bnx2x *bp) in bnx2x_release_nvram_lock() argument
1243 int port = BP_PORT(bp); in bnx2x_release_nvram_lock()
1249 if (CHIP_REV_IS_SLOW(bp)) in bnx2x_release_nvram_lock()
1253 REG_WR(bp, MCP_REG_MCPR_NVM_SW_ARB, in bnx2x_release_nvram_lock()
1257 val = REG_RD(bp, MCP_REG_MCPR_NVM_SW_ARB); in bnx2x_release_nvram_lock()
1271 bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_NVRAM); in bnx2x_release_nvram_lock()
1275 static void bnx2x_enable_nvram_access(struct bnx2x *bp) in bnx2x_enable_nvram_access() argument
1279 val = REG_RD(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE); in bnx2x_enable_nvram_access()
1282 REG_WR(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE, in bnx2x_enable_nvram_access()
1287 static void bnx2x_disable_nvram_access(struct bnx2x *bp) in bnx2x_disable_nvram_access() argument
1291 val = REG_RD(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE); in bnx2x_disable_nvram_access()
1294 REG_WR(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE, in bnx2x_disable_nvram_access()
1299 static int bnx2x_nvram_read_dword(struct bnx2x *bp, u32 offset, __be32 *ret_val, in bnx2x_nvram_read_dword() argument
1309 REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, MCPR_NVM_COMMAND_DONE); in bnx2x_nvram_read_dword()
1312 REG_WR(bp, MCP_REG_MCPR_NVM_ADDR, in bnx2x_nvram_read_dword()
1316 REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, cmd_flags); in bnx2x_nvram_read_dword()
1320 if (CHIP_REV_IS_SLOW(bp)) in bnx2x_nvram_read_dword()
1328 val = REG_RD(bp, MCP_REG_MCPR_NVM_COMMAND); in bnx2x_nvram_read_dword()
1331 val = REG_RD(bp, MCP_REG_MCPR_NVM_READ); in bnx2x_nvram_read_dword()
1347 int bnx2x_nvram_read(struct bnx2x *bp, u32 offset, u8 *ret_buf, in bnx2x_nvram_read() argument
1361 if (offset + buf_size > bp->common.flash_size) { in bnx2x_nvram_read()
1364 offset, buf_size, bp->common.flash_size); in bnx2x_nvram_read()
1369 rc = bnx2x_acquire_nvram_lock(bp); in bnx2x_nvram_read()
1374 bnx2x_enable_nvram_access(bp); in bnx2x_nvram_read()
1379 rc = bnx2x_nvram_read_dword(bp, offset, &val, cmd_flags); in bnx2x_nvram_read()
1391 rc = bnx2x_nvram_read_dword(bp, offset, &val, cmd_flags); in bnx2x_nvram_read()
1396 bnx2x_disable_nvram_access(bp); in bnx2x_nvram_read()
1397 bnx2x_release_nvram_lock(bp); in bnx2x_nvram_read()
1402 static int bnx2x_nvram_read32(struct bnx2x *bp, u32 offset, u32 *buf, in bnx2x_nvram_read32() argument
1407 rc = bnx2x_nvram_read(bp, offset, (u8 *)buf, buf_size); in bnx2x_nvram_read32()
1419 static bool bnx2x_is_nvm_accessible(struct bnx2x *bp) in bnx2x_is_nvm_accessible() argument
1423 struct net_device *dev = pci_get_drvdata(bp->pdev); in bnx2x_is_nvm_accessible()
1425 if (bp->pdev->pm_cap) in bnx2x_is_nvm_accessible()
1426 rc = pci_read_config_word(bp->pdev, in bnx2x_is_nvm_accessible()
1427 bp->pdev->pm_cap + PCI_PM_CTRL, &pm); in bnx2x_is_nvm_accessible()
1439 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_eeprom() local
1441 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_get_eeprom()
1454 return bnx2x_nvram_read(bp, eeprom->offset, eebuf, eeprom->len); in bnx2x_get_eeprom()
1461 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_module_eeprom() local
1466 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_get_module_eeprom()
1472 phy_idx = bnx2x_get_cur_phy_idx(bp); in bnx2x_get_module_eeprom()
1481 bnx2x_acquire_phy_lock(bp); in bnx2x_get_module_eeprom()
1482 rc = bnx2x_read_sfp_module_eeprom(&bp->link_params.phy[phy_idx], in bnx2x_get_module_eeprom()
1483 &bp->link_params, in bnx2x_get_module_eeprom()
1488 bnx2x_release_phy_lock(bp); in bnx2x_get_module_eeprom()
1506 bnx2x_acquire_phy_lock(bp); in bnx2x_get_module_eeprom()
1507 rc = bnx2x_read_sfp_module_eeprom(&bp->link_params.phy[phy_idx], in bnx2x_get_module_eeprom()
1508 &bp->link_params, in bnx2x_get_module_eeprom()
1513 bnx2x_release_phy_lock(bp); in bnx2x_get_module_eeprom()
1525 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_module_info() local
1529 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_get_module_info()
1534 phy_idx = bnx2x_get_cur_phy_idx(bp); in bnx2x_get_module_info()
1535 bnx2x_acquire_phy_lock(bp); in bnx2x_get_module_info()
1536 rc = bnx2x_read_sfp_module_eeprom(&bp->link_params.phy[phy_idx], in bnx2x_get_module_info()
1537 &bp->link_params, in bnx2x_get_module_info()
1542 bnx2x_release_phy_lock(bp); in bnx2x_get_module_info()
1548 bnx2x_acquire_phy_lock(bp); in bnx2x_get_module_info()
1549 rc = bnx2x_read_sfp_module_eeprom(&bp->link_params.phy[phy_idx], in bnx2x_get_module_info()
1550 &bp->link_params, in bnx2x_get_module_info()
1555 bnx2x_release_phy_lock(bp); in bnx2x_get_module_info()
1572 static int bnx2x_nvram_write_dword(struct bnx2x *bp, u32 offset, u32 val, in bnx2x_nvram_write_dword() argument
1581 REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, MCPR_NVM_COMMAND_DONE); in bnx2x_nvram_write_dword()
1584 REG_WR(bp, MCP_REG_MCPR_NVM_WRITE, val); in bnx2x_nvram_write_dword()
1587 REG_WR(bp, MCP_REG_MCPR_NVM_ADDR, in bnx2x_nvram_write_dword()
1591 REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, cmd_flags); in bnx2x_nvram_write_dword()
1595 if (CHIP_REV_IS_SLOW(bp)) in bnx2x_nvram_write_dword()
1602 val = REG_RD(bp, MCP_REG_MCPR_NVM_COMMAND); in bnx2x_nvram_write_dword()
1617 static int bnx2x_nvram_write1(struct bnx2x *bp, u32 offset, u8 *data_buf, in bnx2x_nvram_write1() argument
1624 if (offset + buf_size > bp->common.flash_size) { in bnx2x_nvram_write1()
1627 offset, buf_size, bp->common.flash_size); in bnx2x_nvram_write1()
1632 rc = bnx2x_acquire_nvram_lock(bp); in bnx2x_nvram_write1()
1637 bnx2x_enable_nvram_access(bp); in bnx2x_nvram_write1()
1641 rc = bnx2x_nvram_read_dword(bp, align_offset, &val_be, cmd_flags); in bnx2x_nvram_write1()
1654 rc = bnx2x_nvram_write_dword(bp, align_offset, val, in bnx2x_nvram_write1()
1659 bnx2x_disable_nvram_access(bp); in bnx2x_nvram_write1()
1660 bnx2x_release_nvram_lock(bp); in bnx2x_nvram_write1()
1665 static int bnx2x_nvram_write(struct bnx2x *bp, u32 offset, u8 *data_buf, in bnx2x_nvram_write() argument
1674 return bnx2x_nvram_write1(bp, offset, data_buf, buf_size); in bnx2x_nvram_write()
1683 if (offset + buf_size > bp->common.flash_size) { in bnx2x_nvram_write()
1686 offset, buf_size, bp->common.flash_size); in bnx2x_nvram_write()
1691 rc = bnx2x_acquire_nvram_lock(bp); in bnx2x_nvram_write()
1696 bnx2x_enable_nvram_access(bp); in bnx2x_nvram_write()
1716 rc = bnx2x_nvram_write_dword(bp, offset, val, cmd_flags); in bnx2x_nvram_write()
1731 bnx2x_release_nvram_lock(bp); in bnx2x_nvram_write()
1733 rc = bnx2x_acquire_nvram_lock(bp); in bnx2x_nvram_write()
1742 bnx2x_disable_nvram_access(bp); in bnx2x_nvram_write()
1743 bnx2x_release_nvram_lock(bp); in bnx2x_nvram_write()
1751 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_eeprom() local
1752 int port = BP_PORT(bp); in bnx2x_set_eeprom()
1756 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_set_eeprom()
1771 !bp->port.pmf) { in bnx2x_set_eeprom()
1778 SHMEM_RD(bp, in bnx2x_set_eeprom()
1783 bnx2x_stats_handle(bp, STATS_EVENT_STOP); in bnx2x_set_eeprom()
1785 bnx2x_acquire_phy_lock(bp); in bnx2x_set_eeprom()
1786 rc |= bnx2x_link_reset(&bp->link_params, in bnx2x_set_eeprom()
1787 &bp->link_vars, 0); in bnx2x_set_eeprom()
1790 bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_0, in bnx2x_set_eeprom()
1792 bnx2x_release_phy_lock(bp); in bnx2x_set_eeprom()
1793 bnx2x_link_report(bp); in bnx2x_set_eeprom()
1797 if (bp->state == BNX2X_STATE_OPEN) { in bnx2x_set_eeprom()
1798 bnx2x_acquire_phy_lock(bp); in bnx2x_set_eeprom()
1799 rc |= bnx2x_link_reset(&bp->link_params, in bnx2x_set_eeprom()
1800 &bp->link_vars, 1); in bnx2x_set_eeprom()
1802 rc |= bnx2x_phy_init(&bp->link_params, in bnx2x_set_eeprom()
1803 &bp->link_vars); in bnx2x_set_eeprom()
1804 bnx2x_release_phy_lock(bp); in bnx2x_set_eeprom()
1805 bnx2x_calc_fc_adv(bp); in bnx2x_set_eeprom()
1813 bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_0, in bnx2x_set_eeprom()
1816 bnx2x_acquire_phy_lock(bp); in bnx2x_set_eeprom()
1818 bnx2x_sfx7101_sp_sw_reset(bp, in bnx2x_set_eeprom()
1819 &bp->link_params.phy[EXT_PHY1]); in bnx2x_set_eeprom()
1823 bnx2x_ext_phy_hw_reset(bp, port); in bnx2x_set_eeprom()
1825 bnx2x_release_phy_lock(bp); in bnx2x_set_eeprom()
1828 rc = bnx2x_nvram_write(bp, eeprom->offset, eebuf, eeprom->len); in bnx2x_set_eeprom()
1836 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_coalesce() local
1840 coal->rx_coalesce_usecs = bp->rx_ticks; in bnx2x_get_coalesce()
1841 coal->tx_coalesce_usecs = bp->tx_ticks; in bnx2x_get_coalesce()
1849 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_coalesce() local
1851 bp->rx_ticks = (u16)coal->rx_coalesce_usecs; in bnx2x_set_coalesce()
1852 if (bp->rx_ticks > BNX2X_MAX_COALESCE_TOUT) in bnx2x_set_coalesce()
1853 bp->rx_ticks = BNX2X_MAX_COALESCE_TOUT; in bnx2x_set_coalesce()
1855 bp->tx_ticks = (u16)coal->tx_coalesce_usecs; in bnx2x_set_coalesce()
1856 if (bp->tx_ticks > BNX2X_MAX_COALESCE_TOUT) in bnx2x_set_coalesce()
1857 bp->tx_ticks = BNX2X_MAX_COALESCE_TOUT; in bnx2x_set_coalesce()
1860 bnx2x_update_coalesce(bp); in bnx2x_set_coalesce()
1868 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_ringparam() local
1872 if (bp->rx_ring_size) in bnx2x_get_ringparam()
1873 ering->rx_pending = bp->rx_ring_size; in bnx2x_get_ringparam()
1877 ering->tx_max_pending = IS_MF_FCOE_AFEX(bp) ? 0 : MAX_TX_AVAIL; in bnx2x_get_ringparam()
1878 ering->tx_pending = bp->tx_ring_size; in bnx2x_get_ringparam()
1884 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_ringparam() local
1890 if (pci_num_vf(bp->pdev)) { in bnx2x_set_ringparam()
1896 if (bp->recovery_state != BNX2X_RECOVERY_DONE) { in bnx2x_set_ringparam()
1903 (ering->rx_pending < (bp->disable_tpa ? MIN_RX_SIZE_NONTPA : in bnx2x_set_ringparam()
1905 (ering->tx_pending > (IS_MF_STORAGE_ONLY(bp) ? 0 : MAX_TX_AVAIL)) || in bnx2x_set_ringparam()
1911 bp->rx_ring_size = ering->rx_pending; in bnx2x_set_ringparam()
1912 bp->tx_ring_size = ering->tx_pending; in bnx2x_set_ringparam()
1920 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_pauseparam() local
1921 int cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_get_pauseparam()
1924 epause->autoneg = (bp->link_params.req_flow_ctrl[cfg_idx] == in bnx2x_get_pauseparam()
1928 cfg_reg = bp->link_params.req_flow_ctrl[cfg_idx]; in bnx2x_get_pauseparam()
1930 cfg_reg = bp->link_params.req_fc_auto_adv; in bnx2x_get_pauseparam()
1945 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_pauseparam() local
1946 u32 cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_set_pauseparam()
1947 if (IS_MF(bp)) in bnx2x_set_pauseparam()
1954 bp->link_params.req_flow_ctrl[cfg_idx] = BNX2X_FLOW_CTRL_AUTO; in bnx2x_set_pauseparam()
1957 bp->link_params.req_flow_ctrl[cfg_idx] |= BNX2X_FLOW_CTRL_RX; in bnx2x_set_pauseparam()
1960 bp->link_params.req_flow_ctrl[cfg_idx] |= BNX2X_FLOW_CTRL_TX; in bnx2x_set_pauseparam()
1962 if (bp->link_params.req_flow_ctrl[cfg_idx] == BNX2X_FLOW_CTRL_AUTO) in bnx2x_set_pauseparam()
1963 bp->link_params.req_flow_ctrl[cfg_idx] = BNX2X_FLOW_CTRL_NONE; in bnx2x_set_pauseparam()
1966 if (!(bp->port.supported[cfg_idx] & SUPPORTED_Autoneg)) { in bnx2x_set_pauseparam()
1971 if (bp->link_params.req_line_speed[cfg_idx] == SPEED_AUTO_NEG) { in bnx2x_set_pauseparam()
1972 bp->link_params.req_flow_ctrl[cfg_idx] = in bnx2x_set_pauseparam()
1975 bp->link_params.req_fc_auto_adv = 0; in bnx2x_set_pauseparam()
1977 bp->link_params.req_fc_auto_adv |= BNX2X_FLOW_CTRL_RX; in bnx2x_set_pauseparam()
1980 bp->link_params.req_fc_auto_adv |= BNX2X_FLOW_CTRL_TX; in bnx2x_set_pauseparam()
1982 if (!bp->link_params.req_fc_auto_adv) in bnx2x_set_pauseparam()
1983 bp->link_params.req_fc_auto_adv |= BNX2X_FLOW_CTRL_NONE; in bnx2x_set_pauseparam()
1987 "req_flow_ctrl 0x%x\n", bp->link_params.req_flow_ctrl[cfg_idx]); in bnx2x_set_pauseparam()
1990 bnx2x_stats_handle(bp, STATS_EVENT_STOP); in bnx2x_set_pauseparam()
1991 bnx2x_force_link_reset(bp); in bnx2x_set_pauseparam()
1992 bnx2x_link_set(bp); in bnx2x_set_pauseparam()
2050 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_eee() local
2053 if (!SHMEM2_HAS(bp, eee_status[BP_PORT(bp)])) { in bnx2x_get_eee()
2058 eee_cfg = bp->link_vars.eee_status; in bnx2x_get_eee()
2083 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_eee() local
2087 if (IS_MF(bp)) in bnx2x_set_eee()
2090 if (!SHMEM2_HAS(bp, eee_status[BP_PORT(bp)])) { in bnx2x_set_eee()
2095 eee_cfg = bp->link_vars.eee_status; in bnx2x_set_eee()
2126 bp->link_params.eee_mode |= EEE_MODE_ADV_LPI; in bnx2x_set_eee()
2128 bp->link_params.eee_mode &= ~EEE_MODE_ADV_LPI; in bnx2x_set_eee()
2131 bp->link_params.eee_mode |= EEE_MODE_ENABLE_LPI; in bnx2x_set_eee()
2133 bp->link_params.eee_mode &= ~EEE_MODE_ENABLE_LPI; in bnx2x_set_eee()
2135 bp->link_params.eee_mode &= ~EEE_MODE_TIMER_MASK; in bnx2x_set_eee()
2136 bp->link_params.eee_mode |= (edata->tx_lpi_timer & in bnx2x_set_eee()
2143 bnx2x_stats_handle(bp, STATS_EVENT_STOP); in bnx2x_set_eee()
2144 bnx2x_force_link_reset(bp); in bnx2x_set_eee()
2145 bnx2x_link_set(bp); in bnx2x_set_eee()
2169 static int bnx2x_test_registers(struct bnx2x *bp) in bnx2x_test_registers() argument
2173 int port = BP_PORT(bp); in bnx2x_test_registers()
2260 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_test_registers()
2266 if (CHIP_IS_E1(bp)) in bnx2x_test_registers()
2268 else if (CHIP_IS_E1H(bp)) in bnx2x_test_registers()
2270 else if (CHIP_IS_E2(bp)) in bnx2x_test_registers()
2272 else if (CHIP_IS_E3B0(bp)) in bnx2x_test_registers()
2299 save_val = REG_RD(bp, offset); in bnx2x_test_registers()
2301 REG_WR(bp, offset, wr_val & mask); in bnx2x_test_registers()
2303 val = REG_RD(bp, offset); in bnx2x_test_registers()
2306 REG_WR(bp, offset, save_val); in bnx2x_test_registers()
2324 static int bnx2x_test_memory(struct bnx2x *bp) in bnx2x_test_memory() argument
2364 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_test_memory()
2370 if (CHIP_IS_E1(bp)) in bnx2x_test_memory()
2372 else if (CHIP_IS_E1H(bp)) in bnx2x_test_memory()
2374 else if (CHIP_IS_E2(bp)) in bnx2x_test_memory()
2381 val = REG_RD(bp, prty_tbl[i].offset); in bnx2x_test_memory()
2392 REG_RD(bp, mem_tbl[i].offset + j*4); in bnx2x_test_memory()
2396 val = REG_RD(bp, prty_tbl[i].offset); in bnx2x_test_memory()
2410 static void bnx2x_wait_for_link(struct bnx2x *bp, u8 link_up, u8 is_serdes) in bnx2x_wait_for_link() argument
2415 while (bnx2x_link_test(bp, is_serdes) && cnt--) in bnx2x_wait_for_link()
2418 if (cnt <= 0 && bnx2x_link_test(bp, is_serdes)) in bnx2x_wait_for_link()
2422 while (!bp->link_vars.link_up && cnt--) in bnx2x_wait_for_link()
2425 if (cnt <= 0 && !bp->link_vars.link_up) in bnx2x_wait_for_link()
2431 static int bnx2x_run_loopback(struct bnx2x *bp, int loopback_mode) in bnx2x_run_loopback() argument
2436 struct bnx2x_fastpath *fp_rx = &bp->fp[0]; in bnx2x_run_loopback()
2437 struct bnx2x_fastpath *fp_tx = &bp->fp[0]; in bnx2x_run_loopback()
2451 struct netdev_queue *txq = netdev_get_tx_queue(bp->dev, in bnx2x_run_loopback()
2457 if (bp->link_params.loopback_mode != LOOPBACK_XGXS) { in bnx2x_run_loopback()
2463 if (CHIP_IS_E3(bp)) { in bnx2x_run_loopback()
2464 int cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_run_loopback()
2465 if (bp->port.supported[cfg_idx] & in bnx2x_run_loopback()
2469 bp->link_params.loopback_mode = LOOPBACK_XMAC; in bnx2x_run_loopback()
2471 bp->link_params.loopback_mode = LOOPBACK_UMAC; in bnx2x_run_loopback()
2473 bp->link_params.loopback_mode = LOOPBACK_BMAC; in bnx2x_run_loopback()
2475 bnx2x_phy_init(&bp->link_params, &bp->link_vars); in bnx2x_run_loopback()
2478 if (bp->link_params.loopback_mode != LOOPBACK_EXT) { in bnx2x_run_loopback()
2490 pkt_size = (((bp->dev->mtu < ETH_MAX_PACKET_SIZE) ? in bnx2x_run_loopback()
2491 bp->dev->mtu : ETH_MAX_PACKET_SIZE) + ETH_HLEN); in bnx2x_run_loopback()
2492 skb = netdev_alloc_skb(bp->dev, fp_rx->rx_buf_size); in bnx2x_run_loopback()
2499 memcpy(packet, bp->dev->dev_addr, ETH_ALEN); in bnx2x_run_loopback()
2504 mapping = dma_map_single(&bp->pdev->dev, skb->data, in bnx2x_run_loopback()
2506 if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) { in bnx2x_run_loopback()
2544 if (CHIP_IS_E1x(bp)) { in bnx2x_run_loopback()
2565 DOORBELL(bp, txdata->cid, txdata->tx_db.raw); in bnx2x_run_loopback()
2583 if (bp->common.int_block == INT_BLOCK_IGU) { in bnx2x_run_loopback()
2589 bnx2x_tx_int(bp, txdata); in bnx2x_run_loopback()
2608 dma_sync_single_for_cpu(&bp->pdev->dev, in bnx2x_run_loopback()
2626 bnx2x_update_rx_prod(bp, fp_rx, fp_rx->rx_bd_prod, fp_rx->rx_comp_prod, in bnx2x_run_loopback()
2630 bp->link_params.loopback_mode = LOOPBACK_NONE; in bnx2x_run_loopback()
2635 static int bnx2x_test_loopback(struct bnx2x *bp) in bnx2x_test_loopback() argument
2639 if (BP_NOMCP(bp)) in bnx2x_test_loopback()
2642 if (!netif_running(bp->dev)) in bnx2x_test_loopback()
2645 bnx2x_netif_stop(bp, 1); in bnx2x_test_loopback()
2646 bnx2x_acquire_phy_lock(bp); in bnx2x_test_loopback()
2648 res = bnx2x_run_loopback(bp, BNX2X_PHY_LOOPBACK); in bnx2x_test_loopback()
2654 res = bnx2x_run_loopback(bp, BNX2X_MAC_LOOPBACK); in bnx2x_test_loopback()
2660 bnx2x_release_phy_lock(bp); in bnx2x_test_loopback()
2661 bnx2x_netif_start(bp); in bnx2x_test_loopback()
2666 static int bnx2x_test_ext_loopback(struct bnx2x *bp) in bnx2x_test_ext_loopback() argument
2670 (bp->link_vars.link_status & LINK_STATUS_SERDES_LINK) > 0; in bnx2x_test_ext_loopback()
2672 if (BP_NOMCP(bp)) in bnx2x_test_ext_loopback()
2675 if (!netif_running(bp->dev)) in bnx2x_test_ext_loopback()
2678 bnx2x_nic_unload(bp, UNLOAD_NORMAL, false); in bnx2x_test_ext_loopback()
2679 rc = bnx2x_nic_load(bp, LOAD_LOOPBACK_EXT); in bnx2x_test_ext_loopback()
2685 bnx2x_wait_for_link(bp, 1, is_serdes); in bnx2x_test_ext_loopback()
2687 bnx2x_netif_stop(bp, 1); in bnx2x_test_ext_loopback()
2689 rc = bnx2x_run_loopback(bp, BNX2X_EXT_LOOPBACK); in bnx2x_test_ext_loopback()
2693 bnx2x_netif_start(bp); in bnx2x_test_ext_loopback()
2720 static int bnx2x_nvram_crc(struct bnx2x *bp, in bnx2x_nvram_crc() argument
2734 rc = bnx2x_nvram_read(bp, offset + done, buff, count); in bnx2x_nvram_crc()
2749 static int bnx2x_test_nvram_dir(struct bnx2x *bp, in bnx2x_test_nvram_dir() argument
2761 rc = bnx2x_nvram_crc(bp, entry->nvm_start_addr, size, buff); in bnx2x_test_nvram_dir()
2769 static int bnx2x_test_dir_entry(struct bnx2x *bp, u32 addr, u8 *buff) in bnx2x_test_dir_entry() argument
2774 rc = bnx2x_nvram_read32(bp, addr, (u32 *)&entry, sizeof(entry)); in bnx2x_test_dir_entry()
2778 return bnx2x_test_nvram_dir(bp, &entry, buff); in bnx2x_test_dir_entry()
2781 static int bnx2x_test_nvram_ext_dirs(struct bnx2x *bp, u8 *buff) in bnx2x_test_nvram_ext_dirs() argument
2787 rc = bnx2x_nvram_read32(bp, in bnx2x_test_nvram_ext_dirs()
2797 rc = bnx2x_nvram_read32(bp, entry.nvm_start_addr, in bnx2x_test_nvram_ext_dirs()
2805 rc = bnx2x_test_dir_entry(bp, dir_offset + in bnx2x_test_nvram_ext_dirs()
2815 static int bnx2x_test_nvram_dirs(struct bnx2x *bp, u8 *buff) in bnx2x_test_nvram_dirs() argument
2823 rc = bnx2x_test_dir_entry(bp, dir_offset + in bnx2x_test_nvram_dirs()
2830 return bnx2x_test_nvram_ext_dirs(bp, buff); in bnx2x_test_nvram_dirs()
2838 static int bnx2x_test_nvram_tbl(struct bnx2x *bp, in bnx2x_test_nvram_tbl() argument
2844 int rc = bnx2x_nvram_crc(bp, nvram_tbl[i].offset, in bnx2x_test_nvram_tbl()
2857 static int bnx2x_test_nvram(struct bnx2x *bp) in bnx2x_test_nvram() argument
2878 if (BP_NOMCP(bp)) in bnx2x_test_nvram()
2888 rc = bnx2x_nvram_read32(bp, 0, &magic, sizeof(magic)); in bnx2x_test_nvram()
2903 rc = bnx2x_test_nvram_tbl(bp, nvram_tbl, buf); in bnx2x_test_nvram()
2907 if (!CHIP_IS_E1x(bp) && !CHIP_IS_57811xx(bp)) { in bnx2x_test_nvram()
2908 u32 hide = SHMEM_RD(bp, dev_info.shared_hw_config.config2) & in bnx2x_test_nvram()
2914 rc = bnx2x_test_nvram_tbl(bp, nvram_tbl2, buf); in bnx2x_test_nvram()
2920 rc = bnx2x_test_nvram_dirs(bp, buf); in bnx2x_test_nvram()
2928 static int bnx2x_test_intr(struct bnx2x *bp) in bnx2x_test_intr() argument
2932 if (!netif_running(bp->dev)) { in bnx2x_test_intr()
2938 params.q_obj = &bp->sp_objs->q_obj; in bnx2x_test_intr()
2943 return bnx2x_queue_state_change(bp, &params); in bnx2x_test_intr()
2949 struct bnx2x *bp = netdev_priv(dev); in bnx2x_self_test() local
2953 if (pci_num_vf(bp->pdev)) { in bnx2x_self_test()
2959 if (bp->recovery_state != BNX2X_RECOVERY_DONE) { in bnx2x_self_test()
2960 netdev_err(bp->dev, in bnx2x_self_test()
2971 memset(buf, 0, sizeof(u64) * BNX2X_NUM_TESTS(bp)); in bnx2x_self_test()
2973 if (bnx2x_test_nvram(bp) != 0) { in bnx2x_self_test()
2974 if (!IS_MF(bp)) in bnx2x_self_test()
2986 is_serdes = (bp->link_vars.link_status & LINK_STATUS_SERDES_LINK) > 0; in bnx2x_self_test()
2987 link_up = bp->link_vars.link_up; in bnx2x_self_test()
2989 if ((etest->flags & ETH_TEST_FL_OFFLINE) && !IS_MF(bp)) { in bnx2x_self_test()
2990 int port = BP_PORT(bp); in bnx2x_self_test()
2994 val = REG_RD(bp, NIG_REG_EGRESS_UMP0_IN_EN + port*4); in bnx2x_self_test()
2996 REG_WR(bp, NIG_REG_EGRESS_UMP0_IN_EN + port*4, 0); in bnx2x_self_test()
2998 bnx2x_nic_unload(bp, UNLOAD_NORMAL, false); in bnx2x_self_test()
2999 rc = bnx2x_nic_load(bp, LOAD_DIAG); in bnx2x_self_test()
3008 bnx2x_wait_for_link(bp, 1, is_serdes); in bnx2x_self_test()
3010 if (bnx2x_test_registers(bp) != 0) { in bnx2x_self_test()
3014 if (bnx2x_test_memory(bp) != 0) { in bnx2x_self_test()
3019 buf[2] = bnx2x_test_loopback(bp); /* internal LB */ in bnx2x_self_test()
3024 buf[3] = bnx2x_test_ext_loopback(bp); /* external LB */ in bnx2x_self_test()
3030 bnx2x_nic_unload(bp, UNLOAD_NORMAL, false); in bnx2x_self_test()
3033 REG_WR(bp, NIG_REG_EGRESS_UMP0_IN_EN + port*4, val); in bnx2x_self_test()
3034 rc = bnx2x_nic_load(bp, LOAD_NORMAL); in bnx2x_self_test()
3042 bnx2x_wait_for_link(bp, link_up, is_serdes); in bnx2x_self_test()
3045 if (bnx2x_test_intr(bp) != 0) { in bnx2x_self_test()
3046 if (!IS_MF(bp)) in bnx2x_self_test()
3055 while (bnx2x_link_test(bp, is_serdes) && --cnt) in bnx2x_self_test()
3060 if (!IS_MF(bp)) in bnx2x_self_test()
3071 #define HIDE_PORT_STAT(bp) \ argument
3072 ((IS_MF(bp) && !(bp->msg_enable & BNX2X_MSG_STATS)) || \
3073 IS_VF(bp))
3078 static int bnx2x_num_stat_queues(struct bnx2x *bp) in bnx2x_num_stat_queues() argument
3080 return BNX2X_NUM_ETH_QUEUES(bp); in bnx2x_num_stat_queues()
3085 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_sset_count() local
3090 if (is_multi(bp)) { in bnx2x_get_sset_count()
3091 num_strings = bnx2x_num_stat_queues(bp) * in bnx2x_get_sset_count()
3095 if (HIDE_PORT_STAT(bp)) { in bnx2x_get_sset_count()
3105 return BNX2X_NUM_TESTS(bp); in bnx2x_get_sset_count()
3117 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_private_flags() local
3120 flags |= (!(bp->flags & NO_ISCSI_FLAG) ? 1 : 0) << BNX2X_PRI_FLAG_ISCSI; in bnx2x_get_private_flags()
3121 flags |= (!(bp->flags & NO_FCOE_FLAG) ? 1 : 0) << BNX2X_PRI_FLAG_FCOE; in bnx2x_get_private_flags()
3122 flags |= (!!IS_MF_STORAGE_ONLY(bp)) << BNX2X_PRI_FLAG_STORAGE; in bnx2x_get_private_flags()
3129 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_strings() local
3136 if (is_multi(bp)) { in bnx2x_get_strings()
3137 for_each_eth_queue(bp, i) { in bnx2x_get_strings()
3150 if (HIDE_PORT_STAT(bp) && IS_PORT_STAT(i)) in bnx2x_get_strings()
3161 if (!IS_MF(bp)) in bnx2x_get_strings()
3166 ETH_GSTRING_LEN * BNX2X_NUM_TESTS(bp)); in bnx2x_get_strings()
3179 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_ethtool_stats() local
3183 if (is_multi(bp)) { in bnx2x_get_ethtool_stats()
3184 for_each_eth_queue(bp, i) { in bnx2x_get_ethtool_stats()
3185 hw_stats = (u32 *)&bp->fp_stats[i].eth_q_stats; in bnx2x_get_ethtool_stats()
3206 hw_stats = (u32 *)&bp->eth_stats; in bnx2x_get_ethtool_stats()
3208 if (HIDE_PORT_STAT(bp) && IS_PORT_STAT(i)) in bnx2x_get_ethtool_stats()
3232 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_phys_id() local
3234 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_set_phys_id()
3245 bnx2x_acquire_phy_lock(bp); in bnx2x_set_phys_id()
3246 bnx2x_set_led(&bp->link_params, &bp->link_vars, in bnx2x_set_phys_id()
3248 bnx2x_release_phy_lock(bp); in bnx2x_set_phys_id()
3252 bnx2x_acquire_phy_lock(bp); in bnx2x_set_phys_id()
3253 bnx2x_set_led(&bp->link_params, &bp->link_vars, in bnx2x_set_phys_id()
3255 bnx2x_release_phy_lock(bp); in bnx2x_set_phys_id()
3259 bnx2x_acquire_phy_lock(bp); in bnx2x_set_phys_id()
3260 bnx2x_set_led(&bp->link_params, &bp->link_vars, in bnx2x_set_phys_id()
3262 bp->link_vars.line_speed); in bnx2x_set_phys_id()
3263 bnx2x_release_phy_lock(bp); in bnx2x_set_phys_id()
3269 static int bnx2x_get_rss_flags(struct bnx2x *bp, struct ethtool_rxnfc *info) in bnx2x_get_rss_flags() argument
3278 if (bp->rss_conf_obj.udp_rss_v4) in bnx2x_get_rss_flags()
3285 if (bp->rss_conf_obj.udp_rss_v6) in bnx2x_get_rss_flags()
3306 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_rxnfc() local
3310 info->data = BNX2X_NUM_ETH_QUEUES(bp); in bnx2x_get_rxnfc()
3313 return bnx2x_get_rss_flags(bp, info); in bnx2x_get_rxnfc()
3320 static int bnx2x_set_rss_flags(struct bnx2x *bp, struct ethtool_rxnfc *info) in bnx2x_set_rss_flags() argument
3351 if (CHIP_IS_E1x(bp) && udp_rss_requested) { in bnx2x_set_rss_flags()
3358 (bp->rss_conf_obj.udp_rss_v4 != udp_rss_requested)) { in bnx2x_set_rss_flags()
3359 bp->rss_conf_obj.udp_rss_v4 = udp_rss_requested; in bnx2x_set_rss_flags()
3363 return bnx2x_rss(bp, &bp->rss_conf_obj, false, true); in bnx2x_set_rss_flags()
3365 (bp->rss_conf_obj.udp_rss_v6 != udp_rss_requested)) { in bnx2x_set_rss_flags()
3366 bp->rss_conf_obj.udp_rss_v6 = udp_rss_requested; in bnx2x_set_rss_flags()
3370 return bnx2x_rss(bp, &bp->rss_conf_obj, false, true); in bnx2x_set_rss_flags()
3409 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_rxnfc() local
3413 return bnx2x_set_rss_flags(bp, info); in bnx2x_set_rxnfc()
3428 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_rxfh() local
3438 bnx2x_get_rss_ind_table(&bp->rss_conf_obj, ind_table); in bnx2x_get_rxfh()
3450 indir[i] = ind_table[i] - bp->fp->cl_id; in bnx2x_get_rxfh()
3458 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_rxfh() local
3481 bp->rss_conf_obj.ind_table[i] = indir[i] + bp->fp->cl_id; in bnx2x_set_rxfh()
3484 return bnx2x_config_rss_eth(bp, false); in bnx2x_set_rxfh()
3496 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_channels() local
3498 channels->max_combined = BNX2X_MAX_RSS_COUNT(bp); in bnx2x_get_channels()
3499 channels->combined_count = BNX2X_NUM_ETH_QUEUES(bp); in bnx2x_get_channels()
3510 static void bnx2x_change_num_queues(struct bnx2x *bp, int num_rss) in bnx2x_change_num_queues() argument
3512 bnx2x_disable_msi(bp); in bnx2x_change_num_queues()
3513 bp->num_ethernet_queues = num_rss; in bnx2x_change_num_queues()
3514 bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues; in bnx2x_change_num_queues()
3515 BNX2X_DEV_INFO("set number of queues to %d\n", bp->num_queues); in bnx2x_change_num_queues()
3516 bnx2x_set_int_mode(bp); in bnx2x_change_num_queues()
3528 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_channels() local
3535 if (pci_num_vf(bp->pdev)) { in bnx2x_set_channels()
3545 (channels->combined_count > BNX2X_MAX_RSS_COUNT(bp))) { in bnx2x_set_channels()
3551 if (channels->combined_count == BNX2X_NUM_ETH_QUEUES(bp)) { in bnx2x_set_channels()
3561 bnx2x_change_num_queues(bp, channels->combined_count); in bnx2x_set_channels()
3564 bnx2x_nic_unload(bp, UNLOAD_NORMAL, true); in bnx2x_set_channels()
3565 bnx2x_change_num_queues(bp, channels->combined_count); in bnx2x_set_channels()
3566 return bnx2x_nic_load(bp, LOAD_NORMAL); in bnx2x_set_channels()
3572 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_ts_info() local
3574 if (bp->flags & PTP_SUPPORTED) { in bnx2x_get_ts_info()
3582 if (bp->ptp_clock) in bnx2x_get_ts_info()
3583 info->phc_index = ptp_clock_index(bp->ptp_clock); in bnx2x_get_ts_info()
3665 void bnx2x_set_ethtool_ops(struct bnx2x *bp, struct net_device *netdev) in bnx2x_set_ethtool_ops() argument
3667 netdev->ethtool_ops = (IS_PF(bp)) ? in bnx2x_set_ethtool_ops()