diff options
Diffstat (limited to 'drivers/net/ethernet/intel/e1000e/netdev.c')
-rw-r--r-- | drivers/net/ethernet/intel/e1000e/netdev.c | 80 |
1 files changed, 36 insertions, 44 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index a177b8b65c44..e8192d3f7eb4 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c | |||
@@ -850,8 +850,8 @@ check_page: | |||
850 | 850 | ||
851 | if (!buffer_info->dma) | 851 | if (!buffer_info->dma) |
852 | buffer_info->dma = dma_map_page(&pdev->dev, | 852 | buffer_info->dma = dma_map_page(&pdev->dev, |
853 | buffer_info->page, 0, | 853 | buffer_info->page, 0, |
854 | PAGE_SIZE, | 854 | PAGE_SIZE, |
855 | DMA_FROM_DEVICE); | 855 | DMA_FROM_DEVICE); |
856 | 856 | ||
857 | rx_desc = E1000_RX_DESC_EXT(*rx_ring, i); | 857 | rx_desc = E1000_RX_DESC_EXT(*rx_ring, i); |
@@ -1068,8 +1068,8 @@ static void e1000_put_txbuf(struct e1000_ring *tx_ring, | |||
1068 | static void e1000_print_hw_hang(struct work_struct *work) | 1068 | static void e1000_print_hw_hang(struct work_struct *work) |
1069 | { | 1069 | { |
1070 | struct e1000_adapter *adapter = container_of(work, | 1070 | struct e1000_adapter *adapter = container_of(work, |
1071 | struct e1000_adapter, | 1071 | struct e1000_adapter, |
1072 | print_hang_task); | 1072 | print_hang_task); |
1073 | struct net_device *netdev = adapter->netdev; | 1073 | struct net_device *netdev = adapter->netdev; |
1074 | struct e1000_ring *tx_ring = adapter->tx_ring; | 1074 | struct e1000_ring *tx_ring = adapter->tx_ring; |
1075 | unsigned int i = tx_ring->next_to_clean; | 1075 | unsigned int i = tx_ring->next_to_clean; |
@@ -1549,7 +1549,7 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_ring *rx_ring, int *work_done, | |||
1549 | /* this is the beginning of a chain */ | 1549 | /* this is the beginning of a chain */ |
1550 | rxtop = skb; | 1550 | rxtop = skb; |
1551 | skb_fill_page_desc(rxtop, 0, buffer_info->page, | 1551 | skb_fill_page_desc(rxtop, 0, buffer_info->page, |
1552 | 0, length); | 1552 | 0, length); |
1553 | } else { | 1553 | } else { |
1554 | /* this is the middle of a chain */ | 1554 | /* this is the middle of a chain */ |
1555 | skb_fill_page_desc(rxtop, | 1555 | skb_fill_page_desc(rxtop, |
@@ -1590,10 +1590,10 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_ring *rx_ring, int *work_done, | |||
1590 | skb_put(skb, length); | 1590 | skb_put(skb, length); |
1591 | } else { | 1591 | } else { |
1592 | skb_fill_page_desc(skb, 0, | 1592 | skb_fill_page_desc(skb, 0, |
1593 | buffer_info->page, 0, | 1593 | buffer_info->page, 0, |
1594 | length); | 1594 | length); |
1595 | e1000_consume_page(buffer_info, skb, | 1595 | e1000_consume_page(buffer_info, skb, |
1596 | length); | 1596 | length); |
1597 | } | 1597 | } |
1598 | } | 1598 | } |
1599 | } | 1599 | } |
@@ -1666,8 +1666,7 @@ static void e1000_clean_rx_ring(struct e1000_ring *rx_ring) | |||
1666 | DMA_FROM_DEVICE); | 1666 | DMA_FROM_DEVICE); |
1667 | else if (adapter->clean_rx == e1000_clean_jumbo_rx_irq) | 1667 | else if (adapter->clean_rx == e1000_clean_jumbo_rx_irq) |
1668 | dma_unmap_page(&pdev->dev, buffer_info->dma, | 1668 | dma_unmap_page(&pdev->dev, buffer_info->dma, |
1669 | PAGE_SIZE, | 1669 | PAGE_SIZE, DMA_FROM_DEVICE); |
1670 | DMA_FROM_DEVICE); | ||
1671 | else if (adapter->clean_rx == e1000_clean_rx_irq_ps) | 1670 | else if (adapter->clean_rx == e1000_clean_rx_irq_ps) |
1672 | dma_unmap_single(&pdev->dev, buffer_info->dma, | 1671 | dma_unmap_single(&pdev->dev, buffer_info->dma, |
1673 | adapter->rx_ps_bsize0, | 1672 | adapter->rx_ps_bsize0, |
@@ -2578,8 +2577,7 @@ set_itr_now: | |||
2578 | * increasing | 2577 | * increasing |
2579 | */ | 2578 | */ |
2580 | new_itr = new_itr > adapter->itr ? | 2579 | new_itr = new_itr > adapter->itr ? |
2581 | min(adapter->itr + (new_itr >> 2), new_itr) : | 2580 | min(adapter->itr + (new_itr >> 2), new_itr) : new_itr; |
2582 | new_itr; | ||
2583 | adapter->itr = new_itr; | 2581 | adapter->itr = new_itr; |
2584 | adapter->rx_ring->itr_val = new_itr; | 2582 | adapter->rx_ring->itr_val = new_itr; |
2585 | if (adapter->msix_entries) | 2583 | if (adapter->msix_entries) |
@@ -2827,7 +2825,7 @@ static void e1000_restore_vlan(struct e1000_adapter *adapter) | |||
2827 | e1000_vlan_rx_add_vid(adapter->netdev, 0); | 2825 | e1000_vlan_rx_add_vid(adapter->netdev, 0); |
2828 | 2826 | ||
2829 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) | 2827 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) |
2830 | e1000_vlan_rx_add_vid(adapter->netdev, vid); | 2828 | e1000_vlan_rx_add_vid(adapter->netdev, vid); |
2831 | } | 2829 | } |
2832 | 2830 | ||
2833 | static void e1000_init_manageability_pt(struct e1000_adapter *adapter) | 2831 | static void e1000_init_manageability_pt(struct e1000_adapter *adapter) |
@@ -3002,8 +3000,8 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter) | |||
3002 | rctl = er32(RCTL); | 3000 | rctl = er32(RCTL); |
3003 | rctl &= ~(3 << E1000_RCTL_MO_SHIFT); | 3001 | rctl &= ~(3 << E1000_RCTL_MO_SHIFT); |
3004 | rctl |= E1000_RCTL_EN | E1000_RCTL_BAM | | 3002 | rctl |= E1000_RCTL_EN | E1000_RCTL_BAM | |
3005 | E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF | | 3003 | E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF | |
3006 | (adapter->hw.mac.mc_filter_type << E1000_RCTL_MO_SHIFT); | 3004 | (adapter->hw.mac.mc_filter_type << E1000_RCTL_MO_SHIFT); |
3007 | 3005 | ||
3008 | /* Do not Store bad packets */ | 3006 | /* Do not Store bad packets */ |
3009 | rctl &= ~E1000_RCTL_SBP; | 3007 | rctl &= ~E1000_RCTL_SBP; |
@@ -3275,7 +3273,7 @@ static int e1000e_write_mc_addr_list(struct net_device *netdev) | |||
3275 | /* update_mc_addr_list expects a packed array of only addresses. */ | 3273 | /* update_mc_addr_list expects a packed array of only addresses. */ |
3276 | i = 0; | 3274 | i = 0; |
3277 | netdev_for_each_mc_addr(ha, netdev) | 3275 | netdev_for_each_mc_addr(ha, netdev) |
3278 | memcpy(mta_list + (i++ * ETH_ALEN), ha->addr, ETH_ALEN); | 3276 | memcpy(mta_list + (i++ * ETH_ALEN), ha->addr, ETH_ALEN); |
3279 | 3277 | ||
3280 | hw->mac.ops.update_mc_addr_list(hw, mta_list, i); | 3278 | hw->mac.ops.update_mc_addr_list(hw, mta_list, i); |
3281 | kfree(mta_list); | 3279 | kfree(mta_list); |
@@ -4615,18 +4613,16 @@ static void e1000e_update_stats(struct e1000_adapter *adapter) | |||
4615 | * our own version based on RUC and ROC | 4613 | * our own version based on RUC and ROC |
4616 | */ | 4614 | */ |
4617 | netdev->stats.rx_errors = adapter->stats.rxerrc + | 4615 | netdev->stats.rx_errors = adapter->stats.rxerrc + |
4618 | adapter->stats.crcerrs + adapter->stats.algnerrc + | 4616 | adapter->stats.crcerrs + adapter->stats.algnerrc + |
4619 | adapter->stats.ruc + adapter->stats.roc + | 4617 | adapter->stats.ruc + adapter->stats.roc + adapter->stats.cexterr; |
4620 | adapter->stats.cexterr; | ||
4621 | netdev->stats.rx_length_errors = adapter->stats.ruc + | 4618 | netdev->stats.rx_length_errors = adapter->stats.ruc + |
4622 | adapter->stats.roc; | 4619 | adapter->stats.roc; |
4623 | netdev->stats.rx_crc_errors = adapter->stats.crcerrs; | 4620 | netdev->stats.rx_crc_errors = adapter->stats.crcerrs; |
4624 | netdev->stats.rx_frame_errors = adapter->stats.algnerrc; | 4621 | netdev->stats.rx_frame_errors = adapter->stats.algnerrc; |
4625 | netdev->stats.rx_missed_errors = adapter->stats.mpc; | 4622 | netdev->stats.rx_missed_errors = adapter->stats.mpc; |
4626 | 4623 | ||
4627 | /* Tx Errors */ | 4624 | /* Tx Errors */ |
4628 | netdev->stats.tx_errors = adapter->stats.ecol + | 4625 | netdev->stats.tx_errors = adapter->stats.ecol + adapter->stats.latecol; |
4629 | adapter->stats.latecol; | ||
4630 | netdev->stats.tx_aborted_errors = adapter->stats.ecol; | 4626 | netdev->stats.tx_aborted_errors = adapter->stats.ecol; |
4631 | netdev->stats.tx_window_errors = adapter->stats.latecol; | 4627 | netdev->stats.tx_window_errors = adapter->stats.latecol; |
4632 | netdev->stats.tx_carrier_errors = adapter->stats.tncrs; | 4628 | netdev->stats.tx_carrier_errors = adapter->stats.tncrs; |
@@ -5056,14 +5052,14 @@ static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb) | |||
5056 | iph->tot_len = 0; | 5052 | iph->tot_len = 0; |
5057 | iph->check = 0; | 5053 | iph->check = 0; |
5058 | tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, | 5054 | tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, |
5059 | 0, IPPROTO_TCP, 0); | 5055 | 0, IPPROTO_TCP, 0); |
5060 | cmd_length = E1000_TXD_CMD_IP; | 5056 | cmd_length = E1000_TXD_CMD_IP; |
5061 | ipcse = skb_transport_offset(skb) - 1; | 5057 | ipcse = skb_transport_offset(skb) - 1; |
5062 | } else if (skb_is_gso_v6(skb)) { | 5058 | } else if (skb_is_gso_v6(skb)) { |
5063 | ipv6_hdr(skb)->payload_len = 0; | 5059 | ipv6_hdr(skb)->payload_len = 0; |
5064 | tcp_hdr(skb)->check = ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr, | 5060 | tcp_hdr(skb)->check = ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr, |
5065 | &ipv6_hdr(skb)->daddr, | 5061 | &ipv6_hdr(skb)->daddr, |
5066 | 0, IPPROTO_TCP, 0); | 5062 | 0, IPPROTO_TCP, 0); |
5067 | ipcse = 0; | 5063 | ipcse = 0; |
5068 | } | 5064 | } |
5069 | ipcss = skb_network_offset(skb); | 5065 | ipcss = skb_network_offset(skb); |
@@ -5072,7 +5068,7 @@ static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb) | |||
5072 | tucso = (void *)&(tcp_hdr(skb)->check) - (void *)skb->data; | 5068 | tucso = (void *)&(tcp_hdr(skb)->check) - (void *)skb->data; |
5073 | 5069 | ||
5074 | cmd_length |= (E1000_TXD_CMD_DEXT | E1000_TXD_CMD_TSE | | 5070 | cmd_length |= (E1000_TXD_CMD_DEXT | E1000_TXD_CMD_TSE | |
5075 | E1000_TXD_CMD_TCP | (skb->len - (hdr_len))); | 5071 | E1000_TXD_CMD_TCP | (skb->len - (hdr_len))); |
5076 | 5072 | ||
5077 | i = tx_ring->next_to_use; | 5073 | i = tx_ring->next_to_use; |
5078 | context_desc = E1000_CONTEXT_DESC(*tx_ring, i); | 5074 | context_desc = E1000_CONTEXT_DESC(*tx_ring, i); |
@@ -5142,8 +5138,7 @@ static bool e1000_tx_csum(struct e1000_ring *tx_ring, struct sk_buff *skb) | |||
5142 | 5138 | ||
5143 | context_desc->lower_setup.ip_config = 0; | 5139 | context_desc->lower_setup.ip_config = 0; |
5144 | context_desc->upper_setup.tcp_fields.tucss = css; | 5140 | context_desc->upper_setup.tcp_fields.tucss = css; |
5145 | context_desc->upper_setup.tcp_fields.tucso = | 5141 | context_desc->upper_setup.tcp_fields.tucso = css + skb->csum_offset; |
5146 | css + skb->csum_offset; | ||
5147 | context_desc->upper_setup.tcp_fields.tucse = 0; | 5142 | context_desc->upper_setup.tcp_fields.tucse = 0; |
5148 | context_desc->tcp_seg_setup.data = 0; | 5143 | context_desc->tcp_seg_setup.data = 0; |
5149 | context_desc->cmd_and_length = cpu_to_le32(cmd_len); | 5144 | context_desc->cmd_and_length = cpu_to_le32(cmd_len); |
@@ -5265,7 +5260,7 @@ static void e1000_tx_queue(struct e1000_ring *tx_ring, int tx_flags, int count) | |||
5265 | 5260 | ||
5266 | if (tx_flags & E1000_TX_FLAGS_TSO) { | 5261 | if (tx_flags & E1000_TX_FLAGS_TSO) { |
5267 | txd_lower |= E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D | | 5262 | txd_lower |= E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D | |
5268 | E1000_TXD_CMD_TSE; | 5263 | E1000_TXD_CMD_TSE; |
5269 | txd_upper |= E1000_TXD_POPTS_TXSM << 8; | 5264 | txd_upper |= E1000_TXD_POPTS_TXSM << 8; |
5270 | 5265 | ||
5271 | if (tx_flags & E1000_TX_FLAGS_IPV4) | 5266 | if (tx_flags & E1000_TX_FLAGS_IPV4) |
@@ -5296,8 +5291,8 @@ static void e1000_tx_queue(struct e1000_ring *tx_ring, int tx_flags, int count) | |||
5296 | buffer_info = &tx_ring->buffer_info[i]; | 5291 | buffer_info = &tx_ring->buffer_info[i]; |
5297 | tx_desc = E1000_TX_DESC(*tx_ring, i); | 5292 | tx_desc = E1000_TX_DESC(*tx_ring, i); |
5298 | tx_desc->buffer_addr = cpu_to_le64(buffer_info->dma); | 5293 | tx_desc->buffer_addr = cpu_to_le64(buffer_info->dma); |
5299 | tx_desc->lower.data = | 5294 | tx_desc->lower.data = cpu_to_le32(txd_lower | |
5300 | cpu_to_le32(txd_lower | buffer_info->length); | 5295 | buffer_info->length); |
5301 | tx_desc->upper.data = cpu_to_le32(txd_upper); | 5296 | tx_desc->upper.data = cpu_to_le32(txd_upper); |
5302 | 5297 | ||
5303 | i++; | 5298 | i++; |
@@ -5597,18 +5592,15 @@ struct rtnl_link_stats64 *e1000e_get_stats64(struct net_device *netdev, | |||
5597 | * our own version based on RUC and ROC | 5592 | * our own version based on RUC and ROC |
5598 | */ | 5593 | */ |
5599 | stats->rx_errors = adapter->stats.rxerrc + | 5594 | stats->rx_errors = adapter->stats.rxerrc + |
5600 | adapter->stats.crcerrs + adapter->stats.algnerrc + | 5595 | adapter->stats.crcerrs + adapter->stats.algnerrc + |
5601 | adapter->stats.ruc + adapter->stats.roc + | 5596 | adapter->stats.ruc + adapter->stats.roc + adapter->stats.cexterr; |
5602 | adapter->stats.cexterr; | 5597 | stats->rx_length_errors = adapter->stats.ruc + adapter->stats.roc; |
5603 | stats->rx_length_errors = adapter->stats.ruc + | ||
5604 | adapter->stats.roc; | ||
5605 | stats->rx_crc_errors = adapter->stats.crcerrs; | 5598 | stats->rx_crc_errors = adapter->stats.crcerrs; |
5606 | stats->rx_frame_errors = adapter->stats.algnerrc; | 5599 | stats->rx_frame_errors = adapter->stats.algnerrc; |
5607 | stats->rx_missed_errors = adapter->stats.mpc; | 5600 | stats->rx_missed_errors = adapter->stats.mpc; |
5608 | 5601 | ||
5609 | /* Tx Errors */ | 5602 | /* Tx Errors */ |
5610 | stats->tx_errors = adapter->stats.ecol + | 5603 | stats->tx_errors = adapter->stats.ecol + adapter->stats.latecol; |
5611 | adapter->stats.latecol; | ||
5612 | stats->tx_aborted_errors = adapter->stats.ecol; | 5604 | stats->tx_aborted_errors = adapter->stats.ecol; |
5613 | stats->tx_window_errors = adapter->stats.latecol; | 5605 | stats->tx_window_errors = adapter->stats.latecol; |
5614 | stats->tx_carrier_errors = adapter->stats.tncrs; | 5606 | stats->tx_carrier_errors = adapter->stats.tncrs; |
@@ -6002,8 +5994,7 @@ static void e1000_power_off(struct pci_dev *pdev, bool sleep, bool wake) | |||
6002 | pci_set_power_state(pdev, PCI_D3hot); | 5994 | pci_set_power_state(pdev, PCI_D3hot); |
6003 | } | 5995 | } |
6004 | 5996 | ||
6005 | static void e1000_complete_shutdown(struct pci_dev *pdev, bool sleep, | 5997 | static void e1000_complete_shutdown(struct pci_dev *pdev, bool sleep, bool wake) |
6006 | bool wake) | ||
6007 | { | 5998 | { |
6008 | struct net_device *netdev = pci_get_drvdata(pdev); | 5999 | struct net_device *netdev = pci_get_drvdata(pdev); |
6009 | struct e1000_adapter *adapter = netdev_priv(netdev); | 6000 | struct e1000_adapter *adapter = netdev_priv(netdev); |
@@ -6413,7 +6404,7 @@ static void e1000_print_device_info(struct e1000_adapter *adapter) | |||
6413 | e_info("(PCI Express:2.5GT/s:%s) %pM\n", | 6404 | e_info("(PCI Express:2.5GT/s:%s) %pM\n", |
6414 | /* bus width */ | 6405 | /* bus width */ |
6415 | ((hw->bus.width == e1000_bus_width_pcie_x4) ? "Width x4" : | 6406 | ((hw->bus.width == e1000_bus_width_pcie_x4) ? "Width x4" : |
6416 | "Width x1"), | 6407 | "Width x1"), |
6417 | /* MAC address */ | 6408 | /* MAC address */ |
6418 | netdev->dev_addr); | 6409 | netdev->dev_addr); |
6419 | e_info("Intel(R) PRO/%s Network Connection\n", | 6410 | e_info("Intel(R) PRO/%s Network Connection\n", |
@@ -6550,7 +6541,8 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
6550 | err = dma_set_coherent_mask(&pdev->dev, | 6541 | err = dma_set_coherent_mask(&pdev->dev, |
6551 | DMA_BIT_MASK(32)); | 6542 | DMA_BIT_MASK(32)); |
6552 | if (err) { | 6543 | if (err) { |
6553 | dev_err(&pdev->dev, "No usable DMA configuration, aborting\n"); | 6544 | dev_err(&pdev->dev, |
6545 | "No usable DMA configuration, aborting\n"); | ||
6554 | goto err_dma; | 6546 | goto err_dma; |
6555 | } | 6547 | } |
6556 | } | 6548 | } |
@@ -6835,7 +6827,7 @@ err_ioremap: | |||
6835 | free_netdev(netdev); | 6827 | free_netdev(netdev); |
6836 | err_alloc_etherdev: | 6828 | err_alloc_etherdev: |
6837 | pci_release_selected_regions(pdev, | 6829 | pci_release_selected_regions(pdev, |
6838 | pci_select_bars(pdev, IORESOURCE_MEM)); | 6830 | pci_select_bars(pdev, IORESOURCE_MEM)); |
6839 | err_pci_reg: | 6831 | err_pci_reg: |
6840 | err_dma: | 6832 | err_dma: |
6841 | pci_disable_device(pdev); | 6833 | pci_disable_device(pdev); |
@@ -6905,7 +6897,7 @@ static void e1000_remove(struct pci_dev *pdev) | |||
6905 | if (adapter->hw.flash_address) | 6897 | if (adapter->hw.flash_address) |
6906 | iounmap(adapter->hw.flash_address); | 6898 | iounmap(adapter->hw.flash_address); |
6907 | pci_release_selected_regions(pdev, | 6899 | pci_release_selected_regions(pdev, |
6908 | pci_select_bars(pdev, IORESOURCE_MEM)); | 6900 | pci_select_bars(pdev, IORESOURCE_MEM)); |
6909 | 6901 | ||
6910 | free_netdev(netdev); | 6902 | free_netdev(netdev); |
6911 | 6903 | ||