Changeset 31637


Ignore:
Timestamp:
2012-05-06T23:19:14+02:00 (6 years ago)
Author:
nbd
Message:

kernel: rewrite the phy packet hook, put it in the network stack to avoid having to keep non-upstream ethernet driver changes

Location:
trunk/target/linux
Files:
3 deleted
34 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/config-3.3

    r31608 r31637  
    103103CONFIG_DMA_NONCOHERENT=y 
    104104CONFIG_EARLY_PRINTK=y 
     105CONFIG_ETHERNET_PACKET_MANGLE=y 
    105106CONFIG_GENERIC_ATOMIC64=y 
    106107CONFIG_GENERIC_CLOCKEVENTS=y 
  • trunk/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c

    r30417 r31637  
    197197} 
    198198 
    199 static int ag71xx_rx_reserve(struct ag71xx *ag) 
    200 { 
    201         int reserve = 0; 
    202  
    203         if (ag71xx_get_pdata(ag)->is_ar724x) { 
    204                 if (!ag71xx_has_ar8216(ag)) 
    205                         reserve = 2; 
    206  
    207                 if (ag->phy_dev) 
    208                         reserve += 4 - (ag->phy_dev->pkt_align % 4); 
    209  
    210                 reserve %= 4; 
    211         } 
    212  
    213         return reserve + AG71XX_RX_PKT_RESERVE; 
     199struct sk_buff *ag71xx_rx_alloc(struct ag71xx *ag) 
     200{ 
     201        /* 
     202         * On AR71xx/AR91xx packets must be 4-byte aligned. 
     203         * 
     204         * When using builtin AR8216 support, hardware adds a 2-byte header, 
     205         * so we don't need any extra alignment in that case. 
     206         */ 
     207        if (!ag71xx_get_pdata(ag)->is_ar724x || ag71xx_has_ar8216(ag)) 
     208                return netdev_alloc_skb(ag->dev, AG71XX_RX_PKT_SIZE); 
     209 
     210        return netdev_alloc_skb_ip_align(ag->dev, AG71XX_RX_PKT_SIZE); 
    214211} 
    215212 
     
    218215{ 
    219216        struct ag71xx_ring *ring = &ag->rx_ring; 
    220         unsigned int reserve = ag71xx_rx_reserve(ag); 
    221217        unsigned int i; 
    222218        int ret; 
     
    236232                dma_addr_t dma_addr; 
    237233 
    238                 skb = dev_alloc_skb(AG71XX_RX_PKT_SIZE + reserve); 
     234                skb = ag71xx_rx_alloc(ag); 
    239235                if (!skb) { 
    240236                        ret = -ENOMEM; 
     
    243239 
    244240                skb->dev = ag->dev; 
    245                 skb_reserve(skb, reserve); 
    246  
    247241                dma_addr = dma_map_single(&ag->dev->dev, skb->data, 
    248242                                          AG71XX_RX_PKT_SIZE, 
     
    266260{ 
    267261        struct ag71xx_ring *ring = &ag->rx_ring; 
    268         unsigned int reserve = ag71xx_rx_reserve(ag); 
    269262        unsigned int count; 
    270263 
     
    279272                        struct sk_buff *skb; 
    280273 
    281                         skb = dev_alloc_skb(AG71XX_RX_PKT_SIZE + reserve); 
     274                        skb = ag71xx_rx_alloc(ag); 
    282275                        if (skb == NULL) 
    283276                                break; 
    284277 
    285                         skb_reserve(skb, reserve); 
    286278                        skb->dev = ag->dev; 
    287279 
     
    915907                        skb->dev = dev; 
    916908                        skb->ip_summed = CHECKSUM_NONE; 
    917                         if (ag->phy_dev) { 
    918                                 ag->phy_dev->netif_receive_skb(skb); 
    919                         } else { 
    920                                 skb->protocol = eth_type_trans(skb, dev); 
    921                                 netif_receive_skb(skb); 
    922                         } 
     909                        skb->protocol = eth_type_trans(skb, dev); 
     910                        netif_receive_skb(skb); 
    923911                } 
    924912 
  • trunk/target/linux/atheros/config-3.3

    r31625 r31637  
    3535CONFIG_DMA_NONCOHERENT=y 
    3636CONFIG_EARLY_PRINTK=y 
     37CONFIG_ETHERNET_PACKET_MANGLE=y 
    3738CONFIG_GENERIC_ATOMIC64=y 
    3839CONFIG_GENERIC_CLOCKEVENTS=y 
  • trunk/target/linux/atheros/patches-3.3/110-ar2313_ethernet.patch

    r31626 r31637  
    3333--- /dev/null 
    3434+++ b/drivers/net/ethernet/ar231x/ar231x.c 
    35 @@ -0,0 +1,1282 @@ 
     35@@ -0,0 +1,1279 @@ 
    3636+/* 
    3737+ * ar231x.c: Linux driver for the Atheros AR231x Ethernet device. 
     
    785785+                       break; 
    786786+ 
    787 +               skb = netdev_alloc_skb(dev, AR2313_BUFSIZE); 
     787+               skb = netdev_alloc_skb_ip_align(dev, AR2313_BUFSIZE); 
    788788+               if (!skb) { 
    789789+                       printk("\n\n\n\n %s: No memory in system\n\n\n\n", 
     
    796796+                */ 
    797797+               skb->dev = dev; 
    798 +               skb_reserve(skb, RX_OFFSET); 
    799798+               sp->rx_skb[idx] = skb; 
    800799+ 
     
    868867+               } else { 
    869868+                       /* alloc new buffer. */ 
    870 +                       skb_new = netdev_alloc_skb(dev, AR2313_BUFSIZE + RX_OFFSET); 
     869+                       skb_new = netdev_alloc_skb_ip_align(dev, AR2313_BUFSIZE); 
    871870+                       if (skb_new != NULL) { 
    872871+ 
     
    882881+ 
    883882+                               skb_new->dev = dev; 
    884 +                               /* 16 bit align */ 
    885 +                               skb_reserve(skb_new, RX_OFFSET); 
    886883+                               /* reset descriptor's curr_addr */ 
    887884+                               rxdesc->addr = virt_to_phys(skb_new->data); 
  • trunk/target/linux/atheros/patches-3.3/220-enet_micrel_workaround.patch

    r31625 r31637  
    4444        return 0; 
    4545 } 
    46 @@ -846,7 +864,12 @@ static int ar231x_rx_int(struct net_devi 
    47                                 dev->stats.rx_bytes += skb->len; 
    48   
    49                                 /* pass the packet to upper layers */ 
    50 -                               sp->rx(skb); 
    51 +                               if (sp->rx) { 
    52 +                                       sp->rx(skb); 
    53 +                               } else { 
    54 +                                       skb->protocol = eth_type_trans(skb, skb->dev); 
    55 +                                       netif_rx(skb); 
    56 +                               } 
    57                                 skb_new->dev = dev; 
    58   
    59                                 /* 16 bit align */ 
    60 @@ -1142,6 +1165,9 @@ static int ar231x_ioctl(struct net_devic 
     46@@ -1133,6 +1151,9 @@ static int ar231x_ioctl(struct net_devic 
    6147        struct ar231x_private *sp = netdev_priv(dev); 
    6248        int ret; 
  • trunk/target/linux/generic/files/drivers/net/phy/ar8216.c

    r31441 r31637  
    222222} 
    223223 
    224 static int 
    225 ar8216_mangle_tx(struct sk_buff *skb, struct net_device *dev) 
     224static struct sk_buff * 
     225ar8216_mangle_tx(struct net_device *dev, struct sk_buff *skb) 
    226226{ 
    227227        struct ar8216_priv *priv = dev->phy_ptr; 
     
    244244 
    245245send: 
    246         return priv->ndo_old->ndo_start_xmit(skb, dev); 
     246        return skb; 
    247247 
    248248error: 
    249249        dev_kfree_skb_any(skb); 
    250         return 0; 
    251 } 
    252  
    253 static int 
    254 ar8216_mangle_rx(struct sk_buff *skb, int napi) 
     250        return NULL; 
     251} 
     252 
     253static void 
     254ar8216_mangle_rx(struct net_device *dev, struct sk_buff *skb) 
    255255{ 
    256256        struct ar8216_priv *priv; 
    257         struct net_device *dev; 
    258257        unsigned char *buf; 
    259258        int port, vlan; 
    260259 
    261         dev = skb->dev; 
    262         if (!dev) 
    263                 goto error; 
    264  
    265260        priv = dev->phy_ptr; 
    266261        if (!priv) 
    267                 goto error; 
     262                return; 
    268263 
    269264        /* don't strip the header if vlan mode is disabled */ 
    270265        if (!priv->vlan) 
    271                 goto recv; 
     266                return; 
    272267 
    273268        /* strip header, get vlan id */ 
     
    277272        /* check for vlan header presence */ 
    278273        if ((buf[12 + 2] != 0x81) || (buf[13 + 2] != 0x00)) 
    279                 goto recv; 
     274                return; 
    280275 
    281276        port = buf[0] & 0xf; 
     
    283278        /* no need to fix up packets coming from a tagged source */ 
    284279        if (priv->vlan_tagged & (1 << port)) 
    285                 goto recv; 
     280                return; 
    286281 
    287282        /* lookup port vid from local table, the switch passes an invalid vlan id */ 
     
    291286        buf[14 + 2] |= vlan >> 8; 
    292287        buf[15 + 2] = vlan & 0xff; 
    293  
    294 recv: 
    295         skb->protocol = eth_type_trans(skb, skb->dev); 
    296  
    297         if (napi) 
    298                 return netif_receive_skb(skb); 
    299         else 
    300                 return netif_rx(skb); 
    301  
    302 error: 
    303         /* no vlan? eat the packet! */ 
    304         dev_kfree_skb_any(skb); 
    305         return NET_RX_DROP; 
    306 } 
    307  
    308 static int 
    309 ar8216_netif_rx(struct sk_buff *skb) 
    310 { 
    311         return ar8216_mangle_rx(skb, 0); 
    312 } 
    313  
    314 static int 
    315 ar8216_netif_receive_skb(struct sk_buff *skb) 
    316 { 
    317         return ar8216_mangle_rx(skb, 1); 
    318288} 
    319289 
     
    13571327        /* VID fixup only needed on ar8216 */ 
    13581328        if (pdev->addr == 0 && priv->chip_type == AR8216) { 
    1359                 pdev->pkt_align = 2; 
    1360                 pdev->netif_receive_skb = ar8216_netif_receive_skb; 
    1361                 pdev->netif_rx = ar8216_netif_rx; 
    1362                 priv->ndo_old = dev->netdev_ops; 
    1363                 memcpy(&priv->ndo, priv->ndo_old, sizeof(struct net_device_ops)); 
    1364                 priv->ndo.ndo_start_xmit = ar8216_mangle_tx; 
    1365                 dev->netdev_ops = &priv->ndo; 
     1329                dev->priv_flags |= IFF_NO_IP_ALIGN; 
     1330                dev->eth_mangle_rx = ar8216_mangle_rx; 
     1331                dev->eth_mangle_tx = ar8216_mangle_tx; 
    13661332        } 
    13671333 
     
    14441410                return; 
    14451411 
    1446         if (priv->ndo_old && dev) 
    1447                 dev->netdev_ops = priv->ndo_old; 
     1412        dev->priv_flags &= ~IFF_NO_IP_ALIGN; 
     1413        dev->eth_mangle_rx = NULL; 
     1414        dev->eth_mangle_tx = NULL; 
     1415 
    14481416        if (pdev->addr == 0) 
    14491417                unregister_switch(&priv->dev); 
  • trunk/target/linux/generic/files/drivers/net/phy/mvswitch.c

    r31625 r31637  
    4242 
    4343struct mvswitch_priv { 
    44         const struct net_device_ops *ndo_old; 
    45         struct net_device_ops ndo; 
     44        netdev_features_t orig_features; 
    4645        u8 vlans[16]; 
    4746}; 
     
    6261 
    6362 
    64 static int 
    65 mvswitch_mangle_tx(struct sk_buff *skb, struct net_device *dev) 
     63static struct sk_buff * 
     64mvswitch_mangle_tx(struct net_device *dev, struct sk_buff *skb) 
    6665{ 
    6766        struct mvswitch_priv *priv; 
     
    133132#endif 
    134133 
    135         return priv->ndo_old->ndo_start_xmit(skb, dev); 
     134        return skb; 
    136135 
    137136error_expand: 
     
    142141        /* any errors? drop the packet! */ 
    143142        dev_kfree_skb_any(skb); 
    144         return 0; 
    145 } 
    146  
    147 static int 
    148 mvswitch_mangle_rx(struct sk_buff *skb, int napi) 
     143        return NULL; 
     144} 
     145 
     146static void 
     147mvswitch_mangle_rx(struct net_device *dev, struct sk_buff *skb) 
    149148{ 
    150149        struct mvswitch_priv *priv; 
    151         struct net_device *dev; 
     150        unsigned char *buf; 
    152151        int vlan = -1; 
    153         unsigned char *buf; 
    154152        int i; 
    155153 
    156         dev = skb->dev; 
    157         if (!dev) 
    158                 goto error; 
    159  
    160154        priv = dev->phy_ptr; 
    161         if (!priv) 
    162                 goto error; 
     155        if (WARN_ON_ONCE(!priv)) 
     156                return; 
    163157 
    164158#ifdef HEADER_MODE 
     
    168162        buf = skb->data + skb->len - MV_TRAILER_SIZE; 
    169163        if (buf[0] != 0x80) 
    170                 goto error; 
     164                return; 
    171165#endif 
    172166 
     
    178172 
    179173        if (vlan == -1) 
    180                 goto error; 
    181  
    182         skb->protocol = eth_type_trans(skb, skb->dev); 
     174                return; 
    183175 
    184176        __vlan_hwaccel_put_tag(skb, vlan); 
    185         if (napi) 
    186                 return netif_receive_skb(skb); 
    187         else 
    188                 return netif_rx(skb); 
    189  
    190 error: 
    191         /* no vlan? eat the packet! */ 
    192         dev_kfree_skb_any(skb); 
    193         return 0; 
    194 } 
    195  
    196  
    197 static int 
    198 mvswitch_netif_rx(struct sk_buff *skb) 
    199 { 
    200         return mvswitch_mangle_rx(skb, 0); 
    201 } 
    202  
    203 static int 
    204 mvswitch_netif_receive_skb(struct sk_buff *skb) 
    205 { 
    206         return mvswitch_mangle_rx(skb, 1); 
    207177} 
    208178 
     
    332302        ); 
    333303 
    334         /* hook into the tx function */ 
    335         priv->ndo_old = dev->netdev_ops; 
    336         memcpy(&priv->ndo, priv->ndo_old, sizeof(struct net_device_ops)); 
    337         priv->ndo.ndo_start_xmit = mvswitch_mangle_tx; 
    338         dev->netdev_ops = &priv->ndo; 
    339  
    340         pdev->pkt_align = 2; 
    341         pdev->netif_receive_skb = mvswitch_netif_receive_skb; 
    342         pdev->netif_rx = mvswitch_netif_rx; 
    343 #ifdef HEADER_MODE 
     304        dev->eth_mangle_rx = mvswitch_mangle_rx; 
     305        dev->eth_mangle_tx = mvswitch_mangle_tx; 
     306        priv->orig_features = dev->features; 
     307 
     308#ifdef HEADER_MODE 
     309        dev->priv_flags |= IFF_NO_IP_ALIGN; 
    344310        dev->features |= NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_TX; 
    345311#else 
     
    388354        struct net_device *dev = pdev->attached_dev; 
    389355 
    390         /* restore old netdev ops */ 
    391         if (priv->ndo_old && dev) 
    392                 dev->netdev_ops = priv->ndo_old; 
    393356        dev->phy_ptr = NULL; 
    394         dev->features &= ~NETIF_F_HW_VLAN_RX; 
     357        dev->eth_mangle_rx = NULL; 
     358        dev->eth_mangle_tx = NULL; 
     359        dev->features = priv->orig_features; 
     360        dev->priv_flags &= ~IFF_NO_IP_ALIGN; 
    395361        kfree(priv); 
    396362} 
  • trunk/target/linux/generic/patches-3.2/721-phy_packets.patch

    r29730 r31637  
    1 --- a/drivers/net/phy/phy_device.c 
    2 +++ b/drivers/net/phy/phy_device.c 
    3 @@ -149,6 +149,18 @@ int phy_scan_fixups(struct phy_device *p 
    4  } 
    5  EXPORT_SYMBOL(phy_scan_fixups); 
    6   
    7 +static int generic_receive_skb(struct sk_buff *skb) 
    8 +{ 
    9 +       skb->protocol = eth_type_trans(skb, skb->dev); 
    10 +       return netif_receive_skb(skb); 
    11 +} 
    12 + 
    13 +static int generic_rx(struct sk_buff *skb) 
    14 +{ 
    15 +       skb->protocol = eth_type_trans(skb, skb->dev); 
    16 +       return netif_rx(skb); 
    17 +} 
    18 + 
    19  static struct phy_device* phy_device_create(struct mii_bus *bus, 
    20                                             int addr, int phy_id) 
    21  { 
    22 @@ -180,6 +192,8 @@ static struct phy_device* phy_device_cre 
    23         dev_set_name(&dev->dev, PHY_ID_FMT, bus->id, addr); 
    24   
    25         dev->state = PHY_DOWN; 
    26 +       dev->netif_receive_skb = &generic_receive_skb; 
    27 +       dev->netif_rx = &generic_rx; 
    28   
    29         mutex_init(&dev->lock); 
    30         INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine); 
    31 --- a/include/linux/phy.h 
    32 +++ b/include/linux/phy.h 
    33 @@ -334,6 +334,20 @@ struct phy_device { 
    34         void (*adjust_link)(struct net_device *dev); 
    35   
    36         void (*adjust_state)(struct net_device *dev); 
    37 + 
    38 +       /* 
    39 +        * By default these point to the original functions 
    40 +        * with the same name. adding them to the phy_device 
    41 +        * allows the phy driver to override them for packet 
    42 +        * mangling if the ethernet driver supports it 
    43 +        * This is required to support some really horrible 
    44 +        * switches such as the Marvell 88E6060 
    45 +        */ 
    46 +       int (*netif_receive_skb)(struct sk_buff *skb); 
    47 +       int (*netif_rx)(struct sk_buff *skb); 
    48 + 
    49 +       /* alignment offset for packets */ 
    50 +       int pkt_align; 
    51  }; 
    52  #define to_phy_device(d) container_of(d, struct phy_device, dev) 
    53   
    541--- a/include/linux/netdevice.h 
    552+++ b/include/linux/netdevice.h 
    56 @@ -1158,6 +1158,7 @@ struct net_device { 
     3@@ -1103,6 +1103,11 @@ struct net_device { 
     4        const struct net_device_ops *netdev_ops; 
     5        const struct ethtool_ops *ethtool_ops; 
     6  
     7+#ifdef CONFIG_ETHERNET_PACKET_MANGLE 
     8+       void (*eth_mangle_rx)(struct net_device *dev, struct sk_buff *skb); 
     9+       struct sk_buff *(*eth_mangle_tx)(struct net_device *dev, struct sk_buff *skb); 
     10+#endif 
     11+ 
     12        /* Hardware header description */ 
     13        const struct header_ops *header_ops; 
     14  
     15@@ -1158,6 +1163,9 @@ struct net_device { 
    5716        void                    *ax25_ptr;      /* AX.25 specific data */ 
    5817        struct wireless_dev     *ieee80211_ptr; /* IEEE 802.11 specific data, 
    5918                                                   assign before registering */ 
     19+#ifdef CONFIG_ETHERNET_PACKET_MANGLE 
    6020+       void                    *phy_ptr; /* PHY device specific data */ 
     21+#endif 
    6122  
    6223 /* 
    6324  * Cache lines mostly used on receive path (including eth_type_trans()) 
     25--- a/include/linux/if.h 
     26+++ b/include/linux/if.h 
     27@@ -79,6 +79,7 @@ 
     28 #define IFF_TX_SKB_SHARING     0x10000 /* The interface supports sharing 
     29                                         * skbs on transmit */ 
     30 #define IFF_UNICAST_FLT        0x20000         /* Supports unicast filtering   */ 
     31+#define IFF_NO_IP_ALIGN        0x40000         /* do not ip-align allocated rx pkts */ 
     32  
     33 #define IF_GET_IFACE   0x0001          /* for querying only */ 
     34 #define IF_GET_PROTO   0x0002 
     35--- a/include/linux/skbuff.h 
     36+++ b/include/linux/skbuff.h 
     37@@ -1636,6 +1636,10 @@ extern struct sk_buff *dev_alloc_skb(uns 
     38 extern struct sk_buff *__netdev_alloc_skb(struct net_device *dev, 
     39                unsigned int length, gfp_t gfp_mask); 
     40  
     41+extern struct sk_buff *__netdev_alloc_skb_ip_align(struct net_device *dev, 
     42+               unsigned int length, gfp_t gfp); 
     43+ 
     44+ 
     45 /** 
     46  *     netdev_alloc_skb - allocate an skbuff for rx on a specific device 
     47  *     @dev: network device to receive on 
     48@@ -1655,16 +1659,6 @@ static inline struct sk_buff *netdev_all 
     49        return __netdev_alloc_skb(dev, length, GFP_ATOMIC); 
     50 } 
     51  
     52-static inline struct sk_buff *__netdev_alloc_skb_ip_align(struct net_device *dev, 
     53-               unsigned int length, gfp_t gfp) 
     54-{ 
     55-       struct sk_buff *skb = __netdev_alloc_skb(dev, length + NET_IP_ALIGN, gfp); 
     56- 
     57-       if (NET_IP_ALIGN && skb) 
     58-               skb_reserve(skb, NET_IP_ALIGN); 
     59-       return skb; 
     60-} 
     61- 
     62 static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev, 
     63                unsigned int length) 
     64 { 
     65--- a/net/Kconfig 
     66+++ b/net/Kconfig 
     67@@ -23,6 +23,12 @@ menuconfig NET 
     68  
     69 if NET 
     70  
     71+config ETHERNET_PACKET_MANGLE 
     72+       bool 
     73+       help 
     74+         This option can be selected by phy drivers that need to mangle 
     75+         packets going in or out of an ethernet device. 
     76+ 
     77 config WANT_COMPAT_NETLINK_MESSAGES 
     78        bool 
     79        help 
     80--- a/net/core/dev.c 
     81+++ b/net/core/dev.c 
     82@@ -2224,9 +2224,19 @@ int dev_hard_start_xmit(struct sk_buff * 
     83                        } 
     84                } 
     85  
     86-               skb_len = skb->len; 
     87-               rc = ops->ndo_start_xmit(skb, dev); 
     88-               trace_net_dev_xmit(skb, rc, dev, skb_len); 
     89+#ifdef CONFIG_ETHERNET_PACKET_MANGLE 
     90+               if (!dev->eth_mangle_tx || 
     91+                   (skb = dev->eth_mangle_tx(dev, skb)) != NULL) 
     92+#else 
     93+               if (1) 
     94+#endif 
     95+               { 
     96+                       skb_len = skb->len; 
     97+                       rc = ops->ndo_start_xmit(skb, dev); 
     98+                       trace_net_dev_xmit(skb, rc, dev, skb_len); 
     99+               } else { 
     100+                       rc = NETDEV_TX_OK; 
     101+               } 
     102                if (rc == NETDEV_TX_OK) 
     103                        txq_trans_update(txq); 
     104                return rc; 
     105@@ -2246,9 +2256,19 @@ gso: 
     106                if (dev->priv_flags & IFF_XMIT_DST_RELEASE) 
     107                        skb_dst_drop(nskb); 
     108  
     109-               skb_len = nskb->len; 
     110-               rc = ops->ndo_start_xmit(nskb, dev); 
     111-               trace_net_dev_xmit(nskb, rc, dev, skb_len); 
     112+#ifdef CONFIG_ETHERNET_PACKET_MANGLE 
     113+               if (!dev->eth_mangle_tx || 
     114+                   (nskb = dev->eth_mangle_tx(dev, nskb)) != NULL) 
     115+#else 
     116+               if (1) 
     117+#endif 
     118+               { 
     119+                       skb_len = nskb->len; 
     120+                       rc = ops->ndo_start_xmit(nskb, dev); 
     121+                       trace_net_dev_xmit(nskb, rc, dev, skb_len); 
     122+               } else { 
     123+                       rc = NETDEV_TX_OK; 
     124+               } 
     125                if (unlikely(rc != NETDEV_TX_OK)) { 
     126                        if (rc & ~NETDEV_TX_MASK) 
     127                                goto out_kfree_gso_skb; 
     128--- a/net/core/skbuff.c 
     129+++ b/net/core/skbuff.c 
     130@@ -271,6 +271,22 @@ struct sk_buff *__netdev_alloc_skb(struc 
     131 } 
     132 EXPORT_SYMBOL(__netdev_alloc_skb); 
     133  
     134+struct sk_buff *__netdev_alloc_skb_ip_align(struct net_device *dev, 
     135+               unsigned int length, gfp_t gfp) 
     136+{ 
     137+       struct sk_buff *skb = __netdev_alloc_skb(dev, length + NET_IP_ALIGN, gfp); 
     138+ 
     139+#ifdef CONFIG_ETHERNET_PACKET_MANGLE 
     140+       if (dev->priv_flags & IFF_NO_IP_ALIGN) 
     141+               return skb; 
     142+#endif 
     143+ 
     144+       if (NET_IP_ALIGN && skb) 
     145+               skb_reserve(skb, NET_IP_ALIGN); 
     146+       return skb; 
     147+} 
     148+EXPORT_SYMBOL(__netdev_alloc_skb_ip_align); 
     149+ 
     150 void skb_add_rx_frag(struct sk_buff *skb, int i, struct page *page, int off, 
     151                int size) 
     152 { 
     153--- a/net/ethernet/eth.c 
     154+++ b/net/ethernet/eth.c 
     155@@ -160,6 +160,12 @@ __be16 eth_type_trans(struct sk_buff *sk 
     156        struct ethhdr *eth; 
     157  
     158        skb->dev = dev; 
     159+ 
     160+#ifdef CONFIG_ETHERNET_PACKET_MANGLE 
     161+       if (dev->eth_mangle_rx) 
     162+               dev->eth_mangle_rx(dev, skb); 
     163+#endif 
     164+ 
     165        skb_reset_mac_header(skb); 
     166        skb_pull_inline(skb, ETH_HLEN); 
     167        eth = eth_hdr(skb); 
  • trunk/target/linux/generic/patches-3.2/722-phy_mvswitch.patch

    r30944 r31637  
    11--- a/drivers/net/phy/Kconfig 
    22+++ b/drivers/net/phy/Kconfig 
    3 @@ -113,6 +113,9 @@ config ADM6996_PHY 
     3@@ -113,6 +113,10 @@ config ADM6996_PHY 
    44          Currently supports the ADM6996FC and ADM6996M switches. 
    55          Support for FC is very limited. 
     
    77+config MVSWITCH_PHY 
    88+       tristate "Driver for Marvell 88E6060 switches" 
     9+       select ETHERNET_PACKET_MANGLE 
    910+ 
    1011 config FIXED_PHY 
  • trunk/target/linux/generic/patches-3.2/723-phy_ip175c.patch

    r30944 r31637  
    11--- a/drivers/net/phy/Kconfig 
    22+++ b/drivers/net/phy/Kconfig 
    3 @@ -116,6 +116,10 @@ config ADM6996_PHY 
    4  config MVSWITCH_PHY 
     3@@ -117,6 +117,10 @@ config MVSWITCH_PHY 
    54        tristate "Driver for Marvell 88E6060 switches" 
     5        select ETHERNET_PACKET_MANGLE 
    66  
    77+config IP17XX_PHY 
  • trunk/target/linux/generic/patches-3.2/724-phy_ar8216.patch

    r30944 r31637  
    11--- a/drivers/net/phy/Kconfig 
    22+++ b/drivers/net/phy/Kconfig 
    3 @@ -120,6 +120,10 @@ config IP17XX_PHY 
     3@@ -121,6 +121,11 @@ config IP17XX_PHY 
    44        tristate "Driver for IC+ IP17xx switches" 
    55        select SWCONFIG 
     
    77+config AR8216_PHY 
    88+       tristate "Driver for Atheros AR8216 switches" 
     9+       select ETHERNET_PACKET_MANGLE 
    910+       select SWCONFIG 
    1011+ 
  • trunk/target/linux/generic/patches-3.2/725-phy_rtl8306.patch

    r30944 r31637  
    11--- a/drivers/net/phy/Kconfig 
    22+++ b/drivers/net/phy/Kconfig 
    3 @@ -124,6 +124,10 @@ config AR8216_PHY 
    4         tristate "Driver for Atheros AR8216 switches" 
     3@@ -126,6 +126,10 @@ config AR8216_PHY 
     4        select ETHERNET_PACKET_MANGLE 
    55        select SWCONFIG 
    66  
  • trunk/target/linux/generic/patches-3.2/726-phy_rtl8366.patch

    r30944 r31637  
    11--- a/drivers/net/phy/Kconfig 
    22+++ b/drivers/net/phy/Kconfig 
    3 @@ -166,4 +166,29 @@ config MDIO_OCTEON 
     3@@ -168,4 +168,29 @@ config MDIO_OCTEON 
    44  
    55          If in doubt, say Y. 
  • trunk/target/linux/generic/patches-3.2/727-phy-rtl8367.patch

    r30944 r31637  
    11--- a/drivers/net/phy/Kconfig 
    22+++ b/drivers/net/phy/Kconfig 
    3 @@ -183,6 +183,10 @@ config RTL8366RB_PHY 
     3@@ -185,6 +185,10 @@ config RTL8366RB_PHY 
    44        tristate "Driver for the Realtek RTL8366RB switch" 
    55        select SWCONFIG 
  • trunk/target/linux/generic/patches-3.2/728-phy-micrel.patch

    r30946 r31637  
    11--- a/drivers/net/phy/Kconfig 
    22+++ b/drivers/net/phy/Kconfig 
    3 @@ -128,6 +128,11 @@ config RTL8306_PHY 
     3@@ -130,6 +130,11 @@ config RTL8306_PHY 
    44        tristate "Driver for Realtek RTL8306S switches" 
    55        select SWCONFIG 
  • trunk/target/linux/generic/patches-3.2/750-hostap_txpower.patch

    r29730 r31637  
    11--- a/drivers/net/wireless/hostap/hostap_ap.c 
    22+++ b/drivers/net/wireless/hostap/hostap_ap.c 
    3 @@ -2340,13 +2340,13 @@ int prism2_ap_get_sta_qual(local_info_t 
     3@@ -2340,13 +2340,13 @@ int prism2_ap_get_sta_qual(local_info_t  
    44                addr[count].sa_family = ARPHRD_ETHER; 
    55                memcpy(addr[count].sa_data, sta->addr, ETH_ALEN); 
  • trunk/target/linux/generic/patches-3.2/830-ledtrig_morse.patch

    r29730 r31637  
    1212--- a/drivers/leds/Makefile 
    1313+++ b/drivers/leds/Makefile 
    14 @@ -54,3 +54,4 @@ obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT)  += 
     14@@ -54,3 +54,4 @@ obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT)  +=  
    1515 obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT)   += ledtrig-backlight.o 
    1616 obj-$(CONFIG_LEDS_TRIGGER_GPIO)                += ledtrig-gpio.o 
  • trunk/target/linux/generic/patches-3.2/831-ledtrig_netdev.patch

    r29730 r31637  
    1515--- a/drivers/leds/Makefile 
    1616+++ b/drivers/leds/Makefile 
    17 @@ -55,3 +55,4 @@ obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT)  += 
     17@@ -55,3 +55,4 @@ obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT)  +=  
    1818 obj-$(CONFIG_LEDS_TRIGGER_GPIO)                += ledtrig-gpio.o 
    1919 obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON)  += ledtrig-default-on.o 
  • trunk/target/linux/generic/patches-3.2/941-ocf_20110720.patch

    r29730 r31637  
    3535  * particular randomness source.  They do this by keeping track of the 
    3636  * first and second order deltas of the event timings. 
    37 @@ -722,6 +732,63 @@ void add_disk_randomness(struct gendisk 
     37@@ -722,6 +732,63 @@ void add_disk_randomness(struct gendisk  
    3838 } 
    3939 #endif 
  • trunk/target/linux/generic/patches-3.2/992-mpcore_wdt_fix_watchdog_counter_loading.patch

    r29730 r31637  
    5252--- a/drivers/watchdog/mpcore_wdt.c 
    5353+++ b/drivers/watchdog/mpcore_wdt.c 
    54 @@ -99,9 +99,7 @@ static void mpcore_wdt_keepalive(struct 
     54@@ -99,9 +99,7 @@ static void mpcore_wdt_keepalive(struct  
    5555  
    5656        spin_lock(&wdt_lock); 
  • trunk/target/linux/generic/patches-3.3/721-phy_packets.patch

    r29986 r31637  
    1 --- a/drivers/net/phy/phy_device.c 
    2 +++ b/drivers/net/phy/phy_device.c 
    3 @@ -149,6 +149,18 @@ int phy_scan_fixups(struct phy_device *p 
    4  } 
    5  EXPORT_SYMBOL(phy_scan_fixups); 
    6   
    7 +static int generic_receive_skb(struct sk_buff *skb) 
    8 +{ 
    9 +       skb->protocol = eth_type_trans(skb, skb->dev); 
    10 +       return netif_receive_skb(skb); 
    11 +} 
    12 + 
    13 +static int generic_rx(struct sk_buff *skb) 
    14 +{ 
    15 +       skb->protocol = eth_type_trans(skb, skb->dev); 
    16 +       return netif_rx(skb); 
    17 +} 
    18 + 
    19  static struct phy_device* phy_device_create(struct mii_bus *bus, 
    20                                             int addr, int phy_id) 
    21  { 
    22 @@ -180,6 +192,8 @@ static struct phy_device* phy_device_cre 
    23         dev_set_name(&dev->dev, PHY_ID_FMT, bus->id, addr); 
    24   
    25         dev->state = PHY_DOWN; 
    26 +       dev->netif_receive_skb = &generic_receive_skb; 
    27 +       dev->netif_rx = &generic_rx; 
    28   
    29         mutex_init(&dev->lock); 
    30         INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine); 
    31 --- a/include/linux/phy.h 
    32 +++ b/include/linux/phy.h 
    33 @@ -339,6 +339,20 @@ struct phy_device { 
    34         void (*adjust_link)(struct net_device *dev); 
    35   
    36         void (*adjust_state)(struct net_device *dev); 
    37 + 
    38 +       /* 
    39 +        * By default these point to the original functions 
    40 +        * with the same name. adding them to the phy_device 
    41 +        * allows the phy driver to override them for packet 
    42 +        * mangling if the ethernet driver supports it 
    43 +        * This is required to support some really horrible 
    44 +        * switches such as the Marvell 88E6060 
    45 +        */ 
    46 +       int (*netif_receive_skb)(struct sk_buff *skb); 
    47 +       int (*netif_rx)(struct sk_buff *skb); 
    48 + 
    49 +       /* alignment offset for packets */ 
    50 +       int pkt_align; 
    51  }; 
    52  #define to_phy_device(d) container_of(d, struct phy_device, dev) 
    53   
    541--- a/include/linux/netdevice.h 
    552+++ b/include/linux/netdevice.h 
    56 @@ -1134,6 +1134,7 @@ struct net_device { 
     3@@ -1078,6 +1078,11 @@ struct net_device { 
     4        const struct net_device_ops *netdev_ops; 
     5        const struct ethtool_ops *ethtool_ops; 
     6  
     7+#ifdef CONFIG_ETHERNET_PACKET_MANGLE 
     8+       void (*eth_mangle_rx)(struct net_device *dev, struct sk_buff *skb); 
     9+       struct sk_buff *(*eth_mangle_tx)(struct net_device *dev, struct sk_buff *skb); 
     10+#endif 
     11+ 
     12        /* Hardware header description */ 
     13        const struct header_ops *header_ops; 
     14  
     15@@ -1134,6 +1139,9 @@ struct net_device { 
    5716        void                    *ax25_ptr;      /* AX.25 specific data */ 
    5817        struct wireless_dev     *ieee80211_ptr; /* IEEE 802.11 specific data, 
    5918                                                   assign before registering */ 
     19+#ifdef CONFIG_ETHERNET_PACKET_MANGLE 
    6020+       void                    *phy_ptr; /* PHY device specific data */ 
     21+#endif 
    6122  
    6223 /* 
    6324  * Cache lines mostly used on receive path (including eth_type_trans()) 
     25--- a/include/linux/if.h 
     26+++ b/include/linux/if.h 
     27@@ -80,6 +80,7 @@ 
     28                                         * skbs on transmit */ 
     29 #define IFF_UNICAST_FLT        0x20000         /* Supports unicast filtering   */ 
     30 #define IFF_TEAM_PORT  0x40000         /* device used as team port */ 
     31+#define IFF_NO_IP_ALIGN        0x80000         /* do not ip-align allocated rx pkts */ 
     32  
     33 #define IF_GET_IFACE   0x0001          /* for querying only */ 
     34 #define IF_GET_PROTO   0x0002 
     35--- a/include/linux/skbuff.h 
     36+++ b/include/linux/skbuff.h 
     37@@ -1661,6 +1661,10 @@ extern struct sk_buff *dev_alloc_skb(uns 
     38 extern struct sk_buff *__netdev_alloc_skb(struct net_device *dev, 
     39                unsigned int length, gfp_t gfp_mask); 
     40  
     41+extern struct sk_buff *__netdev_alloc_skb_ip_align(struct net_device *dev, 
     42+               unsigned int length, gfp_t gfp); 
     43+ 
     44+ 
     45 /** 
     46  *     netdev_alloc_skb - allocate an skbuff for rx on a specific device 
     47  *     @dev: network device to receive on 
     48@@ -1680,16 +1684,6 @@ static inline struct sk_buff *netdev_all 
     49        return __netdev_alloc_skb(dev, length, GFP_ATOMIC); 
     50 } 
     51  
     52-static inline struct sk_buff *__netdev_alloc_skb_ip_align(struct net_device *dev, 
     53-               unsigned int length, gfp_t gfp) 
     54-{ 
     55-       struct sk_buff *skb = __netdev_alloc_skb(dev, length + NET_IP_ALIGN, gfp); 
     56- 
     57-       if (NET_IP_ALIGN && skb) 
     58-               skb_reserve(skb, NET_IP_ALIGN); 
     59-       return skb; 
     60-} 
     61- 
     62 static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev, 
     63                unsigned int length) 
     64 { 
     65--- a/net/Kconfig 
     66+++ b/net/Kconfig 
     67@@ -23,6 +23,12 @@ menuconfig NET 
     68  
     69 if NET 
     70  
     71+config ETHERNET_PACKET_MANGLE 
     72+       bool 
     73+       help 
     74+         This option can be selected by phy drivers that need to mangle 
     75+         packets going in or out of an ethernet device. 
     76+ 
     77 config WANT_COMPAT_NETLINK_MESSAGES 
     78        bool 
     79        help 
     80--- a/net/core/dev.c 
     81+++ b/net/core/dev.c 
     82@@ -2246,9 +2246,19 @@ int dev_hard_start_xmit(struct sk_buff * 
     83                        } 
     84                } 
     85  
     86-               skb_len = skb->len; 
     87-               rc = ops->ndo_start_xmit(skb, dev); 
     88-               trace_net_dev_xmit(skb, rc, dev, skb_len); 
     89+#ifdef CONFIG_ETHERNET_PACKET_MANGLE 
     90+               if (!dev->eth_mangle_tx || 
     91+                   (skb = dev->eth_mangle_tx(dev, skb)) != NULL) 
     92+#else 
     93+               if (1) 
     94+#endif 
     95+               { 
     96+                       skb_len = skb->len; 
     97+                       rc = ops->ndo_start_xmit(skb, dev); 
     98+                       trace_net_dev_xmit(skb, rc, dev, skb_len); 
     99+               } else { 
     100+                       rc = NETDEV_TX_OK; 
     101+               } 
     102                if (rc == NETDEV_TX_OK) 
     103                        txq_trans_update(txq); 
     104                return rc; 
     105@@ -2268,9 +2278,19 @@ gso: 
     106                if (dev->priv_flags & IFF_XMIT_DST_RELEASE) 
     107                        skb_dst_drop(nskb); 
     108  
     109-               skb_len = nskb->len; 
     110-               rc = ops->ndo_start_xmit(nskb, dev); 
     111-               trace_net_dev_xmit(nskb, rc, dev, skb_len); 
     112+#ifdef CONFIG_ETHERNET_PACKET_MANGLE 
     113+               if (!dev->eth_mangle_tx || 
     114+                   (nskb = dev->eth_mangle_tx(dev, nskb)) != NULL) 
     115+#else 
     116+               if (1) 
     117+#endif 
     118+               { 
     119+                       skb_len = nskb->len; 
     120+                       rc = ops->ndo_start_xmit(nskb, dev); 
     121+                       trace_net_dev_xmit(nskb, rc, dev, skb_len); 
     122+               } else { 
     123+                       rc = NETDEV_TX_OK; 
     124+               } 
     125                if (unlikely(rc != NETDEV_TX_OK)) { 
     126                        if (rc & ~NETDEV_TX_MASK) 
     127                                goto out_kfree_gso_skb; 
     128--- a/net/core/skbuff.c 
     129+++ b/net/core/skbuff.c 
     130@@ -58,6 +58,7 @@ 
     131 #include <linux/scatterlist.h> 
     132 #include <linux/errqueue.h> 
     133 #include <linux/prefetch.h> 
     134+#include <linux/if.h> 
     135  
     136 #include <net/protocol.h> 
     137 #include <net/dst.h> 
     138@@ -320,6 +321,22 @@ struct sk_buff *__netdev_alloc_skb(struc 
     139 } 
     140 EXPORT_SYMBOL(__netdev_alloc_skb); 
     141  
     142+struct sk_buff *__netdev_alloc_skb_ip_align(struct net_device *dev, 
     143+               unsigned int length, gfp_t gfp) 
     144+{ 
     145+       struct sk_buff *skb = __netdev_alloc_skb(dev, length + NET_IP_ALIGN, gfp); 
     146+ 
     147+#ifdef CONFIG_ETHERNET_PACKET_MANGLE 
     148+       if (dev->priv_flags & IFF_NO_IP_ALIGN) 
     149+               return skb; 
     150+#endif 
     151+ 
     152+       if (NET_IP_ALIGN && skb) 
     153+               skb_reserve(skb, NET_IP_ALIGN); 
     154+       return skb; 
     155+} 
     156+EXPORT_SYMBOL(__netdev_alloc_skb_ip_align); 
     157+ 
     158 void skb_add_rx_frag(struct sk_buff *skb, int i, struct page *page, int off, 
     159                int size) 
     160 { 
     161--- a/net/ethernet/eth.c 
     162+++ b/net/ethernet/eth.c 
     163@@ -160,6 +160,12 @@ __be16 eth_type_trans(struct sk_buff *sk 
     164        struct ethhdr *eth; 
     165  
     166        skb->dev = dev; 
     167+ 
     168+#ifdef CONFIG_ETHERNET_PACKET_MANGLE 
     169+       if (dev->eth_mangle_rx) 
     170+               dev->eth_mangle_rx(dev, skb); 
     171+#endif 
     172+ 
     173        skb_reset_mac_header(skb); 
     174        skb_pull_inline(skb, ETH_HLEN); 
     175        eth = eth_hdr(skb); 
  • trunk/target/linux/generic/patches-3.3/722-phy_mvswitch.patch

    r30945 r31637  
    11--- a/drivers/net/phy/Kconfig 
    22+++ b/drivers/net/phy/Kconfig 
    3 @@ -113,6 +113,9 @@ config ADM6996_PHY 
     3@@ -113,6 +113,10 @@ config ADM6996_PHY 
    44          Currently supports the ADM6996FC and ADM6996M switches. 
    55          Support for FC is very limited. 
     
    77+config MVSWITCH_PHY 
    88+       tristate "Driver for Marvell 88E6060 switches" 
     9+       select ETHERNET_PACKET_MANGLE 
    910+ 
    1011 config FIXED_PHY 
  • trunk/target/linux/generic/patches-3.3/723-phy_ip175c.patch

    r30945 r31637  
    11--- a/drivers/net/phy/Kconfig 
    22+++ b/drivers/net/phy/Kconfig 
    3 @@ -116,6 +116,10 @@ config ADM6996_PHY 
    4  config MVSWITCH_PHY 
     3@@ -117,6 +117,10 @@ config MVSWITCH_PHY 
    54        tristate "Driver for Marvell 88E6060 switches" 
     5        select ETHERNET_PACKET_MANGLE 
    66  
    77+config IP17XX_PHY 
  • trunk/target/linux/generic/patches-3.3/724-phy_ar8216.patch

    r30945 r31637  
    11--- a/drivers/net/phy/Kconfig 
    22+++ b/drivers/net/phy/Kconfig 
    3 @@ -120,6 +120,10 @@ config IP17XX_PHY 
     3@@ -121,6 +121,11 @@ config IP17XX_PHY 
    44        tristate "Driver for IC+ IP17xx switches" 
    55        select SWCONFIG 
     
    77+config AR8216_PHY 
    88+       tristate "Driver for Atheros AR8216 switches" 
     9+       select ETHERNET_PACKET_MANGLE 
    910+       select SWCONFIG 
    1011+ 
  • trunk/target/linux/generic/patches-3.3/725-phy_rtl8306.patch

    r30945 r31637  
    11--- a/drivers/net/phy/Kconfig 
    22+++ b/drivers/net/phy/Kconfig 
    3 @@ -124,6 +124,10 @@ config AR8216_PHY 
    4         tristate "Driver for Atheros AR8216 switches" 
     3@@ -126,6 +126,10 @@ config AR8216_PHY 
     4        select ETHERNET_PACKET_MANGLE 
    55        select SWCONFIG 
    66  
  • trunk/target/linux/generic/patches-3.3/726-phy_rtl8366.patch

    r30945 r31637  
    11--- a/drivers/net/phy/Kconfig 
    22+++ b/drivers/net/phy/Kconfig 
    3 @@ -166,6 +166,31 @@ config MDIO_OCTEON 
     3@@ -168,6 +168,31 @@ config MDIO_OCTEON 
    44  
    55          If in doubt, say Y. 
  • trunk/target/linux/generic/patches-3.3/727-phy-rtl8367.patch

    r30945 r31637  
    11--- a/drivers/net/phy/Kconfig 
    22+++ b/drivers/net/phy/Kconfig 
    3 @@ -183,6 +183,10 @@ config RTL8366RB_PHY 
     3@@ -185,6 +185,10 @@ config RTL8366RB_PHY 
    44        tristate "Driver for the Realtek RTL8366RB switch" 
    55        select SWCONFIG 
  • trunk/target/linux/generic/patches-3.3/728-phy-micrel.patch

    r30946 r31637  
    11--- a/drivers/net/phy/Kconfig 
    22+++ b/drivers/net/phy/Kconfig 
    3 @@ -128,6 +128,11 @@ config RTL8306_PHY 
     3@@ -130,6 +130,11 @@ config RTL8306_PHY 
    44        tristate "Driver for Realtek RTL8306S switches" 
    55        select SWCONFIG 
  • trunk/target/linux/generic/patches-3.3/750-hostap_txpower.patch

    r29986 r31637  
    11--- a/drivers/net/wireless/hostap/hostap_ap.c 
    22+++ b/drivers/net/wireless/hostap/hostap_ap.c 
    3 @@ -2340,13 +2340,13 @@ int prism2_ap_get_sta_qual(local_info_t 
     3@@ -2340,13 +2340,13 @@ int prism2_ap_get_sta_qual(local_info_t  
    44                addr[count].sa_family = ARPHRD_ETHER; 
    55                memcpy(addr[count].sa_data, sta->addr, ETH_ALEN); 
  • trunk/target/linux/generic/patches-3.3/830-ledtrig_morse.patch

    r29986 r31637  
    1212--- a/drivers/leds/Makefile 
    1313+++ b/drivers/leds/Makefile 
    14 @@ -57,3 +57,4 @@ obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT)  += 
     14@@ -57,3 +57,4 @@ obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT)  +=  
    1515 obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT)   += ledtrig-backlight.o 
    1616 obj-$(CONFIG_LEDS_TRIGGER_GPIO)                += ledtrig-gpio.o 
  • trunk/target/linux/generic/patches-3.3/831-ledtrig_netdev.patch

    r29986 r31637  
    1515--- a/drivers/leds/Makefile 
    1616+++ b/drivers/leds/Makefile 
    17 @@ -58,3 +58,4 @@ obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT)  += 
     17@@ -58,3 +58,4 @@ obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT)  +=  
    1818 obj-$(CONFIG_LEDS_TRIGGER_GPIO)                += ledtrig-gpio.o 
    1919 obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON)  += ledtrig-default-on.o 
  • trunk/target/linux/generic/patches-3.3/941-ocf_20110720.patch

    r29986 r31637  
    3535  * particular randomness source.  They do this by keeping track of the 
    3636  * first and second order deltas of the event timings. 
    37 @@ -726,6 +736,63 @@ void add_disk_randomness(struct gendisk 
     37@@ -726,6 +736,63 @@ void add_disk_randomness(struct gendisk  
    3838 } 
    3939 #endif 
  • trunk/target/linux/generic/patches-3.3/980-update_arm_machtypes.patch

    r31378 r31637  
    33363336 acfx100                        MACH_ACFX100            ACFX100                 3870 
    33373337 msm8625_rumi3          MACH_MSM8625_RUMI3      MSM8625_RUMI3           3871 
    3338 @@ -1161,6 +3833,8 @@ valente_wx                MACH_VALENTE_WX         VALENTE_WX 
     3338@@ -1161,6 +3833,8 @@ valente_wx                MACH_VALENTE_WX         VALENTE_WX       
    33393339 huangshans             MACH_HUANGSHANS         HUANGSHANS              3879 
    33403340 bosphorus1             MACH_BOSPHORUS1         BOSPHORUS1              3880 
  • trunk/target/linux/generic/patches-3.3/992-mpcore_wdt_fix_watchdog_counter_loading.patch

    r29986 r31637  
    5252--- a/drivers/watchdog/mpcore_wdt.c 
    5353+++ b/drivers/watchdog/mpcore_wdt.c 
    54 @@ -99,9 +99,7 @@ static void mpcore_wdt_keepalive(struct 
     54@@ -99,9 +99,7 @@ static void mpcore_wdt_keepalive(struct  
    5555  
    5656        spin_lock(&wdt_lock); 
Note: See TracChangeset for help on using the changeset viewer.