Lines Matching refs:bp
190 static int bnx2x_get_port_type(struct bnx2x *bp) in bnx2x_get_port_type() argument
193 u32 phy_idx = bnx2x_get_cur_phy_idx(bp); in bnx2x_get_port_type()
194 switch (bp->link_params.phy[phy_idx].media_type) { in bnx2x_get_port_type()
222 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_vf_settings() local
224 if (bp->state == BNX2X_STATE_OPEN) { in bnx2x_get_vf_settings()
226 &bp->vf_link_vars.link_report_flags)) in bnx2x_get_vf_settings()
231 ethtool_cmd_speed_set(cmd, bp->vf_link_vars.line_speed); in bnx2x_get_vf_settings()
258 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_settings() local
259 int cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_get_settings()
262 cmd->supported = bp->port.supported[cfg_idx] | in bnx2x_get_settings()
263 (bp->port.supported[cfg_idx ^ 1] & in bnx2x_get_settings()
265 cmd->advertising = bp->port.advertising[cfg_idx]; in bnx2x_get_settings()
266 if (bp->link_params.phy[bnx2x_get_cur_phy_idx(bp)].media_type == in bnx2x_get_settings()
272 if ((bp->state == BNX2X_STATE_OPEN) && bp->link_vars.link_up && in bnx2x_get_settings()
273 !(bp->flags & MF_FUNC_DIS)) { in bnx2x_get_settings()
274 cmd->duplex = bp->link_vars.duplex; in bnx2x_get_settings()
276 if (IS_MF(bp) && !BP_NOMCP(bp)) in bnx2x_get_settings()
277 ethtool_cmd_speed_set(cmd, bnx2x_get_mf_speed(bp)); in bnx2x_get_settings()
279 ethtool_cmd_speed_set(cmd, bp->link_vars.line_speed); in bnx2x_get_settings()
285 cmd->port = bnx2x_get_port_type(bp); in bnx2x_get_settings()
287 cmd->phy_address = bp->mdio.prtad; in bnx2x_get_settings()
290 if (bp->link_params.req_line_speed[cfg_idx] == SPEED_AUTO_NEG) in bnx2x_get_settings()
296 if (bp->link_vars.link_status & LINK_STATUS_AUTO_NEGOTIATE_COMPLETE) { in bnx2x_get_settings()
297 u32 status = bp->link_vars.link_status; in bnx2x_get_settings()
342 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_settings() local
346 if (IS_MF_SD(bp)) in bnx2x_set_settings()
364 if (IS_MF_SI(bp)) { in bnx2x_set_settings()
366 u32 line_speed = bp->link_vars.line_speed; in bnx2x_set_settings()
372 if (bp->common.bc_ver < REQ_BC_VER_4_SET_MF_BW) { in bnx2x_set_settings()
387 if (bp->state != BNX2X_STATE_OPEN) in bnx2x_set_settings()
389 bp->pending_max = part; in bnx2x_set_settings()
391 bnx2x_update_max_mf_config(bp, part); in bnx2x_set_settings()
396 cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_set_settings()
397 old_multi_phy_config = bp->link_params.multi_phy_config; in bnx2x_set_settings()
398 if (cmd->port != bnx2x_get_port_type(bp)) { in bnx2x_set_settings()
401 if (!(bp->port.supported[0] & SUPPORTED_TP || in bnx2x_set_settings()
402 bp->port.supported[1] & SUPPORTED_TP)) { in bnx2x_set_settings()
407 bp->link_params.multi_phy_config &= in bnx2x_set_settings()
409 if (bp->link_params.multi_phy_config & in bnx2x_set_settings()
411 bp->link_params.multi_phy_config |= in bnx2x_set_settings()
414 bp->link_params.multi_phy_config |= in bnx2x_set_settings()
420 if (!(bp->port.supported[0] & SUPPORTED_FIBRE || in bnx2x_set_settings()
421 bp->port.supported[1] & SUPPORTED_FIBRE)) { in bnx2x_set_settings()
426 bp->link_params.multi_phy_config &= in bnx2x_set_settings()
428 if (bp->link_params.multi_phy_config & in bnx2x_set_settings()
430 bp->link_params.multi_phy_config |= in bnx2x_set_settings()
433 bp->link_params.multi_phy_config |= in bnx2x_set_settings()
442 new_multi_phy_config = bp->link_params.multi_phy_config; in bnx2x_set_settings()
444 cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_set_settings()
446 bp->link_params.multi_phy_config = old_multi_phy_config; in bnx2x_set_settings()
450 u32 an_supported_speed = bp->port.supported[cfg_idx]; in bnx2x_set_settings()
451 if (bp->link_params.phy[EXT_PHY1].type == in bnx2x_set_settings()
455 if (!(bp->port.supported[cfg_idx] & SUPPORTED_Autoneg)) { in bnx2x_set_settings()
467 bp->link_params.req_line_speed[cfg_idx] = SPEED_AUTO_NEG; in bnx2x_set_settings()
468 bp->link_params.req_duplex[cfg_idx] = cmd->duplex; in bnx2x_set_settings()
469 bp->port.advertising[cfg_idx] = (ADVERTISED_Autoneg | in bnx2x_set_settings()
473 bp->link_params.speed_cap_mask[cfg_idx] = 0; in bnx2x_set_settings()
475 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_settings()
479 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_settings()
483 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_settings()
487 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_settings()
491 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()
502 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_settings()
506 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_settings()
514 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_settings()
524 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_settings()
538 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_settings()
548 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_settings()
567 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_settings()
585 if (!(bp->port.supported[cfg_idx] in bnx2x_set_settings()
602 phy_idx = bnx2x_get_cur_phy_idx(bp); in bnx2x_set_settings()
603 if (!(bp->port.supported[cfg_idx] in bnx2x_set_settings()
605 (bp->link_params.phy[phy_idx].media_type == in bnx2x_set_settings()
621 bp->link_params.req_line_speed[cfg_idx] = speed; in bnx2x_set_settings()
622 bp->link_params.req_duplex[cfg_idx] = cmd->duplex; in bnx2x_set_settings()
623 bp->port.advertising[cfg_idx] = advertising; in bnx2x_set_settings()
628 bp->link_params.req_line_speed[cfg_idx], in bnx2x_set_settings()
629 bp->link_params.req_duplex[cfg_idx], in bnx2x_set_settings()
630 bp->port.advertising[cfg_idx]); in bnx2x_set_settings()
633 bp->link_params.multi_phy_config = new_multi_phy_config; in bnx2x_set_settings()
635 bnx2x_stats_handle(bp, STATS_EVENT_STOP); in bnx2x_set_settings()
636 bnx2x_link_set(bp); in bnx2x_set_settings()
645 static int __bnx2x_get_preset_regs_len(struct bnx2x *bp, u32 preset) in __bnx2x_get_preset_regs_len() argument
647 if (CHIP_IS_E1(bp)) in __bnx2x_get_preset_regs_len()
649 else if (CHIP_IS_E1H(bp)) in __bnx2x_get_preset_regs_len()
651 else if (CHIP_IS_E2(bp)) in __bnx2x_get_preset_regs_len()
653 else if (CHIP_IS_E3A0(bp)) in __bnx2x_get_preset_regs_len()
655 else if (CHIP_IS_E3B0(bp)) in __bnx2x_get_preset_regs_len()
661 static int __bnx2x_get_regs_len(struct bnx2x *bp) in __bnx2x_get_regs_len() argument
668 regdump_len += __bnx2x_get_preset_regs_len(bp, preset_idx); in __bnx2x_get_regs_len()
675 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_regs_len() local
678 if (IS_VF(bp)) in bnx2x_get_regs_len()
681 regdump_len = __bnx2x_get_regs_len(bp); in bnx2x_get_regs_len()
698 static const u32 *__bnx2x_get_page_addr_ar(struct bnx2x *bp) in __bnx2x_get_page_addr_ar() argument
700 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_addr_ar()
702 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_addr_ar()
708 static u32 __bnx2x_get_page_reg_num(struct bnx2x *bp) in __bnx2x_get_page_reg_num() argument
710 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_reg_num()
712 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_reg_num()
718 static const u32 *__bnx2x_get_page_write_ar(struct bnx2x *bp) in __bnx2x_get_page_write_ar() argument
720 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_write_ar()
722 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_write_ar()
728 static u32 __bnx2x_get_page_write_num(struct bnx2x *bp) in __bnx2x_get_page_write_num() argument
730 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_write_num()
732 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_write_num()
738 static const struct reg_addr *__bnx2x_get_page_read_ar(struct bnx2x *bp) in __bnx2x_get_page_read_ar() argument
740 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_read_ar()
742 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_read_ar()
748 static u32 __bnx2x_get_page_read_num(struct bnx2x *bp) in __bnx2x_get_page_read_num() argument
750 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_read_num()
752 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_read_num()
758 static bool bnx2x_is_reg_in_chip(struct bnx2x *bp, in bnx2x_is_reg_in_chip() argument
761 if (CHIP_IS_E1(bp)) in bnx2x_is_reg_in_chip()
763 else if (CHIP_IS_E1H(bp)) in bnx2x_is_reg_in_chip()
765 else if (CHIP_IS_E2(bp)) in bnx2x_is_reg_in_chip()
767 else if (CHIP_IS_E3A0(bp)) in bnx2x_is_reg_in_chip()
769 else if (CHIP_IS_E3B0(bp)) in bnx2x_is_reg_in_chip()
775 static bool bnx2x_is_wreg_in_chip(struct bnx2x *bp, in bnx2x_is_wreg_in_chip() argument
778 if (CHIP_IS_E1(bp)) in bnx2x_is_wreg_in_chip()
780 else if (CHIP_IS_E1H(bp)) in bnx2x_is_wreg_in_chip()
782 else if (CHIP_IS_E2(bp)) in bnx2x_is_wreg_in_chip()
784 else if (CHIP_IS_E3A0(bp)) in bnx2x_is_wreg_in_chip()
786 else if (CHIP_IS_E3B0(bp)) in bnx2x_is_wreg_in_chip()
803 static void bnx2x_read_pages_regs(struct bnx2x *bp, u32 *p, u32 preset) in bnx2x_read_pages_regs() argument
808 const u32 *page_addr = __bnx2x_get_page_addr_ar(bp); in bnx2x_read_pages_regs()
810 int num_pages = __bnx2x_get_page_reg_num(bp); in bnx2x_read_pages_regs()
812 const u32 *write_addr = __bnx2x_get_page_write_ar(bp); in bnx2x_read_pages_regs()
814 int write_num = __bnx2x_get_page_write_num(bp); in bnx2x_read_pages_regs()
816 const struct reg_addr *read_addr = __bnx2x_get_page_read_ar(bp); in bnx2x_read_pages_regs()
818 int read_num = __bnx2x_get_page_read_num(bp); in bnx2x_read_pages_regs()
823 REG_WR(bp, write_addr[j], page_addr[i]); in bnx2x_read_pages_regs()
831 *p++ = REG_RD(bp, addr); in bnx2x_read_pages_regs()
839 static int __bnx2x_get_preset_regs(struct bnx2x *bp, u32 *p, u32 preset) in __bnx2x_get_preset_regs() argument
844 if (CHIP_IS_E1(bp)) in __bnx2x_get_preset_regs()
846 else if (CHIP_IS_E1H(bp)) in __bnx2x_get_preset_regs()
848 else if (CHIP_IS_E2(bp)) in __bnx2x_get_preset_regs()
850 else if (CHIP_IS_E3A0(bp)) in __bnx2x_get_preset_regs()
852 else if (CHIP_IS_E3B0(bp)) in __bnx2x_get_preset_regs()
857 if (bnx2x_is_reg_in_chip(bp, &idle_reg_addrs[i]) && in __bnx2x_get_preset_regs()
860 *p++ = REG_RD(bp, idle_reg_addrs[i].addr + j*4); in __bnx2x_get_preset_regs()
866 if (bnx2x_is_reg_in_chip(bp, ®_addrs[i]) && in __bnx2x_get_preset_regs()
869 *p++ = REG_RD(bp, reg_addrs[i].addr + j*4); in __bnx2x_get_preset_regs()
874 if (bnx2x_is_wreg_in_chip(bp, wreg_addr_p) && in __bnx2x_get_preset_regs()
877 *p++ = REG_RD(bp, wreg_addr_p->addr + i*4); in __bnx2x_get_preset_regs()
884 *p++ = REG_RD(bp, addr + j*4); in __bnx2x_get_preset_regs()
890 if (CHIP_IS_E2(bp) || CHIP_IS_E3(bp)) { in __bnx2x_get_preset_regs()
892 bnx2x_read_pages_regs(bp, p, preset); in __bnx2x_get_preset_regs()
898 static void __bnx2x_get_regs(struct bnx2x *bp, u32 *p) in __bnx2x_get_regs() argument
910 __bnx2x_get_preset_regs(bp, p, preset_idx); in __bnx2x_get_regs()
911 p += __bnx2x_get_preset_regs_len(bp, preset_idx); in __bnx2x_get_regs()
919 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_regs() local
925 if (!netif_running(bp->dev)) in bnx2x_get_regs()
933 bnx2x_disable_blocks_parity(bp); in bnx2x_get_regs()
940 if (CHIP_IS_E1(bp)) { in bnx2x_get_regs()
942 } else if (CHIP_IS_E1H(bp)) { in bnx2x_get_regs()
944 } else if (CHIP_IS_E2(bp)) { in bnx2x_get_regs()
946 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_regs()
947 } else if (CHIP_IS_E3A0(bp)) { in bnx2x_get_regs()
949 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_regs()
950 } else if (CHIP_IS_E3B0(bp)) { in bnx2x_get_regs()
952 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_regs()
959 __bnx2x_get_regs(bp, p); in bnx2x_get_regs()
962 bnx2x_clear_blocks_parity(bp); in bnx2x_get_regs()
963 bnx2x_enable_blocks_parity(bp); in bnx2x_get_regs()
968 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_preset_regs_len() local
971 regdump_len = __bnx2x_get_preset_regs_len(bp, preset); in bnx2x_get_preset_regs_len()
980 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_dump() local
986 bp->dump_preset_idx = val->flag; in bnx2x_set_dump()
993 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_dump_flag() local
996 dump->flag = bp->dump_preset_idx; in bnx2x_get_dump_flag()
998 dump->len = bnx2x_get_preset_regs_len(dev, bp->dump_preset_idx); in bnx2x_get_dump_flag()
1000 bp->dump_preset_idx, dump->len); in bnx2x_get_dump_flag()
1009 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_dump_data() local
1017 bnx2x_disable_blocks_parity(bp); in bnx2x_get_dump_data()
1020 dump_hdr.preset = bp->dump_preset_idx; in bnx2x_get_dump_data()
1026 if (CHIP_IS_E1(bp)) { in bnx2x_get_dump_data()
1028 } else if (CHIP_IS_E1H(bp)) { in bnx2x_get_dump_data()
1030 } else if (CHIP_IS_E2(bp)) { in bnx2x_get_dump_data()
1032 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_dump_data()
1033 } else if (CHIP_IS_E3A0(bp)) { in bnx2x_get_dump_data()
1035 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_dump_data()
1036 } else if (CHIP_IS_E3B0(bp)) { in bnx2x_get_dump_data()
1038 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_dump_data()
1045 __bnx2x_get_preset_regs(bp, p, dump_hdr.preset); in bnx2x_get_dump_data()
1048 bnx2x_clear_blocks_parity(bp); in bnx2x_get_dump_data()
1049 bnx2x_enable_blocks_parity(bp); in bnx2x_get_dump_data()
1057 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_drvinfo() local
1062 bnx2x_fill_fw_str(bp, info->fw_version, sizeof(info->fw_version)); in bnx2x_get_drvinfo()
1064 strlcpy(info->bus_info, pci_name(bp->pdev), sizeof(info->bus_info)); in bnx2x_get_drvinfo()
1066 info->testinfo_len = BNX2X_NUM_TESTS(bp); in bnx2x_get_drvinfo()
1067 info->eedump_len = bp->common.flash_size; in bnx2x_get_drvinfo()
1073 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_wol() local
1075 if (bp->flags & NO_WOL_FLAG) { in bnx2x_get_wol()
1080 if (bp->wol) in bnx2x_get_wol()
1090 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_wol() local
1098 if (bp->flags & NO_WOL_FLAG) { in bnx2x_set_wol()
1102 bp->wol = 1; in bnx2x_set_wol()
1104 bp->wol = 0; in bnx2x_set_wol()
1111 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_msglevel() local
1113 return bp->msg_enable; in bnx2x_get_msglevel()
1118 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_msglevel() local
1122 if (IS_PF(bp) && (level & BNX2X_MSG_MCP)) in bnx2x_set_msglevel()
1123 bnx2x_fw_dump_lvl(bp, KERN_INFO); in bnx2x_set_msglevel()
1124 bp->msg_enable = level; in bnx2x_set_msglevel()
1130 struct bnx2x *bp = netdev_priv(dev); in bnx2x_nway_reset() local
1132 if (!bp->port.pmf) in bnx2x_nway_reset()
1136 bnx2x_stats_handle(bp, STATS_EVENT_STOP); in bnx2x_nway_reset()
1137 bnx2x_force_link_reset(bp); in bnx2x_nway_reset()
1138 bnx2x_link_set(bp); in bnx2x_nway_reset()
1146 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_link() local
1148 if (bp->flags & MF_FUNC_DIS || (bp->state != BNX2X_STATE_OPEN)) in bnx2x_get_link()
1151 if (IS_VF(bp)) in bnx2x_get_link()
1153 &bp->vf_link_vars.link_report_flags); in bnx2x_get_link()
1155 return bp->link_vars.link_up; in bnx2x_get_link()
1160 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_eeprom_len() local
1162 return bp->common.flash_size; in bnx2x_get_eeprom_len()
1178 static int bnx2x_acquire_nvram_lock(struct bnx2x *bp) in bnx2x_acquire_nvram_lock() argument
1180 int port = BP_PORT(bp); in bnx2x_acquire_nvram_lock()
1185 bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_NVRAM); in bnx2x_acquire_nvram_lock()
1189 if (CHIP_REV_IS_SLOW(bp)) in bnx2x_acquire_nvram_lock()
1193 REG_WR(bp, MCP_REG_MCPR_NVM_SW_ARB, in bnx2x_acquire_nvram_lock()
1197 val = REG_RD(bp, MCP_REG_MCPR_NVM_SW_ARB); in bnx2x_acquire_nvram_lock()
1213 static int bnx2x_release_nvram_lock(struct bnx2x *bp) in bnx2x_release_nvram_lock() argument
1215 int port = BP_PORT(bp); in bnx2x_release_nvram_lock()
1221 if (CHIP_REV_IS_SLOW(bp)) in bnx2x_release_nvram_lock()
1225 REG_WR(bp, MCP_REG_MCPR_NVM_SW_ARB, in bnx2x_release_nvram_lock()
1229 val = REG_RD(bp, MCP_REG_MCPR_NVM_SW_ARB); in bnx2x_release_nvram_lock()
1243 bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_NVRAM); in bnx2x_release_nvram_lock()
1247 static void bnx2x_enable_nvram_access(struct bnx2x *bp) in bnx2x_enable_nvram_access() argument
1251 val = REG_RD(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE); in bnx2x_enable_nvram_access()
1254 REG_WR(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE, in bnx2x_enable_nvram_access()
1259 static void bnx2x_disable_nvram_access(struct bnx2x *bp) in bnx2x_disable_nvram_access() argument
1263 val = REG_RD(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE); in bnx2x_disable_nvram_access()
1266 REG_WR(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE, in bnx2x_disable_nvram_access()
1271 static int bnx2x_nvram_read_dword(struct bnx2x *bp, u32 offset, __be32 *ret_val, in bnx2x_nvram_read_dword() argument
1281 REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, MCPR_NVM_COMMAND_DONE); in bnx2x_nvram_read_dword()
1284 REG_WR(bp, MCP_REG_MCPR_NVM_ADDR, in bnx2x_nvram_read_dword()
1288 REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, cmd_flags); in bnx2x_nvram_read_dword()
1292 if (CHIP_REV_IS_SLOW(bp)) in bnx2x_nvram_read_dword()
1300 val = REG_RD(bp, MCP_REG_MCPR_NVM_COMMAND); in bnx2x_nvram_read_dword()
1303 val = REG_RD(bp, MCP_REG_MCPR_NVM_READ); in bnx2x_nvram_read_dword()
1319 static int bnx2x_nvram_read(struct bnx2x *bp, u32 offset, u8 *ret_buf, in bnx2x_nvram_read() argument
1333 if (offset + buf_size > bp->common.flash_size) { in bnx2x_nvram_read()
1336 offset, buf_size, bp->common.flash_size); in bnx2x_nvram_read()
1341 rc = bnx2x_acquire_nvram_lock(bp); in bnx2x_nvram_read()
1346 bnx2x_enable_nvram_access(bp); in bnx2x_nvram_read()
1351 rc = bnx2x_nvram_read_dword(bp, offset, &val, cmd_flags); in bnx2x_nvram_read()
1363 rc = bnx2x_nvram_read_dword(bp, offset, &val, cmd_flags); in bnx2x_nvram_read()
1368 bnx2x_disable_nvram_access(bp); in bnx2x_nvram_read()
1369 bnx2x_release_nvram_lock(bp); in bnx2x_nvram_read()
1374 static int bnx2x_nvram_read32(struct bnx2x *bp, u32 offset, u32 *buf, in bnx2x_nvram_read32() argument
1379 rc = bnx2x_nvram_read(bp, offset, (u8 *)buf, buf_size); in bnx2x_nvram_read32()
1391 static bool bnx2x_is_nvm_accessible(struct bnx2x *bp) in bnx2x_is_nvm_accessible() argument
1395 struct net_device *dev = pci_get_drvdata(bp->pdev); in bnx2x_is_nvm_accessible()
1397 if (bp->pdev->pm_cap) in bnx2x_is_nvm_accessible()
1398 rc = pci_read_config_word(bp->pdev, in bnx2x_is_nvm_accessible()
1399 bp->pdev->pm_cap + PCI_PM_CTRL, &pm); in bnx2x_is_nvm_accessible()
1411 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_eeprom() local
1413 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_get_eeprom()
1426 return bnx2x_nvram_read(bp, eeprom->offset, eebuf, eeprom->len); in bnx2x_get_eeprom()
1433 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_module_eeprom() local
1438 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_get_module_eeprom()
1444 phy_idx = bnx2x_get_cur_phy_idx(bp); in bnx2x_get_module_eeprom()
1453 bnx2x_acquire_phy_lock(bp); in bnx2x_get_module_eeprom()
1454 rc = bnx2x_read_sfp_module_eeprom(&bp->link_params.phy[phy_idx], in bnx2x_get_module_eeprom()
1455 &bp->link_params, in bnx2x_get_module_eeprom()
1460 bnx2x_release_phy_lock(bp); in bnx2x_get_module_eeprom()
1478 bnx2x_acquire_phy_lock(bp); in bnx2x_get_module_eeprom()
1479 rc = bnx2x_read_sfp_module_eeprom(&bp->link_params.phy[phy_idx], in bnx2x_get_module_eeprom()
1480 &bp->link_params, in bnx2x_get_module_eeprom()
1485 bnx2x_release_phy_lock(bp); in bnx2x_get_module_eeprom()
1497 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_module_info() local
1501 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_get_module_info()
1506 phy_idx = bnx2x_get_cur_phy_idx(bp); in bnx2x_get_module_info()
1507 bnx2x_acquire_phy_lock(bp); in bnx2x_get_module_info()
1508 rc = bnx2x_read_sfp_module_eeprom(&bp->link_params.phy[phy_idx], in bnx2x_get_module_info()
1509 &bp->link_params, in bnx2x_get_module_info()
1514 bnx2x_release_phy_lock(bp); in bnx2x_get_module_info()
1520 bnx2x_acquire_phy_lock(bp); in bnx2x_get_module_info()
1521 rc = bnx2x_read_sfp_module_eeprom(&bp->link_params.phy[phy_idx], in bnx2x_get_module_info()
1522 &bp->link_params, in bnx2x_get_module_info()
1527 bnx2x_release_phy_lock(bp); in bnx2x_get_module_info()
1544 static int bnx2x_nvram_write_dword(struct bnx2x *bp, u32 offset, u32 val, in bnx2x_nvram_write_dword() argument
1553 REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, MCPR_NVM_COMMAND_DONE); in bnx2x_nvram_write_dword()
1556 REG_WR(bp, MCP_REG_MCPR_NVM_WRITE, val); in bnx2x_nvram_write_dword()
1559 REG_WR(bp, MCP_REG_MCPR_NVM_ADDR, in bnx2x_nvram_write_dword()
1563 REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, cmd_flags); in bnx2x_nvram_write_dword()
1567 if (CHIP_REV_IS_SLOW(bp)) in bnx2x_nvram_write_dword()
1574 val = REG_RD(bp, MCP_REG_MCPR_NVM_COMMAND); in bnx2x_nvram_write_dword()
1589 static int bnx2x_nvram_write1(struct bnx2x *bp, u32 offset, u8 *data_buf, in bnx2x_nvram_write1() argument
1596 if (offset + buf_size > bp->common.flash_size) { in bnx2x_nvram_write1()
1599 offset, buf_size, bp->common.flash_size); in bnx2x_nvram_write1()
1604 rc = bnx2x_acquire_nvram_lock(bp); in bnx2x_nvram_write1()
1609 bnx2x_enable_nvram_access(bp); in bnx2x_nvram_write1()
1613 rc = bnx2x_nvram_read_dword(bp, align_offset, &val_be, cmd_flags); in bnx2x_nvram_write1()
1626 rc = bnx2x_nvram_write_dword(bp, align_offset, val, in bnx2x_nvram_write1()
1631 bnx2x_disable_nvram_access(bp); in bnx2x_nvram_write1()
1632 bnx2x_release_nvram_lock(bp); in bnx2x_nvram_write1()
1637 static int bnx2x_nvram_write(struct bnx2x *bp, u32 offset, u8 *data_buf, in bnx2x_nvram_write() argument
1646 return bnx2x_nvram_write1(bp, offset, data_buf, buf_size); in bnx2x_nvram_write()
1655 if (offset + buf_size > bp->common.flash_size) { in bnx2x_nvram_write()
1658 offset, buf_size, bp->common.flash_size); in bnx2x_nvram_write()
1663 rc = bnx2x_acquire_nvram_lock(bp); in bnx2x_nvram_write()
1668 bnx2x_enable_nvram_access(bp); in bnx2x_nvram_write()
1688 rc = bnx2x_nvram_write_dword(bp, offset, val, cmd_flags); in bnx2x_nvram_write()
1698 bnx2x_disable_nvram_access(bp); in bnx2x_nvram_write()
1699 bnx2x_release_nvram_lock(bp); in bnx2x_nvram_write()
1707 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_eeprom() local
1708 int port = BP_PORT(bp); in bnx2x_set_eeprom()
1712 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_set_eeprom()
1727 !bp->port.pmf) { in bnx2x_set_eeprom()
1734 SHMEM_RD(bp, in bnx2x_set_eeprom()
1739 bnx2x_stats_handle(bp, STATS_EVENT_STOP); in bnx2x_set_eeprom()
1741 bnx2x_acquire_phy_lock(bp); in bnx2x_set_eeprom()
1742 rc |= bnx2x_link_reset(&bp->link_params, in bnx2x_set_eeprom()
1743 &bp->link_vars, 0); in bnx2x_set_eeprom()
1746 bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_0, in bnx2x_set_eeprom()
1748 bnx2x_release_phy_lock(bp); in bnx2x_set_eeprom()
1749 bnx2x_link_report(bp); in bnx2x_set_eeprom()
1753 if (bp->state == BNX2X_STATE_OPEN) { in bnx2x_set_eeprom()
1754 bnx2x_acquire_phy_lock(bp); in bnx2x_set_eeprom()
1755 rc |= bnx2x_link_reset(&bp->link_params, in bnx2x_set_eeprom()
1756 &bp->link_vars, 1); in bnx2x_set_eeprom()
1758 rc |= bnx2x_phy_init(&bp->link_params, in bnx2x_set_eeprom()
1759 &bp->link_vars); in bnx2x_set_eeprom()
1760 bnx2x_release_phy_lock(bp); in bnx2x_set_eeprom()
1761 bnx2x_calc_fc_adv(bp); in bnx2x_set_eeprom()
1769 bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_0, in bnx2x_set_eeprom()
1772 bnx2x_acquire_phy_lock(bp); in bnx2x_set_eeprom()
1774 bnx2x_sfx7101_sp_sw_reset(bp, in bnx2x_set_eeprom()
1775 &bp->link_params.phy[EXT_PHY1]); in bnx2x_set_eeprom()
1779 bnx2x_ext_phy_hw_reset(bp, port); in bnx2x_set_eeprom()
1781 bnx2x_release_phy_lock(bp); in bnx2x_set_eeprom()
1784 rc = bnx2x_nvram_write(bp, eeprom->offset, eebuf, eeprom->len); in bnx2x_set_eeprom()
1792 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_coalesce() local
1796 coal->rx_coalesce_usecs = bp->rx_ticks; in bnx2x_get_coalesce()
1797 coal->tx_coalesce_usecs = bp->tx_ticks; in bnx2x_get_coalesce()
1805 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_coalesce() local
1807 bp->rx_ticks = (u16)coal->rx_coalesce_usecs; in bnx2x_set_coalesce()
1808 if (bp->rx_ticks > BNX2X_MAX_COALESCE_TOUT) in bnx2x_set_coalesce()
1809 bp->rx_ticks = BNX2X_MAX_COALESCE_TOUT; in bnx2x_set_coalesce()
1811 bp->tx_ticks = (u16)coal->tx_coalesce_usecs; in bnx2x_set_coalesce()
1812 if (bp->tx_ticks > BNX2X_MAX_COALESCE_TOUT) in bnx2x_set_coalesce()
1813 bp->tx_ticks = BNX2X_MAX_COALESCE_TOUT; in bnx2x_set_coalesce()
1816 bnx2x_update_coalesce(bp); in bnx2x_set_coalesce()
1824 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_ringparam() local
1828 if (bp->rx_ring_size) in bnx2x_get_ringparam()
1829 ering->rx_pending = bp->rx_ring_size; in bnx2x_get_ringparam()
1833 ering->tx_max_pending = IS_MF_FCOE_AFEX(bp) ? 0 : MAX_TX_AVAIL; in bnx2x_get_ringparam()
1834 ering->tx_pending = bp->tx_ring_size; in bnx2x_get_ringparam()
1840 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_ringparam() local
1846 if (bp->recovery_state != BNX2X_RECOVERY_DONE) { in bnx2x_set_ringparam()
1853 (ering->rx_pending < (bp->disable_tpa ? MIN_RX_SIZE_NONTPA : in bnx2x_set_ringparam()
1855 (ering->tx_pending > (IS_MF_STORAGE_ONLY(bp) ? 0 : MAX_TX_AVAIL)) || in bnx2x_set_ringparam()
1861 bp->rx_ring_size = ering->rx_pending; in bnx2x_set_ringparam()
1862 bp->tx_ring_size = ering->tx_pending; in bnx2x_set_ringparam()
1870 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_pauseparam() local
1871 int cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_get_pauseparam()
1874 epause->autoneg = (bp->link_params.req_flow_ctrl[cfg_idx] == in bnx2x_get_pauseparam()
1878 cfg_reg = bp->link_params.req_flow_ctrl[cfg_idx]; in bnx2x_get_pauseparam()
1880 cfg_reg = bp->link_params.req_fc_auto_adv; in bnx2x_get_pauseparam()
1895 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_pauseparam() local
1896 u32 cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_set_pauseparam()
1897 if (IS_MF(bp)) in bnx2x_set_pauseparam()
1904 bp->link_params.req_flow_ctrl[cfg_idx] = BNX2X_FLOW_CTRL_AUTO; in bnx2x_set_pauseparam()
1907 bp->link_params.req_flow_ctrl[cfg_idx] |= BNX2X_FLOW_CTRL_RX; in bnx2x_set_pauseparam()
1910 bp->link_params.req_flow_ctrl[cfg_idx] |= BNX2X_FLOW_CTRL_TX; in bnx2x_set_pauseparam()
1912 if (bp->link_params.req_flow_ctrl[cfg_idx] == BNX2X_FLOW_CTRL_AUTO) in bnx2x_set_pauseparam()
1913 bp->link_params.req_flow_ctrl[cfg_idx] = BNX2X_FLOW_CTRL_NONE; in bnx2x_set_pauseparam()
1916 if (!(bp->port.supported[cfg_idx] & SUPPORTED_Autoneg)) { in bnx2x_set_pauseparam()
1921 if (bp->link_params.req_line_speed[cfg_idx] == SPEED_AUTO_NEG) { in bnx2x_set_pauseparam()
1922 bp->link_params.req_flow_ctrl[cfg_idx] = in bnx2x_set_pauseparam()
1925 bp->link_params.req_fc_auto_adv = 0; in bnx2x_set_pauseparam()
1927 bp->link_params.req_fc_auto_adv |= BNX2X_FLOW_CTRL_RX; in bnx2x_set_pauseparam()
1930 bp->link_params.req_fc_auto_adv |= BNX2X_FLOW_CTRL_TX; in bnx2x_set_pauseparam()
1932 if (!bp->link_params.req_fc_auto_adv) in bnx2x_set_pauseparam()
1933 bp->link_params.req_fc_auto_adv |= BNX2X_FLOW_CTRL_NONE; in bnx2x_set_pauseparam()
1937 "req_flow_ctrl 0x%x\n", bp->link_params.req_flow_ctrl[cfg_idx]); in bnx2x_set_pauseparam()
1940 bnx2x_stats_handle(bp, STATS_EVENT_STOP); in bnx2x_set_pauseparam()
1941 bnx2x_link_set(bp); in bnx2x_set_pauseparam()
1999 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_eee() local
2002 if (!SHMEM2_HAS(bp, eee_status[BP_PORT(bp)])) { in bnx2x_get_eee()
2007 eee_cfg = bp->link_vars.eee_status; in bnx2x_get_eee()
2032 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_eee() local
2036 if (IS_MF(bp)) in bnx2x_set_eee()
2039 if (!SHMEM2_HAS(bp, eee_status[BP_PORT(bp)])) { in bnx2x_set_eee()
2044 eee_cfg = bp->link_vars.eee_status; in bnx2x_set_eee()
2075 bp->link_params.eee_mode |= EEE_MODE_ADV_LPI; in bnx2x_set_eee()
2077 bp->link_params.eee_mode &= ~EEE_MODE_ADV_LPI; in bnx2x_set_eee()
2080 bp->link_params.eee_mode |= EEE_MODE_ENABLE_LPI; in bnx2x_set_eee()
2082 bp->link_params.eee_mode &= ~EEE_MODE_ENABLE_LPI; in bnx2x_set_eee()
2084 bp->link_params.eee_mode &= ~EEE_MODE_TIMER_MASK; in bnx2x_set_eee()
2085 bp->link_params.eee_mode |= (edata->tx_lpi_timer & in bnx2x_set_eee()
2092 bnx2x_stats_handle(bp, STATS_EVENT_STOP); in bnx2x_set_eee()
2093 bnx2x_force_link_reset(bp); in bnx2x_set_eee()
2094 bnx2x_link_set(bp); in bnx2x_set_eee()
2118 static int bnx2x_test_registers(struct bnx2x *bp) in bnx2x_test_registers() argument
2122 int port = BP_PORT(bp); in bnx2x_test_registers()
2209 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_test_registers()
2215 if (CHIP_IS_E1(bp)) in bnx2x_test_registers()
2217 else if (CHIP_IS_E1H(bp)) in bnx2x_test_registers()
2219 else if (CHIP_IS_E2(bp)) in bnx2x_test_registers()
2221 else if (CHIP_IS_E3B0(bp)) in bnx2x_test_registers()
2248 save_val = REG_RD(bp, offset); in bnx2x_test_registers()
2250 REG_WR(bp, offset, wr_val & mask); in bnx2x_test_registers()
2252 val = REG_RD(bp, offset); in bnx2x_test_registers()
2255 REG_WR(bp, offset, save_val); in bnx2x_test_registers()
2273 static int bnx2x_test_memory(struct bnx2x *bp) in bnx2x_test_memory() argument
2313 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_test_memory()
2319 if (CHIP_IS_E1(bp)) in bnx2x_test_memory()
2321 else if (CHIP_IS_E1H(bp)) in bnx2x_test_memory()
2323 else if (CHIP_IS_E2(bp)) in bnx2x_test_memory()
2330 val = REG_RD(bp, prty_tbl[i].offset); in bnx2x_test_memory()
2341 REG_RD(bp, mem_tbl[i].offset + j*4); in bnx2x_test_memory()
2345 val = REG_RD(bp, prty_tbl[i].offset); in bnx2x_test_memory()
2359 static void bnx2x_wait_for_link(struct bnx2x *bp, u8 link_up, u8 is_serdes) in bnx2x_wait_for_link() argument
2364 while (bnx2x_link_test(bp, is_serdes) && cnt--) in bnx2x_wait_for_link()
2367 if (cnt <= 0 && bnx2x_link_test(bp, is_serdes)) in bnx2x_wait_for_link()
2371 while (!bp->link_vars.link_up && cnt--) in bnx2x_wait_for_link()
2374 if (cnt <= 0 && !bp->link_vars.link_up) in bnx2x_wait_for_link()
2380 static int bnx2x_run_loopback(struct bnx2x *bp, int loopback_mode) in bnx2x_run_loopback() argument
2385 struct bnx2x_fastpath *fp_rx = &bp->fp[0]; in bnx2x_run_loopback()
2386 struct bnx2x_fastpath *fp_tx = &bp->fp[0]; in bnx2x_run_loopback()
2400 struct netdev_queue *txq = netdev_get_tx_queue(bp->dev, in bnx2x_run_loopback()
2406 if (bp->link_params.loopback_mode != LOOPBACK_XGXS) { in bnx2x_run_loopback()
2412 if (CHIP_IS_E3(bp)) { in bnx2x_run_loopback()
2413 int cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_run_loopback()
2414 if (bp->port.supported[cfg_idx] & in bnx2x_run_loopback()
2418 bp->link_params.loopback_mode = LOOPBACK_XMAC; in bnx2x_run_loopback()
2420 bp->link_params.loopback_mode = LOOPBACK_UMAC; in bnx2x_run_loopback()
2422 bp->link_params.loopback_mode = LOOPBACK_BMAC; in bnx2x_run_loopback()
2424 bnx2x_phy_init(&bp->link_params, &bp->link_vars); in bnx2x_run_loopback()
2427 if (bp->link_params.loopback_mode != LOOPBACK_EXT) { in bnx2x_run_loopback()
2439 pkt_size = (((bp->dev->mtu < ETH_MAX_PACKET_SIZE) ? in bnx2x_run_loopback()
2440 bp->dev->mtu : ETH_MAX_PACKET_SIZE) + ETH_HLEN); in bnx2x_run_loopback()
2441 skb = netdev_alloc_skb(bp->dev, fp_rx->rx_buf_size); in bnx2x_run_loopback()
2448 memcpy(packet, bp->dev->dev_addr, ETH_ALEN); in bnx2x_run_loopback()
2453 mapping = dma_map_single(&bp->pdev->dev, skb->data, in bnx2x_run_loopback()
2455 if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) { in bnx2x_run_loopback()
2493 if (CHIP_IS_E1x(bp)) { in bnx2x_run_loopback()
2514 DOORBELL(bp, txdata->cid, txdata->tx_db.raw); in bnx2x_run_loopback()
2532 if (bp->common.int_block == INT_BLOCK_IGU) { in bnx2x_run_loopback()
2538 bnx2x_tx_int(bp, txdata); in bnx2x_run_loopback()
2557 dma_sync_single_for_cpu(&bp->pdev->dev, in bnx2x_run_loopback()
2575 bnx2x_update_rx_prod(bp, fp_rx, fp_rx->rx_bd_prod, fp_rx->rx_comp_prod, in bnx2x_run_loopback()
2579 bp->link_params.loopback_mode = LOOPBACK_NONE; in bnx2x_run_loopback()
2584 static int bnx2x_test_loopback(struct bnx2x *bp) in bnx2x_test_loopback() argument
2588 if (BP_NOMCP(bp)) in bnx2x_test_loopback()
2591 if (!netif_running(bp->dev)) in bnx2x_test_loopback()
2594 bnx2x_netif_stop(bp, 1); in bnx2x_test_loopback()
2595 bnx2x_acquire_phy_lock(bp); in bnx2x_test_loopback()
2597 res = bnx2x_run_loopback(bp, BNX2X_PHY_LOOPBACK); in bnx2x_test_loopback()
2603 res = bnx2x_run_loopback(bp, BNX2X_MAC_LOOPBACK); in bnx2x_test_loopback()
2609 bnx2x_release_phy_lock(bp); in bnx2x_test_loopback()
2610 bnx2x_netif_start(bp); in bnx2x_test_loopback()
2615 static int bnx2x_test_ext_loopback(struct bnx2x *bp) in bnx2x_test_ext_loopback() argument
2619 (bp->link_vars.link_status & LINK_STATUS_SERDES_LINK) > 0; in bnx2x_test_ext_loopback()
2621 if (BP_NOMCP(bp)) in bnx2x_test_ext_loopback()
2624 if (!netif_running(bp->dev)) in bnx2x_test_ext_loopback()
2627 bnx2x_nic_unload(bp, UNLOAD_NORMAL, false); in bnx2x_test_ext_loopback()
2628 rc = bnx2x_nic_load(bp, LOAD_LOOPBACK_EXT); in bnx2x_test_ext_loopback()
2634 bnx2x_wait_for_link(bp, 1, is_serdes); in bnx2x_test_ext_loopback()
2636 bnx2x_netif_stop(bp, 1); in bnx2x_test_ext_loopback()
2638 rc = bnx2x_run_loopback(bp, BNX2X_EXT_LOOPBACK); in bnx2x_test_ext_loopback()
2642 bnx2x_netif_start(bp); in bnx2x_test_ext_loopback()
2669 static int bnx2x_nvram_crc(struct bnx2x *bp, in bnx2x_nvram_crc() argument
2683 rc = bnx2x_nvram_read(bp, offset + done, buff, count); in bnx2x_nvram_crc()
2698 static int bnx2x_test_nvram_dir(struct bnx2x *bp, in bnx2x_test_nvram_dir() argument
2710 rc = bnx2x_nvram_crc(bp, entry->nvm_start_addr, size, buff); in bnx2x_test_nvram_dir()
2718 static int bnx2x_test_dir_entry(struct bnx2x *bp, u32 addr, u8 *buff) in bnx2x_test_dir_entry() argument
2723 rc = bnx2x_nvram_read32(bp, addr, (u32 *)&entry, sizeof(entry)); in bnx2x_test_dir_entry()
2727 return bnx2x_test_nvram_dir(bp, &entry, buff); in bnx2x_test_dir_entry()
2730 static int bnx2x_test_nvram_ext_dirs(struct bnx2x *bp, u8 *buff) in bnx2x_test_nvram_ext_dirs() argument
2736 rc = bnx2x_nvram_read32(bp, in bnx2x_test_nvram_ext_dirs()
2746 rc = bnx2x_nvram_read32(bp, entry.nvm_start_addr, in bnx2x_test_nvram_ext_dirs()
2754 rc = bnx2x_test_dir_entry(bp, dir_offset + in bnx2x_test_nvram_ext_dirs()
2764 static int bnx2x_test_nvram_dirs(struct bnx2x *bp, u8 *buff) in bnx2x_test_nvram_dirs() argument
2772 rc = bnx2x_test_dir_entry(bp, dir_offset + in bnx2x_test_nvram_dirs()
2779 return bnx2x_test_nvram_ext_dirs(bp, buff); in bnx2x_test_nvram_dirs()
2787 static int bnx2x_test_nvram_tbl(struct bnx2x *bp, in bnx2x_test_nvram_tbl() argument
2793 int rc = bnx2x_nvram_crc(bp, nvram_tbl[i].offset, in bnx2x_test_nvram_tbl()
2806 static int bnx2x_test_nvram(struct bnx2x *bp) in bnx2x_test_nvram() argument
2827 if (BP_NOMCP(bp)) in bnx2x_test_nvram()
2837 rc = bnx2x_nvram_read32(bp, 0, &magic, sizeof(magic)); in bnx2x_test_nvram()
2852 rc = bnx2x_test_nvram_tbl(bp, nvram_tbl, buf); in bnx2x_test_nvram()
2856 if (!CHIP_IS_E1x(bp) && !CHIP_IS_57811xx(bp)) { in bnx2x_test_nvram()
2857 u32 hide = SHMEM_RD(bp, dev_info.shared_hw_config.config2) & in bnx2x_test_nvram()
2863 rc = bnx2x_test_nvram_tbl(bp, nvram_tbl2, buf); in bnx2x_test_nvram()
2869 rc = bnx2x_test_nvram_dirs(bp, buf); in bnx2x_test_nvram()
2877 static int bnx2x_test_intr(struct bnx2x *bp) in bnx2x_test_intr() argument
2881 if (!netif_running(bp->dev)) { in bnx2x_test_intr()
2887 params.q_obj = &bp->sp_objs->q_obj; in bnx2x_test_intr()
2892 return bnx2x_queue_state_change(bp, ¶ms); in bnx2x_test_intr()
2898 struct bnx2x *bp = netdev_priv(dev); in bnx2x_self_test() local
2902 if (bp->recovery_state != BNX2X_RECOVERY_DONE) { in bnx2x_self_test()
2903 netdev_err(bp->dev, in bnx2x_self_test()
2914 memset(buf, 0, sizeof(u64) * BNX2X_NUM_TESTS(bp)); in bnx2x_self_test()
2916 if (bnx2x_test_nvram(bp) != 0) { in bnx2x_self_test()
2917 if (!IS_MF(bp)) in bnx2x_self_test()
2929 is_serdes = (bp->link_vars.link_status & LINK_STATUS_SERDES_LINK) > 0; in bnx2x_self_test()
2930 link_up = bp->link_vars.link_up; in bnx2x_self_test()
2932 if ((etest->flags & ETH_TEST_FL_OFFLINE) && !IS_MF(bp)) { in bnx2x_self_test()
2933 int port = BP_PORT(bp); in bnx2x_self_test()
2937 val = REG_RD(bp, NIG_REG_EGRESS_UMP0_IN_EN + port*4); in bnx2x_self_test()
2939 REG_WR(bp, NIG_REG_EGRESS_UMP0_IN_EN + port*4, 0); in bnx2x_self_test()
2941 bnx2x_nic_unload(bp, UNLOAD_NORMAL, false); in bnx2x_self_test()
2942 rc = bnx2x_nic_load(bp, LOAD_DIAG); in bnx2x_self_test()
2951 bnx2x_wait_for_link(bp, 1, is_serdes); in bnx2x_self_test()
2953 if (bnx2x_test_registers(bp) != 0) { in bnx2x_self_test()
2957 if (bnx2x_test_memory(bp) != 0) { in bnx2x_self_test()
2962 buf[2] = bnx2x_test_loopback(bp); /* internal LB */ in bnx2x_self_test()
2967 buf[3] = bnx2x_test_ext_loopback(bp); /* external LB */ in bnx2x_self_test()
2973 bnx2x_nic_unload(bp, UNLOAD_NORMAL, false); in bnx2x_self_test()
2976 REG_WR(bp, NIG_REG_EGRESS_UMP0_IN_EN + port*4, val); in bnx2x_self_test()
2977 rc = bnx2x_nic_load(bp, LOAD_NORMAL); in bnx2x_self_test()
2985 bnx2x_wait_for_link(bp, link_up, is_serdes); in bnx2x_self_test()
2988 if (bnx2x_test_intr(bp) != 0) { in bnx2x_self_test()
2989 if (!IS_MF(bp)) in bnx2x_self_test()
2998 while (bnx2x_link_test(bp, is_serdes) && --cnt) in bnx2x_self_test()
3003 if (!IS_MF(bp)) in bnx2x_self_test()
3014 #define HIDE_PORT_STAT(bp) \ argument
3015 ((IS_MF(bp) && !(bp->msg_enable & BNX2X_MSG_STATS)) || \
3016 IS_VF(bp))
3021 static int bnx2x_num_stat_queues(struct bnx2x *bp) in bnx2x_num_stat_queues() argument
3023 return BNX2X_NUM_ETH_QUEUES(bp); in bnx2x_num_stat_queues()
3028 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_sset_count() local
3033 if (is_multi(bp)) { in bnx2x_get_sset_count()
3034 num_strings = bnx2x_num_stat_queues(bp) * in bnx2x_get_sset_count()
3038 if (HIDE_PORT_STAT(bp)) { in bnx2x_get_sset_count()
3048 return BNX2X_NUM_TESTS(bp); in bnx2x_get_sset_count()
3060 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_private_flags() local
3063 flags |= (!(bp->flags & NO_ISCSI_FLAG) ? 1 : 0) << BNX2X_PRI_FLAG_ISCSI; in bnx2x_get_private_flags()
3064 flags |= (!(bp->flags & NO_FCOE_FLAG) ? 1 : 0) << BNX2X_PRI_FLAG_FCOE; in bnx2x_get_private_flags()
3065 flags |= (!!IS_MF_STORAGE_ONLY(bp)) << BNX2X_PRI_FLAG_STORAGE; in bnx2x_get_private_flags()
3072 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_strings() local
3079 if (is_multi(bp)) { in bnx2x_get_strings()
3080 for_each_eth_queue(bp, i) { in bnx2x_get_strings()
3093 if (HIDE_PORT_STAT(bp) && IS_PORT_STAT(i)) in bnx2x_get_strings()
3104 if (!IS_MF(bp)) in bnx2x_get_strings()
3109 ETH_GSTRING_LEN * BNX2X_NUM_TESTS(bp)); in bnx2x_get_strings()
3122 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_ethtool_stats() local
3126 if (is_multi(bp)) { in bnx2x_get_ethtool_stats()
3127 for_each_eth_queue(bp, i) { in bnx2x_get_ethtool_stats()
3128 hw_stats = (u32 *)&bp->fp_stats[i].eth_q_stats; in bnx2x_get_ethtool_stats()
3149 hw_stats = (u32 *)&bp->eth_stats; in bnx2x_get_ethtool_stats()
3151 if (HIDE_PORT_STAT(bp) && IS_PORT_STAT(i)) in bnx2x_get_ethtool_stats()
3175 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_phys_id() local
3177 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_set_phys_id()
3188 bnx2x_acquire_phy_lock(bp); in bnx2x_set_phys_id()
3189 bnx2x_set_led(&bp->link_params, &bp->link_vars, in bnx2x_set_phys_id()
3191 bnx2x_release_phy_lock(bp); in bnx2x_set_phys_id()
3195 bnx2x_acquire_phy_lock(bp); in bnx2x_set_phys_id()
3196 bnx2x_set_led(&bp->link_params, &bp->link_vars, in bnx2x_set_phys_id()
3198 bnx2x_release_phy_lock(bp); in bnx2x_set_phys_id()
3202 bnx2x_acquire_phy_lock(bp); in bnx2x_set_phys_id()
3203 bnx2x_set_led(&bp->link_params, &bp->link_vars, in bnx2x_set_phys_id()
3205 bp->link_vars.line_speed); in bnx2x_set_phys_id()
3206 bnx2x_release_phy_lock(bp); in bnx2x_set_phys_id()
3212 static int bnx2x_get_rss_flags(struct bnx2x *bp, struct ethtool_rxnfc *info) in bnx2x_get_rss_flags() argument
3221 if (bp->rss_conf_obj.udp_rss_v4) in bnx2x_get_rss_flags()
3228 if (bp->rss_conf_obj.udp_rss_v6) in bnx2x_get_rss_flags()
3249 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_rxnfc() local
3253 info->data = BNX2X_NUM_ETH_QUEUES(bp); in bnx2x_get_rxnfc()
3256 return bnx2x_get_rss_flags(bp, info); in bnx2x_get_rxnfc()
3263 static int bnx2x_set_rss_flags(struct bnx2x *bp, struct ethtool_rxnfc *info) in bnx2x_set_rss_flags() argument
3294 (bp->rss_conf_obj.udp_rss_v4 != udp_rss_requested)) { in bnx2x_set_rss_flags()
3295 bp->rss_conf_obj.udp_rss_v4 = udp_rss_requested; in bnx2x_set_rss_flags()
3299 return bnx2x_rss(bp, &bp->rss_conf_obj, false, true); in bnx2x_set_rss_flags()
3301 (bp->rss_conf_obj.udp_rss_v6 != udp_rss_requested)) { in bnx2x_set_rss_flags()
3302 bp->rss_conf_obj.udp_rss_v6 = udp_rss_requested; in bnx2x_set_rss_flags()
3306 return bnx2x_rss(bp, &bp->rss_conf_obj, false, true); in bnx2x_set_rss_flags()
3345 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_rxnfc() local
3349 return bnx2x_set_rss_flags(bp, info); in bnx2x_set_rxnfc()
3363 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_rxfh() local
3368 bnx2x_get_rss_ind_table(&bp->rss_conf_obj, ind_table); in bnx2x_get_rxfh()
3380 indir[i] = ind_table[i] - bp->fp->cl_id; in bnx2x_get_rxfh()
3388 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_rxfh() local
3401 bp->rss_conf_obj.ind_table[i] = indir[i] + bp->fp->cl_id; in bnx2x_set_rxfh()
3404 return bnx2x_config_rss_eth(bp, false); in bnx2x_set_rxfh()
3416 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_channels() local
3418 channels->max_combined = BNX2X_MAX_RSS_COUNT(bp); in bnx2x_get_channels()
3419 channels->combined_count = BNX2X_NUM_ETH_QUEUES(bp); in bnx2x_get_channels()
3430 static void bnx2x_change_num_queues(struct bnx2x *bp, int num_rss) in bnx2x_change_num_queues() argument
3432 bnx2x_disable_msi(bp); in bnx2x_change_num_queues()
3433 bp->num_ethernet_queues = num_rss; in bnx2x_change_num_queues()
3434 bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues; in bnx2x_change_num_queues()
3435 BNX2X_DEV_INFO("set number of queues to %d\n", bp->num_queues); in bnx2x_change_num_queues()
3436 bnx2x_set_int_mode(bp); in bnx2x_change_num_queues()
3448 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_channels() local
3460 (channels->combined_count > BNX2X_MAX_RSS_COUNT(bp))) { in bnx2x_set_channels()
3466 if (channels->combined_count == BNX2X_NUM_ETH_QUEUES(bp)) { in bnx2x_set_channels()
3476 bnx2x_change_num_queues(bp, channels->combined_count); in bnx2x_set_channels()
3479 bnx2x_nic_unload(bp, UNLOAD_NORMAL, true); in bnx2x_set_channels()
3480 bnx2x_change_num_queues(bp, channels->combined_count); in bnx2x_set_channels()
3481 return bnx2x_nic_load(bp, LOAD_NORMAL); in bnx2x_set_channels()
3487 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_ts_info() local
3489 if (bp->flags & PTP_SUPPORTED) { in bnx2x_get_ts_info()
3497 if (bp->ptp_clock) in bnx2x_get_ts_info()
3498 info->phc_index = ptp_clock_index(bp->ptp_clock); in bnx2x_get_ts_info()
3589 void bnx2x_set_ethtool_ops(struct bnx2x *bp, struct net_device *netdev) in bnx2x_set_ethtool_ops() argument
3591 netdev->ethtool_ops = (IS_PF(bp)) ? in bnx2x_set_ethtool_ops()