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 case E1000_DEV_ID_82571EB_QUAD_COPPER: 1727 case E1000_DEV_ID_82571EB_QUAD_FIBER: 1728 case E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE: 1729 case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3: 1730 /* quad port adapters only support WoL on port A */ 1731 if (!adapter->quad_port_a) {
··· 1726 case E1000_DEV_ID_82571EB_QUAD_COPPER: 1727 case E1000_DEV_ID_82571EB_QUAD_FIBER: 1728 case E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE: 1729 + case E1000_DEV_ID_82571PT_QUAD_COPPER: 1730 case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3: 1731 /* quad port adapters only support WoL on port A */ 1732 if (!adapter->quad_port_a) {
+1
drivers/net/e1000/e1000_hw.c
··· 387 case E1000_DEV_ID_82571EB_SERDES_DUAL: 388 case E1000_DEV_ID_82571EB_SERDES_QUAD: 389 case E1000_DEV_ID_82571EB_QUAD_COPPER: 390 case E1000_DEV_ID_82571EB_QUAD_FIBER: 391 case E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE: 392 hw->mac_type = e1000_82571;
··· 387 case E1000_DEV_ID_82571EB_SERDES_DUAL: 388 case E1000_DEV_ID_82571EB_SERDES_QUAD: 389 case E1000_DEV_ID_82571EB_QUAD_COPPER: 390 + case E1000_DEV_ID_82571PT_QUAD_COPPER: 391 case E1000_DEV_ID_82571EB_QUAD_FIBER: 392 case E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE: 393 hw->mac_type = e1000_82571;
+1
drivers/net/e1000/e1000_hw.h
··· 475 #define E1000_DEV_ID_82571EB_FIBER 0x105F 476 #define E1000_DEV_ID_82571EB_SERDES 0x1060 477 #define E1000_DEV_ID_82571EB_QUAD_COPPER 0x10A4 478 #define E1000_DEV_ID_82571EB_QUAD_FIBER 0x10A5 479 #define E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE 0x10BC 480 #define E1000_DEV_ID_82571EB_SERDES_DUAL 0x10D9
··· 475 #define E1000_DEV_ID_82571EB_FIBER 0x105F 476 #define E1000_DEV_ID_82571EB_SERDES 0x1060 477 #define E1000_DEV_ID_82571EB_QUAD_COPPER 0x10A4 478 + #define E1000_DEV_ID_82571PT_QUAD_COPPER 0x10D5 479 #define E1000_DEV_ID_82571EB_QUAD_FIBER 0x10A5 480 #define E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE 0x10BC 481 #define E1000_DEV_ID_82571EB_SERDES_DUAL 0x10D9
+2
drivers/net/e1000/e1000_main.c
··· 108 INTEL_E1000_ETHERNET_DEVICE(0x10BC), 109 INTEL_E1000_ETHERNET_DEVICE(0x10C4), 110 INTEL_E1000_ETHERNET_DEVICE(0x10C5), 111 INTEL_E1000_ETHERNET_DEVICE(0x10D9), 112 INTEL_E1000_ETHERNET_DEVICE(0x10DA), 113 /* required last entry */ ··· 1102 case E1000_DEV_ID_82571EB_QUAD_COPPER: 1103 case E1000_DEV_ID_82571EB_QUAD_FIBER: 1104 case E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE: 1105 /* if quad port adapter, disable WoL on all but port A */ 1106 if (global_quad_port_a != 0) 1107 adapter->eeprom_wol = 0;
··· 108 INTEL_E1000_ETHERNET_DEVICE(0x10BC), 109 INTEL_E1000_ETHERNET_DEVICE(0x10C4), 110 INTEL_E1000_ETHERNET_DEVICE(0x10C5), 111 + INTEL_E1000_ETHERNET_DEVICE(0x10D5), 112 INTEL_E1000_ETHERNET_DEVICE(0x10D9), 113 INTEL_E1000_ETHERNET_DEVICE(0x10DA), 114 /* required last entry */ ··· 1101 case E1000_DEV_ID_82571EB_QUAD_COPPER: 1102 case E1000_DEV_ID_82571EB_QUAD_FIBER: 1103 case E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE: 1104 + case E1000_DEV_ID_82571PT_QUAD_COPPER: 1105 /* if quad port adapter, disable WoL on all but port A */ 1106 if (global_quad_port_a != 0) 1107 adapter->eeprom_wol = 0;
+39 -14
drivers/net/sky2.c
··· 910 return le; 911 } 912 913 static inline struct tx_ring_info *tx_le_re(struct sky2_port *sky2, 914 struct sky2_tx_le *le) 915 { ··· 1334 GFP_KERNEL); 1335 if (!sky2->tx_ring) 1336 goto err_out; 1337 - sky2->tx_prod = sky2->tx_cons = 0; 1338 1339 sky2->rx_le = pci_alloc_consistent(hw->pdev, RX_LE_BYTES, 1340 &sky2->rx_le_map); ··· 2163 sky2->rx_next = (sky2->rx_next + 1) % sky2->rx_pending; 2164 prefetch(sky2->rx_ring + sky2->rx_next); 2165 2166 if (status & GMR_FS_ANY_ERR) 2167 goto error; 2168 ··· 2183 2184 /* if length reported by DMA does not match PHY, packet was truncated */ 2185 if (length != count) 2186 - goto len_mismatch; 2187 2188 if (length < copybreak) 2189 skb = receive_copy(sky2, re, length); 2190 else ··· 2195 2196 return skb; 2197 2198 - len_mismatch: 2199 /* Truncation of overlength packets 2200 causes PHY length to not match MAC length */ 2201 ++sky2->net_stats.rx_length_errors; 2202 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); 2205 goto resubmit; 2206 2207 error: ··· 3962 sky2->hw = hw; 3963 sky2->msg_enable = netif_msg_init(debug, default_msg); 3964 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 /* Auto speed and flow control */ 3973 sky2->autoneg = AUTONEG_ENABLE; 3974 sky2->flow_mode = FC_BOTH; ··· 3985 dev->features |= NETIF_F_HIGHDMA; 3986 3987 #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; 3990 #endif 3991 3992 /* read the mac address */
··· 910 return le; 911 } 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 + 927 static inline struct tx_ring_info *tx_le_re(struct sky2_port *sky2, 928 struct sky2_tx_le *le) 929 { ··· 1320 GFP_KERNEL); 1321 if (!sky2->tx_ring) 1322 goto err_out; 1323 + 1324 + tx_init(sky2); 1325 1326 sky2->rx_le = pci_alloc_consistent(hw->pdev, RX_LE_BYTES, 1327 &sky2->rx_le_map); ··· 2148 sky2->rx_next = (sky2->rx_next + 1) % sky2->rx_pending; 2149 prefetch(sky2->rx_ring + sky2->rx_next); 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 + 2163 if (status & GMR_FS_ANY_ERR) 2164 goto error; 2165 ··· 2156 2157 /* if length reported by DMA does not match PHY, packet was truncated */ 2158 if (length != count) 2159 + goto len_error; 2160 2161 + okay: 2162 if (length < copybreak) 2163 skb = receive_copy(sky2, re, length); 2164 else ··· 2167 2168 return skb; 2169 2170 + len_error: 2171 /* Truncation of overlength packets 2172 causes PHY length to not match MAC length */ 2173 ++sky2->net_stats.rx_length_errors; 2174 if (netif_msg_rx_err(sky2) && net_ratelimit()) 2175 + pr_info(PFX "%s: rx length error: status %#x length %d\n", 2176 + dev->name, status, length); 2177 goto resubmit; 2178 2179 error: ··· 3934 sky2->hw = hw; 3935 sky2->msg_enable = netif_msg_init(debug, default_msg); 3936 3937 /* Auto speed and flow control */ 3938 sky2->autoneg = AUTONEG_ENABLE; 3939 sky2->flow_mode = FC_BOTH; ··· 3964 dev->features |= NETIF_F_HIGHDMA; 3965 3966 #ifdef SKY2_VLAN_TAG_USED 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 + } 3973 #endif 3974 3975 /* read the mac address */