if (unlikely(adapter->vlgrp &&
                            (status & E1000_RXD_STAT_VP))) {
                        vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
-                                                le16_to_cpu(rx_desc->special) &
-                                                E1000_RXD_SPC_VLAN_MASK);
+                                                le16_to_cpu(rx_desc->special));
                } else {
                        netif_receive_skb(skb);
                }
                if (unlikely(adapter->vlgrp &&
                            (status & E1000_RXD_STAT_VP))) {
                        vlan_hwaccel_rx(skb, adapter->vlgrp,
-                                       le16_to_cpu(rx_desc->special) &
-                                       E1000_RXD_SPC_VLAN_MASK);
+                                       le16_to_cpu(rx_desc->special));
                } else {
                        netif_rx(skb);
                }
 #ifdef CONFIG_E1000_NAPI
                if (unlikely(adapter->vlgrp && (staterr & E1000_RXD_STAT_VP))) {
                        vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
-                               le16_to_cpu(rx_desc->wb.middle.vlan) &
-                               E1000_RXD_SPC_VLAN_MASK);
+                               le16_to_cpu(rx_desc->wb.middle.vlan));
                } else {
                        netif_receive_skb(skb);
                }
 #else /* CONFIG_E1000_NAPI */
                if (unlikely(adapter->vlgrp && (staterr & E1000_RXD_STAT_VP))) {
                        vlan_hwaccel_rx(skb, adapter->vlgrp,
-                               le16_to_cpu(rx_desc->wb.middle.vlan) &
-                               E1000_RXD_SPC_VLAN_MASK);
+                               le16_to_cpu(rx_desc->wb.middle.vlan));
                } else {
                        netif_rx(skb);
                }
 
 
        if (adapter->vlgrp && (status & E1000_RXD_STAT_VP))
                vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
-                                        le16_to_cpu(vlan) &
-                                        E1000_RXD_SPC_VLAN_MASK);
+                                        le16_to_cpu(vlan));
        else
                netif_receive_skb(skb);
 
 
 {
        if (adapter->vlgrp && (status & E1000_RXD_STAT_VP))
                vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
-                                        le16_to_cpu(vlan) &
-                                        E1000_RXD_SPC_VLAN_MASK);
+                                        le16_to_cpu(vlan));
        else
                netif_receive_skb(skb);
 }
 
 #ifdef CONFIG_IXGB_NAPI
                if(adapter->vlgrp && (status & IXGB_RX_DESC_STATUS_VP)) {
                        vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
-                               le16_to_cpu(rx_desc->special) &
-                                       IXGB_RX_DESC_SPECIAL_VLAN_MASK);
+                               le16_to_cpu(rx_desc->special));
                } else {
                        netif_receive_skb(skb);
                }
 #else /* CONFIG_IXGB_NAPI */
                if(adapter->vlgrp && (status & IXGB_RX_DESC_STATUS_VP)) {
                        vlan_hwaccel_rx(skb, adapter->vlgrp,
-                               le16_to_cpu(rx_desc->special) &
-                                       IXGB_RX_DESC_SPECIAL_VLAN_MASK);
+                               le16_to_cpu(rx_desc->special));
                } else {
                        netif_rx(skb);
                }
 
                        if (debug > 4)
                                printk(KERN_DEBUG "  netdev_rx() vlanid = %d\n", le16_to_cpu(desc->vlanid));
                        /* vlan_netdev_receive_skb() expects a packet with the VLAN tag stripped out */
-                       vlan_netdev_receive_skb(skb, np->vlgrp, le16_to_cpu(desc->vlanid) & VLAN_VID_MASK);
+                       vlan_netdev_receive_skb(skb, np->vlgrp, le16_to_cpu(desc->vlanid));
                } else
 #endif /* VLAN_SUPPORT */
                        netdev_receive_skb(skb);
 
                                          GET_RXD_VLAN_ID(rxd_vlan))->name);
                /* NAPI variant of receive functions */
                vlan_hwaccel_receive_skb(skb, priv->vlgrp,
-                                        GET_RXD_VLAN_ID(rxd_vlan));
+                                        GET_RXD_VLAN_TCI(rxd_vlan));
        } else {
                netif_receive_skb(skb);
        }
 
 #define GET_RXD_PKT_ID(x)              GET_BITS_SHIFT((x), 3, 28)
 #define GET_RXD_VTAG(x)                        GET_BITS_SHIFT((x), 1, 31)
 #define GET_RXD_VLAN_ID(x)             GET_BITS_SHIFT((x), 12, 0)
+#define GET_RXD_VLAN_TCI(x)            GET_BITS_SHIFT((x), 16, 0)
 #define GET_RXD_CFI(x)                 GET_BITS_SHIFT((x), 1, 12)
 #define GET_RXD_PRIO(x)                        GET_BITS_SHIFT((x), 3, 13)