aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChaoming_Li <chaoming_li@realsil.com.cn>2011-04-25 13:53:55 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-04-26 16:14:55 -0400
commit2b8359f85b81dfe02a631e570582290859191756 (patch)
treeee324109e93e8a6f42c8cb3cd5d8e5609a7624b6
parentf73b279cdb5fc850b4be355307905f2914b2c0bb (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>
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c12
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/dm.c2
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/dm.h1
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/led.c5
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/led.h2
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/reg.h58
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/sw.c132
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/sw.h14
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/hw.c2
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 2836d7eb0d05..bfc84054cc07 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
321static void rtl92c_dm_initial_gain_multi_sta(struct ieee80211_hw *hw) 321static 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}
1514EXPORT_SYMBOL(rtl92c_dm_watchdog); 1514EXPORT_SYMBOL(rtl92c_dm_watchdog);
1515 1515
1516static u8 rtl92c_bt_rssi_state_change(struct ieee80211_hw *hw) 1516u8 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}
1573EXPORT_SYMBOL(rtl92c_bt_rssi_state_change);
1573 1574
1574static bool rtl92c_bt_state_change(struct ieee80211_hw *hw) 1575static 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}
1824EXPORT_SYMBOL(rtl92c_dm_bt_coexist);
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/dm.c b/drivers/net/wireless/rtlwifi/rtl8192ce/dm.c
index 7d76504df4d1..2df33e53e15a 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
37void rtl92ce_dm_dynamic_txpower(struct ieee80211_hw *hw) 39void 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 36302ebae4a3..07dd9552e82f 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);
192void rtl92c_dm_check_txpower_tracking(struct ieee80211_hw *hw); 192void rtl92c_dm_check_txpower_tracking(struct ieee80211_hw *hw);
193void rtl92c_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw); 193void rtl92c_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw);
194void rtl92c_dm_rf_saving(struct ieee80211_hw *hw, u8 bforce_in_normal); 194void rtl92c_dm_rf_saving(struct ieee80211_hw *hw, u8 bforce_in_normal);
195void rtl92c_dm_bt_coexist(struct ieee80211_hw *hw);
195void rtl92ce_dm_dynamic_txpower(struct ieee80211_hw *hw); 196void 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 d21b934b5c33..9dd1ed7b6422 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)
106void rtl92ce_init_sw_leds(struct ieee80211_hw *hw) 106void 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
114void _rtl92ce_sw_led_control(struct ieee80211_hw *hw, 113static 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 94332b3af5b1..7dfccea2095b 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);
34void rtl92ce_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled); 34void rtl92ce_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled);
35void rtl92ce_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled); 35void rtl92ce_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled);
36void rtl92ce_led_control(struct ieee80211_hw *hw, enum led_ctl_mode ledaction); 36void rtl92ce_led_control(struct ieee80211_hw *hw, enum led_ctl_mode ledaction);
37void _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 b0868a613841..115b3f841ddc 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 0042e0ee89a8..5c920c6270c8 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
45void 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
45int rtl92c_init_sw_vars(struct ieee80211_hw *hw) 89int 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
99static struct rtl_hal_ops rtl8192ce_hal_ops = { 188struct 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
151static struct rtl_mod_params rtl92ce_mod_params = { 240struct 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
155static struct rtl_hal_cfg rtl92ce_hal_cfg = { 247struct 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
243static struct pci_device_id rtl92ce_pci_ids[] __devinitdata = { 339DEFINE_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");
258MODULE_FIRMWARE("rtlwifi/rtl8192cfw.bin"); 354MODULE_FIRMWARE("rtlwifi/rtl8192cfw.bin");
259 355
260module_param_named(swenc, rtl92ce_mod_params.sw_crypto, bool, 0444); 356module_param_named(swenc, rtl92ce_mod_params.sw_crypto, bool, 0444);
357module_param_named(ips, rtl92ce_mod_params.inactiveps, bool, 0444);
358module_param_named(swlps, rtl92ce_mod_params.swctrl_lps, bool, 0444);
359module_param_named(fwlps, rtl92ce_mod_params.fwctrl_lps, bool, 0444);
261MODULE_PARM_DESC(swenc, "using hardware crypto (default 0 [hardware])\n"); 360MODULE_PARM_DESC(swenc, "using hardware crypto (default 0 [hardware])\n");
361MODULE_PARM_DESC(ips, "using no link power save (default 1 is open)\n");
362MODULE_PARM_DESC(fwlps, "using linked fw control power save "
363 "(default 1 is open)\n");
262 364
263static struct pci_driver rtl92ce_driver = { 365static 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 36e657668c1e..b7dc3263e433 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192ce/sw.h
+++ b/drivers/net/wireless/rtlwifi/rtl8192ce/sw.h
@@ -33,19 +33,9 @@
33int rtl92c_init_sw_vars(struct ieee80211_hw *hw); 33int rtl92c_init_sw_vars(struct ieee80211_hw *hw);
34void rtl92c_deinit_sw_vars(struct ieee80211_hw *hw); 34void rtl92c_deinit_sw_vars(struct ieee80211_hw *hw);
35void rtl92c_init_var_map(struct ieee80211_hw *hw); 35void rtl92c_init_var_map(struct ieee80211_hw *hw);
36bool _rtl92c_cmd_send_packet(struct ieee80211_hw *hw,
37 struct sk_buff *skb);
38void rtl92ce_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
39 u8 *ppowerlevel);
40void rtl92ce_phy_rf6052_set_ofdm_txpower(struct ieee80211_hw *hw,
41 u8 *ppowerlevel, u8 channel);
42bool _rtl92ce_phy_config_bb_with_headerfile(struct ieee80211_hw *hw, 36bool _rtl92ce_phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
43 u8 configtype); 37 u8 configtype);
44bool _rtl92ce_phy_config_bb_with_pgheaderfile(struct ieee80211_hw *hw, 38bool _rtl92ce_phy_config_bb_with_pgheaderfile(struct ieee80211_hw *hw,
45 u8 configtype); 39 u8 configtype);
46void _rtl92ce_phy_lc_calibrate(struct ieee80211_hw *hw, bool is2t);
47u32 rtl92ce_phy_query_rf_reg(struct ieee80211_hw *hw,
48 enum radio_path rfpath, u32 regaddr, u32 bitmask);
49void 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 be2d60fb9248..861f39fad3ec 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!!"));