X-Git-Url: http://bbs.cooldavid.org/git/?a=blobdiff_plain;f=jme.c;h=c62014dcecebd39ab83d94b3b5f453076d6bfcd6;hb=e0ae0351d0ae63a0b5d7d50cd43cb2abc6eefdd0;hp=925a1cd038b86e23fce73454a95863b1914da6c1;hpb=767e5b98bfac71b25859fcc8ad5ddefa11a7e9ec;p=jme.git diff --git a/jme.c b/jme.c index 925a1cd..c62014d 100644 --- a/jme.c +++ b/jme.c @@ -1099,6 +1099,7 @@ jme_alloc_and_feed_skb(struct jme_adapter *jme, int idx) skb_checksum_none_assert(skb); #endif +#ifndef __UNIFY_VLAN_RX_PATH__ if (rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_TAGON)) { if (jme->vlgrp) { jme->jme_vlan_rx(skb, jme->vlgrp, @@ -1110,6 +1111,15 @@ jme_alloc_and_feed_skb(struct jme_adapter *jme, int idx) } else { jme->jme_rx(skb); } +#else + if (rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_TAGON)) { + u16 vid = le16_to_cpu(rxdesc->descwb.vlan); + + __vlan_hwaccel_put_tag(skb, vid); + NET_STAT(jme).rx_bytes += 4; + } + jme->jme_rx(skb); +#endif if ((rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_DEST)) == cpu_to_le16(RXWBFLAG_DEST_MUL)) @@ -1981,10 +1991,10 @@ jme_map_tx_skb(struct jme_adapter *jme, struct sk_buff *skb, int idx) struct jme_ring *txring = &(jme->txring[0]); struct txdesc *txdesc = txring->desc, *ctxdesc; struct jme_buffer_info *txbi = txring->bufinf, *ctxbi; - u8 hidma = jme->dev->features & NETIF_F_HIGHDMA; + u8 hidma = !!(jme->dev->features & NETIF_F_HIGHDMA); int i, nr_frags = skb_shinfo(skb)->nr_frags; int mask = jme->tx_ring_mask; - struct skb_frag_struct *frag; + const struct skb_frag_struct *frag; u32 len; for (i = 0 ; i < nr_frags ; ++i) { @@ -1992,8 +2002,14 @@ jme_map_tx_skb(struct jme_adapter *jme, struct sk_buff *skb, int idx) ctxdesc = txdesc + ((idx + i + 2) & (mask)); ctxbi = txbi + ((idx + i + 2) & (mask)); +#ifndef __USE_SKB_FRAG_API__ jme_fill_tx_map(jme->pdev, ctxdesc, ctxbi, frag->page, frag->page_offset, frag->size, hidma); +#else + jme_fill_tx_map(jme->pdev, ctxdesc, ctxbi, + skb_frag_page(frag), + frag->page_offset, skb_frag_size(frag), hidma); +#endif } len = skb_is_nonlinear(skb) ? skb_headlen(skb) : skb->len; @@ -2411,6 +2427,7 @@ static inline void jme_resume_rx(struct jme_adapter *jme) atomic_inc(&jme->link_changing); } +#ifndef __UNIFY_VLAN_RX_PATH__ static void jme_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp) { @@ -2420,6 +2437,7 @@ jme_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp) jme->vlgrp = grp; jme_resume_rx(jme); } +#endif #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,21) static void @@ -2445,9 +2463,9 @@ jme_get_drvinfo(struct net_device *netdev, { struct jme_adapter *jme = netdev_priv(netdev); - strcpy(info->driver, DRV_NAME); - strcpy(info->version, DRV_VERSION); - strcpy(info->bus_info, pci_name(jme->pdev)); + strlcpy(info->driver, DRV_NAME, sizeof(info->driver)); + strlcpy(info->version, DRV_VERSION, sizeof(info->version)); + strlcpy(info->bus_info, pci_name(jme->pdev), sizeof(info->bus_info)); } static int @@ -2549,7 +2567,9 @@ jme_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *ecmd) test_bit(JME_FLAG_POLL, &jme->flags)) { clear_bit(JME_FLAG_POLL, &jme->flags); jme->jme_rx = netif_rx; +#ifndef __UNIFY_VLAN_RX_PATH__ jme->jme_vlan_rx = vlan_hwaccel_rx; +#endif dpi->cur = PCC_P1; dpi->attempt = PCC_P1; dpi->cnt = 0; @@ -2559,7 +2579,9 @@ jme_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *ecmd) !(test_bit(JME_FLAG_POLL, &jme->flags))) { set_bit(JME_FLAG_POLL, &jme->flags); jme->jme_rx = netif_receive_skb; +#ifndef __UNIFY_VLAN_RX_PATH__ jme->jme_vlan_rx = vlan_hwaccel_receive_skb; +#endif jme_interrupt_mode(jme); } @@ -2840,8 +2862,13 @@ jme_set_tso(struct net_device *netdev, u32 on) return 0; } #else +#ifndef __NEW_FIX_FEATURES_TYPE__ static u32 jme_fix_features(struct net_device *netdev, u32 features) +#else +static netdev_features_t +jme_fix_features(struct net_device *netdev, netdev_features_t features) +#endif { if (netdev->mtu > 1900) features &= ~(NETIF_F_ALL_TSO | NETIF_F_ALL_CSUM); @@ -2849,7 +2876,11 @@ jme_fix_features(struct net_device *netdev, u32 features) } static int +#ifndef __NEW_FIX_FEATURES_TYPE__ jme_set_features(struct net_device *netdev, u32 features) +#else +jme_set_features(struct net_device *netdev, netdev_features_t features) +#endif { struct jme_adapter *jme = netdev_priv(netdev); @@ -3096,10 +3127,16 @@ static const struct net_device_ops jme_netdev_ops = { .ndo_do_ioctl = jme_ioctl, .ndo_start_xmit = jme_start_xmit, .ndo_set_mac_address = jme_set_macaddr, +#ifndef __USE_NDO_SET_RX_MODE__ .ndo_set_multicast_list = jme_set_multi, +#else + .ndo_set_rx_mode = jme_set_multi, +#endif .ndo_change_mtu = jme_change_mtu, .ndo_tx_timeout = jme_tx_timeout, +#ifndef __UNIFY_VLAN_RX_PATH__ .ndo_vlan_rx_register = jme_vlan_rx_register, +#endif #ifdef __USE_NDO_FIX_FEATURES__ .ndo_fix_features = jme_fix_features, .ndo_set_features = jme_set_features, @@ -3203,7 +3240,9 @@ jme_init_one(struct pci_dev *pdev, jme->pdev = pdev; jme->dev = netdev; jme->jme_rx = netif_rx; +#ifndef __UNIFY_VLAN_RX_PATH__ jme->jme_vlan_rx = vlan_hwaccel_rx; +#endif jme->old_mtu = netdev->mtu = 1500; jme->phylink = 0; jme->tx_ring_size = 1 << 10;