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_link_ksettings() local
232 if (bp->state == BNX2X_STATE_OPEN) { in bnx2x_get_vf_link_ksettings()
234 &bp->vf_link_vars.link_report_flags)) in bnx2x_get_vf_link_ksettings()
239 cmd->base.speed = bp->vf_link_vars.line_speed; in bnx2x_get_vf_link_ksettings()
264 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_link_ksettings() local
265 int cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_get_link_ksettings()
273 supported = bp->port.supported[cfg_idx] | in bnx2x_get_link_ksettings()
274 (bp->port.supported[cfg_idx ^ 1] & in bnx2x_get_link_ksettings()
276 advertising = bp->port.advertising[cfg_idx]; in bnx2x_get_link_ksettings()
277 media_type = bp->link_params.phy[bnx2x_get_cur_phy_idx(bp)].media_type; in bnx2x_get_link_ksettings()
283 if ((bp->state == BNX2X_STATE_OPEN) && bp->link_vars.link_up && in bnx2x_get_link_ksettings()
284 !(bp->flags & MF_FUNC_DIS)) { in bnx2x_get_link_ksettings()
285 cmd->base.duplex = bp->link_vars.duplex; in bnx2x_get_link_ksettings()
287 if (IS_MF(bp) && !BP_NOMCP(bp)) in bnx2x_get_link_ksettings()
288 cmd->base.speed = bnx2x_get_mf_speed(bp); in bnx2x_get_link_ksettings()
290 cmd->base.speed = bp->link_vars.line_speed; in bnx2x_get_link_ksettings()
296 cmd->base.port = bnx2x_get_port_type(bp); in bnx2x_get_link_ksettings()
298 cmd->base.phy_address = bp->mdio.prtad; in bnx2x_get_link_ksettings()
300 if (bp->link_params.req_line_speed[cfg_idx] == SPEED_AUTO_NEG) in bnx2x_get_link_ksettings()
306 if (bp->link_vars.link_status & LINK_STATUS_AUTO_NEGOTIATE_COMPLETE) { in bnx2x_get_link_ksettings()
307 u32 status = bp->link_vars.link_status; in bnx2x_get_link_ksettings()
371 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_link_ksettings() local
382 if (IS_MF_SD(bp)) in bnx2x_set_link_ksettings()
400 if (IS_MF_SI(bp)) { in bnx2x_set_link_ksettings()
402 u32 line_speed = bp->link_vars.line_speed; in bnx2x_set_link_ksettings()
408 if (bp->common.bc_ver < REQ_BC_VER_4_SET_MF_BW) { in bnx2x_set_link_ksettings()
423 if (bp->state != BNX2X_STATE_OPEN) in bnx2x_set_link_ksettings()
425 bp->pending_max = part; in bnx2x_set_link_ksettings()
427 bnx2x_update_max_mf_config(bp, part); in bnx2x_set_link_ksettings()
432 cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_set_link_ksettings()
433 old_multi_phy_config = bp->link_params.multi_phy_config; in bnx2x_set_link_ksettings()
434 if (cmd->base.port != bnx2x_get_port_type(bp)) { in bnx2x_set_link_ksettings()
437 if (!(bp->port.supported[0] & SUPPORTED_TP || in bnx2x_set_link_ksettings()
438 bp->port.supported[1] & SUPPORTED_TP)) { in bnx2x_set_link_ksettings()
443 bp->link_params.multi_phy_config &= in bnx2x_set_link_ksettings()
445 if (bp->link_params.multi_phy_config & in bnx2x_set_link_ksettings()
447 bp->link_params.multi_phy_config |= in bnx2x_set_link_ksettings()
450 bp->link_params.multi_phy_config |= in bnx2x_set_link_ksettings()
456 if (!(bp->port.supported[0] & SUPPORTED_FIBRE || in bnx2x_set_link_ksettings()
457 bp->port.supported[1] & SUPPORTED_FIBRE)) { in bnx2x_set_link_ksettings()
462 bp->link_params.multi_phy_config &= in bnx2x_set_link_ksettings()
464 if (bp->link_params.multi_phy_config & in bnx2x_set_link_ksettings()
466 bp->link_params.multi_phy_config |= in bnx2x_set_link_ksettings()
469 bp->link_params.multi_phy_config |= in bnx2x_set_link_ksettings()
478 new_multi_phy_config = bp->link_params.multi_phy_config; in bnx2x_set_link_ksettings()
480 cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_set_link_ksettings()
482 bp->link_params.multi_phy_config = old_multi_phy_config; in bnx2x_set_link_ksettings()
486 u32 an_supported_speed = bp->port.supported[cfg_idx]; in bnx2x_set_link_ksettings()
487 if (bp->link_params.phy[EXT_PHY1].type == in bnx2x_set_link_ksettings()
491 if (!(bp->port.supported[cfg_idx] & SUPPORTED_Autoneg)) { in bnx2x_set_link_ksettings()
503 bp->link_params.req_line_speed[cfg_idx] = SPEED_AUTO_NEG; in bnx2x_set_link_ksettings()
504 bp->link_params.req_duplex[cfg_idx] = duplex; in bnx2x_set_link_ksettings()
505 bp->port.advertising[cfg_idx] = (ADVERTISED_Autoneg | in bnx2x_set_link_ksettings()
509 bp->link_params.speed_cap_mask[cfg_idx] = 0; in bnx2x_set_link_ksettings()
511 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_link_ksettings()
515 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_link_ksettings()
519 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_link_ksettings()
523 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_link_ksettings()
527 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_link_ksettings()
532 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_link_ksettings()
538 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_link_ksettings()
542 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_link_ksettings()
550 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_link_ksettings()
560 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_link_ksettings()
574 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_link_ksettings()
584 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_link_ksettings()
603 if (bp->port.supported[cfg_idx] & in bnx2x_set_link_ksettings()
608 } else if (bp->port.supported[cfg_idx] & in bnx2x_set_link_ksettings()
626 if (!(bp->port.supported[cfg_idx] in bnx2x_set_link_ksettings()
643 phy_idx = bnx2x_get_cur_phy_idx(bp); in bnx2x_set_link_ksettings()
644 if ((bp->port.supported[cfg_idx] & in bnx2x_set_link_ksettings()
646 (bp->link_params.phy[phy_idx].media_type != in bnx2x_set_link_ksettings()
650 } else if (bp->port.supported[cfg_idx] & in bnx2x_set_link_ksettings()
667 bp->link_params.req_line_speed[cfg_idx] = speed; in bnx2x_set_link_ksettings()
668 bp->link_params.req_duplex[cfg_idx] = duplex; in bnx2x_set_link_ksettings()
669 bp->port.advertising[cfg_idx] = advertising; in bnx2x_set_link_ksettings()
674 bp->link_params.req_line_speed[cfg_idx], in bnx2x_set_link_ksettings()
675 bp->link_params.req_duplex[cfg_idx], in bnx2x_set_link_ksettings()
676 bp->port.advertising[cfg_idx]); in bnx2x_set_link_ksettings()
679 bp->link_params.multi_phy_config = new_multi_phy_config; in bnx2x_set_link_ksettings()
681 bnx2x_stats_handle(bp, STATS_EVENT_STOP); in bnx2x_set_link_ksettings()
682 bnx2x_force_link_reset(bp); in bnx2x_set_link_ksettings()
683 bnx2x_link_set(bp); in bnx2x_set_link_ksettings()
692 static int __bnx2x_get_preset_regs_len(struct bnx2x *bp, u32 preset) in __bnx2x_get_preset_regs_len() argument
694 if (CHIP_IS_E1(bp)) in __bnx2x_get_preset_regs_len()
696 else if (CHIP_IS_E1H(bp)) in __bnx2x_get_preset_regs_len()
698 else if (CHIP_IS_E2(bp)) in __bnx2x_get_preset_regs_len()
700 else if (CHIP_IS_E3A0(bp)) in __bnx2x_get_preset_regs_len()
702 else if (CHIP_IS_E3B0(bp)) in __bnx2x_get_preset_regs_len()
708 static int __bnx2x_get_regs_len(struct bnx2x *bp) in __bnx2x_get_regs_len() argument
715 regdump_len += __bnx2x_get_preset_regs_len(bp, preset_idx); in __bnx2x_get_regs_len()
722 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_regs_len() local
725 if (IS_VF(bp)) in bnx2x_get_regs_len()
728 regdump_len = __bnx2x_get_regs_len(bp); in bnx2x_get_regs_len()
745 static const u32 *__bnx2x_get_page_addr_ar(struct bnx2x *bp) in __bnx2x_get_page_addr_ar() argument
747 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_addr_ar()
749 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_addr_ar()
755 static u32 __bnx2x_get_page_reg_num(struct bnx2x *bp) in __bnx2x_get_page_reg_num() argument
757 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_reg_num()
759 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_reg_num()
765 static const u32 *__bnx2x_get_page_write_ar(struct bnx2x *bp) in __bnx2x_get_page_write_ar() argument
767 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_write_ar()
769 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_write_ar()
775 static u32 __bnx2x_get_page_write_num(struct bnx2x *bp) in __bnx2x_get_page_write_num() argument
777 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_write_num()
779 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_write_num()
785 static const struct reg_addr *__bnx2x_get_page_read_ar(struct bnx2x *bp) in __bnx2x_get_page_read_ar() argument
787 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_read_ar()
789 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_read_ar()
795 static u32 __bnx2x_get_page_read_num(struct bnx2x *bp) in __bnx2x_get_page_read_num() argument
797 if (CHIP_IS_E2(bp)) in __bnx2x_get_page_read_num()
799 else if (CHIP_IS_E3(bp)) in __bnx2x_get_page_read_num()
805 static bool bnx2x_is_reg_in_chip(struct bnx2x *bp, in bnx2x_is_reg_in_chip() argument
808 if (CHIP_IS_E1(bp)) in bnx2x_is_reg_in_chip()
810 else if (CHIP_IS_E1H(bp)) in bnx2x_is_reg_in_chip()
812 else if (CHIP_IS_E2(bp)) in bnx2x_is_reg_in_chip()
814 else if (CHIP_IS_E3A0(bp)) in bnx2x_is_reg_in_chip()
816 else if (CHIP_IS_E3B0(bp)) in bnx2x_is_reg_in_chip()
822 static bool bnx2x_is_wreg_in_chip(struct bnx2x *bp, in bnx2x_is_wreg_in_chip() argument
825 if (CHIP_IS_E1(bp)) in bnx2x_is_wreg_in_chip()
827 else if (CHIP_IS_E1H(bp)) in bnx2x_is_wreg_in_chip()
829 else if (CHIP_IS_E2(bp)) in bnx2x_is_wreg_in_chip()
831 else if (CHIP_IS_E3A0(bp)) in bnx2x_is_wreg_in_chip()
833 else if (CHIP_IS_E3B0(bp)) in bnx2x_is_wreg_in_chip()
851 static void bnx2x_read_pages_regs(struct bnx2x *bp, u32 *p, u32 preset) in bnx2x_read_pages_regs() argument
856 const u32 *page_addr = __bnx2x_get_page_addr_ar(bp); in bnx2x_read_pages_regs()
858 int num_pages = __bnx2x_get_page_reg_num(bp); in bnx2x_read_pages_regs()
860 const u32 *write_addr = __bnx2x_get_page_write_ar(bp); in bnx2x_read_pages_regs()
862 int write_num = __bnx2x_get_page_write_num(bp); in bnx2x_read_pages_regs()
864 const struct reg_addr *read_addr = __bnx2x_get_page_read_ar(bp); in bnx2x_read_pages_regs()
866 int read_num = __bnx2x_get_page_read_num(bp); in bnx2x_read_pages_regs()
871 REG_WR(bp, write_addr[j], page_addr[i]); in bnx2x_read_pages_regs()
879 *p++ = REG_RD(bp, addr); in bnx2x_read_pages_regs()
887 static int __bnx2x_get_preset_regs(struct bnx2x *bp, u32 *p, u32 preset) in __bnx2x_get_preset_regs() argument
892 if (CHIP_IS_E1(bp)) in __bnx2x_get_preset_regs()
894 else if (CHIP_IS_E1H(bp)) in __bnx2x_get_preset_regs()
896 else if (CHIP_IS_E2(bp)) in __bnx2x_get_preset_regs()
898 else if (CHIP_IS_E3A0(bp)) in __bnx2x_get_preset_regs()
900 else if (CHIP_IS_E3B0(bp)) in __bnx2x_get_preset_regs()
905 if (bnx2x_is_reg_in_chip(bp, &idle_reg_addrs[i]) && in __bnx2x_get_preset_regs()
908 *p++ = REG_RD(bp, idle_reg_addrs[i].addr + j*4); in __bnx2x_get_preset_regs()
914 if (bnx2x_is_reg_in_chip(bp, ®_addrs[i]) && in __bnx2x_get_preset_regs()
917 *p++ = REG_RD(bp, reg_addrs[i].addr + j*4); in __bnx2x_get_preset_regs()
922 if (bnx2x_is_wreg_in_chip(bp, wreg_addr_p) && in __bnx2x_get_preset_regs()
925 *p++ = REG_RD(bp, wreg_addr_p->addr + i*4); in __bnx2x_get_preset_regs()
932 *p++ = REG_RD(bp, addr + j*4); in __bnx2x_get_preset_regs()
938 if (CHIP_IS_E2(bp) || CHIP_IS_E3(bp)) { in __bnx2x_get_preset_regs()
940 bnx2x_read_pages_regs(bp, p, preset); in __bnx2x_get_preset_regs()
946 static void __bnx2x_get_regs(struct bnx2x *bp, u32 *p) in __bnx2x_get_regs() argument
958 __bnx2x_get_preset_regs(bp, p, preset_idx); in __bnx2x_get_regs()
959 p += __bnx2x_get_preset_regs_len(bp, preset_idx); in __bnx2x_get_regs()
967 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_regs() local
973 if (!netif_running(bp->dev)) in bnx2x_get_regs()
981 bnx2x_disable_blocks_parity(bp); in bnx2x_get_regs()
988 if (CHIP_IS_E1(bp)) { in bnx2x_get_regs()
990 } else if (CHIP_IS_E1H(bp)) { in bnx2x_get_regs()
992 } else if (CHIP_IS_E2(bp)) { in bnx2x_get_regs()
994 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_regs()
995 } else if (CHIP_IS_E3A0(bp)) { in bnx2x_get_regs()
997 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_regs()
998 } else if (CHIP_IS_E3B0(bp)) { in bnx2x_get_regs()
1000 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_regs()
1012 __bnx2x_get_regs(bp, p); in bnx2x_get_regs()
1015 bnx2x_clear_blocks_parity(bp); in bnx2x_get_regs()
1016 bnx2x_enable_blocks_parity(bp); in bnx2x_get_regs()
1021 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_preset_regs_len() local
1024 regdump_len = __bnx2x_get_preset_regs_len(bp, preset); in bnx2x_get_preset_regs_len()
1033 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_dump() local
1039 bp->dump_preset_idx = val->flag; in bnx2x_set_dump()
1046 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_dump_flag() local
1049 dump->flag = bp->dump_preset_idx; in bnx2x_get_dump_flag()
1051 dump->len = bnx2x_get_preset_regs_len(dev, bp->dump_preset_idx); in bnx2x_get_dump_flag()
1053 bp->dump_preset_idx, dump->len); in bnx2x_get_dump_flag()
1062 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_dump_data() local
1070 bnx2x_disable_blocks_parity(bp); in bnx2x_get_dump_data()
1073 dump_hdr.preset = bp->dump_preset_idx; in bnx2x_get_dump_data()
1079 if (CHIP_IS_E1(bp)) { in bnx2x_get_dump_data()
1081 } else if (CHIP_IS_E1H(bp)) { in bnx2x_get_dump_data()
1083 } else if (CHIP_IS_E2(bp)) { in bnx2x_get_dump_data()
1085 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_dump_data()
1086 } else if (CHIP_IS_E3A0(bp)) { in bnx2x_get_dump_data()
1088 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_dump_data()
1089 } else if (CHIP_IS_E3B0(bp)) { in bnx2x_get_dump_data()
1091 (BP_PATH(bp) ? DUMP_PATH_1 : DUMP_PATH_0); in bnx2x_get_dump_data()
1098 __bnx2x_get_preset_regs(bp, p, dump_hdr.preset); in bnx2x_get_dump_data()
1101 bnx2x_clear_blocks_parity(bp); in bnx2x_get_dump_data()
1102 bnx2x_enable_blocks_parity(bp); in bnx2x_get_dump_data()
1110 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_drvinfo() local
1117 if (SHMEM2_HAS(bp, extended_dev_info_shared_addr)) { in bnx2x_get_drvinfo()
1118 ext_dev_info_offset = SHMEM2_RD(bp, in bnx2x_get_drvinfo()
1120 mbi = REG_RD(bp, ext_dev_info_offset + in bnx2x_get_drvinfo()
1135 bnx2x_fill_fw_str(bp, version, ETHTOOL_FWVERS_LEN); in bnx2x_get_drvinfo()
1138 strlcpy(info->bus_info, pci_name(bp->pdev), sizeof(info->bus_info)); in bnx2x_get_drvinfo()
1143 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_wol() local
1145 if (bp->flags & NO_WOL_FLAG) { in bnx2x_get_wol()
1150 if (bp->wol) in bnx2x_get_wol()
1160 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_wol() local
1168 if (bp->flags & NO_WOL_FLAG) { in bnx2x_set_wol()
1172 bp->wol = 1; in bnx2x_set_wol()
1174 bp->wol = 0; in bnx2x_set_wol()
1176 if (SHMEM2_HAS(bp, curr_cfg)) in bnx2x_set_wol()
1177 SHMEM2_WR(bp, curr_cfg, CURR_CFG_MET_OS); in bnx2x_set_wol()
1184 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_msglevel() local
1186 return bp->msg_enable; in bnx2x_get_msglevel()
1191 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_msglevel() local
1195 if (IS_PF(bp) && (level & BNX2X_MSG_MCP)) in bnx2x_set_msglevel()
1196 bnx2x_fw_dump_lvl(bp, KERN_INFO); in bnx2x_set_msglevel()
1197 bp->msg_enable = level; in bnx2x_set_msglevel()
1203 struct bnx2x *bp = netdev_priv(dev); in bnx2x_nway_reset() local
1205 if (!bp->port.pmf) in bnx2x_nway_reset()
1209 bnx2x_stats_handle(bp, STATS_EVENT_STOP); in bnx2x_nway_reset()
1210 bnx2x_force_link_reset(bp); in bnx2x_nway_reset()
1211 bnx2x_link_set(bp); in bnx2x_nway_reset()
1219 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_link() local
1221 if (bp->flags & MF_FUNC_DIS || (bp->state != BNX2X_STATE_OPEN)) in bnx2x_get_link()
1224 if (IS_VF(bp)) in bnx2x_get_link()
1226 &bp->vf_link_vars.link_report_flags); in bnx2x_get_link()
1228 return bp->link_vars.link_up; in bnx2x_get_link()
1233 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_eeprom_len() local
1235 return bp->common.flash_size; in bnx2x_get_eeprom_len()
1251 static int bnx2x_acquire_nvram_lock(struct bnx2x *bp) in bnx2x_acquire_nvram_lock() argument
1253 int port = BP_PORT(bp); in bnx2x_acquire_nvram_lock()
1258 bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_NVRAM); in bnx2x_acquire_nvram_lock()
1262 if (CHIP_REV_IS_SLOW(bp)) in bnx2x_acquire_nvram_lock()
1266 REG_WR(bp, MCP_REG_MCPR_NVM_SW_ARB, in bnx2x_acquire_nvram_lock()
1270 val = REG_RD(bp, MCP_REG_MCPR_NVM_SW_ARB); in bnx2x_acquire_nvram_lock()
1280 bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_NVRAM); in bnx2x_acquire_nvram_lock()
1287 static int bnx2x_release_nvram_lock(struct bnx2x *bp) in bnx2x_release_nvram_lock() argument
1289 int port = BP_PORT(bp); in bnx2x_release_nvram_lock()
1295 if (CHIP_REV_IS_SLOW(bp)) in bnx2x_release_nvram_lock()
1299 REG_WR(bp, MCP_REG_MCPR_NVM_SW_ARB, in bnx2x_release_nvram_lock()
1303 val = REG_RD(bp, MCP_REG_MCPR_NVM_SW_ARB); in bnx2x_release_nvram_lock()
1317 bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_NVRAM); in bnx2x_release_nvram_lock()
1321 static void bnx2x_enable_nvram_access(struct bnx2x *bp) in bnx2x_enable_nvram_access() argument
1325 val = REG_RD(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE); in bnx2x_enable_nvram_access()
1328 REG_WR(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE, in bnx2x_enable_nvram_access()
1333 static void bnx2x_disable_nvram_access(struct bnx2x *bp) in bnx2x_disable_nvram_access() argument
1337 val = REG_RD(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE); in bnx2x_disable_nvram_access()
1340 REG_WR(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE, in bnx2x_disable_nvram_access()
1345 static int bnx2x_nvram_read_dword(struct bnx2x *bp, u32 offset, __be32 *ret_val, in bnx2x_nvram_read_dword() argument
1355 REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, MCPR_NVM_COMMAND_DONE); in bnx2x_nvram_read_dword()
1358 REG_WR(bp, MCP_REG_MCPR_NVM_ADDR, in bnx2x_nvram_read_dword()
1362 REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, cmd_flags); in bnx2x_nvram_read_dword()
1366 if (CHIP_REV_IS_SLOW(bp)) in bnx2x_nvram_read_dword()
1374 val = REG_RD(bp, MCP_REG_MCPR_NVM_COMMAND); in bnx2x_nvram_read_dword()
1377 val = REG_RD(bp, MCP_REG_MCPR_NVM_READ); in bnx2x_nvram_read_dword()
1393 int bnx2x_nvram_read(struct bnx2x *bp, u32 offset, u8 *ret_buf, in bnx2x_nvram_read() argument
1407 if (offset + buf_size > bp->common.flash_size) { in bnx2x_nvram_read()
1410 offset, buf_size, bp->common.flash_size); in bnx2x_nvram_read()
1415 rc = bnx2x_acquire_nvram_lock(bp); in bnx2x_nvram_read()
1420 bnx2x_enable_nvram_access(bp); in bnx2x_nvram_read()
1425 rc = bnx2x_nvram_read_dword(bp, offset, &val, cmd_flags); in bnx2x_nvram_read()
1437 rc = bnx2x_nvram_read_dword(bp, offset, &val, cmd_flags); in bnx2x_nvram_read()
1442 bnx2x_disable_nvram_access(bp); in bnx2x_nvram_read()
1443 bnx2x_release_nvram_lock(bp); in bnx2x_nvram_read()
1448 static int bnx2x_nvram_read32(struct bnx2x *bp, u32 offset, u32 *buf, in bnx2x_nvram_read32() argument
1453 rc = bnx2x_nvram_read(bp, offset, (u8 *)buf, buf_size); in bnx2x_nvram_read32()
1465 static bool bnx2x_is_nvm_accessible(struct bnx2x *bp) in bnx2x_is_nvm_accessible() argument
1469 struct net_device *dev = pci_get_drvdata(bp->pdev); in bnx2x_is_nvm_accessible()
1471 if (bp->pdev->pm_cap) in bnx2x_is_nvm_accessible()
1472 rc = pci_read_config_word(bp->pdev, in bnx2x_is_nvm_accessible()
1473 bp->pdev->pm_cap + PCI_PM_CTRL, &pm); in bnx2x_is_nvm_accessible()
1485 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_eeprom() local
1487 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_get_eeprom()
1500 return bnx2x_nvram_read(bp, eeprom->offset, eebuf, eeprom->len); in bnx2x_get_eeprom()
1507 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_module_eeprom() local
1512 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_get_module_eeprom()
1518 phy_idx = bnx2x_get_cur_phy_idx(bp); in bnx2x_get_module_eeprom()
1527 bnx2x_acquire_phy_lock(bp); in bnx2x_get_module_eeprom()
1528 rc = bnx2x_read_sfp_module_eeprom(&bp->link_params.phy[phy_idx], in bnx2x_get_module_eeprom()
1529 &bp->link_params, in bnx2x_get_module_eeprom()
1534 bnx2x_release_phy_lock(bp); in bnx2x_get_module_eeprom()
1552 bnx2x_acquire_phy_lock(bp); in bnx2x_get_module_eeprom()
1553 rc = bnx2x_read_sfp_module_eeprom(&bp->link_params.phy[phy_idx], in bnx2x_get_module_eeprom()
1554 &bp->link_params, in bnx2x_get_module_eeprom()
1559 bnx2x_release_phy_lock(bp); in bnx2x_get_module_eeprom()
1571 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_module_info() local
1575 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_get_module_info()
1580 phy_idx = bnx2x_get_cur_phy_idx(bp); in bnx2x_get_module_info()
1581 bnx2x_acquire_phy_lock(bp); in bnx2x_get_module_info()
1582 rc = bnx2x_read_sfp_module_eeprom(&bp->link_params.phy[phy_idx], in bnx2x_get_module_info()
1583 &bp->link_params, in bnx2x_get_module_info()
1588 bnx2x_release_phy_lock(bp); in bnx2x_get_module_info()
1594 bnx2x_acquire_phy_lock(bp); in bnx2x_get_module_info()
1595 rc = bnx2x_read_sfp_module_eeprom(&bp->link_params.phy[phy_idx], in bnx2x_get_module_info()
1596 &bp->link_params, in bnx2x_get_module_info()
1601 bnx2x_release_phy_lock(bp); in bnx2x_get_module_info()
1619 static int bnx2x_nvram_write_dword(struct bnx2x *bp, u32 offset, u32 val, in bnx2x_nvram_write_dword() argument
1628 REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, MCPR_NVM_COMMAND_DONE); in bnx2x_nvram_write_dword()
1631 REG_WR(bp, MCP_REG_MCPR_NVM_WRITE, val); in bnx2x_nvram_write_dword()
1634 REG_WR(bp, MCP_REG_MCPR_NVM_ADDR, in bnx2x_nvram_write_dword()
1638 REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, cmd_flags); in bnx2x_nvram_write_dword()
1642 if (CHIP_REV_IS_SLOW(bp)) in bnx2x_nvram_write_dword()
1649 val = REG_RD(bp, MCP_REG_MCPR_NVM_COMMAND); in bnx2x_nvram_write_dword()
1664 static int bnx2x_nvram_write1(struct bnx2x *bp, u32 offset, u8 *data_buf, in bnx2x_nvram_write1() argument
1671 if (offset + buf_size > bp->common.flash_size) { in bnx2x_nvram_write1()
1674 offset, buf_size, bp->common.flash_size); in bnx2x_nvram_write1()
1679 rc = bnx2x_acquire_nvram_lock(bp); in bnx2x_nvram_write1()
1684 bnx2x_enable_nvram_access(bp); in bnx2x_nvram_write1()
1688 rc = bnx2x_nvram_read_dword(bp, align_offset, &val_be, cmd_flags); in bnx2x_nvram_write1()
1701 rc = bnx2x_nvram_write_dword(bp, align_offset, val, in bnx2x_nvram_write1()
1706 bnx2x_disable_nvram_access(bp); in bnx2x_nvram_write1()
1707 bnx2x_release_nvram_lock(bp); in bnx2x_nvram_write1()
1712 static int bnx2x_nvram_write(struct bnx2x *bp, u32 offset, u8 *data_buf, in bnx2x_nvram_write() argument
1721 return bnx2x_nvram_write1(bp, offset, data_buf, buf_size); in bnx2x_nvram_write()
1730 if (offset + buf_size > bp->common.flash_size) { in bnx2x_nvram_write()
1733 offset, buf_size, bp->common.flash_size); in bnx2x_nvram_write()
1738 rc = bnx2x_acquire_nvram_lock(bp); in bnx2x_nvram_write()
1743 bnx2x_enable_nvram_access(bp); in bnx2x_nvram_write()
1763 rc = bnx2x_nvram_write_dword(bp, offset, val, cmd_flags); in bnx2x_nvram_write()
1778 bnx2x_release_nvram_lock(bp); in bnx2x_nvram_write()
1780 rc = bnx2x_acquire_nvram_lock(bp); in bnx2x_nvram_write()
1789 bnx2x_disable_nvram_access(bp); in bnx2x_nvram_write()
1790 bnx2x_release_nvram_lock(bp); in bnx2x_nvram_write()
1798 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_eeprom() local
1799 int port = BP_PORT(bp); in bnx2x_set_eeprom()
1803 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_set_eeprom()
1818 !bp->port.pmf) { in bnx2x_set_eeprom()
1825 SHMEM_RD(bp, in bnx2x_set_eeprom()
1830 bnx2x_stats_handle(bp, STATS_EVENT_STOP); in bnx2x_set_eeprom()
1832 bnx2x_acquire_phy_lock(bp); in bnx2x_set_eeprom()
1833 rc |= bnx2x_link_reset(&bp->link_params, in bnx2x_set_eeprom()
1834 &bp->link_vars, 0); in bnx2x_set_eeprom()
1837 bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_0, in bnx2x_set_eeprom()
1839 bnx2x_release_phy_lock(bp); in bnx2x_set_eeprom()
1840 bnx2x_link_report(bp); in bnx2x_set_eeprom()
1844 if (bp->state == BNX2X_STATE_OPEN) { in bnx2x_set_eeprom()
1845 bnx2x_acquire_phy_lock(bp); in bnx2x_set_eeprom()
1846 rc |= bnx2x_link_reset(&bp->link_params, in bnx2x_set_eeprom()
1847 &bp->link_vars, 1); in bnx2x_set_eeprom()
1849 rc |= bnx2x_phy_init(&bp->link_params, in bnx2x_set_eeprom()
1850 &bp->link_vars); in bnx2x_set_eeprom()
1851 bnx2x_release_phy_lock(bp); in bnx2x_set_eeprom()
1852 bnx2x_calc_fc_adv(bp); in bnx2x_set_eeprom()
1860 bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_0, in bnx2x_set_eeprom()
1863 bnx2x_acquire_phy_lock(bp); in bnx2x_set_eeprom()
1865 bnx2x_sfx7101_sp_sw_reset(bp, in bnx2x_set_eeprom()
1866 &bp->link_params.phy[EXT_PHY1]); in bnx2x_set_eeprom()
1870 bnx2x_ext_phy_hw_reset(bp, port); in bnx2x_set_eeprom()
1872 bnx2x_release_phy_lock(bp); in bnx2x_set_eeprom()
1875 rc = bnx2x_nvram_write(bp, eeprom->offset, eebuf, eeprom->len); in bnx2x_set_eeprom()
1885 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_coalesce() local
1889 coal->rx_coalesce_usecs = bp->rx_ticks; in bnx2x_get_coalesce()
1890 coal->tx_coalesce_usecs = bp->tx_ticks; in bnx2x_get_coalesce()
1900 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_coalesce() local
1902 bp->rx_ticks = (u16)coal->rx_coalesce_usecs; in bnx2x_set_coalesce()
1903 if (bp->rx_ticks > BNX2X_MAX_COALESCE_TOUT) in bnx2x_set_coalesce()
1904 bp->rx_ticks = BNX2X_MAX_COALESCE_TOUT; in bnx2x_set_coalesce()
1906 bp->tx_ticks = (u16)coal->tx_coalesce_usecs; in bnx2x_set_coalesce()
1907 if (bp->tx_ticks > BNX2X_MAX_COALESCE_TOUT) in bnx2x_set_coalesce()
1908 bp->tx_ticks = BNX2X_MAX_COALESCE_TOUT; in bnx2x_set_coalesce()
1911 bnx2x_update_coalesce(bp); in bnx2x_set_coalesce()
1919 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_ringparam() local
1929 if (bp->rx_ring_size) in bnx2x_get_ringparam()
1930 ering->rx_pending = bp->rx_ring_size; in bnx2x_get_ringparam()
1931 else if (BNX2X_NUM_RX_QUEUES(bp)) in bnx2x_get_ringparam()
1932 ering->rx_pending = MAX_RX_AVAIL / BNX2X_NUM_RX_QUEUES(bp); in bnx2x_get_ringparam()
1936 ering->tx_max_pending = IS_MF_FCOE_AFEX(bp) ? 0 : MAX_TX_AVAIL; in bnx2x_get_ringparam()
1937 ering->tx_pending = bp->tx_ring_size; in bnx2x_get_ringparam()
1943 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_ringparam() local
1949 if (pci_num_vf(bp->pdev)) { in bnx2x_set_ringparam()
1955 if (bp->recovery_state != BNX2X_RECOVERY_DONE) { in bnx2x_set_ringparam()
1962 (ering->rx_pending < (bp->disable_tpa ? MIN_RX_SIZE_NONTPA : in bnx2x_set_ringparam()
1964 (ering->tx_pending > (IS_MF_STORAGE_ONLY(bp) ? 0 : MAX_TX_AVAIL)) || in bnx2x_set_ringparam()
1970 bp->rx_ring_size = ering->rx_pending; in bnx2x_set_ringparam()
1971 bp->tx_ring_size = ering->tx_pending; in bnx2x_set_ringparam()
1979 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_pauseparam() local
1980 int cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_get_pauseparam()
1983 epause->autoneg = (bp->link_params.req_flow_ctrl[cfg_idx] == in bnx2x_get_pauseparam()
1987 cfg_reg = bp->link_params.req_flow_ctrl[cfg_idx]; in bnx2x_get_pauseparam()
1989 cfg_reg = bp->link_params.req_fc_auto_adv; in bnx2x_get_pauseparam()
2004 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_pauseparam() local
2005 u32 cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_set_pauseparam()
2006 if (IS_MF(bp)) in bnx2x_set_pauseparam()
2013 bp->link_params.req_flow_ctrl[cfg_idx] = BNX2X_FLOW_CTRL_AUTO; in bnx2x_set_pauseparam()
2016 bp->link_params.req_flow_ctrl[cfg_idx] |= BNX2X_FLOW_CTRL_RX; in bnx2x_set_pauseparam()
2019 bp->link_params.req_flow_ctrl[cfg_idx] |= BNX2X_FLOW_CTRL_TX; in bnx2x_set_pauseparam()
2021 if (bp->link_params.req_flow_ctrl[cfg_idx] == BNX2X_FLOW_CTRL_AUTO) in bnx2x_set_pauseparam()
2022 bp->link_params.req_flow_ctrl[cfg_idx] = BNX2X_FLOW_CTRL_NONE; in bnx2x_set_pauseparam()
2025 if (!(bp->port.supported[cfg_idx] & SUPPORTED_Autoneg)) { in bnx2x_set_pauseparam()
2030 if (bp->link_params.req_line_speed[cfg_idx] == SPEED_AUTO_NEG) { in bnx2x_set_pauseparam()
2031 bp->link_params.req_flow_ctrl[cfg_idx] = in bnx2x_set_pauseparam()
2034 bp->link_params.req_fc_auto_adv = 0; in bnx2x_set_pauseparam()
2036 bp->link_params.req_fc_auto_adv |= BNX2X_FLOW_CTRL_RX; in bnx2x_set_pauseparam()
2039 bp->link_params.req_fc_auto_adv |= BNX2X_FLOW_CTRL_TX; in bnx2x_set_pauseparam()
2041 if (!bp->link_params.req_fc_auto_adv) in bnx2x_set_pauseparam()
2042 bp->link_params.req_fc_auto_adv |= BNX2X_FLOW_CTRL_NONE; in bnx2x_set_pauseparam()
2046 "req_flow_ctrl 0x%x\n", bp->link_params.req_flow_ctrl[cfg_idx]); in bnx2x_set_pauseparam()
2049 bnx2x_stats_handle(bp, STATS_EVENT_STOP); in bnx2x_set_pauseparam()
2050 bnx2x_force_link_reset(bp); in bnx2x_set_pauseparam()
2051 bnx2x_link_set(bp); in bnx2x_set_pauseparam()
2109 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_eee() local
2112 if (!SHMEM2_HAS(bp, eee_status[BP_PORT(bp)])) { in bnx2x_get_eee()
2117 eee_cfg = bp->link_vars.eee_status; in bnx2x_get_eee()
2142 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_eee() local
2146 if (IS_MF(bp)) in bnx2x_set_eee()
2149 if (!SHMEM2_HAS(bp, eee_status[BP_PORT(bp)])) { in bnx2x_set_eee()
2154 eee_cfg = bp->link_vars.eee_status; in bnx2x_set_eee()
2185 bp->link_params.eee_mode |= EEE_MODE_ADV_LPI; in bnx2x_set_eee()
2187 bp->link_params.eee_mode &= ~EEE_MODE_ADV_LPI; in bnx2x_set_eee()
2190 bp->link_params.eee_mode |= EEE_MODE_ENABLE_LPI; in bnx2x_set_eee()
2192 bp->link_params.eee_mode &= ~EEE_MODE_ENABLE_LPI; in bnx2x_set_eee()
2194 bp->link_params.eee_mode &= ~EEE_MODE_TIMER_MASK; in bnx2x_set_eee()
2195 bp->link_params.eee_mode |= (edata->tx_lpi_timer & in bnx2x_set_eee()
2202 bnx2x_stats_handle(bp, STATS_EVENT_STOP); in bnx2x_set_eee()
2203 bnx2x_force_link_reset(bp); in bnx2x_set_eee()
2204 bnx2x_link_set(bp); in bnx2x_set_eee()
2228 static int bnx2x_test_registers(struct bnx2x *bp) in bnx2x_test_registers() argument
2232 int port = BP_PORT(bp); in bnx2x_test_registers()
2319 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_test_registers()
2325 if (CHIP_IS_E1(bp)) in bnx2x_test_registers()
2327 else if (CHIP_IS_E1H(bp)) in bnx2x_test_registers()
2329 else if (CHIP_IS_E2(bp)) in bnx2x_test_registers()
2331 else if (CHIP_IS_E3B0(bp)) in bnx2x_test_registers()
2358 save_val = REG_RD(bp, offset); in bnx2x_test_registers()
2360 REG_WR(bp, offset, wr_val & mask); in bnx2x_test_registers()
2362 val = REG_RD(bp, offset); in bnx2x_test_registers()
2365 REG_WR(bp, offset, save_val); in bnx2x_test_registers()
2383 static int bnx2x_test_memory(struct bnx2x *bp) in bnx2x_test_memory() argument
2423 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_test_memory()
2429 if (CHIP_IS_E1(bp)) in bnx2x_test_memory()
2431 else if (CHIP_IS_E1H(bp)) in bnx2x_test_memory()
2433 else if (CHIP_IS_E2(bp)) in bnx2x_test_memory()
2440 val = REG_RD(bp, prty_tbl[i].offset); in bnx2x_test_memory()
2451 REG_RD(bp, mem_tbl[i].offset + j*4); in bnx2x_test_memory()
2455 val = REG_RD(bp, prty_tbl[i].offset); in bnx2x_test_memory()
2469 static void bnx2x_wait_for_link(struct bnx2x *bp, u8 link_up, u8 is_serdes) in bnx2x_wait_for_link() argument
2474 while (bnx2x_link_test(bp, is_serdes) && cnt--) in bnx2x_wait_for_link()
2477 if (cnt <= 0 && bnx2x_link_test(bp, is_serdes)) in bnx2x_wait_for_link()
2481 while (!bp->link_vars.link_up && cnt--) in bnx2x_wait_for_link()
2484 if (cnt <= 0 && !bp->link_vars.link_up) in bnx2x_wait_for_link()
2490 static int bnx2x_run_loopback(struct bnx2x *bp, int loopback_mode) in bnx2x_run_loopback() argument
2495 struct bnx2x_fastpath *fp_rx = &bp->fp[0]; in bnx2x_run_loopback()
2496 struct bnx2x_fastpath *fp_tx = &bp->fp[0]; in bnx2x_run_loopback()
2510 struct netdev_queue *txq = netdev_get_tx_queue(bp->dev, in bnx2x_run_loopback()
2516 if (bp->link_params.loopback_mode != LOOPBACK_XGXS) { in bnx2x_run_loopback()
2522 if (CHIP_IS_E3(bp)) { in bnx2x_run_loopback()
2523 int cfg_idx = bnx2x_get_link_cfg_idx(bp); in bnx2x_run_loopback()
2524 if (bp->port.supported[cfg_idx] & in bnx2x_run_loopback()
2528 bp->link_params.loopback_mode = LOOPBACK_XMAC; in bnx2x_run_loopback()
2530 bp->link_params.loopback_mode = LOOPBACK_UMAC; in bnx2x_run_loopback()
2532 bp->link_params.loopback_mode = LOOPBACK_BMAC; in bnx2x_run_loopback()
2534 bnx2x_phy_init(&bp->link_params, &bp->link_vars); in bnx2x_run_loopback()
2537 if (bp->link_params.loopback_mode != LOOPBACK_EXT) { in bnx2x_run_loopback()
2549 pkt_size = (((bp->dev->mtu < ETH_MAX_PACKET_SIZE) ? in bnx2x_run_loopback()
2550 bp->dev->mtu : ETH_MAX_PACKET_SIZE) + ETH_HLEN); in bnx2x_run_loopback()
2551 skb = netdev_alloc_skb(bp->dev, fp_rx->rx_buf_size); in bnx2x_run_loopback()
2558 memcpy(packet, bp->dev->dev_addr, ETH_ALEN); in bnx2x_run_loopback()
2563 mapping = dma_map_single(&bp->pdev->dev, skb->data, in bnx2x_run_loopback()
2565 if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) { in bnx2x_run_loopback()
2603 if (CHIP_IS_E1x(bp)) { in bnx2x_run_loopback()
2625 DOORBELL_RELAXED(bp, txdata->cid, txdata->tx_db.raw); in bnx2x_run_loopback()
2642 if (bp->common.int_block == INT_BLOCK_IGU) { in bnx2x_run_loopback()
2648 bnx2x_tx_int(bp, txdata); in bnx2x_run_loopback()
2667 dma_sync_single_for_cpu(&bp->pdev->dev, in bnx2x_run_loopback()
2685 bnx2x_update_rx_prod(bp, fp_rx, fp_rx->rx_bd_prod, fp_rx->rx_comp_prod, in bnx2x_run_loopback()
2689 bp->link_params.loopback_mode = LOOPBACK_NONE; in bnx2x_run_loopback()
2694 static int bnx2x_test_loopback(struct bnx2x *bp) in bnx2x_test_loopback() argument
2698 if (BP_NOMCP(bp)) in bnx2x_test_loopback()
2701 if (!netif_running(bp->dev)) in bnx2x_test_loopback()
2704 bnx2x_netif_stop(bp, 1); in bnx2x_test_loopback()
2705 bnx2x_acquire_phy_lock(bp); in bnx2x_test_loopback()
2707 res = bnx2x_run_loopback(bp, BNX2X_PHY_LOOPBACK); in bnx2x_test_loopback()
2713 res = bnx2x_run_loopback(bp, BNX2X_MAC_LOOPBACK); in bnx2x_test_loopback()
2719 bnx2x_release_phy_lock(bp); in bnx2x_test_loopback()
2720 bnx2x_netif_start(bp); in bnx2x_test_loopback()
2725 static int bnx2x_test_ext_loopback(struct bnx2x *bp) in bnx2x_test_ext_loopback() argument
2729 (bp->link_vars.link_status & LINK_STATUS_SERDES_LINK) > 0; in bnx2x_test_ext_loopback()
2731 if (BP_NOMCP(bp)) in bnx2x_test_ext_loopback()
2734 if (!netif_running(bp->dev)) in bnx2x_test_ext_loopback()
2737 bnx2x_nic_unload(bp, UNLOAD_NORMAL, false); in bnx2x_test_ext_loopback()
2738 rc = bnx2x_nic_load(bp, LOAD_LOOPBACK_EXT); in bnx2x_test_ext_loopback()
2744 bnx2x_wait_for_link(bp, 1, is_serdes); in bnx2x_test_ext_loopback()
2746 bnx2x_netif_stop(bp, 1); in bnx2x_test_ext_loopback()
2748 rc = bnx2x_run_loopback(bp, BNX2X_EXT_LOOPBACK); in bnx2x_test_ext_loopback()
2752 bnx2x_netif_start(bp); in bnx2x_test_ext_loopback()
2779 static int bnx2x_nvram_crc(struct bnx2x *bp, in bnx2x_nvram_crc() argument
2793 rc = bnx2x_nvram_read(bp, offset + done, buff, count); in bnx2x_nvram_crc()
2808 static int bnx2x_test_nvram_dir(struct bnx2x *bp, in bnx2x_test_nvram_dir() argument
2820 rc = bnx2x_nvram_crc(bp, entry->nvm_start_addr, size, buff); in bnx2x_test_nvram_dir()
2828 static int bnx2x_test_dir_entry(struct bnx2x *bp, u32 addr, u8 *buff) in bnx2x_test_dir_entry() argument
2833 rc = bnx2x_nvram_read32(bp, addr, (u32 *)&entry, sizeof(entry)); in bnx2x_test_dir_entry()
2837 return bnx2x_test_nvram_dir(bp, &entry, buff); in bnx2x_test_dir_entry()
2840 static int bnx2x_test_nvram_ext_dirs(struct bnx2x *bp, u8 *buff) in bnx2x_test_nvram_ext_dirs() argument
2846 rc = bnx2x_nvram_read32(bp, in bnx2x_test_nvram_ext_dirs()
2856 rc = bnx2x_nvram_read32(bp, entry.nvm_start_addr, in bnx2x_test_nvram_ext_dirs()
2864 rc = bnx2x_test_dir_entry(bp, dir_offset + in bnx2x_test_nvram_ext_dirs()
2874 static int bnx2x_test_nvram_dirs(struct bnx2x *bp, u8 *buff) in bnx2x_test_nvram_dirs() argument
2882 rc = bnx2x_test_dir_entry(bp, dir_offset + in bnx2x_test_nvram_dirs()
2889 return bnx2x_test_nvram_ext_dirs(bp, buff); in bnx2x_test_nvram_dirs()
2897 static int bnx2x_test_nvram_tbl(struct bnx2x *bp, in bnx2x_test_nvram_tbl() argument
2903 int rc = bnx2x_nvram_crc(bp, nvram_tbl[i].offset, in bnx2x_test_nvram_tbl()
2916 static int bnx2x_test_nvram(struct bnx2x *bp) in bnx2x_test_nvram() argument
2937 if (BP_NOMCP(bp)) in bnx2x_test_nvram()
2947 rc = bnx2x_nvram_read32(bp, 0, &magic, sizeof(magic)); in bnx2x_test_nvram()
2962 rc = bnx2x_test_nvram_tbl(bp, nvram_tbl, buf); in bnx2x_test_nvram()
2966 if (!CHIP_IS_E1x(bp) && !CHIP_IS_57811xx(bp)) { in bnx2x_test_nvram()
2967 u32 hide = SHMEM_RD(bp, dev_info.shared_hw_config.config2) & in bnx2x_test_nvram()
2973 rc = bnx2x_test_nvram_tbl(bp, nvram_tbl2, buf); in bnx2x_test_nvram()
2979 rc = bnx2x_test_nvram_dirs(bp, buf); in bnx2x_test_nvram()
2987 static int bnx2x_test_intr(struct bnx2x *bp) in bnx2x_test_intr() argument
2991 if (!netif_running(bp->dev)) { in bnx2x_test_intr()
2997 params.q_obj = &bp->sp_objs->q_obj; in bnx2x_test_intr()
3002 return bnx2x_queue_state_change(bp, ¶ms); in bnx2x_test_intr()
3008 struct bnx2x *bp = netdev_priv(dev); in bnx2x_self_test() local
3012 if (pci_num_vf(bp->pdev)) { in bnx2x_self_test()
3018 if (bp->recovery_state != BNX2X_RECOVERY_DONE) { in bnx2x_self_test()
3019 netdev_err(bp->dev, in bnx2x_self_test()
3030 memset(buf, 0, sizeof(u64) * BNX2X_NUM_TESTS(bp)); in bnx2x_self_test()
3032 if (bnx2x_test_nvram(bp) != 0) { in bnx2x_self_test()
3033 if (!IS_MF(bp)) in bnx2x_self_test()
3045 is_serdes = (bp->link_vars.link_status & LINK_STATUS_SERDES_LINK) > 0; in bnx2x_self_test()
3046 link_up = bp->link_vars.link_up; in bnx2x_self_test()
3048 if ((etest->flags & ETH_TEST_FL_OFFLINE) && !IS_MF(bp)) { in bnx2x_self_test()
3049 int port = BP_PORT(bp); in bnx2x_self_test()
3053 val = REG_RD(bp, NIG_REG_EGRESS_UMP0_IN_EN + port*4); in bnx2x_self_test()
3055 REG_WR(bp, NIG_REG_EGRESS_UMP0_IN_EN + port*4, 0); in bnx2x_self_test()
3057 bnx2x_nic_unload(bp, UNLOAD_NORMAL, false); in bnx2x_self_test()
3058 rc = bnx2x_nic_load(bp, LOAD_DIAG); in bnx2x_self_test()
3067 bnx2x_wait_for_link(bp, 1, is_serdes); in bnx2x_self_test()
3069 if (bnx2x_test_registers(bp) != 0) { in bnx2x_self_test()
3073 if (bnx2x_test_memory(bp) != 0) { in bnx2x_self_test()
3078 buf[2] = bnx2x_test_loopback(bp); /* internal LB */ in bnx2x_self_test()
3083 buf[3] = bnx2x_test_ext_loopback(bp); /* external LB */ in bnx2x_self_test()
3089 bnx2x_nic_unload(bp, UNLOAD_NORMAL, false); in bnx2x_self_test()
3092 REG_WR(bp, NIG_REG_EGRESS_UMP0_IN_EN + port*4, val); in bnx2x_self_test()
3093 rc = bnx2x_nic_load(bp, LOAD_NORMAL); in bnx2x_self_test()
3101 bnx2x_wait_for_link(bp, link_up, is_serdes); in bnx2x_self_test()
3104 if (bnx2x_test_intr(bp) != 0) { in bnx2x_self_test()
3105 if (!IS_MF(bp)) in bnx2x_self_test()
3114 while (bnx2x_link_test(bp, is_serdes) && --cnt) in bnx2x_self_test()
3119 if (!IS_MF(bp)) in bnx2x_self_test()
3128 #define HIDE_PORT_STAT(bp) IS_VF(bp) argument
3133 static int bnx2x_num_stat_queues(struct bnx2x *bp) in bnx2x_num_stat_queues() argument
3135 return BNX2X_NUM_ETH_QUEUES(bp); in bnx2x_num_stat_queues()
3140 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_sset_count() local
3145 if (is_multi(bp)) { in bnx2x_get_sset_count()
3146 num_strings = bnx2x_num_stat_queues(bp) * in bnx2x_get_sset_count()
3150 if (HIDE_PORT_STAT(bp)) { in bnx2x_get_sset_count()
3160 return BNX2X_NUM_TESTS(bp); in bnx2x_get_sset_count()
3172 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_private_flags() local
3175 flags |= (!(bp->flags & NO_ISCSI_FLAG) ? 1 : 0) << BNX2X_PRI_FLAG_ISCSI; in bnx2x_get_private_flags()
3176 flags |= (!(bp->flags & NO_FCOE_FLAG) ? 1 : 0) << BNX2X_PRI_FLAG_FCOE; in bnx2x_get_private_flags()
3177 flags |= (!!IS_MF_STORAGE_ONLY(bp)) << BNX2X_PRI_FLAG_STORAGE; in bnx2x_get_private_flags()
3184 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_strings() local
3191 if (is_multi(bp)) { in bnx2x_get_strings()
3192 for_each_eth_queue(bp, i) { in bnx2x_get_strings()
3206 if (HIDE_PORT_STAT(bp) && IS_PORT_STAT(i)) in bnx2x_get_strings()
3217 if (!IS_MF(bp)) in bnx2x_get_strings()
3222 ETH_GSTRING_LEN * BNX2X_NUM_TESTS(bp)); in bnx2x_get_strings()
3235 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_ethtool_stats() local
3239 if (is_multi(bp)) { in bnx2x_get_ethtool_stats()
3240 for_each_eth_queue(bp, i) { in bnx2x_get_ethtool_stats()
3241 hw_stats = (u32 *)&bp->fp_stats[i].eth_q_stats; in bnx2x_get_ethtool_stats()
3262 hw_stats = (u32 *)&bp->eth_stats; in bnx2x_get_ethtool_stats()
3264 if (HIDE_PORT_STAT(bp) && IS_PORT_STAT(i)) in bnx2x_get_ethtool_stats()
3288 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_phys_id() local
3290 if (!bnx2x_is_nvm_accessible(bp)) { in bnx2x_set_phys_id()
3301 bnx2x_acquire_phy_lock(bp); in bnx2x_set_phys_id()
3302 bnx2x_set_led(&bp->link_params, &bp->link_vars, in bnx2x_set_phys_id()
3304 bnx2x_release_phy_lock(bp); in bnx2x_set_phys_id()
3308 bnx2x_acquire_phy_lock(bp); in bnx2x_set_phys_id()
3309 bnx2x_set_led(&bp->link_params, &bp->link_vars, in bnx2x_set_phys_id()
3311 bnx2x_release_phy_lock(bp); in bnx2x_set_phys_id()
3315 bnx2x_acquire_phy_lock(bp); in bnx2x_set_phys_id()
3316 bnx2x_set_led(&bp->link_params, &bp->link_vars, in bnx2x_set_phys_id()
3318 bp->link_vars.line_speed); in bnx2x_set_phys_id()
3319 bnx2x_release_phy_lock(bp); in bnx2x_set_phys_id()
3325 static int bnx2x_get_rss_flags(struct bnx2x *bp, struct ethtool_rxnfc *info) in bnx2x_get_rss_flags() argument
3334 if (bp->rss_conf_obj.udp_rss_v4) in bnx2x_get_rss_flags()
3341 if (bp->rss_conf_obj.udp_rss_v6) in bnx2x_get_rss_flags()
3362 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_rxnfc() local
3366 info->data = BNX2X_NUM_ETH_QUEUES(bp); in bnx2x_get_rxnfc()
3369 return bnx2x_get_rss_flags(bp, info); in bnx2x_get_rxnfc()
3376 static int bnx2x_set_rss_flags(struct bnx2x *bp, struct ethtool_rxnfc *info) in bnx2x_set_rss_flags() argument
3407 if (CHIP_IS_E1x(bp) && udp_rss_requested) { in bnx2x_set_rss_flags()
3414 (bp->rss_conf_obj.udp_rss_v4 != udp_rss_requested)) { in bnx2x_set_rss_flags()
3415 bp->rss_conf_obj.udp_rss_v4 = udp_rss_requested; in bnx2x_set_rss_flags()
3419 if (bp->state == BNX2X_STATE_OPEN) in bnx2x_set_rss_flags()
3420 return bnx2x_rss(bp, &bp->rss_conf_obj, false, in bnx2x_set_rss_flags()
3423 (bp->rss_conf_obj.udp_rss_v6 != udp_rss_requested)) { in bnx2x_set_rss_flags()
3424 bp->rss_conf_obj.udp_rss_v6 = udp_rss_requested; in bnx2x_set_rss_flags()
3428 if (bp->state == BNX2X_STATE_OPEN) in bnx2x_set_rss_flags()
3429 return bnx2x_rss(bp, &bp->rss_conf_obj, false, in bnx2x_set_rss_flags()
3469 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_rxnfc() local
3473 return bnx2x_set_rss_flags(bp, info); in bnx2x_set_rxnfc()
3488 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_rxfh() local
3498 bnx2x_get_rss_ind_table(&bp->rss_conf_obj, ind_table); in bnx2x_get_rxfh()
3510 indir[i] = ind_table[i] - bp->fp->cl_id; in bnx2x_get_rxfh()
3518 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_rxfh() local
3541 bp->rss_conf_obj.ind_table[i] = indir[i] + bp->fp->cl_id; in bnx2x_set_rxfh()
3544 if (bp->state == BNX2X_STATE_OPEN) in bnx2x_set_rxfh()
3545 return bnx2x_config_rss_eth(bp, false); in bnx2x_set_rxfh()
3559 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_channels() local
3561 channels->max_combined = BNX2X_MAX_RSS_COUNT(bp); in bnx2x_get_channels()
3562 channels->combined_count = BNX2X_NUM_ETH_QUEUES(bp); in bnx2x_get_channels()
3574 static void bnx2x_change_num_queues(struct bnx2x *bp, int num_rss) in bnx2x_change_num_queues() argument
3576 bnx2x_disable_msi(bp); in bnx2x_change_num_queues()
3577 bp->num_ethernet_queues = num_rss; in bnx2x_change_num_queues()
3578 bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues; in bnx2x_change_num_queues()
3579 BNX2X_DEV_INFO("set number of queues to %d\n", bp->num_queues); in bnx2x_change_num_queues()
3580 bnx2x_set_int_mode(bp); in bnx2x_change_num_queues()
3592 struct bnx2x *bp = netdev_priv(dev); in bnx2x_set_channels() local
3599 if (pci_num_vf(bp->pdev)) { in bnx2x_set_channels()
3609 (channels->combined_count > BNX2X_MAX_RSS_COUNT(bp))) { in bnx2x_set_channels()
3615 if (channels->combined_count == BNX2X_NUM_ETH_QUEUES(bp)) { in bnx2x_set_channels()
3625 bnx2x_change_num_queues(bp, channels->combined_count); in bnx2x_set_channels()
3628 bnx2x_nic_unload(bp, UNLOAD_NORMAL, true); in bnx2x_set_channels()
3629 bnx2x_change_num_queues(bp, channels->combined_count); in bnx2x_set_channels()
3630 return bnx2x_nic_load(bp, LOAD_NORMAL); in bnx2x_set_channels()
3636 struct bnx2x *bp = netdev_priv(dev); in bnx2x_get_ts_info() local
3638 if (bp->flags & PTP_SUPPORTED) { in bnx2x_get_ts_info()
3646 if (bp->ptp_clock) in bnx2x_get_ts_info()
3647 info->phc_index = ptp_clock_index(bp->ptp_clock); in bnx2x_get_ts_info()
3730 void bnx2x_set_ethtool_ops(struct bnx2x *bp, struct net_device *netdev) in bnx2x_set_ethtool_ops() argument
3732 netdev->ethtool_ops = (IS_PF(bp)) ? in bnx2x_set_ethtool_ops()