| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- --- a/drivers/net/phy/phy_device.c
- +++ b/drivers/net/phy/phy_device.c
- @@ -53,6 +53,18 @@
- phy_device_free(to_phy_device(dev));
- }
-
- +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;
- @@ -78,6 +90,8 @@
- 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
- @@ -295,6 +295,17 @@
- 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
- @@ -595,6 +595,7 @@
- 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())
|