Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (21 commits)
mac80211: check interface is down before type change
cfg80211: fix NULL ptr deref
libertas if_usb: Fix crash on 64-bit machines
mac80211: fix reason code output endianness
mac80211: fix addba timer
ath9k: fix misplaced semicolon on rate control
b43: Fix DMA TX bounce buffer copying
mac80211: fix BSS leak
rt73usb.c : more ids
ipw2200: fix oops on missing firmware
gre: Fix dev_addr clobbering for gretap
sky2: set carrier off in probe
net: fix sk_forward_alloc corruption
pcnet_cs: add cis of PreMax PE-200 ethernet pcmcia card
r8169: Fix card drop incoming VLAN tagged MTU byte large jumbo frames
ibmtr: possible Read buffer overflow?
net: Fix RPF to work with policy routing
net: fix kmemcheck annotations
e1000e: rework disable K1 at 1000Mbps for 82577/82578
e1000e: config PHY via software after resets
...

+606 -180
+19 -7
drivers/net/e100.c
··· 1427 1427 } else 1428 1428 DPRINTK(HW, DEBUG, "phy_addr = %d\n", nic->mii.phy_id); 1429 1429 1430 - /* Isolate all the PHY ids */ 1431 - for (addr = 0; addr < 32; addr++) 1432 - mdio_write(netdev, addr, MII_BMCR, BMCR_ISOLATE); 1433 - /* Select the discovered PHY */ 1434 - bmcr &= ~BMCR_ISOLATE; 1435 - mdio_write(netdev, nic->mii.phy_id, MII_BMCR, bmcr); 1436 - 1437 1430 /* Get phy ID */ 1438 1431 id_lo = mdio_read(netdev, nic->mii.phy_id, MII_PHYSID1); 1439 1432 id_hi = mdio_read(netdev, nic->mii.phy_id, MII_PHYSID2); 1440 1433 nic->phy = (u32)id_hi << 16 | (u32)id_lo; 1441 1434 DPRINTK(HW, DEBUG, "phy ID = 0x%08X\n", nic->phy); 1435 + 1436 + /* Select the phy and isolate the rest */ 1437 + for (addr = 0; addr < 32; addr++) { 1438 + if (addr != nic->mii.phy_id) { 1439 + mdio_write(netdev, addr, MII_BMCR, BMCR_ISOLATE); 1440 + } else if (nic->phy != phy_82552_v) { 1441 + bmcr = mdio_read(netdev, addr, MII_BMCR); 1442 + mdio_write(netdev, addr, MII_BMCR, 1443 + bmcr & ~BMCR_ISOLATE); 1444 + } 1445 + } 1446 + /* 1447 + * Workaround for 82552: 1448 + * Clear the ISOLATE bit on selected phy_id last (mirrored on all 1449 + * other phy_id's) using bmcr value from addr discovery loop above. 1450 + */ 1451 + if (nic->phy == phy_82552_v) 1452 + mdio_write(netdev, nic->mii.phy_id, MII_BMCR, 1453 + bmcr & ~BMCR_ISOLATE); 1442 1454 1443 1455 /* Handle National tx phys */ 1444 1456 #define NCS_PHY_MODEL_MASK 0xFFF0FFFF
+2
drivers/net/e1000e/defines.h
··· 76 76 /* Extended Device Control */ 77 77 #define E1000_CTRL_EXT_SDP7_DATA 0x00000080 /* Value of SW Definable Pin 7 */ 78 78 #define E1000_CTRL_EXT_EE_RST 0x00002000 /* Reinitialize from EEPROM */ 79 + #define E1000_CTRL_EXT_SPD_BYPS 0x00008000 /* Speed Select Bypass */ 79 80 #define E1000_CTRL_EXT_RO_DIS 0x00020000 /* Relaxed Ordering disable */ 80 81 #define E1000_CTRL_EXT_DMA_DYN_CLK_EN 0x00080000 /* DMA Dynamic Clock Gating */ 81 82 #define E1000_CTRL_EXT_LINK_MODE_MASK 0x00C00000 ··· 348 347 /* Extended Configuration Control and Size */ 349 348 #define E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP 0x00000020 350 349 #define E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE 0x00000001 350 + #define E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE 0x00000008 351 351 #define E1000_EXTCNF_CTRL_SWFLAG 0x00000020 352 352 #define E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_MASK 0x00FF0000 353 353 #define E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_SHIFT 16
+14
drivers/net/e1000e/e1000.h
··· 141 141 #define HV_TNCRS_UPPER PHY_REG(778, 29) /* Transmit with no CRS */ 142 142 #define HV_TNCRS_LOWER PHY_REG(778, 30) 143 143 144 + /* BM PHY Copper Specific Status */ 145 + #define BM_CS_STATUS 17 146 + #define BM_CS_STATUS_LINK_UP 0x0400 147 + #define BM_CS_STATUS_RESOLVED 0x0800 148 + #define BM_CS_STATUS_SPEED_MASK 0xC000 149 + #define BM_CS_STATUS_SPEED_1000 0x8000 150 + 151 + /* 82577 Mobile Phy Status Register */ 152 + #define HV_M_STATUS 26 153 + #define HV_M_STATUS_AUTONEG_COMPLETE 0x1000 154 + #define HV_M_STATUS_SPEED_MASK 0x0300 155 + #define HV_M_STATUS_SPEED_1000 0x0200 156 + #define HV_M_STATUS_LINK_UP 0x0040 157 + 144 158 enum e1000_boards { 145 159 board_82571, 146 160 board_82572,
+1
drivers/net/e1000e/hw.h
··· 903 903 struct e1000_dev_spec_ich8lan { 904 904 bool kmrn_lock_loss_workaround_enabled; 905 905 struct e1000_shadow_ram shadow_ram[E1000_ICH8_SHADOW_RAM_WORDS]; 906 + bool nvm_k1_enabled; 906 907 }; 907 908 908 909 struct e1000_hw {
+387 -95
drivers/net/e1000e/ich8lan.c
··· 124 124 125 125 #define SW_FLAG_TIMEOUT 1000 /* SW Semaphore flag timeout in milliseconds */ 126 126 127 + /* SMBus Address Phy Register */ 128 + #define HV_SMB_ADDR PHY_REG(768, 26) 129 + #define HV_SMB_ADDR_PEC_EN 0x0200 130 + #define HV_SMB_ADDR_VALID 0x0080 131 + 132 + /* Strapping Option Register - RO */ 133 + #define E1000_STRAP 0x0000C 134 + #define E1000_STRAP_SMBUS_ADDRESS_MASK 0x00FE0000 135 + #define E1000_STRAP_SMBUS_ADDRESS_SHIFT 17 136 + 127 137 /* OEM Bits Phy Register */ 128 138 #define HV_OEM_BITS PHY_REG(768, 25) 129 139 #define HV_OEM_BITS_LPLU 0x0004 /* Low Power Link Up */ 140 + #define HV_OEM_BITS_GBE_DIS 0x0040 /* Gigabit Disable */ 130 141 #define HV_OEM_BITS_RESTART_AN 0x0400 /* Restart Auto-negotiation */ 142 + 143 + #define E1000_NVM_K1_CONFIG 0x1B /* NVM K1 Config Word */ 144 + #define E1000_NVM_K1_ENABLE 0x1 /* NVM Enable K1 bit */ 131 145 132 146 /* ICH GbE Flash Hardware Sequencing Flash Status Register bit breakdown */ 133 147 /* Offset 04h HSFSTS */ ··· 222 208 static s32 e1000_led_on_pchlan(struct e1000_hw *hw); 223 209 static s32 e1000_led_off_pchlan(struct e1000_hw *hw); 224 210 static s32 e1000_set_lplu_state_pchlan(struct e1000_hw *hw, bool active); 211 + static void e1000_lan_init_done_ich8lan(struct e1000_hw *hw); 212 + static s32 e1000_k1_gig_workaround_hv(struct e1000_hw *hw, bool link); 213 + static s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable); 225 214 226 215 static inline u16 __er16flash(struct e1000_hw *hw, unsigned long reg) 227 216 { ··· 500 483 goto out; 501 484 } 502 485 503 - if (hw->mac.type == e1000_pchlan) { 504 - ret_val = e1000e_write_kmrn_reg(hw, 505 - E1000_KMRNCTRLSTA_K1_CONFIG, 506 - E1000_KMRNCTRLSTA_K1_ENABLE); 507 - if (ret_val) 508 - goto out; 509 - } 510 - 511 486 /* 512 487 * First we want to see if the MII Status Register reports 513 488 * link. If so, then we want to get the current speed/duplex ··· 508 499 ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link); 509 500 if (ret_val) 510 501 goto out; 502 + 503 + if (hw->mac.type == e1000_pchlan) { 504 + ret_val = e1000_k1_gig_workaround_hv(hw, link); 505 + if (ret_val) 506 + goto out; 507 + } 511 508 512 509 if (!link) 513 510 goto out; /* No link detected */ ··· 809 794 } 810 795 811 796 /** 797 + * e1000_sw_lcd_config_ich8lan - SW-based LCD Configuration 798 + * @hw: pointer to the HW structure 799 + * 800 + * SW should configure the LCD from the NVM extended configuration region 801 + * as a workaround for certain parts. 802 + **/ 803 + static s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw) 804 + { 805 + struct e1000_phy_info *phy = &hw->phy; 806 + u32 i, data, cnf_size, cnf_base_addr, sw_cfg_mask; 807 + s32 ret_val; 808 + u16 word_addr, reg_data, reg_addr, phy_page = 0; 809 + 810 + ret_val = hw->phy.ops.acquire_phy(hw); 811 + if (ret_val) 812 + return ret_val; 813 + 814 + /* 815 + * Initialize the PHY from the NVM on ICH platforms. This 816 + * is needed due to an issue where the NVM configuration is 817 + * not properly autoloaded after power transitions. 818 + * Therefore, after each PHY reset, we will load the 819 + * configuration data out of the NVM manually. 820 + */ 821 + if ((hw->mac.type == e1000_ich8lan && phy->type == e1000_phy_igp_3) || 822 + (hw->mac.type == e1000_pchlan)) { 823 + struct e1000_adapter *adapter = hw->adapter; 824 + 825 + /* Check if SW needs to configure the PHY */ 826 + if ((adapter->pdev->device == E1000_DEV_ID_ICH8_IGP_M_AMT) || 827 + (adapter->pdev->device == E1000_DEV_ID_ICH8_IGP_M) || 828 + (hw->mac.type == e1000_pchlan)) 829 + sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG_ICH8M; 830 + else 831 + sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG; 832 + 833 + data = er32(FEXTNVM); 834 + if (!(data & sw_cfg_mask)) 835 + goto out; 836 + 837 + /* Wait for basic configuration completes before proceeding */ 838 + e1000_lan_init_done_ich8lan(hw); 839 + 840 + /* 841 + * Make sure HW does not configure LCD from PHY 842 + * extended configuration before SW configuration 843 + */ 844 + data = er32(EXTCNF_CTRL); 845 + if (data & E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE) 846 + goto out; 847 + 848 + cnf_size = er32(EXTCNF_SIZE); 849 + cnf_size &= E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_MASK; 850 + cnf_size >>= E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_SHIFT; 851 + if (!cnf_size) 852 + goto out; 853 + 854 + cnf_base_addr = data & E1000_EXTCNF_CTRL_EXT_CNF_POINTER_MASK; 855 + cnf_base_addr >>= E1000_EXTCNF_CTRL_EXT_CNF_POINTER_SHIFT; 856 + 857 + if (!(data & E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE) && 858 + (hw->mac.type == e1000_pchlan)) { 859 + /* 860 + * HW configures the SMBus address and LEDs when the 861 + * OEM and LCD Write Enable bits are set in the NVM. 862 + * When both NVM bits are cleared, SW will configure 863 + * them instead. 864 + */ 865 + data = er32(STRAP); 866 + data &= E1000_STRAP_SMBUS_ADDRESS_MASK; 867 + reg_data = data >> E1000_STRAP_SMBUS_ADDRESS_SHIFT; 868 + reg_data |= HV_SMB_ADDR_PEC_EN | HV_SMB_ADDR_VALID; 869 + ret_val = e1000_write_phy_reg_hv_locked(hw, HV_SMB_ADDR, 870 + reg_data); 871 + if (ret_val) 872 + goto out; 873 + 874 + data = er32(LEDCTL); 875 + ret_val = e1000_write_phy_reg_hv_locked(hw, 876 + HV_LED_CONFIG, 877 + (u16)data); 878 + if (ret_val) 879 + goto out; 880 + } 881 + /* Configure LCD from extended configuration region. */ 882 + 883 + /* cnf_base_addr is in DWORD */ 884 + word_addr = (u16)(cnf_base_addr << 1); 885 + 886 + for (i = 0; i < cnf_size; i++) { 887 + ret_val = e1000_read_nvm(hw, (word_addr + i * 2), 1, 888 + &reg_data); 889 + if (ret_val) 890 + goto out; 891 + 892 + ret_val = e1000_read_nvm(hw, (word_addr + i * 2 + 1), 893 + 1, &reg_addr); 894 + if (ret_val) 895 + goto out; 896 + 897 + /* Save off the PHY page for future writes. */ 898 + if (reg_addr == IGP01E1000_PHY_PAGE_SELECT) { 899 + phy_page = reg_data; 900 + continue; 901 + } 902 + 903 + reg_addr &= PHY_REG_MASK; 904 + reg_addr |= phy_page; 905 + 906 + ret_val = phy->ops.write_phy_reg_locked(hw, 907 + (u32)reg_addr, 908 + reg_data); 909 + if (ret_val) 910 + goto out; 911 + } 912 + } 913 + 914 + out: 915 + hw->phy.ops.release_phy(hw); 916 + return ret_val; 917 + } 918 + 919 + /** 920 + * e1000_k1_gig_workaround_hv - K1 Si workaround 921 + * @hw: pointer to the HW structure 922 + * @link: link up bool flag 923 + * 924 + * If K1 is enabled for 1Gbps, the MAC might stall when transitioning 925 + * from a lower speed. This workaround disables K1 whenever link is at 1Gig 926 + * If link is down, the function will restore the default K1 setting located 927 + * in the NVM. 928 + **/ 929 + static s32 e1000_k1_gig_workaround_hv(struct e1000_hw *hw, bool link) 930 + { 931 + s32 ret_val = 0; 932 + u16 status_reg = 0; 933 + bool k1_enable = hw->dev_spec.ich8lan.nvm_k1_enabled; 934 + 935 + if (hw->mac.type != e1000_pchlan) 936 + goto out; 937 + 938 + /* Wrap the whole flow with the sw flag */ 939 + ret_val = hw->phy.ops.acquire_phy(hw); 940 + if (ret_val) 941 + goto out; 942 + 943 + /* Disable K1 when link is 1Gbps, otherwise use the NVM setting */ 944 + if (link) { 945 + if (hw->phy.type == e1000_phy_82578) { 946 + ret_val = hw->phy.ops.read_phy_reg_locked(hw, 947 + BM_CS_STATUS, 948 + &status_reg); 949 + if (ret_val) 950 + goto release; 951 + 952 + status_reg &= BM_CS_STATUS_LINK_UP | 953 + BM_CS_STATUS_RESOLVED | 954 + BM_CS_STATUS_SPEED_MASK; 955 + 956 + if (status_reg == (BM_CS_STATUS_LINK_UP | 957 + BM_CS_STATUS_RESOLVED | 958 + BM_CS_STATUS_SPEED_1000)) 959 + k1_enable = false; 960 + } 961 + 962 + if (hw->phy.type == e1000_phy_82577) { 963 + ret_val = hw->phy.ops.read_phy_reg_locked(hw, 964 + HV_M_STATUS, 965 + &status_reg); 966 + if (ret_val) 967 + goto release; 968 + 969 + status_reg &= HV_M_STATUS_LINK_UP | 970 + HV_M_STATUS_AUTONEG_COMPLETE | 971 + HV_M_STATUS_SPEED_MASK; 972 + 973 + if (status_reg == (HV_M_STATUS_LINK_UP | 974 + HV_M_STATUS_AUTONEG_COMPLETE | 975 + HV_M_STATUS_SPEED_1000)) 976 + k1_enable = false; 977 + } 978 + 979 + /* Link stall fix for link up */ 980 + ret_val = hw->phy.ops.write_phy_reg_locked(hw, PHY_REG(770, 19), 981 + 0x0100); 982 + if (ret_val) 983 + goto release; 984 + 985 + } else { 986 + /* Link stall fix for link down */ 987 + ret_val = hw->phy.ops.write_phy_reg_locked(hw, PHY_REG(770, 19), 988 + 0x4100); 989 + if (ret_val) 990 + goto release; 991 + } 992 + 993 + ret_val = e1000_configure_k1_ich8lan(hw, k1_enable); 994 + 995 + release: 996 + hw->phy.ops.release_phy(hw); 997 + out: 998 + return ret_val; 999 + } 1000 + 1001 + /** 1002 + * e1000_configure_k1_ich8lan - Configure K1 power state 1003 + * @hw: pointer to the HW structure 1004 + * @enable: K1 state to configure 1005 + * 1006 + * Configure the K1 power state based on the provided parameter. 1007 + * Assumes semaphore already acquired. 1008 + * 1009 + * Success returns 0, Failure returns -E1000_ERR_PHY (-2) 1010 + **/ 1011 + static s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable) 1012 + { 1013 + s32 ret_val = 0; 1014 + u32 ctrl_reg = 0; 1015 + u32 ctrl_ext = 0; 1016 + u32 reg = 0; 1017 + u16 kmrn_reg = 0; 1018 + 1019 + ret_val = e1000e_read_kmrn_reg_locked(hw, 1020 + E1000_KMRNCTRLSTA_K1_CONFIG, 1021 + &kmrn_reg); 1022 + if (ret_val) 1023 + goto out; 1024 + 1025 + if (k1_enable) 1026 + kmrn_reg |= E1000_KMRNCTRLSTA_K1_ENABLE; 1027 + else 1028 + kmrn_reg &= ~E1000_KMRNCTRLSTA_K1_ENABLE; 1029 + 1030 + ret_val = e1000e_write_kmrn_reg_locked(hw, 1031 + E1000_KMRNCTRLSTA_K1_CONFIG, 1032 + kmrn_reg); 1033 + if (ret_val) 1034 + goto out; 1035 + 1036 + udelay(20); 1037 + ctrl_ext = er32(CTRL_EXT); 1038 + ctrl_reg = er32(CTRL); 1039 + 1040 + reg = ctrl_reg & ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100); 1041 + reg |= E1000_CTRL_FRCSPD; 1042 + ew32(CTRL, reg); 1043 + 1044 + ew32(CTRL_EXT, ctrl_ext | E1000_CTRL_EXT_SPD_BYPS); 1045 + udelay(20); 1046 + ew32(CTRL, ctrl_reg); 1047 + ew32(CTRL_EXT, ctrl_ext); 1048 + udelay(20); 1049 + 1050 + out: 1051 + return ret_val; 1052 + } 1053 + 1054 + /** 1055 + * e1000_oem_bits_config_ich8lan - SW-based LCD Configuration 1056 + * @hw: pointer to the HW structure 1057 + * @d0_state: boolean if entering d0 or d3 device state 1058 + * 1059 + * SW will configure Gbe Disable and LPLU based on the NVM. The four bits are 1060 + * collectively called OEM bits. The OEM Write Enable bit and SW Config bit 1061 + * in NVM determines whether HW should configure LPLU and Gbe Disable. 1062 + **/ 1063 + static s32 e1000_oem_bits_config_ich8lan(struct e1000_hw *hw, bool d0_state) 1064 + { 1065 + s32 ret_val = 0; 1066 + u32 mac_reg; 1067 + u16 oem_reg; 1068 + 1069 + if (hw->mac.type != e1000_pchlan) 1070 + return ret_val; 1071 + 1072 + ret_val = hw->phy.ops.acquire_phy(hw); 1073 + if (ret_val) 1074 + return ret_val; 1075 + 1076 + mac_reg = er32(EXTCNF_CTRL); 1077 + if (mac_reg & E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE) 1078 + goto out; 1079 + 1080 + mac_reg = er32(FEXTNVM); 1081 + if (!(mac_reg & E1000_FEXTNVM_SW_CONFIG_ICH8M)) 1082 + goto out; 1083 + 1084 + mac_reg = er32(PHY_CTRL); 1085 + 1086 + ret_val = hw->phy.ops.read_phy_reg_locked(hw, HV_OEM_BITS, &oem_reg); 1087 + if (ret_val) 1088 + goto out; 1089 + 1090 + oem_reg &= ~(HV_OEM_BITS_GBE_DIS | HV_OEM_BITS_LPLU); 1091 + 1092 + if (d0_state) { 1093 + if (mac_reg & E1000_PHY_CTRL_GBE_DISABLE) 1094 + oem_reg |= HV_OEM_BITS_GBE_DIS; 1095 + 1096 + if (mac_reg & E1000_PHY_CTRL_D0A_LPLU) 1097 + oem_reg |= HV_OEM_BITS_LPLU; 1098 + } else { 1099 + if (mac_reg & E1000_PHY_CTRL_NOND0A_GBE_DISABLE) 1100 + oem_reg |= HV_OEM_BITS_GBE_DIS; 1101 + 1102 + if (mac_reg & E1000_PHY_CTRL_NOND0A_LPLU) 1103 + oem_reg |= HV_OEM_BITS_LPLU; 1104 + } 1105 + /* Restart auto-neg to activate the bits */ 1106 + oem_reg |= HV_OEM_BITS_RESTART_AN; 1107 + ret_val = hw->phy.ops.write_phy_reg_locked(hw, HV_OEM_BITS, oem_reg); 1108 + 1109 + out: 1110 + hw->phy.ops.release_phy(hw); 1111 + 1112 + return ret_val; 1113 + } 1114 + 1115 + 1116 + /** 812 1117 * e1000_hv_phy_workarounds_ich8lan - A series of Phy workarounds to be 813 1118 * done after every PHY reset. 814 1119 **/ ··· 1168 833 ret_val = hw->phy.ops.acquire_phy(hw); 1169 834 if (ret_val) 1170 835 return ret_val; 836 + 1171 837 hw->phy.addr = 1; 1172 - e1000e_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT, 0); 838 + ret_val = e1000e_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT, 0); 839 + if (ret_val) 840 + goto out; 1173 841 hw->phy.ops.release_phy(hw); 1174 842 843 + /* 844 + * Configure the K1 Si workaround during phy reset assuming there is 845 + * link so that it disables K1 if link is in 1Gbps. 846 + */ 847 + ret_val = e1000_k1_gig_workaround_hv(hw, true); 848 + 849 + out: 1175 850 return ret_val; 1176 851 } 1177 852 ··· 1227 882 **/ 1228 883 static s32 e1000_phy_hw_reset_ich8lan(struct e1000_hw *hw) 1229 884 { 1230 - struct e1000_phy_info *phy = &hw->phy; 1231 - u32 i; 1232 - u32 data, cnf_size, cnf_base_addr, sw_cfg_mask; 1233 - s32 ret_val; 1234 - u16 reg, word_addr, reg_data, reg_addr, phy_page = 0; 885 + s32 ret_val = 0; 886 + u16 reg; 1235 887 1236 888 ret_val = e1000e_phy_hw_reset_generic(hw); 1237 889 if (ret_val) ··· 1247 905 if (hw->mac.type == e1000_pchlan) 1248 906 e1e_rphy(hw, BM_WUC, &reg); 1249 907 1250 - /* 1251 - * Initialize the PHY from the NVM on ICH platforms. This 1252 - * is needed due to an issue where the NVM configuration is 1253 - * not properly autoloaded after power transitions. 1254 - * Therefore, after each PHY reset, we will load the 1255 - * configuration data out of the NVM manually. 1256 - */ 1257 - if (hw->mac.type == e1000_ich8lan && phy->type == e1000_phy_igp_3) { 1258 - struct e1000_adapter *adapter = hw->adapter; 908 + /* Configure the LCD with the extended configuration region in NVM */ 909 + ret_val = e1000_sw_lcd_config_ich8lan(hw); 910 + if (ret_val) 911 + goto out; 1259 912 1260 - /* Check if SW needs configure the PHY */ 1261 - if ((adapter->pdev->device == E1000_DEV_ID_ICH8_IGP_M_AMT) || 1262 - (adapter->pdev->device == E1000_DEV_ID_ICH8_IGP_M)) 1263 - sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG_ICH8M; 1264 - else 1265 - sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG; 913 + /* Configure the LCD with the OEM bits in NVM */ 914 + if (hw->mac.type == e1000_pchlan) 915 + ret_val = e1000_oem_bits_config_ich8lan(hw, true); 1266 916 1267 - data = er32(FEXTNVM); 1268 - if (!(data & sw_cfg_mask)) 1269 - return 0; 1270 - 1271 - /* Wait for basic configuration completes before proceeding */ 1272 - e1000_lan_init_done_ich8lan(hw); 1273 - 1274 - /* 1275 - * Make sure HW does not configure LCD from PHY 1276 - * extended configuration before SW configuration 1277 - */ 1278 - data = er32(EXTCNF_CTRL); 1279 - if (data & E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE) 1280 - return 0; 1281 - 1282 - cnf_size = er32(EXTCNF_SIZE); 1283 - cnf_size &= E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_MASK; 1284 - cnf_size >>= E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_SHIFT; 1285 - if (!cnf_size) 1286 - return 0; 1287 - 1288 - cnf_base_addr = data & E1000_EXTCNF_CTRL_EXT_CNF_POINTER_MASK; 1289 - cnf_base_addr >>= E1000_EXTCNF_CTRL_EXT_CNF_POINTER_SHIFT; 1290 - 1291 - /* Configure LCD from extended configuration region. */ 1292 - 1293 - /* cnf_base_addr is in DWORD */ 1294 - word_addr = (u16)(cnf_base_addr << 1); 1295 - 1296 - for (i = 0; i < cnf_size; i++) { 1297 - ret_val = e1000_read_nvm(hw, 1298 - (word_addr + i * 2), 1299 - 1, 1300 - &reg_data); 1301 - if (ret_val) 1302 - return ret_val; 1303 - 1304 - ret_val = e1000_read_nvm(hw, 1305 - (word_addr + i * 2 + 1), 1306 - 1, 1307 - &reg_addr); 1308 - if (ret_val) 1309 - return ret_val; 1310 - 1311 - /* Save off the PHY page for future writes. */ 1312 - if (reg_addr == IGP01E1000_PHY_PAGE_SELECT) { 1313 - phy_page = reg_data; 1314 - continue; 1315 - } 1316 - 1317 - reg_addr |= phy_page; 1318 - 1319 - ret_val = e1e_wphy(hw, (u32)reg_addr, reg_data); 1320 - if (ret_val) 1321 - return ret_val; 1322 - } 1323 - } 1324 - 917 + out: 1325 918 return 0; 1326 919 } 1327 920 ··· 2583 2306 **/ 2584 2307 static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw) 2585 2308 { 2309 + struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan; 2586 2310 u16 reg; 2587 2311 u32 ctrl, icr, kab; 2588 2312 s32 ret_val; ··· 2617 2339 ew32(PBA, E1000_PBA_8K); 2618 2340 /* Set Packet Buffer Size to 16k. */ 2619 2341 ew32(PBS, E1000_PBS_16K); 2342 + } 2343 + 2344 + if (hw->mac.type == e1000_pchlan) { 2345 + /* Save the NVM K1 bit setting*/ 2346 + ret_val = e1000_read_nvm(hw, E1000_NVM_K1_CONFIG, 1, &reg); 2347 + if (ret_val) 2348 + return ret_val; 2349 + 2350 + if (reg & E1000_NVM_K1_ENABLE) 2351 + dev_spec->nvm_k1_enabled = true; 2352 + else 2353 + dev_spec->nvm_k1_enabled = false; 2620 2354 } 2621 2355 2622 2356 ctrl = er32(CTRL); ··· 2676 2386 if (hw->mac.type == e1000_pchlan) 2677 2387 e1e_rphy(hw, BM_WUC, &reg); 2678 2388 2389 + ret_val = e1000_sw_lcd_config_ich8lan(hw); 2390 + if (ret_val) 2391 + goto out; 2392 + 2393 + if (hw->mac.type == e1000_pchlan) { 2394 + ret_val = e1000_oem_bits_config_ich8lan(hw, true); 2395 + if (ret_val) 2396 + goto out; 2397 + } 2679 2398 /* 2680 2399 * For PCH, this write will make sure that any noise 2681 2400 * will be detected as a CRC error and be dropped rather than show up ··· 2703 2404 if (hw->mac.type == e1000_pchlan) 2704 2405 ret_val = e1000_hv_phy_workarounds_ich8lan(hw); 2705 2406 2407 + out: 2706 2408 return ret_val; 2707 2409 } 2708 2410 ··· 3007 2707 ret_val = e1000e_get_speed_and_duplex_copper(hw, speed, duplex); 3008 2708 if (ret_val) 3009 2709 return ret_val; 3010 - 3011 - if ((hw->mac.type == e1000_pchlan) && (*speed == SPEED_1000)) { 3012 - ret_val = e1000e_write_kmrn_reg(hw, 3013 - E1000_KMRNCTRLSTA_K1_CONFIG, 3014 - E1000_KMRNCTRLSTA_K1_DISABLE); 3015 - if (ret_val) 3016 - return ret_val; 3017 - } 3018 2710 3019 2711 if ((hw->mac.type == e1000_ich8lan) && 3020 2712 (hw->phy.type == e1000_phy_igp_3) &&
+4 -11
drivers/net/e1000e/phy.c
··· 95 95 /* BM PHY Copper Specific Control 1 */ 96 96 #define BM_CS_CTRL1 16 97 97 98 - /* BM PHY Copper Specific Status */ 99 - #define BM_CS_STATUS 17 100 - #define BM_CS_STATUS_LINK_UP 0x0400 101 - #define BM_CS_STATUS_RESOLVED 0x0800 102 - #define BM_CS_STATUS_SPEED_MASK 0xC000 103 - #define BM_CS_STATUS_SPEED_1000 0x8000 104 - 105 98 #define HV_MUX_DATA_CTRL PHY_REG(776, 16) 106 99 #define HV_MUX_DATA_CTRL_GEN_TO_MAC 0x0400 107 100 #define HV_MUX_DATA_CTRL_FORCE_SPEED 0x0004 ··· 556 563 } 557 564 558 565 /** 559 - * e1000_read_kmrn_reg_locked - Read kumeran register 566 + * e1000e_read_kmrn_reg_locked - Read kumeran register 560 567 * @hw: pointer to the HW structure 561 568 * @offset: register offset to be read 562 569 * @data: pointer to the read data ··· 565 572 * information retrieved is stored in data. 566 573 * Assumes semaphore already acquired. 567 574 **/ 568 - s32 e1000_read_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 *data) 575 + s32 e1000e_read_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 *data) 569 576 { 570 577 return __e1000_read_kmrn_reg(hw, offset, data, true); 571 578 } ··· 624 631 } 625 632 626 633 /** 627 - * e1000_write_kmrn_reg_locked - Write kumeran register 634 + * e1000e_write_kmrn_reg_locked - Write kumeran register 628 635 * @hw: pointer to the HW structure 629 636 * @offset: register offset to write to 630 637 * @data: data to write at register offset ··· 632 639 * Write the data to PHY register at the offset using the kumeran interface. 633 640 * Assumes semaphore already acquired. 634 641 **/ 635 - s32 e1000_write_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 data) 642 + s32 e1000e_write_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 data) 636 643 { 637 644 return __e1000_write_kmrn_reg(hw, offset, data, true); 638 645 }
+1 -1
drivers/net/pcmcia/pcnet_cs.c
··· 1760 1760 PCMCIA_DEVICE_CIS_MANF_CARD(0xc00f, 0x0002, "cis/LA-PCM.cis"), 1761 1761 PCMCIA_DEVICE_CIS_PROD_ID12("KTI", "PE520 PLUS", 0xad180345, 0x9d58d392, "PE520.cis"), 1762 1762 PCMCIA_DEVICE_CIS_PROD_ID12("NDC", "Ethernet", 0x01c43ae1, 0x00b2e941, "cis/NE2K.cis"), 1763 - PCMCIA_DEVICE_CIS_PROD_ID12("PMX ", "PE-200", 0x34f3f1c8, 0x10b59f8c, "PE-200.cis"), 1763 + PCMCIA_DEVICE_CIS_PROD_ID12("PMX ", "PE-200", 0x34f3f1c8, 0x10b59f8c, "cis/PE-200.cis"), 1764 1764 PCMCIA_DEVICE_CIS_PROD_ID12("TAMARACK", "Ethernet", 0xcf434fba, 0x00b2e941, "cis/tamarack.cis"), 1765 1765 PCMCIA_DEVICE_PROD_ID12("Ethernet", "CF Size PC Card", 0x00b2e941, 0x43ac239b), 1766 1766 PCMCIA_DEVICE_PROD_ID123("Fast Ethernet", "CF Size PC Card", "1.0",
+1 -1
drivers/net/r8169.c
··· 3379 3379 static void rtl_set_rx_max_size(void __iomem *ioaddr, unsigned int rx_buf_sz) 3380 3380 { 3381 3381 /* Low hurts. Let's disable the filtering. */ 3382 - RTL_W16(RxMaxSize, rx_buf_sz); 3382 + RTL_W16(RxMaxSize, rx_buf_sz + 1); 3383 3383 } 3384 3384 3385 3385 static void rtl8169_set_magic_reg(void __iomem *ioaddr, unsigned mac_version)
+2
drivers/net/sky2.c
··· 4538 4538 goto err_out_free_netdev; 4539 4539 } 4540 4540 4541 + netif_carrier_off(dev); 4542 + 4541 4543 netif_napi_add(dev, &hw->napi, sky2_poll, NAPI_WEIGHT); 4542 4544 4543 4545 err = request_irq(pdev->irq, sky2_intr,
+9 -2
drivers/net/tokenring/ibmtr.c
··· 1144 1144 } else { 1145 1145 char **prphase = printphase; 1146 1146 char **prerror = printerror; 1147 + int pnr = err / 16 - 1; 1148 + int enr = err % 16 - 1; 1147 1149 DPRINTK("TR Adapter misc open failure, error code = "); 1148 - printk("0x%x, Phase: %s, Error: %s\n", 1149 - err, prphase[err/16 -1], prerror[err%16 -1]); 1150 + if (pnr < 0 || pnr >= ARRAY_SIZE(printphase) || 1151 + enr < 0 || 1152 + enr >= ARRAY_SIZE(printerror)) 1153 + printk("0x%x, invalid Phase/Error.", err); 1154 + else 1155 + printk("0x%x, Phase: %s, Error: %s\n", err, 1156 + prphase[pnr], prerror[enr]); 1150 1157 printk(" retrying after %ds delay...\n", 1151 1158 TR_RETRY_INTERVAL/HZ); 1152 1159 }
+1 -1
drivers/net/wireless/ath/ath9k/rc.c
··· 679 679 return rate; 680 680 681 681 if (rate_table->info[rate].valid_single_stream && 682 - !(ath_rc_priv->ht_cap & WLAN_RC_DS_FLAG)); 682 + !(ath_rc_priv->ht_cap & WLAN_RC_DS_FLAG)) 683 683 return rate; 684 684 685 685 /* This should not happen */
+13 -2
drivers/net/wireless/b43/dma.c
··· 1157 1157 } 1158 1158 1159 1159 static int dma_tx_fragment(struct b43_dmaring *ring, 1160 - struct sk_buff *skb) 1160 + struct sk_buff **in_skb) 1161 1161 { 1162 + struct sk_buff *skb = *in_skb; 1162 1163 const struct b43_dma_ops *ops = ring->ops; 1163 1164 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); 1164 1165 u8 *header; ··· 1225 1224 } 1226 1225 1227 1226 memcpy(skb_put(bounce_skb, skb->len), skb->data, skb->len); 1227 + memcpy(bounce_skb->cb, skb->cb, sizeof(skb->cb)); 1228 + bounce_skb->dev = skb->dev; 1229 + skb_set_queue_mapping(bounce_skb, skb_get_queue_mapping(skb)); 1230 + info = IEEE80211_SKB_CB(bounce_skb); 1231 + 1228 1232 dev_kfree_skb_any(skb); 1229 1233 skb = bounce_skb; 1234 + *in_skb = bounce_skb; 1230 1235 meta->skb = skb; 1231 1236 meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1); 1232 1237 if (b43_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) { ··· 1362 1355 * static, so we don't need to store it per frame. */ 1363 1356 ring->queue_prio = skb_get_queue_mapping(skb); 1364 1357 1365 - err = dma_tx_fragment(ring, skb); 1358 + /* dma_tx_fragment might reallocate the skb, so invalidate pointers pointing 1359 + * into the skb data or cb now. */ 1360 + hdr = NULL; 1361 + info = NULL; 1362 + err = dma_tx_fragment(ring, &skb); 1366 1363 if (unlikely(err == -ENOKEY)) { 1367 1364 /* Drop this packet, as we don't have the encryption key 1368 1365 * anymore and must not transmit it unencrypted. */
+4 -1
drivers/net/wireless/ipw2x00/ipw2100.c
··· 6325 6325 6326 6326 fail: 6327 6327 if (dev) { 6328 - if (registered) 6328 + if (registered) { 6329 + unregister_ieee80211(priv->ieee); 6329 6330 unregister_netdev(dev); 6331 + } 6330 6332 6331 6333 ipw2100_hw_stop_adapter(priv); 6332 6334 ··· 6385 6383 /* Unregister the device first - this results in close() 6386 6384 * being called if the device is open. If we free storage 6387 6385 * first, then close() will crash. */ 6386 + unregister_ieee80211(priv->ieee); 6388 6387 unregister_netdev(dev); 6389 6388 6390 6389 /* ipw2100_down will ensure that there is no more pending work
+2
drivers/net/wireless/ipw2x00/ipw2200.c
··· 11822 11822 if (err) { 11823 11823 IPW_ERROR("Failed to register promiscuous network " 11824 11824 "device (error %d).\n", err); 11825 + unregister_ieee80211(priv->ieee); 11825 11826 unregister_netdev(priv->net_dev); 11826 11827 goto out_remove_sysfs; 11827 11828 } ··· 11873 11872 11874 11873 mutex_unlock(&priv->mutex); 11875 11874 11875 + unregister_ieee80211(priv->ieee); 11876 11876 unregister_netdev(priv->net_dev); 11877 11877 11878 11878 if (priv->rxq) {
+1
drivers/net/wireless/ipw2x00/libipw.h
··· 1020 1020 /* ieee80211.c */ 1021 1021 extern void free_ieee80211(struct net_device *dev, int monitor); 1022 1022 extern struct net_device *alloc_ieee80211(int sizeof_priv, int monitor); 1023 + extern void unregister_ieee80211(struct libipw_device *ieee); 1023 1024 extern int libipw_change_mtu(struct net_device *dev, int new_mtu); 1024 1025 1025 1026 extern void libipw_networks_age(struct libipw_device *ieee,
+9 -5
drivers/net/wireless/ipw2x00/libipw_module.c
··· 235 235 libipw_networks_free(ieee); 236 236 237 237 /* free cfg80211 resources */ 238 - if (!monitor) { 239 - wiphy_unregister(ieee->wdev.wiphy); 240 - kfree(ieee->a_band.channels); 241 - kfree(ieee->bg_band.channels); 238 + if (!monitor) 242 239 wiphy_free(ieee->wdev.wiphy); 243 - } 244 240 245 241 free_netdev(dev); 242 + } 243 + 244 + void unregister_ieee80211(struct libipw_device *ieee) 245 + { 246 + wiphy_unregister(ieee->wdev.wiphy); 247 + kfree(ieee->a_band.channels); 248 + kfree(ieee->bg_band.channels); 246 249 } 247 250 248 251 #ifdef CONFIG_LIBIPW_DEBUG ··· 333 330 334 331 EXPORT_SYMBOL(alloc_ieee80211); 335 332 EXPORT_SYMBOL(free_ieee80211); 333 + EXPORT_SYMBOL(unregister_ieee80211);
+1 -1
drivers/net/wireless/libertas/if_usb.c
··· 508 508 /* Fill the receive configuration URB and initialise the Rx call back */ 509 509 usb_fill_bulk_urb(cardp->rx_urb, cardp->udev, 510 510 usb_rcvbulkpipe(cardp->udev, cardp->ep_in), 511 - (void *) (skb->tail + (size_t) IPFIELD_ALIGN_OFFSET), 511 + skb->data + IPFIELD_ALIGN_OFFSET, 512 512 MRVDRV_ETH_RX_PACKET_BUFFER_SIZE, callbackfn, 513 513 cardp); 514 514
+5
drivers/net/wireless/rt2x00/rt73usb.c
··· 2389 2389 { USB_DEVICE(0x13b1, 0x0023), USB_DEVICE_DATA(&rt73usb_ops) }, 2390 2390 { USB_DEVICE(0x13b1, 0x0028), USB_DEVICE_DATA(&rt73usb_ops) }, 2391 2391 /* MSI */ 2392 + { USB_DEVICE(0x0db0, 0x4600), USB_DEVICE_DATA(&rt73usb_ops) }, 2392 2393 { USB_DEVICE(0x0db0, 0x6877), USB_DEVICE_DATA(&rt73usb_ops) }, 2393 2394 { USB_DEVICE(0x0db0, 0x6874), USB_DEVICE_DATA(&rt73usb_ops) }, 2394 2395 { USB_DEVICE(0x0db0, 0xa861), USB_DEVICE_DATA(&rt73usb_ops) }, 2395 2396 { USB_DEVICE(0x0db0, 0xa874), USB_DEVICE_DATA(&rt73usb_ops) }, 2397 + /* Ovislink */ 2398 + { USB_DEVICE(0x1b75, 0x7318), USB_DEVICE_DATA(&rt73usb_ops) }, 2396 2399 /* Ralink */ 2397 2400 { USB_DEVICE(0x04bb, 0x093d), USB_DEVICE_DATA(&rt73usb_ops) }, 2398 2401 { USB_DEVICE(0x148f, 0x2573), USB_DEVICE_DATA(&rt73usb_ops) }, ··· 2423 2420 /* Planex */ 2424 2421 { USB_DEVICE(0x2019, 0xab01), USB_DEVICE_DATA(&rt73usb_ops) }, 2425 2422 { USB_DEVICE(0x2019, 0xab50), USB_DEVICE_DATA(&rt73usb_ops) }, 2423 + /* WideTell */ 2424 + { USB_DEVICE(0x7167, 0x3840), USB_DEVICE_DATA(&rt73usb_ops) }, 2426 2425 /* Zcom */ 2427 2426 { USB_DEVICE(0x0cde, 0x001c), USB_DEVICE_DATA(&rt73usb_ops) }, 2428 2427 /* ZyXEL */
+4 -4
drivers/serial/serial_cs.c
··· 879 879 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0175, 0x0000, "cis/DP83903.cis"), 880 880 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x0035, "cis/3CXEM556.cis"), 881 881 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x003d, "cis/3CXEM556.cis"), 882 - PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC850", 0xd85f6206, 0x42a2c018, "SW_8xx_SER.cis"), /* Sierra Wireless AC850 3G Network Adapter R1 */ 883 - PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0x0710, "SW_7xx_SER.cis"), /* Sierra Wireless AC710/AC750 GPRS Network Adapter R1 */ 884 - PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0xa555, "SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- pre update */ 885 - PCMCIA_DEVICE_CIS_MANF_CARD(0x013f, 0xa555, "SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- post update */ 882 + PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC850", 0xd85f6206, 0x42a2c018, "cis/SW_8xx_SER.cis"), /* Sierra Wireless AC850 3G Network Adapter R1 */ 883 + PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC710/AC750", 0xd85f6206, 0x761b11e0, "cis/SW_7xx_SER.cis"), /* Sierra Wireless AC710/AC750 GPRS Network Adapter R1 */ 884 + PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- pre update */ 885 + PCMCIA_DEVICE_CIS_MANF_CARD(0x013f, 0xa555, "cis/SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- post update */ 886 886 PCMCIA_DEVICE_CIS_PROD_ID12("MultiTech", "PCMCIA 56K DataFax", 0x842047ee, 0xc2efcf03, "cis/MT5634ZLX.cis"), 887 887 PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-2", 0x96913a85, 0x27ab5437, "cis/COMpad2.cis"), 888 888 PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-4", 0x96913a85, 0xcec8f102, "cis/COMpad4.cis"),
+4 -2
firmware/Makefile
··· 69 69 fw-shipped-$(CONFIG_MYRI_SBUS) += myricom/lanai.bin 70 70 fw-shipped-$(CONFIG_PCMCIA_PCNET) += cis/LA-PCM.cis cis/PCMLM28.cis \ 71 71 cis/DP83903.cis cis/NE2K.cis \ 72 - cis/tamarack.cis 72 + cis/tamarack.cis cis/PE-200.cis 73 73 fw-shipped-$(CONFIG_PCMCIA_3C589) += cis/3CXEM556.cis 74 74 fw-shipped-$(CONFIG_PCMCIA_3C574) += cis/3CCFEM556.cis 75 75 fw-shipped-$(CONFIG_SERIAL_8250_CS) += cis/MT5634ZLX.cis cis/RS-COM-2P.cis \ 76 - cis/COMpad2.cis cis/COMpad4.cis 76 + cis/COMpad2.cis cis/COMpad4.cis \ 77 + cis/SW_555_SER.cis cis/SW_7xx_SER.cis \ 78 + cis/SW_8xx_SER.cis 77 79 fw-shipped-$(CONFIG_PCMCIA_SMC91C92) += ositech/Xilinx7OD.bin 78 80 fw-shipped-$(CONFIG_SCSI_ADVANSYS) += advansys/mcode.bin advansys/38C1600.bin \ 79 81 advansys/3550.bin advansys/38C0800.bin
+4
firmware/WHENCE
··· 600 600 cis/DP83903.cis 601 601 cis/NE2K.cis 602 602 cis/tamarack.cis 603 + cis/PE-200.cis 603 604 604 605 Licence: GPL 605 606 ··· 634 633 cis/RS-COM-2P.cis 635 634 cis/COMpad2.cis 636 635 cis/COMpad4.cis 636 + cis/SW_555_SER.cis 637 + cis/SW_7xx_SER.cis 638 + cis/SW_8xx_SER.cis 637 639 638 640 Licence: GPL 639 641
+9
firmware/cis/PE-200.cis.ihex
··· 1 + :1000000001030000FF151E0401504D582020200060 2 + :1000100050452D3230300045544845524E4554002D 3 + :1000200052303100FF210206031A050101000101CF 4 + :100030001B0EC181190155E051000F100F30FFFF59 5 + :040040001400FF00A9 6 + :00000001FF 7 + # 8 + # Replacement CIS for PE-200 ethernet card 9 + #
+12
firmware/cis/SW_555_SER.cis.ihex
··· 1 + :100000000101FF17034100FF20043F0110072102F7 2 + :100010000200152A070053696572726120576972E0 3 + :10002000656C657373004169724361726420353594 4 + :1000300035004135353500526576203100FF1A050F 5 + :1000400001030007731B0BE00118A360F8030730DE 6 + :10005000BC3F1B08A10108A360F802071B08A2010E 7 + :1000600008A360E803071B08A30108A360E80207D0 8 + :0A0070001B04A40108231400FF0084 9 + :00000001FF 10 + # 11 + # Replacement CIS for AC555 provided by Sierra Wireless 12 + #
+13
firmware/cis/SW_7xx_SER.cis.ihex
··· 1 + :100000000101FF17034100FF2004920110072102A4 2 + :1000100002001537070053696572726120576972D3 3 + :10002000656C6573730041433731302F4143373579 4 + :10003000300047505253204E6574776F726B2041E9 5 + :1000400064617074657200523100FF1A050103008B 6 + :1000500007731B10E00119784D555D25A360F80367 7 + :100060000730BC861B08A10108A360F802071B0823 8 + :10007000A20108A360E803071B08A30108A360E826 9 + :0C00800002071B04A40108231400FF0069 10 + :00000001FF 11 + # 12 + # Replacement CIS for AC7xx provided by Sierra Wireless 13 + #
+13
firmware/cis/SW_8xx_SER.cis.ihex
··· 1 + :100000000101FF17034100FF2004920110072102A4 2 + :100010000200152F070053696572726120576972DB 3 + :10002000656C657373004143383530003347204EAB 4 + :100030006574776F726B20416461707465720052F1 5 + :100040003100FF1A0501030007731B10E001197846 6 + :100050004D555D25A360F8480730BC861B08A101FB 7 + :1000600008A360F847071B08A20108A360E8480737 8 + :100070001B08A30108A360E847071B04A401082389 9 + :040080001400FF0069 10 + :00000001FF 11 + # 12 + # Replacement CIS for AC8xx provided by Sierra Wireless 13 + #
+4 -2
include/linux/skbuff.h
··· 354 354 ipvs_property:1, 355 355 peeked:1, 356 356 nf_trace:1; 357 + __be16 protocol:16; 357 358 kmemcheck_bitfield_end(flags1); 358 - __be16 protocol; 359 359 360 360 void (*destructor)(struct sk_buff *skb); 361 361 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) ··· 367 367 #endif 368 368 369 369 int iif; 370 - __u16 queue_mapping; 371 370 #ifdef CONFIG_NET_SCHED 372 371 __u16 tc_index; /* traffic control index */ 373 372 #ifdef CONFIG_NET_CLS_ACT ··· 375 376 #endif 376 377 377 378 kmemcheck_bitfield_begin(flags2); 379 + __u16 queue_mapping:16; 378 380 #ifdef CONFIG_IPV6_NDISC_NODETYPE 379 381 __u8 ndisc_nodetype:2; 380 382 #endif ··· 1757 1757 int to_offset, 1758 1758 int size); 1759 1759 extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); 1760 + extern void skb_free_datagram_locked(struct sock *sk, 1761 + struct sk_buff *skb); 1760 1762 extern int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, 1761 1763 unsigned int flags); 1762 1764 extern __wsum skb_checksum(const struct sk_buff *skb, int offset,
+2 -1
include/net/ip_fib.h
··· 210 210 extern const struct nla_policy rtm_ipv4_policy[]; 211 211 extern void ip_fib_init(void); 212 212 extern int fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif, 213 - struct net_device *dev, __be32 *spec_dst, u32 *itag); 213 + struct net_device *dev, __be32 *spec_dst, 214 + u32 *itag, u32 mark); 214 215 extern void fib_select_default(struct net *net, const struct flowi *flp, 215 216 struct fib_result *res); 216 217
+9 -1
net/core/datagram.c
··· 224 224 consume_skb(skb); 225 225 sk_mem_reclaim_partial(sk); 226 226 } 227 + EXPORT_SYMBOL(skb_free_datagram); 228 + 229 + void skb_free_datagram_locked(struct sock *sk, struct sk_buff *skb) 230 + { 231 + lock_sock(sk); 232 + skb_free_datagram(sk, skb); 233 + release_sock(sk); 234 + } 235 + EXPORT_SYMBOL(skb_free_datagram_locked); 227 236 228 237 /** 229 238 * skb_kill_datagram - Free a datagram skbuff forcibly ··· 761 752 EXPORT_SYMBOL(datagram_poll); 762 753 EXPORT_SYMBOL(skb_copy_and_csum_datagram_iovec); 763 754 EXPORT_SYMBOL(skb_copy_datagram_iovec); 764 - EXPORT_SYMBOL(skb_free_datagram); 765 755 EXPORT_SYMBOL(skb_recv_datagram);
+4 -1
net/ipv4/fib_frontend.c
··· 229 229 */ 230 230 231 231 int fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif, 232 - struct net_device *dev, __be32 *spec_dst, u32 *itag) 232 + struct net_device *dev, __be32 *spec_dst, 233 + u32 *itag, u32 mark) 233 234 { 234 235 struct in_device *in_dev; 235 236 struct flowi fl = { .nl_u = { .ip4_u = 236 237 { .daddr = src, 237 238 .saddr = dst, 238 239 .tos = tos } }, 240 + .mark = mark, 239 241 .iif = oif }; 242 + 240 243 struct fib_result res; 241 244 int no_addr, rpf; 242 245 int ret;
+16 -12
net/ipv4/ip_gre.c
··· 1464 1464 1465 1465 ether_setup(dev); 1466 1466 1467 - dev->netdev_ops = &ipgre_netdev_ops; 1467 + dev->netdev_ops = &ipgre_tap_netdev_ops; 1468 1468 dev->destructor = free_netdev; 1469 1469 1470 1470 dev->iflink = 0; ··· 1525 1525 if (t->dev != dev) 1526 1526 return -EEXIST; 1527 1527 } else { 1528 - unsigned nflags = 0; 1529 - 1530 1528 t = nt; 1531 1529 1532 - if (ipv4_is_multicast(p.iph.daddr)) 1533 - nflags = IFF_BROADCAST; 1534 - else if (p.iph.daddr) 1535 - nflags = IFF_POINTOPOINT; 1530 + if (dev->type != ARPHRD_ETHER) { 1531 + unsigned nflags = 0; 1536 1532 1537 - if ((dev->flags ^ nflags) & 1538 - (IFF_POINTOPOINT | IFF_BROADCAST)) 1539 - return -EINVAL; 1533 + if (ipv4_is_multicast(p.iph.daddr)) 1534 + nflags = IFF_BROADCAST; 1535 + else if (p.iph.daddr) 1536 + nflags = IFF_POINTOPOINT; 1537 + 1538 + if ((dev->flags ^ nflags) & 1539 + (IFF_POINTOPOINT | IFF_BROADCAST)) 1540 + return -EINVAL; 1541 + } 1540 1542 1541 1543 ipgre_tunnel_unlink(ign, t); 1542 1544 t->parms.iph.saddr = p.iph.saddr; 1543 1545 t->parms.iph.daddr = p.iph.daddr; 1544 1546 t->parms.i_key = p.i_key; 1545 - memcpy(dev->dev_addr, &p.iph.saddr, 4); 1546 - memcpy(dev->broadcast, &p.iph.daddr, 4); 1547 + if (dev->type != ARPHRD_ETHER) { 1548 + memcpy(dev->dev_addr, &p.iph.saddr, 4); 1549 + memcpy(dev->broadcast, &p.iph.daddr, 4); 1550 + } 1547 1551 ipgre_tunnel_link(ign, t); 1548 1552 netdev_state_change(dev); 1549 1553 }
+4 -4
net/ipv4/route.c
··· 1854 1854 goto e_inval; 1855 1855 spec_dst = inet_select_addr(dev, 0, RT_SCOPE_LINK); 1856 1856 } else if (fib_validate_source(saddr, 0, tos, 0, 1857 - dev, &spec_dst, &itag) < 0) 1857 + dev, &spec_dst, &itag, 0) < 0) 1858 1858 goto e_inval; 1859 1859 1860 1860 rth = dst_alloc(&ipv4_dst_ops); ··· 1967 1967 1968 1968 1969 1969 err = fib_validate_source(saddr, daddr, tos, FIB_RES_OIF(*res), 1970 - in_dev->dev, &spec_dst, &itag); 1970 + in_dev->dev, &spec_dst, &itag, skb->mark); 1971 1971 if (err < 0) { 1972 1972 ip_handle_martian_source(in_dev->dev, in_dev, skb, daddr, 1973 1973 saddr); ··· 2141 2141 int result; 2142 2142 result = fib_validate_source(saddr, daddr, tos, 2143 2143 net->loopback_dev->ifindex, 2144 - dev, &spec_dst, &itag); 2144 + dev, &spec_dst, &itag, skb->mark); 2145 2145 if (result < 0) 2146 2146 goto martian_source; 2147 2147 if (result) ··· 2170 2170 spec_dst = inet_select_addr(dev, 0, RT_SCOPE_LINK); 2171 2171 else { 2172 2172 err = fib_validate_source(saddr, 0, tos, 0, dev, &spec_dst, 2173 - &itag); 2173 + &itag, skb->mark); 2174 2174 if (err < 0) 2175 2175 goto martian_source; 2176 2176 if (err)
+1 -3
net/ipv4/udp.c
··· 999 999 err = ulen; 1000 1000 1001 1001 out_free: 1002 - lock_sock(sk); 1003 - skb_free_datagram(sk, skb); 1004 - release_sock(sk); 1002 + skb_free_datagram_locked(sk, skb); 1005 1003 out: 1006 1004 return err; 1007 1005
+1 -3
net/ipv6/udp.c
··· 288 288 err = ulen; 289 289 290 290 out_free: 291 - lock_sock(sk); 292 - skb_free_datagram(sk, skb); 293 - release_sock(sk); 291 + skb_free_datagram_locked(sk, skb); 294 292 out: 295 293 return err; 296 294
+12 -7
net/mac80211/agg-tx.c
··· 666 666 667 667 state = &sta->ampdu_mlme.tid_state_tx[tid]; 668 668 669 + del_timer_sync(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer); 670 + 669 671 spin_lock_bh(&sta->lock); 670 672 671 - if (!(*state & HT_ADDBA_REQUESTED_MSK)) { 672 - spin_unlock_bh(&sta->lock); 673 - return; 674 - } 673 + if (!(*state & HT_ADDBA_REQUESTED_MSK)) 674 + goto timer_still_needed; 675 675 676 676 if (mgmt->u.action.u.addba_resp.dialog_token != 677 677 sta->ampdu_mlme.tid_tx[tid]->dialog_token) { 678 - spin_unlock_bh(&sta->lock); 679 678 #ifdef CONFIG_MAC80211_HT_DEBUG 680 679 printk(KERN_DEBUG "wrong addBA response token, tid %d\n", tid); 681 680 #endif /* CONFIG_MAC80211_HT_DEBUG */ 682 - return; 681 + goto timer_still_needed; 683 682 } 684 683 685 - del_timer_sync(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer); 686 684 #ifdef CONFIG_MAC80211_HT_DEBUG 687 685 printk(KERN_DEBUG "switched off addBA timer for tid %d \n", tid); 688 686 #endif /* CONFIG_MAC80211_HT_DEBUG */ 687 + 689 688 if (le16_to_cpu(mgmt->u.action.u.addba_resp.status) 690 689 == WLAN_STATUS_SUCCESS) { 691 690 u8 curstate = *state; ··· 698 699 } else { 699 700 ___ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_INITIATOR); 700 701 } 702 + 703 + goto out; 704 + 705 + timer_still_needed: 706 + add_timer(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer); 707 + out: 701 708 spin_unlock_bh(&sta->lock); 702 709 }
+3 -3
net/mac80211/cfg.c
··· 72 72 struct ieee80211_sub_if_data *sdata; 73 73 int ret; 74 74 75 + if (netif_running(dev)) 76 + return -EBUSY; 77 + 75 78 if (!nl80211_type_check(type)) 76 79 return -EINVAL; 77 80 ··· 83 80 ret = ieee80211_if_change_type(sdata, type); 84 81 if (ret) 85 82 return ret; 86 - 87 - if (netif_running(sdata->dev)) 88 - return -EBUSY; 89 83 90 84 if (ieee80211_vif_is_mesh(&sdata->vif) && params->mesh_id_len) 91 85 ieee80211_sdata_set_mesh_id(sdata,
+1 -1
net/mac80211/ht.c
··· 153 153 if (net_ratelimit()) 154 154 printk(KERN_DEBUG "delba from %pM (%s) tid %d reason code %d\n", 155 155 mgmt->sa, initiator ? "initiator" : "recipient", tid, 156 - mgmt->u.action.u.delba.reason_code); 156 + le16_to_cpu(mgmt->u.action.u.delba.reason_code)); 157 157 #endif /* CONFIG_MAC80211_HT_DEBUG */ 158 158 159 159 if (initiator == WLAN_BACK_INITIATOR)
+4 -2
net/mac80211/ibss.c
··· 73 73 struct ieee80211_mgmt *mgmt; 74 74 u8 *pos; 75 75 struct ieee80211_supported_band *sband; 76 + struct cfg80211_bss *bss; 76 77 u32 bss_change; 77 78 u8 supp_rates[IEEE80211_MAX_SUPP_RATES]; 78 79 ··· 178 177 mod_timer(&ifibss->timer, 179 178 round_jiffies(jiffies + IEEE80211_IBSS_MERGE_INTERVAL)); 180 179 181 - cfg80211_inform_bss_frame(local->hw.wiphy, local->hw.conf.channel, 182 - mgmt, skb->len, 0, GFP_KERNEL); 180 + bss = cfg80211_inform_bss_frame(local->hw.wiphy, local->hw.conf.channel, 181 + mgmt, skb->len, 0, GFP_KERNEL); 182 + cfg80211_put_bss(bss); 183 183 cfg80211_ibss_joined(sdata->dev, ifibss->bssid, GFP_KERNEL); 184 184 } 185 185
+5 -5
net/sunrpc/svcsock.c
··· 111 111 rqstp->rq_xprt_ctxt = NULL; 112 112 113 113 dprintk("svc: service %p, releasing skb %p\n", rqstp, skb); 114 - skb_free_datagram(svsk->sk_sk, skb); 114 + skb_free_datagram_locked(svsk->sk_sk, skb); 115 115 } 116 116 } 117 117 ··· 578 578 "svc: received unknown control message %d/%d; " 579 579 "dropping RPC reply datagram\n", 580 580 cmh->cmsg_level, cmh->cmsg_type); 581 - skb_free_datagram(svsk->sk_sk, skb); 581 + skb_free_datagram_locked(svsk->sk_sk, skb); 582 582 return 0; 583 583 } 584 584 ··· 588 588 if (csum_partial_copy_to_xdr(&rqstp->rq_arg, skb)) { 589 589 local_bh_enable(); 590 590 /* checksum error */ 591 - skb_free_datagram(svsk->sk_sk, skb); 591 + skb_free_datagram_locked(svsk->sk_sk, skb); 592 592 return 0; 593 593 } 594 594 local_bh_enable(); 595 - skb_free_datagram(svsk->sk_sk, skb); 595 + skb_free_datagram_locked(svsk->sk_sk, skb); 596 596 } else { 597 597 /* we can use it in-place */ 598 598 rqstp->rq_arg.head[0].iov_base = skb->data + 599 599 sizeof(struct udphdr); 600 600 rqstp->rq_arg.head[0].iov_len = len; 601 601 if (skb_checksum_complete(skb)) { 602 - skb_free_datagram(svsk->sk_sk, skb); 602 + skb_free_datagram_locked(svsk->sk_sk, skb); 603 603 return 0; 604 604 } 605 605 rqstp->rq_xprt_ctxt = skb;
+5 -2
net/wireless/sme.c
··· 165 165 struct cfg80211_registered_device *rdev = 166 166 container_of(work, struct cfg80211_registered_device, conn_work); 167 167 struct wireless_dev *wdev; 168 - u8 bssid[ETH_ALEN]; 168 + u8 bssid_buf[ETH_ALEN], *bssid = NULL; 169 169 170 170 rtnl_lock(); 171 171 cfg80211_lock_rdev(rdev); ··· 181 181 wdev_unlock(wdev); 182 182 continue; 183 183 } 184 - memcpy(bssid, wdev->conn->params.bssid, ETH_ALEN); 184 + if (wdev->conn->params.bssid) { 185 + memcpy(bssid_buf, wdev->conn->params.bssid, ETH_ALEN); 186 + bssid = bssid_buf; 187 + } 185 188 if (cfg80211_conn_do_work(wdev)) 186 189 __cfg80211_connect_result( 187 190 wdev->netdev, bssid,