1 Index: linux-2.6.32.25/drivers/net/cpmac.c
2 ===================================================================
3 --- linux-2.6.32.25.orig/drivers/net/cpmac.c 2010-11-24 12:16:56.067517245 -0800
4 +++ linux-2.6.32.25/drivers/net/cpmac.c 2010-11-24 12:17:56.279985384 -0800
6 struct cpmac_desc *desc)
8 struct sk_buff *skb, *result = NULL;
11 if (unlikely(netif_msg_hw(priv)))
12 cpmac_dump_desc(priv->dev, desc);
15 skb = netdev_alloc_skb(priv->dev, CPMAC_SKB_SIZE);
17 - skb_reserve(skb, 2);
20 + offset += priv->phy->pkt_align;
22 + skb_reserve(skb, offset);
24 skb_put(desc->skb, desc->datalen);
25 - desc->skb->protocol = eth_type_trans(desc->skb, priv->dev);
26 desc->skb->ip_summed = CHECKSUM_NONE;
27 priv->dev->stats.rx_packets++;
28 priv->dev->stats.rx_bytes += desc->datalen;
31 skb = cpmac_rx_one(priv, desc);
33 - netif_receive_skb(skb);
34 + if (priv->phy->netif_receive_skb) {
35 + priv->phy->netif_receive_skb(skb);
37 + skb->protocol = eth_type_trans(skb, priv->dev);
38 + netif_receive_skb(skb);
45 static int cpmac_open(struct net_device *dev)
48 + int i, size, res, offset;
49 struct cpmac_priv *priv = netdev_priv(dev);
51 struct cpmac_desc *desc;
52 @@ -1014,7 +1024,12 @@
56 - skb_reserve(skb, 2);
59 + offset += priv->phy->pkt_align;
61 + skb_reserve(skb, offset);
64 desc->data_mapping = dma_map_single(&dev->dev, skb->data,