diff options
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8723ae/dm.c | 76 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8723ae/dm.h | 6 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8723ae/fw.c | 97 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8723ae/fw.h | 7 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8723ae/hw.c | 36 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8723ae/trx.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/wifi.h | 2 |
7 files changed, 226 insertions, 8 deletions
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/dm.c b/drivers/net/wireless/rtlwifi/rtl8723ae/dm.c index 12e2a3cb0701..f9b746753dbb 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/dm.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/dm.c | |||
@@ -707,6 +707,77 @@ void rtl8723ae_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw) | |||
707 | rtlpriv->dm.useramask = false; | 707 | rtlpriv->dm.useramask = false; |
708 | } | 708 | } |
709 | 709 | ||
710 | static void rtl8723ae_dm_refresh_rate_adaptive_mask(struct ieee80211_hw *hw) | ||
711 | { | ||
712 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
713 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); | ||
714 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); | ||
715 | struct rate_adaptive *p_ra = &(rtlpriv->ra); | ||
716 | u32 low_rssithresh_for_ra, high_rssithresh_for_ra; | ||
717 | struct ieee80211_sta *sta = NULL; | ||
718 | |||
719 | if (is_hal_stop(rtlhal)) { | ||
720 | RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, | ||
721 | " driver is going to unload\n"); | ||
722 | return; | ||
723 | } | ||
724 | |||
725 | if (!rtlpriv->dm.useramask) { | ||
726 | RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, | ||
727 | " driver does not control rate adaptive mask\n"); | ||
728 | return; | ||
729 | } | ||
730 | |||
731 | if (mac->link_state == MAC80211_LINKED && | ||
732 | mac->opmode == NL80211_IFTYPE_STATION) { | ||
733 | switch (p_ra->pre_ratr_state) { | ||
734 | case DM_RATR_STA_HIGH: | ||
735 | high_rssithresh_for_ra = 50; | ||
736 | low_rssithresh_for_ra = 20; | ||
737 | break; | ||
738 | case DM_RATR_STA_MIDDLE: | ||
739 | high_rssithresh_for_ra = 55; | ||
740 | low_rssithresh_for_ra = 20; | ||
741 | break; | ||
742 | case DM_RATR_STA_LOW: | ||
743 | high_rssithresh_for_ra = 50; | ||
744 | low_rssithresh_for_ra = 25; | ||
745 | break; | ||
746 | default: | ||
747 | high_rssithresh_for_ra = 50; | ||
748 | low_rssithresh_for_ra = 20; | ||
749 | break; | ||
750 | } | ||
751 | |||
752 | if (rtlpriv->dm.undec_sm_pwdb > high_rssithresh_for_ra) | ||
753 | p_ra->ratr_state = DM_RATR_STA_HIGH; | ||
754 | else if (rtlpriv->dm.undec_sm_pwdb > low_rssithresh_for_ra) | ||
755 | p_ra->ratr_state = DM_RATR_STA_MIDDLE; | ||
756 | else | ||
757 | p_ra->ratr_state = DM_RATR_STA_LOW; | ||
758 | |||
759 | if (p_ra->pre_ratr_state != p_ra->ratr_state) { | ||
760 | RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, | ||
761 | "RSSI = %ld\n", | ||
762 | rtlpriv->dm.undec_sm_pwdb); | ||
763 | RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, | ||
764 | "RSSI_LEVEL = %d\n", p_ra->ratr_state); | ||
765 | RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, | ||
766 | "PreState = %d, CurState = %d\n", | ||
767 | p_ra->pre_ratr_state, p_ra->ratr_state); | ||
768 | |||
769 | rcu_read_lock(); | ||
770 | sta = rtl_find_sta(hw, mac->bssid); | ||
771 | if (sta) | ||
772 | rtlpriv->cfg->ops->update_rate_tbl(hw, sta, | ||
773 | p_ra->ratr_state); | ||
774 | rcu_read_unlock(); | ||
775 | |||
776 | p_ra->pre_ratr_state = p_ra->ratr_state; | ||
777 | } | ||
778 | } | ||
779 | } | ||
780 | |||
710 | static void rtl8723ae_dm_init_dynamic_bpowersaving(struct ieee80211_hw *hw) | 781 | static void rtl8723ae_dm_init_dynamic_bpowersaving(struct ieee80211_hw *hw) |
711 | { | 782 | { |
712 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 783 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
@@ -853,6 +924,9 @@ void rtl8723ae_dm_watchdog(struct ieee80211_hw *hw) | |||
853 | rtlpriv->cfg->ops->get_hw_reg(hw, HW_VAR_FWLPS_RF_ON, | 924 | rtlpriv->cfg->ops->get_hw_reg(hw, HW_VAR_FWLPS_RF_ON, |
854 | (u8 *) (&fw_ps_awake)); | 925 | (u8 *) (&fw_ps_awake)); |
855 | 926 | ||
927 | if (ppsc->p2p_ps_info.p2p_ps_mode) | ||
928 | fw_ps_awake = false; | ||
929 | |||
856 | if ((ppsc->rfpwr_state == ERFON) && | 930 | if ((ppsc->rfpwr_state == ERFON) && |
857 | ((!fw_current_inpsmode) && fw_ps_awake) && | 931 | ((!fw_current_inpsmode) && fw_ps_awake) && |
858 | (!ppsc->rfchange_inprogress)) { | 932 | (!ppsc->rfchange_inprogress)) { |
@@ -861,7 +935,7 @@ void rtl8723ae_dm_watchdog(struct ieee80211_hw *hw) | |||
861 | rtl8723ae_dm_false_alarm_counter_statistics(hw); | 935 | rtl8723ae_dm_false_alarm_counter_statistics(hw); |
862 | rtl8723ae_dm_dynamic_bpowersaving(hw); | 936 | rtl8723ae_dm_dynamic_bpowersaving(hw); |
863 | rtl8723ae_dm_dynamic_txpower(hw); | 937 | rtl8723ae_dm_dynamic_txpower(hw); |
864 | /* rtl92c_dm_refresh_rate_adaptive_mask(hw); */ | 938 | rtl8723ae_dm_refresh_rate_adaptive_mask(hw); |
865 | rtl8723ae_dm_bt_coexist(hw); | 939 | rtl8723ae_dm_bt_coexist(hw); |
866 | rtl8723ae_dm_check_edca_turbo(hw); | 940 | rtl8723ae_dm_check_edca_turbo(hw); |
867 | } | 941 | } |
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/dm.h b/drivers/net/wireless/rtlwifi/rtl8723ae/dm.h index 39d246196247..a372b0204456 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/dm.h +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/dm.h | |||
@@ -55,7 +55,13 @@ | |||
55 | #define DM_DIG_BACKOFF_MIN -4 | 55 | #define DM_DIG_BACKOFF_MIN -4 |
56 | #define DM_DIG_BACKOFF_DEFAULT 10 | 56 | #define DM_DIG_BACKOFF_DEFAULT 10 |
57 | 57 | ||
58 | #define RXPATHSELECTION_SS_TH_LOW 30 | ||
59 | #define RXPATHSELECTION_DIFF_TH 18 | ||
60 | |||
58 | #define DM_RATR_STA_INIT 0 | 61 | #define DM_RATR_STA_INIT 0 |
62 | #define DM_RATR_STA_HIGH 1 | ||
63 | #define DM_RATR_STA_MIDDLE 2 | ||
64 | #define DM_RATR_STA_LOW 3 | ||
59 | 65 | ||
60 | #define TXHIGHPWRLEVEL_NORMAL 0 | 66 | #define TXHIGHPWRLEVEL_NORMAL 0 |
61 | #define TXHIGHPWRLEVEL_LEVEL1 1 | 67 | #define TXHIGHPWRLEVEL_LEVEL1 1 |
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/fw.c b/drivers/net/wireless/rtlwifi/rtl8723ae/fw.c index 35cb8f83eed4..dedfa1ed3e02 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/fw.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/fw.c | |||
@@ -494,7 +494,9 @@ void rtl8723ae_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode) | |||
494 | RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, "FW LPS mode = %d\n", mode); | 494 | RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, "FW LPS mode = %d\n", mode); |
495 | 495 | ||
496 | SET_H2CCMD_PWRMODE_PARM_MODE(u1_h2c_set_pwrmode, mode); | 496 | SET_H2CCMD_PWRMODE_PARM_MODE(u1_h2c_set_pwrmode, mode); |
497 | SET_H2CCMD_PWRMODE_PARM_SMART_PS(u1_h2c_set_pwrmode, 1); | 497 | SET_H2CCMD_PWRMODE_PARM_SMART_PS(u1_h2c_set_pwrmode, |
498 | (rtlpriv->mac80211.p2p) ? | ||
499 | ppsc->smart_ps : 1); | ||
498 | SET_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(u1_h2c_set_pwrmode, | 500 | SET_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(u1_h2c_set_pwrmode, |
499 | ppsc->reg_max_lps_awakeintvl); | 501 | ppsc->reg_max_lps_awakeintvl); |
500 | 502 | ||
@@ -741,3 +743,96 @@ void rtl8723ae_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus) | |||
741 | 743 | ||
742 | rtl8723ae_fill_h2c_cmd(hw, H2C_JOINBSSRPT, 1, u1_joinbssrpt_parm); | 744 | rtl8723ae_fill_h2c_cmd(hw, H2C_JOINBSSRPT, 1, u1_joinbssrpt_parm); |
743 | } | 745 | } |
746 | |||
747 | static void rtl8723e_set_p2p_ctw_period_cmd(struct ieee80211_hw *hw, | ||
748 | u8 ctwindow) | ||
749 | { | ||
750 | u8 u1_ctwindow_period[1] = {ctwindow}; | ||
751 | |||
752 | rtl8723ae_fill_h2c_cmd(hw, H2C_P2P_PS_CTW_CMD, 1, u1_ctwindow_period); | ||
753 | } | ||
754 | |||
755 | void rtl8723ae_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state) | ||
756 | { | ||
757 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
758 | struct rtl_ps_ctl *rtlps = rtl_psc(rtl_priv(hw)); | ||
759 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); | ||
760 | struct rtl_p2p_ps_info *p2pinfo = &(rtlps->p2p_ps_info); | ||
761 | struct p2p_ps_offload_t *p2p_ps_offload = &rtlhal->p2p_ps_offload; | ||
762 | u8 i; | ||
763 | u16 ctwindow; | ||
764 | u32 start_time, tsf_low; | ||
765 | |||
766 | switch (p2p_ps_state) { | ||
767 | case P2P_PS_DISABLE: | ||
768 | RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_DISABLE\n"); | ||
769 | memset(p2p_ps_offload, 0, sizeof(struct p2p_ps_offload_t)); | ||
770 | break; | ||
771 | case P2P_PS_ENABLE: | ||
772 | RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_ENABLE\n"); | ||
773 | /* update CTWindow value. */ | ||
774 | if (p2pinfo->ctwindow > 0) { | ||
775 | p2p_ps_offload->ctwindow_en = 1; | ||
776 | ctwindow = p2pinfo->ctwindow; | ||
777 | rtl8723e_set_p2p_ctw_period_cmd(hw, ctwindow); | ||
778 | } | ||
779 | |||
780 | /* hw only support 2 set of NoA */ | ||
781 | for (i = 0; i < p2pinfo->noa_num; i++) { | ||
782 | /* To control the register setting for which NOA*/ | ||
783 | rtl_write_byte(rtlpriv, 0x5cf, (i << 4)); | ||
784 | if (i == 0) | ||
785 | p2p_ps_offload->noa0_en = 1; | ||
786 | else | ||
787 | p2p_ps_offload->noa1_en = 1; | ||
788 | |||
789 | /* config P2P NoA Descriptor Register */ | ||
790 | rtl_write_dword(rtlpriv, 0x5E0, | ||
791 | p2pinfo->noa_duration[i]); | ||
792 | rtl_write_dword(rtlpriv, 0x5E4, | ||
793 | p2pinfo->noa_interval[i]); | ||
794 | |||
795 | /*Get Current TSF value */ | ||
796 | tsf_low = rtl_read_dword(rtlpriv, REG_TSFTR); | ||
797 | |||
798 | start_time = p2pinfo->noa_start_time[i]; | ||
799 | if (p2pinfo->noa_count_type[i] != 1) { | ||
800 | while (start_time <= (tsf_low+(50*1024))) { | ||
801 | start_time += p2pinfo->noa_interval[i]; | ||
802 | if (p2pinfo->noa_count_type[i] != 255) | ||
803 | p2pinfo->noa_count_type[i]--; | ||
804 | } | ||
805 | } | ||
806 | rtl_write_dword(rtlpriv, 0x5E8, start_time); | ||
807 | rtl_write_dword(rtlpriv, 0x5EC, | ||
808 | p2pinfo->noa_count_type[i]); | ||
809 | } | ||
810 | if ((p2pinfo->opp_ps == 1) || (p2pinfo->noa_num > 0)) { | ||
811 | /* rst p2p circuit */ | ||
812 | rtl_write_byte(rtlpriv, REG_DUAL_TSF_RST, BIT(4)); | ||
813 | |||
814 | p2p_ps_offload->offload_en = 1; | ||
815 | |||
816 | if (P2P_ROLE_GO == rtlpriv->mac80211.p2p) { | ||
817 | p2p_ps_offload->role = 1; | ||
818 | p2p_ps_offload->allstasleep = 0; | ||
819 | } else { | ||
820 | p2p_ps_offload->role = 0; | ||
821 | } | ||
822 | p2p_ps_offload->discovery = 0; | ||
823 | } | ||
824 | break; | ||
825 | case P2P_PS_SCAN: | ||
826 | RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_SCAN\n"); | ||
827 | p2p_ps_offload->discovery = 1; | ||
828 | break; | ||
829 | case P2P_PS_SCAN_DONE: | ||
830 | RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_SCAN_DONE\n"); | ||
831 | p2p_ps_offload->discovery = 0; | ||
832 | p2pinfo->p2p_ps_state = P2P_PS_ENABLE; | ||
833 | break; | ||
834 | default: | ||
835 | break; | ||
836 | } | ||
837 | rtl8723ae_fill_h2c_cmd(hw, H2C_P2P_PS_OFFLOAD, 1, (u8 *)p2p_ps_offload); | ||
838 | } | ||
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/fw.h b/drivers/net/wireless/rtlwifi/rtl8723ae/fw.h index 89994e16dc83..ed3b795e6980 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/fw.h +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/fw.h | |||
@@ -70,8 +70,10 @@ enum rtl8192c_h2c_cmd { | |||
70 | H2C_SETPWRMODE = 1, | 70 | H2C_SETPWRMODE = 1, |
71 | H2C_JOINBSSRPT = 2, | 71 | H2C_JOINBSSRPT = 2, |
72 | H2C_RSVDPAGE = 3, | 72 | H2C_RSVDPAGE = 3, |
73 | H2C_RSSI_REPORT = 5, | 73 | H2C_RSSI_REPORT = 4, |
74 | H2C_RA_MASK = 6, | 74 | H2C_P2P_PS_CTW_CMD = 5, |
75 | H2C_P2P_PS_OFFLOAD = 6, | ||
76 | H2C_RA_MASK = 7, | ||
75 | MAX_H2CCMD | 77 | MAX_H2CCMD |
76 | }; | 78 | }; |
77 | 79 | ||
@@ -97,5 +99,6 @@ void rtl8723ae_firmware_selfreset(struct ieee80211_hw *hw); | |||
97 | void rtl8723ae_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode); | 99 | void rtl8723ae_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode); |
98 | void rtl8723ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished); | 100 | void rtl8723ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished); |
99 | void rtl8723ae_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus); | 101 | void rtl8723ae_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus); |
102 | void rtl8723ae_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state); | ||
100 | 103 | ||
101 | #endif | 104 | #endif |
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c b/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c index 9a0c71c2e15e..178462261c6f 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/hw.c | |||
@@ -449,6 +449,9 @@ void rtl8723ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val) | |||
449 | rtl8723ae_set_fw_joinbss_report_cmd(hw, (*(u8 *) val)); | 449 | rtl8723ae_set_fw_joinbss_report_cmd(hw, (*(u8 *) val)); |
450 | 450 | ||
451 | break; } | 451 | break; } |
452 | case HW_VAR_H2C_FW_P2P_PS_OFFLOAD: | ||
453 | rtl8723ae_set_p2p_ps_offload_cmd(hw, (*(u8 *)val)); | ||
454 | break; | ||
452 | case HW_VAR_AID:{ | 455 | case HW_VAR_AID:{ |
453 | u16 u2btmp; | 456 | u16 u2btmp; |
454 | u2btmp = rtl_read_word(rtlpriv, REG_BCN_PSR_RPT); | 457 | u2btmp = rtl_read_word(rtlpriv, REG_BCN_PSR_RPT); |
@@ -474,6 +477,39 @@ void rtl8723ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val) | |||
474 | if (btype_ibss == true) | 477 | if (btype_ibss == true) |
475 | _rtl8723ae_resume_tx_beacon(hw); | 478 | _rtl8723ae_resume_tx_beacon(hw); |
476 | break; } | 479 | break; } |
480 | case HW_VAR_FW_LPS_ACTION: { | ||
481 | bool enter_fwlps = *((bool *)val); | ||
482 | u8 rpwm_val, fw_pwrmode; | ||
483 | bool fw_current_inps; | ||
484 | |||
485 | if (enter_fwlps) { | ||
486 | rpwm_val = 0x02; /* RF off */ | ||
487 | fw_current_inps = true; | ||
488 | rtlpriv->cfg->ops->set_hw_reg(hw, | ||
489 | HW_VAR_FW_PSMODE_STATUS, | ||
490 | (u8 *)(&fw_current_inps)); | ||
491 | rtlpriv->cfg->ops->set_hw_reg(hw, | ||
492 | HW_VAR_H2C_FW_PWRMODE, | ||
493 | (u8 *)(&ppsc->fwctrl_psmode)); | ||
494 | |||
495 | rtlpriv->cfg->ops->set_hw_reg(hw, | ||
496 | HW_VAR_SET_RPWM, | ||
497 | (u8 *)(&rpwm_val)); | ||
498 | } else { | ||
499 | rpwm_val = 0x0C; /* RF on */ | ||
500 | fw_pwrmode = FW_PS_ACTIVE_MODE; | ||
501 | fw_current_inps = false; | ||
502 | rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SET_RPWM, | ||
503 | (u8 *)(&rpwm_val)); | ||
504 | rtlpriv->cfg->ops->set_hw_reg(hw, | ||
505 | HW_VAR_H2C_FW_PWRMODE, | ||
506 | (u8 *)(&fw_pwrmode)); | ||
507 | |||
508 | rtlpriv->cfg->ops->set_hw_reg(hw, | ||
509 | HW_VAR_FW_PSMODE_STATUS, | ||
510 | (u8 *)(&fw_current_inps)); | ||
511 | } | ||
512 | break; } | ||
477 | default: | 513 | default: |
478 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, | 514 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, |
479 | "switch case not processed\n"); | 515 | "switch case not processed\n"); |
diff --git a/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c b/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c index ac081297db50..6c64365308d3 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c +++ b/drivers/net/wireless/rtlwifi/rtl8723ae/trx.c | |||
@@ -307,9 +307,6 @@ bool rtl8723ae_rx_query_desc(struct ieee80211_hw *hw, | |||
307 | rx_status->freq = hw->conf.channel->center_freq; | 307 | rx_status->freq = hw->conf.channel->center_freq; |
308 | rx_status->band = hw->conf.channel->band; | 308 | rx_status->band = hw->conf.channel->band; |
309 | 309 | ||
310 | hdr = (struct ieee80211_hdr *)(skb->data + status->rx_drvinfo_size | ||
311 | + status->rx_bufshift); | ||
312 | |||
313 | if (status->crc) | 310 | if (status->crc) |
314 | rx_status->flag |= RX_FLAG_FAILED_FCS_CRC; | 311 | rx_status->flag |= RX_FLAG_FAILED_FCS_CRC; |
315 | 312 | ||
@@ -330,6 +327,13 @@ bool rtl8723ae_rx_query_desc(struct ieee80211_hw *hw, | |||
330 | * to decrypt it | 327 | * to decrypt it |
331 | */ | 328 | */ |
332 | if (status->decrypted) { | 329 | if (status->decrypted) { |
330 | hdr = (struct ieee80211_hdr *)(skb->data + | ||
331 | status->rx_drvinfo_size + status->rx_bufshift); | ||
332 | |||
333 | if (!hdr) { | ||
334 | /* during testing, hdr could be NULL here */ | ||
335 | return false; | ||
336 | } | ||
333 | if ((ieee80211_is_robust_mgmt_frame(hdr)) && | 337 | if ((ieee80211_is_robust_mgmt_frame(hdr)) && |
334 | (ieee80211_has_protected(hdr->frame_control))) | 338 | (ieee80211_has_protected(hdr->frame_control))) |
335 | rx_status->flag &= ~RX_FLAG_DECRYPTED; | 339 | rx_status->flag &= ~RX_FLAG_DECRYPTED; |
diff --git a/drivers/net/wireless/rtlwifi/wifi.h b/drivers/net/wireless/rtlwifi/wifi.h index 528888d69d2f..7ec95cb1ee1b 100644 --- a/drivers/net/wireless/rtlwifi/wifi.h +++ b/drivers/net/wireless/rtlwifi/wifi.h | |||
@@ -1221,10 +1221,10 @@ struct rtl_hal { | |||
1221 | bool set_fwcmd_inprogress; | 1221 | bool set_fwcmd_inprogress; |
1222 | u8 current_fwcmd_io; | 1222 | u8 current_fwcmd_io; |
1223 | 1223 | ||
1224 | struct p2p_ps_offload_t p2p_ps_offload; | ||
1224 | bool fw_clk_change_in_progress; | 1225 | bool fw_clk_change_in_progress; |
1225 | bool allow_sw_to_change_hwclc; | 1226 | bool allow_sw_to_change_hwclc; |
1226 | u8 fw_ps_state; | 1227 | u8 fw_ps_state; |
1227 | struct p2p_ps_offload_t p2p_ps_offload; | ||
1228 | /**/ | 1228 | /**/ |
1229 | bool driver_going2unload; | 1229 | bool driver_going2unload; |
1230 | 1230 | ||