diff options
Diffstat (limited to 'drivers/net/b44.c')
| -rw-r--r-- | drivers/net/b44.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/net/b44.c b/drivers/net/b44.c index 6926ebedfdc9..c38512ebcea6 100644 --- a/drivers/net/b44.c +++ b/drivers/net/b44.c | |||
| @@ -73,8 +73,8 @@ | |||
| 73 | (BP)->tx_cons - (BP)->tx_prod - TX_RING_GAP(BP)) | 73 | (BP)->tx_cons - (BP)->tx_prod - TX_RING_GAP(BP)) |
| 74 | #define NEXT_TX(N) (((N) + 1) & (B44_TX_RING_SIZE - 1)) | 74 | #define NEXT_TX(N) (((N) + 1) & (B44_TX_RING_SIZE - 1)) |
| 75 | 75 | ||
| 76 | #define RX_PKT_OFFSET 30 | 76 | #define RX_PKT_OFFSET (RX_HEADER_LEN + 2) |
| 77 | #define RX_PKT_BUF_SZ (1536 + RX_PKT_OFFSET + 64) | 77 | #define RX_PKT_BUF_SZ (1536 + RX_PKT_OFFSET) |
| 78 | 78 | ||
| 79 | /* minimum number of free TX descriptors required to wake up TX process */ | 79 | /* minimum number of free TX descriptors required to wake up TX process */ |
| 80 | #define B44_TX_WAKEUP_THRESH (B44_TX_RING_SIZE / 4) | 80 | #define B44_TX_WAKEUP_THRESH (B44_TX_RING_SIZE / 4) |
| @@ -679,10 +679,10 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked) | |||
| 679 | dev_kfree_skb_any(skb); | 679 | dev_kfree_skb_any(skb); |
| 680 | return -ENOMEM; | 680 | return -ENOMEM; |
| 681 | } | 681 | } |
| 682 | bp->force_copybreak = 1; | ||
| 682 | } | 683 | } |
| 683 | 684 | ||
| 684 | rh = (struct rx_header *) skb->data; | 685 | rh = (struct rx_header *) skb->data; |
| 685 | skb_reserve(skb, RX_PKT_OFFSET); | ||
| 686 | 686 | ||
| 687 | rh->len = 0; | 687 | rh->len = 0; |
| 688 | rh->flags = 0; | 688 | rh->flags = 0; |
| @@ -693,13 +693,13 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked) | |||
| 693 | if (src_map != NULL) | 693 | if (src_map != NULL) |
| 694 | src_map->skb = NULL; | 694 | src_map->skb = NULL; |
| 695 | 695 | ||
| 696 | ctrl = (DESC_CTRL_LEN & (RX_PKT_BUF_SZ - RX_PKT_OFFSET)); | 696 | ctrl = (DESC_CTRL_LEN & RX_PKT_BUF_SZ); |
| 697 | if (dest_idx == (B44_RX_RING_SIZE - 1)) | 697 | if (dest_idx == (B44_RX_RING_SIZE - 1)) |
| 698 | ctrl |= DESC_CTRL_EOT; | 698 | ctrl |= DESC_CTRL_EOT; |
| 699 | 699 | ||
| 700 | dp = &bp->rx_ring[dest_idx]; | 700 | dp = &bp->rx_ring[dest_idx]; |
| 701 | dp->ctrl = cpu_to_le32(ctrl); | 701 | dp->ctrl = cpu_to_le32(ctrl); |
| 702 | dp->addr = cpu_to_le32((u32) mapping + RX_PKT_OFFSET + bp->dma_offset); | 702 | dp->addr = cpu_to_le32((u32) mapping + bp->dma_offset); |
| 703 | 703 | ||
| 704 | if (bp->flags & B44_FLAG_RX_RING_HACK) | 704 | if (bp->flags & B44_FLAG_RX_RING_HACK) |
| 705 | b44_sync_dma_desc_for_device(bp->sdev, bp->rx_ring_dma, | 705 | b44_sync_dma_desc_for_device(bp->sdev, bp->rx_ring_dma, |
| @@ -801,7 +801,7 @@ static int b44_rx(struct b44 *bp, int budget) | |||
| 801 | /* Omit CRC. */ | 801 | /* Omit CRC. */ |
| 802 | len -= 4; | 802 | len -= 4; |
| 803 | 803 | ||
| 804 | if (len > RX_COPY_THRESHOLD) { | 804 | if (!bp->force_copybreak && len > RX_COPY_THRESHOLD) { |
| 805 | int skb_size; | 805 | int skb_size; |
| 806 | skb_size = b44_alloc_rx_skb(bp, cons, bp->rx_prod); | 806 | skb_size = b44_alloc_rx_skb(bp, cons, bp->rx_prod); |
| 807 | if (skb_size < 0) | 807 | if (skb_size < 0) |
| @@ -809,8 +809,8 @@ static int b44_rx(struct b44 *bp, int budget) | |||
| 809 | ssb_dma_unmap_single(bp->sdev, map, | 809 | ssb_dma_unmap_single(bp->sdev, map, |
| 810 | skb_size, DMA_FROM_DEVICE); | 810 | skb_size, DMA_FROM_DEVICE); |
| 811 | /* Leave out rx_header */ | 811 | /* Leave out rx_header */ |
| 812 | skb_put(skb, len + RX_PKT_OFFSET); | 812 | skb_put(skb, len + RX_PKT_OFFSET); |
| 813 | skb_pull(skb, RX_PKT_OFFSET); | 813 | skb_pull(skb, RX_PKT_OFFSET); |
| 814 | } else { | 814 | } else { |
| 815 | struct sk_buff *copy_skb; | 815 | struct sk_buff *copy_skb; |
| 816 | 816 | ||
| @@ -2153,6 +2153,7 @@ static int __devinit b44_init_one(struct ssb_device *sdev, | |||
| 2153 | bp = netdev_priv(dev); | 2153 | bp = netdev_priv(dev); |
| 2154 | bp->sdev = sdev; | 2154 | bp->sdev = sdev; |
| 2155 | bp->dev = dev; | 2155 | bp->dev = dev; |
| 2156 | bp->force_copybreak = 0; | ||
| 2156 | 2157 | ||
| 2157 | bp->msg_enable = netif_msg_init(b44_debug, B44_DEF_MSG_ENABLE); | 2158 | bp->msg_enable = netif_msg_init(b44_debug, B44_DEF_MSG_ENABLE); |
| 2158 | 2159 | ||
