iwlwifi: mvm: track and report IBSS manager status to mac80211
Shaul reported that when iwlmvm was sending beacons, it didn't properly also take ownership of the probe responses. This is because the whole mac80211 callback (tx_last_beacon) wasn't implemented. Fix that to make IBSS discovery work better. Reported-by: Shaul Triebitz <shaul.triebitz@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
f3779f476b
commit
2f0282db41
@ -1457,6 +1457,7 @@ void iwl_mvm_rx_beacon_notif(struct iwl_mvm *mvm,
|
||||
|
||||
beacon_notify_hdr = &beacon->beacon_notify_hdr;
|
||||
mvm->ap_last_beacon_gp2 = le32_to_cpu(beacon->gp2);
|
||||
mvm->ibss_manager = beacon->ibss_mgr_status != 0;
|
||||
|
||||
agg_status = iwl_mvm_get_agg_status(mvm, beacon_notify_hdr);
|
||||
status = le16_to_cpu(agg_status->status) & TX_STATUS_MSK;
|
||||
|
@ -3737,6 +3737,13 @@ static int iwl_mvm_switch_vif_chanctx(struct ieee80211_hw *hw,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int iwl_mvm_tx_last_beacon(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
|
||||
|
||||
return mvm->ibss_manager;
|
||||
}
|
||||
|
||||
static int iwl_mvm_set_tim(struct ieee80211_hw *hw,
|
||||
struct ieee80211_sta *sta,
|
||||
bool set)
|
||||
@ -4338,6 +4345,8 @@ const struct ieee80211_ops iwl_mvm_hw_ops = {
|
||||
.join_ibss = iwl_mvm_start_ap_ibss,
|
||||
.leave_ibss = iwl_mvm_stop_ap_ibss,
|
||||
|
||||
.tx_last_beacon = iwl_mvm_tx_last_beacon,
|
||||
|
||||
.set_tim = iwl_mvm_set_tim,
|
||||
|
||||
.channel_switch = iwl_mvm_channel_switch,
|
||||
|
@ -1021,6 +1021,9 @@ struct iwl_mvm {
|
||||
/* system time of last beacon (for AP/GO interface) */
|
||||
u32 ap_last_beacon_gp2;
|
||||
|
||||
/* indicates that we transmitted the last beacon */
|
||||
bool ibss_manager;
|
||||
|
||||
bool lar_regdom_set;
|
||||
enum iwl_mcc_source mcc_src;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user