Lines Matching +full:self +full:- +full:advertising
3 * Copyright (c) 2007-2013 Broadcom Corporation
32 /* Note: in the format strings below %s is replaced by the queue-name which is
34 * length does not exceed ETH_GSTRING_LEN - MAX_QUEUE_NAME_LEN + 2
196 switch (bp->link_params.phy[phy_idx].media_type) { in bnx2x_get_port_type()
225 u32 supported, advertising; in bnx2x_get_vf_link_ksettings() local
228 cmd->link_modes.supported); in bnx2x_get_vf_link_ksettings()
229 ethtool_convert_link_mode_to_legacy_u32(&advertising, in bnx2x_get_vf_link_ksettings()
230 cmd->link_modes.advertising); in bnx2x_get_vf_link_ksettings()
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()
235 cmd->base.duplex = DUPLEX_FULL; in bnx2x_get_vf_link_ksettings()
237 cmd->base.duplex = DUPLEX_HALF; in bnx2x_get_vf_link_ksettings()
239 cmd->base.speed = bp->vf_link_vars.line_speed; in bnx2x_get_vf_link_ksettings()
241 cmd->base.duplex = DUPLEX_UNKNOWN; in bnx2x_get_vf_link_ksettings()
242 cmd->base.speed = SPEED_UNKNOWN; in bnx2x_get_vf_link_ksettings()
245 cmd->base.port = PORT_OTHER; in bnx2x_get_vf_link_ksettings()
246 cmd->base.phy_address = 0; in bnx2x_get_vf_link_ksettings()
247 cmd->base.autoneg = AUTONEG_DISABLE; in bnx2x_get_vf_link_ksettings()
250 " supported 0x%x advertising 0x%x speed %u\n" in bnx2x_get_vf_link_ksettings()
253 cmd->base.cmd, supported, advertising, in bnx2x_get_vf_link_ksettings()
254 cmd->base.speed, in bnx2x_get_vf_link_ksettings()
255 cmd->base.duplex, cmd->base.port, cmd->base.phy_address, in bnx2x_get_vf_link_ksettings()
256 cmd->base.autoneg); in bnx2x_get_vf_link_ksettings()
267 u32 supported, advertising, lp_advertising; in bnx2x_get_link_ksettings() local
270 cmd->link_modes.lp_advertising); 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()
280 advertising &= ~(ADVERTISED_10000baseT_Full); 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()
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()
292 cmd->base.duplex = DUPLEX_UNKNOWN; in bnx2x_get_link_ksettings()
293 cmd->base.speed = SPEED_UNKNOWN; 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()
301 cmd->base.autoneg = AUTONEG_ENABLE; in bnx2x_get_link_ksettings()
303 cmd->base.autoneg = AUTONEG_DISABLE; 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()
349 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, in bnx2x_get_link_ksettings()
351 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising, in bnx2x_get_link_ksettings()
352 advertising); in bnx2x_get_link_ksettings()
353 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.lp_advertising, in bnx2x_get_link_ksettings()
357 " supported 0x%x advertising 0x%x speed %u\n" in bnx2x_get_link_ksettings()
360 cmd->base.cmd, supported, advertising, in bnx2x_get_link_ksettings()
361 cmd->base.speed, in bnx2x_get_link_ksettings()
362 cmd->base.duplex, cmd->base.port, cmd->base.phy_address, in bnx2x_get_link_ksettings()
363 cmd->base.autoneg); in bnx2x_get_link_ksettings()
372 u32 advertising, cfg_idx, old_multi_phy_config, new_multi_phy_config; in bnx2x_set_link_ksettings() local
375 u8 duplex = cmd->base.duplex; in bnx2x_set_link_ksettings()
378 cmd->link_modes.supported); in bnx2x_set_link_ksettings()
379 ethtool_convert_link_mode_to_legacy_u32(&advertising, in bnx2x_set_link_ksettings()
380 cmd->link_modes.advertising); in bnx2x_set_link_ksettings()
386 " supported 0x%x advertising 0x%x speed %u\n" in bnx2x_set_link_ksettings()
389 cmd->base.cmd, supported, advertising, in bnx2x_set_link_ksettings()
390 cmd->base.speed, in bnx2x_set_link_ksettings()
391 cmd->base.duplex, cmd->base.port, cmd->base.phy_address, in bnx2x_set_link_ksettings()
392 cmd->base.autoneg); in bnx2x_set_link_ksettings()
394 speed = cmd->base.speed; 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()
412 return -EINVAL; in bnx2x_set_link_ksettings()
420 return -EINVAL; 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()
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()
435 switch (cmd->base.port) { 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()
441 return -EINVAL; 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()
460 return -EINVAL; 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()
474 return -EINVAL; in bnx2x_set_link_ksettings()
478 new_multi_phy_config = bp->link_params.multi_phy_config; in bnx2x_set_link_ksettings()
482 bp->link_params.multi_phy_config = old_multi_phy_config; in bnx2x_set_link_ksettings()
485 if (cmd->base.autoneg == AUTONEG_ENABLE) { 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()
493 return -EINVAL; in bnx2x_set_link_ksettings()
497 if (advertising & ~an_supported_speed) { in bnx2x_set_link_ksettings()
500 return -EINVAL; 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()
506 advertising); in bnx2x_set_link_ksettings()
507 if (advertising) { in bnx2x_set_link_ksettings()
509 bp->link_params.speed_cap_mask[cfg_idx] = 0; in bnx2x_set_link_ksettings()
510 if (advertising & ADVERTISED_10baseT_Half) { in bnx2x_set_link_ksettings()
511 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_link_ksettings()
514 if (advertising & ADVERTISED_10baseT_Full) in bnx2x_set_link_ksettings()
515 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_link_ksettings()
518 if (advertising & ADVERTISED_100baseT_Full) in bnx2x_set_link_ksettings()
519 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_link_ksettings()
522 if (advertising & ADVERTISED_100baseT_Half) { in bnx2x_set_link_ksettings()
523 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_link_ksettings()
526 if (advertising & ADVERTISED_1000baseT_Half) { in bnx2x_set_link_ksettings()
527 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_link_ksettings()
530 if (advertising & (ADVERTISED_1000baseT_Full | in bnx2x_set_link_ksettings()
532 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_link_ksettings()
535 if (advertising & (ADVERTISED_10000baseT_Full | in bnx2x_set_link_ksettings()
538 bp->link_params.speed_cap_mask[cfg_idx] |= in bnx2x_set_link_ksettings()
541 if (advertising & ADVERTISED_20000baseKR2_Full) 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()
554 return -EINVAL; in bnx2x_set_link_ksettings()
557 advertising = (ADVERTISED_10baseT_Full | in bnx2x_set_link_ksettings()
560 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_link_ksettings()
564 return -EINVAL; in bnx2x_set_link_ksettings()
567 advertising = (ADVERTISED_10baseT_Half | in bnx2x_set_link_ksettings()
574 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_link_ksettings()
578 return -EINVAL; in bnx2x_set_link_ksettings()
581 advertising = (ADVERTISED_100baseT_Full | in bnx2x_set_link_ksettings()
584 if (!(bp->port.supported[cfg_idx] & in bnx2x_set_link_ksettings()
588 return -EINVAL; in bnx2x_set_link_ksettings()
591 advertising = (ADVERTISED_100baseT_Half | in bnx2x_set_link_ksettings()
600 return -EINVAL; in bnx2x_set_link_ksettings()
603 if (bp->port.supported[cfg_idx] & in bnx2x_set_link_ksettings()
605 advertising = (ADVERTISED_1000baseT_Full | in bnx2x_set_link_ksettings()
608 } else if (bp->port.supported[cfg_idx] & in bnx2x_set_link_ksettings()
610 advertising = ADVERTISED_1000baseKX_Full; in bnx2x_set_link_ksettings()
614 return -EINVAL; in bnx2x_set_link_ksettings()
623 return -EINVAL; in bnx2x_set_link_ksettings()
626 if (!(bp->port.supported[cfg_idx] in bnx2x_set_link_ksettings()
630 return -EINVAL; in bnx2x_set_link_ksettings()
633 advertising = (ADVERTISED_2500baseX_Full | in bnx2x_set_link_ksettings()
641 return -EINVAL; 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()
648 advertising = (ADVERTISED_10000baseT_Full | in bnx2x_set_link_ksettings()
650 } else if (bp->port.supported[cfg_idx] & in bnx2x_set_link_ksettings()
652 advertising = (ADVERTISED_10000baseKR_Full | in bnx2x_set_link_ksettings()
657 return -EINVAL; in bnx2x_set_link_ksettings()
664 return -EINVAL; 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()
673 " req_duplex %d advertising 0x%x\n", 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()
695 return dump_num_registers[0][preset-1]; in __bnx2x_get_preset_regs_len()
697 return dump_num_registers[1][preset-1]; in __bnx2x_get_preset_regs_len()
699 return dump_num_registers[2][preset-1]; in __bnx2x_get_preset_regs_len()
701 return dump_num_registers[3][preset-1]; in __bnx2x_get_preset_regs_len()
703 return dump_num_registers[4][preset-1]; in __bnx2x_get_preset_regs_len()
742 ((presets & (1 << (idx-1))) == (1 << (idx-1)))
809 return IS_E1_REG(reg_info->chips); in bnx2x_is_reg_in_chip()
811 return IS_E1H_REG(reg_info->chips); in bnx2x_is_reg_in_chip()
813 return IS_E2_REG(reg_info->chips); in bnx2x_is_reg_in_chip()
815 return IS_E3A0_REG(reg_info->chips); in bnx2x_is_reg_in_chip()
817 return IS_E3B0_REG(reg_info->chips); in bnx2x_is_reg_in_chip()
826 return IS_E1_REG(wreg_info->chips); in bnx2x_is_wreg_in_chip()
828 return IS_E1H_REG(wreg_info->chips); in bnx2x_is_wreg_in_chip()
830 return IS_E2_REG(wreg_info->chips); in bnx2x_is_wreg_in_chip()
832 return IS_E3A0_REG(wreg_info->chips); in bnx2x_is_wreg_in_chip()
834 return IS_E3B0_REG(wreg_info->chips); in bnx2x_is_wreg_in_chip()
840 * bnx2x_read_pages_regs - read "paged" registers
923 IS_REG_IN_PRESET(wreg_addr_p->presets, preset)) { in __bnx2x_get_preset_regs()
924 for (i = 0; i < wreg_addr_p->size; i++) { in __bnx2x_get_preset_regs()
925 *p++ = REG_RD(bp, wreg_addr_p->addr + i*4); in __bnx2x_get_preset_regs()
930 for (j = 0; j < wreg_addr_p->read_regs_count; j++) { in __bnx2x_get_preset_regs()
931 addr = *(wreg_addr_p->read_regs); in __bnx2x_get_preset_regs()
970 regs->version = 2; in bnx2x_get_regs()
971 memset(p, 0, regs->len); in bnx2x_get_regs()
973 if (!netif_running(bp->dev)) in bnx2x_get_regs()
978 * will re-enable parity attentions right after the dump. in bnx2x_get_regs()
983 dump_hdr.header_size = (sizeof(struct dump_header) / 4) - 1; in bnx2x_get_regs()
1014 /* Re-enable parity attentions */ in bnx2x_get_regs()
1036 if (val->flag < 1 || val->flag > DUMP_MAX_PRESETS) in bnx2x_set_dump()
1037 return -EINVAL; in bnx2x_set_dump()
1039 bp->dump_preset_idx = val->flag; in bnx2x_set_dump()
1048 dump->version = BNX2X_DUMP_VERSION; in bnx2x_get_dump_flag()
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()
1067 * will re-enable parity attentions right after the dump. in bnx2x_get_dump_data()
1072 dump_hdr.header_size = (sizeof(struct dump_header) / 4) - 1; in bnx2x_get_dump_data()
1073 dump_hdr.preset = bp->dump_preset_idx; in bnx2x_get_dump_data()
1100 /* Re-enable parity attentions */ in bnx2x_get_dump_data()
1115 strscpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver)); in bnx2x_get_drvinfo()
1129 strscpy(info->fw_version, version, in bnx2x_get_drvinfo()
1130 sizeof(info->fw_version)); in bnx2x_get_drvinfo()
1136 strlcat(info->fw_version, version, sizeof(info->fw_version)); in bnx2x_get_drvinfo()
1138 strscpy(info->bus_info, pci_name(bp->pdev), sizeof(info->bus_info)); in bnx2x_get_drvinfo()
1145 if (bp->flags & NO_WOL_FLAG) { in bnx2x_get_wol()
1146 wol->supported = 0; in bnx2x_get_wol()
1147 wol->wolopts = 0; in bnx2x_get_wol()
1149 wol->supported = WAKE_MAGIC; in bnx2x_get_wol()
1150 if (bp->wol) in bnx2x_get_wol()
1151 wol->wolopts = WAKE_MAGIC; in bnx2x_get_wol()
1153 wol->wolopts = 0; in bnx2x_get_wol()
1155 memset(&wol->sopass, 0, sizeof(wol->sopass)); in bnx2x_get_wol()
1162 if (wol->wolopts & ~WAKE_MAGIC) { in bnx2x_set_wol()
1164 return -EINVAL; in bnx2x_set_wol()
1167 if (wol->wolopts & WAKE_MAGIC) { in bnx2x_set_wol()
1168 if (bp->flags & NO_WOL_FLAG) { in bnx2x_set_wol()
1170 return -EINVAL; in bnx2x_set_wol()
1172 bp->wol = 1; in bnx2x_set_wol()
1174 bp->wol = 0; in bnx2x_set_wol()
1186 return bp->msg_enable; in bnx2x_get_msglevel()
1197 bp->msg_enable = level; in bnx2x_set_msglevel()
1205 if (!bp->port.pmf) in bnx2x_nway_reset()
1221 if (bp->flags & MF_FUNC_DIS || (bp->state != BNX2X_STATE_OPEN)) 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()
1235 return bp->common.flash_size; in bnx2x_get_eeprom_len()
1281 return -EBUSY; in bnx2x_acquire_nvram_lock()
1313 return -EBUSY; in bnx2x_release_nvram_lock()
1371 rc = -EBUSY; in bnx2x_nvram_read_dword()
1380 * converting to big-endian will do the work in bnx2x_nvram_read_dword()
1387 if (rc == -EBUSY) in bnx2x_nvram_read_dword()
1404 return -EINVAL; in bnx2x_nvram_read()
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()
1411 return -EINVAL; in bnx2x_nvram_read()
1431 buf_size -= sizeof(u32); in bnx2x_nvram_read()
1458 while ((buf_size -= 4) >= 0) in bnx2x_nvram_read32()
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()
1490 return -EAGAIN; in bnx2x_get_eeprom()
1495 eeprom->cmd, eeprom->magic, eeprom->offset, eeprom->offset, in bnx2x_get_eeprom()
1496 eeprom->len, eeprom->len); in bnx2x_get_eeprom()
1500 return bnx2x_nvram_read(bp, eeprom->offset, eebuf, eeprom->len); in bnx2x_get_eeprom()
1508 int rc = -EINVAL, phy_idx; in bnx2x_get_module_eeprom()
1510 unsigned int start_addr = ee->offset, xfer_size = 0; in bnx2x_get_module_eeprom()
1515 return -EAGAIN; in bnx2x_get_module_eeprom()
1523 if (start_addr + ee->len > ETH_MODULE_SFF_8079_LEN) in bnx2x_get_module_eeprom()
1524 xfer_size = ETH_MODULE_SFF_8079_LEN - start_addr; in bnx2x_get_module_eeprom()
1526 xfer_size = ee->len; 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()
1538 return -EINVAL; in bnx2x_get_module_eeprom()
1547 xfer_size = ee->len - xfer_size; in bnx2x_get_module_eeprom()
1550 xfer_size = ETH_MODULE_SFF_8472_LEN - start_addr; in bnx2x_get_module_eeprom()
1551 start_addr -= ETH_MODULE_SFF_8079_LEN; 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()
1562 return -EINVAL; in bnx2x_get_module_eeprom()
1578 return -EAGAIN; 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()
1590 DP(BNX2X_MSG_ETHTOOL, "Failed reading SFF-8472 comp field\n"); in bnx2x_get_module_info()
1591 return -EINVAL; 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()
1604 return -EINVAL; in bnx2x_get_module_info()
1610 modinfo->type = ETH_MODULE_SFF_8079; in bnx2x_get_module_info()
1611 modinfo->eeprom_len = ETH_MODULE_SFF_8079_LEN; in bnx2x_get_module_info()
1613 modinfo->type = ETH_MODULE_SFF_8472; in bnx2x_get_module_info()
1614 modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN; in bnx2x_get_module_info()
1646 rc = -EBUSY; in bnx2x_nvram_write_dword()
1656 if (rc == -EBUSY) in bnx2x_nvram_write_dword()
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()
1675 return -EINVAL; in bnx2x_nvram_write1()
1727 return -EINVAL; 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()
1734 return -EINVAL; in bnx2x_nvram_write()
1748 if (written_so_far == (buf_size - sizeof(u32))) in bnx2x_nvram_write()
1777 (u32)(offset - sizeof(u32))); in bnx2x_nvram_write()
1806 return -EAGAIN; in bnx2x_set_eeprom()
1811 eeprom->cmd, eeprom->magic, eeprom->offset, eeprom->offset, in bnx2x_set_eeprom()
1812 eeprom->len, eeprom->len); in bnx2x_set_eeprom()
1817 if ((eeprom->magic >= 0x50485900) && (eeprom->magic <= 0x504859FF) && in bnx2x_set_eeprom()
1818 !bp->port.pmf) { in bnx2x_set_eeprom()
1821 return -EINVAL; in bnx2x_set_eeprom()
1828 if (eeprom->magic == 0x50485950) { 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()
1842 } else if (eeprom->magic == 0x50485952) { in bnx2x_set_eeprom()
1843 /* 'PHYR' (0x50485952): re-init link after FW upgrade */ in bnx2x_set_eeprom()
1844 if (bp->state == BNX2X_STATE_OPEN) { 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()
1854 } else if (eeprom->magic == 0x53985943) { in bnx2x_set_eeprom()
1866 &bp->link_params.phy[EXT_PHY1]); in bnx2x_set_eeprom()
1875 rc = bnx2x_nvram_write(bp, eeprom->offset, eebuf, eeprom->len); in bnx2x_set_eeprom()
1889 coal->rx_coalesce_usecs = bp->rx_ticks; in bnx2x_get_coalesce()
1890 coal->tx_coalesce_usecs = bp->tx_ticks; in bnx2x_get_coalesce()
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()
1923 ering->rx_max_pending = MAX_RX_AVAIL; in bnx2x_get_ringparam()
1931 if (bp->rx_ring_size) in bnx2x_get_ringparam()
1932 ering->rx_pending = bp->rx_ring_size; in bnx2x_get_ringparam()
1934 ering->rx_pending = MAX_RX_AVAIL / BNX2X_NUM_RX_QUEUES(bp); in bnx2x_get_ringparam()
1936 ering->rx_pending = MAX_RX_AVAIL; in bnx2x_get_ringparam()
1938 ering->tx_max_pending = IS_MF_FCOE_AFEX(bp) ? 0 : MAX_TX_AVAIL; in bnx2x_get_ringparam()
1939 ering->tx_pending = bp->tx_ring_size; in bnx2x_get_ringparam()
1951 ering->rx_pending, ering->tx_pending); in bnx2x_set_ringparam()
1953 if (pci_num_vf(bp->pdev)) { in bnx2x_set_ringparam()
1956 return -EPERM; in bnx2x_set_ringparam()
1959 if (bp->recovery_state != BNX2X_RECOVERY_DONE) { in bnx2x_set_ringparam()
1962 return -EAGAIN; in bnx2x_set_ringparam()
1965 if ((ering->rx_pending > MAX_RX_AVAIL) || in bnx2x_set_ringparam()
1966 (ering->rx_pending < (bp->disable_tpa ? MIN_RX_SIZE_NONTPA : in bnx2x_set_ringparam()
1968 (ering->tx_pending > (IS_MF_STORAGE_ONLY(bp) ? 0 : MAX_TX_AVAIL)) || in bnx2x_set_ringparam()
1969 (ering->tx_pending <= MAX_SKB_FRAGS + 4)) { in bnx2x_set_ringparam()
1971 return -EINVAL; in bnx2x_set_ringparam()
1974 bp->rx_ring_size = ering->rx_pending; in bnx2x_set_ringparam()
1975 bp->tx_ring_size = ering->tx_pending; in bnx2x_set_ringparam()
1987 epause->autoneg = (bp->link_params.req_flow_ctrl[cfg_idx] == in bnx2x_get_pauseparam()
1990 if (!epause->autoneg) in bnx2x_get_pauseparam()
1991 cfg_reg = bp->link_params.req_flow_ctrl[cfg_idx]; in bnx2x_get_pauseparam()
1993 cfg_reg = bp->link_params.req_fc_auto_adv; in bnx2x_get_pauseparam()
1995 epause->rx_pause = ((cfg_reg & BNX2X_FLOW_CTRL_RX) == in bnx2x_get_pauseparam()
1997 epause->tx_pause = ((cfg_reg & BNX2X_FLOW_CTRL_TX) == in bnx2x_get_pauseparam()
2002 epause->cmd, epause->autoneg, epause->rx_pause, epause->tx_pause); in bnx2x_get_pauseparam()
2015 epause->cmd, epause->autoneg, epause->rx_pause, epause->tx_pause); in bnx2x_set_pauseparam()
2017 bp->link_params.req_flow_ctrl[cfg_idx] = BNX2X_FLOW_CTRL_AUTO; in bnx2x_set_pauseparam()
2019 if (epause->rx_pause) in bnx2x_set_pauseparam()
2020 bp->link_params.req_flow_ctrl[cfg_idx] |= BNX2X_FLOW_CTRL_RX; in bnx2x_set_pauseparam()
2022 if (epause->tx_pause) in bnx2x_set_pauseparam()
2023 bp->link_params.req_flow_ctrl[cfg_idx] |= BNX2X_FLOW_CTRL_TX; in bnx2x_set_pauseparam()
2025 if (bp->link_params.req_flow_ctrl[cfg_idx] == BNX2X_FLOW_CTRL_AUTO) in bnx2x_set_pauseparam()
2026 bp->link_params.req_flow_ctrl[cfg_idx] = BNX2X_FLOW_CTRL_NONE; in bnx2x_set_pauseparam()
2028 if (epause->autoneg) { in bnx2x_set_pauseparam()
2029 if (!(bp->port.supported[cfg_idx] & SUPPORTED_Autoneg)) { in bnx2x_set_pauseparam()
2031 return -EINVAL; in bnx2x_set_pauseparam()
2034 if (bp->link_params.req_line_speed[cfg_idx] == SPEED_AUTO_NEG) { in bnx2x_set_pauseparam()
2035 bp->link_params.req_flow_ctrl[cfg_idx] = in bnx2x_set_pauseparam()
2038 bp->link_params.req_fc_auto_adv = 0; in bnx2x_set_pauseparam()
2039 if (epause->rx_pause) in bnx2x_set_pauseparam()
2040 bp->link_params.req_fc_auto_adv |= BNX2X_FLOW_CTRL_RX; in bnx2x_set_pauseparam()
2042 if (epause->tx_pause) in bnx2x_set_pauseparam()
2043 bp->link_params.req_fc_auto_adv |= BNX2X_FLOW_CTRL_TX; in bnx2x_set_pauseparam()
2045 if (!bp->link_params.req_fc_auto_adv) in bnx2x_set_pauseparam()
2046 bp->link_params.req_fc_auto_adv |= BNX2X_FLOW_CTRL_NONE; in bnx2x_set_pauseparam()
2050 "req_flow_ctrl 0x%x\n", bp->link_params.req_flow_ctrl[cfg_idx]); in bnx2x_set_pauseparam()
2115 return -EOPNOTSUPP; in bnx2x_get_eee()
2118 eee_cfg = bp->link_vars.eee_status; in bnx2x_get_eee()
2120 bnx2x_eee_to_linkmode(edata->supported, in bnx2x_get_eee()
2124 bnx2x_eee_to_linkmode(edata->advertised, in bnx2x_get_eee()
2128 bnx2x_eee_to_linkmode(edata->lp_advertised, in bnx2x_get_eee()
2132 /* SHMEM value is in 16u units --> Convert to 1u units. */ in bnx2x_get_eee()
2133 edata->tx_lpi_timer = (eee_cfg & SHMEM_EEE_TIMER_MASK) << 4; in bnx2x_get_eee()
2135 edata->eee_enabled = (eee_cfg & SHMEM_EEE_REQUESTED_BIT) ? 1 : 0; in bnx2x_get_eee()
2136 edata->eee_active = (eee_cfg & SHMEM_EEE_ACTIVE_BIT) ? 1 : 0; in bnx2x_get_eee()
2137 edata->tx_lpi_enabled = (eee_cfg & SHMEM_EEE_LPI_REQUESTED_BIT) ? 1 : 0; in bnx2x_get_eee()
2153 return -EOPNOTSUPP; in bnx2x_set_eee()
2156 eee_cfg = bp->link_vars.eee_status; in bnx2x_set_eee()
2160 return -EOPNOTSUPP; in bnx2x_set_eee()
2163 advertised = bnx2x_linkmode_to_eee(edata->advertised, in bnx2x_set_eee()
2168 return -EINVAL; in bnx2x_set_eee()
2171 if (edata->tx_lpi_timer > EEE_MODE_TIMER_MASK) { in bnx2x_set_eee()
2175 return -EINVAL; in bnx2x_set_eee()
2177 if (edata->tx_lpi_enabled && in bnx2x_set_eee()
2178 (edata->tx_lpi_timer < EEE_MODE_NVRAM_AGGRESSIVE_TIME)) { in bnx2x_set_eee()
2182 return -EINVAL; in bnx2x_set_eee()
2186 if (edata->eee_enabled) in bnx2x_set_eee()
2187 bp->link_params.eee_mode |= EEE_MODE_ADV_LPI; in bnx2x_set_eee()
2189 bp->link_params.eee_mode &= ~EEE_MODE_ADV_LPI; in bnx2x_set_eee()
2191 if (edata->tx_lpi_enabled) 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_ENABLE_LPI; in bnx2x_set_eee()
2196 bp->link_params.eee_mode &= ~EEE_MODE_TIMER_MASK; in bnx2x_set_eee()
2197 bp->link_params.eee_mode |= (edata->tx_lpi_timer & in bnx2x_set_eee()
2227 #define BNX2X_CHIP_MASK_ALL ((1 << BNX2X_CHIP_MAX_OFST) - 1)
2232 int idx, i, rc = -ENODEV; in bnx2x_test_registers()
2387 int i, j, rc = -ENODEV; in bnx2x_test_memory()
2440 /* pre-Check the parity status */ in bnx2x_test_memory()
2476 while (bnx2x_link_test(bp, is_serdes) && cnt--) in bnx2x_wait_for_link()
2483 while (!bp->link_vars.link_up && cnt--) in bnx2x_wait_for_link()
2486 if (cnt <= 0 && !bp->link_vars.link_up) in bnx2x_wait_for_link()
2497 struct bnx2x_fastpath *fp_rx = &bp->fp[0]; in bnx2x_run_loopback()
2498 struct bnx2x_fastpath *fp_tx = &bp->fp[0]; in bnx2x_run_loopback()
2499 struct bnx2x_fp_txdata *txdata = fp_tx->txdata_ptr[0]; in bnx2x_run_loopback()
2510 int rc = -ENODEV; in bnx2x_run_loopback()
2512 struct netdev_queue *txq = netdev_get_tx_queue(bp->dev, in bnx2x_run_loopback()
2513 txdata->txq_index); in bnx2x_run_loopback()
2518 if (bp->link_params.loopback_mode != LOOPBACK_XGXS) { in bnx2x_run_loopback()
2520 return -EINVAL; in bnx2x_run_loopback()
2526 if (bp->port.supported[cfg_idx] & in bnx2x_run_loopback()
2530 bp->link_params.loopback_mode = LOOPBACK_XMAC; in bnx2x_run_loopback()
2532 bp->link_params.loopback_mode = LOOPBACK_UMAC; in bnx2x_run_loopback()
2534 bp->link_params.loopback_mode = LOOPBACK_BMAC; in bnx2x_run_loopback()
2536 bnx2x_phy_init(&bp->link_params, &bp->link_vars); in bnx2x_run_loopback()
2539 if (bp->link_params.loopback_mode != LOOPBACK_EXT) { in bnx2x_run_loopback()
2542 return -EINVAL; in bnx2x_run_loopback()
2547 return -EINVAL; in bnx2x_run_loopback()
2551 pkt_size = (((bp->dev->mtu < ETH_MAX_PACKET_SIZE) ? in bnx2x_run_loopback()
2552 bp->dev->mtu : ETH_MAX_PACKET_SIZE) + ETH_HLEN); in bnx2x_run_loopback()
2553 skb = netdev_alloc_skb(bp->dev, fp_rx->rx_buf_size); in bnx2x_run_loopback()
2556 rc = -ENOMEM; in bnx2x_run_loopback()
2560 memcpy(packet, bp->dev->dev_addr, ETH_ALEN); in bnx2x_run_loopback()
2562 memset(packet + 2*ETH_ALEN, 0x77, (ETH_HLEN - 2*ETH_ALEN)); in bnx2x_run_loopback()
2565 mapping = dma_map_single(&bp->pdev->dev, skb->data, in bnx2x_run_loopback()
2567 if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) { in bnx2x_run_loopback()
2568 rc = -ENOMEM; in bnx2x_run_loopback()
2576 tx_start_idx = le16_to_cpu(*txdata->tx_cons_sb); in bnx2x_run_loopback()
2577 rx_start_idx = le16_to_cpu(*fp_rx->rx_cons_sb); in bnx2x_run_loopback()
2579 netdev_tx_sent_queue(txq, skb->len); in bnx2x_run_loopback()
2581 pkt_prod = txdata->tx_pkt_prod++; in bnx2x_run_loopback()
2582 tx_buf = &txdata->tx_buf_ring[TX_BD(pkt_prod)]; in bnx2x_run_loopback()
2583 tx_buf->first_bd = txdata->tx_bd_prod; in bnx2x_run_loopback()
2584 tx_buf->skb = skb; in bnx2x_run_loopback()
2585 tx_buf->flags = 0; in bnx2x_run_loopback()
2587 bd_prod = TX_BD(txdata->tx_bd_prod); in bnx2x_run_loopback()
2588 tx_start_bd = &txdata->tx_desc_ring[bd_prod].start_bd; in bnx2x_run_loopback()
2589 tx_start_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); in bnx2x_run_loopback()
2590 tx_start_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); in bnx2x_run_loopback()
2591 tx_start_bd->nbd = cpu_to_le16(2); /* start + pbd */ in bnx2x_run_loopback()
2592 tx_start_bd->nbytes = cpu_to_le16(skb_headlen(skb)); in bnx2x_run_loopback()
2593 tx_start_bd->vlan_or_ethertype = cpu_to_le16(pkt_prod); in bnx2x_run_loopback()
2594 tx_start_bd->bd_flags.as_bitfield = ETH_TX_BD_FLAGS_START_BD; in bnx2x_run_loopback()
2595 SET_FLAG(tx_start_bd->general_data, in bnx2x_run_loopback()
2598 SET_FLAG(tx_start_bd->general_data, in bnx2x_run_loopback()
2608 &txdata->tx_desc_ring[bd_prod].parse_bd_e1x; in bnx2x_run_loopback()
2612 pbd_e1x->global_data = cpu_to_le16(global_data); in bnx2x_run_loopback()
2616 &txdata->tx_desc_ring[bd_prod].parse_bd_e2; in bnx2x_run_loopback()
2620 pbd_e2->parsing_data = cpu_to_le32(parsing_data); in bnx2x_run_loopback()
2624 txdata->tx_db.data.prod += 2; in bnx2x_run_loopback()
2627 DOORBELL_RELAXED(bp, txdata->cid, txdata->tx_db.raw); in bnx2x_run_loopback()
2632 txdata->tx_bd_prod += 2; /* start + pbd */ in bnx2x_run_loopback()
2636 tx_idx = le16_to_cpu(*txdata->tx_cons_sb); in bnx2x_run_loopback()
2644 if (bp->common.int_block == INT_BLOCK_IGU) { in bnx2x_run_loopback()
2645 /* Disable local BHes to prevent a dead-lock situation between in bnx2x_run_loopback()
2654 rx_idx = le16_to_cpu(*fp_rx->rx_cons_sb); in bnx2x_run_loopback()
2658 cqe = &fp_rx->rx_comp_ring[RCQ_BD(fp_rx->rx_comp_cons)]; in bnx2x_run_loopback()
2659 cqe_fp_flags = cqe->fast_path_cqe.type_error_flags; in bnx2x_run_loopback()
2664 len = le16_to_cpu(cqe->fast_path_cqe.pkt_len_or_gro_seg_len); in bnx2x_run_loopback()
2668 rx_buf = &fp_rx->rx_buf_ring[RX_BD(fp_rx->rx_bd_cons)]; in bnx2x_run_loopback()
2669 dma_sync_single_for_cpu(&bp->pdev->dev, in bnx2x_run_loopback()
2671 fp_rx->rx_buf_size, DMA_FROM_DEVICE); in bnx2x_run_loopback()
2672 data = rx_buf->data + NET_SKB_PAD + cqe->fast_path_cqe.placement_offset; in bnx2x_run_loopback()
2681 fp_rx->rx_bd_cons = NEXT_RX_IDX(fp_rx->rx_bd_cons); in bnx2x_run_loopback()
2682 fp_rx->rx_bd_prod = NEXT_RX_IDX(fp_rx->rx_bd_prod); in bnx2x_run_loopback()
2683 fp_rx->rx_comp_cons = NEXT_RCQ_IDX(fp_rx->rx_comp_cons); in bnx2x_run_loopback()
2684 fp_rx->rx_comp_prod = NEXT_RCQ_IDX(fp_rx->rx_comp_prod); in bnx2x_run_loopback()
2687 bnx2x_update_rx_prod(bp, fp_rx, fp_rx->rx_bd_prod, fp_rx->rx_comp_prod, in bnx2x_run_loopback()
2688 fp_rx->rx_sge_prod); in bnx2x_run_loopback()
2691 bp->link_params.loopback_mode = LOOPBACK_NONE; in bnx2x_run_loopback()
2703 if (!netif_running(bp->dev)) in bnx2x_test_loopback()
2731 (bp->link_vars.link_status & LINK_STATUS_SERDES_LINK) > 0; in bnx2x_test_ext_loopback()
2734 return -ENODEV; in bnx2x_test_ext_loopback()
2736 if (!netif_running(bp->dev)) in bnx2x_test_ext_loopback()
2743 "Can't perform self-test, nic_load (for external lb) failed\n"); in bnx2x_test_ext_loopback()
2744 return -ENODEV; in bnx2x_test_ext_loopback()
2793 int count = min_t(int, size - done, CRC_BUFF_SIZE); in bnx2x_nvram_crc()
2805 rc = -EINVAL; in bnx2x_nvram_crc()
2814 size_t size = entry->code_attribute & CODE_IMAGE_LENGTH_MASK; in bnx2x_test_nvram_dir()
2815 u32 type = entry->code_attribute & CODE_IMAGE_TYPE_MASK; in bnx2x_test_nvram_dir()
2818 /* Zero-length images and AFEX profiles do not have CRC */ in bnx2x_test_nvram_dir()
2822 rc = bnx2x_nvram_crc(bp, entry->nvm_start_addr, size, buff); in bnx2x_test_nvram_dir()
2881 DP(BNX2X_MSG_ETHTOOL | BNX2X_MSG_NVM, "NVRAM DIRS CRC test-set\n"); in bnx2x_test_nvram_dirs()
2945 rc = -ENOMEM; in bnx2x_test_nvram()
2959 rc = -ENODEV; in bnx2x_test_nvram()
2963 DP(BNX2X_MSG_ETHTOOL | BNX2X_MSG_NVM, "Port 0 CRC test-set\n"); in bnx2x_test_nvram()
2974 "Port 1 CRC test-set\n"); in bnx2x_test_nvram()
2993 if (!netif_running(bp->dev)) { in bnx2x_test_intr()
2996 return -ENODEV; in bnx2x_test_intr()
2999 params.q_obj = &bp->sp_objs->q_obj; in bnx2x_test_intr()
3014 if (pci_num_vf(bp->pdev)) { in bnx2x_self_test()
3016 "VFs are enabled, can not perform self test\n"); in bnx2x_self_test()
3020 if (bp->recovery_state != BNX2X_RECOVERY_DONE) { in bnx2x_self_test()
3021 netdev_err(bp->dev, in bnx2x_self_test()
3023 etest->flags |= ETH_TEST_FL_FAILED; in bnx2x_self_test()
3028 "Self-test command parameters: offline = %d, external_lb = %d\n", in bnx2x_self_test()
3029 (etest->flags & ETH_TEST_FL_OFFLINE), in bnx2x_self_test()
3030 (etest->flags & ETH_TEST_FL_EXTERNAL_LB)>>2); in bnx2x_self_test()
3039 etest->flags |= ETH_TEST_FL_FAILED; in bnx2x_self_test()
3047 is_serdes = (bp->link_vars.link_status & LINK_STATUS_SERDES_LINK) > 0; in bnx2x_self_test()
3048 link_up = bp->link_vars.link_up; in bnx2x_self_test()
3050 if ((etest->flags & ETH_TEST_FL_OFFLINE) && !IS_MF(bp)) { in bnx2x_self_test()
3062 etest->flags |= ETH_TEST_FL_FAILED; in bnx2x_self_test()
3064 "Can't perform self-test, nic_load (for offline) failed\n"); in bnx2x_self_test()
3073 etest->flags |= ETH_TEST_FL_FAILED; in bnx2x_self_test()
3077 etest->flags |= ETH_TEST_FL_FAILED; in bnx2x_self_test()
3082 etest->flags |= ETH_TEST_FL_FAILED; in bnx2x_self_test()
3084 if (etest->flags & ETH_TEST_FL_EXTERNAL_LB) { in bnx2x_self_test()
3087 etest->flags |= ETH_TEST_FL_FAILED; in bnx2x_self_test()
3088 etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE; in bnx2x_self_test()
3097 etest->flags |= ETH_TEST_FL_FAILED; in bnx2x_self_test()
3099 "Can't perform self-test, nic_load (for online) failed\n"); in bnx2x_self_test()
3111 etest->flags |= ETH_TEST_FL_FAILED; in bnx2x_self_test()
3116 while (bnx2x_link_test(bp, is_serdes) && --cnt) in bnx2x_self_test()
3125 etest->flags |= ETH_TEST_FL_FAILED; in bnx2x_self_test()
3168 return -EINVAL; in bnx2x_get_sset_count()
3177 flags |= (!(bp->flags & NO_ISCSI_FLAG) ? 1 : 0) << BNX2X_PRI_FLAG_ISCSI; in bnx2x_get_private_flags()
3178 flags |= (!(bp->flags & NO_FCOE_FLAG) ? 1 : 0) << BNX2X_PRI_FLAG_FCOE; in bnx2x_get_private_flags()
3237 hw_stats = (u32 *)&bp->fp_stats[i].eth_q_stats; in bnx2x_get_ethtool_stats()
3247 /* 4-byte counter */ in bnx2x_get_ethtool_stats()
3251 /* 8-byte counter */ in bnx2x_get_ethtool_stats()
3258 hw_stats = (u32 *)&bp->eth_stats; in bnx2x_get_ethtool_stats()
3270 /* 4-byte counter */ in bnx2x_get_ethtool_stats()
3275 /* 8-byte counter */ in bnx2x_get_ethtool_stats()
3289 return -EAGAIN; in bnx2x_set_phys_id()
3298 bnx2x_set_led(&bp->link_params, &bp->link_vars, in bnx2x_set_phys_id()
3305 bnx2x_set_led(&bp->link_params, &bp->link_vars, in bnx2x_set_phys_id()
3312 bnx2x_set_led(&bp->link_params, &bp->link_vars, in bnx2x_set_phys_id()
3314 bp->link_vars.line_speed); in bnx2x_set_phys_id()
3323 switch (info->flow_type) { in bnx2x_get_rss_flags()
3326 info->data = RXH_IP_SRC | RXH_IP_DST | in bnx2x_get_rss_flags()
3330 if (bp->rss_conf_obj.udp_rss_v4) in bnx2x_get_rss_flags()
3331 info->data = RXH_IP_SRC | RXH_IP_DST | in bnx2x_get_rss_flags()
3334 info->data = RXH_IP_SRC | RXH_IP_DST; in bnx2x_get_rss_flags()
3337 if (bp->rss_conf_obj.udp_rss_v6) in bnx2x_get_rss_flags()
3338 info->data = RXH_IP_SRC | RXH_IP_DST | in bnx2x_get_rss_flags()
3341 info->data = RXH_IP_SRC | RXH_IP_DST; in bnx2x_get_rss_flags()
3345 info->data = RXH_IP_SRC | RXH_IP_DST; in bnx2x_get_rss_flags()
3348 info->data = 0; in bnx2x_get_rss_flags()
3360 switch (info->cmd) { in bnx2x_get_rxnfc()
3362 info->data = BNX2X_NUM_ETH_QUEUES(bp); in bnx2x_get_rxnfc()
3368 return -EOPNOTSUPP; in bnx2x_get_rxnfc()
3378 info->flow_type, info->data); in bnx2x_set_rss_flags()
3380 switch (info->flow_type) { in bnx2x_set_rss_flags()
3383 /* For TCP only 4-tupple hash is supported */ in bnx2x_set_rss_flags()
3384 if (info->data ^ (RXH_IP_SRC | RXH_IP_DST | in bnx2x_set_rss_flags()
3388 return -EINVAL; in bnx2x_set_rss_flags()
3394 /* For UDP either 2-tupple hash or 4-tupple hash is supported */ in bnx2x_set_rss_flags()
3395 if (info->data == (RXH_IP_SRC | RXH_IP_DST | in bnx2x_set_rss_flags()
3398 else if (info->data == (RXH_IP_SRC | RXH_IP_DST)) in bnx2x_set_rss_flags()
3401 return -EINVAL; in bnx2x_set_rss_flags()
3405 "57710, 57711 boards don't support RSS according to UDP 4-tuple\n"); in bnx2x_set_rss_flags()
3406 return -EINVAL; in bnx2x_set_rss_flags()
3409 if ((info->flow_type == UDP_V4_FLOW) && in bnx2x_set_rss_flags()
3410 (bp->rss_conf_obj.udp_rss_v4 != udp_rss_requested)) { in bnx2x_set_rss_flags()
3411 bp->rss_conf_obj.udp_rss_v4 = udp_rss_requested; in bnx2x_set_rss_flags()
3413 "rss re-configured, UDP 4-tupple %s\n", in bnx2x_set_rss_flags()
3415 if (bp->state == BNX2X_STATE_OPEN) in bnx2x_set_rss_flags()
3416 return bnx2x_rss(bp, &bp->rss_conf_obj, false, in bnx2x_set_rss_flags()
3418 } else if ((info->flow_type == UDP_V6_FLOW) && in bnx2x_set_rss_flags()
3419 (bp->rss_conf_obj.udp_rss_v6 != udp_rss_requested)) { in bnx2x_set_rss_flags()
3420 bp->rss_conf_obj.udp_rss_v6 = udp_rss_requested; in bnx2x_set_rss_flags()
3422 "rss re-configured, UDP 4-tupple %s\n", in bnx2x_set_rss_flags()
3424 if (bp->state == BNX2X_STATE_OPEN) in bnx2x_set_rss_flags()
3425 return bnx2x_rss(bp, &bp->rss_conf_obj, false, in bnx2x_set_rss_flags()
3432 /* For IP only 2-tupple hash is supported */ in bnx2x_set_rss_flags()
3433 if (info->data ^ (RXH_IP_SRC | RXH_IP_DST)) { in bnx2x_set_rss_flags()
3436 return -EINVAL; in bnx2x_set_rss_flags()
3451 if (info->data) { in bnx2x_set_rss_flags()
3454 return -EINVAL; in bnx2x_set_rss_flags()
3459 return -EINVAL; in bnx2x_set_rss_flags()
3467 switch (info->cmd) { in bnx2x_set_rxnfc()
3472 return -EOPNOTSUPP; in bnx2x_set_rxnfc()
3488 rxfh->hfunc = ETH_RSS_HASH_TOP; in bnx2x_get_rxfh()
3489 if (!rxfh->indir) in bnx2x_get_rxfh()
3493 bnx2x_get_rss_ind_table(&bp->rss_conf_obj, ind_table); in bnx2x_get_rxfh()
3497 * indirection table is a u8 array while indir->ring_index in bnx2x_get_rxfh()
3505 rxfh->indir[i] = ind_table[i] - bp->fp->cl_id; in bnx2x_get_rxfh()
3520 if (rxfh->key || in bnx2x_set_rxfh()
3521 (rxfh->hfunc != ETH_RSS_HASH_NO_CHANGE && in bnx2x_set_rxfh()
3522 rxfh->hfunc != ETH_RSS_HASH_TOP)) in bnx2x_set_rxfh()
3523 return -EOPNOTSUPP; in bnx2x_set_rxfh()
3525 if (!rxfh->indir) in bnx2x_set_rxfh()
3532 * while indir->ring_index points to an array of u32. in bnx2x_set_rxfh()
3538 bp->rss_conf_obj.ind_table[i] = rxfh->indir[i] + bp->fp->cl_id; in bnx2x_set_rxfh()
3541 if (bp->state == BNX2X_STATE_OPEN) in bnx2x_set_rxfh()
3548 * bnx2x_get_channels - gets the number of RSS queues.
3558 channels->max_combined = BNX2X_MAX_RSS_COUNT(bp); in bnx2x_get_channels()
3559 channels->combined_count = BNX2X_NUM_ETH_QUEUES(bp); in bnx2x_get_channels()
3563 * bnx2x_change_num_queues - change the number of RSS queues.
3568 * Re-configure interrupt mode to get the new number of MSI-X
3569 * vectors and re-add NAPI objects.
3574 bp->num_ethernet_queues = num_rss; in bnx2x_change_num_queues()
3575 bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues; in bnx2x_change_num_queues()
3576 BNX2X_DEV_INFO("set number of queues to %d\n", bp->num_queues); in bnx2x_change_num_queues()
3581 * bnx2x_set_channels - sets the number of RSS queues.
3592 "set-channels command parameters: rx = %d, tx = %d, other = %d, combined = %d\n", in bnx2x_set_channels()
3593 channels->rx_count, channels->tx_count, channels->other_count, in bnx2x_set_channels()
3594 channels->combined_count); in bnx2x_set_channels()
3596 if (pci_num_vf(bp->pdev)) { in bnx2x_set_channels()
3598 return -EPERM; in bnx2x_set_channels()
3604 if (channels->rx_count || channels->tx_count || channels->other_count in bnx2x_set_channels()
3605 || (channels->combined_count == 0) || in bnx2x_set_channels()
3606 (channels->combined_count > BNX2X_MAX_RSS_COUNT(bp))) { in bnx2x_set_channels()
3608 return -EINVAL; in bnx2x_set_channels()
3612 if (channels->combined_count == BNX2X_NUM_ETH_QUEUES(bp)) { in bnx2x_set_channels()
3622 bnx2x_change_num_queues(bp, channels->combined_count); in bnx2x_set_channels()
3626 bnx2x_change_num_queues(bp, channels->combined_count); in bnx2x_set_channels()
3635 if (bp->flags & PTP_SUPPORTED) { in bnx2x_get_ts_info()
3636 info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE | in bnx2x_get_ts_info()
3641 if (bp->ptp_clock) in bnx2x_get_ts_info()
3642 info->phc_index = ptp_clock_index(bp->ptp_clock); in bnx2x_get_ts_info()
3644 info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) | in bnx2x_get_ts_info()
3649 info->tx_types = (1 << HWTSTAMP_TX_OFF)|(1 << HWTSTAMP_TX_ON); in bnx2x_get_ts_info()
3725 netdev->ethtool_ops = (IS_PF(bp)) ? in bnx2x_set_ethtool_ops()