diff options
author | Chaoming_Li <chaoming_li@realsil.com.cn> | 2011-04-25 13:53:55 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-04-26 16:14:55 -0400 |
commit | 2b8359f85b81dfe02a631e570582290859191756 (patch) | |
tree | ee324109e93e8a6f42c8cb3cd5d8e5609a7624b6 /drivers | |
parent | f73b279cdb5fc850b4be355307905f2914b2c0bb (diff) |
rtlwifi: rtl8192ce: Change sw and LED routines for addition of rtl8192se and rtl8192de
Change rtl8192ce sw and LED routines for addition of RTL8192SE and
RTL8192DE.
Signed-off-by: Chaoming_Li <chaoming_li@realsil.com.cn>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c | 12 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/dm.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/dm.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/led.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/led.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/reg.h | 58 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/sw.c | 132 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/sw.h | 14 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192cu/hw.c | 2 |
9 files changed, 143 insertions, 85 deletions
diff --git a/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c b/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c index 2836d7eb0d0..bfc84054cc0 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c +++ b/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c | |||
@@ -320,7 +320,7 @@ static void rtl92c_dm_ctrl_initgain_by_rssi(struct ieee80211_hw *hw) | |||
320 | 320 | ||
321 | static void rtl92c_dm_initial_gain_multi_sta(struct ieee80211_hw *hw) | 321 | static void rtl92c_dm_initial_gain_multi_sta(struct ieee80211_hw *hw) |
322 | { | 322 | { |
323 | static u8 binitialized; /* initialized to false */ | 323 | static u8 initialized; /* initialized to false */ |
324 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 324 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
325 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); | 325 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); |
326 | long rssi_strength = rtlpriv->dm.entry_min_undecoratedsmoothed_pwdb; | 326 | long rssi_strength = rtlpriv->dm.entry_min_undecoratedsmoothed_pwdb; |
@@ -331,11 +331,11 @@ static void rtl92c_dm_initial_gain_multi_sta(struct ieee80211_hw *hw) | |||
331 | 331 | ||
332 | if ((multi_sta == false) || (dm_digtable.cursta_connectctate != | 332 | if ((multi_sta == false) || (dm_digtable.cursta_connectctate != |
333 | DIG_STA_DISCONNECT)) { | 333 | DIG_STA_DISCONNECT)) { |
334 | binitialized = false; | 334 | initialized = false; |
335 | dm_digtable.dig_ext_port_stage = DIG_EXT_PORT_STAGE_MAX; | 335 | dm_digtable.dig_ext_port_stage = DIG_EXT_PORT_STAGE_MAX; |
336 | return; | 336 | return; |
337 | } else if (binitialized == false) { | 337 | } else if (initialized == false) { |
338 | binitialized = true; | 338 | initialized = true; |
339 | dm_digtable.dig_ext_port_stage = DIG_EXT_PORT_STAGE_0; | 339 | dm_digtable.dig_ext_port_stage = DIG_EXT_PORT_STAGE_0; |
340 | dm_digtable.cur_igvalue = 0x20; | 340 | dm_digtable.cur_igvalue = 0x20; |
341 | rtl92c_dm_write_dig(hw); | 341 | rtl92c_dm_write_dig(hw); |
@@ -1513,7 +1513,7 @@ void rtl92c_dm_watchdog(struct ieee80211_hw *hw) | |||
1513 | } | 1513 | } |
1514 | EXPORT_SYMBOL(rtl92c_dm_watchdog); | 1514 | EXPORT_SYMBOL(rtl92c_dm_watchdog); |
1515 | 1515 | ||
1516 | static u8 rtl92c_bt_rssi_state_change(struct ieee80211_hw *hw) | 1516 | u8 rtl92c_bt_rssi_state_change(struct ieee80211_hw *hw) |
1517 | { | 1517 | { |
1518 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 1518 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
1519 | struct rtl_pci_priv *rtlpcipriv = rtl_pcipriv(hw); | 1519 | struct rtl_pci_priv *rtlpcipriv = rtl_pcipriv(hw); |
@@ -1570,6 +1570,7 @@ static u8 rtl92c_bt_rssi_state_change(struct ieee80211_hw *hw) | |||
1570 | return false; | 1570 | return false; |
1571 | } | 1571 | } |
1572 | } | 1572 | } |
1573 | EXPORT_SYMBOL(rtl92c_bt_rssi_state_change); | ||
1573 | 1574 | ||
1574 | static bool rtl92c_bt_state_change(struct ieee80211_hw *hw) | 1575 | static bool rtl92c_bt_state_change(struct ieee80211_hw *hw) |
1575 | { | 1576 | { |
@@ -1820,3 +1821,4 @@ void rtl92c_dm_bt_coexist(struct ieee80211_hw *hw) | |||
1820 | rtl92c_check_bt_change(hw); | 1821 | rtl92c_check_bt_change(hw); |
1821 | } | 1822 | } |
1822 | } | 1823 | } |
1824 | EXPORT_SYMBOL(rtl92c_dm_bt_coexist); | ||
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/dm.c b/drivers/net/wireless/rtlwifi/rtl8192ce/dm.c index 7d76504df4d..2df33e53e15 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/dm.c +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/dm.c | |||
@@ -29,10 +29,12 @@ | |||
29 | 29 | ||
30 | #include "../wifi.h" | 30 | #include "../wifi.h" |
31 | #include "../base.h" | 31 | #include "../base.h" |
32 | #include "../pci.h" | ||
32 | #include "reg.h" | 33 | #include "reg.h" |
33 | #include "def.h" | 34 | #include "def.h" |
34 | #include "phy.h" | 35 | #include "phy.h" |
35 | #include "dm.h" | 36 | #include "dm.h" |
37 | #include "../rtl8192c/fw_common.h" | ||
36 | 38 | ||
37 | void rtl92ce_dm_dynamic_txpower(struct ieee80211_hw *hw) | 39 | void rtl92ce_dm_dynamic_txpower(struct ieee80211_hw *hw) |
38 | { | 40 | { |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/dm.h b/drivers/net/wireless/rtlwifi/rtl8192ce/dm.h index 36302ebae4a..07dd9552e82 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/dm.h +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/dm.h | |||
@@ -192,6 +192,7 @@ void rtl92c_dm_init_edca_turbo(struct ieee80211_hw *hw); | |||
192 | void rtl92c_dm_check_txpower_tracking(struct ieee80211_hw *hw); | 192 | void rtl92c_dm_check_txpower_tracking(struct ieee80211_hw *hw); |
193 | void rtl92c_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw); | 193 | void rtl92c_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw); |
194 | void rtl92c_dm_rf_saving(struct ieee80211_hw *hw, u8 bforce_in_normal); | 194 | void rtl92c_dm_rf_saving(struct ieee80211_hw *hw, u8 bforce_in_normal); |
195 | void rtl92c_dm_bt_coexist(struct ieee80211_hw *hw); | ||
195 | void rtl92ce_dm_dynamic_txpower(struct ieee80211_hw *hw); | 196 | void rtl92ce_dm_dynamic_txpower(struct ieee80211_hw *hw); |
196 | 197 | ||
197 | #endif | 198 | #endif |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/led.c b/drivers/net/wireless/rtlwifi/rtl8192ce/led.c index d21b934b5c3..9dd1ed7b642 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/led.c +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/led.c | |||
@@ -106,12 +106,11 @@ void rtl92ce_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled) | |||
106 | void rtl92ce_init_sw_leds(struct ieee80211_hw *hw) | 106 | void rtl92ce_init_sw_leds(struct ieee80211_hw *hw) |
107 | { | 107 | { |
108 | struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw); | 108 | struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw); |
109 | |||
110 | _rtl92ce_init_led(hw, &(pcipriv->ledctl.sw_led0), LED_PIN_LED0); | 109 | _rtl92ce_init_led(hw, &(pcipriv->ledctl.sw_led0), LED_PIN_LED0); |
111 | _rtl92ce_init_led(hw, &(pcipriv->ledctl.sw_led1), LED_PIN_LED1); | 110 | _rtl92ce_init_led(hw, &(pcipriv->ledctl.sw_led1), LED_PIN_LED1); |
112 | } | 111 | } |
113 | 112 | ||
114 | void _rtl92ce_sw_led_control(struct ieee80211_hw *hw, | 113 | static void _rtl92ce_sw_led_control(struct ieee80211_hw *hw, |
115 | enum led_ctl_mode ledaction) | 114 | enum led_ctl_mode ledaction) |
116 | { | 115 | { |
117 | struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw); | 116 | struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw); |
@@ -146,7 +145,7 @@ void rtl92ce_led_control(struct ieee80211_hw *hw, | |||
146 | ledaction == LED_CTL_POWER_ON)) { | 145 | ledaction == LED_CTL_POWER_ON)) { |
147 | return; | 146 | return; |
148 | } | 147 | } |
149 | RT_TRACE(rtlpriv, COMP_LED, DBG_LOUD, ("ledaction %d,\n", | 148 | RT_TRACE(rtlpriv, COMP_LED, DBG_LOUD, ("ledaction %d.\n", |
150 | ledaction)); | 149 | ledaction)); |
151 | _rtl92ce_sw_led_control(hw, ledaction); | 150 | _rtl92ce_sw_led_control(hw, ledaction); |
152 | } | 151 | } |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/led.h b/drivers/net/wireless/rtlwifi/rtl8192ce/led.h index 94332b3af5b..7dfccea2095 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/led.h +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/led.h | |||
@@ -34,7 +34,5 @@ void rtl92ce_init_sw_leds(struct ieee80211_hw *hw); | |||
34 | void rtl92ce_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled); | 34 | void rtl92ce_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled); |
35 | void rtl92ce_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled); | 35 | void rtl92ce_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled); |
36 | void rtl92ce_led_control(struct ieee80211_hw *hw, enum led_ctl_mode ledaction); | 36 | void rtl92ce_led_control(struct ieee80211_hw *hw, enum led_ctl_mode ledaction); |
37 | void _rtl92ce_sw_led_control(struct ieee80211_hw *hw, | ||
38 | enum led_ctl_mode ledaction); | ||
39 | 37 | ||
40 | #endif | 38 | #endif |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/reg.h b/drivers/net/wireless/rtlwifi/rtl8192ce/reg.h index b0868a61384..115b3f841dd 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/reg.h +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/reg.h | |||
@@ -72,6 +72,7 @@ | |||
72 | #define REG_GPIO_IO_SEL_2 0x0062 | 72 | #define REG_GPIO_IO_SEL_2 0x0062 |
73 | /* RTL8723 WIFI/BT/GPS Multi-Function control source. */ | 73 | /* RTL8723 WIFI/BT/GPS Multi-Function control source. */ |
74 | #define REG_MULTI_FUNC_CTRL 0x0068 | 74 | #define REG_MULTI_FUNC_CTRL 0x0068 |
75 | |||
75 | #define REG_MCUFWDL 0x0080 | 76 | #define REG_MCUFWDL 0x0080 |
76 | 77 | ||
77 | #define REG_HMEBOX_EXT_0 0x0088 | 78 | #define REG_HMEBOX_EXT_0 0x0088 |
@@ -543,6 +544,8 @@ | |||
543 | #define IMR_WLANOFF BIT(0) | 544 | #define IMR_WLANOFF BIT(0) |
544 | 545 | ||
545 | #define HWSET_MAX_SIZE 128 | 546 | #define HWSET_MAX_SIZE 128 |
547 | #define EFUSE_MAX_SECTION 16 | ||
548 | #define EFUSE_REAL_CONTENT_LEN 512 | ||
546 | 549 | ||
547 | #define EEPROM_DEFAULT_TSSI 0x0 | 550 | #define EEPROM_DEFAULT_TSSI 0x0 |
548 | #define EEPROM_DEFAULT_TXPOWERDIFF 0x0 | 551 | #define EEPROM_DEFAULT_TXPOWERDIFF 0x0 |
@@ -656,6 +659,7 @@ | |||
656 | #define STOPBE BIT(1) | 659 | #define STOPBE BIT(1) |
657 | #define STOPBK BIT(0) | 660 | #define STOPBK BIT(0) |
658 | 661 | ||
662 | #define RCR_APPFCS BIT(31) | ||
659 | #define RCR_APP_FCS BIT(31) | 663 | #define RCR_APP_FCS BIT(31) |
660 | #define RCR_APP_MIC BIT(30) | 664 | #define RCR_APP_MIC BIT(30) |
661 | #define RCR_APP_ICV BIT(29) | 665 | #define RCR_APP_ICV BIT(29) |
@@ -688,6 +692,7 @@ | |||
688 | 692 | ||
689 | #define REG_USB_INFO 0xFE17 | 693 | #define REG_USB_INFO 0xFE17 |
690 | #define REG_USB_SPECIAL_OPTION 0xFE55 | 694 | #define REG_USB_SPECIAL_OPTION 0xFE55 |
695 | |||
691 | #define REG_USB_DMA_AGG_TO 0xFE5B | 696 | #define REG_USB_DMA_AGG_TO 0xFE5B |
692 | #define REG_USB_AGG_TO 0xFE5C | 697 | #define REG_USB_AGG_TO 0xFE5C |
693 | #define REG_USB_AGG_TH 0xFE5D | 698 | #define REG_USB_AGG_TH 0xFE5D |
@@ -775,7 +780,6 @@ | |||
775 | 780 | ||
776 | #define BOOT_FROM_EEPROM BIT(4) | 781 | #define BOOT_FROM_EEPROM BIT(4) |
777 | #define EEPROM_EN BIT(5) | 782 | #define EEPROM_EN BIT(5) |
778 | #define EEPROMSEL BOOT_FROM_EEPROM | ||
779 | 783 | ||
780 | #define AFE_BGEN BIT(0) | 784 | #define AFE_BGEN BIT(0) |
781 | #define AFE_MBEN BIT(1) | 785 | #define AFE_MBEN BIT(1) |
@@ -901,28 +905,7 @@ | |||
901 | #define BD_PKG_SEL BIT(25) | 905 | #define BD_PKG_SEL BIT(25) |
902 | #define BD_HCI_SEL BIT(26) | 906 | #define BD_HCI_SEL BIT(26) |
903 | #define TYPE_ID BIT(27) | 907 | #define TYPE_ID BIT(27) |
904 | 908 | #define RF_RL_ID (BIT(31) | BIT(30) | BIT(29) | BIT(28)) | |
905 | /* REG_GPIO_OUTSTS (For RTL8723 only) */ | ||
906 | #define EFS_HCI_SEL (BIT(0)|BIT(1)) | ||
907 | #define PAD_HCI_SEL (BIT(2)|BIT(3)) | ||
908 | #define HCI_SEL (BIT(4)|BIT(5)) | ||
909 | #define PKG_SEL_HCI BIT(6) | ||
910 | #define FEN_GPS BIT(7) | ||
911 | #define FEN_BT BIT(8) | ||
912 | #define FEN_WL BIT(9) | ||
913 | #define FEN_PCI BIT(10) | ||
914 | #define FEN_USB BIT(11) | ||
915 | #define BTRF_HWPDN_N BIT(12) | ||
916 | #define WLRF_HWPDN_N BIT(13) | ||
917 | #define PDN_BT_N BIT(14) | ||
918 | #define PDN_GPS_N BIT(15) | ||
919 | #define BT_CTL_HWPDN BIT(16) | ||
920 | #define GPS_CTL_HWPDN BIT(17) | ||
921 | #define PPHY_SUSB BIT(20) | ||
922 | #define UPHY_SUSB BIT(21) | ||
923 | #define PCI_SUSEN BIT(22) | ||
924 | #define USB_SUSEN BIT(23) | ||
925 | #define RF_RL_ID (BIT(31) | BIT(30) | BIT(29) | BIT(28)) | ||
926 | 909 | ||
927 | #define CHIP_VER_RTL_MASK 0xF000 | 910 | #define CHIP_VER_RTL_MASK 0xF000 |
928 | #define CHIP_VER_RTL_SHIFT 12 | 911 | #define CHIP_VER_RTL_SHIFT 12 |
@@ -1077,6 +1060,7 @@ | |||
1077 | #define _RARF_RC8(x) (((x) & 0x1F) << 24) | 1060 | #define _RARF_RC8(x) (((x) & 0x1F) << 24) |
1078 | 1061 | ||
1079 | #define AC_PARAM_TXOP_OFFSET 16 | 1062 | #define AC_PARAM_TXOP_OFFSET 16 |
1063 | #define AC_PARAM_TXOP_LIMIT_OFFSET 16 | ||
1080 | #define AC_PARAM_ECW_MAX_OFFSET 12 | 1064 | #define AC_PARAM_ECW_MAX_OFFSET 12 |
1081 | #define AC_PARAM_ECW_MIN_OFFSET 8 | 1065 | #define AC_PARAM_ECW_MIN_OFFSET 8 |
1082 | #define AC_PARAM_AIFS_OFFSET 0 | 1066 | #define AC_PARAM_AIFS_OFFSET 0 |
@@ -1221,33 +1205,11 @@ | |||
1221 | #define EPROM_CMD_CONFIG 0x3 | 1205 | #define EPROM_CMD_CONFIG 0x3 |
1222 | #define EPROM_CMD_LOAD 1 | 1206 | #define EPROM_CMD_LOAD 1 |
1223 | 1207 | ||
1224 | #define HWSET_MAX_SIZE_92S HWSET_MAX_SIZE | 1208 | #define HWSET_MAX_SIZE_92S HWSET_MAX_SIZE |
1225 | 1209 | ||
1226 | #define HAL_8192C_HW_GPIO_WPS_BIT BIT(2) | ||
1227 | |||
1228 | /* REG_MULTI_FUNC_CTRL(For RTL8723 Only) */ | ||
1229 | /* Enable GPIO[9] as WiFi HW PDn source */ | ||
1230 | #define WL_HWPDN_EN BIT(0) | 1210 | #define WL_HWPDN_EN BIT(0) |
1231 | /* WiFi HW PDn polarity control */ | 1211 | |
1232 | #define WL_HWPDN_SL BIT(1) | 1212 | #define HAL_8192C_HW_GPIO_WPS_BIT BIT(2) |
1233 | /* WiFi function enable */ | ||
1234 | #define WL_FUNC_EN BIT(2) | ||
1235 | /* Enable GPIO[9] as WiFi RF HW PDn source */ | ||
1236 | #define WL_HWROF_EN BIT(3) | ||
1237 | /* Enable GPIO[11] as BT HW PDn source */ | ||
1238 | #define BT_HWPDN_EN BIT(16) | ||
1239 | /* BT HW PDn polarity control */ | ||
1240 | #define BT_HWPDN_SL BIT(17) | ||
1241 | /* BT function enable */ | ||
1242 | #define BT_FUNC_EN BIT(18) | ||
1243 | /* Enable GPIO[11] as BT/GPS RF HW PDn source */ | ||
1244 | #define BT_HWROF_EN BIT(19) | ||
1245 | /* Enable GPIO[10] as GPS HW PDn source */ | ||
1246 | #define GPS_HWPDN_EN BIT(20) | ||
1247 | /* GPS HW PDn polarity control */ | ||
1248 | #define GPS_HWPDN_SL BIT(21) | ||
1249 | /* GPS function enable */ | ||
1250 | #define GPS_FUNC_EN BIT(22) | ||
1251 | 1213 | ||
1252 | #define RPMAC_RESET 0x100 | 1214 | #define RPMAC_RESET 0x100 |
1253 | #define RPMAC_TXSTART 0x104 | 1215 | #define RPMAC_TXSTART 0x104 |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c b/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c index 0042e0ee89a..5c920c6270c 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c | |||
@@ -42,10 +42,58 @@ | |||
42 | #include "trx.h" | 42 | #include "trx.h" |
43 | #include "led.h" | 43 | #include "led.h" |
44 | 44 | ||
45 | void rtl92c_init_aspm_vars(struct ieee80211_hw *hw) | ||
46 | { | ||
47 | struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); | ||
48 | |||
49 | /*close ASPM for AMD defaultly */ | ||
50 | rtlpci->const_amdpci_aspm = 0; | ||
51 | |||
52 | /* | ||
53 | * ASPM PS mode. | ||
54 | * 0 - Disable ASPM, | ||
55 | * 1 - Enable ASPM without Clock Req, | ||
56 | * 2 - Enable ASPM with Clock Req, | ||
57 | * 3 - Alwyas Enable ASPM with Clock Req, | ||
58 | * 4 - Always Enable ASPM without Clock Req. | ||
59 | * set defult to RTL8192CE:3 RTL8192E:2 | ||
60 | * */ | ||
61 | rtlpci->const_pci_aspm = 3; | ||
62 | |||
63 | /*Setting for PCI-E device */ | ||
64 | rtlpci->const_devicepci_aspm_setting = 0x03; | ||
65 | |||
66 | /*Setting for PCI-E bridge */ | ||
67 | rtlpci->const_hostpci_aspm_setting = 0x02; | ||
68 | |||
69 | /* | ||
70 | * In Hw/Sw Radio Off situation. | ||
71 | * 0 - Default, | ||
72 | * 1 - From ASPM setting without low Mac Pwr, | ||
73 | * 2 - From ASPM setting with low Mac Pwr, | ||
74 | * 3 - Bus D3 | ||
75 | * set default to RTL8192CE:0 RTL8192SE:2 | ||
76 | */ | ||
77 | rtlpci->const_hwsw_rfoff_d3 = 0; | ||
78 | |||
79 | /* | ||
80 | * This setting works for those device with | ||
81 | * backdoor ASPM setting such as EPHY setting. | ||
82 | * 0 - Not support ASPM, | ||
83 | * 1 - Support ASPM, | ||
84 | * 2 - According to chipset. | ||
85 | */ | ||
86 | rtlpci->const_support_pciaspm = 1; | ||
87 | } | ||
88 | |||
45 | int rtl92c_init_sw_vars(struct ieee80211_hw *hw) | 89 | int rtl92c_init_sw_vars(struct ieee80211_hw *hw) |
46 | { | 90 | { |
91 | int err; | ||
47 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 92 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
48 | struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); | 93 | struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); |
94 | const struct firmware *firmware; | ||
95 | |||
96 | rtl8192ce_bt_reg_init(hw); | ||
49 | 97 | ||
50 | rtlpriv->dm.dm_initialgain_enable = 1; | 98 | rtlpriv->dm.dm_initialgain_enable = 1; |
51 | rtlpriv->dm.dm_flag = 0; | 99 | rtlpriv->dm.dm_flag = 0; |
@@ -53,7 +101,12 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw) | |||
53 | rtlpriv->dm.thermalvalue = 0; | 101 | rtlpriv->dm.thermalvalue = 0; |
54 | rtlpci->transmit_config = CFENDFORM | BIT(12) | BIT(13); | 102 | rtlpci->transmit_config = CFENDFORM | BIT(12) | BIT(13); |
55 | 103 | ||
56 | rtlpci->receive_config = (RCR_APP_FCS | | 104 | /* compatible 5G band 88ce just 2.4G band & smsp */ |
105 | rtlpriv->rtlhal.current_bandtype = BAND_ON_2_4G; | ||
106 | rtlpriv->rtlhal.bandset = BAND_ON_2_4G; | ||
107 | rtlpriv->rtlhal.macphymode = SINGLEMAC_SINGLEPHY; | ||
108 | |||
109 | rtlpci->receive_config = (RCR_APPFCS | | ||
57 | RCR_AMF | | 110 | RCR_AMF | |
58 | RCR_ADF | | 111 | RCR_ADF | |
59 | RCR_APP_MIC | | 112 | RCR_APP_MIC | |
@@ -76,13 +129,49 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw) | |||
76 | 129 | ||
77 | rtlpci->irq_mask[1] = (u32) (IMR_CPWM | IMR_C2HCMD | 0); | 130 | rtlpci->irq_mask[1] = (u32) (IMR_CPWM | IMR_C2HCMD | 0); |
78 | 131 | ||
79 | rtlpriv->rtlhal.pfirmware = (u8 *) vmalloc(0x4000); | 132 | /* for LPS & IPS */ |
133 | rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps; | ||
134 | rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps; | ||
135 | rtlpriv->psc.fwctrl_lps = rtlpriv->cfg->mod_params->fwctrl_lps; | ||
136 | rtlpriv->psc.reg_fwctrl_lps = 3; | ||
137 | rtlpriv->psc.reg_max_lps_awakeintvl = 5; | ||
138 | /* for ASPM, you can close aspm through | ||
139 | * set const_support_pciaspm = 0 */ | ||
140 | rtl92c_init_aspm_vars(hw); | ||
141 | |||
142 | if (rtlpriv->psc.reg_fwctrl_lps == 1) | ||
143 | rtlpriv->psc.fwctrl_psmode = FW_PS_MIN_MODE; | ||
144 | else if (rtlpriv->psc.reg_fwctrl_lps == 2) | ||
145 | rtlpriv->psc.fwctrl_psmode = FW_PS_MAX_MODE; | ||
146 | else if (rtlpriv->psc.reg_fwctrl_lps == 3) | ||
147 | rtlpriv->psc.fwctrl_psmode = FW_PS_DTIM_MODE; | ||
148 | |||
149 | /* for firmware buf */ | ||
150 | rtlpriv->rtlhal.pfirmware = vzalloc(0x4000); | ||
80 | if (!rtlpriv->rtlhal.pfirmware) { | 151 | if (!rtlpriv->rtlhal.pfirmware) { |
81 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, | 152 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, |
82 | ("Can't alloc buffer for fw.\n")); | 153 | ("Can't alloc buffer for fw.\n")); |
83 | return 1; | 154 | return 1; |
84 | } | 155 | } |
85 | 156 | ||
157 | /* request fw */ | ||
158 | err = request_firmware(&firmware, rtlpriv->cfg->fw_name, | ||
159 | rtlpriv->io.dev); | ||
160 | if (err) { | ||
161 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, | ||
162 | ("Failed to request firmware!\n")); | ||
163 | return 1; | ||
164 | } | ||
165 | if (firmware->size > 0x4000) { | ||
166 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, | ||
167 | ("Firmware is too big!\n")); | ||
168 | release_firmware(firmware); | ||
169 | return 1; | ||
170 | } | ||
171 | memcpy(rtlpriv->rtlhal.pfirmware, firmware->data, firmware->size); | ||
172 | rtlpriv->rtlhal.fwsize = firmware->size; | ||
173 | release_firmware(firmware); | ||
174 | |||
86 | return 0; | 175 | return 0; |
87 | } | 176 | } |
88 | 177 | ||
@@ -96,28 +185,28 @@ void rtl92c_deinit_sw_vars(struct ieee80211_hw *hw) | |||
96 | } | 185 | } |
97 | } | 186 | } |
98 | 187 | ||
99 | static struct rtl_hal_ops rtl8192ce_hal_ops = { | 188 | struct rtl_hal_ops rtl8192ce_hal_ops = { |
100 | .init_sw_vars = rtl92c_init_sw_vars, | 189 | .init_sw_vars = rtl92c_init_sw_vars, |
101 | .deinit_sw_vars = rtl92c_deinit_sw_vars, | 190 | .deinit_sw_vars = rtl92c_deinit_sw_vars, |
102 | .read_eeprom_info = rtl92ce_read_eeprom_info, | 191 | .read_eeprom_info = rtl92ce_read_eeprom_info, |
103 | .interrupt_recognized = rtl92ce_interrupt_recognized, | 192 | .interrupt_recognized = rtl92ce_interrupt_recognized, |
104 | .hw_init = rtl92ce_hw_init, | 193 | .hw_init = rtl92ce_hw_init, |
105 | .hw_disable = rtl92ce_card_disable, | 194 | .hw_disable = rtl92ce_card_disable, |
195 | .hw_suspend = rtl92ce_suspend, | ||
196 | .hw_resume = rtl92ce_resume, | ||
106 | .enable_interrupt = rtl92ce_enable_interrupt, | 197 | .enable_interrupt = rtl92ce_enable_interrupt, |
107 | .disable_interrupt = rtl92ce_disable_interrupt, | 198 | .disable_interrupt = rtl92ce_disable_interrupt, |
108 | .set_network_type = rtl92ce_set_network_type, | 199 | .set_network_type = rtl92ce_set_network_type, |
200 | .set_chk_bssid = rtl92ce_set_check_bssid, | ||
109 | .set_qos = rtl92ce_set_qos, | 201 | .set_qos = rtl92ce_set_qos, |
110 | .set_bcn_reg = rtl92ce_set_beacon_related_registers, | 202 | .set_bcn_reg = rtl92ce_set_beacon_related_registers, |
111 | .set_bcn_intv = rtl92ce_set_beacon_interval, | 203 | .set_bcn_intv = rtl92ce_set_beacon_interval, |
112 | .update_interrupt_mask = rtl92ce_update_interrupt_mask, | 204 | .update_interrupt_mask = rtl92ce_update_interrupt_mask, |
113 | .get_hw_reg = rtl92ce_get_hw_reg, | 205 | .get_hw_reg = rtl92ce_get_hw_reg, |
114 | .set_hw_reg = rtl92ce_set_hw_reg, | 206 | .set_hw_reg = rtl92ce_set_hw_reg, |
115 | #if 0 /* temporary */ | 207 | .update_rate_tbl = rtl92ce_update_hal_rate_tbl, |
116 | .update_rate_table = rtl92ce_update_hal_rate_table, | ||
117 | .update_rate_mask = rtl92ce_update_hal_rate_mask, | ||
118 | .fill_tx_desc = rtl92ce_tx_fill_desc, | 208 | .fill_tx_desc = rtl92ce_tx_fill_desc, |
119 | .fill_tx_cmddesc = rtl92ce_tx_fill_cmddesc, | 209 | .fill_tx_cmddesc = rtl92ce_tx_fill_cmddesc, |
120 | #endif | ||
121 | .query_rx_desc = rtl92ce_rx_query_desc, | 210 | .query_rx_desc = rtl92ce_rx_query_desc, |
122 | .set_channel_access = rtl92ce_update_channel_access_setting, | 211 | .set_channel_access = rtl92ce_update_channel_access_setting, |
123 | .radio_onoff_checking = rtl92ce_gpio_radio_on_off_checking, | 212 | .radio_onoff_checking = rtl92ce_gpio_radio_on_off_checking, |
@@ -125,7 +214,8 @@ static struct rtl_hal_ops rtl8192ce_hal_ops = { | |||
125 | .switch_channel = rtl92c_phy_sw_chnl, | 214 | .switch_channel = rtl92c_phy_sw_chnl, |
126 | .dm_watchdog = rtl92c_dm_watchdog, | 215 | .dm_watchdog = rtl92c_dm_watchdog, |
127 | .scan_operation_backup = rtl92c_phy_scan_operation_backup, | 216 | .scan_operation_backup = rtl92c_phy_scan_operation_backup, |
128 | .set_rf_power_state = rtl92ce_phy_set_rf_power_state, | 217 | #if 0 /* temporary */ |
218 | .set_rf_power_state = rtl92c_phy_set_rf_power_state, | ||
129 | .led_control = rtl92ce_led_control, | 219 | .led_control = rtl92ce_led_control, |
130 | .set_desc = rtl92ce_set_desc, | 220 | .set_desc = rtl92ce_set_desc, |
131 | .get_desc = rtl92ce_get_desc, | 221 | .get_desc = rtl92ce_get_desc, |
@@ -135,24 +225,28 @@ static struct rtl_hal_ops rtl8192ce_hal_ops = { | |||
135 | .init_sw_leds = rtl92ce_init_sw_leds, | 225 | .init_sw_leds = rtl92ce_init_sw_leds, |
136 | .get_bbreg = rtl92c_phy_query_bb_reg, | 226 | .get_bbreg = rtl92c_phy_query_bb_reg, |
137 | .set_bbreg = rtl92c_phy_set_bb_reg, | 227 | .set_bbreg = rtl92c_phy_set_bb_reg, |
138 | .get_rfreg = rtl92ce_phy_query_rf_reg, | ||
139 | .set_rfreg = rtl92ce_phy_set_rf_reg, | 228 | .set_rfreg = rtl92ce_phy_set_rf_reg, |
140 | .cmd_send_packet = _rtl92c_cmd_send_packet, | 229 | .get_rfreg = rtl92c_phy_query_rf_reg, |
141 | .phy_rf6052_config = rtl92ce_phy_rf6052_config, | 230 | .phy_rf6052_config = rtl92ce_phy_rf6052_config, |
142 | .phy_rf6052_set_cck_txpower = rtl92ce_phy_rf6052_set_cck_txpower, | 231 | .phy_rf6052_set_cck_txpower = rtl92ce_phy_rf6052_set_cck_txpower, |
143 | .phy_rf6052_set_ofdm_txpower = rtl92ce_phy_rf6052_set_ofdm_txpower, | 232 | .phy_rf6052_set_ofdm_txpower = rtl92ce_phy_rf6052_set_ofdm_txpower, |
144 | .config_bb_with_headerfile = _rtl92ce_phy_config_bb_with_headerfile, | 233 | .config_bb_with_headerfile = _rtl92ce_phy_config_bb_with_headerfile, |
145 | .config_bb_with_pgheaderfile = _rtl92ce_phy_config_bb_with_pgheaderfile, | 234 | .config_bb_with_pgheaderfile = _rtl92ce_phy_config_bb_with_pgheaderfile, |
146 | .phy_lc_calibrate = _rtl92ce_phy_lc_calibrate, | 235 | .phy_lc_calibrate = _rtl92ce_phy_lc_calibrate, |
147 | .phy_set_bw_mode_callback = rtl92ce_phy_set_bw_mode_callback, | ||
148 | .dm_dynamic_txpower = rtl92ce_dm_dynamic_txpower, | 236 | .dm_dynamic_txpower = rtl92ce_dm_dynamic_txpower, |
237 | #endif | ||
149 | }; | 238 | }; |
150 | 239 | ||
151 | static struct rtl_mod_params rtl92ce_mod_params = { | 240 | struct rtl_mod_params rtl92ce_mod_params = { |
152 | .sw_crypto = 0, | 241 | .sw_crypto = false, |
242 | .inactiveps = true, | ||
243 | .swctrl_lps = false, | ||
244 | .fwctrl_lps = true, | ||
153 | }; | 245 | }; |
154 | 246 | ||
155 | static struct rtl_hal_cfg rtl92ce_hal_cfg = { | 247 | struct rtl_hal_cfg rtl92ce_hal_cfg = { |
248 | .bar_id = 2, | ||
249 | .write_readback = true, | ||
156 | .name = "rtl92c_pci", | 250 | .name = "rtl92c_pci", |
157 | .fw_name = "rtlwifi/rtl8192cfw.bin", | 251 | .fw_name = "rtlwifi/rtl8192cfw.bin", |
158 | .ops = &rtl8192ce_hal_ops, | 252 | .ops = &rtl8192ce_hal_ops, |
@@ -176,6 +270,8 @@ static struct rtl_hal_cfg rtl92ce_hal_cfg = { | |||
176 | .maps[EFUSE_LOADER_CLK_EN] = LOADER_CLK_EN, | 270 | .maps[EFUSE_LOADER_CLK_EN] = LOADER_CLK_EN, |
177 | .maps[EFUSE_ANA8M] = EFUSE_ANA8M, | 271 | .maps[EFUSE_ANA8M] = EFUSE_ANA8M, |
178 | .maps[EFUSE_HWSET_MAX_SIZE] = HWSET_MAX_SIZE, | 272 | .maps[EFUSE_HWSET_MAX_SIZE] = HWSET_MAX_SIZE, |
273 | .maps[EFUSE_MAX_SECTION_MAP] = EFUSE_MAX_SECTION, | ||
274 | .maps[EFUSE_REAL_CONTENT_SIZE] = EFUSE_REAL_CONTENT_LEN, | ||
179 | 275 | ||
180 | .maps[RWCAM] = REG_CAMCMD, | 276 | .maps[RWCAM] = REG_CAMCMD, |
181 | .maps[WCAMI] = REG_CAMWRITE, | 277 | .maps[WCAMI] = REG_CAMWRITE, |
@@ -240,7 +336,7 @@ static struct rtl_hal_cfg rtl92ce_hal_cfg = { | |||
240 | .maps[RTL_RC_HT_RATEMCS15] = DESC92C_RATEMCS15, | 336 | .maps[RTL_RC_HT_RATEMCS15] = DESC92C_RATEMCS15, |
241 | }; | 337 | }; |
242 | 338 | ||
243 | static struct pci_device_id rtl92ce_pci_ids[] __devinitdata = { | 339 | DEFINE_PCI_DEVICE_TABLE(rtl92ce_pci_ids) = { |
244 | {RTL_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8191, rtl92ce_hal_cfg)}, | 340 | {RTL_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8191, rtl92ce_hal_cfg)}, |
245 | {RTL_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8178, rtl92ce_hal_cfg)}, | 341 | {RTL_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8178, rtl92ce_hal_cfg)}, |
246 | {RTL_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8177, rtl92ce_hal_cfg)}, | 342 | {RTL_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8177, rtl92ce_hal_cfg)}, |
@@ -258,7 +354,13 @@ MODULE_DESCRIPTION("Realtek 8192C/8188C 802.11n PCI wireless"); | |||
258 | MODULE_FIRMWARE("rtlwifi/rtl8192cfw.bin"); | 354 | MODULE_FIRMWARE("rtlwifi/rtl8192cfw.bin"); |
259 | 355 | ||
260 | module_param_named(swenc, rtl92ce_mod_params.sw_crypto, bool, 0444); | 356 | module_param_named(swenc, rtl92ce_mod_params.sw_crypto, bool, 0444); |
357 | module_param_named(ips, rtl92ce_mod_params.inactiveps, bool, 0444); | ||
358 | module_param_named(swlps, rtl92ce_mod_params.swctrl_lps, bool, 0444); | ||
359 | module_param_named(fwlps, rtl92ce_mod_params.fwctrl_lps, bool, 0444); | ||
261 | MODULE_PARM_DESC(swenc, "using hardware crypto (default 0 [hardware])\n"); | 360 | MODULE_PARM_DESC(swenc, "using hardware crypto (default 0 [hardware])\n"); |
361 | MODULE_PARM_DESC(ips, "using no link power save (default 1 is open)\n"); | ||
362 | MODULE_PARM_DESC(fwlps, "using linked fw control power save " | ||
363 | "(default 1 is open)\n"); | ||
262 | 364 | ||
263 | static struct pci_driver rtl92ce_driver = { | 365 | static struct pci_driver rtl92ce_driver = { |
264 | .name = KBUILD_MODNAME, | 366 | .name = KBUILD_MODNAME, |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/sw.h b/drivers/net/wireless/rtlwifi/rtl8192ce/sw.h index 36e657668c1..b7dc3263e43 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/sw.h +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/sw.h | |||
@@ -33,19 +33,9 @@ | |||
33 | int rtl92c_init_sw_vars(struct ieee80211_hw *hw); | 33 | int rtl92c_init_sw_vars(struct ieee80211_hw *hw); |
34 | void rtl92c_deinit_sw_vars(struct ieee80211_hw *hw); | 34 | void rtl92c_deinit_sw_vars(struct ieee80211_hw *hw); |
35 | void rtl92c_init_var_map(struct ieee80211_hw *hw); | 35 | void rtl92c_init_var_map(struct ieee80211_hw *hw); |
36 | bool _rtl92c_cmd_send_packet(struct ieee80211_hw *hw, | ||
37 | struct sk_buff *skb); | ||
38 | void rtl92ce_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw, | ||
39 | u8 *ppowerlevel); | ||
40 | void rtl92ce_phy_rf6052_set_ofdm_txpower(struct ieee80211_hw *hw, | ||
41 | u8 *ppowerlevel, u8 channel); | ||
42 | bool _rtl92ce_phy_config_bb_with_headerfile(struct ieee80211_hw *hw, | 36 | bool _rtl92ce_phy_config_bb_with_headerfile(struct ieee80211_hw *hw, |
43 | u8 configtype); | 37 | u8 configtype); |
44 | bool _rtl92ce_phy_config_bb_with_pgheaderfile(struct ieee80211_hw *hw, | 38 | bool _rtl92ce_phy_config_bb_with_pgheaderfile(struct ieee80211_hw *hw, |
45 | u8 configtype); | 39 | u8 configtype); |
46 | void _rtl92ce_phy_lc_calibrate(struct ieee80211_hw *hw, bool is2t); | ||
47 | u32 rtl92ce_phy_query_rf_reg(struct ieee80211_hw *hw, | ||
48 | enum radio_path rfpath, u32 regaddr, u32 bitmask); | ||
49 | void rtl92ce_phy_set_bw_mode_callback(struct ieee80211_hw *hw); | ||
50 | 40 | ||
51 | #endif | 41 | #endif |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c index be2d60fb924..861f39fad3e 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c | |||
@@ -606,10 +606,12 @@ void rtl92cu_read_eeprom_info(struct ieee80211_hw *hw) | |||
606 | if (!IS_NORMAL_CHIP(rtlhal->version)) | 606 | if (!IS_NORMAL_CHIP(rtlhal->version)) |
607 | return; | 607 | return; |
608 | tmp_u1b = rtl_read_byte(rtlpriv, REG_9346CR); | 608 | tmp_u1b = rtl_read_byte(rtlpriv, REG_9346CR); |
609 | #if 0 /* temporary */ | ||
609 | rtlefuse->epromtype = (tmp_u1b & EEPROMSEL) ? | 610 | rtlefuse->epromtype = (tmp_u1b & EEPROMSEL) ? |
610 | EEPROM_93C46 : EEPROM_BOOT_EFUSE; | 611 | EEPROM_93C46 : EEPROM_BOOT_EFUSE; |
611 | RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, ("Boot from %s\n", | 612 | RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, ("Boot from %s\n", |
612 | (tmp_u1b & EEPROMSEL) ? "EERROM" : "EFUSE")); | 613 | (tmp_u1b & EEPROMSEL) ? "EERROM" : "EFUSE")); |
614 | #endif | ||
613 | rtlefuse->autoload_failflag = (tmp_u1b & EEPROM_EN) ? false : true; | 615 | rtlefuse->autoload_failflag = (tmp_u1b & EEPROM_EN) ? false : true; |
614 | RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, ("Autoload %s\n", | 616 | RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, ("Autoload %s\n", |
615 | (tmp_u1b & EEPROM_EN) ? "OK!!" : "ERR!!")); | 617 | (tmp_u1b & EEPROM_EN) ? "OK!!" : "ERR!!")); |