Lines Matching refs:vars

216 				      struct link_vars *vars, u8 notify);
498 static u32 bnx2x_ets_get_min_w_val_nig(const struct link_vars *vars)
502 if (vars->link_up) {
503 if (vars->line_speed == SPEED_20000)
570 const struct link_vars *vars)
574 const u32 min_w_val = bnx2x_ets_get_min_w_val_nig(vars);
745 const struct link_vars *vars)
755 bnx2x_ets_e3b0_nig_disabled(params, vars);
768 struct link_vars *vars)
776 bnx2x_status = bnx2x_ets_e3b0_disabled(params, vars);
1133 const struct link_vars *vars,
1140 const u32 min_w_val_nig = bnx2x_ets_get_min_w_val_nig(vars);
1354 struct link_vars *vars,
1375 if (vars->flow_ctrl & BNX2X_FLOW_CTRL_RX)
1379 if (vars->flow_ctrl & BNX2X_FLOW_CTRL_TX)
1472 struct link_vars *vars)
1550 struct link_vars *vars, u8 lb)
1572 switch (vars->line_speed) {
1587 vars->line_speed);
1590 if (!(vars->flow_ctrl & BNX2X_FLOW_CTRL_TX))
1593 if (!(vars->flow_ctrl & BNX2X_FLOW_CTRL_RX))
1596 if (vars->duplex == DUPLEX_HALF)
1603 if (vars->eee_status & SHMEM_EEE_ADV_STATUS_MASK) {
1642 ((vars->flow_ctrl & BNX2X_FLOW_CTRL_TX) != 0), 1);
1643 vars->mac_type = MAC_TYPE_UMAC;
1739 struct link_vars *vars, u8 lb)
1747 bnx2x_xmac_init(params, vars->line_speed);
1777 bnx2x_update_pfc_xmac(params, vars, 0);
1779 if (vars->eee_status & SHMEM_EEE_ADV_STATUS_MASK) {
1791 if ((vars->line_speed == SPEED_20000) &&
1801 ((vars->flow_ctrl & BNX2X_FLOW_CTRL_TX) != 0), 1);
1803 vars->mac_type = MAC_TYPE_XMAC;
1809 struct link_vars *vars, u8 lb)
1826 if (vars->phy_flags & PHY_XGXS_FLAG) {
1857 if (vars->flow_ctrl & BNX2X_FLOW_CTRL_RX)
1862 if (vars->flow_ctrl & BNX2X_FLOW_CTRL_TX)
1929 (vars->flow_ctrl & BNX2X_FLOW_CTRL_TX))
1937 vars->mac_type = MAC_TYPE_EMAC;
1942 struct link_vars *vars)
1952 (vars->flow_ctrl & BNX2X_FLOW_CTRL_RX))
1963 (vars->flow_ctrl & BNX2X_FLOW_CTRL_TX))
1971 struct link_vars *vars,
1985 (vars->flow_ctrl & BNX2X_FLOW_CTRL_RX))
1997 (vars->flow_ctrl & BNX2X_FLOW_CTRL_TX))
2123 struct link_vars *vars,
2219 struct link_vars *vars,
2231 vars->link_status |= LINK_STATUS_PFC_ENABLED;
2233 vars->link_status &= ~LINK_STATUS_PFC_ENABLED;
2235 bnx2x_update_mng(params, vars->link_status);
2238 bnx2x_update_pfc_nig(params, vars, pfc_params);
2240 if (!vars->link_up)
2246 if (vars->mac_type == MAC_TYPE_XMAC)
2247 bnx2x_update_pfc_xmac(params, vars, 0);
2254 bnx2x_emac_enable(params, vars, 0);
2258 bnx2x_update_pfc_bmac2(params, vars, bmac_loopback);
2260 bnx2x_update_pfc_bmac1(params, vars);
2265 (vars->flow_ctrl & BNX2X_FLOW_CTRL_TX))
2273 struct link_vars *vars,
2315 bnx2x_update_pfc_bmac1(params, vars);
2337 struct link_vars *vars,
2396 bnx2x_update_pfc_bmac2(params, vars, is_lb);
2402 struct link_vars *vars,
2424 rc = bnx2x_bmac2_enable(params, vars, is_lb);
2426 rc = bnx2x_bmac1_enable(params, vars, is_lb);
2433 (vars->flow_ctrl & BNX2X_FLOW_CTRL_TX))
2442 vars->mac_type = MAC_TYPE_BMAC;
2904 struct link_vars *vars)
2921 vars->eee_status &= ~(SHMEM_EEE_TIMER_MASK | SHMEM_EEE_TIME_OUTPUT_BIT);
2925 vars->eee_status |= (eee_idle & SHMEM_EEE_TIMER_MASK) |
2930 vars->eee_status |= eee_mode;
2937 struct link_vars *vars, u8 mode)
2939 vars->eee_status |= ((u32) mode) << SHMEM_EEE_SUPPORTED_SHIFT;
2941 /* Propogate params' bits --> vars (for migration exposure) */
2943 vars->eee_status |= SHMEM_EEE_LPI_REQUESTED_BIT;
2945 vars->eee_status &= ~SHMEM_EEE_LPI_REQUESTED_BIT;
2948 vars->eee_status |= SHMEM_EEE_REQUESTED_BIT;
2950 vars->eee_status &= ~SHMEM_EEE_REQUESTED_BIT;
2952 return bnx2x_eee_set_timers(params, vars);
2957 struct link_vars *vars)
2966 vars->eee_status &= ~SHMEM_EEE_ADV_STATUS_MASK;
2973 struct link_vars *vars, u8 modes)
2992 vars->eee_status &= ~SHMEM_EEE_ADV_STATUS_MASK;
2993 vars->eee_status |= (modes << SHMEM_EEE_ADV_STATUS_SHIFT);
3010 struct link_vars *vars)
3023 if (vars->line_speed == SPEED_100)
3031 if (vars->line_speed == SPEED_1000)
3039 if (vars->line_speed == SPEED_10000)
3045 vars->eee_status &= ~SHMEM_EEE_LP_ADV_STATUS_MASK;
3046 vars->eee_status |= (lp_adv << SHMEM_EEE_LP_ADV_STATUS_SHIFT);
3050 vars->eee_status |= SHMEM_EEE_ACTIVE_BIT;
3420 struct link_vars *vars)
3450 vars->link_status |= LINK_STATUS_AUTO_NEGOTIATE_ENABLED;
3462 struct link_vars *vars)
3472 bnx2x_calc_ieee_aneg_adv(phy, params, &vars->ieee_fc);
3473 if ((vars->ieee_fc &
3478 if ((vars->ieee_fc &
3487 static void bnx2x_pause_resolve(struct link_vars *vars, u32 pause_result)
3491 vars->flow_ctrl = BNX2X_FLOW_CTRL_TX;
3495 vars->flow_ctrl = BNX2X_FLOW_CTRL_RX;
3502 vars->flow_ctrl = BNX2X_FLOW_CTRL_BOTH;
3509 vars->link_status |= LINK_STATUS_LINK_PARTNER_SYMMETRIC_PAUSE;
3511 vars->link_status |= LINK_STATUS_LINK_PARTNER_ASYMMETRIC_PAUSE;
3517 struct link_vars *vars)
3566 bnx2x_pause_resolve(vars, pause_result);
3572 struct link_vars *vars)
3575 vars->flow_ctrl = BNX2X_FLOW_CTRL_NONE;
3579 bnx2x_ext_phy_update_adv_fc(phy, params, vars);
3581 vars->flow_ctrl = phy->req_flow_ctrl;
3583 vars->flow_ctrl = params->req_fc_auto_adv;
3584 else if (vars->link_status & LINK_STATUS_AUTO_NEGOTIATE_COMPLETE) {
3586 bnx2x_ext_phy_update_adv_fc(phy, params, vars);
3610 struct link_vars *vars)
3648 struct link_vars *vars,
3679 vars->check_kr2_recovery_cnt = CHECK_KR2_RECOVERY_CNT;
3711 struct link_vars *vars) {
3739 if (((vars->line_speed == SPEED_AUTO_NEG) &&
3741 (vars->line_speed == SPEED_1000)) {
3749 if (((vars->line_speed == SPEED_AUTO_NEG) &&
3751 (vars->line_speed == SPEED_10000)) {
3803 bnx2x_ext_phy_set_pause(params, phy, vars);
3804 vars->rx_tx_asic_rst = MAX_KR_LINK_RETRY;
3827 bnx2x_warpcore_enable_AN_KR2(phy, params, vars);
3854 bnx2x_disable_kr2(params, vars, phy);
3863 struct link_vars *vars)
4359 struct link_vars *vars)
4365 vars->turn_to_run_wc_rt = vars->turn_to_run_wc_rt ? 0 : 1;
4367 if (!vars->turn_to_run_wc_rt)
4370 if (vars->rx_tx_asic_rst) {
4387 vars->rx_tx_asic_rst = 0;
4397 vars->rx_tx_asic_rst--;
4399 vars->rx_tx_asic_rst);
4450 struct link_vars *vars)
4462 vars->line_speed, serdes_net_if);
4465 vars->phy_flags |= PHY_XGXS_FLAG;
4470 vars->phy_flags |= PHY_SGMII_FLAG;
4479 bnx2x_warpcore_enable_AN_KR(phy, params, vars);
4482 bnx2x_warpcore_set_10G_KR(phy, params, vars);
4488 if (vars->line_speed == SPEED_10000) {
4525 if (vars->line_speed != SPEED_20000) {
4537 bnx2x_warpcore_enable_AN_KR(phy, params, vars);
4657 struct link_vars *vars)
4661 if (vars->link_status & LINK_STATUS_PHYSICAL_LINK_FLAG)
4662 vars->phy_flags |= PHY_PHYSICAL_LINK_FLAG;
4663 vars->link_up = (vars->link_status & LINK_STATUS_LINK_UP);
4664 if (vars->link_up) {
4667 vars->phy_link_up = 1;
4668 vars->duplex = DUPLEX_FULL;
4669 switch (vars->link_status &
4672 vars->duplex = DUPLEX_HALF;
4675 vars->line_speed = SPEED_10;
4679 vars->duplex = DUPLEX_HALF;
4683 vars->line_speed = SPEED_100;
4687 vars->duplex = DUPLEX_HALF;
4690 vars->line_speed = SPEED_1000;
4694 vars->duplex = DUPLEX_HALF;
4697 vars->line_speed = SPEED_2500;
4701 vars->line_speed = SPEED_10000;
4704 vars->line_speed = SPEED_20000;
4709 vars->flow_ctrl = 0;
4710 if (vars->link_status & LINK_STATUS_TX_FLOW_CONTROL_ENABLED)
4711 vars->flow_ctrl |= BNX2X_FLOW_CTRL_TX;
4713 if (vars->link_status & LINK_STATUS_RX_FLOW_CONTROL_ENABLED)
4714 vars->flow_ctrl |= BNX2X_FLOW_CTRL_RX;
4716 if (!vars->flow_ctrl)
4717 vars->flow_ctrl = BNX2X_FLOW_CTRL_NONE;
4719 if (vars->line_speed &&
4720 ((vars->line_speed == SPEED_10) ||
4721 (vars->line_speed == SPEED_100))) {
4722 vars->phy_flags |= PHY_SGMII_FLAG;
4724 vars->phy_flags &= ~PHY_SGMII_FLAG;
4726 if (vars->line_speed &&
4728 (vars->line_speed == SPEED_1000))
4729 vars->phy_flags |= PHY_SGMII_FLAG;
4731 link_10g_plus = (vars->line_speed >= SPEED_10000);
4735 vars->mac_type = MAC_TYPE_XMAC;
4737 vars->mac_type = MAC_TYPE_BMAC;
4740 vars->mac_type = MAC_TYPE_UMAC;
4742 vars->mac_type = MAC_TYPE_EMAC;
4747 vars->phy_link_up = 0;
4749 vars->line_speed = 0;
4750 vars->duplex = DUPLEX_FULL;
4751 vars->flow_ctrl = BNX2X_FLOW_CTRL_NONE;
4754 vars->mac_type = MAC_TYPE_NONE;
4755 if (vars->link_status & LINK_STATUS_PHYSICAL_LINK_FLAG)
4756 vars->phy_flags |= PHY_HALF_OPEN_CONN_FLAG;
4757 if (vars->link_status & LINK_STATUS_SFP_TX_FAULT)
4758 vars->phy_flags |= PHY_SFP_TX_FAULT_FLAG;
4763 struct link_vars *vars)
4769 set_phy_vars(params, vars);
4771 vars->link_status = REG_RD(bp, params->shmem_base +
4778 vars->link_status |= LINK_STATUS_LINK_UP;
4781 vars->eee_status = REG_RD(bp, params->shmem2_base +
4785 vars->phy_flags = PHY_XGXS_FLAG;
4786 bnx2x_sync_link(params, vars);
4809 vars->aeu_int_mask = REG_RD(bp, sync_offset);
4812 if (vars->link_status & LINK_STATUS_PFC_ENABLED)
4824 vars->link_status, vars->phy_link_up, vars->aeu_int_mask);
4826 vars->line_speed, vars->duplex, vars->flow_ctrl);
4991 struct link_vars *vars,
5003 if (vars->line_speed == SPEED_AUTO_NEG)
5021 if (vars->line_speed == SPEED_AUTO_NEG)
5035 if (vars->line_speed == SPEED_AUTO_NEG) {
5095 struct link_vars *vars)
5125 if (!((vars->line_speed == SPEED_1000) ||
5126 (vars->line_speed == SPEED_100) ||
5127 (vars->line_speed == SPEED_10))) {
5131 if (vars->line_speed == SPEED_10000)
5225 struct link_vars *vars)
5247 if (!(vars->line_speed == SPEED_AUTO_NEG)) {
5259 switch (vars->line_speed) {
5274 vars->line_speed);
5331 struct link_vars *vars,
5372 bnx2x_pause_resolve(vars, pause_result);
5378 struct link_vars *vars,
5382 vars->flow_ctrl = BNX2X_FLOW_CTRL_NONE;
5388 bnx2x_update_adv_fc(phy, params, vars, gp_status);
5390 vars->flow_ctrl = phy->req_flow_ctrl;
5392 vars->flow_ctrl = params->req_fc_auto_adv;
5394 (!(vars->phy_flags & PHY_SGMII_FLAG))) {
5396 vars->flow_ctrl = params->req_fc_auto_adv;
5399 bnx2x_update_adv_fc(phy, params, vars, gp_status);
5401 DP(NETIF_MSG_LINK, "flow_ctrl 0x%x\n", vars->flow_ctrl);
5474 struct link_vars *vars,
5478 vars->link_status |=
5482 vars->link_status |=
5487 struct link_vars *vars,
5494 vars->link_status |= LINK_STATUS_AUTO_NEGOTIATE_ENABLED;
5498 vars->phy_link_up = 1;
5499 vars->link_status |= LINK_STATUS_LINK_UP;
5503 vars->line_speed = SPEED_10;
5505 vars->link_status |= LINK_10TFD;
5507 vars->link_status |= LINK_10THD;
5511 vars->line_speed = SPEED_100;
5513 vars->link_status |= LINK_100TXFD;
5515 vars->link_status |= LINK_100TXHD;
5520 vars->line_speed = SPEED_1000;
5522 vars->link_status |= LINK_1000TFD;
5524 vars->link_status |= LINK_1000THD;
5528 vars->line_speed = SPEED_2500;
5530 vars->link_status |= LINK_2500TFD;
5532 vars->link_status |= LINK_2500THD;
5548 vars->line_speed = SPEED_10000;
5549 vars->link_status |= LINK_10GTFD;
5553 vars->line_speed = SPEED_20000;
5554 vars->link_status |= LINK_20GTFD;
5565 vars->phy_link_up = 0;
5567 vars->duplex = DUPLEX_FULL;
5568 vars->flow_ctrl = BNX2X_FLOW_CTRL_NONE;
5569 vars->mac_type = MAC_TYPE_NONE;
5572 vars->phy_link_up, vars->line_speed);
5578 struct link_vars *vars)
5597 rc = bnx2x_get_link_speed_duplex(phy, params, vars, link_up, speed_mask,
5604 vars->duplex = duplex;
5605 bnx2x_flow_ctrl_resolve(phy, params, vars, gp_status);
5607 bnx2x_xgxs_an_resolve(phy, params, vars,
5620 (vars->link_status & LINK_STATUS_AUTO_NEGOTIATE_COMPLETE)) {
5627 vars->link_status |=
5631 vars->link_status |=
5638 vars->link_status |=
5641 vars->link_status |=
5646 vars->duplex, vars->flow_ctrl, vars->link_status);
5652 struct link_vars *vars)
5678 bnx2x_ext_phy_resolve_fc(phy, params, vars);
5705 vars->link_status |=
5713 vars->link_status |=
5716 bnx2x_ext_phy_resolve_fc(phy, params, vars);
5717 vars->duplex = duplex;
5721 if ((vars->link_status & LINK_STATUS_AUTO_NEGOTIATE_COMPLETE) &&
5729 vars->link_status |=
5733 vars->link_status |=
5740 vars->link_status |=
5743 vars->link_status |=
5763 rc = bnx2x_get_link_speed_duplex(phy, params, vars, link_up, gp_speed,
5769 vars->rx_tx_asic_rst = MAX_KR_LINK_RETRY;
5772 vars->duplex, vars->flow_ctrl, vars->link_status);
5815 struct link_vars *vars)
5827 switch (vars->line_speed) {
5847 vars->line_speed);
5851 if (vars->duplex == DUPLEX_HALF)
5857 bnx2x_set_led(params, vars, LED_MODE_OPER, vars->line_speed);
5887 struct link_vars *vars)
5892 if (!(vars->phy_flags & PHY_SGMII_FLAG)) {
5899 if (vars->line_speed != SPEED_AUTO_NEG ||
5905 bnx2x_set_autoneg(phy, params, vars, 0);
5908 bnx2x_program_serdes(phy, params, vars);
5918 vars->ieee_fc);
5921 bnx2x_set_autoneg(phy, params, vars, enable_cl73);
5930 bnx2x_initialize_sgmii_process(phy, params, vars);
5936 struct link_vars *vars)
5939 vars->phy_flags |= PHY_XGXS_FLAG;
5949 vars->phy_flags |= PHY_SGMII_FLAG;
5951 vars->phy_flags &= ~PHY_SGMII_FLAG;
5953 bnx2x_calc_ieee_aneg_adv(phy, params, &vars->ieee_fc);
6083 struct link_vars *vars, u8 is_10g_plus)
6095 if (vars->phy_link_up) {
6264 struct link_vars *vars, u8 mode, u32 speed)
6307 if (!vars->link_up)
6411 int bnx2x_test_link(struct link_params *params, struct link_vars *vars,
6493 struct link_vars *vars)
6502 vars->line_speed = params->phy[INT_PHY].req_line_speed;
6509 bnx2x_prepare_xgxs(&params->phy[INT_PHY], params, vars);
6518 if (vars->line_speed == SPEED_AUTO_NEG &&
6523 params->phy[INT_PHY].config_init(phy, params, vars);
6529 vars->line_speed = params->phy[INT_PHY].req_line_speed;
6535 vars->link_status |= LINK_STATUS_SERDES_LINK;
6546 vars->link_status |= LINK_STATUS_SERDES_LINK;
6557 params, vars);
6598 struct link_vars *vars)
6604 bnx2x_set_led(params, vars, LED_MODE_OFF, 0);
6605 vars->phy_flags &= ~PHY_PHYSICAL_LINK_FLAG;
6607 vars->mac_type = MAC_TYPE_NONE;
6610 vars->link_status &= ~LINK_UPDATE_MASK;
6611 vars->line_speed = 0;
6612 bnx2x_update_mng(params, vars->link_status);
6633 vars->eee_status &= ~(SHMEM_EEE_LP_ADV_STATUS_MASK |
6636 bnx2x_update_mng_eee(params, vars->eee_status);
6645 struct link_vars *vars,
6652 vars->link_status |= (LINK_STATUS_LINK_UP |
6654 vars->phy_flags |= PHY_PHYSICAL_LINK_FLAG;
6656 if (vars->flow_ctrl & BNX2X_FLOW_CTRL_TX)
6657 vars->link_status |=
6660 if (vars->flow_ctrl & BNX2X_FLOW_CTRL_RX)
6661 vars->link_status |=
6665 if (bnx2x_xmac_enable(params, vars, 0) ==
6668 vars->link_up = 0;
6669 vars->phy_flags |= PHY_HALF_OPEN_CONN_FLAG;
6670 vars->link_status &= ~LINK_STATUS_LINK_UP;
6673 bnx2x_umac_enable(params, vars, 0);
6674 bnx2x_set_led(params, vars,
6675 LED_MODE_OPER, vars->line_speed);
6677 if ((vars->eee_status & SHMEM_EEE_ACTIVE_BIT) &&
6678 (vars->eee_status & SHMEM_EEE_LPI_REQUESTED_BIT)) {
6690 if (bnx2x_bmac_enable(params, vars, 0, 1) ==
6693 vars->link_up = 0;
6694 vars->phy_flags |= PHY_HALF_OPEN_CONN_FLAG;
6695 vars->link_status &= ~LINK_STATUS_LINK_UP;
6698 bnx2x_set_led(params, vars,
6701 rc = bnx2x_emac_program(params, vars);
6702 bnx2x_emac_enable(params, vars, 0);
6705 if ((vars->link_status &
6707 && (!(vars->phy_flags & PHY_SGMII_FLAG)) &&
6715 rc |= bnx2x_pbf_update(params, vars->flow_ctrl,
6716 vars->line_speed);
6722 bnx2x_update_mng(params, vars->link_status);
6723 bnx2x_update_mng_eee(params, vars->eee_status);
6727 bnx2x_check_half_open_conn(params, vars, 0);
6746 int bnx2x_link_update(struct link_params *params, struct link_vars *vars)
6755 u16 ext_phy_line_speed = 0, prev_line_speed = vars->line_speed;
6757 vars->phy_flags &= ~PHY_HALF_OPEN_CONN_FLAG;
6758 vars->link_status &= ~LINK_UPDATE_MASK;
6768 /* different consideration, since vars holds inner state */
6769 phy_vars[phy_index].eee_status = vars->eee_status;
6776 port, (vars->phy_flags & PHY_XGXS_FLAG),
6797 * is up. Note that instead of the common vars, a temporary
6798 * vars argument is used since each phy may have different link/
6854 prev_line_speed = vars->line_speed;
6864 params, vars);
6865 /* The INT_PHY flow control reside in the vars. This include the
6868 * to the vars. The ext_phy_line_speed is needed to check if the
6873 vars->flow_ctrl = phy_vars[active_external_phy].flow_ctrl;
6877 vars->link_status |= phy_vars[active_external_phy].link_status;
6893 vars->duplex = phy_vars[active_external_phy].duplex;
6896 vars->link_status |= LINK_STATUS_SERDES_LINK;
6898 vars->link_status &= ~LINK_STATUS_SERDES_LINK;
6900 vars->eee_status = phy_vars[active_external_phy].eee_status;
6916 DP(NETIF_MSG_LINK, "vars->flow_ctrl = 0x%x, vars->link_status = 0x%x,"
6917 " ext_phy_line_speed = %d\n", vars->flow_ctrl,
6918 vars->link_status, ext_phy_line_speed);
6924 if (vars->phy_link_up) {
6926 (ext_phy_line_speed != vars->line_speed)) {
6929 " link speed %d\n", vars->line_speed,
6931 vars->phy_link_up = 0;
6932 } else if (prev_line_speed != vars->line_speed) {
6940 link_10g_plus = (vars->line_speed >= SPEED_10000);
6942 bnx2x_link_int_ack(params, vars, link_10g_plus);
6954 vars->phy_link_up,
6959 && ext_phy_link_up && !vars->phy_link_up) {
6960 vars->line_speed = ext_phy_line_speed;
6961 if (vars->line_speed < SPEED_1000)
6962 vars->phy_flags |= PHY_SGMII_FLAG;
6964 vars->phy_flags &= ~PHY_SGMII_FLAG;
6969 vars);
6975 vars->link_up = (vars->phy_link_up &&
6982 vars->link_status |= LINK_STATUS_PFC_ENABLED;
6984 vars->link_status &= ~LINK_STATUS_PFC_ENABLED;
6986 if (vars->link_up)
6987 rc = bnx2x_update_link_up(params, vars, link_10g_plus);
6989 rc = bnx2x_update_link_down(params, vars);
7036 struct link_vars *vars)
7046 vars->link_status |= LINK_STATUS_AUTO_NEGOTIATE_COMPLETE;
7048 vars->link_status |= LINK_STATUS_PARALLEL_DETECTION_USED;
7056 struct link_vars *vars)
7061 vars->flow_ctrl = phy->req_flow_ctrl;
7065 if (bnx2x_ext_phy_resolve_fc(phy, params, vars) &&
7066 (vars->flow_ctrl == BNX2X_FLOW_CTRL_NONE)) {
7082 bnx2x_pause_resolve(vars, pause_result);
7265 struct link_vars *vars)
7274 bnx2x_calc_ieee_aneg_adv(phy, params, &vars->ieee_fc);
7275 if ((vars->ieee_fc &
7280 if ((vars->ieee_fc &
7285 if ((vars->ieee_fc &
7316 struct link_vars *vars)
7335 bnx2x_8073_set_pause_cl37(params, phy, vars);
7452 bnx2x_ext_phy_set_pause(params, phy, vars);
7464 struct link_vars *vars)
7545 vars->line_speed = SPEED_10000;
7550 vars->line_speed = SPEED_2500;
7555 vars->line_speed = SPEED_1000;
7575 if (vars->line_speed == SPEED_1000) {
7587 bnx2x_ext_phy_10G_an_resolve(bp, phy, vars);
7588 bnx2x_8073_resolve_fc(phy, params, vars);
7589 vars->duplex = DUPLEX_FULL;
7592 if (vars->link_status & LINK_STATUS_AUTO_NEGOTIATE_COMPLETE) {
7597 vars->link_status |=
7600 vars->link_status |=
7628 struct link_vars *vars)
7655 struct link_vars *vars)
7680 vars->line_speed = SPEED_10000;
7681 bnx2x_ext_phy_resolve_fc(phy, params, vars);
8776 struct link_vars *vars)
8813 vars->line_speed = SPEED_1000;
8815 vars->line_speed = SPEED_10000;
8816 bnx2x_ext_phy_resolve_fc(phy, params, vars);
8817 vars->duplex = DUPLEX_FULL;
8821 if (vars->line_speed == SPEED_10000) {
8827 vars->fault_detected = 1;
8838 struct link_vars *vars)
8944 struct link_vars *vars)
8946 return bnx2x_8706_8726_read_status(phy, params, vars);
9000 struct link_vars *vars)
9004 u8 link_up = bnx2x_8706_8726_read_status(phy, params, vars);
9012 vars->line_speed = 0;
9021 struct link_vars *vars)
9057 bnx2x_ext_phy_set_pause(params, phy, vars);
9239 struct link_vars *vars)
9410 struct link_vars *vars)
9429 vars->line_speed = 0;
9515 vars->line_speed = SPEED_10000;
9520 vars->line_speed = SPEED_1000;
9530 if (vars->line_speed == SPEED_10000) {
9538 vars->fault_detected = 1;
9543 bnx2x_ext_phy_resolve_fc(phy, params, vars);
9544 vars->duplex = DUPLEX_FULL;
9545 DP(NETIF_MSG_LINK, "duplex = 0x%x\n", vars->duplex);
9720 struct link_vars *vars)
9734 bnx2x_ext_phy_set_pause(params, phy, vars);
9867 struct link_vars *vars)
9879 return bnx2x_848xx_cmn_config_init(phy, params, vars);
9942 struct link_vars *vars)
10042 struct link_vars *vars)
10058 return bnx2x_eee_disable(phy, params, vars);
10063 struct link_vars *vars)
10076 return bnx2x_eee_advertise(phy, params, vars, SHMEM_EEE_10G_ADV);
10082 struct link_vars *vars)
10119 temp = vars->line_speed;
10120 vars->line_speed = SPEED_10000;
10121 bnx2x_set_autoneg(&params->phy[INT_PHY], params, vars, 0);
10122 bnx2x_program_serdes(&params->phy[INT_PHY], params, vars);
10123 vars->line_speed = temp;
10172 bnx2x_84833_pair_swap_cfg(phy, params, vars);
10186 rc = bnx2x_848xx_cmn_config_init(phy, params, vars);
10213 rc = bnx2x_eee_initial_config(params, vars, SHMEM_EEE_10G_ADV);
10216 bnx2x_8483x_disable_eee(phy, params, vars);
10224 rc = bnx2x_8483x_enable_eee(phy, params, vars);
10226 rc = bnx2x_8483x_disable_eee(phy, params, vars);
10232 vars->eee_status &= ~SHMEM_EEE_SUPPORTED_MASK;
10248 struct link_vars *vars)
10266 vars->line_speed = SPEED_10000;
10267 vars->duplex = DUPLEX_FULL;
10269 bnx2x_ext_phy_10G_an_resolve(bp, phy, vars);
10289 vars->line_speed = SPEED_10;
10291 vars->line_speed = SPEED_100;
10293 vars->line_speed = SPEED_1000;
10295 vars->line_speed = 0;
10301 vars->duplex = DUPLEX_FULL;
10303 vars->duplex = DUPLEX_HALF;
10307 vars->line_speed,
10308 (vars->duplex == DUPLEX_FULL));
10315 vars->link_status |=
10322 vars->link_status |=
10328 vars->line_speed);
10329 bnx2x_ext_phy_resolve_fc(phy, params, vars);
10335 vars->link_status |=
10338 vars->link_status |=
10341 vars->link_status |=
10344 vars->link_status |=
10347 vars->link_status |=
10354 vars->link_status |=
10357 vars->link_status |=
10364 vars->link_status |=
10370 bnx2x_eee_an_resolve(phy, params, vars);
10737 struct link_vars *vars)
10788 bnx2x_calc_ieee_aneg_adv(phy, params, &vars->ieee_fc);
10790 if ((vars->ieee_fc & MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC) ==
10794 if ((vars->ieee_fc & MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH) ==
10890 rc = bnx2x_eee_initial_config(params, vars, SHMEM_EEE_1G_ADV);
10893 bnx2x_eee_disable(phy, params, vars);
10903 bnx2x_eee_advertise(phy, params, vars,
10907 bnx2x_eee_disable(phy, params, vars);
10910 vars->eee_status &= ~SHMEM_EEE_1G_ADV <<
11005 struct link_vars *vars)
11028 vars->line_speed = SPEED_1000;
11029 vars->duplex = DUPLEX_FULL;
11031 vars->line_speed = SPEED_1000;
11032 vars->duplex = DUPLEX_HALF;
11034 vars->line_speed = SPEED_100;
11035 vars->duplex = DUPLEX_FULL;
11039 vars->line_speed = SPEED_100;
11040 vars->duplex = DUPLEX_HALF;
11042 vars->line_speed = SPEED_10;
11043 vars->duplex = DUPLEX_FULL;
11045 vars->line_speed = SPEED_10;
11046 vars->duplex = DUPLEX_HALF;
11048 vars->line_speed = 0;
11052 vars->line_speed,
11053 (vars->duplex == DUPLEX_FULL));
11060 vars->link_status |=
11066 vars->link_status |=
11070 vars->line_speed);
11072 bnx2x_ext_phy_resolve_fc(phy, params, vars);
11074 if (vars->link_status & LINK_STATUS_AUTO_NEGOTIATE_COMPLETE) {
11079 vars->link_status |=
11082 vars->link_status |=
11085 vars->link_status |=
11088 vars->link_status |=
11091 vars->link_status |=
11096 vars->link_status |=
11099 vars->link_status |=
11104 bnx2x_eee_an_resolve(phy, params, vars);
11164 struct link_vars *vars)
11183 bnx2x_ext_phy_set_pause(params, phy, vars);
11204 struct link_vars *vars)
11227 vars->line_speed = SPEED_10000;
11228 vars->duplex = DUPLEX_FULL;
11231 bnx2x_ext_phy_10G_an_resolve(bp, phy, vars);
11232 bnx2x_ext_phy_resolve_fc(phy, params, vars);
11236 vars->link_status |=
12327 struct link_vars *vars)
12330 vars->link_up = 1;
12331 vars->line_speed = SPEED_10000;
12332 vars->duplex = DUPLEX_FULL;
12333 vars->flow_ctrl = BNX2X_FLOW_CTRL_NONE;
12334 vars->mac_type = MAC_TYPE_BMAC;
12336 vars->phy_flags = PHY_XGXS_FLAG;
12341 bnx2x_bmac_enable(params, vars, 1, 1);
12347 struct link_vars *vars)
12350 vars->link_up = 1;
12351 vars->line_speed = SPEED_1000;
12352 vars->duplex = DUPLEX_FULL;
12353 vars->flow_ctrl = BNX2X_FLOW_CTRL_NONE;
12354 vars->mac_type = MAC_TYPE_EMAC;
12356 vars->phy_flags = PHY_XGXS_FLAG;
12360 bnx2x_emac_enable(params, vars, 1);
12361 bnx2x_emac_program(params, vars);
12366 struct link_vars *vars)
12369 vars->link_up = 1;
12371 vars->line_speed = SPEED_10000;
12373 vars->line_speed = params->req_line_speed[0];
12374 vars->duplex = DUPLEX_FULL;
12375 vars->flow_ctrl = BNX2X_FLOW_CTRL_NONE;
12376 vars->mac_type = MAC_TYPE_XMAC;
12377 vars->phy_flags = PHY_XGXS_FLAG;
12387 bnx2x_xmac_enable(params, vars, 1);
12392 struct link_vars *vars)
12395 vars->link_up = 1;
12396 vars->line_speed = SPEED_1000;
12397 vars->duplex = DUPLEX_FULL;
12398 vars->flow_ctrl = BNX2X_FLOW_CTRL_NONE;
12399 vars->mac_type = MAC_TYPE_UMAC;
12400 vars->phy_flags = PHY_XGXS_FLAG;
12401 bnx2x_umac_enable(params, vars, 1);
12407 struct link_vars *vars)
12411 vars->link_up = 1;
12412 vars->flow_ctrl = BNX2X_FLOW_CTRL_NONE;
12413 vars->duplex = DUPLEX_FULL;
12415 vars->line_speed = SPEED_1000;
12418 vars->line_speed = SPEED_20000;
12420 vars->line_speed = SPEED_10000;
12424 bnx2x_link_initialize(params, vars);
12428 bnx2x_umac_enable(params, vars, 0);
12430 bnx2x_emac_program(params, vars);
12431 bnx2x_emac_enable(params, vars, 0);
12435 bnx2x_xmac_enable(params, vars, 0);
12437 bnx2x_bmac_enable(params, vars, 0, 1);
12455 bnx2x_set_led(params, vars, LED_MODE_OPER, vars->line_speed);
12477 struct link_vars *vars)
12485 bnx2x_link_status_update(params, vars);
12521 if (vars->line_speed < SPEED_10000)
12522 bnx2x_umac_enable(params, vars, 0);
12524 bnx2x_xmac_enable(params, vars, 0);
12526 if (vars->line_speed < SPEED_10000)
12527 bnx2x_emac_enable(params, vars, 0);
12529 bnx2x_bmac_enable(params, vars, 0, !dont_clear_stat);
12552 struct link_vars *vars,
12558 bnx2x_link_reset(params, vars, 1);
12611 int bnx2x_phy_init(struct link_params *params, struct link_vars *vars)
12621 vars->link_status = 0;
12622 vars->phy_link_up = 0;
12623 vars->link_up = 0;
12624 vars->line_speed = 0;
12625 vars->duplex = DUPLEX_FULL;
12626 vars->flow_ctrl = BNX2X_FLOW_CTRL_NONE;
12627 vars->mac_type = MAC_TYPE_NONE;
12628 vars->phy_flags = 0;
12629 vars->check_kr2_recovery_cnt = 0;
12638 return bnx2x_avoid_link_flap(params, vars);
12643 bnx2x_cannot_avoid_link_flap(params, vars, lfa_status);
12652 bnx2x_emac_init(params, vars);
12655 vars->link_status |= LINK_STATUS_PFC_ENABLED;
12661 set_phy_vars(params, vars);
12666 bnx2x_init_bmac_loopback(params, vars);
12669 bnx2x_init_emac_loopback(params, vars);
12672 bnx2x_init_xmac_loopback(params, vars);
12675 bnx2x_init_umac_loopback(params, vars);
12679 bnx2x_init_xgxs_loopback(params, vars);
12688 bnx2x_link_initialize(params, vars);
12693 bnx2x_update_mng(params, vars->link_status);
12695 bnx2x_update_mng_eee(params, vars->eee_status);
12699 int bnx2x_link_reset(struct link_params *params, struct link_vars *vars,
12706 vars->link_status = 0;
12707 bnx2x_update_mng(params, vars->link_status);
12708 vars->eee_status &= ~(SHMEM_EEE_LP_ADV_STATUS_MASK |
12710 bnx2x_update_mng_eee(params, vars->eee_status);
12738 * Hold it as vars low
12742 bnx2x_set_led(params, vars, LED_MODE_OFF, 0);
12785 vars->link_up = 0;
12786 vars->phy_flags = 0;
12790 struct link_vars *vars)
12793 vars->link_up = 0;
12794 vars->phy_flags = 0;
12797 return bnx2x_link_reset(params, vars, 1);
13276 struct link_vars *vars)
13294 if ((vars->phy_flags & PHY_OVER_CURRENT_FLAG) == 0) {
13303 vars->phy_flags |= PHY_OVER_CURRENT_FLAG;
13307 vars->phy_flags &= ~PHY_OVER_CURRENT_FLAG;
13312 struct link_vars *vars, u32 status,
13318 u32 old_status = (vars->phy_flags & phy_flag) ? 1 : 0;
13334 DP(NETIF_MSG_LINK, "Link changed:[%x %x]->%x\n", vars->link_up,
13338 if ((vars->phy_flags & PHY_PHYSICAL_LINK_FLAG) == 0)
13345 vars->link_status &= ~LINK_STATUS_LINK_UP;
13346 vars->link_status |= link_flag;
13347 vars->link_up = 0;
13348 vars->phy_flags |= phy_flag;
13357 vars->link_status |= LINK_STATUS_LINK_UP;
13358 vars->link_status &= ~link_flag;
13359 vars->link_up = 1;
13360 vars->phy_flags &= ~phy_flag;
13366 bnx2x_sync_link(params, vars);
13368 bnx2x_set_led(params, vars, led_mode, SPEED_10000);
13371 bnx2x_update_mng(params, vars->link_status);
13374 vars->periodic_flags |= PERIODIC_FLAGS_LINK_EVENT;
13391 struct link_vars *vars,
13398 if (((vars->phy_flags & PHY_PHYSICAL_LINK_FLAG) == 0) ||
13420 bnx2x_analyze_link_error(params, vars, lss_status,
13439 bnx2x_analyze_link_error(params, vars, lss_status,
13447 struct link_vars *vars)
13464 led_change = bnx2x_analyze_link_error(params, vars, value,
13472 if (vars->phy_flags & PHY_SFP_TX_FAULT_FLAG) {
13474 vars->link_status |= LINK_STATUS_SFP_TX_FAULT;
13477 vars->link_status &= ~LINK_STATUS_SFP_TX_FAULT;
13489 struct link_vars *vars,
13494 bnx2x_warpcore_enable_AN_KR2(phy, params, vars);
13499 struct link_vars *vars,
13511 if (vars->check_kr2_recovery_cnt > 0) {
13512 vars->check_kr2_recovery_cnt--;
13519 bnx2x_kr2_recovery(params, vars, phy);
13537 bnx2x_kr2_recovery(params, vars, phy);
13556 bnx2x_kr2_recovery(params, vars, phy);
13564 bnx2x_disable_kr2(params, vars, phy);
13571 void bnx2x_period_func(struct link_params *params, struct link_vars *vars)
13578 if (bnx2x_check_half_open_conn(params, vars, 1) !=
13590 bnx2x_check_kr2_wa(params, vars, phy);
13591 bnx2x_check_over_curr(params, vars);
13592 if (vars->rx_tx_asic_rst)
13593 bnx2x_warpcore_config_runtime(phy, params, vars);
13601 bnx2x_sfp_tx_fault_detection(phy, params, vars);
13602 } else if (vars->link_status &
13605 vars->link_status &= ~LINK_STATUS_SFP_TX_FAULT;
13606 vars->phy_flags &= ~PHY_SFP_TX_FAULT_FLAG;
13608 bnx2x_update_mng(params, vars->link_status);
13657 void bnx2x_init_mod_abs_int(struct bnx2x *bp, struct link_vars *vars,
13699 vars->aeu_int_mask = AEU_INPUTS_ATTN_BITS_GPIO0_FUNCTION_0 <<
13705 REG_WR(bp, sync_offset, vars->aeu_int_mask);
13708 gpio_num, gpio_port, vars->aeu_int_mask);
13717 aeu_mask |= vars->aeu_int_mask;