.. | .. |
---|
26 | 26 | |
---|
27 | 27 | #define IGB_STAT(_name, _stat) { \ |
---|
28 | 28 | .stat_string = _name, \ |
---|
29 | | - .sizeof_stat = FIELD_SIZEOF(struct igb_adapter, _stat), \ |
---|
| 29 | + .sizeof_stat = sizeof_field(struct igb_adapter, _stat), \ |
---|
30 | 30 | .stat_offset = offsetof(struct igb_adapter, _stat) \ |
---|
31 | 31 | } |
---|
32 | 32 | static const struct igb_stats igb_gstrings_stats[] = { |
---|
.. | .. |
---|
76 | 76 | |
---|
77 | 77 | #define IGB_NETDEV_STAT(_net_stat) { \ |
---|
78 | 78 | .stat_string = __stringify(_net_stat), \ |
---|
79 | | - .sizeof_stat = FIELD_SIZEOF(struct rtnl_link_stats64, _net_stat), \ |
---|
| 79 | + .sizeof_stat = sizeof_field(struct rtnl_link_stats64, _net_stat), \ |
---|
80 | 80 | .stat_offset = offsetof(struct rtnl_link_stats64, _net_stat) \ |
---|
81 | 81 | } |
---|
82 | 82 | static const struct igb_stats igb_gstrings_net_stats[] = { |
---|
.. | .. |
---|
397 | 397 | struct igb_adapter *adapter = netdev_priv(netdev); |
---|
398 | 398 | struct e1000_hw *hw = &adapter->hw; |
---|
399 | 399 | int retval = 0; |
---|
| 400 | + int i; |
---|
400 | 401 | |
---|
401 | 402 | /* 100basefx does not support setting link flow control */ |
---|
402 | 403 | if (hw->dev_spec._82575.eth_flags.e100_base_fx) |
---|
.. | .. |
---|
429 | 430 | |
---|
430 | 431 | retval = ((hw->phy.media_type == e1000_media_type_copper) ? |
---|
431 | 432 | igb_force_mac_fc(hw) : igb_setup_link(hw)); |
---|
| 433 | + |
---|
| 434 | + /* Make sure SRRCTL considers new fc settings for each ring */ |
---|
| 435 | + for (i = 0; i < adapter->num_rx_queues; i++) { |
---|
| 436 | + struct igb_ring *ring = adapter->rx_ring[i]; |
---|
| 437 | + |
---|
| 438 | + igb_setup_srrctl(adapter, ring); |
---|
| 439 | + } |
---|
432 | 440 | } |
---|
433 | 441 | |
---|
434 | 442 | clear_bit(__IGB_RESETTING, &adapter->state); |
---|
.. | .. |
---|
449 | 457 | |
---|
450 | 458 | static int igb_get_regs_len(struct net_device *netdev) |
---|
451 | 459 | { |
---|
452 | | -#define IGB_REGS_LEN 739 |
---|
| 460 | +#define IGB_REGS_LEN 740 |
---|
453 | 461 | return IGB_REGS_LEN * sizeof(u32); |
---|
454 | 462 | } |
---|
455 | 463 | |
---|
.. | .. |
---|
676 | 684 | regs_buff[554] = adapter->stats.b2ogprc; |
---|
677 | 685 | } |
---|
678 | 686 | |
---|
679 | | - if (hw->mac.type != e1000_82576) |
---|
680 | | - return; |
---|
681 | | - for (i = 0; i < 12; i++) |
---|
682 | | - regs_buff[555 + i] = rd32(E1000_SRRCTL(i + 4)); |
---|
683 | | - for (i = 0; i < 4; i++) |
---|
684 | | - regs_buff[567 + i] = rd32(E1000_PSRTYPE(i + 4)); |
---|
685 | | - for (i = 0; i < 12; i++) |
---|
686 | | - regs_buff[571 + i] = rd32(E1000_RDBAL(i + 4)); |
---|
687 | | - for (i = 0; i < 12; i++) |
---|
688 | | - regs_buff[583 + i] = rd32(E1000_RDBAH(i + 4)); |
---|
689 | | - for (i = 0; i < 12; i++) |
---|
690 | | - regs_buff[595 + i] = rd32(E1000_RDLEN(i + 4)); |
---|
691 | | - for (i = 0; i < 12; i++) |
---|
692 | | - regs_buff[607 + i] = rd32(E1000_RDH(i + 4)); |
---|
693 | | - for (i = 0; i < 12; i++) |
---|
694 | | - regs_buff[619 + i] = rd32(E1000_RDT(i + 4)); |
---|
695 | | - for (i = 0; i < 12; i++) |
---|
696 | | - regs_buff[631 + i] = rd32(E1000_RXDCTL(i + 4)); |
---|
| 687 | + if (hw->mac.type == e1000_82576) { |
---|
| 688 | + for (i = 0; i < 12; i++) |
---|
| 689 | + regs_buff[555 + i] = rd32(E1000_SRRCTL(i + 4)); |
---|
| 690 | + for (i = 0; i < 4; i++) |
---|
| 691 | + regs_buff[567 + i] = rd32(E1000_PSRTYPE(i + 4)); |
---|
| 692 | + for (i = 0; i < 12; i++) |
---|
| 693 | + regs_buff[571 + i] = rd32(E1000_RDBAL(i + 4)); |
---|
| 694 | + for (i = 0; i < 12; i++) |
---|
| 695 | + regs_buff[583 + i] = rd32(E1000_RDBAH(i + 4)); |
---|
| 696 | + for (i = 0; i < 12; i++) |
---|
| 697 | + regs_buff[595 + i] = rd32(E1000_RDLEN(i + 4)); |
---|
| 698 | + for (i = 0; i < 12; i++) |
---|
| 699 | + regs_buff[607 + i] = rd32(E1000_RDH(i + 4)); |
---|
| 700 | + for (i = 0; i < 12; i++) |
---|
| 701 | + regs_buff[619 + i] = rd32(E1000_RDT(i + 4)); |
---|
| 702 | + for (i = 0; i < 12; i++) |
---|
| 703 | + regs_buff[631 + i] = rd32(E1000_RXDCTL(i + 4)); |
---|
697 | 704 | |
---|
698 | | - for (i = 0; i < 12; i++) |
---|
699 | | - regs_buff[643 + i] = rd32(E1000_TDBAL(i + 4)); |
---|
700 | | - for (i = 0; i < 12; i++) |
---|
701 | | - regs_buff[655 + i] = rd32(E1000_TDBAH(i + 4)); |
---|
702 | | - for (i = 0; i < 12; i++) |
---|
703 | | - regs_buff[667 + i] = rd32(E1000_TDLEN(i + 4)); |
---|
704 | | - for (i = 0; i < 12; i++) |
---|
705 | | - regs_buff[679 + i] = rd32(E1000_TDH(i + 4)); |
---|
706 | | - for (i = 0; i < 12; i++) |
---|
707 | | - regs_buff[691 + i] = rd32(E1000_TDT(i + 4)); |
---|
708 | | - for (i = 0; i < 12; i++) |
---|
709 | | - regs_buff[703 + i] = rd32(E1000_TXDCTL(i + 4)); |
---|
710 | | - for (i = 0; i < 12; i++) |
---|
711 | | - regs_buff[715 + i] = rd32(E1000_TDWBAL(i + 4)); |
---|
712 | | - for (i = 0; i < 12; i++) |
---|
713 | | - regs_buff[727 + i] = rd32(E1000_TDWBAH(i + 4)); |
---|
| 705 | + for (i = 0; i < 12; i++) |
---|
| 706 | + regs_buff[643 + i] = rd32(E1000_TDBAL(i + 4)); |
---|
| 707 | + for (i = 0; i < 12; i++) |
---|
| 708 | + regs_buff[655 + i] = rd32(E1000_TDBAH(i + 4)); |
---|
| 709 | + for (i = 0; i < 12; i++) |
---|
| 710 | + regs_buff[667 + i] = rd32(E1000_TDLEN(i + 4)); |
---|
| 711 | + for (i = 0; i < 12; i++) |
---|
| 712 | + regs_buff[679 + i] = rd32(E1000_TDH(i + 4)); |
---|
| 713 | + for (i = 0; i < 12; i++) |
---|
| 714 | + regs_buff[691 + i] = rd32(E1000_TDT(i + 4)); |
---|
| 715 | + for (i = 0; i < 12; i++) |
---|
| 716 | + regs_buff[703 + i] = rd32(E1000_TXDCTL(i + 4)); |
---|
| 717 | + for (i = 0; i < 12; i++) |
---|
| 718 | + regs_buff[715 + i] = rd32(E1000_TDWBAL(i + 4)); |
---|
| 719 | + for (i = 0; i < 12; i++) |
---|
| 720 | + regs_buff[727 + i] = rd32(E1000_TDWBAH(i + 4)); |
---|
| 721 | + } |
---|
| 722 | + |
---|
| 723 | + if (hw->mac.type == e1000_i210 || hw->mac.type == e1000_i211) |
---|
| 724 | + regs_buff[739] = rd32(E1000_I210_RR2DCDELAY); |
---|
714 | 725 | } |
---|
715 | 726 | |
---|
716 | 727 | static int igb_get_eeprom_len(struct net_device *netdev) |
---|
.. | .. |
---|
811 | 822 | */ |
---|
812 | 823 | ret_val = hw->nvm.ops.read(hw, last_word, 1, |
---|
813 | 824 | &eeprom_buff[last_word - first_word]); |
---|
| 825 | + if (ret_val) |
---|
| 826 | + goto out; |
---|
814 | 827 | } |
---|
815 | 828 | |
---|
816 | 829 | /* Device's eeprom is always little-endian, word addressable */ |
---|
.. | .. |
---|
830 | 843 | hw->nvm.ops.update(hw); |
---|
831 | 844 | |
---|
832 | 845 | igb_set_fw_version(adapter); |
---|
| 846 | +out: |
---|
833 | 847 | kfree(eeprom_buff); |
---|
834 | 848 | return ret_val; |
---|
835 | 849 | } |
---|
.. | .. |
---|
840 | 854 | struct igb_adapter *adapter = netdev_priv(netdev); |
---|
841 | 855 | |
---|
842 | 856 | strlcpy(drvinfo->driver, igb_driver_name, sizeof(drvinfo->driver)); |
---|
843 | | - strlcpy(drvinfo->version, igb_driver_version, sizeof(drvinfo->version)); |
---|
844 | 857 | |
---|
845 | 858 | /* EEPROM image version # is reported as firmware version # for |
---|
846 | 859 | * 82575 controllers |
---|
.. | .. |
---|
950 | 963 | for (i = 0; i < adapter->num_rx_queues; i++) { |
---|
951 | 964 | memcpy(&temp_ring[i], adapter->rx_ring[i], |
---|
952 | 965 | sizeof(struct igb_ring)); |
---|
| 966 | + |
---|
| 967 | + /* Clear copied XDP RX-queue info */ |
---|
| 968 | + memset(&temp_ring[i].xdp_rxq, 0, |
---|
| 969 | + sizeof(temp_ring[i].xdp_rxq)); |
---|
953 | 970 | |
---|
954 | 971 | temp_ring[i].count = new_rx_count; |
---|
955 | 972 | err = igb_setup_rx_resources(&temp_ring[i]); |
---|
.. | .. |
---|
1399 | 1416 | *data = 1; |
---|
1400 | 1417 | return -1; |
---|
1401 | 1418 | } |
---|
| 1419 | + wr32(E1000_IVAR_MISC, E1000_IVAR_VALID << 8); |
---|
| 1420 | + wr32(E1000_EIMS, BIT(0)); |
---|
1402 | 1421 | } else if (adapter->flags & IGB_FLAG_HAS_MSI) { |
---|
1403 | 1422 | shared_int = false; |
---|
1404 | 1423 | if (request_irq(irq, |
---|
.. | .. |
---|
1772 | 1791 | memset(skb->data, 0xFF, frame_size); |
---|
1773 | 1792 | frame_size /= 2; |
---|
1774 | 1793 | memset(&skb->data[frame_size], 0xAA, frame_size - 1); |
---|
1775 | | - memset(&skb->data[frame_size + 10], 0xBE, 1); |
---|
1776 | | - memset(&skb->data[frame_size + 12], 0xAF, 1); |
---|
| 1794 | + skb->data[frame_size + 10] = 0xBE; |
---|
| 1795 | + skb->data[frame_size + 12] = 0xAF; |
---|
1777 | 1796 | } |
---|
1778 | 1797 | |
---|
1779 | 1798 | static int igb_check_lbtest_frame(struct igb_rx_buffer *rx_buffer, |
---|
.. | .. |
---|
2114 | 2133 | { |
---|
2115 | 2134 | struct igb_adapter *adapter = netdev_priv(netdev); |
---|
2116 | 2135 | |
---|
2117 | | - if (wol->wolopts & (WAKE_ARP | WAKE_MAGICSECURE)) |
---|
| 2136 | + if (wol->wolopts & (WAKE_ARP | WAKE_MAGICSECURE | WAKE_FILTER)) |
---|
2118 | 2137 | return -EOPNOTSUPP; |
---|
2119 | 2138 | |
---|
2120 | 2139 | if (!(adapter->flags & IGB_FLAG_WOL_SUPPORTED)) |
---|
.. | .. |
---|
2172 | 2191 | { |
---|
2173 | 2192 | struct igb_adapter *adapter = netdev_priv(netdev); |
---|
2174 | 2193 | int i; |
---|
2175 | | - |
---|
2176 | | - if (ec->rx_max_coalesced_frames || |
---|
2177 | | - ec->rx_coalesce_usecs_irq || |
---|
2178 | | - ec->rx_max_coalesced_frames_irq || |
---|
2179 | | - ec->tx_max_coalesced_frames || |
---|
2180 | | - ec->tx_coalesce_usecs_irq || |
---|
2181 | | - ec->stats_block_coalesce_usecs || |
---|
2182 | | - ec->use_adaptive_rx_coalesce || |
---|
2183 | | - ec->use_adaptive_tx_coalesce || |
---|
2184 | | - ec->pkt_rate_low || |
---|
2185 | | - ec->rx_coalesce_usecs_low || |
---|
2186 | | - ec->rx_max_coalesced_frames_low || |
---|
2187 | | - ec->tx_coalesce_usecs_low || |
---|
2188 | | - ec->tx_max_coalesced_frames_low || |
---|
2189 | | - ec->pkt_rate_high || |
---|
2190 | | - ec->rx_coalesce_usecs_high || |
---|
2191 | | - ec->rx_max_coalesced_frames_high || |
---|
2192 | | - ec->tx_coalesce_usecs_high || |
---|
2193 | | - ec->tx_max_coalesced_frames_high || |
---|
2194 | | - ec->rate_sample_interval) |
---|
2195 | | - return -ENOTSUPP; |
---|
2196 | 2194 | |
---|
2197 | 2195 | if ((ec->rx_coalesce_usecs > IGB_MAX_ITR_USECS) || |
---|
2198 | 2196 | ((ec->rx_coalesce_usecs > 3) && |
---|
.. | .. |
---|
2528 | 2526 | switch (cmd->flow_type) { |
---|
2529 | 2527 | case TCP_V4_FLOW: |
---|
2530 | 2528 | cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; |
---|
2531 | | - /* Fall through */ |
---|
| 2529 | + fallthrough; |
---|
2532 | 2530 | case UDP_V4_FLOW: |
---|
2533 | 2531 | if (adapter->flags & IGB_FLAG_RSS_FIELD_IPV4_UDP) |
---|
2534 | 2532 | cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; |
---|
2535 | | - /* Fall through */ |
---|
| 2533 | + fallthrough; |
---|
2536 | 2534 | case SCTP_V4_FLOW: |
---|
2537 | 2535 | case AH_ESP_V4_FLOW: |
---|
2538 | 2536 | case AH_V4_FLOW: |
---|
.. | .. |
---|
2542 | 2540 | break; |
---|
2543 | 2541 | case TCP_V6_FLOW: |
---|
2544 | 2542 | cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; |
---|
2545 | | - /* Fall through */ |
---|
| 2543 | + fallthrough; |
---|
2546 | 2544 | case UDP_V6_FLOW: |
---|
2547 | 2545 | if (adapter->flags & IGB_FLAG_RSS_FIELD_IPV6_UDP) |
---|
2548 | 2546 | cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; |
---|
2549 | | - /* Fall through */ |
---|
| 2547 | + fallthrough; |
---|
2550 | 2548 | case SCTP_V6_FLOW: |
---|
2551 | 2549 | case AH_ESP_V6_FLOW: |
---|
2552 | 2550 | case AH_V6_FLOW: |
---|
.. | .. |
---|
3159 | 3157 | } else if (!edata->eee_enabled) { |
---|
3160 | 3158 | dev_err(&adapter->pdev->dev, |
---|
3161 | 3159 | "Setting EEE options are not supported with EEE disabled\n"); |
---|
3162 | | - return -EINVAL; |
---|
3163 | | - } |
---|
| 3160 | + return -EINVAL; |
---|
| 3161 | + } |
---|
3164 | 3162 | |
---|
3165 | 3163 | adapter->eee_advert = ethtool_adv_to_mmd_eee_adv_t(edata->advertised); |
---|
3166 | 3164 | if (hw->dev_spec._82575.eee_disable != !edata->eee_enabled) { |
---|
.. | .. |
---|
3467 | 3465 | } |
---|
3468 | 3466 | |
---|
3469 | 3467 | static const struct ethtool_ops igb_ethtool_ops = { |
---|
| 3468 | + .supported_coalesce_params = ETHTOOL_COALESCE_USECS, |
---|
3470 | 3469 | .get_drvinfo = igb_get_drvinfo, |
---|
3471 | 3470 | .get_regs_len = igb_get_regs_len, |
---|
3472 | 3471 | .get_regs = igb_get_regs, |
---|