200-ar2313_enable_mvswitch.patch 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. --- a/drivers/net/ar2313/ar2313.c
  2. +++ b/drivers/net/ar2313/ar2313.c
  3. @@ -834,6 +834,7 @@ static void ar2313_load_rx_ring(struct n
  4. for (i = 0; i < nr_bufs; i++) {
  5. struct sk_buff *skb;
  6. ar2313_descr_t *rd;
  7. + int offset = RX_OFFSET;
  8. if (sp->rx_skb[idx]) {
  9. #if DEBUG_RX
  10. @@ -855,7 +856,9 @@ static void ar2313_load_rx_ring(struct n
  11. * Make sure IP header starts on a fresh cache line.
  12. */
  13. skb->dev = dev;
  14. - skb_reserve(skb, RX_OFFSET);
  15. + if (sp->phy_dev)
  16. + offset += sp->phy_dev->pkt_align;
  17. + skb_reserve(skb, offset);
  18. sp->rx_skb[idx] = skb;
  19. rd = (ar2313_descr_t *) & sp->rx_ring[idx];
  20. @@ -946,6 +949,7 @@ static int ar2313_rx_int(struct net_devi
  21. /* alloc new buffer. */
  22. skb_new = dev_alloc_skb(AR2313_BUFSIZE + RX_OFFSET + 128);
  23. if (skb_new != NULL) {
  24. + int offset;
  25. skb = sp->rx_skb[idx];
  26. /* set skb */
  27. @@ -953,13 +957,17 @@ static int ar2313_rx_int(struct net_devi
  28. ((status >> DMA_RX_LEN_SHIFT) & 0x3fff) - CRC_LEN);
  29. dev->stats.rx_bytes += skb->len;
  30. - skb->protocol = eth_type_trans(skb, dev);
  31. +
  32. /* pass the packet to upper layers */
  33. - netif_rx(skb);
  34. + sp->rx(skb);
  35. skb_new->dev = dev;
  36. +
  37. /* 16 bit align */
  38. - skb_reserve(skb_new, RX_OFFSET + 32);
  39. + offset = RX_OFFSET + 32;
  40. + if (sp->phy_dev)
  41. + offset += sp->phy_dev->pkt_align;
  42. + skb_reserve(skb_new, offset);
  43. /* reset descriptor's curr_addr */
  44. rxdesc->addr = virt_to_phys(skb_new->data);
  45. @@ -1370,6 +1378,8 @@ static int mdiobus_probe (struct net_dev
  46. return PTR_ERR(phydev);
  47. }
  48. + sp->rx = phydev->netif_rx;
  49. +
  50. /* mask with MAC supported features */
  51. phydev->supported &= (SUPPORTED_10baseT_Half
  52. | SUPPORTED_10baseT_Full
  53. --- a/drivers/net/ar2313/ar2313.h
  54. +++ b/drivers/net/ar2313/ar2313.h
  55. @@ -107,6 +107,8 @@ typedef struct {
  56. */
  57. struct ar2313_private {
  58. struct net_device *dev;
  59. + int (*rx)(struct sk_buff *skb);
  60. +
  61. int version;
  62. u32 mb[2];