diff options
| -rw-r--r-- | drivers/net/e1000/e1000_main.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 479915a9f0fb..e54890aff5f1 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c | |||
| @@ -1777,6 +1777,15 @@ e1000_tx_map(struct e1000_adapter *adapter, struct sk_buff *skb, | |||
| 1777 | if(unlikely(mss && !nr_frags && size == len && size > 8)) | 1777 | if(unlikely(mss && !nr_frags && size == len && size > 8)) |
| 1778 | size -= 4; | 1778 | size -= 4; |
| 1779 | #endif | 1779 | #endif |
| 1780 | /* work-around for errata 10 and it applies | ||
| 1781 | * to all controllers in PCI-X mode | ||
| 1782 | * The fix is to make sure that the first descriptor of a | ||
| 1783 | * packet is smaller than 2048 - 16 - 16 (or 2016) bytes | ||
| 1784 | */ | ||
| 1785 | if(unlikely((adapter->hw.bus_type == e1000_bus_type_pcix) && | ||
| 1786 | (size > 2015) && count == 0)) | ||
| 1787 | size = 2015; | ||
| 1788 | |||
| 1780 | /* Workaround for potential 82544 hang in PCI-X. Avoid | 1789 | /* Workaround for potential 82544 hang in PCI-X. Avoid |
| 1781 | * terminating buffers within evenly-aligned dwords. */ | 1790 | * terminating buffers within evenly-aligned dwords. */ |
| 1782 | if(unlikely(adapter->pcix_82544 && | 1791 | if(unlikely(adapter->pcix_82544 && |
| @@ -1979,6 +1988,13 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev) | |||
| 1979 | if(adapter->pcix_82544) | 1988 | if(adapter->pcix_82544) |
| 1980 | count++; | 1989 | count++; |
| 1981 | 1990 | ||
| 1991 | /* work-around for errata 10 and it applies to all controllers | ||
| 1992 | * in PCI-X mode, so add one more descriptor to the count | ||
| 1993 | */ | ||
| 1994 | if(unlikely((adapter->hw.bus_type == e1000_bus_type_pcix) && | ||
| 1995 | (len > 2015))) | ||
| 1996 | count++; | ||
| 1997 | |||
| 1982 | nr_frags = skb_shinfo(skb)->nr_frags; | 1998 | nr_frags = skb_shinfo(skb)->nr_frags; |
| 1983 | for(f = 0; f < nr_frags; f++) | 1999 | for(f = 0; f < nr_frags; f++) |
| 1984 | count += TXD_USE_COUNT(skb_shinfo(skb)->frags[f].size, | 2000 | count += TXD_USE_COUNT(skb_shinfo(skb)->frags[f].size, |
