| .. | .. |
|---|
| 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) |
|---|
| .. | .. |
|---|
| 840 | 851 | struct igb_adapter *adapter = netdev_priv(netdev); |
|---|
| 841 | 852 | |
|---|
| 842 | 853 | strlcpy(drvinfo->driver, igb_driver_name, sizeof(drvinfo->driver)); |
|---|
| 843 | | - strlcpy(drvinfo->version, igb_driver_version, sizeof(drvinfo->version)); |
|---|
| 844 | 854 | |
|---|
| 845 | 855 | /* EEPROM image version # is reported as firmware version # for |
|---|
| 846 | 856 | * 82575 controllers |
|---|
| .. | .. |
|---|
| 950 | 960 | for (i = 0; i < adapter->num_rx_queues; i++) { |
|---|
| 951 | 961 | memcpy(&temp_ring[i], adapter->rx_ring[i], |
|---|
| 952 | 962 | sizeof(struct igb_ring)); |
|---|
| 963 | + |
|---|
| 964 | + /* Clear copied XDP RX-queue info */ |
|---|
| 965 | + memset(&temp_ring[i].xdp_rxq, 0, |
|---|
| 966 | + sizeof(temp_ring[i].xdp_rxq)); |
|---|
| 953 | 967 | |
|---|
| 954 | 968 | temp_ring[i].count = new_rx_count; |
|---|
| 955 | 969 | err = igb_setup_rx_resources(&temp_ring[i]); |
|---|
| .. | .. |
|---|
| 1399 | 1413 | *data = 1; |
|---|
| 1400 | 1414 | return -1; |
|---|
| 1401 | 1415 | } |
|---|
| 1416 | + wr32(E1000_IVAR_MISC, E1000_IVAR_VALID << 8); |
|---|
| 1417 | + wr32(E1000_EIMS, BIT(0)); |
|---|
| 1402 | 1418 | } else if (adapter->flags & IGB_FLAG_HAS_MSI) { |
|---|
| 1403 | 1419 | shared_int = false; |
|---|
| 1404 | 1420 | if (request_irq(irq, |
|---|
| .. | .. |
|---|
| 1772 | 1788 | memset(skb->data, 0xFF, frame_size); |
|---|
| 1773 | 1789 | frame_size /= 2; |
|---|
| 1774 | 1790 | 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); |
|---|
| 1791 | + skb->data[frame_size + 10] = 0xBE; |
|---|
| 1792 | + skb->data[frame_size + 12] = 0xAF; |
|---|
| 1777 | 1793 | } |
|---|
| 1778 | 1794 | |
|---|
| 1779 | 1795 | static int igb_check_lbtest_frame(struct igb_rx_buffer *rx_buffer, |
|---|
| .. | .. |
|---|
| 2114 | 2130 | { |
|---|
| 2115 | 2131 | struct igb_adapter *adapter = netdev_priv(netdev); |
|---|
| 2116 | 2132 | |
|---|
| 2117 | | - if (wol->wolopts & (WAKE_ARP | WAKE_MAGICSECURE)) |
|---|
| 2133 | + if (wol->wolopts & (WAKE_ARP | WAKE_MAGICSECURE | WAKE_FILTER)) |
|---|
| 2118 | 2134 | return -EOPNOTSUPP; |
|---|
| 2119 | 2135 | |
|---|
| 2120 | 2136 | if (!(adapter->flags & IGB_FLAG_WOL_SUPPORTED)) |
|---|
| .. | .. |
|---|
| 2172 | 2188 | { |
|---|
| 2173 | 2189 | struct igb_adapter *adapter = netdev_priv(netdev); |
|---|
| 2174 | 2190 | 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 | 2191 | |
|---|
| 2197 | 2192 | if ((ec->rx_coalesce_usecs > IGB_MAX_ITR_USECS) || |
|---|
| 2198 | 2193 | ((ec->rx_coalesce_usecs > 3) && |
|---|
| .. | .. |
|---|
| 2528 | 2523 | switch (cmd->flow_type) { |
|---|
| 2529 | 2524 | case TCP_V4_FLOW: |
|---|
| 2530 | 2525 | cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; |
|---|
| 2531 | | - /* Fall through */ |
|---|
| 2526 | + fallthrough; |
|---|
| 2532 | 2527 | case UDP_V4_FLOW: |
|---|
| 2533 | 2528 | if (adapter->flags & IGB_FLAG_RSS_FIELD_IPV4_UDP) |
|---|
| 2534 | 2529 | cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; |
|---|
| 2535 | | - /* Fall through */ |
|---|
| 2530 | + fallthrough; |
|---|
| 2536 | 2531 | case SCTP_V4_FLOW: |
|---|
| 2537 | 2532 | case AH_ESP_V4_FLOW: |
|---|
| 2538 | 2533 | case AH_V4_FLOW: |
|---|
| .. | .. |
|---|
| 2542 | 2537 | break; |
|---|
| 2543 | 2538 | case TCP_V6_FLOW: |
|---|
| 2544 | 2539 | cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; |
|---|
| 2545 | | - /* Fall through */ |
|---|
| 2540 | + fallthrough; |
|---|
| 2546 | 2541 | case UDP_V6_FLOW: |
|---|
| 2547 | 2542 | if (adapter->flags & IGB_FLAG_RSS_FIELD_IPV6_UDP) |
|---|
| 2548 | 2543 | cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; |
|---|
| 2549 | | - /* Fall through */ |
|---|
| 2544 | + fallthrough; |
|---|
| 2550 | 2545 | case SCTP_V6_FLOW: |
|---|
| 2551 | 2546 | case AH_ESP_V6_FLOW: |
|---|
| 2552 | 2547 | case AH_V6_FLOW: |
|---|
| .. | .. |
|---|
| 3159 | 3154 | } else if (!edata->eee_enabled) { |
|---|
| 3160 | 3155 | dev_err(&adapter->pdev->dev, |
|---|
| 3161 | 3156 | "Setting EEE options are not supported with EEE disabled\n"); |
|---|
| 3162 | | - return -EINVAL; |
|---|
| 3163 | | - } |
|---|
| 3157 | + return -EINVAL; |
|---|
| 3158 | + } |
|---|
| 3164 | 3159 | |
|---|
| 3165 | 3160 | adapter->eee_advert = ethtool_adv_to_mmd_eee_adv_t(edata->advertised); |
|---|
| 3166 | 3161 | if (hw->dev_spec._82575.eee_disable != !edata->eee_enabled) { |
|---|
| .. | .. |
|---|
| 3467 | 3462 | } |
|---|
| 3468 | 3463 | |
|---|
| 3469 | 3464 | static const struct ethtool_ops igb_ethtool_ops = { |
|---|
| 3465 | + .supported_coalesce_params = ETHTOOL_COALESCE_USECS, |
|---|
| 3470 | 3466 | .get_drvinfo = igb_get_drvinfo, |
|---|
| 3471 | 3467 | .get_regs_len = igb_get_regs_len, |
|---|
| 3472 | 3468 | .get_regs = igb_get_regs, |
|---|