diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/mvm/rx.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/rx.c | 45 |
1 files changed, 4 insertions, 41 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/rx.c b/drivers/net/wireless/iwlwifi/mvm/rx.c index 6061553a5e44..cf7276967acd 100644 --- a/drivers/net/wireless/iwlwifi/mvm/rx.c +++ b/drivers/net/wireless/iwlwifi/mvm/rx.c | |||
@@ -60,7 +60,6 @@ | |||
60 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 60 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
61 | *****************************************************************************/ | 61 | *****************************************************************************/ |
62 | #include "iwl-trans.h" | 62 | #include "iwl-trans.h" |
63 | |||
64 | #include "mvm.h" | 63 | #include "mvm.h" |
65 | #include "fw-api.h" | 64 | #include "fw-api.h" |
66 | 65 | ||
@@ -130,42 +129,7 @@ static void iwl_mvm_pass_packet_to_mac80211(struct iwl_mvm *mvm, | |||
130 | 129 | ||
131 | memcpy(IEEE80211_SKB_RXCB(skb), stats, sizeof(*stats)); | 130 | memcpy(IEEE80211_SKB_RXCB(skb), stats, sizeof(*stats)); |
132 | 131 | ||
133 | ieee80211_rx_ni(mvm->hw, skb); | 132 | ieee80211_rx(mvm->hw, skb); |
134 | } | ||
135 | |||
136 | static void iwl_mvm_calc_rssi(struct iwl_mvm *mvm, | ||
137 | struct iwl_rx_phy_info *phy_info, | ||
138 | struct ieee80211_rx_status *rx_status) | ||
139 | { | ||
140 | int rssi_a, rssi_b, rssi_a_dbm, rssi_b_dbm, max_rssi_dbm; | ||
141 | u32 agc_a, agc_b; | ||
142 | u32 val; | ||
143 | |||
144 | val = le32_to_cpu(phy_info->non_cfg_phy[IWL_RX_INFO_AGC_IDX]); | ||
145 | agc_a = (val & IWL_OFDM_AGC_A_MSK) >> IWL_OFDM_AGC_A_POS; | ||
146 | agc_b = (val & IWL_OFDM_AGC_B_MSK) >> IWL_OFDM_AGC_B_POS; | ||
147 | |||
148 | val = le32_to_cpu(phy_info->non_cfg_phy[IWL_RX_INFO_RSSI_AB_IDX]); | ||
149 | rssi_a = (val & IWL_OFDM_RSSI_INBAND_A_MSK) >> IWL_OFDM_RSSI_A_POS; | ||
150 | rssi_b = (val & IWL_OFDM_RSSI_INBAND_B_MSK) >> IWL_OFDM_RSSI_B_POS; | ||
151 | |||
152 | /* | ||
153 | * dBm = rssi dB - agc dB - constant. | ||
154 | * Higher AGC (higher radio gain) means lower signal. | ||
155 | */ | ||
156 | rssi_a_dbm = rssi_a - IWL_RSSI_OFFSET - agc_a; | ||
157 | rssi_b_dbm = rssi_b - IWL_RSSI_OFFSET - agc_b; | ||
158 | max_rssi_dbm = max_t(int, rssi_a_dbm, rssi_b_dbm); | ||
159 | |||
160 | IWL_DEBUG_STATS(mvm, "Rssi In A %d B %d Max %d AGCA %d AGCB %d\n", | ||
161 | rssi_a_dbm, rssi_b_dbm, max_rssi_dbm, agc_a, agc_b); | ||
162 | |||
163 | rx_status->signal = max_rssi_dbm; | ||
164 | rx_status->chains = (le16_to_cpu(phy_info->phy_flags) & | ||
165 | RX_RES_PHY_FLAGS_ANTENNA) | ||
166 | >> RX_RES_PHY_FLAGS_ANTENNA_POS; | ||
167 | rx_status->chain_signal[0] = rssi_a_dbm; | ||
168 | rx_status->chain_signal[1] = rssi_b_dbm; | ||
169 | } | 133 | } |
170 | 134 | ||
171 | /* | 135 | /* |
@@ -337,10 +301,7 @@ int iwl_mvm_rx_rx_mpdu(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb, | |||
337 | */ | 301 | */ |
338 | /*rx_status.flag |= RX_FLAG_MACTIME_MPDU;*/ | 302 | /*rx_status.flag |= RX_FLAG_MACTIME_MPDU;*/ |
339 | 303 | ||
340 | if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_RX_ENERGY_API) | 304 | iwl_mvm_get_signal_strength(mvm, phy_info, &rx_status); |
341 | iwl_mvm_get_signal_strength(mvm, phy_info, &rx_status); | ||
342 | else | ||
343 | iwl_mvm_calc_rssi(mvm, phy_info, &rx_status); | ||
344 | 305 | ||
345 | IWL_DEBUG_STATS_LIMIT(mvm, "Rssi %d, TSF %llu\n", rx_status.signal, | 306 | IWL_DEBUG_STATS_LIMIT(mvm, "Rssi %d, TSF %llu\n", rx_status.signal, |
346 | (unsigned long long)rx_status.mactime); | 307 | (unsigned long long)rx_status.mactime); |
@@ -394,6 +355,8 @@ int iwl_mvm_rx_rx_mpdu(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb, | |||
394 | rx_status.rate_idx = rate_n_flags & RATE_VHT_MCS_RATE_CODE_MSK; | 355 | rx_status.rate_idx = rate_n_flags & RATE_VHT_MCS_RATE_CODE_MSK; |
395 | rx_status.flag |= RX_FLAG_VHT; | 356 | rx_status.flag |= RX_FLAG_VHT; |
396 | rx_status.flag |= stbc << RX_FLAG_STBC_SHIFT; | 357 | rx_status.flag |= stbc << RX_FLAG_STBC_SHIFT; |
358 | if (rate_n_flags & RATE_MCS_BF_MSK) | ||
359 | rx_status.vht_flag |= RX_VHT_FLAG_BF; | ||
397 | } else { | 360 | } else { |
398 | rx_status.rate_idx = | 361 | rx_status.rate_idx = |
399 | iwl_mvm_legacy_rate_to_mac80211_idx(rate_n_flags, | 362 | iwl_mvm_legacy_rate_to_mac80211_idx(rate_n_flags, |