diff options
Diffstat (limited to 'drivers/net/wireless/rtlwifi')
28 files changed, 591 insertions, 875 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 | */ | ||
690 | int 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 | } | ||
828 | EXPORT_SYMBOL(rtlwifi_rate_mapping); | ||
829 | |||
667 | void rtl_get_tcb_desc(struct ieee80211_hw *hw, | 830 | void 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); | |||
140 | void rtl_recognize_peer(struct ieee80211_hw *hw, u8 *data, unsigned int len); | 140 | void rtl_recognize_peer(struct ieee80211_hw *hw, u8 *data, unsigned int len); |
141 | u8 rtl_tid_to_ac(struct ieee80211_hw *hw, u8 tid); | 141 | u8 rtl_tid_to_ac(struct ieee80211_hw *hw, u8 tid); |
142 | extern struct attribute_group rtl_attribute_group; | 142 | extern struct attribute_group rtl_attribute_group; |
143 | int 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 | */ |
507 | static int rtl_op_conf_tx(struct ieee80211_hw *hw, u16 queue, | 507 | static 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 | ||
778 | static u64 rtl_op_get_tsf(struct ieee80211_hw *hw) | 779 | static 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 | ||
787 | static void rtl_op_set_tsf(struct ieee80211_hw *hw, u64 tsf) | 788 | static 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 | ||
797 | static void rtl_op_reset_tsf(struct ieee80211_hw *hw) | 799 | static 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 56f12358389..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 | ||
336 | static bool rtl_pci_get_amd_l1_patch(struct ieee80211_hw *hw) | 332 | static 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) | |||
364 | static void rtl_pci_get_linkcontrol_field(struct ieee80211_hw *hw) | 353 | static 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 | } |
@@ -488,7 +475,7 @@ static void _rtl_pci_tx_chk_waitq(struct ieee80211_hw *hw) | |||
488 | struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); | 475 | struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); |
489 | struct sk_buff *skb = NULL; | 476 | struct sk_buff *skb = NULL; |
490 | struct ieee80211_tx_info *info = NULL; | 477 | struct ieee80211_tx_info *info = NULL; |
491 | int tid; /* should be int */ | 478 | int tid; |
492 | 479 | ||
493 | if (!rtlpriv->rtlhal.earlymode_enable) | 480 | if (!rtlpriv->rtlhal.earlymode_enable) |
494 | return; | 481 | return; |
@@ -1538,7 +1525,7 @@ static int rtl_pci_start(struct ieee80211_hw *hw) | |||
1538 | 1525 | ||
1539 | rtl_init_rx_config(hw); | 1526 | rtl_init_rx_config(hw); |
1540 | 1527 | ||
1541 | /*should after adapter start and interrupt enable. */ | 1528 | /*should be after adapter start and interrupt enable. */ |
1542 | set_hal_start(rtlhal); | 1529 | set_hal_start(rtlhal); |
1543 | 1530 | ||
1544 | RT_CLEAR_PS_LEVEL(ppsc, RT_RF_OFF_LEVL_HALT_NIC); | 1531 | RT_CLEAR_PS_LEVEL(ppsc, RT_RF_OFF_LEVL_HALT_NIC); |
@@ -1559,7 +1546,7 @@ static void rtl_pci_stop(struct ieee80211_hw *hw) | |||
1559 | u8 RFInProgressTimeOut = 0; | 1546 | u8 RFInProgressTimeOut = 0; |
1560 | 1547 | ||
1561 | /* | 1548 | /* |
1562 | *should before disable interrrupt&adapter | 1549 | *should be before disable interrupt&adapter |
1563 | *and will do it immediately. | 1550 | *and will do it immediately. |
1564 | */ | 1551 | */ |
1565 | set_hal_stop(rtlhal); | 1552 | set_hal_stop(rtlhal); |
@@ -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 | |||
2010 | suspend function first, So there is | 1993 | suspend function first, So there is |
2011 | no need to call hw_disable here. | 1994 | no need to call hw_disable here. |
2012 | ****************************************/ | 1995 | ****************************************/ |
2013 | int rtl_pci_suspend(struct pci_dev *pdev, pm_message_t state) | 1996 | int 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 | } |
2026 | EXPORT_SYMBOL(rtl_pci_suspend); | 2007 | EXPORT_SYMBOL(rtl_pci_suspend); |
2027 | 2008 | ||
2028 | int rtl_pci_resume(struct pci_dev *pdev) | 2009 | int 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; | |||
238 | int __devinit rtl_pci_probe(struct pci_dev *pdev, | 237 | int __devinit rtl_pci_probe(struct pci_dev *pdev, |
239 | const struct pci_device_id *id); | 238 | const struct pci_device_id *id); |
240 | void rtl_pci_disconnect(struct pci_dev *pdev); | 239 | void rtl_pci_disconnect(struct pci_dev *pdev); |
241 | int rtl_pci_suspend(struct pci_dev *pdev, pm_message_t state); | 240 | int rtl_pci_suspend(struct device *dev); |
242 | int rtl_pci_resume(struct pci_dev *pdev); | 241 | int rtl_pci_resume(struct device *dev); |
243 | 242 | ||
244 | static inline u8 pci_read8_sync(struct rtl_priv *rtlpriv, u32 addr) | 243 | static inline u8 pci_read8_sync(struct rtl_priv *rtlpriv, u32 addr) |
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 | ||
276 | static inline void rtl_pci_raw_write_port_ulong(u32 port, u32 val) | ||
277 | { | ||
278 | outl(val, port); | ||
279 | } | ||
280 | |||
281 | static inline void rtl_pci_raw_write_port_uchar(u32 port, u8 val) | ||
282 | { | ||
283 | outb(val, port); | ||
284 | } | ||
285 | |||
286 | static inline void rtl_pci_raw_read_port_uchar(u32 port, u8 *pval) | ||
287 | { | ||
288 | *pval = inb(port); | ||
289 | } | ||
290 | |||
291 | static inline void rtl_pci_raw_read_port_ushort(u32 port, u16 *pval) | ||
292 | { | ||
293 | *pval = inw(port); | ||
294 | } | ||
295 | |||
296 | static 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 | ||
148 | enum rtl819x_loopback_e { | 162 | enum 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 | ||
223 | enum 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 | |||
258 | struct phy_sts_cck_8192s_t { | 237 | struct 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 */ | ||
271 | static 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 | ||
246 | static struct rtl_hal_cfg rtl92ce_hal_cfg = { | 261 | static 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 | ||
338 | DEFINE_PCI_DEVICE_TABLE(rtl92ce_pci_ids) = { | 353 | DEFINE_PCI_DEVICE_TABLE(rtl92ce_pci_ids) = { |
@@ -351,27 +366,35 @@ MODULE_AUTHOR("Larry Finger <Larry.Finger@lwfinger.net>"); | |||
351 | MODULE_LICENSE("GPL"); | 366 | MODULE_LICENSE("GPL"); |
352 | MODULE_DESCRIPTION("Realtek 8192C/8188C 802.11n PCI wireless"); | 367 | MODULE_DESCRIPTION("Realtek 8192C/8188C 802.11n PCI wireless"); |
353 | MODULE_FIRMWARE("rtlwifi/rtl8192cfw.bin"); | 368 | MODULE_FIRMWARE("rtlwifi/rtl8192cfw.bin"); |
369 | MODULE_FIRMWARE("rtlwifi/rtl8192cfwU.bin"); | ||
370 | MODULE_FIRMWARE("rtlwifi/rtl8192cfwU_B.bin"); | ||
354 | 371 | ||
355 | module_param_named(swenc, rtl92ce_mod_params.sw_crypto, bool, 0444); | 372 | module_param_named(swenc, rtl92ce_mod_params.sw_crypto, bool, 0444); |
373 | module_param_named(debug, rtl92ce_mod_params.debug, int, 0444); | ||
356 | module_param_named(ips, rtl92ce_mod_params.inactiveps, bool, 0444); | 374 | module_param_named(ips, rtl92ce_mod_params.inactiveps, bool, 0444); |
357 | module_param_named(swlps, rtl92ce_mod_params.swctrl_lps, bool, 0444); | 375 | module_param_named(swlps, rtl92ce_mod_params.swctrl_lps, bool, 0444); |
358 | module_param_named(fwlps, rtl92ce_mod_params.fwctrl_lps, bool, 0444); | 376 | module_param_named(fwlps, rtl92ce_mod_params.fwctrl_lps, bool, 0444); |
359 | MODULE_PARM_DESC(swenc, "using hardware crypto (default 0 [hardware])\n"); | 377 | MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n"); |
360 | MODULE_PARM_DESC(ips, "using no link power save (default 1 is open)\n"); | 378 | MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n"); |
361 | MODULE_PARM_DESC(fwlps, "using linked fw control power save " | 379 | MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n"); |
362 | "(default 1 is open)\n"); | 380 | MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n"); |
381 | MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)"); | ||
382 | |||
383 | static const struct dev_pm_ops rtlwifi_pm_ops = { | ||
384 | .suspend = rtl_pci_suspend, | ||
385 | .resume = rtl_pci_resume, | ||
386 | .freeze = rtl_pci_suspend, | ||
387 | .thaw = rtl_pci_resume, | ||
388 | .poweroff = rtl_pci_suspend, | ||
389 | .restore = rtl_pci_resume, | ||
390 | }; | ||
363 | 391 | ||
364 | static struct pci_driver rtl92ce_driver = { | 392 | static 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 | ||
377 | static int __init rtl92ce_module_init(void) | 400 | static 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 | ||
51 | static 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 | |||
149 | static u8 _rtl92c_query_rxpwrpercentage(char antpower) | 51 | static 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 | |||
546 | struct rx_fwinfo_92c { | 540 | struct 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 | ||
88 | u32 rtl92c_get_txdma_status(struct ieee80211_hw *hw); | 88 | u32 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 | |||
96 | struct rx_fwinfo_92c { | 90 | struct 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 | ||
150 | static struct rtl_mod_params rtl92cu_mod_params = { | 151 | static struct rtl_mod_params rtl92cu_mod_params = { |
151 | .sw_crypto = 0, | 152 | .sw_crypto = 0, |
153 | .debug = DBG_EMERG, | ||
152 | }; | 154 | }; |
153 | 155 | ||
156 | module_param_named(swenc, rtl92cu_mod_params.sw_crypto, bool, 0444); | ||
157 | module_param_named(debug, rtl92cu_mod_params.debug, int, 0444); | ||
158 | MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n"); | ||
159 | MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)"); | ||
160 | |||
154 | static struct rtl_hal_usbint_cfg rtl92cu_interface_cfg = { | 161 | static struct rtl_hal_usbint_cfg rtl92cu_interface_cfg = { |
155 | /* rx */ | 162 | /* rx */ |
156 | .in_ep_num = RTL92C_USB_BULK_IN_NUM, | 163 | .in_ep_num = RTL92C_USB_BULK_IN_NUM, |
@@ -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 | /* | 125 | enum version_8192d { |
126 | * 92D chip ver: | 126 | VERSION_TEST_CHIP_88C = 0x0000, |
127 | * BIT8: IS 92D | 127 | VERSION_TEST_CHIP_92C = 0x0020, |
128 | * BIT9: single phy | 128 | VERSION_TEST_UMC_CHIP_8723 = 0x0081, |
129 | * BIT10: C-cut | 129 | VERSION_NORMAL_TSMC_CHIP_88C = 0x0008, |
130 | * BIT11: D-cut | 130 | VERSION_NORMAL_TSMC_CHIP_92C = 0x0028, |
131 | */ | 131 | VERSION_NORMAL_TSMC_CHIP_92C_1T2R = 0x0018, |
132 | 132 | VERSION_NORMAL_UMC_CHIP_88C_A_CUT = 0x0088, | |
133 | /* Chip specific */ | 133 | VERSION_NORMAL_UMC_CHIP_92C_A_CUT = 0x00a8, |
134 | #define CHIP_92C BIT(0) | 134 | VERSION_NORMAL_UMC_CHIP_92C_1T2R_A_CUT = 0x0098, |
135 | #define CHIP_92C_1T2R BIT(1) | 135 | VERSION_NORMAL_UMC_CHIP_8723_1T1R_A_CUT = 0x0089, |
136 | #define CHIP_8723 BIT(2) /* RTL8723 With BT feature */ | 136 | VERSION_NORMAL_UMC_CHIP_8723_1T1R_B_CUT = 0x1089, |
137 | #define CHIP_8723_DRV_REV BIT(3) /* RTL8723 Driver Revised */ | 137 | VERSION_NORMAL_UMC_CHIP_88C_B_CUT = 0x1088, |
138 | #define NORMAL_CHIP BIT(4) | 138 | VERSION_NORMAL_UMC_CHIP_92C_B_CUT = 0x10a8, |
139 | #define CHIP_VENDOR_UMC BIT(5) | 139 | VERSION_NORMAL_UMC_CHIP_92C_1T2R_B_CUT = 0x1090, |
140 | #define CHIP_VENDOR_UMC_B_CUT BIT(6) /* Chip version for ECO */ | 140 | VERSION_TEST_CHIP_92D_SINGLEPHY = 0x0022, |
141 | VERSION_TEST_CHIP_92D_DUALPHY = 0x0002, | ||
142 | VERSION_NORMAL_CHIP_92D_SINGLEPHY = 0x002a, | ||
143 | VERSION_NORMAL_CHIP_92D_DUALPHY = 0x000a, | ||
144 | VERSION_NORMAL_CHIP_92D_C_CUT_SINGLEPHY = 0x202a, | ||
145 | VERSION_NORMAL_CHIP_92D_C_CUT_DUALPHY = 0x200a, | ||
146 | VERSION_NORMAL_CHIP_92D_D_CUT_SINGLEPHY = 0x302a, | ||
147 | VERSION_NORMAL_CHIP_92D_D_CUT_DUALPHY = 0x300a, | ||
148 | VERSION_NORMAL_CHIP_92D_E_CUT_SINGLEPHY = 0x402a, | ||
149 | VERSION_NORMAL_CHIP_92D_E_CUT_DUALPHY = 0x400a, | ||
150 | }; | ||
141 | 151 | ||
142 | /* for 92D */ | 152 | /* for 92D */ |
143 | #define CHIP_92D BIT(8) | ||
144 | #define CHIP_92D_SINGLEPHY BIT(9) | 153 | #define CHIP_92D_SINGLEPHY BIT(9) |
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 | ||
148 | enum version_8192d { | ||
149 | VERSION_TEST_CHIP_88C = 0x00, | ||
150 | VERSION_TEST_CHIP_92C = 0x01, | ||
151 | VERSION_NORMAL_TSMC_CHIP_88C = 0x10, | ||
152 | VERSION_NORMAL_TSMC_CHIP_92C = 0x11, | ||
153 | VERSION_NORMAL_TSMC_CHIP_92C_1T2R = 0x13, | ||
154 | VERSION_NORMAL_UMC_CHIP_88C_A_CUT = 0x30, | ||
155 | VERSION_NORMAL_UMC_CHIP_92C_A_CUT = 0x31, | ||
156 | VERSION_NORMAL_UMC_CHIP_92C_1T2R_A_CUT = 0x33, | ||
157 | VERSION_NORMA_UMC_CHIP_8723_1T1R_A_CUT = 0x34, | ||
158 | VERSION_NORMA_UMC_CHIP_8723_1T1R_B_CUT = 0x3c, | ||
159 | VERSION_NORMAL_UMC_CHIP_88C_B_CUT = 0x70, | ||
160 | VERSION_NORMAL_UMC_CHIP_92C_B_CUT = 0x71, | ||
161 | VERSION_NORMAL_UMC_CHIP_92C_1T2R_B_CUT = 0x73, | ||
162 | VERSION_TEST_CHIP_92D_SINGLEPHY = 0x300, | ||
163 | VERSION_TEST_CHIP_92D_DUALPHY = 0x100, | ||
164 | VERSION_NORMAL_CHIP_92D_SINGLEPHY = 0x310, | ||
165 | VERSION_NORMAL_CHIP_92D_DUALPHY = 0x110, | ||
166 | VERSION_NORMAL_CHIP_92D_C_CUT_SINGLEPHY = 0x710, | ||
167 | VERSION_NORMAL_CHIP_92D_C_CUT_DUALPHY = 0x510, | ||
168 | VERSION_NORMAL_CHIP_92D_D_CUT_SINGLEPHY = 0xB10, | ||
169 | VERSION_NORMAL_CHIP_92D_D_CUT_DUALPHY = 0x910, | ||
170 | }; | ||
171 | |||
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 | |||
179 | enum rf_optype { | 218 | enum 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 | ||
196 | enum 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 | |||
231 | enum channel_plan { | 235 | enum 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 | ||
268 | static struct rtl_hal_cfg rtl92de_hal_cfg = { | 275 | static 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 | ||
360 | static struct pci_device_id rtl92de_pci_ids[] __devinitdata = { | 367 | static struct pci_device_id rtl92de_pci_ids[] __devinitdata = { |
@@ -373,25 +380,31 @@ MODULE_DESCRIPTION("Realtek 8192DE 802.11n Dual Mac PCI wireless"); | |||
373 | MODULE_FIRMWARE("rtlwifi/rtl8192defw.bin"); | 380 | MODULE_FIRMWARE("rtlwifi/rtl8192defw.bin"); |
374 | 381 | ||
375 | module_param_named(swenc, rtl92de_mod_params.sw_crypto, bool, 0444); | 382 | module_param_named(swenc, rtl92de_mod_params.sw_crypto, bool, 0444); |
383 | module_param_named(debug, rtl92de_mod_params.debug, int, 0444); | ||
376 | module_param_named(ips, rtl92de_mod_params.inactiveps, bool, 0444); | 384 | module_param_named(ips, rtl92de_mod_params.inactiveps, bool, 0444); |
377 | module_param_named(swlps, rtl92de_mod_params.swctrl_lps, bool, 0444); | 385 | module_param_named(swlps, rtl92de_mod_params.swctrl_lps, bool, 0444); |
378 | module_param_named(fwlps, rtl92de_mod_params.fwctrl_lps, bool, 0444); | 386 | module_param_named(fwlps, rtl92de_mod_params.fwctrl_lps, bool, 0444); |
379 | MODULE_PARM_DESC(swenc, "using hardware crypto (default 0 [hardware])\n"); | 387 | MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n"); |
380 | MODULE_PARM_DESC(ips, "using no link power save (default 1 is open)\n"); | 388 | MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n"); |
381 | MODULE_PARM_DESC(swlps, "using linked sw control power save (default 1" | 389 | MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n"); |
382 | " is open)\n"); | 390 | MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n"); |
391 | MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)"); | ||
392 | |||
393 | static const struct dev_pm_ops rtlwifi_pm_ops = { | ||
394 | .suspend = rtl_pci_suspend, | ||
395 | .resume = rtl_pci_resume, | ||
396 | .freeze = rtl_pci_suspend, | ||
397 | .thaw = rtl_pci_resume, | ||
398 | .poweroff = rtl_pci_suspend, | ||
399 | .restore = rtl_pci_resume, | ||
400 | }; | ||
383 | 401 | ||
384 | static struct pci_driver rtl92de_driver = { | 402 | static 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 | ||
51 | static 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 | |||
144 | static u8 _rtl92d_query_rxpwrpercentage(char antpower) | 51 | static 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 | ||
499 | enum rf_optype { | 468 | enum 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 | ||
368 | static struct pci_device_id rtl92se_pci_ids[] __devinitdata = { | 376 | static struct pci_device_id rtl92se_pci_ids[] __devinitdata = { |
@@ -378,31 +386,37 @@ MODULE_DEVICE_TABLE(pci, rtl92se_pci_ids); | |||
378 | 386 | ||
379 | MODULE_AUTHOR("lizhaoming <chaoming_li@realsil.com.cn>"); | 387 | MODULE_AUTHOR("lizhaoming <chaoming_li@realsil.com.cn>"); |
380 | MODULE_AUTHOR("Realtek WlanFAE <wlanfae@realtek.com>"); | 388 | MODULE_AUTHOR("Realtek WlanFAE <wlanfae@realtek.com>"); |
389 | MODULE_AUTHOR("Larry Finger <Larry.Finger@lwfinger.net>"); | ||
381 | MODULE_LICENSE("GPL"); | 390 | MODULE_LICENSE("GPL"); |
382 | MODULE_DESCRIPTION("Realtek 8192S/8191S 802.11n PCI wireless"); | 391 | MODULE_DESCRIPTION("Realtek 8192S/8191S 802.11n PCI wireless"); |
383 | MODULE_FIRMWARE("rtlwifi/rtl8192sefw.bin"); | 392 | MODULE_FIRMWARE("rtlwifi/rtl8192sefw.bin"); |
384 | 393 | ||
385 | module_param_named(swenc, rtl92se_mod_params.sw_crypto, bool, 0444); | 394 | module_param_named(swenc, rtl92se_mod_params.sw_crypto, bool, 0444); |
395 | module_param_named(debug, rtl92se_mod_params.debug, int, 0444); | ||
386 | module_param_named(ips, rtl92se_mod_params.inactiveps, bool, 0444); | 396 | module_param_named(ips, rtl92se_mod_params.inactiveps, bool, 0444); |
387 | module_param_named(swlps, rtl92se_mod_params.swctrl_lps, bool, 0444); | 397 | module_param_named(swlps, rtl92se_mod_params.swctrl_lps, bool, 0444); |
388 | module_param_named(fwlps, rtl92se_mod_params.fwctrl_lps, bool, 0444); | 398 | module_param_named(fwlps, rtl92se_mod_params.fwctrl_lps, bool, 0444); |
389 | MODULE_PARM_DESC(swenc, "using hardware crypto (default 0 [hardware])\n"); | 399 | MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n"); |
390 | MODULE_PARM_DESC(ips, "using no link power save (default 1 is open)\n"); | 400 | MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n"); |
391 | MODULE_PARM_DESC(swlps, "using linked sw control power save (default 1 is " | 401 | MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n"); |
392 | "open)\n"); | 402 | MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n"); |
403 | MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)"); | ||
393 | 404 | ||
405 | static const struct dev_pm_ops rtlwifi_pm_ops = { | ||
406 | .suspend = rtl_pci_suspend, | ||
407 | .resume = rtl_pci_resume, | ||
408 | .freeze = rtl_pci_suspend, | ||
409 | .thaw = rtl_pci_resume, | ||
410 | .poweroff = rtl_pci_suspend, | ||
411 | .restore = rtl_pci_resume, | ||
412 | }; | ||
394 | 413 | ||
395 | static struct pci_driver rtl92se_driver = { | 414 | static 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 | ||
408 | static int __init rtl92se_module_init(void) | 422 | static int __init rtl92se_module_init(void) |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192se/trx.c b/drivers/net/wireless/rtlwifi/rtl8192se/trx.c index 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 | ||
54 | static 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 | |||
152 | static u8 _rtl92s_query_rxpwrpercentage(char antpower) | 54 | static 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 | ||
194 | static 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 | |||
214 | static 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 | |||
223 | static 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 | |||
232 | static void _rtl_usb_io_handler_init(struct device *dev, | 194 | static 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 | ||
249 | static void _rtl_usb_io_handler_release(struct ieee80211_hw *hw) | 209 | static 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 | |||
168 | enum scan_operation_backup_opt { | 174 | enum 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 | ||
395 | enum 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 | |||
389 | enum rtl_var_map { | 430 | enum 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 | ||