200-ar2313_enable_mvswitch.patch 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. --- a/drivers/net/ar231x.c
  2. +++ b/drivers/net/ar231x.c
  3. @@ -736,6 +736,7 @@ static void ar231x_load_rx_ring(struct n
  4. for (i = 0; i < nr_bufs; i++) {
  5. struct sk_buff *skb;
  6. ar231x_descr_t *rd;
  7. + int offset = RX_OFFSET;
  8. if (sp->rx_skb[idx])
  9. break;
  10. @@ -754,7 +755,9 @@ static void ar231x_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 = (ar231x_descr_t *) & sp->rx_ring[idx];
  20. @@ -829,6 +832,7 @@ static int ar231x_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. @@ -836,13 +840,17 @@ static int ar231x_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. @@ -1244,6 +1252,8 @@ static int ar231x_mdiobus_probe (struct
  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/ar231x.h
  54. +++ b/drivers/net/ar231x.h
  55. @@ -221,6 +221,8 @@ typedef struct {
  56. */
  57. struct ar231x_private {
  58. struct net_device *dev;
  59. + int (*rx)(struct sk_buff *skb);
  60. +
  61. int version;
  62. u32 mb[2];