[ar7] rename 973-cpmac_handle_mvswitch.c to 973-cpmac_handle_mvswitch.patch
[openwrt.git] / target / linux / ar7 / patches-2.6.32 / 973-cpmac_handle_mvswitch.patch
diff --git a/target/linux/ar7/patches-2.6.32/973-cpmac_handle_mvswitch.patch b/target/linux/ar7/patches-2.6.32/973-cpmac_handle_mvswitch.patch
new file mode 100644 (file)
index 0000000..23c66aa
--- /dev/null
@@ -0,0 +1,65 @@
+Index: linux-2.6.32.25/drivers/net/cpmac.c
+===================================================================
+--- linux-2.6.32.25.orig/drivers/net/cpmac.c   2010-11-24 12:16:56.067517245 -0800
++++ linux-2.6.32.25/drivers/net/cpmac.c        2010-11-24 12:17:56.279985384 -0800
+@@ -387,6 +387,7 @@
+                                   struct cpmac_desc *desc)
+ {
+       struct sk_buff *skb, *result = NULL;
++      int offset;
+       if (unlikely(netif_msg_hw(priv)))
+               cpmac_dump_desc(priv->dev, desc);
+@@ -400,9 +401,13 @@
+       skb = netdev_alloc_skb(priv->dev, CPMAC_SKB_SIZE);
+       if (likely(skb)) {
+-              skb_reserve(skb, 2);
++              offset = 2;
++              if (priv->phy) {
++                      offset += priv->phy->pkt_align;
++              }
++              skb_reserve(skb, offset);
++
+               skb_put(desc->skb, desc->datalen);
+-              desc->skb->protocol = eth_type_trans(desc->skb, priv->dev);
+               desc->skb->ip_summed = CHECKSUM_NONE;
+               priv->dev->stats.rx_packets++;
+               priv->dev->stats.rx_bytes += desc->datalen;
+@@ -474,7 +479,12 @@
+               skb = cpmac_rx_one(priv, desc);
+               if (likely(skb)) {
+-                      netif_receive_skb(skb);
++                      if (priv->phy->netif_receive_skb) {
++                              priv->phy->netif_receive_skb(skb);
++                      } else {
++                              skb->protocol = eth_type_trans(skb, priv->dev);
++                              netif_receive_skb(skb);
++                      }
+                       received++;
+               }
+               desc = desc->next;
+@@ -970,7 +980,7 @@
+ static int cpmac_open(struct net_device *dev)
+ {
+-      int i, size, res;
++      int i, size, res, offset;
+       struct cpmac_priv *priv = netdev_priv(dev);
+       struct resource *mem;
+       struct cpmac_desc *desc;
+@@ -1014,7 +1024,12 @@
+                       res = -ENOMEM;
+                       goto fail_desc;
+               }
+-              skb_reserve(skb, 2);
++              offset = 2;
++              if (priv->phy) {
++                      offset += priv->phy->pkt_align;
++              }
++              skb_reserve(skb, offset);
++
+               desc->skb = skb;
+               desc->data_mapping = dma_map_single(&dev->dev, skb->data,
+                                                   CPMAC_SKB_SIZE,
This page took 0.031334 seconds and 4 git commands to generate.