| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- --- a/drivers/net/ar2313/ar2313.c
- +++ b/drivers/net/ar2313/ar2313.c
- @@ -834,6 +834,7 @@ static void ar2313_load_rx_ring(struct n
- for (i = 0; i < nr_bufs; i++) {
- struct sk_buff *skb;
- ar2313_descr_t *rd;
- + int offset = RX_OFFSET;
-
- if (sp->rx_skb[idx]) {
- #if DEBUG_RX
- @@ -855,7 +856,9 @@ static void ar2313_load_rx_ring(struct n
- * Make sure IP header starts on a fresh cache line.
- */
- skb->dev = dev;
- - skb_reserve(skb, RX_OFFSET);
- + if (sp->phy_dev)
- + offset += sp->phy_dev->pkt_align;
- + skb_reserve(skb, offset);
- sp->rx_skb[idx] = skb;
-
- rd = (ar2313_descr_t *) & sp->rx_ring[idx];
- @@ -946,6 +949,7 @@ static int ar2313_rx_int(struct net_devi
- /* alloc new buffer. */
- skb_new = dev_alloc_skb(AR2313_BUFSIZE + RX_OFFSET + 128);
- if (skb_new != NULL) {
- + int offset;
-
- skb = sp->rx_skb[idx];
- /* set skb */
- @@ -953,13 +957,17 @@ static int ar2313_rx_int(struct net_devi
- ((status >> DMA_RX_LEN_SHIFT) & 0x3fff) - CRC_LEN);
-
- dev->stats.rx_bytes += skb->len;
- - skb->protocol = eth_type_trans(skb, dev);
- +
- /* pass the packet to upper layers */
- - netif_rx(skb);
- + sp->rx(skb);
-
- skb_new->dev = dev;
- +
- /* 16 bit align */
- - skb_reserve(skb_new, RX_OFFSET + 32);
- + offset = RX_OFFSET + 32;
- + if (sp->phy_dev)
- + offset += sp->phy_dev->pkt_align;
- + skb_reserve(skb_new, offset);
- /* reset descriptor's curr_addr */
- rxdesc->addr = virt_to_phys(skb_new->data);
-
- @@ -1370,6 +1378,8 @@ static int mdiobus_probe (struct net_dev
- return PTR_ERR(phydev);
- }
-
- + sp->rx = phydev->netif_rx;
- +
- /* mask with MAC supported features */
- phydev->supported &= (SUPPORTED_10baseT_Half
- | SUPPORTED_10baseT_Full
- --- a/drivers/net/ar2313/ar2313.h
- +++ b/drivers/net/ar2313/ar2313.h
- @@ -107,6 +107,8 @@ typedef struct {
- */
- struct ar2313_private {
- struct net_device *dev;
- + int (*rx)(struct sk_buff *skb);
- +
- int version;
- u32 mb[2];
-
|