aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rtlwifi
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-10-25 07:25:22 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-10-25 07:25:22 -0400
commit8a9ea3237e7eb5c25f09e429ad242ae5a3d5ea22 (patch)
treea0a63398a9983667d52cbbbf4e2405b4f22b1d83 /drivers/net/wireless/rtlwifi
parent1be025d3cb40cd295123af2c394f7229ef9b30ca (diff)
parent8b3408f8ee994973869d8ba32c5bf482bc4ddca4 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1745 commits) dp83640: free packet queues on remove dp83640: use proper function to free transmit time stamping packets ipv6: Do not use routes from locally generated RAs |PATCH net-next] tg3: add tx_dropped counter be2net: don't create multiple RX/TX rings in multi channel mode be2net: don't create multiple TXQs in BE2 be2net: refactor VF setup/teardown code into be_vf_setup/clear() be2net: add vlan/rx-mode/flow-control config to be_setup() net_sched: cls_flow: use skb_header_pointer() ipv4: avoid useless call of the function check_peer_pmtu TCP: remove TCP_DEBUG net: Fix driver name for mdio-gpio.c ipv4: tcp: fix TOS value in ACK messages sent from TIME_WAIT rtnetlink: Add missing manual netlink notification in dev_change_net_namespaces ipv4: fix ipsec forward performance regression jme: fix irq storm after suspend/resume route: fix ICMP redirect validation net: hold sock reference while processing tx timestamps tcp: md5: add more const attributes Add ethtool -g support to virtio_net ... Fix up conflicts in: - drivers/net/Kconfig: The split-up generated a trivial conflict with removal of a stale reference to Documentation/networking/net-modules.txt. Remove it from the new location instead. - fs/sysfs/dir.c: Fairly nasty conflicts with the sysfs rb-tree usage, conflicting with Eric Biederman's changes for tagged directories.
Diffstat (limited to 'drivers/net/wireless/rtlwifi')
-rw-r--r--drivers/net/wireless/rtlwifi/base.c167
-rw-r--r--drivers/net/wireless/rtlwifi/base.h2
-rw-r--r--drivers/net/wireless/rtlwifi/core.c11
-rw-r--r--drivers/net/wireless/rtlwifi/debug.c2
-rw-r--r--drivers/net/wireless/rtlwifi/pci.c56
-rw-r--r--drivers/net/wireless/rtlwifi/pci.h30
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/def.h153
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/sw.c77
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/trx.c116
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/trx.h6
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/def.h4
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/mac.c4
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/mac.h6
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/rf.c2
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/sw.c35
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/trx.c23
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192de/def.h170
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192de/hw.c15
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192de/sw.c63
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192de/trx.c121
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192de/trx.h6
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192se/def.h41
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192se/hw.c22
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192se/reg.h1
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192se/sw.c64
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192se/trx.c169
-rw-r--r--drivers/net/wireless/rtlwifi/usb.c40
-rw-r--r--drivers/net/wireless/rtlwifi/wifi.h54
28 files changed, 588 insertions, 872 deletions
diff --git a/drivers/net/wireless/rtlwifi/base.c b/drivers/net/wireless/rtlwifi/base.c
index 0b598db38da..d4fdd2a5a73 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 */
@@ -664,6 +666,167 @@ static u8 _rtl_get_highest_n_rate(struct ieee80211_hw *hw)
664 return hw_rate; 666 return hw_rate;
665} 667}
666 668
669/* mac80211's rate_idx is like this:
670 *
671 * 2.4G band:rx_status->band == IEEE80211_BAND_2GHZ
672 *
673 * B/G rate:
674 * (rx_status->flag & RX_FLAG_HT) = 0,
675 * DESC92_RATE1M-->DESC92_RATE54M ==> idx is 0-->11,
676 *
677 * N rate:
678 * (rx_status->flag & RX_FLAG_HT) = 1,
679 * DESC92_RATEMCS0-->DESC92_RATEMCS15 ==> idx is 0-->15
680 *
681 * 5G band:rx_status->band == IEEE80211_BAND_5GHZ
682 * A rate:
683 * (rx_status->flag & RX_FLAG_HT) = 0,
684 * DESC92_RATE6M-->DESC92_RATE54M ==> idx is 0-->7,
685 *
686 * N rate:
687 * (rx_status->flag & RX_FLAG_HT) = 1,
688 * DESC92_RATEMCS0-->DESC92_RATEMCS15 ==> idx is 0-->15
689 */
690int rtlwifi_rate_mapping(struct ieee80211_hw *hw,
691 bool isht, u8 desc_rate, bool first_ampdu)
692{
693 int rate_idx;
694
695 if (false == isht) {
696 if (IEEE80211_BAND_2GHZ == hw->conf.channel->band) {
697 switch (desc_rate) {
698 case DESC92_RATE1M:
699 rate_idx = 0;
700 break;
701 case DESC92_RATE2M:
702 rate_idx = 1;
703 break;
704 case DESC92_RATE5_5M:
705 rate_idx = 2;
706 break;
707 case DESC92_RATE11M:
708 rate_idx = 3;
709 break;
710 case DESC92_RATE6M:
711 rate_idx = 4;
712 break;
713 case DESC92_RATE9M:
714 rate_idx = 5;
715 break;
716 case DESC92_RATE12M:
717 rate_idx = 6;
718 break;
719 case DESC92_RATE18M:
720 rate_idx = 7;
721 break;
722 case DESC92_RATE24M:
723 rate_idx = 8;
724 break;
725 case DESC92_RATE36M:
726 rate_idx = 9;
727 break;
728 case DESC92_RATE48M:
729 rate_idx = 10;
730 break;
731 case DESC92_RATE54M:
732 rate_idx = 11;
733 break;
734 default:
735 rate_idx = 0;
736 break;
737 }
738 } else {
739 switch (desc_rate) {
740 case DESC92_RATE6M:
741 rate_idx = 0;
742 break;
743 case DESC92_RATE9M:
744 rate_idx = 1;
745 break;
746 case DESC92_RATE12M:
747 rate_idx = 2;
748 break;
749 case DESC92_RATE18M:
750 rate_idx = 3;
751 break;
752 case DESC92_RATE24M:
753 rate_idx = 4;
754 break;
755 case DESC92_RATE36M:
756 rate_idx = 5;
757 break;
758 case DESC92_RATE48M:
759 rate_idx = 6;
760 break;
761 case DESC92_RATE54M:
762 rate_idx = 7;
763 break;
764 default:
765 rate_idx = 0;
766 break;
767 }
768 }
769
770 } else {
771
772 switch (desc_rate) {
773 case DESC92_RATEMCS0:
774 rate_idx = 0;
775 break;
776 case DESC92_RATEMCS1:
777 rate_idx = 1;
778 break;
779 case DESC92_RATEMCS2:
780 rate_idx = 2;
781 break;
782 case DESC92_RATEMCS3:
783 rate_idx = 3;
784 break;
785 case DESC92_RATEMCS4:
786 rate_idx = 4;
787 break;
788 case DESC92_RATEMCS5:
789 rate_idx = 5;
790 break;
791 case DESC92_RATEMCS6:
792 rate_idx = 6;
793 break;
794 case DESC92_RATEMCS7:
795 rate_idx = 7;
796 break;
797 case DESC92_RATEMCS8:
798 rate_idx = 8;
799 break;
800 case DESC92_RATEMCS9:
801 rate_idx = 9;
802 break;
803 case DESC92_RATEMCS10:
804 rate_idx = 10;
805 break;
806 case DESC92_RATEMCS11:
807 rate_idx = 11;
808 break;
809 case DESC92_RATEMCS12:
810 rate_idx = 12;
811 break;
812 case DESC92_RATEMCS13:
813 rate_idx = 13;
814 break;
815 case DESC92_RATEMCS14:
816 rate_idx = 14;
817 break;
818 case DESC92_RATEMCS15:
819 rate_idx = 15;
820 break;
821 default:
822 rate_idx = 0;
823 break;
824 }
825 }
826 return rate_idx;
827}
828EXPORT_SYMBOL(rtlwifi_rate_mapping);
829
667void rtl_get_tcb_desc(struct ieee80211_hw *hw, 830void rtl_get_tcb_desc(struct ieee80211_hw *hw,
668 struct ieee80211_tx_info *info, 831 struct ieee80211_tx_info *info,
669 struct ieee80211_sta *sta, 832 struct ieee80211_sta *sta,
@@ -689,7 +852,7 @@ void rtl_get_tcb_desc(struct ieee80211_hw *hw,
689 *So tcb_desc->hw_rate is just used for 852 *So tcb_desc->hw_rate is just used for
690 *special data and mgt frames 853 *special data and mgt frames
691 */ 854 */
692 if (info->control.rates[0].idx == 0 && 855 if (info->control.rates[0].idx == 0 ||
693 ieee80211_is_nullfunc(fc)) { 856 ieee80211_is_nullfunc(fc)) {
694 tcb_desc->use_driver_rate = true; 857 tcb_desc->use_driver_rate = true;
695 tcb_desc->ratr_index = RATR_INX_WIRELESS_MC; 858 tcb_desc->ratr_index = RATR_INX_WIRELESS_MC;
@@ -977,7 +1140,7 @@ void rtl_watchdog_wq_callback(void *data)
977 } 1140 }
978 1141
979 /* 1142 /*
980 *<3> to check if traffic busy, if 1143 *<2> to check if traffic busy, if
981 * busytraffic we don't change channel 1144 * busytraffic we don't change channel
982 */ 1145 */
983 if (mac->link_state >= MAC80211_LINKED) { 1146 if (mac->link_state >= MAC80211_LINKED) {
diff --git a/drivers/net/wireless/rtlwifi/base.h b/drivers/net/wireless/rtlwifi/base.h
index a91f3eee59c..4ae905983d0 100644
--- a/drivers/net/wireless/rtlwifi/base.h
+++ b/drivers/net/wireless/rtlwifi/base.h
@@ -140,4 +140,6 @@ u8 *rtl_find_ie(u8 *data, unsigned int len, u8 ie);
140void rtl_recognize_peer(struct ieee80211_hw *hw, u8 *data, unsigned int len); 140void rtl_recognize_peer(struct ieee80211_hw *hw, u8 *data, unsigned int len);
141u8 rtl_tid_to_ac(struct ieee80211_hw *hw, u8 tid); 141u8 rtl_tid_to_ac(struct ieee80211_hw *hw, u8 tid);
142extern struct attribute_group rtl_attribute_group; 142extern struct attribute_group rtl_attribute_group;
143int rtlwifi_rate_mapping(struct ieee80211_hw *hw,
144 bool isht, u8 desc_rate, bool first_ampdu);
143#endif 145#endif
diff --git a/drivers/net/wireless/rtlwifi/core.c b/drivers/net/wireless/rtlwifi/core.c
index 04c4e9eb6ee..3f0f056fae9 100644
--- a/drivers/net/wireless/rtlwifi/core.c
+++ b/drivers/net/wireless/rtlwifi/core.c
@@ -504,7 +504,8 @@ static int _rtl_get_hal_qnum(u16 queue)
504 *for mac80211 VO=0, VI=1, BE=2, BK=3 504 *for mac80211 VO=0, VI=1, BE=2, BK=3
505 *for rtl819x BE=0, BK=1, VI=2, VO=3 505 *for rtl819x BE=0, BK=1, VI=2, VO=3
506 */ 506 */
507static int rtl_op_conf_tx(struct ieee80211_hw *hw, u16 queue, 507static int rtl_op_conf_tx(struct ieee80211_hw *hw,
508 struct ieee80211_vif *vif, u16 queue,
508 const struct ieee80211_tx_queue_params *param) 509 const struct ieee80211_tx_queue_params *param)
509{ 510{
510 struct rtl_priv *rtlpriv = rtl_priv(hw); 511 struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -775,7 +776,7 @@ out:
775 mutex_unlock(&rtlpriv->locks.conf_mutex); 776 mutex_unlock(&rtlpriv->locks.conf_mutex);
776} 777}
777 778
778static u64 rtl_op_get_tsf(struct ieee80211_hw *hw) 779static u64 rtl_op_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
779{ 780{
780 struct rtl_priv *rtlpriv = rtl_priv(hw); 781 struct rtl_priv *rtlpriv = rtl_priv(hw);
781 u64 tsf; 782 u64 tsf;
@@ -784,7 +785,8 @@ static u64 rtl_op_get_tsf(struct ieee80211_hw *hw)
784 return tsf; 785 return tsf;
785} 786}
786 787
787static void rtl_op_set_tsf(struct ieee80211_hw *hw, u64 tsf) 788static void rtl_op_set_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
789 u64 tsf)
788{ 790{
789 struct rtl_priv *rtlpriv = rtl_priv(hw); 791 struct rtl_priv *rtlpriv = rtl_priv(hw);
790 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 792 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
@@ -794,7 +796,8 @@ static void rtl_op_set_tsf(struct ieee80211_hw *hw, u64 tsf)
794 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_CORRECT_TSF, (u8 *) (&bibss)); 796 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_CORRECT_TSF, (u8 *) (&bibss));
795} 797}
796 798
797static void rtl_op_reset_tsf(struct ieee80211_hw *hw) 799static void rtl_op_reset_tsf(struct ieee80211_hw *hw,
800 struct ieee80211_vif *vif)
798{ 801{
799 struct rtl_priv *rtlpriv = rtl_priv(hw); 802 struct rtl_priv *rtlpriv = rtl_priv(hw);
800 u8 tmp = 0; 803 u8 tmp = 0;
diff --git a/drivers/net/wireless/rtlwifi/debug.c b/drivers/net/wireless/rtlwifi/debug.c
index 5fa73852cb6..1b5cb7153a5 100644
--- a/drivers/net/wireless/rtlwifi/debug.c
+++ b/drivers/net/wireless/rtlwifi/debug.c
@@ -33,8 +33,6 @@ void rtl_dbgp_flag_init(struct ieee80211_hw *hw)
33 struct rtl_priv *rtlpriv = rtl_priv(hw); 33 struct rtl_priv *rtlpriv = rtl_priv(hw);
34 u8 i; 34 u8 i;
35 35
36 rtlpriv->dbg.global_debuglevel = DBG_EMERG;
37
38 rtlpriv->dbg.global_debugcomponents = 36 rtlpriv->dbg.global_debugcomponents =
39 COMP_ERR | COMP_FW | COMP_INIT | COMP_RECV | COMP_SEND | 37 COMP_ERR | COMP_FW | COMP_INIT | COMP_RECV | COMP_SEND |
40 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 f8648b7288d..177a8e66924 100644
--- a/drivers/net/wireless/rtlwifi/pci.c
+++ b/drivers/net/wireless/rtlwifi/pci.c
@@ -218,7 +218,6 @@ static void rtl_pci_disable_aspm(struct ieee80211_hw *hw)
218 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); 218 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
219 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); 219 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
220 u8 pcibridge_vendor = pcipriv->ndis_adapter.pcibridge_vendor; 220 u8 pcibridge_vendor = pcipriv->ndis_adapter.pcibridge_vendor;
221 u32 pcicfg_addrport = pcipriv->ndis_adapter.pcicfg_addrport;
222 u8 num4bytes = pcipriv->ndis_adapter.num4bytes; 221 u8 num4bytes = pcipriv->ndis_adapter.num4bytes;
223 /*Retrieve original configuration settings. */ 222 /*Retrieve original configuration settings. */
224 u8 linkctrl_reg = pcipriv->ndis_adapter.linkctrl_reg; 223 u8 linkctrl_reg = pcipriv->ndis_adapter.linkctrl_reg;
@@ -254,9 +253,8 @@ static void rtl_pci_disable_aspm(struct ieee80211_hw *hw)
254 udelay(50); 253 udelay(50);
255 254
256 /*4 Disable Pci Bridge ASPM */ 255 /*4 Disable Pci Bridge ASPM */
257 rtl_pci_raw_write_port_ulong(PCI_CONF_ADDRESS, 256 pci_write_config_byte(rtlpci->pdev, (num4bytes << 2),
258 pcicfg_addrport + (num4bytes << 2)); 257 pcibridge_linkctrlreg);
259 rtl_pci_raw_write_port_uchar(PCI_CONF_DATA, pcibridge_linkctrlreg);
260 258
261 udelay(50); 259 udelay(50);
262} 260}
@@ -277,7 +275,6 @@ static void rtl_pci_enable_aspm(struct ieee80211_hw *hw)
277 u8 pcibridge_devnum = pcipriv->ndis_adapter.pcibridge_devnum; 275 u8 pcibridge_devnum = pcipriv->ndis_adapter.pcibridge_devnum;
278 u8 pcibridge_funcnum = pcipriv->ndis_adapter.pcibridge_funcnum; 276 u8 pcibridge_funcnum = pcipriv->ndis_adapter.pcibridge_funcnum;
279 u8 pcibridge_vendor = pcipriv->ndis_adapter.pcibridge_vendor; 277 u8 pcibridge_vendor = pcipriv->ndis_adapter.pcibridge_vendor;
280 u32 pcicfg_addrport = pcipriv->ndis_adapter.pcicfg_addrport;
281 u8 num4bytes = pcipriv->ndis_adapter.num4bytes; 278 u8 num4bytes = pcipriv->ndis_adapter.num4bytes;
282 u16 aspmlevel; 279 u16 aspmlevel;
283 u8 u_pcibridge_aspmsetting; 280 u8 u_pcibridge_aspmsetting;
@@ -293,8 +290,6 @@ static void rtl_pci_enable_aspm(struct ieee80211_hw *hw)
293 } 290 }
294 291
295 /*4 Enable Pci Bridge ASPM */ 292 /*4 Enable Pci Bridge ASPM */
296 rtl_pci_raw_write_port_ulong(PCI_CONF_ADDRESS,
297 pcicfg_addrport + (num4bytes << 2));
298 293
299 u_pcibridge_aspmsetting = 294 u_pcibridge_aspmsetting =
300 pcipriv->ndis_adapter.pcibridge_linkctrlreg | 295 pcipriv->ndis_adapter.pcibridge_linkctrlreg |
@@ -303,7 +298,8 @@ static void rtl_pci_enable_aspm(struct ieee80211_hw *hw)
303 if (pcibridge_vendor == PCI_BRIDGE_VENDOR_INTEL) 298 if (pcibridge_vendor == PCI_BRIDGE_VENDOR_INTEL)
304 u_pcibridge_aspmsetting &= ~BIT(0); 299 u_pcibridge_aspmsetting &= ~BIT(0);
305 300
306 rtl_pci_raw_write_port_uchar(PCI_CONF_DATA, u_pcibridge_aspmsetting); 301 pci_write_config_byte(rtlpci->pdev, (num4bytes << 2),
302 u_pcibridge_aspmsetting);
307 303
308 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, 304 RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
309 ("PlatformEnableASPM():PciBridge busnumber[%x], " 305 ("PlatformEnableASPM():PciBridge busnumber[%x], "
@@ -335,25 +331,18 @@ static void rtl_pci_enable_aspm(struct ieee80211_hw *hw)
335 331
336static bool rtl_pci_get_amd_l1_patch(struct ieee80211_hw *hw) 332static bool rtl_pci_get_amd_l1_patch(struct ieee80211_hw *hw)
337{ 333{
338 struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw); 334 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
339 u32 pcicfg_addrport = pcipriv->ndis_adapter.pcicfg_addrport;
340 335
341 bool status = false; 336 bool status = false;
342 u8 offset_e0; 337 u8 offset_e0;
343 unsigned offset_e4; 338 unsigned offset_e4;
344 339
345 rtl_pci_raw_write_port_ulong(PCI_CONF_ADDRESS, 340 pci_write_config_byte(rtlpci->pdev, 0xe0, 0xa0);
346 pcicfg_addrport + 0xE0);
347 rtl_pci_raw_write_port_uchar(PCI_CONF_DATA, 0xA0);
348 341
349 rtl_pci_raw_write_port_ulong(PCI_CONF_ADDRESS, 342 pci_read_config_byte(rtlpci->pdev, 0xe0, &offset_e0);
350 pcicfg_addrport + 0xE0);
351 rtl_pci_raw_read_port_uchar(PCI_CONF_DATA, &offset_e0);
352 343
353 if (offset_e0 == 0xA0) { 344 if (offset_e0 == 0xA0) {
354 rtl_pci_raw_write_port_ulong(PCI_CONF_ADDRESS, 345 pci_read_config_dword(rtlpci->pdev, 0xe4, &offset_e4);
355 pcicfg_addrport + 0xE4);
356 rtl_pci_raw_read_port_ulong(PCI_CONF_DATA, &offset_e4);
357 if (offset_e4 & BIT(23)) 346 if (offset_e4 & BIT(23))
358 status = true; 347 status = true;
359 } 348 }
@@ -364,17 +353,15 @@ static bool rtl_pci_get_amd_l1_patch(struct ieee80211_hw *hw)
364static void rtl_pci_get_linkcontrol_field(struct ieee80211_hw *hw) 353static void rtl_pci_get_linkcontrol_field(struct ieee80211_hw *hw)
365{ 354{
366 struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw); 355 struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw);
356 struct rtl_pci *rtlpci = rtl_pcidev(pcipriv);
367 u8 capabilityoffset = pcipriv->ndis_adapter.pcibridge_pciehdr_offset; 357 u8 capabilityoffset = pcipriv->ndis_adapter.pcibridge_pciehdr_offset;
368 u32 pcicfg_addrport = pcipriv->ndis_adapter.pcicfg_addrport;
369 u8 linkctrl_reg; 358 u8 linkctrl_reg;
370 u8 num4bbytes; 359 u8 num4bbytes;
371 360
372 num4bbytes = (capabilityoffset + 0x10) / 4; 361 num4bbytes = (capabilityoffset + 0x10) / 4;
373 362
374 /*Read Link Control Register */ 363 /*Read Link Control Register */
375 rtl_pci_raw_write_port_ulong(PCI_CONF_ADDRESS, 364 pci_read_config_byte(rtlpci->pdev, (num4bbytes << 2), &linkctrl_reg);
376 pcicfg_addrport + (num4bbytes << 2));
377 rtl_pci_raw_read_port_uchar(PCI_CONF_DATA, &linkctrl_reg);
378 365
379 pcipriv->ndis_adapter.pcibridge_linkctrlreg = linkctrl_reg; 366 pcipriv->ndis_adapter.pcibridge_linkctrlreg = linkctrl_reg;
380} 367}
@@ -1718,10 +1705,6 @@ static bool _rtl_pci_find_adapter(struct pci_dev *pdev,
1718 PCI_SLOT(bridge_pdev->devfn); 1705 PCI_SLOT(bridge_pdev->devfn);
1719 pcipriv->ndis_adapter.pcibridge_funcnum = 1706 pcipriv->ndis_adapter.pcibridge_funcnum =
1720 PCI_FUNC(bridge_pdev->devfn); 1707 PCI_FUNC(bridge_pdev->devfn);
1721 pcipriv->ndis_adapter.pcicfg_addrport =
1722 (pcipriv->ndis_adapter.pcibridge_busnum << 16) |
1723 (pcipriv->ndis_adapter.pcibridge_devnum << 11) |
1724 (pcipriv->ndis_adapter.pcibridge_funcnum << 8) | (1 << 31);
1725 pcipriv->ndis_adapter.pcibridge_pciehdr_offset = 1708 pcipriv->ndis_adapter.pcibridge_pciehdr_offset =
1726 pci_pcie_cap(bridge_pdev); 1709 pci_pcie_cap(bridge_pdev);
1727 pcipriv->ndis_adapter.num4bytes = 1710 pcipriv->ndis_adapter.num4bytes =
@@ -2010,36 +1993,25 @@ call rtl_mac_stop() from the mac80211
2010suspend function first, So there is 1993suspend function first, So there is
2011no need to call hw_disable here. 1994no need to call hw_disable here.
2012****************************************/ 1995****************************************/
2013int rtl_pci_suspend(struct pci_dev *pdev, pm_message_t state) 1996int rtl_pci_suspend(struct device *dev)
2014{ 1997{
1998 struct pci_dev *pdev = to_pci_dev(dev);
2015 struct ieee80211_hw *hw = pci_get_drvdata(pdev); 1999 struct ieee80211_hw *hw = pci_get_drvdata(pdev);
2016 struct rtl_priv *rtlpriv = rtl_priv(hw); 2000 struct rtl_priv *rtlpriv = rtl_priv(hw);
2017 2001
2018 rtlpriv->cfg->ops->hw_suspend(hw); 2002 rtlpriv->cfg->ops->hw_suspend(hw);
2019 rtl_deinit_rfkill(hw); 2003 rtl_deinit_rfkill(hw);
2020 2004
2021 pci_save_state(pdev);
2022 pci_disable_device(pdev);
2023 pci_set_power_state(pdev, PCI_D3hot);
2024 return 0; 2005 return 0;
2025} 2006}
2026EXPORT_SYMBOL(rtl_pci_suspend); 2007EXPORT_SYMBOL(rtl_pci_suspend);
2027 2008
2028int rtl_pci_resume(struct pci_dev *pdev) 2009int rtl_pci_resume(struct device *dev)
2029{ 2010{
2030 int ret; 2011 struct pci_dev *pdev = to_pci_dev(dev);
2031 struct ieee80211_hw *hw = pci_get_drvdata(pdev); 2012 struct ieee80211_hw *hw = pci_get_drvdata(pdev);
2032 struct rtl_priv *rtlpriv = rtl_priv(hw); 2013 struct rtl_priv *rtlpriv = rtl_priv(hw);
2033 2014
2034 pci_set_power_state(pdev, PCI_D0);
2035 ret = pci_enable_device(pdev);
2036 if (ret) {
2037 RT_ASSERT(false, ("ERR: <======\n"));
2038 return ret;
2039 }
2040
2041 pci_restore_state(pdev);
2042
2043 rtlpriv->cfg->ops->hw_resume(hw); 2015 rtlpriv->cfg->ops->hw_resume(hw);
2044 rtl_init_rfkill(hw); 2016 rtl_init_rfkill(hw);
2045 return 0; 2017 return 0;
diff --git a/drivers/net/wireless/rtlwifi/pci.h b/drivers/net/wireless/rtlwifi/pci.h
index c53c6204674..ebe0b42c051 100644
--- a/drivers/net/wireless/rtlwifi/pci.h
+++ b/drivers/net/wireless/rtlwifi/pci.h
@@ -212,7 +212,6 @@ struct mp_adapter {
212 u16 pcibridge_vendorid; 212 u16 pcibridge_vendorid;
213 u16 pcibridge_deviceid; 213 u16 pcibridge_deviceid;
214 214
215 u32 pcicfg_addrport;
216 u8 num4bytes; 215 u8 num4bytes;
217 216
218 u8 pcibridge_pciehdr_offset; 217 u8 pcibridge_pciehdr_offset;
@@ -238,8 +237,8 @@ extern struct rtl_intf_ops rtl_pci_ops;
238int __devinit rtl_pci_probe(struct pci_dev *pdev, 237int __devinit rtl_pci_probe(struct pci_dev *pdev,
239 const struct pci_device_id *id); 238 const struct pci_device_id *id);
240void rtl_pci_disconnect(struct pci_dev *pdev); 239void rtl_pci_disconnect(struct pci_dev *pdev);
241int rtl_pci_suspend(struct pci_dev *pdev, pm_message_t state); 240int rtl_pci_suspend(struct device *dev);
242int rtl_pci_resume(struct pci_dev *pdev); 241int rtl_pci_resume(struct device *dev);
243 242
244static inline u8 pci_read8_sync(struct rtl_priv *rtlpriv, u32 addr) 243static inline u8 pci_read8_sync(struct rtl_priv *rtlpriv, u32 addr)
245{ 244{
@@ -273,29 +272,4 @@ static inline void pci_write32_async(struct rtl_priv *rtlpriv,
273 writel(val, (u8 __iomem *) rtlpriv->io.pci_mem_start + addr); 272 writel(val, (u8 __iomem *) rtlpriv->io.pci_mem_start + addr);
274} 273}
275 274
276static inline void rtl_pci_raw_write_port_ulong(u32 port, u32 val)
277{
278 outl(val, port);
279}
280
281static inline void rtl_pci_raw_write_port_uchar(u32 port, u8 val)
282{
283 outb(val, port);
284}
285
286static inline void rtl_pci_raw_read_port_uchar(u32 port, u8 *pval)
287{
288 *pval = inb(port);
289}
290
291static inline void rtl_pci_raw_read_port_ushort(u32 port, u16 *pval)
292{
293 *pval = inw(port);
294}
295
296static inline void rtl_pci_raw_read_port_ulong(u32 port, u32 *pval)
297{
298 *pval = inl(port);
299}
300
301#endif 275#endif
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/def.h b/drivers/net/wireless/rtlwifi/rtl8192ce/def.h
index 35ff7df41a1..9fc804d89d6 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
148enum rtl819x_loopback_e { 162enum rtl819x_loopback_e {
149 RTL819X_NO_LOOPBACK = 0, 163 RTL819X_NO_LOOPBACK = 0,
@@ -220,41 +234,6 @@ enum rtl_desc_qsel {
220 QSLT_CMD = 0x13, 234 QSLT_CMD = 0x13,
221}; 235};
222 236
223enum rtl_desc92c_rate {
224 DESC92C_RATE1M = 0x00,
225 DESC92C_RATE2M = 0x01,
226 DESC92C_RATE5_5M = 0x02,
227 DESC92C_RATE11M = 0x03,
228
229 DESC92C_RATE6M = 0x04,
230 DESC92C_RATE9M = 0x05,
231 DESC92C_RATE12M = 0x06,
232 DESC92C_RATE18M = 0x07,
233 DESC92C_RATE24M = 0x08,
234 DESC92C_RATE36M = 0x09,
235 DESC92C_RATE48M = 0x0a,
236 DESC92C_RATE54M = 0x0b,
237
238 DESC92C_RATEMCS0 = 0x0c,
239 DESC92C_RATEMCS1 = 0x0d,
240 DESC92C_RATEMCS2 = 0x0e,
241 DESC92C_RATEMCS3 = 0x0f,
242 DESC92C_RATEMCS4 = 0x10,
243 DESC92C_RATEMCS5 = 0x11,
244 DESC92C_RATEMCS6 = 0x12,
245 DESC92C_RATEMCS7 = 0x13,
246 DESC92C_RATEMCS8 = 0x14,
247 DESC92C_RATEMCS9 = 0x15,
248 DESC92C_RATEMCS10 = 0x16,
249 DESC92C_RATEMCS11 = 0x17,
250 DESC92C_RATEMCS12 = 0x18,
251 DESC92C_RATEMCS13 = 0x19,
252 DESC92C_RATEMCS14 = 0x1a,
253 DESC92C_RATEMCS15 = 0x1b,
254 DESC92C_RATEMCS15_SG = 0x1c,
255 DESC92C_RATEMCS32 = 0x20,
256};
257
258struct phy_sts_cck_8192s_t { 237struct phy_sts_cck_8192s_t {
259 u8 adc_pwdb_X[4]; 238 u8 adc_pwdb_X[4];
260 u8 sq_rpt; 239 u8 sq_rpt;
@@ -267,108 +246,4 @@ struct h2c_cmd_8192c {
267 u8 *p_cmdbuffer; 246 u8 *p_cmdbuffer;
268}; 247};
269 248
270/* NOTE: reference to rtl8192c_rates struct */
271static inline int _rtl92c_rate_mapping(struct ieee80211_hw *hw, bool isHT,
272 u8 desc_rate, bool first_ampdu)
273{
274 struct rtl_priv *rtlpriv = rtl_priv(hw);
275 int rate_idx = 0;
276
277 if (first_ampdu) {
278 if (false == isHT) {
279 switch (desc_rate) {
280 case DESC92C_RATE1M:
281 rate_idx = 0;
282 break;
283 case DESC92C_RATE2M:
284 rate_idx = 1;
285 break;
286 case DESC92C_RATE5_5M:
287 rate_idx = 2;
288 break;
289 case DESC92C_RATE11M:
290 rate_idx = 3;
291 break;
292 case DESC92C_RATE6M:
293 rate_idx = 4;
294 break;
295 case DESC92C_RATE9M:
296 rate_idx = 5;
297 break;
298 case DESC92C_RATE12M:
299 rate_idx = 6;
300 break;
301 case DESC92C_RATE18M:
302 rate_idx = 7;
303 break;
304 case DESC92C_RATE24M:
305 rate_idx = 8;
306 break;
307 case DESC92C_RATE36M:
308 rate_idx = 9;
309 break;
310 case DESC92C_RATE48M:
311 rate_idx = 10;
312 break;
313 case DESC92C_RATE54M:
314 rate_idx = 11;
315 break;
316 default:
317 RT_TRACE(rtlpriv, COMP_ERR, DBG_DMESG,
318 ("Rate %d is not support, set to "
319 "1M rate.\n", desc_rate));
320 rate_idx = 0;
321 break;
322 }
323 } else {
324 rate_idx = 11;
325 }
326 return rate_idx;
327 }
328 switch (desc_rate) {
329 case DESC92C_RATE1M:
330 rate_idx = 0;
331 break;
332 case DESC92C_RATE2M:
333 rate_idx = 1;
334 break;
335 case DESC92C_RATE5_5M:
336 rate_idx = 2;
337 break;
338 case DESC92C_RATE11M:
339 rate_idx = 3;
340 break;
341 case DESC92C_RATE6M:
342 rate_idx = 4;
343 break;
344 case DESC92C_RATE9M:
345 rate_idx = 5;
346 break;
347 case DESC92C_RATE12M:
348 rate_idx = 6;
349 break;
350 case DESC92C_RATE18M:
351 rate_idx = 7;
352 break;
353 case DESC92C_RATE24M:
354 rate_idx = 8;
355 break;
356 case DESC92C_RATE36M:
357 rate_idx = 9;
358 break;
359 case DESC92C_RATE48M:
360 rate_idx = 10;
361 break;
362 case DESC92C_RATE54M:
363 rate_idx = 11;
364 break;
365 /* TODO: How to mapping MCS rate? */
366 /* NOTE: referenc to __ieee80211_rx */
367 default:
368 rate_idx = 11;
369 break;
370 }
371 return rate_idx;
372}
373
374#endif 249#endif
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c b/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c
index 373dc78af1d..a48404cc2b9 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,10 +131,16 @@ 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;
135 rtlpriv->psc.fwctrl_lps = rtlpriv->cfg->mod_params->fwctrl_lps; 139 rtlpriv->psc.fwctrl_lps = rtlpriv->cfg->mod_params->fwctrl_lps;
140 if (!rtlpriv->psc.inactiveps)
141 pr_info("rtl8192ce: Power Save off (module option)\n");
142 if (!rtlpriv->psc.fwctrl_lps)
143 pr_info("rtl8192ce: FW Power Save off (module option)\n");
136 rtlpriv->psc.reg_fwctrl_lps = 3; 144 rtlpriv->psc.reg_fwctrl_lps = 3;
137 rtlpriv->psc.reg_max_lps_awakeintvl = 5; 145 rtlpriv->psc.reg_max_lps_awakeintvl = 5;
138 /* for ASPM, you can close aspm through 146 /* for ASPM, you can close aspm through
@@ -155,8 +163,14 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw)
155 } 163 }
156 164
157 /* request fw */ 165 /* request fw */
158 err = request_firmware(&firmware, rtlpriv->cfg->fw_name, 166 if (IS_VENDOR_UMC_A_CUT(rtlhal->version) &&
159 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);
160 if (err) { 174 if (err) {
161 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, 175 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
162 ("Failed to request firmware!\n")); 176 ("Failed to request firmware!\n"));
@@ -241,6 +255,7 @@ static struct rtl_mod_params rtl92ce_mod_params = {
241 .inactiveps = true, 255 .inactiveps = true,
242 .swctrl_lps = false, 256 .swctrl_lps = false,
243 .fwctrl_lps = true, 257 .fwctrl_lps = true,
258 .debug = DBG_EMERG,
244}; 259};
245 260
246static struct rtl_hal_cfg rtl92ce_hal_cfg = { 261static struct rtl_hal_cfg rtl92ce_hal_cfg = {
@@ -318,21 +333,21 @@ static struct rtl_hal_cfg rtl92ce_hal_cfg = {
318 .maps[RTL_IMR_ROK] = IMR_ROK, 333 .maps[RTL_IMR_ROK] = IMR_ROK,
319 .maps[RTL_IBSS_INT_MASKS] = (IMR_BCNINT | IMR_TBDOK | IMR_TBDER), 334 .maps[RTL_IBSS_INT_MASKS] = (IMR_BCNINT | IMR_TBDOK | IMR_TBDER),
320 335
321 .maps[RTL_RC_CCK_RATE1M] = DESC92C_RATE1M, 336 .maps[RTL_RC_CCK_RATE1M] = DESC92_RATE1M,
322 .maps[RTL_RC_CCK_RATE2M] = DESC92C_RATE2M, 337 .maps[RTL_RC_CCK_RATE2M] = DESC92_RATE2M,
323 .maps[RTL_RC_CCK_RATE5_5M] = DESC92C_RATE5_5M, 338 .maps[RTL_RC_CCK_RATE5_5M] = DESC92_RATE5_5M,
324 .maps[RTL_RC_CCK_RATE11M] = DESC92C_RATE11M, 339 .maps[RTL_RC_CCK_RATE11M] = DESC92_RATE11M,
325 .maps[RTL_RC_OFDM_RATE6M] = DESC92C_RATE6M, 340 .maps[RTL_RC_OFDM_RATE6M] = DESC92_RATE6M,
326 .maps[RTL_RC_OFDM_RATE9M] = DESC92C_RATE9M, 341 .maps[RTL_RC_OFDM_RATE9M] = DESC92_RATE9M,
327 .maps[RTL_RC_OFDM_RATE12M] = DESC92C_RATE12M, 342 .maps[RTL_RC_OFDM_RATE12M] = DESC92_RATE12M,
328 .maps[RTL_RC_OFDM_RATE18M] = DESC92C_RATE18M, 343 .maps[RTL_RC_OFDM_RATE18M] = DESC92_RATE18M,
329 .maps[RTL_RC_OFDM_RATE24M] = DESC92C_RATE24M, 344 .maps[RTL_RC_OFDM_RATE24M] = DESC92_RATE24M,
330 .maps[RTL_RC_OFDM_RATE36M] = DESC92C_RATE36M, 345 .maps[RTL_RC_OFDM_RATE36M] = DESC92_RATE36M,
331 .maps[RTL_RC_OFDM_RATE48M] = DESC92C_RATE48M, 346 .maps[RTL_RC_OFDM_RATE48M] = DESC92_RATE48M,
332 .maps[RTL_RC_OFDM_RATE54M] = DESC92C_RATE54M, 347 .maps[RTL_RC_OFDM_RATE54M] = DESC92_RATE54M,
333 348
334 .maps[RTL_RC_HT_RATEMCS7] = DESC92C_RATEMCS7, 349 .maps[RTL_RC_HT_RATEMCS7] = DESC92_RATEMCS7,
335 .maps[RTL_RC_HT_RATEMCS15] = DESC92C_RATEMCS15, 350 .maps[RTL_RC_HT_RATEMCS15] = DESC92_RATEMCS15,
336}; 351};
337 352
338DEFINE_PCI_DEVICE_TABLE(rtl92ce_pci_ids) = { 353DEFINE_PCI_DEVICE_TABLE(rtl92ce_pci_ids) = {
@@ -351,27 +366,35 @@ MODULE_AUTHOR("Larry Finger <Larry.Finger@lwfinger.net>");
351MODULE_LICENSE("GPL"); 366MODULE_LICENSE("GPL");
352MODULE_DESCRIPTION("Realtek 8192C/8188C 802.11n PCI wireless"); 367MODULE_DESCRIPTION("Realtek 8192C/8188C 802.11n PCI wireless");
353MODULE_FIRMWARE("rtlwifi/rtl8192cfw.bin"); 368MODULE_FIRMWARE("rtlwifi/rtl8192cfw.bin");
369MODULE_FIRMWARE("rtlwifi/rtl8192cfwU.bin");
370MODULE_FIRMWARE("rtlwifi/rtl8192cfwU_B.bin");
354 371
355module_param_named(swenc, rtl92ce_mod_params.sw_crypto, bool, 0444); 372module_param_named(swenc, rtl92ce_mod_params.sw_crypto, bool, 0444);
373module_param_named(debug, rtl92ce_mod_params.debug, int, 0444);
356module_param_named(ips, rtl92ce_mod_params.inactiveps, bool, 0444); 374module_param_named(ips, rtl92ce_mod_params.inactiveps, bool, 0444);
357module_param_named(swlps, rtl92ce_mod_params.swctrl_lps, bool, 0444); 375module_param_named(swlps, rtl92ce_mod_params.swctrl_lps, bool, 0444);
358module_param_named(fwlps, rtl92ce_mod_params.fwctrl_lps, bool, 0444); 376module_param_named(fwlps, rtl92ce_mod_params.fwctrl_lps, bool, 0444);
359MODULE_PARM_DESC(swenc, "using hardware crypto (default 0 [hardware])\n"); 377MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n");
360MODULE_PARM_DESC(ips, "using no link power save (default 1 is open)\n"); 378MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n");
361MODULE_PARM_DESC(fwlps, "using linked fw control power save " 379MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n");
362 "(default 1 is open)\n"); 380MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n");
381MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
382
383static 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};
363 391
364static struct pci_driver rtl92ce_driver = { 392static struct pci_driver rtl92ce_driver = {
365 .name = KBUILD_MODNAME, 393 .name = KBUILD_MODNAME,
366 .id_table = rtl92ce_pci_ids, 394 .id_table = rtl92ce_pci_ids,
367 .probe = rtl_pci_probe, 395 .probe = rtl_pci_probe,
368 .remove = rtl_pci_disconnect, 396 .remove = rtl_pci_disconnect,
369 397 .driver.pm = &rtlwifi_pm_ops,
370#ifdef CONFIG_PM
371 .suspend = rtl_pci_suspend,
372 .resume = rtl_pci_resume,
373#endif
374
375}; 398};
376 399
377static int __init rtl92ce_module_init(void) 400static int __init rtl92ce_module_init(void)
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c
index 230bbe900d8..4fb5ae24dee 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c
@@ -48,104 +48,6 @@ static u8 _rtl92ce_map_hwqueue_to_fwqueue(struct sk_buff *skb, u8 hw_queue)
48 return skb->priority; 48 return skb->priority;
49} 49}
50 50
51static int _rtl92ce_rate_mapping(bool isht, u8 desc_rate, bool first_ampdu)
52{
53 int rate_idx;
54
55 if (first_ampdu) {
56 if (false == isht) {
57 switch (desc_rate) {
58 case DESC92C_RATE1M:
59 rate_idx = 0;
60 break;
61 case DESC92C_RATE2M:
62 rate_idx = 1;
63 break;
64 case DESC92C_RATE5_5M:
65 rate_idx = 2;
66 break;
67 case DESC92C_RATE11M:
68 rate_idx = 3;
69 break;
70 case DESC92C_RATE6M:
71 rate_idx = 4;
72 break;
73 case DESC92C_RATE9M:
74 rate_idx = 5;
75 break;
76 case DESC92C_RATE12M:
77 rate_idx = 6;
78 break;
79 case DESC92C_RATE18M:
80 rate_idx = 7;
81 break;
82 case DESC92C_RATE24M:
83 rate_idx = 8;
84 break;
85 case DESC92C_RATE36M:
86 rate_idx = 9;
87 break;
88 case DESC92C_RATE48M:
89 rate_idx = 10;
90 break;
91 case DESC92C_RATE54M:
92 rate_idx = 11;
93 break;
94 default:
95 rate_idx = 0;
96 break;
97 }
98 } else {
99 rate_idx = 11;
100 }
101
102 return rate_idx;
103 }
104
105 switch (desc_rate) {
106 case DESC92C_RATE1M:
107 rate_idx = 0;
108 break;
109 case DESC92C_RATE2M:
110 rate_idx = 1;
111 break;
112 case DESC92C_RATE5_5M:
113 rate_idx = 2;
114 break;
115 case DESC92C_RATE11M:
116 rate_idx = 3;
117 break;
118 case DESC92C_RATE6M:
119 rate_idx = 4;
120 break;
121 case DESC92C_RATE9M:
122 rate_idx = 5;
123 break;
124 case DESC92C_RATE12M:
125 rate_idx = 6;
126 break;
127 case DESC92C_RATE18M:
128 rate_idx = 7;
129 break;
130 case DESC92C_RATE24M:
131 rate_idx = 8;
132 break;
133 case DESC92C_RATE36M:
134 rate_idx = 9;
135 break;
136 case DESC92C_RATE48M:
137 rate_idx = 10;
138 break;
139 case DESC92C_RATE54M:
140 rate_idx = 11;
141 break;
142 default:
143 rate_idx = 11;
144 break;
145 }
146 return rate_idx;
147}
148
149static u8 _rtl92c_query_rxpwrpercentage(char antpower) 51static u8 _rtl92c_query_rxpwrpercentage(char antpower)
150{ 52{
151 if ((antpower <= -100) || (antpower >= 20)) 53 if ((antpower <= -100) || (antpower >= 20))
@@ -336,8 +238,8 @@ static void _rtl92ce_query_rxphystatus(struct ieee80211_hw *hw,
336 pstats->rxpower = rx_pwr_all; 238 pstats->rxpower = rx_pwr_all;
337 pstats->recvsignalpower = rx_pwr_all; 239 pstats->recvsignalpower = rx_pwr_all;
338 240
339 if (pdesc->rxht && pdesc->rxmcs >= DESC92C_RATEMCS8 && 241 if (pdesc->rxht && pdesc->rxmcs >= DESC92_RATEMCS8 &&
340 pdesc->rxmcs <= DESC92C_RATEMCS15) 242 pdesc->rxmcs <= DESC92_RATEMCS15)
341 max_spatial_stream = 2; 243 max_spatial_stream = 2;
342 else 244 else
343 max_spatial_stream = 1; 245 max_spatial_stream = 1;
@@ -670,12 +572,10 @@ bool rtl92ce_rx_query_desc(struct ieee80211_hw *hw,
670 if (stats->decrypted) 572 if (stats->decrypted)
671 rx_status->flag |= RX_FLAG_DECRYPTED; 573 rx_status->flag |= RX_FLAG_DECRYPTED;
672 574
673 rx_status->rate_idx = _rtl92ce_rate_mapping((bool) 575 rx_status->rate_idx = rtlwifi_rate_mapping(hw,
674 GET_RX_DESC_RXHT(pdesc), 576 (bool)GET_RX_DESC_RXHT(pdesc),
675 (u8) 577 (u8)GET_RX_DESC_RXMCS(pdesc),
676 GET_RX_DESC_RXMCS(pdesc), 578 (bool)GET_RX_DESC_PAGGR(pdesc));
677 (bool)
678 GET_RX_DESC_PAGGR(pdesc));
679 579
680 rx_status->mactime = GET_RX_DESC_TSFL(pdesc); 580 rx_status->mactime = GET_RX_DESC_TSFL(pdesc);
681 if (phystatus) { 581 if (phystatus) {
@@ -768,7 +668,7 @@ void rtl92ce_tx_fill_desc(struct ieee80211_hw *hw,
768 SET_TX_DESC_RTS_BW(pdesc, 0); 668 SET_TX_DESC_RTS_BW(pdesc, 0);
769 SET_TX_DESC_RTS_SC(pdesc, tcb_desc->rts_sc); 669 SET_TX_DESC_RTS_SC(pdesc, tcb_desc->rts_sc);
770 SET_TX_DESC_RTS_SHORT(pdesc, 670 SET_TX_DESC_RTS_SHORT(pdesc,
771 ((tcb_desc->rts_rate <= DESC92C_RATE54M) ? 671 ((tcb_desc->rts_rate <= DESC92_RATE54M) ?
772 (tcb_desc->rts_use_shortpreamble ? 1 : 0) 672 (tcb_desc->rts_use_shortpreamble ? 1 : 0)
773 : (tcb_desc->rts_use_shortgi ? 1 : 0))); 673 : (tcb_desc->rts_use_shortgi ? 1 : 0)));
774 674
@@ -886,7 +786,7 @@ void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw,
886 if (firstseg) 786 if (firstseg)
887 SET_TX_DESC_OFFSET(pdesc, USB_HWDESC_HEADER_LEN); 787 SET_TX_DESC_OFFSET(pdesc, USB_HWDESC_HEADER_LEN);
888 788
889 SET_TX_DESC_TX_RATE(pdesc, DESC92C_RATE1M); 789 SET_TX_DESC_TX_RATE(pdesc, DESC92_RATE1M);
890 790
891 SET_TX_DESC_SEQ(pdesc, 0); 791 SET_TX_DESC_SEQ(pdesc, 0);
892 792
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h
index 0f117713750..c8977a50ca3 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h
+++ b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h
@@ -537,12 +537,6 @@ do { \
537 memset(__pdesc, 0, _size); \ 537 memset(__pdesc, 0, _size); \
538} while (0); 538} while (0);
539 539
540#define RX_HAL_IS_CCK_RATE(_pdesc)\
541 (_pdesc->rxmcs == DESC92C_RATE1M || \
542 _pdesc->rxmcs == DESC92C_RATE2M || \
543 _pdesc->rxmcs == DESC92C_RATE5_5M || \
544 _pdesc->rxmcs == DESC92C_RATE11M)
545
546struct rx_fwinfo_92c { 540struct rx_fwinfo_92c {
547 u8 gain_trsw[4]; 541 u8 gain_trsw[4];
548 u8 pwdb_all; 542 u8 pwdb_all;
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/def.h b/drivers/net/wireless/rtlwifi/rtl8192cu/def.h
index c54940ea72f..d097efb1e71 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/mac.c b/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c
index 194fc693c1f..060a06f4a88 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c
@@ -892,8 +892,8 @@ static void _rtl92c_query_rxphystatus(struct ieee80211_hw *hw,
892 pstats->rxpower = rx_pwr_all; 892 pstats->rxpower = rx_pwr_all;
893 pstats->recvsignalpower = rx_pwr_all; 893 pstats->recvsignalpower = rx_pwr_all;
894 if (GET_RX_DESC_RX_MCS(pdesc) && 894 if (GET_RX_DESC_RX_MCS(pdesc) &&
895 GET_RX_DESC_RX_MCS(pdesc) >= DESC92C_RATEMCS8 && 895 GET_RX_DESC_RX_MCS(pdesc) >= DESC92_RATEMCS8 &&
896 GET_RX_DESC_RX_MCS(pdesc) <= DESC92C_RATEMCS15) 896 GET_RX_DESC_RX_MCS(pdesc) <= DESC92_RATEMCS15)
897 max_spatial_stream = 2; 897 max_spatial_stream = 2;
898 else 898 else
899 max_spatial_stream = 1; 899 max_spatial_stream = 1;
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/mac.h b/drivers/net/wireless/rtlwifi/rtl8192cu/mac.h
index 298fdb724aa..626d88e88e2 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/mac.h
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/mac.h
@@ -87,12 +87,6 @@ void rtl92c_set_data_filter(struct ieee80211_hw *hw, u16 filter);
87 87
88u32 rtl92c_get_txdma_status(struct ieee80211_hw *hw); 88u32 rtl92c_get_txdma_status(struct ieee80211_hw *hw);
89 89
90#define RX_HAL_IS_CCK_RATE(_pdesc)\
91 (GET_RX_DESC_RX_MCS(_pdesc) == DESC92C_RATE1M ||\
92 GET_RX_DESC_RX_MCS(_pdesc) == DESC92C_RATE2M ||\
93 GET_RX_DESC_RX_MCS(_pdesc) == DESC92C_RATE5_5M ||\
94 GET_RX_DESC_RX_MCS(_pdesc) == DESC92C_RATE11M)
95
96struct rx_fwinfo_92c { 90struct rx_fwinfo_92c {
97 u8 gain_trsw[4]; 91 u8 gain_trsw[4];
98 u8 pwdb_all; 92 u8 pwdb_all;
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/rf.c b/drivers/net/wireless/rtlwifi/rtl8192cu/rf.c
index 17a8e962851..1e851aae58d 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/rf.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/rf.c
@@ -104,7 +104,7 @@ void rtl92cu_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
104 tx_agc[RF90_PATH_A] = 0x10101010; 104 tx_agc[RF90_PATH_A] = 0x10101010;
105 tx_agc[RF90_PATH_B] = 0x10101010; 105 tx_agc[RF90_PATH_B] = 0x10101010;
106 } else if (rtlpriv->dm.dynamic_txhighpower_lvl == 106 } else if (rtlpriv->dm.dynamic_txhighpower_lvl ==
107 TXHIGHPWRLEVEL_LEVEL2) { 107 TXHIGHPWRLEVEL_LEVEL1) {
108 tx_agc[RF90_PATH_A] = 0x00000000; 108 tx_agc[RF90_PATH_A] = 0x00000000;
109 tx_agc[RF90_PATH_B] = 0x00000000; 109 tx_agc[RF90_PATH_B] = 0x00000000;
110 } else{ 110 } else{
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
index ef63c0df006..feed1ed8d9b 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
150static struct rtl_mod_params rtl92cu_mod_params = { 151static struct rtl_mod_params rtl92cu_mod_params = {
151 .sw_crypto = 0, 152 .sw_crypto = 0,
153 .debug = DBG_EMERG,
152}; 154};
153 155
156module_param_named(swenc, rtl92cu_mod_params.sw_crypto, bool, 0444);
157module_param_named(debug, rtl92cu_mod_params.debug, int, 0444);
158MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n");
159MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
160
154static struct rtl_hal_usbint_cfg rtl92cu_interface_cfg = { 161static 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,
@@ -241,20 +248,20 @@ static struct rtl_hal_cfg rtl92cu_hal_cfg = {
241 .maps[RTL_IMR_ROK] = IMR_ROK, 248 .maps[RTL_IMR_ROK] = IMR_ROK,
242 .maps[RTL_IBSS_INT_MASKS] = (IMR_BCNINT | IMR_TBDOK | IMR_TBDER), 249 .maps[RTL_IBSS_INT_MASKS] = (IMR_BCNINT | IMR_TBDOK | IMR_TBDER),
243 250
244 .maps[RTL_RC_CCK_RATE1M] = DESC92C_RATE1M, 251 .maps[RTL_RC_CCK_RATE1M] = DESC92_RATE1M,
245 .maps[RTL_RC_CCK_RATE2M] = DESC92C_RATE2M, 252 .maps[RTL_RC_CCK_RATE2M] = DESC92_RATE2M,
246 .maps[RTL_RC_CCK_RATE5_5M] = DESC92C_RATE5_5M, 253 .maps[RTL_RC_CCK_RATE5_5M] = DESC92_RATE5_5M,
247 .maps[RTL_RC_CCK_RATE11M] = DESC92C_RATE11M, 254 .maps[RTL_RC_CCK_RATE11M] = DESC92_RATE11M,
248 .maps[RTL_RC_OFDM_RATE6M] = DESC92C_RATE6M, 255 .maps[RTL_RC_OFDM_RATE6M] = DESC92_RATE6M,
249 .maps[RTL_RC_OFDM_RATE9M] = DESC92C_RATE9M, 256 .maps[RTL_RC_OFDM_RATE9M] = DESC92_RATE9M,
250 .maps[RTL_RC_OFDM_RATE12M] = DESC92C_RATE12M, 257 .maps[RTL_RC_OFDM_RATE12M] = DESC92_RATE12M,
251 .maps[RTL_RC_OFDM_RATE18M] = DESC92C_RATE18M, 258 .maps[RTL_RC_OFDM_RATE18M] = DESC92_RATE18M,
252 .maps[RTL_RC_OFDM_RATE24M] = DESC92C_RATE24M, 259 .maps[RTL_RC_OFDM_RATE24M] = DESC92_RATE24M,
253 .maps[RTL_RC_OFDM_RATE36M] = DESC92C_RATE36M, 260 .maps[RTL_RC_OFDM_RATE36M] = DESC92_RATE36M,
254 .maps[RTL_RC_OFDM_RATE48M] = DESC92C_RATE48M, 261 .maps[RTL_RC_OFDM_RATE48M] = DESC92_RATE48M,
255 .maps[RTL_RC_OFDM_RATE54M] = DESC92C_RATE54M, 262 .maps[RTL_RC_OFDM_RATE54M] = DESC92_RATE54M,
256 .maps[RTL_RC_HT_RATEMCS7] = DESC92C_RATEMCS7, 263 .maps[RTL_RC_HT_RATEMCS7] = DESC92_RATEMCS7,
257 .maps[RTL_RC_HT_RATEMCS15] = DESC92C_RATEMCS15, 264 .maps[RTL_RC_HT_RATEMCS15] = DESC92_RATEMCS15,
258}; 265};
259 266
260#define USB_VENDER_ID_REALTEK 0x0bda 267#define USB_VENDER_ID_REALTEK 0x0bda
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c b/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
index 3e52a549622..bc33b147f44 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
@@ -337,10 +337,10 @@ bool rtl92cu_rx_query_desc(struct ieee80211_hw *hw,
337 rx_status->flag |= RX_FLAG_MACTIME_MPDU; 337 rx_status->flag |= RX_FLAG_MACTIME_MPDU;
338 if (stats->decrypted) 338 if (stats->decrypted)
339 rx_status->flag |= RX_FLAG_DECRYPTED; 339 rx_status->flag |= RX_FLAG_DECRYPTED;
340 rx_status->rate_idx = _rtl92c_rate_mapping(hw, 340 rx_status->rate_idx = rtlwifi_rate_mapping(hw,
341 (bool)GET_RX_DESC_RX_HT(pdesc), 341 (bool)GET_RX_DESC_RX_HT(pdesc),
342 (u8)GET_RX_DESC_RX_MCS(pdesc), 342 (u8)GET_RX_DESC_RX_MCS(pdesc),
343 (bool)GET_RX_DESC_PAGGR(pdesc)); 343 (bool)GET_RX_DESC_PAGGR(pdesc));
344 rx_status->mactime = GET_RX_DESC_TSFL(pdesc); 344 rx_status->mactime = GET_RX_DESC_TSFL(pdesc);
345 if (phystatus) { 345 if (phystatus) {
346 p_drvinfo = (struct rx_fwinfo_92c *)(pdesc + RTL_RX_DESC_SIZE); 346 p_drvinfo = (struct rx_fwinfo_92c *)(pdesc + RTL_RX_DESC_SIZE);
@@ -406,11 +406,10 @@ static void _rtl_rx_process(struct ieee80211_hw *hw, struct sk_buff *skb)
406 if (GET_RX_DESC_RX_HT(rxdesc)) 406 if (GET_RX_DESC_RX_HT(rxdesc))
407 rx_status->flag |= RX_FLAG_HT; 407 rx_status->flag |= RX_FLAG_HT;
408 /* Data rate */ 408 /* Data rate */
409 rx_status->rate_idx = _rtl92c_rate_mapping(hw, 409 rx_status->rate_idx = rtlwifi_rate_mapping(hw,
410 (bool)GET_RX_DESC_RX_HT(rxdesc), 410 (bool)GET_RX_DESC_RX_HT(rxdesc),
411 (u8)GET_RX_DESC_RX_MCS(rxdesc), 411 (u8)GET_RX_DESC_RX_MCS(rxdesc),
412 (bool)GET_RX_DESC_PAGGR(rxdesc) 412 (bool)GET_RX_DESC_PAGGR(rxdesc));
413 );
414 /* There is a phy status after this rx descriptor. */ 413 /* There is a phy status after this rx descriptor. */
415 if (GET_RX_DESC_PHY_STATUS(rxdesc)) { 414 if (GET_RX_DESC_PHY_STATUS(rxdesc)) {
416 p_drvinfo = (struct rx_fwinfo_92c *)(rxdesc + RTL_RX_DESC_SIZE); 415 p_drvinfo = (struct rx_fwinfo_92c *)(rxdesc + RTL_RX_DESC_SIZE);
@@ -545,7 +544,7 @@ void rtl92cu_tx_fill_desc(struct ieee80211_hw *hw,
545 SET_TX_DESC_RTS_BW(txdesc, 0); 544 SET_TX_DESC_RTS_BW(txdesc, 0);
546 SET_TX_DESC_RTS_SC(txdesc, tcb_desc->rts_sc); 545 SET_TX_DESC_RTS_SC(txdesc, tcb_desc->rts_sc);
547 SET_TX_DESC_RTS_SHORT(txdesc, 546 SET_TX_DESC_RTS_SHORT(txdesc,
548 ((tcb_desc->rts_rate <= DESC92C_RATE54M) ? 547 ((tcb_desc->rts_rate <= DESC92_RATE54M) ?
549 (tcb_desc->rts_use_shortpreamble ? 1 : 0) 548 (tcb_desc->rts_use_shortpreamble ? 1 : 0)
550 : (tcb_desc->rts_use_shortgi ? 1 : 0))); 549 : (tcb_desc->rts_use_shortgi ? 1 : 0)));
551 if (mac->bw_40) { 550 if (mac->bw_40) {
@@ -644,7 +643,7 @@ void rtl92cu_fill_fake_txdesc(struct ieee80211_hw *hw, u8 * pDesc,
644 } 643 }
645 SET_TX_DESC_USE_RATE(pDesc, 1); /* use data rate which is set by Sw */ 644 SET_TX_DESC_USE_RATE(pDesc, 1); /* use data rate which is set by Sw */
646 SET_TX_DESC_OWN(pDesc, 1); 645 SET_TX_DESC_OWN(pDesc, 1);
647 SET_TX_DESC_TX_RATE(pDesc, DESC92C_RATE1M); 646 SET_TX_DESC_TX_RATE(pDesc, DESC92_RATE1M);
648 _rtl_tx_desc_checksum(pDesc); 647 _rtl_tx_desc_checksum(pDesc);
649} 648}
650 649
@@ -660,7 +659,7 @@ void rtl92cu_tx_fill_cmddesc(struct ieee80211_hw *hw,
660 memset((void *)pdesc, 0, RTL_TX_HEADER_SIZE); 659 memset((void *)pdesc, 0, RTL_TX_HEADER_SIZE);
661 if (firstseg) 660 if (firstseg)
662 SET_TX_DESC_OFFSET(pdesc, RTL_TX_HEADER_SIZE); 661 SET_TX_DESC_OFFSET(pdesc, RTL_TX_HEADER_SIZE);
663 SET_TX_DESC_TX_RATE(pdesc, DESC92C_RATE1M); 662 SET_TX_DESC_TX_RATE(pdesc, DESC92_RATE1M);
664 SET_TX_DESC_SEQ(pdesc, 0); 663 SET_TX_DESC_SEQ(pdesc, 0);
665 SET_TX_DESC_LINIP(pdesc, 0); 664 SET_TX_DESC_LINIP(pdesc, 0);
666 SET_TX_DESC_QUEUE_SEL(pdesc, fw_queue); 665 SET_TX_DESC_QUEUE_SEL(pdesc, fw_queue);
diff --git a/drivers/net/wireless/rtlwifi/rtl8192de/def.h b/drivers/net/wireless/rtlwifi/rtl8192de/def.h
index f0f5f9bfbb7..94630477174 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192de/def.h
+++ b/drivers/net/wireless/rtlwifi/rtl8192de/def.h
@@ -122,60 +122,99 @@
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/* 125enum 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)
154#define C_CUT_VERSION BIT(13)
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))
185
186
187/* Get element */
188#define GET_CVID_IC_TYPE(version) ((version) & IC_TYPE_MASK)
189#define GET_CVID_CHIP_TYPE(version) ((version) & CHIP_TYPE_MASK)
190#define GET_CVID_RF_TYPE(version) ((version) & RF_TYPE_MASK)
191#define GET_CVID_MANUFACTUER(version) ((version) & MANUFACTUER_MASK)
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)
145#define CHIP_92D_C_CUT BIT(10) 215#define CHIP_92D_C_CUT BIT(10)
146#define CHIP_92D_D_CUT BIT(11) 216#define CHIP_92D_D_CUT BIT(11)
147 217
148enum 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
172#define IS_92D_SINGLEPHY(version) \
173 ((version & CHIP_92D_SINGLEPHY) ? true : false)
174#define IS_92D_C_CUT(version) \
175 ((version & CHIP_92D_C_CUT) ? true : false)
176#define IS_92D_D_CUT(version) \
177 ((version & CHIP_92D_D_CUT) ? true : false)
178
179enum rf_optype { 218enum rf_optype {
180 RF_OP_BY_SW_3WIRE = 0, 219 RF_OP_BY_SW_3WIRE = 0,
181 RF_OP_BY_FW, 220 RF_OP_BY_FW,
@@ -193,41 +232,6 @@ enum rtl_desc_qsel {
193 QSLT_CMD = 0x13, 232 QSLT_CMD = 0x13,
194}; 233};
195 234
196enum rtl_desc92d_rate {
197 DESC92D_RATE1M = 0x00,
198 DESC92D_RATE2M = 0x01,
199 DESC92D_RATE5_5M = 0x02,
200 DESC92D_RATE11M = 0x03,
201
202 DESC92D_RATE6M = 0x04,
203 DESC92D_RATE9M = 0x05,
204 DESC92D_RATE12M = 0x06,
205 DESC92D_RATE18M = 0x07,
206 DESC92D_RATE24M = 0x08,
207 DESC92D_RATE36M = 0x09,
208 DESC92D_RATE48M = 0x0a,
209 DESC92D_RATE54M = 0x0b,
210
211 DESC92D_RATEMCS0 = 0x0c,
212 DESC92D_RATEMCS1 = 0x0d,
213 DESC92D_RATEMCS2 = 0x0e,
214 DESC92D_RATEMCS3 = 0x0f,
215 DESC92D_RATEMCS4 = 0x10,
216 DESC92D_RATEMCS5 = 0x11,
217 DESC92D_RATEMCS6 = 0x12,
218 DESC92D_RATEMCS7 = 0x13,
219 DESC92D_RATEMCS8 = 0x14,
220 DESC92D_RATEMCS9 = 0x15,
221 DESC92D_RATEMCS10 = 0x16,
222 DESC92D_RATEMCS11 = 0x17,
223 DESC92D_RATEMCS12 = 0x18,
224 DESC92D_RATEMCS13 = 0x19,
225 DESC92D_RATEMCS14 = 0x1a,
226 DESC92D_RATEMCS15 = 0x1b,
227 DESC92D_RATEMCS15_SG = 0x1c,
228 DESC92D_RATEMCS32 = 0x20,
229};
230
231enum channel_plan { 235enum channel_plan {
232 CHPL_FCC = 0, 236 CHPL_FCC = 0,
233 CHPL_IC = 1, 237 CHPL_IC = 1,
diff --git a/drivers/net/wireless/rtlwifi/rtl8192de/hw.c b/drivers/net/wireless/rtlwifi/rtl8192de/hw.c
index 0073cf106af..f5bd3a3cd34 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 351765df517..691f8009218 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192de/sw.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192de/sw.c
@@ -146,10 +146,16 @@ 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;
152 rtlpriv->psc.fwctrl_lps = rtlpriv->cfg->mod_params->fwctrl_lps; 154 rtlpriv->psc.fwctrl_lps = rtlpriv->cfg->mod_params->fwctrl_lps;
155 if (!rtlpriv->psc.inactiveps)
156 pr_info("rtl8192ce: Power Save off (module option)\n");
157 if (!rtlpriv->psc.fwctrl_lps)
158 pr_info("rtl8192ce: FW Power Save off (module option)\n");
153 rtlpriv->psc.reg_fwctrl_lps = 3; 159 rtlpriv->psc.reg_fwctrl_lps = 3;
154 rtlpriv->psc.reg_max_lps_awakeintvl = 5; 160 rtlpriv->psc.reg_max_lps_awakeintvl = 5;
155 /* for ASPM, you can close aspm through 161 /* for ASPM, you can close aspm through
@@ -263,6 +269,7 @@ static struct rtl_mod_params rtl92de_mod_params = {
263 .inactiveps = true, 269 .inactiveps = true,
264 .swctrl_lps = true, 270 .swctrl_lps = true,
265 .fwctrl_lps = false, 271 .fwctrl_lps = false,
272 .debug = DBG_EMERG,
266}; 273};
267 274
268static struct rtl_hal_cfg rtl92de_hal_cfg = { 275static struct rtl_hal_cfg rtl92de_hal_cfg = {
@@ -340,21 +347,21 @@ static struct rtl_hal_cfg rtl92de_hal_cfg = {
340 .maps[RTL_IMR_ROK] = IMR_ROK, 347 .maps[RTL_IMR_ROK] = IMR_ROK,
341 .maps[RTL_IBSS_INT_MASKS] = (IMR_BcnInt | IMR_TBDOK | IMR_TBDER), 348 .maps[RTL_IBSS_INT_MASKS] = (IMR_BcnInt | IMR_TBDOK | IMR_TBDER),
342 349
343 .maps[RTL_RC_CCK_RATE1M] = DESC92D_RATE1M, 350 .maps[RTL_RC_CCK_RATE1M] = DESC92_RATE1M,
344 .maps[RTL_RC_CCK_RATE2M] = DESC92D_RATE2M, 351 .maps[RTL_RC_CCK_RATE2M] = DESC92_RATE2M,
345 .maps[RTL_RC_CCK_RATE5_5M] = DESC92D_RATE5_5M, 352 .maps[RTL_RC_CCK_RATE5_5M] = DESC92_RATE5_5M,
346 .maps[RTL_RC_CCK_RATE11M] = DESC92D_RATE11M, 353 .maps[RTL_RC_CCK_RATE11M] = DESC92_RATE11M,
347 .maps[RTL_RC_OFDM_RATE6M] = DESC92D_RATE6M, 354 .maps[RTL_RC_OFDM_RATE6M] = DESC92_RATE6M,
348 .maps[RTL_RC_OFDM_RATE9M] = DESC92D_RATE9M, 355 .maps[RTL_RC_OFDM_RATE9M] = DESC92_RATE9M,
349 .maps[RTL_RC_OFDM_RATE12M] = DESC92D_RATE12M, 356 .maps[RTL_RC_OFDM_RATE12M] = DESC92_RATE12M,
350 .maps[RTL_RC_OFDM_RATE18M] = DESC92D_RATE18M, 357 .maps[RTL_RC_OFDM_RATE18M] = DESC92_RATE18M,
351 .maps[RTL_RC_OFDM_RATE24M] = DESC92D_RATE24M, 358 .maps[RTL_RC_OFDM_RATE24M] = DESC92_RATE24M,
352 .maps[RTL_RC_OFDM_RATE36M] = DESC92D_RATE36M, 359 .maps[RTL_RC_OFDM_RATE36M] = DESC92_RATE36M,
353 .maps[RTL_RC_OFDM_RATE48M] = DESC92D_RATE48M, 360 .maps[RTL_RC_OFDM_RATE48M] = DESC92_RATE48M,
354 .maps[RTL_RC_OFDM_RATE54M] = DESC92D_RATE54M, 361 .maps[RTL_RC_OFDM_RATE54M] = DESC92_RATE54M,
355 362
356 .maps[RTL_RC_HT_RATEMCS7] = DESC92D_RATEMCS7, 363 .maps[RTL_RC_HT_RATEMCS7] = DESC92_RATEMCS7,
357 .maps[RTL_RC_HT_RATEMCS15] = DESC92D_RATEMCS15, 364 .maps[RTL_RC_HT_RATEMCS15] = DESC92_RATEMCS15,
358}; 365};
359 366
360static struct pci_device_id rtl92de_pci_ids[] __devinitdata = { 367static struct pci_device_id rtl92de_pci_ids[] __devinitdata = {
@@ -373,25 +380,31 @@ MODULE_DESCRIPTION("Realtek 8192DE 802.11n Dual Mac PCI wireless");
373MODULE_FIRMWARE("rtlwifi/rtl8192defw.bin"); 380MODULE_FIRMWARE("rtlwifi/rtl8192defw.bin");
374 381
375module_param_named(swenc, rtl92de_mod_params.sw_crypto, bool, 0444); 382module_param_named(swenc, rtl92de_mod_params.sw_crypto, bool, 0444);
383module_param_named(debug, rtl92de_mod_params.debug, int, 0444);
376module_param_named(ips, rtl92de_mod_params.inactiveps, bool, 0444); 384module_param_named(ips, rtl92de_mod_params.inactiveps, bool, 0444);
377module_param_named(swlps, rtl92de_mod_params.swctrl_lps, bool, 0444); 385module_param_named(swlps, rtl92de_mod_params.swctrl_lps, bool, 0444);
378module_param_named(fwlps, rtl92de_mod_params.fwctrl_lps, bool, 0444); 386module_param_named(fwlps, rtl92de_mod_params.fwctrl_lps, bool, 0444);
379MODULE_PARM_DESC(swenc, "using hardware crypto (default 0 [hardware])\n"); 387MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n");
380MODULE_PARM_DESC(ips, "using no link power save (default 1 is open)\n"); 388MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n");
381MODULE_PARM_DESC(swlps, "using linked sw control power save (default 1" 389MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n");
382 " is open)\n"); 390MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n");
391MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
392
393static 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};
383 401
384static struct pci_driver rtl92de_driver = { 402static struct pci_driver rtl92de_driver = {
385 .name = KBUILD_MODNAME, 403 .name = KBUILD_MODNAME,
386 .id_table = rtl92de_pci_ids, 404 .id_table = rtl92de_pci_ids,
387 .probe = rtl_pci_probe, 405 .probe = rtl_pci_probe,
388 .remove = rtl_pci_disconnect, 406 .remove = rtl_pci_disconnect,
389 407 .driver.pm = &rtlwifi_pm_ops,
390#ifdef CONFIG_PM
391 .suspend = rtl_pci_suspend,
392 .resume = rtl_pci_resume,
393#endif
394
395}; 408};
396 409
397/* 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/rtl8192de/trx.c b/drivers/net/wireless/rtlwifi/rtl8192de/trx.c
index dc86fcb0b3a..3637c0c3352 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192de/trx.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192de/trx.c
@@ -48,99 +48,6 @@ static u8 _rtl92de_map_hwqueue_to_fwqueue(struct sk_buff *skb, u8 hw_queue)
48 return skb->priority; 48 return skb->priority;
49} 49}
50 50
51static int _rtl92de_rate_mapping(bool isht, u8 desc_rate)
52{
53 int rate_idx;
54
55 if (false == isht) {
56 switch (desc_rate) {
57 case DESC92D_RATE1M:
58 rate_idx = 0;
59 break;
60 case DESC92D_RATE2M:
61 rate_idx = 1;
62 break;
63 case DESC92D_RATE5_5M:
64 rate_idx = 2;
65 break;
66 case DESC92D_RATE11M:
67 rate_idx = 3;
68 break;
69 case DESC92D_RATE6M:
70 rate_idx = 4;
71 break;
72 case DESC92D_RATE9M:
73 rate_idx = 5;
74 break;
75 case DESC92D_RATE12M:
76 rate_idx = 6;
77 break;
78 case DESC92D_RATE18M:
79 rate_idx = 7;
80 break;
81 case DESC92D_RATE24M:
82 rate_idx = 8;
83 break;
84 case DESC92D_RATE36M:
85 rate_idx = 9;
86 break;
87 case DESC92D_RATE48M:
88 rate_idx = 10;
89 break;
90 case DESC92D_RATE54M:
91 rate_idx = 11;
92 break;
93 default:
94 rate_idx = 0;
95 break;
96 }
97 return rate_idx;
98 } else {
99 switch (desc_rate) {
100 case DESC92D_RATE1M:
101 rate_idx = 0;
102 break;
103 case DESC92D_RATE2M:
104 rate_idx = 1;
105 break;
106 case DESC92D_RATE5_5M:
107 rate_idx = 2;
108 break;
109 case DESC92D_RATE11M:
110 rate_idx = 3;
111 break;
112 case DESC92D_RATE6M:
113 rate_idx = 4;
114 break;
115 case DESC92D_RATE9M:
116 rate_idx = 5;
117 break;
118 case DESC92D_RATE12M:
119 rate_idx = 6;
120 break;
121 case DESC92D_RATE18M:
122 rate_idx = 7;
123 break;
124 case DESC92D_RATE24M:
125 rate_idx = 8;
126 break;
127 case DESC92D_RATE36M:
128 rate_idx = 9;
129 break;
130 case DESC92D_RATE48M:
131 rate_idx = 10;
132 break;
133 case DESC92D_RATE54M:
134 rate_idx = 11;
135 break;
136 default:
137 rate_idx = 11;
138 break;
139 }
140 return rate_idx;
141 }
142}
143
144static u8 _rtl92d_query_rxpwrpercentage(char antpower) 51static u8 _rtl92d_query_rxpwrpercentage(char antpower)
145{ 52{
146 if ((antpower <= -100) || (antpower >= 20)) 53 if ((antpower <= -100) || (antpower >= 20))
@@ -328,8 +235,8 @@ static void _rtl92de_query_rxphystatus(struct ieee80211_hw *hw,
328 pstats->rx_pwdb_all = pwdb_all; 235 pstats->rx_pwdb_all = pwdb_all;
329 pstats->rxpower = rx_pwr_all; 236 pstats->rxpower = rx_pwr_all;
330 pstats->recvsignalpower = rx_pwr_all; 237 pstats->recvsignalpower = rx_pwr_all;
331 if (pdesc->rxht && pdesc->rxmcs >= DESC92D_RATEMCS8 && 238 if (pdesc->rxht && pdesc->rxmcs >= DESC92_RATEMCS8 &&
332 pdesc->rxmcs <= DESC92D_RATEMCS15) 239 pdesc->rxmcs <= DESC92_RATEMCS15)
333 max_spatial_stream = 2; 240 max_spatial_stream = 2;
334 else 241 else
335 max_spatial_stream = 1; 242 max_spatial_stream = 1;
@@ -609,10 +516,10 @@ bool rtl92de_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats,
609 rx_status->flag |= RX_FLAG_MACTIME_MPDU; 516 rx_status->flag |= RX_FLAG_MACTIME_MPDU;
610 if (stats->decrypted) 517 if (stats->decrypted)
611 rx_status->flag |= RX_FLAG_DECRYPTED; 518 rx_status->flag |= RX_FLAG_DECRYPTED;
612 rx_status->rate_idx = _rtl92de_rate_mapping((bool) 519 rx_status->rate_idx = rtlwifi_rate_mapping(hw,
613 GET_RX_DESC_RXHT(pdesc), 520 (bool)GET_RX_DESC_RXHT(pdesc),
614 (u8) 521 (u8)GET_RX_DESC_RXMCS(pdesc),
615 GET_RX_DESC_RXMCS(pdesc)); 522 (bool)GET_RX_DESC_PAGGR(pdesc));
616 rx_status->mactime = GET_RX_DESC_TSFL(pdesc); 523 rx_status->mactime = GET_RX_DESC_TSFL(pdesc);
617 if (phystatus) { 524 if (phystatus) {
618 p_drvinfo = (struct rx_fwinfo_92d *)(skb->data + 525 p_drvinfo = (struct rx_fwinfo_92d *)(skb->data +
@@ -705,14 +612,14 @@ void rtl92de_tx_fill_desc(struct ieee80211_hw *hw,
705 } 612 }
706 /* 5G have no CCK rate */ 613 /* 5G have no CCK rate */
707 if (rtlhal->current_bandtype == BAND_ON_5G) 614 if (rtlhal->current_bandtype == BAND_ON_5G)
708 if (ptcb_desc->hw_rate < DESC92D_RATE6M) 615 if (ptcb_desc->hw_rate < DESC92_RATE6M)
709 ptcb_desc->hw_rate = DESC92D_RATE6M; 616 ptcb_desc->hw_rate = DESC92_RATE6M;
710 SET_TX_DESC_TX_RATE(pdesc, ptcb_desc->hw_rate); 617 SET_TX_DESC_TX_RATE(pdesc, ptcb_desc->hw_rate);
711 if (ptcb_desc->use_shortgi || ptcb_desc->use_shortpreamble) 618 if (ptcb_desc->use_shortgi || ptcb_desc->use_shortpreamble)
712 SET_TX_DESC_DATA_SHORTGI(pdesc, 1); 619 SET_TX_DESC_DATA_SHORTGI(pdesc, 1);
713 620
714 if (rtlhal->macphymode == DUALMAC_DUALPHY && 621 if (rtlhal->macphymode == DUALMAC_DUALPHY &&
715 ptcb_desc->hw_rate == DESC92D_RATEMCS7) 622 ptcb_desc->hw_rate == DESC92_RATEMCS7)
716 SET_TX_DESC_DATA_SHORTGI(pdesc, 1); 623 SET_TX_DESC_DATA_SHORTGI(pdesc, 1);
717 624
718 if (info->flags & IEEE80211_TX_CTL_AMPDU) { 625 if (info->flags & IEEE80211_TX_CTL_AMPDU) {
@@ -728,13 +635,13 @@ void rtl92de_tx_fill_desc(struct ieee80211_hw *hw,
728 SET_TX_DESC_RTS_STBC(pdesc, ((ptcb_desc->rts_stbc) ? 1 : 0)); 635 SET_TX_DESC_RTS_STBC(pdesc, ((ptcb_desc->rts_stbc) ? 1 : 0));
729 /* 5G have no CCK rate */ 636 /* 5G have no CCK rate */
730 if (rtlhal->current_bandtype == BAND_ON_5G) 637 if (rtlhal->current_bandtype == BAND_ON_5G)
731 if (ptcb_desc->rts_rate < DESC92D_RATE6M) 638 if (ptcb_desc->rts_rate < DESC92_RATE6M)
732 ptcb_desc->rts_rate = DESC92D_RATE6M; 639 ptcb_desc->rts_rate = DESC92_RATE6M;
733 SET_TX_DESC_RTS_RATE(pdesc, ptcb_desc->rts_rate); 640 SET_TX_DESC_RTS_RATE(pdesc, ptcb_desc->rts_rate);
734 SET_TX_DESC_RTS_BW(pdesc, 0); 641 SET_TX_DESC_RTS_BW(pdesc, 0);
735 SET_TX_DESC_RTS_SC(pdesc, ptcb_desc->rts_sc); 642 SET_TX_DESC_RTS_SC(pdesc, ptcb_desc->rts_sc);
736 SET_TX_DESC_RTS_SHORT(pdesc, ((ptcb_desc->rts_rate <= 643 SET_TX_DESC_RTS_SHORT(pdesc, ((ptcb_desc->rts_rate <=
737 DESC92D_RATE54M) ? 644 DESC92_RATE54M) ?
738 (ptcb_desc->rts_use_shortpreamble ? 1 : 0) : 645 (ptcb_desc->rts_use_shortpreamble ? 1 : 0) :
739 (ptcb_desc->rts_use_shortgi ? 1 : 0))); 646 (ptcb_desc->rts_use_shortgi ? 1 : 0)));
740 if (bw_40) { 647 if (bw_40) {
@@ -844,9 +751,9 @@ void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw,
844 * The braces are needed no matter what checkpatch says 751 * The braces are needed no matter what checkpatch says
845 */ 752 */
846 if (rtlhal->current_bandtype == BAND_ON_5G) { 753 if (rtlhal->current_bandtype == BAND_ON_5G) {
847 SET_TX_DESC_TX_RATE(pdesc, DESC92D_RATE6M); 754 SET_TX_DESC_TX_RATE(pdesc, DESC92_RATE6M);
848 } else { 755 } else {
849 SET_TX_DESC_TX_RATE(pdesc, DESC92D_RATE1M); 756 SET_TX_DESC_TX_RATE(pdesc, DESC92_RATE1M);
850 } 757 }
851 SET_TX_DESC_SEQ(pdesc, 0); 758 SET_TX_DESC_SEQ(pdesc, 0);
852 SET_TX_DESC_LINIP(pdesc, 0); 759 SET_TX_DESC_LINIP(pdesc, 0);
diff --git a/drivers/net/wireless/rtlwifi/rtl8192de/trx.h b/drivers/net/wireless/rtlwifi/rtl8192de/trx.h
index 992d6766e66..4d55d0b6816 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192de/trx.h
+++ b/drivers/net/wireless/rtlwifi/rtl8192de/trx.h
@@ -537,12 +537,6 @@ do { \
537 memset((void *)__pdesc, 0, _size); \ 537 memset((void *)__pdesc, 0, _size); \
538} while (0); 538} while (0);
539 539
540#define RX_HAL_IS_CCK_RATE(_pdesc)\
541 (_pdesc->rxmcs == DESC92D_RATE1M || \
542 _pdesc->rxmcs == DESC92D_RATE2M || \
543 _pdesc->rxmcs == DESC92D_RATE5_5M || \
544 _pdesc->rxmcs == DESC92D_RATE11M)
545
546/* For 92D early mode */ 540/* For 92D early mode */
547#define SET_EARLYMODE_PKTNUM(__paddr, __value) \ 541#define SET_EARLYMODE_PKTNUM(__paddr, __value) \
548 SET_BITS_OFFSET_LE(__paddr, 0, 3, __value) 542 SET_BITS_OFFSET_LE(__paddr, 0, 3, __value)
diff --git a/drivers/net/wireless/rtlwifi/rtl8192se/def.h b/drivers/net/wireless/rtlwifi/rtl8192se/def.h
index 69828f2b3fa..c6c044816d3 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192se/def.h
+++ b/drivers/net/wireless/rtlwifi/rtl8192se/def.h
@@ -33,37 +33,6 @@
33#define RX_CMD_QUEUE 1 33#define RX_CMD_QUEUE 1
34#define RX_MAX_QUEUE 2 34#define RX_MAX_QUEUE 2
35 35
36#define DESC92S_RATE1M 0x00
37#define DESC92S_RATE2M 0x01
38#define DESC92S_RATE5_5M 0x02
39#define DESC92S_RATE11M 0x03
40#define DESC92S_RATE6M 0x04
41#define DESC92S_RATE9M 0x05
42#define DESC92S_RATE12M 0x06
43#define DESC92S_RATE18M 0x07
44#define DESC92S_RATE24M 0x08
45#define DESC92S_RATE36M 0x09
46#define DESC92S_RATE48M 0x0a
47#define DESC92S_RATE54M 0x0b
48#define DESC92S_RATEMCS0 0x0c
49#define DESC92S_RATEMCS1 0x0d
50#define DESC92S_RATEMCS2 0x0e
51#define DESC92S_RATEMCS3 0x0f
52#define DESC92S_RATEMCS4 0x10
53#define DESC92S_RATEMCS5 0x11
54#define DESC92S_RATEMCS6 0x12
55#define DESC92S_RATEMCS7 0x13
56#define DESC92S_RATEMCS8 0x14
57#define DESC92S_RATEMCS9 0x15
58#define DESC92S_RATEMCS10 0x16
59#define DESC92S_RATEMCS11 0x17
60#define DESC92S_RATEMCS12 0x18
61#define DESC92S_RATEMCS13 0x19
62#define DESC92S_RATEMCS14 0x1a
63#define DESC92S_RATEMCS15 0x1b
64#define DESC92S_RATEMCS15_SG 0x1c
65#define DESC92S_RATEMCS32 0x20
66
67#define SHORT_SLOT_TIME 9 36#define SHORT_SLOT_TIME 9
68#define NON_SHORT_SLOT_TIME 20 37#define NON_SHORT_SLOT_TIME 20
69 38
@@ -490,11 +459,11 @@ do { \
490#define SET_RX_STATUS__DESC_BUFF_ADDR(__pdesc, __val) \ 459#define SET_RX_STATUS__DESC_BUFF_ADDR(__pdesc, __val) \
491 SET_BITS_OFFSET_LE(__pdesc + 24, 0, 32, __val) 460 SET_BITS_OFFSET_LE(__pdesc + 24, 0, 32, __val)
492 461
493#define RX_HAL_IS_CCK_RATE(_pdesc)\ 462#define SE_RX_HAL_IS_CCK_RATE(_pdesc)\
494 (GET_RX_STATUS_DESC_RX_MCS(_pdesc) == DESC92S_RATE1M || \ 463 (GET_RX_STATUS_DESC_RX_MCS(_pdesc) == DESC92_RATE1M || \
495 GET_RX_STATUS_DESC_RX_MCS(_pdesc) == DESC92S_RATE2M || \ 464 GET_RX_STATUS_DESC_RX_MCS(_pdesc) == DESC92_RATE2M || \
496 GET_RX_STATUS_DESC_RX_MCS(_pdesc) == DESC92S_RATE5_5M ||\ 465 GET_RX_STATUS_DESC_RX_MCS(_pdesc) == DESC92_RATE5_5M ||\
497 GET_RX_STATUS_DESC_RX_MCS(_pdesc) == DESC92S_RATE11M) 466 GET_RX_STATUS_DESC_RX_MCS(_pdesc) == DESC92_RATE11M)
498 467
499enum rf_optype { 468enum rf_optype {
500 RF_OP_BY_SW_3WIRE = 0, 469 RF_OP_BY_SW_3WIRE = 0,
diff --git a/drivers/net/wireless/rtlwifi/rtl8192se/hw.c b/drivers/net/wireless/rtlwifi/rtl8192se/hw.c
index d59f66cb776..c474486e391 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 ea32ef2d409..11f125c030c 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 3876078a63d..3ec9a0d41ba 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192se/sw.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192se/sw.c
@@ -160,10 +160,16 @@ 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;
166 rtlpriv->psc.fwctrl_lps = rtlpriv->cfg->mod_params->fwctrl_lps; 168 rtlpriv->psc.fwctrl_lps = rtlpriv->cfg->mod_params->fwctrl_lps;
169 if (!rtlpriv->psc.inactiveps)
170 pr_info("rtl8192ce: Power Save off (module option)\n");
171 if (!rtlpriv->psc.fwctrl_lps)
172 pr_info("rtl8192ce: FW Power Save off (module option)\n");
167 rtlpriv->psc.reg_fwctrl_lps = 3; 173 rtlpriv->psc.reg_fwctrl_lps = 3;
168 rtlpriv->psc.reg_max_lps_awakeintvl = 5; 174 rtlpriv->psc.reg_max_lps_awakeintvl = 5;
169 /* for ASPM, you can close aspm through 175 /* for ASPM, you can close aspm through
@@ -268,6 +274,7 @@ static struct rtl_mod_params rtl92se_mod_params = {
268 .inactiveps = true, 274 .inactiveps = true,
269 .swctrl_lps = true, 275 .swctrl_lps = true,
270 .fwctrl_lps = false, 276 .fwctrl_lps = false,
277 .debug = DBG_EMERG,
271}; 278};
272 279
273/* Because memory R/W bursting will cause system hang/crash 280/* Because memory R/W bursting will cause system hang/crash
@@ -300,6 +307,7 @@ static struct rtl_hal_cfg rtl92se_hal_cfg = {
300 .maps[EFUSE_HWSET_MAX_SIZE] = HWSET_MAX_SIZE_92S, 307 .maps[EFUSE_HWSET_MAX_SIZE] = HWSET_MAX_SIZE_92S,
301 .maps[EFUSE_MAX_SECTION_MAP] = EFUSE_MAX_SECTION, 308 .maps[EFUSE_MAX_SECTION_MAP] = EFUSE_MAX_SECTION,
302 .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,
303 311
304 .maps[RWCAM] = REG_RWCAM, 312 .maps[RWCAM] = REG_RWCAM,
305 .maps[WCAMI] = REG_WCAMI, 313 .maps[WCAMI] = REG_WCAMI,
@@ -348,21 +356,21 @@ static struct rtl_hal_cfg rtl92se_hal_cfg = {
348 .maps[RTL_IMR_ROK] = IMR_ROK, 356 .maps[RTL_IMR_ROK] = IMR_ROK,
349 .maps[RTL_IBSS_INT_MASKS] = (IMR_BCNINT | IMR_TBDOK | IMR_TBDER), 357 .maps[RTL_IBSS_INT_MASKS] = (IMR_BCNINT | IMR_TBDOK | IMR_TBDER),
350 358
351 .maps[RTL_RC_CCK_RATE1M] = DESC92S_RATE1M, 359 .maps[RTL_RC_CCK_RATE1M] = DESC92_RATE1M,
352 .maps[RTL_RC_CCK_RATE2M] = DESC92S_RATE2M, 360 .maps[RTL_RC_CCK_RATE2M] = DESC92_RATE2M,
353 .maps[RTL_RC_CCK_RATE5_5M] = DESC92S_RATE5_5M, 361 .maps[RTL_RC_CCK_RATE5_5M] = DESC92_RATE5_5M,
354 .maps[RTL_RC_CCK_RATE11M] = DESC92S_RATE11M, 362 .maps[RTL_RC_CCK_RATE11M] = DESC92_RATE11M,
355 .maps[RTL_RC_OFDM_RATE6M] = DESC92S_RATE6M, 363 .maps[RTL_RC_OFDM_RATE6M] = DESC92_RATE6M,
356 .maps[RTL_RC_OFDM_RATE9M] = DESC92S_RATE9M, 364 .maps[RTL_RC_OFDM_RATE9M] = DESC92_RATE9M,
357 .maps[RTL_RC_OFDM_RATE12M] = DESC92S_RATE12M, 365 .maps[RTL_RC_OFDM_RATE12M] = DESC92_RATE12M,
358 .maps[RTL_RC_OFDM_RATE18M] = DESC92S_RATE18M, 366 .maps[RTL_RC_OFDM_RATE18M] = DESC92_RATE18M,
359 .maps[RTL_RC_OFDM_RATE24M] = DESC92S_RATE24M, 367 .maps[RTL_RC_OFDM_RATE24M] = DESC92_RATE24M,
360 .maps[RTL_RC_OFDM_RATE36M] = DESC92S_RATE36M, 368 .maps[RTL_RC_OFDM_RATE36M] = DESC92_RATE36M,
361 .maps[RTL_RC_OFDM_RATE48M] = DESC92S_RATE48M, 369 .maps[RTL_RC_OFDM_RATE48M] = DESC92_RATE48M,
362 .maps[RTL_RC_OFDM_RATE54M] = DESC92S_RATE54M, 370 .maps[RTL_RC_OFDM_RATE54M] = DESC92_RATE54M,
363 371
364 .maps[RTL_RC_HT_RATEMCS7] = DESC92S_RATEMCS7, 372 .maps[RTL_RC_HT_RATEMCS7] = DESC92_RATEMCS7,
365 .maps[RTL_RC_HT_RATEMCS15] = DESC92S_RATEMCS15, 373 .maps[RTL_RC_HT_RATEMCS15] = DESC92_RATEMCS15,
366}; 374};
367 375
368static struct pci_device_id rtl92se_pci_ids[] __devinitdata = { 376static struct pci_device_id rtl92se_pci_ids[] __devinitdata = {
@@ -378,31 +386,37 @@ MODULE_DEVICE_TABLE(pci, rtl92se_pci_ids);
378 386
379MODULE_AUTHOR("lizhaoming <chaoming_li@realsil.com.cn>"); 387MODULE_AUTHOR("lizhaoming <chaoming_li@realsil.com.cn>");
380MODULE_AUTHOR("Realtek WlanFAE <wlanfae@realtek.com>"); 388MODULE_AUTHOR("Realtek WlanFAE <wlanfae@realtek.com>");
389MODULE_AUTHOR("Larry Finger <Larry.Finger@lwfinger.net>");
381MODULE_LICENSE("GPL"); 390MODULE_LICENSE("GPL");
382MODULE_DESCRIPTION("Realtek 8192S/8191S 802.11n PCI wireless"); 391MODULE_DESCRIPTION("Realtek 8192S/8191S 802.11n PCI wireless");
383MODULE_FIRMWARE("rtlwifi/rtl8192sefw.bin"); 392MODULE_FIRMWARE("rtlwifi/rtl8192sefw.bin");
384 393
385module_param_named(swenc, rtl92se_mod_params.sw_crypto, bool, 0444); 394module_param_named(swenc, rtl92se_mod_params.sw_crypto, bool, 0444);
395module_param_named(debug, rtl92se_mod_params.debug, int, 0444);
386module_param_named(ips, rtl92se_mod_params.inactiveps, bool, 0444); 396module_param_named(ips, rtl92se_mod_params.inactiveps, bool, 0444);
387module_param_named(swlps, rtl92se_mod_params.swctrl_lps, bool, 0444); 397module_param_named(swlps, rtl92se_mod_params.swctrl_lps, bool, 0444);
388module_param_named(fwlps, rtl92se_mod_params.fwctrl_lps, bool, 0444); 398module_param_named(fwlps, rtl92se_mod_params.fwctrl_lps, bool, 0444);
389MODULE_PARM_DESC(swenc, "using hardware crypto (default 0 [hardware])\n"); 399MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n");
390MODULE_PARM_DESC(ips, "using no link power save (default 1 is open)\n"); 400MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n");
391MODULE_PARM_DESC(swlps, "using linked sw control power save (default 1 is " 401MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n");
392 "open)\n"); 402MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n");
403MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
393 404
405static 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};
394 413
395static struct pci_driver rtl92se_driver = { 414static struct pci_driver rtl92se_driver = {
396 .name = KBUILD_MODNAME, 415 .name = KBUILD_MODNAME,
397 .id_table = rtl92se_pci_ids, 416 .id_table = rtl92se_pci_ids,
398 .probe = rtl_pci_probe, 417 .probe = rtl_pci_probe,
399 .remove = rtl_pci_disconnect, 418 .remove = rtl_pci_disconnect,
400 419 .driver.pm = &rtlwifi_pm_ops,
401#ifdef CONFIG_PM
402 .suspend = rtl_pci_suspend,
403 .resume = rtl_pci_resume,
404#endif
405
406}; 420};
407 421
408static int __init rtl92se_module_init(void) 422static 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 cffe30851f7..fbebe3ea0a2 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192se/trx.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192se/trx.c
@@ -51,104 +51,6 @@ static u8 _rtl92se_map_hwqueue_to_fwqueue(struct sk_buff *skb, u8 skb_queue)
51 return skb->priority; 51 return skb->priority;
52} 52}
53 53
54static int _rtl92se_rate_mapping(bool isht, u8 desc_rate, bool first_ampdu)
55{
56 int rate_idx = 0;
57
58 if (first_ampdu) {
59 if (false == isht) {
60 switch (desc_rate) {
61 case DESC92S_RATE1M:
62 rate_idx = 0;
63 break;
64 case DESC92S_RATE2M:
65 rate_idx = 1;
66 break;
67 case DESC92S_RATE5_5M:
68 rate_idx = 2;
69 break;
70 case DESC92S_RATE11M:
71 rate_idx = 3;
72 break;
73 case DESC92S_RATE6M:
74 rate_idx = 4;
75 break;
76 case DESC92S_RATE9M:
77 rate_idx = 5;
78 break;
79 case DESC92S_RATE12M:
80 rate_idx = 6;
81 break;
82 case DESC92S_RATE18M:
83 rate_idx = 7;
84 break;
85 case DESC92S_RATE24M:
86 rate_idx = 8;
87 break;
88 case DESC92S_RATE36M:
89 rate_idx = 9;
90 break;
91 case DESC92S_RATE48M:
92 rate_idx = 10;
93 break;
94 case DESC92S_RATE54M:
95 rate_idx = 11;
96 break;
97 default:
98 rate_idx = 0;
99 break;
100 }
101 } else {
102 rate_idx = 11;
103 }
104
105 return rate_idx;
106 }
107
108 switch (desc_rate) {
109 case DESC92S_RATE1M:
110 rate_idx = 0;
111 break;
112 case DESC92S_RATE2M:
113 rate_idx = 1;
114 break;
115 case DESC92S_RATE5_5M:
116 rate_idx = 2;
117 break;
118 case DESC92S_RATE11M:
119 rate_idx = 3;
120 break;
121 case DESC92S_RATE6M:
122 rate_idx = 4;
123 break;
124 case DESC92S_RATE9M:
125 rate_idx = 5;
126 break;
127 case DESC92S_RATE12M:
128 rate_idx = 6;
129 break;
130 case DESC92S_RATE18M:
131 rate_idx = 7;
132 break;
133 case DESC92S_RATE24M:
134 rate_idx = 8;
135 break;
136 case DESC92S_RATE36M:
137 rate_idx = 9;
138 break;
139 case DESC92S_RATE48M:
140 rate_idx = 10;
141 break;
142 case DESC92S_RATE54M:
143 rate_idx = 11;
144 break;
145 default:
146 rate_idx = 11;
147 break;
148 }
149 return rate_idx;
150}
151
152static u8 _rtl92s_query_rxpwrpercentage(char antpower) 54static u8 _rtl92s_query_rxpwrpercentage(char antpower)
153{ 55{
154 if ((antpower <= -100) || (antpower >= 20)) 56 if ((antpower <= -100) || (antpower >= 20))
@@ -222,18 +124,15 @@ static void _rtl92se_query_rxphystatus(struct ieee80211_hw *hw,
222 u8 i, max_spatial_stream; 124 u8 i, max_spatial_stream;
223 u32 rssi, total_rssi = 0; 125 u32 rssi, total_rssi = 0;
224 bool in_powersavemode = false; 126 bool in_powersavemode = false;
225 bool is_cck_rate; 127 bool is_cck = pstats->is_cck;
226 128
227 is_cck_rate = RX_HAL_IS_CCK_RATE(pdesc);
228 pstats->packet_matchbssid = packet_match_bssid; 129 pstats->packet_matchbssid = packet_match_bssid;
229 pstats->packet_toself = packet_toself; 130 pstats->packet_toself = packet_toself;
230 pstats->is_cck = is_cck_rate;
231 pstats->packet_beacon = packet_beacon; 131 pstats->packet_beacon = packet_beacon;
232 pstats->is_cck = is_cck_rate;
233 pstats->rx_mimo_signalquality[0] = -1; 132 pstats->rx_mimo_signalquality[0] = -1;
234 pstats->rx_mimo_signalquality[1] = -1; 133 pstats->rx_mimo_signalquality[1] = -1;
235 134
236 if (is_cck_rate) { 135 if (is_cck) {
237 u8 report, cck_highpwr; 136 u8 report, cck_highpwr;
238 cck_buf = (struct phy_sts_cck_8192s_t *)p_drvinfo; 137 cck_buf = (struct phy_sts_cck_8192s_t *)p_drvinfo;
239 138
@@ -344,9 +243,8 @@ static void _rtl92se_query_rxphystatus(struct ieee80211_hw *hw,
344 pstats->rxpower = rx_pwr_all; 243 pstats->rxpower = rx_pwr_all;
345 pstats->recvsignalpower = rx_pwr_all; 244 pstats->recvsignalpower = rx_pwr_all;
346 245
347 if (GET_RX_STATUS_DESC_RX_HT(pdesc) && 246 if (pstats->is_ht && pstats->rate >= DESC92_RATEMCS8 &&
348 GET_RX_STATUS_DESC_RX_MCS(pdesc) >= DESC92S_RATEMCS8 && 247 pstats->rate <= DESC92_RATEMCS15)
349 GET_RX_STATUS_DESC_RX_MCS(pdesc) <= DESC92S_RATEMCS15)
350 max_spatial_stream = 2; 248 max_spatial_stream = 2;
351 else 249 else
352 max_spatial_stream = 1; 250 max_spatial_stream = 1;
@@ -364,7 +262,7 @@ static void _rtl92se_query_rxphystatus(struct ieee80211_hw *hw,
364 } 262 }
365 } 263 }
366 264
367 if (is_cck_rate) 265 if (is_cck)
368 pstats->signalstrength = (u8)(_rtl92se_signal_scale_mapping(hw, 266 pstats->signalstrength = (u8)(_rtl92se_signal_scale_mapping(hw,
369 pwdb_all)); 267 pwdb_all));
370 else if (rf_rx_num != 0) 268 else if (rf_rx_num != 0)
@@ -616,6 +514,8 @@ bool rtl92se_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats,
616{ 514{
617 struct rx_fwinfo *p_drvinfo; 515 struct rx_fwinfo *p_drvinfo;
618 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;
619 519
620 stats->length = (u16)GET_RX_STATUS_DESC_PKT_LEN(pdesc); 520 stats->length = (u16)GET_RX_STATUS_DESC_PKT_LEN(pdesc);
621 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;
@@ -628,8 +528,12 @@ bool rtl92se_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats,
628 stats->rate = (u8)GET_RX_STATUS_DESC_RX_MCS(pdesc); 528 stats->rate = (u8)GET_RX_STATUS_DESC_RX_MCS(pdesc);
629 stats->shortpreamble = (u16)GET_RX_STATUS_DESC_SPLCP(pdesc); 529 stats->shortpreamble = (u16)GET_RX_STATUS_DESC_SPLCP(pdesc);
630 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));
631 stats->timestamp_low = GET_RX_STATUS_DESC_TSFL(pdesc); 533 stats->timestamp_low = GET_RX_STATUS_DESC_TSFL(pdesc);
632 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);
633 537
634 if (stats->hwerror) 538 if (stats->hwerror)
635 return false; 539 return false;
@@ -637,30 +541,39 @@ bool rtl92se_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats,
637 rx_status->freq = hw->conf.channel->center_freq; 541 rx_status->freq = hw->conf.channel->center_freq;
638 rx_status->band = hw->conf.channel->band; 542 rx_status->band = hw->conf.channel->band;
639 543
640 if (GET_RX_STATUS_DESC_CRC32(pdesc)) 544 hdr = (struct ieee80211_hdr *)(skb->data + stats->rx_drvinfo_size
641 rx_status->flag |= RX_FLAG_FAILED_FCS_CRC; 545 + stats->rx_bufshift);
642 546
643 if (!GET_RX_STATUS_DESC_SWDEC(pdesc)) 547 if (stats->crc)
644 rx_status->flag |= RX_FLAG_DECRYPTED; 548 rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
645 549
646 if (GET_RX_STATUS_DESC_BW(pdesc)) 550 if (stats->rx_is40Mhzpacket)
647 rx_status->flag |= RX_FLAG_40MHZ; 551 rx_status->flag |= RX_FLAG_40MHZ;
648 552
649 if (GET_RX_STATUS_DESC_RX_HT(pdesc)) 553 if (stats->is_ht)
650 rx_status->flag |= RX_FLAG_HT; 554 rx_status->flag |= RX_FLAG_HT;
651 555
652 rx_status->flag |= RX_FLAG_MACTIME_MPDU; 556 rx_status->flag |= RX_FLAG_MACTIME_MPDU;
653 557
654 if (stats->decrypted) 558 /* hw will set stats->decrypted true, if it finds the
655 rx_status->flag |= RX_FLAG_DECRYPTED; 559 * frame is open data frame or mgmt frame,
656 560 * hw will not decrypt robust managment frame
657 rx_status->rate_idx = _rtl92se_rate_mapping((bool) 561 * for IEEE80211w but still set stats->decrypted
658 GET_RX_STATUS_DESC_RX_HT(pdesc), 562 * true, so here we should set it back to undecrypted
659 (u8)GET_RX_STATUS_DESC_RX_MCS(pdesc), 563 * for IEEE80211w frame, and mac80211 sw will help
660 (bool)GET_RX_STATUS_DESC_PAGGR(pdesc)); 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 }
661 572
573 rx_status->rate_idx = rtlwifi_rate_mapping(hw,
574 stats->is_ht, stats->rate, first_ampdu);
662 575
663 rx_status->mactime = GET_RX_STATUS_DESC_TSFL(pdesc); 576 rx_status->mactime = stats->timestamp_low;
664 if (phystatus) { 577 if (phystatus) {
665 p_drvinfo = (struct rx_fwinfo *)(skb->data + 578 p_drvinfo = (struct rx_fwinfo *)(skb->data +
666 stats->rx_bufshift); 579 stats->rx_bufshift);
@@ -723,14 +636,14 @@ void rtl92se_tx_fill_desc(struct ieee80211_hw *hw,
723 SET_TX_DESC_RSVD_MACID(pdesc, reserved_macid); 636 SET_TX_DESC_RSVD_MACID(pdesc, reserved_macid);
724 637
725 SET_TX_DESC_TXHT(pdesc, ((ptcb_desc->hw_rate >= 638 SET_TX_DESC_TXHT(pdesc, ((ptcb_desc->hw_rate >=
726 DESC92S_RATEMCS0) ? 1 : 0)); 639 DESC92_RATEMCS0) ? 1 : 0));
727 640
728 if (rtlhal->version == VERSION_8192S_ACUT) { 641 if (rtlhal->version == VERSION_8192S_ACUT) {
729 if (ptcb_desc->hw_rate == DESC92S_RATE1M || 642 if (ptcb_desc->hw_rate == DESC92_RATE1M ||
730 ptcb_desc->hw_rate == DESC92S_RATE2M || 643 ptcb_desc->hw_rate == DESC92_RATE2M ||
731 ptcb_desc->hw_rate == DESC92S_RATE5_5M || 644 ptcb_desc->hw_rate == DESC92_RATE5_5M ||
732 ptcb_desc->hw_rate == DESC92S_RATE11M) { 645 ptcb_desc->hw_rate == DESC92_RATE11M) {
733 ptcb_desc->hw_rate = DESC92S_RATE12M; 646 ptcb_desc->hw_rate = DESC92_RATE12M;
734 } 647 }
735 } 648 }
736 649
@@ -759,7 +672,7 @@ void rtl92se_tx_fill_desc(struct ieee80211_hw *hw,
759 SET_TX_DESC_RTS_BANDWIDTH(pdesc, 0); 672 SET_TX_DESC_RTS_BANDWIDTH(pdesc, 0);
760 SET_TX_DESC_RTS_SUB_CARRIER(pdesc, ptcb_desc->rts_sc); 673 SET_TX_DESC_RTS_SUB_CARRIER(pdesc, ptcb_desc->rts_sc);
761 SET_TX_DESC_RTS_SHORT(pdesc, ((ptcb_desc->rts_rate <= 674 SET_TX_DESC_RTS_SHORT(pdesc, ((ptcb_desc->rts_rate <=
762 DESC92S_RATE54M) ? 675 DESC92_RATE54M) ?
763 (ptcb_desc->rts_use_shortpreamble ? 1 : 0) 676 (ptcb_desc->rts_use_shortpreamble ? 1 : 0)
764 : (ptcb_desc->rts_use_shortgi ? 1 : 0))); 677 : (ptcb_desc->rts_use_shortgi ? 1 : 0)));
765 678
diff --git a/drivers/net/wireless/rtlwifi/usb.c b/drivers/net/wireless/rtlwifi/usb.c
index 4bf3cf457ef..b42c2e2b205 100644
--- a/drivers/net/wireless/rtlwifi/usb.c
+++ b/drivers/net/wireless/rtlwifi/usb.c
@@ -191,44 +191,6 @@ static void _usb_write32_async(struct rtl_priv *rtlpriv, u32 addr, u32 val)
191 _usb_write_async(to_usb_device(dev), addr, val, 4); 191 _usb_write_async(to_usb_device(dev), addr, val, 4);
192} 192}
193 193
194static int _usb_nbytes_read_write(struct usb_device *udev, bool read, u32 addr,
195 u16 len, u8 *pdata)
196{
197 int status;
198 u8 request;
199 u16 wvalue;
200 u16 index;
201
202 request = REALTEK_USB_VENQT_CMD_REQ;
203 index = REALTEK_USB_VENQT_CMD_IDX; /* n/a */
204 wvalue = (u16)addr;
205 if (read)
206 status = _usbctrl_vendorreq_sync_read(udev, request, wvalue,
207 index, pdata, len);
208 else
209 status = _usbctrl_vendorreq_async_write(udev, request, wvalue,
210 index, pdata, len);
211 return status;
212}
213
214static int _usb_readN_sync(struct rtl_priv *rtlpriv, u32 addr, u16 len,
215 u8 *pdata)
216{
217 struct device *dev = rtlpriv->io.dev;
218
219 return _usb_nbytes_read_write(to_usb_device(dev), true, addr, len,
220 pdata);
221}
222
223static int _usb_writeN_async(struct rtl_priv *rtlpriv, u32 addr, u16 len,
224 u8 *pdata)
225{
226 struct device *dev = rtlpriv->io.dev;
227
228 return _usb_nbytes_read_write(to_usb_device(dev), false, addr, len,
229 pdata);
230}
231
232static void _rtl_usb_io_handler_init(struct device *dev, 194static void _rtl_usb_io_handler_init(struct device *dev,
233 struct ieee80211_hw *hw) 195 struct ieee80211_hw *hw)
234{ 196{
@@ -239,11 +201,9 @@ static void _rtl_usb_io_handler_init(struct device *dev,
239 rtlpriv->io.write8_async = _usb_write8_async; 201 rtlpriv->io.write8_async = _usb_write8_async;
240 rtlpriv->io.write16_async = _usb_write16_async; 202 rtlpriv->io.write16_async = _usb_write16_async;
241 rtlpriv->io.write32_async = _usb_write32_async; 203 rtlpriv->io.write32_async = _usb_write32_async;
242 rtlpriv->io.writeN_async = _usb_writeN_async;
243 rtlpriv->io.read8_sync = _usb_read8_sync; 204 rtlpriv->io.read8_sync = _usb_read8_sync;
244 rtlpriv->io.read16_sync = _usb_read16_sync; 205 rtlpriv->io.read16_sync = _usb_read16_sync;
245 rtlpriv->io.read32_sync = _usb_read32_sync; 206 rtlpriv->io.read32_sync = _usb_read32_sync;
246 rtlpriv->io.readN_sync = _usb_readN_sync;
247} 207}
248 208
249static void _rtl_usb_io_handler_release(struct ieee80211_hw *hw) 209static void _rtl_usb_io_handler_release(struct ieee80211_hw *hw)
diff --git a/drivers/net/wireless/rtlwifi/wifi.h b/drivers/net/wireless/rtlwifi/wifi.h
index d3c3ffd3898..713c7ddba8e 100644
--- a/drivers/net/wireless/rtlwifi/wifi.h
+++ b/drivers/net/wireless/rtlwifi/wifi.h
@@ -165,6 +165,12 @@ enum hardware_type {
165#define IS_HARDWARE_TYPE_8723U(rtlhal) \ 165#define IS_HARDWARE_TYPE_8723U(rtlhal) \
166 (rtlhal->hw_type == HARDWARE_TYPE_RTL8723U) 166 (rtlhal->hw_type == HARDWARE_TYPE_RTL8723U)
167 167
168#define RX_HAL_IS_CCK_RATE(_pdesc)\
169 (_pdesc->rxmcs == DESC92_RATE1M || \
170 _pdesc->rxmcs == DESC92_RATE2M || \
171 _pdesc->rxmcs == DESC92_RATE5_5M || \
172 _pdesc->rxmcs == DESC92_RATE11M)
173
168enum scan_operation_backup_opt { 174enum scan_operation_backup_opt {
169 SCAN_OPT_BACKUP = 0, 175 SCAN_OPT_BACKUP = 0,
170 SCAN_OPT_RESTORE, 176 SCAN_OPT_RESTORE,
@@ -386,6 +392,41 @@ enum rtl_hal_state {
386 _HAL_STATE_START = 1, 392 _HAL_STATE_START = 1,
387}; 393};
388 394
395enum rtl_desc92_rate {
396 DESC92_RATE1M = 0x00,
397 DESC92_RATE2M = 0x01,
398 DESC92_RATE5_5M = 0x02,
399 DESC92_RATE11M = 0x03,
400
401 DESC92_RATE6M = 0x04,
402 DESC92_RATE9M = 0x05,
403 DESC92_RATE12M = 0x06,
404 DESC92_RATE18M = 0x07,
405 DESC92_RATE24M = 0x08,
406 DESC92_RATE36M = 0x09,
407 DESC92_RATE48M = 0x0a,
408 DESC92_RATE54M = 0x0b,
409
410 DESC92_RATEMCS0 = 0x0c,
411 DESC92_RATEMCS1 = 0x0d,
412 DESC92_RATEMCS2 = 0x0e,
413 DESC92_RATEMCS3 = 0x0f,
414 DESC92_RATEMCS4 = 0x10,
415 DESC92_RATEMCS5 = 0x11,
416 DESC92_RATEMCS6 = 0x12,
417 DESC92_RATEMCS7 = 0x13,
418 DESC92_RATEMCS8 = 0x14,
419 DESC92_RATEMCS9 = 0x15,
420 DESC92_RATEMCS10 = 0x16,
421 DESC92_RATEMCS11 = 0x17,
422 DESC92_RATEMCS12 = 0x18,
423 DESC92_RATEMCS13 = 0x19,
424 DESC92_RATEMCS14 = 0x1a,
425 DESC92_RATEMCS15 = 0x1b,
426 DESC92_RATEMCS15_SG = 0x1c,
427 DESC92_RATEMCS32 = 0x20,
428};
429
389enum rtl_var_map { 430enum rtl_var_map {
390 /*reg map */ 431 /*reg map */
391 SYS_ISO_CTRL = 0, 432 SYS_ISO_CTRL = 0,
@@ -409,6 +450,7 @@ enum rtl_var_map {
409 EFUSE_HWSET_MAX_SIZE, 450 EFUSE_HWSET_MAX_SIZE,
410 EFUSE_MAX_SECTION_MAP, 451 EFUSE_MAX_SECTION_MAP,
411 EFUSE_REAL_CONTENT_SIZE, 452 EFUSE_REAL_CONTENT_SIZE,
453 EFUSE_OOB_PROTECT_BYTES_LEN,
412 454
413 /*CAM map */ 455 /*CAM map */
414 RWCAM, 456 RWCAM,
@@ -901,16 +943,12 @@ struct rtl_io {
901 unsigned long pci_base_addr; /*device I/O address */ 943 unsigned long pci_base_addr; /*device I/O address */
902 944
903 void (*write8_async) (struct rtl_priv *rtlpriv, u32 addr, u8 val); 945 void (*write8_async) (struct rtl_priv *rtlpriv, u32 addr, u8 val);
904 void (*write16_async) (struct rtl_priv *rtlpriv, u32 addr, u16 val); 946 void (*write16_async) (struct rtl_priv *rtlpriv, u32 addr, __le16 val);
905 void (*write32_async) (struct rtl_priv *rtlpriv, u32 addr, u32 val); 947 void (*write32_async) (struct rtl_priv *rtlpriv, u32 addr, __le32 val);
906 int (*writeN_async) (struct rtl_priv *rtlpriv, u32 addr, u16 len,
907 u8 *pdata);
908 948
909 u8(*read8_sync) (struct rtl_priv *rtlpriv, u32 addr); 949 u8(*read8_sync) (struct rtl_priv *rtlpriv, u32 addr);
910 u16(*read16_sync) (struct rtl_priv *rtlpriv, u32 addr); 950 u16(*read16_sync) (struct rtl_priv *rtlpriv, u32 addr);
911 u32(*read32_sync) (struct rtl_priv *rtlpriv, u32 addr); 951 u32(*read32_sync) (struct rtl_priv *rtlpriv, u32 addr);
912 int (*readN_sync) (struct rtl_priv *rtlpriv, u32 addr, u16 len,
913 u8 *pdata);
914 952
915}; 953};
916 954
@@ -1287,6 +1325,7 @@ struct rtl_stats {
1287 s8 rx_mimo_signalquality[2]; 1325 s8 rx_mimo_signalquality[2];
1288 bool packet_matchbssid; 1326 bool packet_matchbssid;
1289 bool is_cck; 1327 bool is_cck;
1328 bool is_ht;
1290 bool packet_toself; 1329 bool packet_toself;
1291 bool packet_beacon; /*for rssi */ 1330 bool packet_beacon; /*for rssi */
1292 char cck_adc_pwdb[4]; /*for rx path selection */ 1331 char cck_adc_pwdb[4]; /*for rx path selection */
@@ -1448,6 +1487,9 @@ struct rtl_mod_params {
1448 /* default: 0 = using hardware encryption */ 1487 /* default: 0 = using hardware encryption */
1449 int sw_crypto; 1488 int sw_crypto;
1450 1489
1490 /* default: 0 = DBG_EMERG (0)*/
1491 int debug;
1492
1451 /* default: 1 = using no linked power save */ 1493 /* default: 1 = using no linked power save */
1452 bool inactiveps; 1494 bool inactiveps;
1453 1495