diff options
Diffstat (limited to 'drivers/net/wireless/rtlwifi')
-rw-r--r-- | drivers/net/wireless/rtlwifi/base.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/debug.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/pci.c | 19 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/pci.h | 4 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/def.h | 14 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/sw.c | 35 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192cu/def.h | 4 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192cu/sw.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192de/def.h | 135 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192de/hw.c | 15 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192de/sw.c | 21 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192se/hw.c | 22 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192se/reg.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192se/sw.c | 22 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192se/trx.c | 55 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/wifi.h | 5 |
16 files changed, 233 insertions, 138 deletions
diff --git a/drivers/net/wireless/rtlwifi/base.c b/drivers/net/wireless/rtlwifi/base.c index 098fc557a88d..d4fdd2a5a739 100644 --- a/drivers/net/wireless/rtlwifi/base.c +++ b/drivers/net/wireless/rtlwifi/base.c | |||
@@ -311,6 +311,8 @@ static void _rtl_init_mac80211(struct ieee80211_hw *hw) | |||
311 | IEEE80211_HW_RX_INCLUDES_FCS | | 311 | IEEE80211_HW_RX_INCLUDES_FCS | |
312 | IEEE80211_HW_BEACON_FILTER | | 312 | IEEE80211_HW_BEACON_FILTER | |
313 | IEEE80211_HW_AMPDU_AGGREGATION | | 313 | IEEE80211_HW_AMPDU_AGGREGATION | |
314 | IEEE80211_HW_CONNECTION_MONITOR | | ||
315 | /* IEEE80211_HW_SUPPORTS_CQM_RSSI | */ | ||
314 | IEEE80211_HW_REPORTS_TX_ACK_STATUS | 0; | 316 | IEEE80211_HW_REPORTS_TX_ACK_STATUS | 0; |
315 | 317 | ||
316 | /* swlps or hwlps has been set in diff chip in init_sw_vars */ | 318 | /* swlps or hwlps has been set in diff chip in init_sw_vars */ |
@@ -850,7 +852,7 @@ void rtl_get_tcb_desc(struct ieee80211_hw *hw, | |||
850 | *So tcb_desc->hw_rate is just used for | 852 | *So tcb_desc->hw_rate is just used for |
851 | *special data and mgt frames | 853 | *special data and mgt frames |
852 | */ | 854 | */ |
853 | if (info->control.rates[0].idx == 0 && | 855 | if (info->control.rates[0].idx == 0 || |
854 | ieee80211_is_nullfunc(fc)) { | 856 | ieee80211_is_nullfunc(fc)) { |
855 | tcb_desc->use_driver_rate = true; | 857 | tcb_desc->use_driver_rate = true; |
856 | tcb_desc->ratr_index = RATR_INX_WIRELESS_MC; | 858 | tcb_desc->ratr_index = RATR_INX_WIRELESS_MC; |
@@ -1138,7 +1140,7 @@ void rtl_watchdog_wq_callback(void *data) | |||
1138 | } | 1140 | } |
1139 | 1141 | ||
1140 | /* | 1142 | /* |
1141 | *<3> to check if traffic busy, if | 1143 | *<2> to check if traffic busy, if |
1142 | * busytraffic we don't change channel | 1144 | * busytraffic we don't change channel |
1143 | */ | 1145 | */ |
1144 | if (mac->link_state >= MAC80211_LINKED) { | 1146 | if (mac->link_state >= MAC80211_LINKED) { |
diff --git a/drivers/net/wireless/rtlwifi/debug.c b/drivers/net/wireless/rtlwifi/debug.c index b2f897acb238..1b5cb7153a52 100644 --- a/drivers/net/wireless/rtlwifi/debug.c +++ b/drivers/net/wireless/rtlwifi/debug.c | |||
@@ -28,17 +28,11 @@ | |||
28 | 28 | ||
29 | #include "wifi.h" | 29 | #include "wifi.h" |
30 | 30 | ||
31 | static unsigned int debug = DBG_EMERG; | ||
32 | module_param(debug, uint, 0); | ||
33 | MODULE_PARM_DESC(debug, "Set global debug level for rtlwifi (0,2-5)"); | ||
34 | |||
35 | void rtl_dbgp_flag_init(struct ieee80211_hw *hw) | 31 | void rtl_dbgp_flag_init(struct ieee80211_hw *hw) |
36 | { | 32 | { |
37 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 33 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
38 | u8 i; | 34 | u8 i; |
39 | 35 | ||
40 | rtlpriv->dbg.global_debuglevel = debug; | ||
41 | |||
42 | rtlpriv->dbg.global_debugcomponents = | 36 | rtlpriv->dbg.global_debugcomponents = |
43 | COMP_ERR | COMP_FW | COMP_INIT | COMP_RECV | COMP_SEND | | 37 | COMP_ERR | COMP_FW | COMP_INIT | COMP_RECV | COMP_SEND | |
44 | COMP_MLME | COMP_SCAN | COMP_INTR | COMP_LED | COMP_SEC | | 38 | COMP_MLME | COMP_SCAN | COMP_INTR | COMP_LED | COMP_SEC | |
diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c index 9983fa18065a..5380f3b040ac 100644 --- a/drivers/net/wireless/rtlwifi/pci.c +++ b/drivers/net/wireless/rtlwifi/pci.c | |||
@@ -1993,36 +1993,25 @@ call rtl_mac_stop() from the mac80211 | |||
1993 | suspend function first, So there is | 1993 | suspend function first, So there is |
1994 | no need to call hw_disable here. | 1994 | no need to call hw_disable here. |
1995 | ****************************************/ | 1995 | ****************************************/ |
1996 | int rtl_pci_suspend(struct pci_dev *pdev, pm_message_t state) | 1996 | int rtl_pci_suspend(struct device *dev) |
1997 | { | 1997 | { |
1998 | struct pci_dev *pdev = to_pci_dev(dev); | ||
1998 | struct ieee80211_hw *hw = pci_get_drvdata(pdev); | 1999 | struct ieee80211_hw *hw = pci_get_drvdata(pdev); |
1999 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 2000 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
2000 | 2001 | ||
2001 | rtlpriv->cfg->ops->hw_suspend(hw); | 2002 | rtlpriv->cfg->ops->hw_suspend(hw); |
2002 | rtl_deinit_rfkill(hw); | 2003 | rtl_deinit_rfkill(hw); |
2003 | 2004 | ||
2004 | pci_save_state(pdev); | ||
2005 | pci_disable_device(pdev); | ||
2006 | pci_set_power_state(pdev, PCI_D3hot); | ||
2007 | return 0; | 2005 | return 0; |
2008 | } | 2006 | } |
2009 | EXPORT_SYMBOL(rtl_pci_suspend); | 2007 | EXPORT_SYMBOL(rtl_pci_suspend); |
2010 | 2008 | ||
2011 | int rtl_pci_resume(struct pci_dev *pdev) | 2009 | int rtl_pci_resume(struct device *dev) |
2012 | { | 2010 | { |
2013 | int ret; | 2011 | struct pci_dev *pdev = to_pci_dev(dev); |
2014 | struct ieee80211_hw *hw = pci_get_drvdata(pdev); | 2012 | struct ieee80211_hw *hw = pci_get_drvdata(pdev); |
2015 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 2013 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
2016 | 2014 | ||
2017 | pci_set_power_state(pdev, PCI_D0); | ||
2018 | ret = pci_enable_device(pdev); | ||
2019 | if (ret) { | ||
2020 | RT_ASSERT(false, ("ERR: <======\n")); | ||
2021 | return ret; | ||
2022 | } | ||
2023 | |||
2024 | pci_restore_state(pdev); | ||
2025 | |||
2026 | rtlpriv->cfg->ops->hw_resume(hw); | 2015 | rtlpriv->cfg->ops->hw_resume(hw); |
2027 | rtl_init_rfkill(hw); | 2016 | rtl_init_rfkill(hw); |
2028 | return 0; | 2017 | return 0; |
diff --git a/drivers/net/wireless/rtlwifi/pci.h b/drivers/net/wireless/rtlwifi/pci.h index a24e505b202b..ebe0b42c0518 100644 --- a/drivers/net/wireless/rtlwifi/pci.h +++ b/drivers/net/wireless/rtlwifi/pci.h | |||
@@ -237,8 +237,8 @@ extern struct rtl_intf_ops rtl_pci_ops; | |||
237 | int __devinit rtl_pci_probe(struct pci_dev *pdev, | 237 | int __devinit rtl_pci_probe(struct pci_dev *pdev, |
238 | const struct pci_device_id *id); | 238 | const struct pci_device_id *id); |
239 | void rtl_pci_disconnect(struct pci_dev *pdev); | 239 | void rtl_pci_disconnect(struct pci_dev *pdev); |
240 | int rtl_pci_suspend(struct pci_dev *pdev, pm_message_t state); | 240 | int rtl_pci_suspend(struct device *dev); |
241 | int rtl_pci_resume(struct pci_dev *pdev); | 241 | int rtl_pci_resume(struct device *dev); |
242 | 242 | ||
243 | static inline u8 pci_read8_sync(struct rtl_priv *rtlpriv, u32 addr) | 243 | static inline u8 pci_read8_sync(struct rtl_priv *rtlpriv, u32 addr) |
244 | { | 244 | { |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/def.h b/drivers/net/wireless/rtlwifi/rtl8192ce/def.h index 11f43196e61d..9fc804d89d65 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/def.h +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/def.h | |||
@@ -142,8 +142,22 @@ enum version_8192c { | |||
142 | VERSION_UNKNOWN = 0x88, | 142 | VERSION_UNKNOWN = 0x88, |
143 | }; | 143 | }; |
144 | 144 | ||
145 | #define CUT_VERSION_MASK (BIT(6)|BIT(7)) | ||
146 | #define CHIP_VENDOR_UMC BIT(5) | ||
147 | #define CHIP_VENDOR_UMC_B_CUT BIT(6) /* Chip version for ECO */ | ||
148 | #define IS_VENDOR_UMC_A_CUT(version) ((IS_CHIP_VENDOR_UMC(version)) ? \ | ||
149 | ((GET_CVID_CUT_VERSION(version)) ? false : true) : false) | ||
145 | #define IS_CHIP_VER_B(version) ((version & CHIP_VER_B) ? true : false) | 150 | #define IS_CHIP_VER_B(version) ((version & CHIP_VER_B) ? true : false) |
151 | #define IS_VENDOR_UMC_A_CUT(version) ((IS_CHIP_VENDOR_UMC(version)) ? \ | ||
152 | ((GET_CVID_CUT_VERSION(version)) ? false : true) : false) | ||
146 | #define IS_92C_SERIAL(version) ((version & CHIP_92C_BITMASK) ? true : false) | 153 | #define IS_92C_SERIAL(version) ((version & CHIP_92C_BITMASK) ? true : false) |
154 | #define IS_CHIP_VENDOR_UMC(version) \ | ||
155 | ((version & CHIP_VENDOR_UMC) ? true : false) | ||
156 | #define GET_CVID_CUT_VERSION(version) ((version) & CUT_VERSION_MASK) | ||
157 | #define IS_81xxC_VENDOR_UMC_B_CUT(version) \ | ||
158 | ((IS_CHIP_VENDOR_UMC(version)) ? \ | ||
159 | ((GET_CVID_CUT_VERSION(version) == CHIP_VENDOR_UMC_B_CUT) ? \ | ||
160 | true : false) : false) | ||
147 | 161 | ||
148 | enum rtl819x_loopback_e { | 162 | enum rtl819x_loopback_e { |
149 | RTL819X_NO_LOOPBACK = 0, | 163 | RTL819X_NO_LOOPBACK = 0, |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c b/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c index b7ecb9e44aa9..a48404cc2b96 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c | |||
@@ -92,6 +92,8 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw) | |||
92 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 92 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
93 | struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); | 93 | struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); |
94 | const struct firmware *firmware; | 94 | const struct firmware *firmware; |
95 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); | ||
96 | char *fw_name = NULL; | ||
95 | 97 | ||
96 | rtl8192ce_bt_reg_init(hw); | 98 | rtl8192ce_bt_reg_init(hw); |
97 | 99 | ||
@@ -129,6 +131,8 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw) | |||
129 | 131 | ||
130 | rtlpci->irq_mask[1] = (u32) (IMR_CPWM | IMR_C2HCMD | 0); | 132 | rtlpci->irq_mask[1] = (u32) (IMR_CPWM | IMR_C2HCMD | 0); |
131 | 133 | ||
134 | /* for debug level */ | ||
135 | rtlpriv->dbg.global_debuglevel = rtlpriv->cfg->mod_params->debug; | ||
132 | /* for LPS & IPS */ | 136 | /* for LPS & IPS */ |
133 | rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps; | 137 | rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps; |
134 | rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps; | 138 | rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps; |
@@ -159,8 +163,14 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw) | |||
159 | } | 163 | } |
160 | 164 | ||
161 | /* request fw */ | 165 | /* request fw */ |
162 | err = request_firmware(&firmware, rtlpriv->cfg->fw_name, | 166 | if (IS_VENDOR_UMC_A_CUT(rtlhal->version) && |
163 | rtlpriv->io.dev); | 167 | !IS_92C_SERIAL(rtlhal->version)) |
168 | fw_name = "rtlwifi/rtl8192cfwU.bin"; | ||
169 | else if (IS_81xxC_VENDOR_UMC_B_CUT(rtlhal->version)) | ||
170 | fw_name = "rtlwifi/rtl8192cfwU_B.bin"; | ||
171 | else | ||
172 | fw_name = rtlpriv->cfg->fw_name; | ||
173 | err = request_firmware(&firmware, fw_name, rtlpriv->io.dev); | ||
164 | if (err) { | 174 | if (err) { |
165 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, | 175 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, |
166 | ("Failed to request firmware!\n")); | 176 | ("Failed to request firmware!\n")); |
@@ -245,6 +255,7 @@ static struct rtl_mod_params rtl92ce_mod_params = { | |||
245 | .inactiveps = true, | 255 | .inactiveps = true, |
246 | .swctrl_lps = false, | 256 | .swctrl_lps = false, |
247 | .fwctrl_lps = true, | 257 | .fwctrl_lps = true, |
258 | .debug = DBG_EMERG, | ||
248 | }; | 259 | }; |
249 | 260 | ||
250 | static struct rtl_hal_cfg rtl92ce_hal_cfg = { | 261 | static struct rtl_hal_cfg rtl92ce_hal_cfg = { |
@@ -355,8 +366,11 @@ MODULE_AUTHOR("Larry Finger <Larry.Finger@lwfinger.net>"); | |||
355 | MODULE_LICENSE("GPL"); | 366 | MODULE_LICENSE("GPL"); |
356 | MODULE_DESCRIPTION("Realtek 8192C/8188C 802.11n PCI wireless"); | 367 | MODULE_DESCRIPTION("Realtek 8192C/8188C 802.11n PCI wireless"); |
357 | MODULE_FIRMWARE("rtlwifi/rtl8192cfw.bin"); | 368 | MODULE_FIRMWARE("rtlwifi/rtl8192cfw.bin"); |
369 | MODULE_FIRMWARE("rtlwifi/rtl8192cfwU.bin"); | ||
370 | MODULE_FIRMWARE("rtlwifi/rtl8192cfwU_B.bin"); | ||
358 | 371 | ||
359 | module_param_named(swenc, rtl92ce_mod_params.sw_crypto, bool, 0444); | 372 | module_param_named(swenc, rtl92ce_mod_params.sw_crypto, bool, 0444); |
373 | module_param_named(debug, rtl92ce_mod_params.debug, int, 0444); | ||
360 | module_param_named(ips, rtl92ce_mod_params.inactiveps, bool, 0444); | 374 | module_param_named(ips, rtl92ce_mod_params.inactiveps, bool, 0444); |
361 | module_param_named(swlps, rtl92ce_mod_params.swctrl_lps, bool, 0444); | 375 | module_param_named(swlps, rtl92ce_mod_params.swctrl_lps, bool, 0444); |
362 | module_param_named(fwlps, rtl92ce_mod_params.fwctrl_lps, bool, 0444); | 376 | module_param_named(fwlps, rtl92ce_mod_params.fwctrl_lps, bool, 0444); |
@@ -364,18 +378,23 @@ MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n"); | |||
364 | MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n"); | 378 | MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n"); |
365 | MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n"); | 379 | MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n"); |
366 | MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n"); | 380 | MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n"); |
381 | MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)"); | ||
382 | |||
383 | static const struct dev_pm_ops rtlwifi_pm_ops = { | ||
384 | .suspend = rtl_pci_suspend, | ||
385 | .resume = rtl_pci_resume, | ||
386 | .freeze = rtl_pci_suspend, | ||
387 | .thaw = rtl_pci_resume, | ||
388 | .poweroff = rtl_pci_suspend, | ||
389 | .restore = rtl_pci_resume, | ||
390 | }; | ||
367 | 391 | ||
368 | static struct pci_driver rtl92ce_driver = { | 392 | static struct pci_driver rtl92ce_driver = { |
369 | .name = KBUILD_MODNAME, | 393 | .name = KBUILD_MODNAME, |
370 | .id_table = rtl92ce_pci_ids, | 394 | .id_table = rtl92ce_pci_ids, |
371 | .probe = rtl_pci_probe, | 395 | .probe = rtl_pci_probe, |
372 | .remove = rtl_pci_disconnect, | 396 | .remove = rtl_pci_disconnect, |
373 | 397 | .driver.pm = &rtlwifi_pm_ops, | |
374 | #ifdef CONFIG_PM | ||
375 | .suspend = rtl_pci_suspend, | ||
376 | .resume = rtl_pci_resume, | ||
377 | #endif | ||
378 | |||
379 | }; | 398 | }; |
380 | 399 | ||
381 | static int __init rtl92ce_module_init(void) | 400 | static int __init rtl92ce_module_init(void) |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/def.h b/drivers/net/wireless/rtlwifi/rtl8192cu/def.h index c54940ea72fe..d097efb1e717 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192cu/def.h +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/def.h | |||
@@ -50,10 +50,6 @@ | |||
50 | #define IS_VENDOR_UMC(version) \ | 50 | #define IS_VENDOR_UMC(version) \ |
51 | (((version) & CHIP_VENDOR_UMC) ? true : false) | 51 | (((version) & CHIP_VENDOR_UMC) ? true : false) |
52 | 52 | ||
53 | #define IS_VENDOR_UMC_A_CUT(version) \ | ||
54 | (((version) & CHIP_VENDOR_UMC) ? (((version) & (BIT(6) | BIT(7))) ? \ | ||
55 | false : true) : false) | ||
56 | |||
57 | #define IS_VENDOR_8723_A_CUT(version) \ | 53 | #define IS_VENDOR_8723_A_CUT(version) \ |
58 | (((version) & CHIP_VENDOR_UMC) ? (((version) & (BIT(6))) ? \ | 54 | (((version) & CHIP_VENDOR_UMC) ? (((version) & (BIT(6))) ? \ |
59 | false : true) : false) | 55 | false : true) : false) |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c index 424b8a0323e2..feed1ed8d9b6 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c | |||
@@ -60,6 +60,7 @@ static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw) | |||
60 | rtlpriv->dm.dm_flag = 0; | 60 | rtlpriv->dm.dm_flag = 0; |
61 | rtlpriv->dm.disable_framebursting = 0; | 61 | rtlpriv->dm.disable_framebursting = 0; |
62 | rtlpriv->dm.thermalvalue = 0; | 62 | rtlpriv->dm.thermalvalue = 0; |
63 | rtlpriv->dbg.global_debuglevel = rtlpriv->cfg->mod_params->debug; | ||
63 | rtlpriv->rtlhal.pfirmware = vmalloc(0x4000); | 64 | rtlpriv->rtlhal.pfirmware = vmalloc(0x4000); |
64 | if (!rtlpriv->rtlhal.pfirmware) { | 65 | if (!rtlpriv->rtlhal.pfirmware) { |
65 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, | 66 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, |
@@ -149,8 +150,14 @@ static struct rtl_hal_ops rtl8192cu_hal_ops = { | |||
149 | 150 | ||
150 | static struct rtl_mod_params rtl92cu_mod_params = { | 151 | static struct rtl_mod_params rtl92cu_mod_params = { |
151 | .sw_crypto = 0, | 152 | .sw_crypto = 0, |
153 | .debug = DBG_EMERG, | ||
152 | }; | 154 | }; |
153 | 155 | ||
156 | module_param_named(swenc, rtl92cu_mod_params.sw_crypto, bool, 0444); | ||
157 | module_param_named(debug, rtl92cu_mod_params.debug, int, 0444); | ||
158 | MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n"); | ||
159 | MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)"); | ||
160 | |||
154 | static struct rtl_hal_usbint_cfg rtl92cu_interface_cfg = { | 161 | static struct rtl_hal_usbint_cfg rtl92cu_interface_cfg = { |
155 | /* rx */ | 162 | /* rx */ |
156 | .in_ep_num = RTL92C_USB_BULK_IN_NUM, | 163 | .in_ep_num = RTL92C_USB_BULK_IN_NUM, |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192de/def.h b/drivers/net/wireless/rtlwifi/rtl8192de/def.h index aff7e19714ff..946304771748 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192de/def.h +++ b/drivers/net/wireless/rtlwifi/rtl8192de/def.h | |||
@@ -122,59 +122,98 @@ | |||
122 | #define GET_C2H_CMD_FEEDBACK_CCX_SEQ(__pcmdfbhdr) \ | 122 | #define GET_C2H_CMD_FEEDBACK_CCX_SEQ(__pcmdfbhdr) \ |
123 | LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 20, 12) | 123 | LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 20, 12) |
124 | 124 | ||
125 | /* | 125 | enum version_8192d { |
126 | * 92D chip ver: | 126 | VERSION_TEST_CHIP_88C = 0x0000, |
127 | * BIT8: IS 92D | 127 | VERSION_TEST_CHIP_92C = 0x0020, |
128 | * BIT9: single phy | 128 | VERSION_TEST_UMC_CHIP_8723 = 0x0081, |
129 | * BIT10: C-cut | 129 | VERSION_NORMAL_TSMC_CHIP_88C = 0x0008, |
130 | * BIT11: D-cut | 130 | VERSION_NORMAL_TSMC_CHIP_92C = 0x0028, |
131 | */ | 131 | VERSION_NORMAL_TSMC_CHIP_92C_1T2R = 0x0018, |
132 | 132 | VERSION_NORMAL_UMC_CHIP_88C_A_CUT = 0x0088, | |
133 | /* Chip specific */ | 133 | VERSION_NORMAL_UMC_CHIP_92C_A_CUT = 0x00a8, |
134 | #define CHIP_92C BIT(0) | 134 | VERSION_NORMAL_UMC_CHIP_92C_1T2R_A_CUT = 0x0098, |
135 | #define CHIP_92C_1T2R BIT(1) | 135 | VERSION_NORMAL_UMC_CHIP_8723_1T1R_A_CUT = 0x0089, |
136 | #define CHIP_8723 BIT(2) /* RTL8723 With BT feature */ | 136 | VERSION_NORMAL_UMC_CHIP_8723_1T1R_B_CUT = 0x1089, |
137 | #define CHIP_8723_DRV_REV BIT(3) /* RTL8723 Driver Revised */ | 137 | VERSION_NORMAL_UMC_CHIP_88C_B_CUT = 0x1088, |
138 | #define NORMAL_CHIP BIT(4) | 138 | VERSION_NORMAL_UMC_CHIP_92C_B_CUT = 0x10a8, |
139 | #define CHIP_VENDOR_UMC BIT(5) | 139 | VERSION_NORMAL_UMC_CHIP_92C_1T2R_B_CUT = 0x1090, |
140 | #define CHIP_VENDOR_UMC_B_CUT BIT(6) /* Chip version for ECO */ | 140 | VERSION_TEST_CHIP_92D_SINGLEPHY = 0x0022, |
141 | VERSION_TEST_CHIP_92D_DUALPHY = 0x0002, | ||
142 | VERSION_NORMAL_CHIP_92D_SINGLEPHY = 0x002a, | ||
143 | VERSION_NORMAL_CHIP_92D_DUALPHY = 0x000a, | ||
144 | VERSION_NORMAL_CHIP_92D_C_CUT_SINGLEPHY = 0x202a, | ||
145 | VERSION_NORMAL_CHIP_92D_C_CUT_DUALPHY = 0x200a, | ||
146 | VERSION_NORMAL_CHIP_92D_D_CUT_SINGLEPHY = 0x302a, | ||
147 | VERSION_NORMAL_CHIP_92D_D_CUT_DUALPHY = 0x300a, | ||
148 | VERSION_NORMAL_CHIP_92D_E_CUT_SINGLEPHY = 0x402a, | ||
149 | VERSION_NORMAL_CHIP_92D_E_CUT_DUALPHY = 0x400a, | ||
150 | }; | ||
141 | 151 | ||
142 | /* for 92D */ | 152 | /* for 92D */ |
143 | #define CHIP_92D BIT(8) | ||
144 | #define CHIP_92D_SINGLEPHY BIT(9) | 153 | #define CHIP_92D_SINGLEPHY BIT(9) |
145 | #define CHIP_92D_C_CUT BIT(10) | 154 | #define C_CUT_VERSION BIT(13) |
146 | #define CHIP_92D_D_CUT BIT(11) | 155 | #define D_CUT_VERSION ((BIT(12)|BIT(13))) |
156 | #define E_CUT_VERSION BIT(14) | ||
157 | |||
158 | /* Chip specific */ | ||
159 | #define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3) | ||
160 | #define CHIP_BONDING_92C_1T2R 0x1 | ||
161 | #define CHIP_BONDING_88C_USB_MCARD 0x2 | ||
162 | #define CHIP_BONDING_88C_USB_HP 0x1 | ||
163 | |||
164 | /* [15:12] IC version(CUT): A-cut=0, B-cut=1, C-cut=2, D-cut=3 */ | ||
165 | /* [7] Manufacturer: TSMC=0, UMC=1 */ | ||
166 | /* [6:4] RF type: 1T1R=0, 1T2R=1, 2T2R=2 */ | ||
167 | /* [3] Chip type: TEST=0, NORMAL=1 */ | ||
168 | /* [2:0] IC type: 81xxC=0, 8723=1, 92D=2 */ | ||
169 | #define CHIP_8723 BIT(0) | ||
170 | #define CHIP_92D BIT(1) | ||
171 | #define NORMAL_CHIP BIT(3) | ||
172 | #define RF_TYPE_1T1R (~(BIT(4)|BIT(5)|BIT(6))) | ||
173 | #define RF_TYPE_1T2R BIT(4) | ||
174 | #define RF_TYPE_2T2R BIT(5) | ||
175 | #define CHIP_VENDOR_UMC BIT(7) | ||
176 | #define B_CUT_VERSION BIT(12) | ||
177 | |||
178 | /* MASK */ | ||
179 | #define IC_TYPE_MASK (BIT(0)|BIT(1)|BIT(2)) | ||
180 | #define CHIP_TYPE_MASK BIT(3) | ||
181 | #define RF_TYPE_MASK (BIT(4)|BIT(5)|BIT(6)) | ||
182 | #define MANUFACTUER_MASK BIT(7) | ||
183 | #define ROM_VERSION_MASK (BIT(11)|BIT(10)|BIT(9)|BIT(8)) | ||
184 | #define CUT_VERSION_MASK (BIT(15)|BIT(14)|BIT(13)|BIT(12)) | ||
147 | 185 | ||
148 | enum version_8192d { | ||
149 | VERSION_TEST_CHIP_88C = 0x00, | ||
150 | VERSION_TEST_CHIP_92C = 0x01, | ||
151 | VERSION_NORMAL_TSMC_CHIP_88C = 0x10, | ||
152 | VERSION_NORMAL_TSMC_CHIP_92C = 0x11, | ||
153 | VERSION_NORMAL_TSMC_CHIP_92C_1T2R = 0x13, | ||
154 | VERSION_NORMAL_UMC_CHIP_88C_A_CUT = 0x30, | ||
155 | VERSION_NORMAL_UMC_CHIP_92C_A_CUT = 0x31, | ||
156 | VERSION_NORMAL_UMC_CHIP_92C_1T2R_A_CUT = 0x33, | ||
157 | VERSION_NORMA_UMC_CHIP_8723_1T1R_A_CUT = 0x34, | ||
158 | VERSION_NORMA_UMC_CHIP_8723_1T1R_B_CUT = 0x3c, | ||
159 | VERSION_NORMAL_UMC_CHIP_88C_B_CUT = 0x70, | ||
160 | VERSION_NORMAL_UMC_CHIP_92C_B_CUT = 0x71, | ||
161 | VERSION_NORMAL_UMC_CHIP_92C_1T2R_B_CUT = 0x73, | ||
162 | VERSION_TEST_CHIP_92D_SINGLEPHY = 0x300, | ||
163 | VERSION_TEST_CHIP_92D_DUALPHY = 0x100, | ||
164 | VERSION_NORMAL_CHIP_92D_SINGLEPHY = 0x310, | ||
165 | VERSION_NORMAL_CHIP_92D_DUALPHY = 0x110, | ||
166 | VERSION_NORMAL_CHIP_92D_C_CUT_SINGLEPHY = 0x710, | ||
167 | VERSION_NORMAL_CHIP_92D_C_CUT_DUALPHY = 0x510, | ||
168 | VERSION_NORMAL_CHIP_92D_D_CUT_SINGLEPHY = 0xB10, | ||
169 | VERSION_NORMAL_CHIP_92D_D_CUT_DUALPHY = 0x910, | ||
170 | }; | ||
171 | 186 | ||
172 | #define IS_92D_SINGLEPHY(version) \ | 187 | /* Get element */ |
173 | ((version & CHIP_92D_SINGLEPHY) ? true : false) | 188 | #define GET_CVID_IC_TYPE(version) ((version) & IC_TYPE_MASK) |
174 | #define IS_92D_C_CUT(version) \ | 189 | #define GET_CVID_CHIP_TYPE(version) ((version) & CHIP_TYPE_MASK) |
175 | ((version & CHIP_92D_C_CUT) ? true : false) | 190 | #define GET_CVID_RF_TYPE(version) ((version) & RF_TYPE_MASK) |
176 | #define IS_92D_D_CUT(version) \ | 191 | #define GET_CVID_MANUFACTUER(version) ((version) & MANUFACTUER_MASK) |
177 | ((version & CHIP_92D_D_CUT) ? true : false) | 192 | #define GET_CVID_ROM_VERSION(version) ((version) & ROM_VERSION_MASK) |
193 | #define GET_CVID_CUT_VERSION(version) ((version) & CUT_VERSION_MASK) | ||
194 | |||
195 | #define IS_1T1R(version) ((GET_CVID_RF_TYPE(version)) ? \ | ||
196 | false : true) | ||
197 | #define IS_1T2R(version) ((GET_CVID_RF_TYPE(version) == \ | ||
198 | RF_TYPE_1T2R) ? true : false) | ||
199 | #define IS_2T2R(version) ((GET_CVID_RF_TYPE(version) == \ | ||
200 | RF_TYPE_2T2R) ? true : false) | ||
201 | |||
202 | #define IS_92D_SINGLEPHY(version) ((IS_92D(version)) ? \ | ||
203 | (IS_2T2R(version) ? true : false) : false) | ||
204 | #define IS_92D(version) ((GET_CVID_IC_TYPE(version) == \ | ||
205 | CHIP_92D) ? true : false) | ||
206 | #define IS_92D_C_CUT(version) ((IS_92D(version)) ? \ | ||
207 | ((GET_CVID_CUT_VERSION(version) == \ | ||
208 | 0x2000) ? true : false) : false) | ||
209 | #define IS_92D_D_CUT(version) ((IS_92D(version)) ? \ | ||
210 | ((GET_CVID_CUT_VERSION(version) == \ | ||
211 | 0x3000) ? true : false) : false) | ||
212 | #define IS_92D_E_CUT(version) ((IS_92D(version)) ? \ | ||
213 | ((GET_CVID_CUT_VERSION(version) == \ | ||
214 | 0x4000) ? true : false) : false) | ||
215 | #define CHIP_92D_C_CUT BIT(10) | ||
216 | #define CHIP_92D_D_CUT BIT(11) | ||
178 | 217 | ||
179 | enum rf_optype { | 218 | enum rf_optype { |
180 | RF_OP_BY_SW_3WIRE = 0, | 219 | RF_OP_BY_SW_3WIRE = 0, |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192de/hw.c b/drivers/net/wireless/rtlwifi/rtl8192de/hw.c index 0073cf106af2..f5bd3a3cd34a 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192de/hw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192de/hw.c | |||
@@ -1608,17 +1608,16 @@ static void _rtl92de_read_txpower_info(struct ieee80211_hw *hw, | |||
1608 | tempval[0] = hwinfo[EEPROM_IQK_DELTA] & 0x03; | 1608 | tempval[0] = hwinfo[EEPROM_IQK_DELTA] & 0x03; |
1609 | tempval[1] = (hwinfo[EEPROM_LCK_DELTA] & 0x0C) >> 2; | 1609 | tempval[1] = (hwinfo[EEPROM_LCK_DELTA] & 0x0C) >> 2; |
1610 | rtlefuse->txpwr_fromeprom = true; | 1610 | rtlefuse->txpwr_fromeprom = true; |
1611 | if (IS_92D_D_CUT(rtlpriv->rtlhal.version)) { | 1611 | if (IS_92D_D_CUT(rtlpriv->rtlhal.version) || |
1612 | IS_92D_E_CUT(rtlpriv->rtlhal.version)) { | ||
1612 | rtlefuse->internal_pa_5g[0] = | 1613 | rtlefuse->internal_pa_5g[0] = |
1613 | !((hwinfo[EEPROM_TSSI_A_5G] & | 1614 | !((hwinfo[EEPROM_TSSI_A_5G] & BIT(6)) >> 6); |
1614 | BIT(6)) >> 6); | ||
1615 | rtlefuse->internal_pa_5g[1] = | 1615 | rtlefuse->internal_pa_5g[1] = |
1616 | !((hwinfo[EEPROM_TSSI_B_5G] & | 1616 | !((hwinfo[EEPROM_TSSI_B_5G] & BIT(6)) >> 6); |
1617 | BIT(6)) >> 6); | 1617 | RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, |
1618 | RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, | ||
1619 | ("Is D cut,Internal PA0 %d Internal PA1 %d\n", | 1618 | ("Is D cut,Internal PA0 %d Internal PA1 %d\n", |
1620 | rtlefuse->internal_pa_5g[0], | 1619 | rtlefuse->internal_pa_5g[0], |
1621 | rtlefuse->internal_pa_5g[1])) | 1620 | rtlefuse->internal_pa_5g[1])) |
1622 | } | 1621 | } |
1623 | rtlefuse->eeprom_c9 = hwinfo[EEPROM_RF_OPT6]; | 1622 | rtlefuse->eeprom_c9 = hwinfo[EEPROM_RF_OPT6]; |
1624 | rtlefuse->eeprom_cc = hwinfo[EEPROM_RF_OPT7]; | 1623 | rtlefuse->eeprom_cc = hwinfo[EEPROM_RF_OPT7]; |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192de/sw.c b/drivers/net/wireless/rtlwifi/rtl8192de/sw.c index c681597c7f20..691f80092185 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192de/sw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192de/sw.c | |||
@@ -146,6 +146,8 @@ static int rtl92d_init_sw_vars(struct ieee80211_hw *hw) | |||
146 | 146 | ||
147 | rtlpci->irq_mask[1] = (u32) (IMR_CPWM | IMR_C2HCMD); | 147 | rtlpci->irq_mask[1] = (u32) (IMR_CPWM | IMR_C2HCMD); |
148 | 148 | ||
149 | /* for debug level */ | ||
150 | rtlpriv->dbg.global_debuglevel = rtlpriv->cfg->mod_params->debug; | ||
149 | /* for LPS & IPS */ | 151 | /* for LPS & IPS */ |
150 | rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps; | 152 | rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps; |
151 | rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps; | 153 | rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps; |
@@ -267,6 +269,7 @@ static struct rtl_mod_params rtl92de_mod_params = { | |||
267 | .inactiveps = true, | 269 | .inactiveps = true, |
268 | .swctrl_lps = true, | 270 | .swctrl_lps = true, |
269 | .fwctrl_lps = false, | 271 | .fwctrl_lps = false, |
272 | .debug = DBG_EMERG, | ||
270 | }; | 273 | }; |
271 | 274 | ||
272 | static struct rtl_hal_cfg rtl92de_hal_cfg = { | 275 | static struct rtl_hal_cfg rtl92de_hal_cfg = { |
@@ -377,6 +380,7 @@ MODULE_DESCRIPTION("Realtek 8192DE 802.11n Dual Mac PCI wireless"); | |||
377 | MODULE_FIRMWARE("rtlwifi/rtl8192defw.bin"); | 380 | MODULE_FIRMWARE("rtlwifi/rtl8192defw.bin"); |
378 | 381 | ||
379 | module_param_named(swenc, rtl92de_mod_params.sw_crypto, bool, 0444); | 382 | module_param_named(swenc, rtl92de_mod_params.sw_crypto, bool, 0444); |
383 | module_param_named(debug, rtl92de_mod_params.debug, int, 0444); | ||
380 | module_param_named(ips, rtl92de_mod_params.inactiveps, bool, 0444); | 384 | module_param_named(ips, rtl92de_mod_params.inactiveps, bool, 0444); |
381 | module_param_named(swlps, rtl92de_mod_params.swctrl_lps, bool, 0444); | 385 | module_param_named(swlps, rtl92de_mod_params.swctrl_lps, bool, 0444); |
382 | module_param_named(fwlps, rtl92de_mod_params.fwctrl_lps, bool, 0444); | 386 | module_param_named(fwlps, rtl92de_mod_params.fwctrl_lps, bool, 0444); |
@@ -384,18 +388,23 @@ MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n"); | |||
384 | MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n"); | 388 | MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n"); |
385 | MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n"); | 389 | MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n"); |
386 | MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n"); | 390 | MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n"); |
391 | MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)"); | ||
392 | |||
393 | static const struct dev_pm_ops rtlwifi_pm_ops = { | ||
394 | .suspend = rtl_pci_suspend, | ||
395 | .resume = rtl_pci_resume, | ||
396 | .freeze = rtl_pci_suspend, | ||
397 | .thaw = rtl_pci_resume, | ||
398 | .poweroff = rtl_pci_suspend, | ||
399 | .restore = rtl_pci_resume, | ||
400 | }; | ||
387 | 401 | ||
388 | static struct pci_driver rtl92de_driver = { | 402 | static struct pci_driver rtl92de_driver = { |
389 | .name = KBUILD_MODNAME, | 403 | .name = KBUILD_MODNAME, |
390 | .id_table = rtl92de_pci_ids, | 404 | .id_table = rtl92de_pci_ids, |
391 | .probe = rtl_pci_probe, | 405 | .probe = rtl_pci_probe, |
392 | .remove = rtl_pci_disconnect, | 406 | .remove = rtl_pci_disconnect, |
393 | 407 | .driver.pm = &rtlwifi_pm_ops, | |
394 | #ifdef CONFIG_PM | ||
395 | .suspend = rtl_pci_suspend, | ||
396 | .resume = rtl_pci_resume, | ||
397 | #endif | ||
398 | |||
399 | }; | 408 | }; |
400 | 409 | ||
401 | /* add global spin lock to solve the problem that | 410 | /* add global spin lock to solve the problem that |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192se/hw.c b/drivers/net/wireless/rtlwifi/rtl8192se/hw.c index d59f66cb7768..c474486e3911 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192se/hw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192se/hw.c | |||
@@ -1382,7 +1382,7 @@ static void _rtl92se_power_domain_init(struct ieee80211_hw *hw) | |||
1382 | rtl_write_byte(rtlpriv, LDOA15_CTRL, 0x34); | 1382 | rtl_write_byte(rtlpriv, LDOA15_CTRL, 0x34); |
1383 | 1383 | ||
1384 | /* Reset MAC-IO and CPU and Core Digital BIT10/11/15 */ | 1384 | /* Reset MAC-IO and CPU and Core Digital BIT10/11/15 */ |
1385 | tmpu1b = rtl_read_byte(rtlpriv, SYS_FUNC_EN + 1); | 1385 | tmpu1b = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1); |
1386 | 1386 | ||
1387 | /* If IPS we need to turn LED on. So we not | 1387 | /* If IPS we need to turn LED on. So we not |
1388 | * not disable BIT 3/7 of reg3. */ | 1388 | * not disable BIT 3/7 of reg3. */ |
@@ -1391,7 +1391,7 @@ static void _rtl92se_power_domain_init(struct ieee80211_hw *hw) | |||
1391 | else | 1391 | else |
1392 | tmpu1b &= 0x73; | 1392 | tmpu1b &= 0x73; |
1393 | 1393 | ||
1394 | rtl_write_byte(rtlpriv, SYS_FUNC_EN + 1, tmpu1b); | 1394 | rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN + 1, tmpu1b); |
1395 | /* wait for BIT 10/11/15 to pull high automatically!! */ | 1395 | /* wait for BIT 10/11/15 to pull high automatically!! */ |
1396 | mdelay(1); | 1396 | mdelay(1); |
1397 | 1397 | ||
@@ -1428,15 +1428,15 @@ static void _rtl92se_power_domain_init(struct ieee80211_hw *hw) | |||
1428 | rtl_write_byte(rtlpriv, LDOA15_CTRL, (tmpu1b | BIT(0))); | 1428 | rtl_write_byte(rtlpriv, LDOA15_CTRL, (tmpu1b | BIT(0))); |
1429 | 1429 | ||
1430 | /* Set Digital Vdd to Retention isolation Path. */ | 1430 | /* Set Digital Vdd to Retention isolation Path. */ |
1431 | tmpu2b = rtl_read_word(rtlpriv, SYS_ISO_CTRL); | 1431 | tmpu2b = rtl_read_word(rtlpriv, REG_SYS_ISO_CTRL); |
1432 | rtl_write_word(rtlpriv, SYS_ISO_CTRL, (tmpu2b | BIT(11))); | 1432 | rtl_write_word(rtlpriv, REG_SYS_ISO_CTRL, (tmpu2b | BIT(11))); |
1433 | 1433 | ||
1434 | 1434 | ||
1435 | /* For warm reboot NIC disappera bug. */ | 1435 | /* For warm reboot NIC disappera bug. */ |
1436 | tmpu2b = rtl_read_word(rtlpriv, SYS_FUNC_EN); | 1436 | tmpu2b = rtl_read_word(rtlpriv, REG_SYS_FUNC_EN); |
1437 | rtl_write_word(rtlpriv, SYS_FUNC_EN, (tmpu2b | BIT(13))); | 1437 | rtl_write_word(rtlpriv, REG_SYS_FUNC_EN, (tmpu2b | BIT(13))); |
1438 | 1438 | ||
1439 | rtl_write_byte(rtlpriv, SYS_ISO_CTRL + 1, 0x68); | 1439 | rtl_write_byte(rtlpriv, REG_SYS_ISO_CTRL + 1, 0x68); |
1440 | 1440 | ||
1441 | /* Enable AFE PLL Macro Block */ | 1441 | /* Enable AFE PLL Macro Block */ |
1442 | tmpu1b = rtl_read_byte(rtlpriv, AFE_PLL_CTRL); | 1442 | tmpu1b = rtl_read_byte(rtlpriv, AFE_PLL_CTRL); |
@@ -1447,17 +1447,17 @@ static void _rtl92se_power_domain_init(struct ieee80211_hw *hw) | |||
1447 | mdelay(1); | 1447 | mdelay(1); |
1448 | 1448 | ||
1449 | /* Release isolation AFE PLL & MD */ | 1449 | /* Release isolation AFE PLL & MD */ |
1450 | rtl_write_byte(rtlpriv, SYS_ISO_CTRL, 0xA6); | 1450 | rtl_write_byte(rtlpriv, REG_SYS_ISO_CTRL, 0xA6); |
1451 | 1451 | ||
1452 | /* Enable MAC clock */ | 1452 | /* Enable MAC clock */ |
1453 | tmpu2b = rtl_read_word(rtlpriv, SYS_CLKR); | 1453 | tmpu2b = rtl_read_word(rtlpriv, SYS_CLKR); |
1454 | rtl_write_word(rtlpriv, SYS_CLKR, (tmpu2b | BIT(12) | BIT(11))); | 1454 | rtl_write_word(rtlpriv, SYS_CLKR, (tmpu2b | BIT(12) | BIT(11))); |
1455 | 1455 | ||
1456 | /* Enable Core digital and enable IOREG R/W */ | 1456 | /* Enable Core digital and enable IOREG R/W */ |
1457 | tmpu2b = rtl_read_word(rtlpriv, SYS_FUNC_EN); | 1457 | tmpu2b = rtl_read_word(rtlpriv, REG_SYS_FUNC_EN); |
1458 | rtl_write_word(rtlpriv, SYS_FUNC_EN, (tmpu2b | BIT(11))); | 1458 | rtl_write_word(rtlpriv, REG_SYS_FUNC_EN, (tmpu2b | BIT(11))); |
1459 | /* enable REG_EN */ | 1459 | /* enable REG_EN */ |
1460 | rtl_write_word(rtlpriv, SYS_FUNC_EN, (tmpu2b | BIT(11) | BIT(15))); | 1460 | rtl_write_word(rtlpriv, REG_SYS_FUNC_EN, (tmpu2b | BIT(11) | BIT(15))); |
1461 | 1461 | ||
1462 | /* Switch the control path. */ | 1462 | /* Switch the control path. */ |
1463 | tmpu2b = rtl_read_word(rtlpriv, SYS_CLKR); | 1463 | tmpu2b = rtl_read_word(rtlpriv, SYS_CLKR); |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192se/reg.h b/drivers/net/wireless/rtlwifi/rtl8192se/reg.h index ea32ef2d4098..11f125c030ce 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192se/reg.h +++ b/drivers/net/wireless/rtlwifi/rtl8192se/reg.h | |||
@@ -735,6 +735,7 @@ | |||
735 | #define HWSET_MAX_SIZE_92S 128 | 735 | #define HWSET_MAX_SIZE_92S 128 |
736 | #define EFUSE_MAX_SECTION 16 | 736 | #define EFUSE_MAX_SECTION 16 |
737 | #define EFUSE_REAL_CONTENT_LEN 512 | 737 | #define EFUSE_REAL_CONTENT_LEN 512 |
738 | #define EFUSE_OOB_PROTECT_BYTES 15 | ||
738 | 739 | ||
739 | #define RTL8190_EEPROM_ID 0x8129 | 740 | #define RTL8190_EEPROM_ID 0x8129 |
740 | #define EEPROM_HPON 0x02 | 741 | #define EEPROM_HPON 0x02 |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192se/sw.c b/drivers/net/wireless/rtlwifi/rtl8192se/sw.c index 24bd331a5484..3ec9a0d41baf 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192se/sw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192se/sw.c | |||
@@ -160,6 +160,8 @@ static int rtl92s_init_sw_vars(struct ieee80211_hw *hw) | |||
160 | 160 | ||
161 | rtlpci->first_init = true; | 161 | rtlpci->first_init = true; |
162 | 162 | ||
163 | /* for debug level */ | ||
164 | rtlpriv->dbg.global_debuglevel = rtlpriv->cfg->mod_params->debug; | ||
163 | /* for LPS & IPS */ | 165 | /* for LPS & IPS */ |
164 | rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps; | 166 | rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps; |
165 | rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps; | 167 | rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps; |
@@ -272,6 +274,7 @@ static struct rtl_mod_params rtl92se_mod_params = { | |||
272 | .inactiveps = true, | 274 | .inactiveps = true, |
273 | .swctrl_lps = true, | 275 | .swctrl_lps = true, |
274 | .fwctrl_lps = false, | 276 | .fwctrl_lps = false, |
277 | .debug = DBG_EMERG, | ||
275 | }; | 278 | }; |
276 | 279 | ||
277 | /* Because memory R/W bursting will cause system hang/crash | 280 | /* Because memory R/W bursting will cause system hang/crash |
@@ -304,6 +307,7 @@ static struct rtl_hal_cfg rtl92se_hal_cfg = { | |||
304 | .maps[EFUSE_HWSET_MAX_SIZE] = HWSET_MAX_SIZE_92S, | 307 | .maps[EFUSE_HWSET_MAX_SIZE] = HWSET_MAX_SIZE_92S, |
305 | .maps[EFUSE_MAX_SECTION_MAP] = EFUSE_MAX_SECTION, | 308 | .maps[EFUSE_MAX_SECTION_MAP] = EFUSE_MAX_SECTION, |
306 | .maps[EFUSE_REAL_CONTENT_SIZE] = EFUSE_REAL_CONTENT_LEN, | 309 | .maps[EFUSE_REAL_CONTENT_SIZE] = EFUSE_REAL_CONTENT_LEN, |
310 | .maps[EFUSE_OOB_PROTECT_BYTES_LEN] = EFUSE_OOB_PROTECT_BYTES, | ||
307 | 311 | ||
308 | .maps[RWCAM] = REG_RWCAM, | 312 | .maps[RWCAM] = REG_RWCAM, |
309 | .maps[WCAMI] = REG_WCAMI, | 313 | .maps[WCAMI] = REG_WCAMI, |
@@ -388,6 +392,7 @@ MODULE_DESCRIPTION("Realtek 8192S/8191S 802.11n PCI wireless"); | |||
388 | MODULE_FIRMWARE("rtlwifi/rtl8192sefw.bin"); | 392 | MODULE_FIRMWARE("rtlwifi/rtl8192sefw.bin"); |
389 | 393 | ||
390 | module_param_named(swenc, rtl92se_mod_params.sw_crypto, bool, 0444); | 394 | module_param_named(swenc, rtl92se_mod_params.sw_crypto, bool, 0444); |
395 | module_param_named(debug, rtl92se_mod_params.debug, int, 0444); | ||
391 | module_param_named(ips, rtl92se_mod_params.inactiveps, bool, 0444); | 396 | module_param_named(ips, rtl92se_mod_params.inactiveps, bool, 0444); |
392 | module_param_named(swlps, rtl92se_mod_params.swctrl_lps, bool, 0444); | 397 | module_param_named(swlps, rtl92se_mod_params.swctrl_lps, bool, 0444); |
393 | module_param_named(fwlps, rtl92se_mod_params.fwctrl_lps, bool, 0444); | 398 | module_param_named(fwlps, rtl92se_mod_params.fwctrl_lps, bool, 0444); |
@@ -395,18 +400,23 @@ MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n"); | |||
395 | MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n"); | 400 | MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n"); |
396 | MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n"); | 401 | MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n"); |
397 | MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n"); | 402 | MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n"); |
403 | MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)"); | ||
404 | |||
405 | static const struct dev_pm_ops rtlwifi_pm_ops = { | ||
406 | .suspend = rtl_pci_suspend, | ||
407 | .resume = rtl_pci_resume, | ||
408 | .freeze = rtl_pci_suspend, | ||
409 | .thaw = rtl_pci_resume, | ||
410 | .poweroff = rtl_pci_suspend, | ||
411 | .restore = rtl_pci_resume, | ||
412 | }; | ||
398 | 413 | ||
399 | static struct pci_driver rtl92se_driver = { | 414 | static struct pci_driver rtl92se_driver = { |
400 | .name = KBUILD_MODNAME, | 415 | .name = KBUILD_MODNAME, |
401 | .id_table = rtl92se_pci_ids, | 416 | .id_table = rtl92se_pci_ids, |
402 | .probe = rtl_pci_probe, | 417 | .probe = rtl_pci_probe, |
403 | .remove = rtl_pci_disconnect, | 418 | .remove = rtl_pci_disconnect, |
404 | 419 | .driver.pm = &rtlwifi_pm_ops, | |
405 | #ifdef CONFIG_PM | ||
406 | .suspend = rtl_pci_suspend, | ||
407 | .resume = rtl_pci_resume, | ||
408 | #endif | ||
409 | |||
410 | }; | 420 | }; |
411 | 421 | ||
412 | static int __init rtl92se_module_init(void) | 422 | static int __init rtl92se_module_init(void) |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192se/trx.c b/drivers/net/wireless/rtlwifi/rtl8192se/trx.c index ba137da082b5..fbebe3ea0a22 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192se/trx.c +++ b/drivers/net/wireless/rtlwifi/rtl8192se/trx.c | |||
@@ -124,18 +124,15 @@ static void _rtl92se_query_rxphystatus(struct ieee80211_hw *hw, | |||
124 | u8 i, max_spatial_stream; | 124 | u8 i, max_spatial_stream; |
125 | u32 rssi, total_rssi = 0; | 125 | u32 rssi, total_rssi = 0; |
126 | bool in_powersavemode = false; | 126 | bool in_powersavemode = false; |
127 | bool is_cck_rate; | 127 | bool is_cck = pstats->is_cck; |
128 | 128 | ||
129 | is_cck_rate = SE_RX_HAL_IS_CCK_RATE(pdesc); | ||
130 | pstats->packet_matchbssid = packet_match_bssid; | 129 | pstats->packet_matchbssid = packet_match_bssid; |
131 | pstats->packet_toself = packet_toself; | 130 | pstats->packet_toself = packet_toself; |
132 | pstats->is_cck = is_cck_rate; | ||
133 | pstats->packet_beacon = packet_beacon; | 131 | pstats->packet_beacon = packet_beacon; |
134 | pstats->is_cck = is_cck_rate; | ||
135 | pstats->rx_mimo_signalquality[0] = -1; | 132 | pstats->rx_mimo_signalquality[0] = -1; |
136 | pstats->rx_mimo_signalquality[1] = -1; | 133 | pstats->rx_mimo_signalquality[1] = -1; |
137 | 134 | ||
138 | if (is_cck_rate) { | 135 | if (is_cck) { |
139 | u8 report, cck_highpwr; | 136 | u8 report, cck_highpwr; |
140 | cck_buf = (struct phy_sts_cck_8192s_t *)p_drvinfo; | 137 | cck_buf = (struct phy_sts_cck_8192s_t *)p_drvinfo; |
141 | 138 | ||
@@ -246,9 +243,8 @@ static void _rtl92se_query_rxphystatus(struct ieee80211_hw *hw, | |||
246 | pstats->rxpower = rx_pwr_all; | 243 | pstats->rxpower = rx_pwr_all; |
247 | pstats->recvsignalpower = rx_pwr_all; | 244 | pstats->recvsignalpower = rx_pwr_all; |
248 | 245 | ||
249 | if (GET_RX_STATUS_DESC_RX_HT(pdesc) && | 246 | if (pstats->is_ht && pstats->rate >= DESC92_RATEMCS8 && |
250 | GET_RX_STATUS_DESC_RX_MCS(pdesc) >= DESC92_RATEMCS8 && | 247 | pstats->rate <= DESC92_RATEMCS15) |
251 | GET_RX_STATUS_DESC_RX_MCS(pdesc) <= DESC92_RATEMCS15) | ||
252 | max_spatial_stream = 2; | 248 | max_spatial_stream = 2; |
253 | else | 249 | else |
254 | max_spatial_stream = 1; | 250 | max_spatial_stream = 1; |
@@ -266,7 +262,7 @@ static void _rtl92se_query_rxphystatus(struct ieee80211_hw *hw, | |||
266 | } | 262 | } |
267 | } | 263 | } |
268 | 264 | ||
269 | if (is_cck_rate) | 265 | if (is_cck) |
270 | pstats->signalstrength = (u8)(_rtl92se_signal_scale_mapping(hw, | 266 | pstats->signalstrength = (u8)(_rtl92se_signal_scale_mapping(hw, |
271 | pwdb_all)); | 267 | pwdb_all)); |
272 | else if (rf_rx_num != 0) | 268 | else if (rf_rx_num != 0) |
@@ -518,6 +514,8 @@ bool rtl92se_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats, | |||
518 | { | 514 | { |
519 | struct rx_fwinfo *p_drvinfo; | 515 | struct rx_fwinfo *p_drvinfo; |
520 | u32 phystatus = (u32)GET_RX_STATUS_DESC_PHY_STATUS(pdesc); | 516 | u32 phystatus = (u32)GET_RX_STATUS_DESC_PHY_STATUS(pdesc); |
517 | struct ieee80211_hdr *hdr; | ||
518 | bool first_ampdu = false; | ||
521 | 519 | ||
522 | stats->length = (u16)GET_RX_STATUS_DESC_PKT_LEN(pdesc); | 520 | stats->length = (u16)GET_RX_STATUS_DESC_PKT_LEN(pdesc); |
523 | stats->rx_drvinfo_size = (u8)GET_RX_STATUS_DESC_DRVINFO_SIZE(pdesc) * 8; | 521 | stats->rx_drvinfo_size = (u8)GET_RX_STATUS_DESC_DRVINFO_SIZE(pdesc) * 8; |
@@ -530,8 +528,12 @@ bool rtl92se_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats, | |||
530 | stats->rate = (u8)GET_RX_STATUS_DESC_RX_MCS(pdesc); | 528 | stats->rate = (u8)GET_RX_STATUS_DESC_RX_MCS(pdesc); |
531 | stats->shortpreamble = (u16)GET_RX_STATUS_DESC_SPLCP(pdesc); | 529 | stats->shortpreamble = (u16)GET_RX_STATUS_DESC_SPLCP(pdesc); |
532 | stats->isampdu = (bool)(GET_RX_STATUS_DESC_PAGGR(pdesc) == 1); | 530 | stats->isampdu = (bool)(GET_RX_STATUS_DESC_PAGGR(pdesc) == 1); |
531 | stats->isfirst_ampdu = (bool) ((GET_RX_STATUS_DESC_PAGGR(pdesc) == 1) | ||
532 | && (GET_RX_STATUS_DESC_FAGGR(pdesc) == 1)); | ||
533 | stats->timestamp_low = GET_RX_STATUS_DESC_TSFL(pdesc); | 533 | stats->timestamp_low = GET_RX_STATUS_DESC_TSFL(pdesc); |
534 | stats->rx_is40Mhzpacket = (bool)GET_RX_STATUS_DESC_BW(pdesc); | 534 | stats->rx_is40Mhzpacket = (bool)GET_RX_STATUS_DESC_BW(pdesc); |
535 | stats->is_ht = (bool)GET_RX_STATUS_DESC_RX_HT(pdesc); | ||
536 | stats->is_cck = SE_RX_HAL_IS_CCK_RATE(pdesc); | ||
535 | 537 | ||
536 | if (stats->hwerror) | 538 | if (stats->hwerror) |
537 | return false; | 539 | return false; |
@@ -539,30 +541,39 @@ bool rtl92se_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats, | |||
539 | rx_status->freq = hw->conf.channel->center_freq; | 541 | rx_status->freq = hw->conf.channel->center_freq; |
540 | rx_status->band = hw->conf.channel->band; | 542 | rx_status->band = hw->conf.channel->band; |
541 | 543 | ||
542 | if (GET_RX_STATUS_DESC_CRC32(pdesc)) | 544 | hdr = (struct ieee80211_hdr *)(skb->data + stats->rx_drvinfo_size |
543 | rx_status->flag |= RX_FLAG_FAILED_FCS_CRC; | 545 | + stats->rx_bufshift); |
544 | 546 | ||
545 | if (!GET_RX_STATUS_DESC_SWDEC(pdesc)) | 547 | if (stats->crc) |
546 | rx_status->flag |= RX_FLAG_DECRYPTED; | 548 | rx_status->flag |= RX_FLAG_FAILED_FCS_CRC; |
547 | 549 | ||
548 | if (GET_RX_STATUS_DESC_BW(pdesc)) | 550 | if (stats->rx_is40Mhzpacket) |
549 | rx_status->flag |= RX_FLAG_40MHZ; | 551 | rx_status->flag |= RX_FLAG_40MHZ; |
550 | 552 | ||
551 | if (GET_RX_STATUS_DESC_RX_HT(pdesc)) | 553 | if (stats->is_ht) |
552 | rx_status->flag |= RX_FLAG_HT; | 554 | rx_status->flag |= RX_FLAG_HT; |
553 | 555 | ||
554 | rx_status->flag |= RX_FLAG_MACTIME_MPDU; | 556 | rx_status->flag |= RX_FLAG_MACTIME_MPDU; |
555 | 557 | ||
556 | if (stats->decrypted) | 558 | /* hw will set stats->decrypted true, if it finds the |
557 | rx_status->flag |= RX_FLAG_DECRYPTED; | 559 | * frame is open data frame or mgmt frame, |
560 | * hw will not decrypt robust managment frame | ||
561 | * for IEEE80211w but still set stats->decrypted | ||
562 | * true, so here we should set it back to undecrypted | ||
563 | * for IEEE80211w frame, and mac80211 sw will help | ||
564 | * to decrypt it */ | ||
565 | if (stats->decrypted) { | ||
566 | if ((ieee80211_is_robust_mgmt_frame(hdr)) && | ||
567 | (ieee80211_has_protected(hdr->frame_control))) | ||
568 | rx_status->flag &= ~RX_FLAG_DECRYPTED; | ||
569 | else | ||
570 | rx_status->flag |= RX_FLAG_DECRYPTED; | ||
571 | } | ||
558 | 572 | ||
559 | rx_status->rate_idx = rtlwifi_rate_mapping(hw, | 573 | rx_status->rate_idx = rtlwifi_rate_mapping(hw, |
560 | (bool)GET_RX_STATUS_DESC_RX_HT(pdesc), | 574 | stats->is_ht, stats->rate, first_ampdu); |
561 | (u8)GET_RX_STATUS_DESC_RX_MCS(pdesc), | ||
562 | (bool)GET_RX_STATUS_DESC_PAGGR(pdesc)); | ||
563 | |||
564 | 575 | ||
565 | rx_status->mactime = GET_RX_STATUS_DESC_TSFL(pdesc); | 576 | rx_status->mactime = stats->timestamp_low; |
566 | if (phystatus) { | 577 | if (phystatus) { |
567 | p_drvinfo = (struct rx_fwinfo *)(skb->data + | 578 | p_drvinfo = (struct rx_fwinfo *)(skb->data + |
568 | stats->rx_bufshift); | 579 | stats->rx_bufshift); |
diff --git a/drivers/net/wireless/rtlwifi/wifi.h b/drivers/net/wireless/rtlwifi/wifi.h index 3126485393d9..713c7ddba8eb 100644 --- a/drivers/net/wireless/rtlwifi/wifi.h +++ b/drivers/net/wireless/rtlwifi/wifi.h | |||
@@ -450,6 +450,7 @@ enum rtl_var_map { | |||
450 | EFUSE_HWSET_MAX_SIZE, | 450 | EFUSE_HWSET_MAX_SIZE, |
451 | EFUSE_MAX_SECTION_MAP, | 451 | EFUSE_MAX_SECTION_MAP, |
452 | EFUSE_REAL_CONTENT_SIZE, | 452 | EFUSE_REAL_CONTENT_SIZE, |
453 | EFUSE_OOB_PROTECT_BYTES_LEN, | ||
453 | 454 | ||
454 | /*CAM map */ | 455 | /*CAM map */ |
455 | RWCAM, | 456 | RWCAM, |
@@ -1324,6 +1325,7 @@ struct rtl_stats { | |||
1324 | s8 rx_mimo_signalquality[2]; | 1325 | s8 rx_mimo_signalquality[2]; |
1325 | bool packet_matchbssid; | 1326 | bool packet_matchbssid; |
1326 | bool is_cck; | 1327 | bool is_cck; |
1328 | bool is_ht; | ||
1327 | bool packet_toself; | 1329 | bool packet_toself; |
1328 | bool packet_beacon; /*for rssi */ | 1330 | bool packet_beacon; /*for rssi */ |
1329 | char cck_adc_pwdb[4]; /*for rx path selection */ | 1331 | char cck_adc_pwdb[4]; /*for rx path selection */ |
@@ -1485,6 +1487,9 @@ struct rtl_mod_params { | |||
1485 | /* default: 0 = using hardware encryption */ | 1487 | /* default: 0 = using hardware encryption */ |
1486 | int sw_crypto; | 1488 | int sw_crypto; |
1487 | 1489 | ||
1490 | /* default: 0 = DBG_EMERG (0)*/ | ||
1491 | int debug; | ||
1492 | |||
1488 | /* default: 1 = using no linked power save */ | 1493 | /* default: 1 = using no linked power save */ |
1489 | bool inactiveps; | 1494 | bool inactiveps; |
1490 | 1495 | ||