rename target/linux/generic-2.6 to generic
[openwrt.git] / target / linux / generic / patches-2.6.30 / 630-phy_packets.patch
diff --git a/target/linux/generic/patches-2.6.30/630-phy_packets.patch b/target/linux/generic/patches-2.6.30/630-phy_packets.patch
new file mode 100644 (file)
index 0000000..ab62b00
--- /dev/null
@@ -0,0 +1,63 @@
+--- a/drivers/net/phy/phy_device.c
++++ b/drivers/net/phy/phy_device.c
+@@ -143,6 +143,18 @@ int phy_scan_fixups(struct phy_device *p
+ }
+ EXPORT_SYMBOL(phy_scan_fixups);
++static int generic_receive_skb(struct sk_buff *skb)
++{
++      skb->protocol = eth_type_trans(skb, skb->dev);
++      return netif_receive_skb(skb);
++}
++
++static int generic_rx(struct sk_buff *skb)
++{
++      skb->protocol = eth_type_trans(skb, skb->dev);
++      return netif_rx(skb);
++}
++
+ struct phy_device* phy_device_create(struct mii_bus *bus, int addr, int phy_id)
+ {
+       struct phy_device *dev;
+@@ -168,6 +180,8 @@ struct phy_device* phy_device_create(str
+       dev->bus = bus;
+       dev->state = PHY_DOWN;
++      dev->netif_receive_skb = &generic_receive_skb;
++      dev->netif_rx = &generic_rx;
+       mutex_init(&dev->lock);
+--- a/include/linux/phy.h
++++ b/include/linux/phy.h
+@@ -325,6 +325,20 @@ struct phy_device {
+       void (*adjust_link)(struct net_device *dev);
+       void (*adjust_state)(struct net_device *dev);
++
++      /*
++       * By default these point to the original functions
++       * with the same name. adding them to the phy_device
++       * allows the phy driver to override them for packet
++       * mangling if the ethernet driver supports it
++       * This is required to support some really horrible
++       * switches such as the Marvell 88E6060
++       */
++      int (*netif_receive_skb)(struct sk_buff *skb);
++      int (*netif_rx)(struct sk_buff *skb);
++
++      /* alignment offset for packets */
++      int pkt_align;
+ };
+ #define to_phy_device(d) container_of(d, struct phy_device, dev)
+--- a/include/linux/netdevice.h
++++ b/include/linux/netdevice.h
+@@ -770,6 +770,7 @@ struct net_device
+       void                    *ax25_ptr;      /* AX.25 specific data */
+       struct wireless_dev     *ieee80211_ptr; /* IEEE 802.11 specific data,
+                                                  assign before registering */
++      void                    *phy_ptr; /* PHY device specific data */
+ /*
+  * Cache line mostly used on receive path (including eth_type_trans())
This page took 0.027396 seconds and 4 git commands to generate.