diff options
| author | Paul Mackerras <paulus@samba.org> | 2008-04-14 07:11:02 -0400 |
|---|---|---|
| committer | Paul Mackerras <paulus@samba.org> | 2008-04-14 07:11:02 -0400 |
| commit | ac7c5353b189e10cf5dd27399f64f7b013abffc6 (patch) | |
| tree | 8222d92b774c256d6ec4399c716d76b3f05ddc4b /drivers/net/igb/igb_main.c | |
| parent | a8f75ea70c58546205fb7673be41455b9da5d9a7 (diff) | |
| parent | 120dd64cacd4fb796bca0acba3665553f1d9ecaa (diff) | |
Merge branch 'linux-2.6'
Diffstat (limited to 'drivers/net/igb/igb_main.c')
| -rw-r--r-- | drivers/net/igb/igb_main.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index 928ce8287e69..aaee02e9e3f0 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c | |||
| @@ -3254,6 +3254,13 @@ quit_polling: | |||
| 3254 | 3254 | ||
| 3255 | return 1; | 3255 | return 1; |
| 3256 | } | 3256 | } |
| 3257 | |||
| 3258 | static inline u32 get_head(struct igb_ring *tx_ring) | ||
| 3259 | { | ||
| 3260 | void *end = (struct e1000_tx_desc *)tx_ring->desc + tx_ring->count; | ||
| 3261 | return le32_to_cpu(*(volatile __le32 *)end); | ||
| 3262 | } | ||
| 3263 | |||
| 3257 | /** | 3264 | /** |
| 3258 | * igb_clean_tx_irq - Reclaim resources after transmit completes | 3265 | * igb_clean_tx_irq - Reclaim resources after transmit completes |
| 3259 | * @adapter: board private structure | 3266 | * @adapter: board private structure |
| @@ -3275,9 +3282,7 @@ static bool igb_clean_tx_irq(struct igb_adapter *adapter, | |||
| 3275 | unsigned int total_bytes = 0, total_packets = 0; | 3282 | unsigned int total_bytes = 0, total_packets = 0; |
| 3276 | 3283 | ||
| 3277 | rmb(); | 3284 | rmb(); |
| 3278 | head = *(volatile u32 *)((struct e1000_tx_desc *)tx_ring->desc | 3285 | head = get_head(tx_ring); |
| 3279 | + tx_ring->count); | ||
| 3280 | head = le32_to_cpu(head); | ||
| 3281 | i = tx_ring->next_to_clean; | 3286 | i = tx_ring->next_to_clean; |
| 3282 | while (1) { | 3287 | while (1) { |
| 3283 | while (i != head) { | 3288 | while (i != head) { |
| @@ -3312,9 +3317,7 @@ static bool igb_clean_tx_irq(struct igb_adapter *adapter, | |||
| 3312 | } | 3317 | } |
| 3313 | oldhead = head; | 3318 | oldhead = head; |
| 3314 | rmb(); | 3319 | rmb(); |
| 3315 | head = *(volatile u32 *)((struct e1000_tx_desc *)tx_ring->desc | 3320 | head = get_head(tx_ring); |
| 3316 | + tx_ring->count); | ||
| 3317 | head = le32_to_cpu(head); | ||
| 3318 | if (head == oldhead) | 3321 | if (head == oldhead) |
| 3319 | goto done_cleaning; | 3322 | goto done_cleaning; |
| 3320 | } /* while (1) */ | 3323 | } /* while (1) */ |
| @@ -3388,7 +3391,7 @@ done_cleaning: | |||
| 3388 | * @vlan: descriptor vlan field as written by hardware (no le/be conversion) | 3391 | * @vlan: descriptor vlan field as written by hardware (no le/be conversion) |
| 3389 | * @skb: pointer to sk_buff to be indicated to stack | 3392 | * @skb: pointer to sk_buff to be indicated to stack |
| 3390 | **/ | 3393 | **/ |
| 3391 | static void igb_receive_skb(struct igb_adapter *adapter, u8 status, u16 vlan, | 3394 | static void igb_receive_skb(struct igb_adapter *adapter, u8 status, __le16 vlan, |
| 3392 | struct sk_buff *skb) | 3395 | struct sk_buff *skb) |
| 3393 | { | 3396 | { |
| 3394 | if (adapter->vlgrp && (status & E1000_RXD_STAT_VP)) | 3397 | if (adapter->vlgrp && (status & E1000_RXD_STAT_VP)) |
| @@ -3452,8 +3455,8 @@ static bool igb_clean_rx_irq_adv(struct igb_adapter *adapter, | |||
| 3452 | * that case, it fills the header buffer and spills the rest | 3455 | * that case, it fills the header buffer and spills the rest |
| 3453 | * into the page. | 3456 | * into the page. |
| 3454 | */ | 3457 | */ |
| 3455 | hlen = le16_to_cpu((rx_desc->wb.lower.lo_dword.hdr_info & | 3458 | hlen = (le16_to_cpu(rx_desc->wb.lower.lo_dword.hdr_info) & |
| 3456 | E1000_RXDADV_HDRBUFLEN_MASK) >> E1000_RXDADV_HDRBUFLEN_SHIFT); | 3459 | E1000_RXDADV_HDRBUFLEN_MASK) >> E1000_RXDADV_HDRBUFLEN_SHIFT; |
| 3457 | if (hlen > adapter->rx_ps_hdr_size) | 3460 | if (hlen > adapter->rx_ps_hdr_size) |
| 3458 | hlen = adapter->rx_ps_hdr_size; | 3461 | hlen = adapter->rx_ps_hdr_size; |
| 3459 | 3462 | ||
