diff options
Diffstat (limited to 'drivers/net/ethernet/intel/e1000e/netdev.c')
-rw-r--r-- | drivers/net/ethernet/intel/e1000e/netdev.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index e14fd85f64eb..1e8c40fd5c3d 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c | |||
@@ -4189,7 +4189,7 @@ static int e1000_sw_init(struct e1000_adapter *adapter) | |||
4189 | /* Setup hardware time stamping cyclecounter */ | 4189 | /* Setup hardware time stamping cyclecounter */ |
4190 | if (adapter->flags & FLAG_HAS_HW_TIMESTAMP) { | 4190 | if (adapter->flags & FLAG_HAS_HW_TIMESTAMP) { |
4191 | adapter->cc.read = e1000e_cyclecounter_read; | 4191 | adapter->cc.read = e1000e_cyclecounter_read; |
4192 | adapter->cc.mask = CLOCKSOURCE_MASK(64); | 4192 | adapter->cc.mask = CYCLECOUNTER_MASK(64); |
4193 | adapter->cc.mult = 1; | 4193 | adapter->cc.mult = 1; |
4194 | /* cc.shift set in e1000e_get_base_tininca() */ | 4194 | /* cc.shift set in e1000e_get_base_tininca() */ |
4195 | 4195 | ||
@@ -5444,16 +5444,6 @@ static void e1000_tx_queue(struct e1000_ring *tx_ring, int tx_flags, int count) | |||
5444 | wmb(); | 5444 | wmb(); |
5445 | 5445 | ||
5446 | tx_ring->next_to_use = i; | 5446 | tx_ring->next_to_use = i; |
5447 | |||
5448 | if (adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA) | ||
5449 | e1000e_update_tdt_wa(tx_ring, i); | ||
5450 | else | ||
5451 | writel(i, tx_ring->tail); | ||
5452 | |||
5453 | /* we need this if more than one processor can write to our tail | ||
5454 | * at a time, it synchronizes IO on IA64/Altix systems | ||
5455 | */ | ||
5456 | mmiowb(); | ||
5457 | } | 5447 | } |
5458 | 5448 | ||
5459 | #define MINIMUM_DHCP_PACKET_SIZE 282 | 5449 | #define MINIMUM_DHCP_PACKET_SIZE 282 |
@@ -5463,8 +5453,8 @@ static int e1000_transfer_dhcp_info(struct e1000_adapter *adapter, | |||
5463 | struct e1000_hw *hw = &adapter->hw; | 5453 | struct e1000_hw *hw = &adapter->hw; |
5464 | u16 length, offset; | 5454 | u16 length, offset; |
5465 | 5455 | ||
5466 | if (vlan_tx_tag_present(skb) && | 5456 | if (skb_vlan_tag_present(skb) && |
5467 | !((vlan_tx_tag_get(skb) == adapter->hw.mng_cookie.vlan_id) && | 5457 | !((skb_vlan_tag_get(skb) == adapter->hw.mng_cookie.vlan_id) && |
5468 | (adapter->hw.mng_cookie.status & | 5458 | (adapter->hw.mng_cookie.status & |
5469 | E1000_MNG_DHCP_COOKIE_STATUS_VLAN))) | 5459 | E1000_MNG_DHCP_COOKIE_STATUS_VLAN))) |
5470 | return 0; | 5460 | return 0; |
@@ -5603,9 +5593,10 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb, | |||
5603 | if (e1000_maybe_stop_tx(tx_ring, count + 2)) | 5593 | if (e1000_maybe_stop_tx(tx_ring, count + 2)) |
5604 | return NETDEV_TX_BUSY; | 5594 | return NETDEV_TX_BUSY; |
5605 | 5595 | ||
5606 | if (vlan_tx_tag_present(skb)) { | 5596 | if (skb_vlan_tag_present(skb)) { |
5607 | tx_flags |= E1000_TX_FLAGS_VLAN; | 5597 | tx_flags |= E1000_TX_FLAGS_VLAN; |
5608 | tx_flags |= (vlan_tx_tag_get(skb) << E1000_TX_FLAGS_VLAN_SHIFT); | 5598 | tx_flags |= (skb_vlan_tag_get(skb) << |
5599 | E1000_TX_FLAGS_VLAN_SHIFT); | ||
5609 | } | 5600 | } |
5610 | 5601 | ||
5611 | first = tx_ring->next_to_use; | 5602 | first = tx_ring->next_to_use; |
@@ -5635,8 +5626,9 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb, | |||
5635 | count = e1000_tx_map(tx_ring, skb, first, adapter->tx_fifo_limit, | 5626 | count = e1000_tx_map(tx_ring, skb, first, adapter->tx_fifo_limit, |
5636 | nr_frags); | 5627 | nr_frags); |
5637 | if (count) { | 5628 | if (count) { |
5638 | if (unlikely((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) && | 5629 | if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) && |
5639 | !adapter->tx_hwtstamp_skb)) { | 5630 | (adapter->flags & FLAG_HAS_HW_TIMESTAMP) && |
5631 | !adapter->tx_hwtstamp_skb) { | ||
5640 | skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; | 5632 | skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; |
5641 | tx_flags |= E1000_TX_FLAGS_HWTSTAMP; | 5633 | tx_flags |= E1000_TX_FLAGS_HWTSTAMP; |
5642 | adapter->tx_hwtstamp_skb = skb_get(skb); | 5634 | adapter->tx_hwtstamp_skb = skb_get(skb); |
@@ -5653,6 +5645,21 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb, | |||
5653 | (MAX_SKB_FRAGS * | 5645 | (MAX_SKB_FRAGS * |
5654 | DIV_ROUND_UP(PAGE_SIZE, | 5646 | DIV_ROUND_UP(PAGE_SIZE, |
5655 | adapter->tx_fifo_limit) + 2)); | 5647 | adapter->tx_fifo_limit) + 2)); |
5648 | |||
5649 | if (!skb->xmit_more || | ||
5650 | netif_xmit_stopped(netdev_get_tx_queue(netdev, 0))) { | ||
5651 | if (adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA) | ||
5652 | e1000e_update_tdt_wa(tx_ring, | ||
5653 | tx_ring->next_to_use); | ||
5654 | else | ||
5655 | writel(tx_ring->next_to_use, tx_ring->tail); | ||
5656 | |||
5657 | /* we need this if more than one processor can write | ||
5658 | * to our tail at a time, it synchronizes IO on | ||
5659 | *IA64/Altix systems | ||
5660 | */ | ||
5661 | mmiowb(); | ||
5662 | } | ||
5656 | } else { | 5663 | } else { |
5657 | dev_kfree_skb_any(skb); | 5664 | dev_kfree_skb_any(skb); |
5658 | tx_ring->buffer_info[first].time_stamp = 0; | 5665 | tx_ring->buffer_info[first].time_stamp = 0; |