|
|
@@ -1,60 +0,0 @@
|
|
|
---- a/drivers/net/phy/phy_device.c
|
|
|
-+++ b/drivers/net/phy/phy_device.c
|
|
|
-@@ -44,6 +44,18 @@ static struct phy_driver genphy_driver;
|
|
|
- extern int mdio_bus_init(void);
|
|
|
- extern void mdio_bus_exit(void);
|
|
|
-
|
|
|
-+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;
|
|
|
-@@ -67,6 +79,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;
|
|
|
-
|
|
|
- spin_lock_init(&dev->lock);
|
|
|
-
|
|
|
---- a/include/linux/phy.h
|
|
|
-+++ b/include/linux/phy.h
|
|
|
-@@ -289,6 +289,17 @@ 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);
|
|
|
- };
|
|
|
- #define to_phy_device(d) container_of(d, struct phy_device, dev)
|
|
|
-
|
|
|
---- a/include/linux/netdevice.h
|
|
|
-+++ b/include/linux/netdevice.h
|
|
|
-@@ -426,6 +426,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())
|