Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6

* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6:
e1000: Add device IDs of blade version of the 82571 quad port
sky2: fix transmit state on resume
sky2: FE+ vlan workaround
sky2: sky2 FE+ receive status workaround

+44 -14
+1
drivers/net/e1000/e1000_ethtool.c
··· 1726 1726 case E1000_DEV_ID_82571EB_QUAD_COPPER: 1727 1727 case E1000_DEV_ID_82571EB_QUAD_FIBER: 1728 1728 case E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE: 1729 + case E1000_DEV_ID_82571PT_QUAD_COPPER: 1729 1730 case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3: 1730 1731 /* quad port adapters only support WoL on port A */ 1731 1732 if (!adapter->quad_port_a) {
+1
drivers/net/e1000/e1000_hw.c
··· 387 387 case E1000_DEV_ID_82571EB_SERDES_DUAL: 388 388 case E1000_DEV_ID_82571EB_SERDES_QUAD: 389 389 case E1000_DEV_ID_82571EB_QUAD_COPPER: 390 + case E1000_DEV_ID_82571PT_QUAD_COPPER: 390 391 case E1000_DEV_ID_82571EB_QUAD_FIBER: 391 392 case E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE: 392 393 hw->mac_type = e1000_82571;
+1
drivers/net/e1000/e1000_hw.h
··· 475 475 #define E1000_DEV_ID_82571EB_FIBER 0x105F 476 476 #define E1000_DEV_ID_82571EB_SERDES 0x1060 477 477 #define E1000_DEV_ID_82571EB_QUAD_COPPER 0x10A4 478 + #define E1000_DEV_ID_82571PT_QUAD_COPPER 0x10D5 478 479 #define E1000_DEV_ID_82571EB_QUAD_FIBER 0x10A5 479 480 #define E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE 0x10BC 480 481 #define E1000_DEV_ID_82571EB_SERDES_DUAL 0x10D9
+2
drivers/net/e1000/e1000_main.c
··· 108 108 INTEL_E1000_ETHERNET_DEVICE(0x10BC), 109 109 INTEL_E1000_ETHERNET_DEVICE(0x10C4), 110 110 INTEL_E1000_ETHERNET_DEVICE(0x10C5), 111 + INTEL_E1000_ETHERNET_DEVICE(0x10D5), 111 112 INTEL_E1000_ETHERNET_DEVICE(0x10D9), 112 113 INTEL_E1000_ETHERNET_DEVICE(0x10DA), 113 114 /* required last entry */ ··· 1102 1101 case E1000_DEV_ID_82571EB_QUAD_COPPER: 1103 1102 case E1000_DEV_ID_82571EB_QUAD_FIBER: 1104 1103 case E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE: 1104 + case E1000_DEV_ID_82571PT_QUAD_COPPER: 1105 1105 /* if quad port adapter, disable WoL on all but port A */ 1106 1106 if (global_quad_port_a != 0) 1107 1107 adapter->eeprom_wol = 0;
+39 -14
drivers/net/sky2.c
··· 910 910 return le; 911 911 } 912 912 913 + static void tx_init(struct sky2_port *sky2) 914 + { 915 + struct sky2_tx_le *le; 916 + 917 + sky2->tx_prod = sky2->tx_cons = 0; 918 + sky2->tx_tcpsum = 0; 919 + sky2->tx_last_mss = 0; 920 + 921 + le = get_tx_le(sky2); 922 + le->addr = 0; 923 + le->opcode = OP_ADDR64 | HW_OWNER; 924 + sky2->tx_addr64 = 0; 925 + } 926 + 913 927 static inline struct tx_ring_info *tx_le_re(struct sky2_port *sky2, 914 928 struct sky2_tx_le *le) 915 929 { ··· 1334 1320 GFP_KERNEL); 1335 1321 if (!sky2->tx_ring) 1336 1322 goto err_out; 1337 - sky2->tx_prod = sky2->tx_cons = 0; 1323 + 1324 + tx_init(sky2); 1338 1325 1339 1326 sky2->rx_le = pci_alloc_consistent(hw->pdev, RX_LE_BYTES, 1340 1327 &sky2->rx_le_map); ··· 2163 2148 sky2->rx_next = (sky2->rx_next + 1) % sky2->rx_pending; 2164 2149 prefetch(sky2->rx_ring + sky2->rx_next); 2165 2150 2151 + if (length < ETH_ZLEN || length > sky2->rx_data_size) 2152 + goto len_error; 2153 + 2154 + /* This chip has hardware problems that generates bogus status. 2155 + * So do only marginal checking and expect higher level protocols 2156 + * to handle crap frames. 2157 + */ 2158 + if (sky2->hw->chip_id == CHIP_ID_YUKON_FE_P && 2159 + sky2->hw->chip_rev == CHIP_REV_YU_FE2_A0 && 2160 + length != count) 2161 + goto okay; 2162 + 2166 2163 if (status & GMR_FS_ANY_ERR) 2167 2164 goto error; 2168 2165 ··· 2183 2156 2184 2157 /* if length reported by DMA does not match PHY, packet was truncated */ 2185 2158 if (length != count) 2186 - goto len_mismatch; 2159 + goto len_error; 2187 2160 2161 + okay: 2188 2162 if (length < copybreak) 2189 2163 skb = receive_copy(sky2, re, length); 2190 2164 else ··· 2195 2167 2196 2168 return skb; 2197 2169 2198 - len_mismatch: 2170 + len_error: 2199 2171 /* Truncation of overlength packets 2200 2172 causes PHY length to not match MAC length */ 2201 2173 ++sky2->net_stats.rx_length_errors; 2202 2174 if (netif_msg_rx_err(sky2) && net_ratelimit()) 2203 - pr_info(PFX "%s: rx length mismatch: length %d status %#x\n", 2204 - dev->name, length, status); 2175 + pr_info(PFX "%s: rx length error: status %#x length %d\n", 2176 + dev->name, status, length); 2205 2177 goto resubmit; 2206 2178 2207 2179 error: ··· 3962 3934 sky2->hw = hw; 3963 3935 sky2->msg_enable = netif_msg_init(debug, default_msg); 3964 3936 3965 - /* This chip has hardware problems that generates 3966 - * bogus PHY receive status so by default shut up the message. 3967 - */ 3968 - if (hw->chip_id == CHIP_ID_YUKON_FE_P && 3969 - hw->chip_rev == CHIP_REV_YU_FE2_A0) 3970 - sky2->msg_enable &= ~NETIF_MSG_RX_ERR; 3971 - 3972 3937 /* Auto speed and flow control */ 3973 3938 sky2->autoneg = AUTONEG_ENABLE; 3974 3939 sky2->flow_mode = FC_BOTH; ··· 3985 3964 dev->features |= NETIF_F_HIGHDMA; 3986 3965 3987 3966 #ifdef SKY2_VLAN_TAG_USED 3988 - dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 3989 - dev->vlan_rx_register = sky2_vlan_rx_register; 3967 + /* The workaround for FE+ status conflicts with VLAN tag detection. */ 3968 + if (!(sky2->hw->chip_id == CHIP_ID_YUKON_FE_P && 3969 + sky2->hw->chip_rev == CHIP_REV_YU_FE2_A0)) { 3970 + dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 3971 + dev->vlan_rx_register = sky2_vlan_rx_register; 3972 + } 3990 3973 #endif 3991 3974 3992 3975 /* read the mac address */