Changeset 20677


Ignore:
Timestamp:
2010-04-03T18:58:04+02:00 (8 years ago)
Author:
juhosg
Message:

backfire: ar71xx: fix broken LAN ports on the boards with AR8216 switch (closes #7024)

Location:
branches/backfire/target/linux/ar71xx/files/drivers/net/ag71xx
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/backfire/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h

    r20505 r20677  
    456456#ifdef CONFIG_AG71XX_AR8216_SUPPORT 
    457457void ag71xx_add_ar8216_header(struct ag71xx *ag, struct sk_buff *skb); 
    458 int ag71xx_remove_ar8216_header(struct ag71xx *ag, struct sk_buff *skb); 
     458int ag71xx_remove_ar8216_header(struct ag71xx *ag, struct sk_buff *skb, 
     459                                int pktlen); 
    459460static inline int ag71xx_has_ar8216(struct ag71xx *ag) 
    460461{ 
     
    468469 
    469470static inline int ag71xx_remove_ar8216_header(struct ag71xx *ag, 
    470                                               struct sk_buff *skb) 
     471                                              struct sk_buff *skb, 
     472                                              int pktlen) 
    471473{ 
    472474        return 0; 
  • branches/backfire/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ar8216.c

    r20505 r20677  
    2626} 
    2727 
    28 int ag71xx_remove_ar8216_header(struct ag71xx *ag, 
    29                                 struct sk_buff *skb) 
     28int ag71xx_remove_ar8216_header(struct ag71xx *ag, struct sk_buff *skb, 
     29                                int pktlen) 
    3030{ 
    3131        u8 type; 
     
    3434        switch (type) { 
    3535        case AR8216_PACKET_TYPE_NORMAL: 
    36                 skb_pull(skb, AR8216_HEADER_LEN); 
    3736                break; 
     37 
    3838        default: 
    3939                return -EINVAL; 
    4040        } 
    4141 
     42        skb_put(skb, pktlen); 
     43        skb_pull(skb, AR8216_HEADER_LEN); 
    4244        return 0; 
    4345} 
  • branches/backfire/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c

    r20506 r20677  
    771771        skb_reserve(copy_skb, NET_IP_ALIGN); 
    772772        skb_copy_from_linear_data(*pskb, copy_skb->data, pktlen); 
     773        skb_put(copy_skb, pktlen); 
     774 
    773775        dev_kfree_skb_any(*pskb); 
    774776        *pskb = copy_skb; 
     
    815817 
    816818                if (ag71xx_has_ar8216(ag)) 
    817                         err = ag71xx_remove_ar8216_header(ag, skb); 
     819                        err = ag71xx_remove_ar8216_header(ag, skb, pktlen); 
    818820                else 
    819821                        err = ag71xx_rx_copy_skb(ag, &skb, pktlen); 
     
    823825                        kfree_skb(skb); 
    824826                } else { 
    825                         skb_put(skb, pktlen); 
    826  
    827827                        skb->dev = dev; 
    828828                        skb->ip_summed = CHECKSUM_NONE; 
Note: See TracChangeset for help on using the changeset viewer.