atheros: added marvell switch driver
[openwrt.git] / target / linux / generic-2.6 / patches-2.6.25 / 630-phy_packets.patch
1 Index: linux-2.6.23.16/drivers/net/phy/phy_device.c
2 ===================================================================
3 --- linux-2.6.23.16.orig/drivers/net/phy/phy_device.c   2008-04-20 10:16:21.000000000 +0200
4 +++ linux-2.6.23.16/drivers/net/phy/phy_device.c        2008-04-29 14:20:03.000000000 +0200
5 @@ -44,6 +44,18 @@
6  extern int mdio_bus_init(void);
7  extern void mdio_bus_exit(void);
8  
9 +static int generic_receive_skb(struct sk_buff *skb)
10 +{
11 +       skb->protocol = eth_type_trans(skb, skb->dev);
12 +       return netif_receive_skb(skb);
13 +}
14 +
15 +static int generic_rx(struct sk_buff *skb)
16 +{
17 +       skb->protocol = eth_type_trans(skb, skb->dev);
18 +       return netif_rx(skb);
19 +}
20 +
21  struct phy_device* phy_device_create(struct mii_bus *bus, int addr, int phy_id)
22  {
23         struct phy_device *dev;
24 @@ -67,6 +79,8 @@
25         dev->bus = bus;
26  
27         dev->state = PHY_DOWN;
28 +       dev->netif_receive_skb = &generic_receive_skb;
29 +       dev->netif_rx = &generic_rx;
30  
31         spin_lock_init(&dev->lock);
32  
33 Index: linux-2.6.23.16/include/linux/phy.h
34 ===================================================================
35 --- linux-2.6.23.16.orig/include/linux/phy.h    2008-04-20 10:16:21.000000000 +0200
36 +++ linux-2.6.23.16/include/linux/phy.h 2008-04-20 10:17:58.000000000 +0200
37 @@ -289,6 +289,17 @@
38         void (*adjust_link)(struct net_device *dev);
39  
40         void (*adjust_state)(struct net_device *dev);
41 +
42 +       /*
43 +        * By default these point to the original functions
44 +        * with the same name. adding them to the phy_device
45 +        * allows the phy driver to override them for packet
46 +        * mangling if the ethernet driver supports it
47 +        * This is required to support some really horrible
48 +        * switches such as the Marvell 88E6060
49 +        */
50 +       int (*netif_receive_skb)(struct sk_buff *skb);
51 +       int (*netif_rx)(struct sk_buff *skb);
52  };
53  #define to_phy_device(d) container_of(d, struct phy_device, dev)
54  
55 Index: linux-2.6.23.16/include/linux/netdevice.h
56 ===================================================================
57 --- linux-2.6.23.16.orig/include/linux/netdevice.h      2008-04-20 10:16:21.000000000 +0200
58 +++ linux-2.6.23.16/include/linux/netdevice.h   2008-04-20 10:17:58.000000000 +0200
59 @@ -426,6 +426,7 @@
60         void                    *ax25_ptr;      /* AX.25 specific data */
61         struct wireless_dev     *ieee80211_ptr; /* IEEE 802.11 specific data,
62                                                    assign before registering */
63 +       void                    *phy_ptr; /* PHY device specific data */
64  
65  /*
66   * Cache line mostly used on receive path (including eth_type_trans())