Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
John W. Linville says: ==================== pull request: wireless 2014-05-08 This one is all from Johannes: "Here are a few small fixes for the current cycle: radiotap TX flags were wrong (fix by Bob), Chun-Yeow fixes an SMPS issue with mesh interfaces, Eliad fixes a locking bug and a cfg80211 state problem and finally Henning sent me a fix for IBSS rate information." Please let me know if there are problems! ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
1448eb5669
|
@ -3668,6 +3668,18 @@ void cfg80211_sched_scan_results(struct wiphy *wiphy);
|
||||||
*/
|
*/
|
||||||
void cfg80211_sched_scan_stopped(struct wiphy *wiphy);
|
void cfg80211_sched_scan_stopped(struct wiphy *wiphy);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cfg80211_sched_scan_stopped_rtnl - notify that the scheduled scan has stopped
|
||||||
|
*
|
||||||
|
* @wiphy: the wiphy on which the scheduled scan stopped
|
||||||
|
*
|
||||||
|
* The driver can call this function to inform cfg80211 that the
|
||||||
|
* scheduled scan had to be stopped, for whatever reason. The driver
|
||||||
|
* is then called back via the sched_scan_stop operation when done.
|
||||||
|
* This function should be called with rtnl locked.
|
||||||
|
*/
|
||||||
|
void cfg80211_sched_scan_stopped_rtnl(struct wiphy *wiphy);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cfg80211_inform_bss_width_frame - inform cfg80211 of a received BSS frame
|
* cfg80211_inform_bss_width_frame - inform cfg80211 of a received BSS frame
|
||||||
*
|
*
|
||||||
|
|
|
@ -1231,7 +1231,8 @@ ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx)
|
||||||
if (ether_addr_equal(bssid, rx->sdata->u.ibss.bssid) &&
|
if (ether_addr_equal(bssid, rx->sdata->u.ibss.bssid) &&
|
||||||
test_sta_flag(sta, WLAN_STA_AUTHORIZED)) {
|
test_sta_flag(sta, WLAN_STA_AUTHORIZED)) {
|
||||||
sta->last_rx = jiffies;
|
sta->last_rx = jiffies;
|
||||||
if (ieee80211_is_data(hdr->frame_control)) {
|
if (ieee80211_is_data(hdr->frame_control) &&
|
||||||
|
!is_multicast_ether_addr(hdr->addr1)) {
|
||||||
sta->last_rx_rate_idx = status->rate_idx;
|
sta->last_rx_rate_idx = status->rate_idx;
|
||||||
sta->last_rx_rate_flag = status->flag;
|
sta->last_rx_rate_flag = status->flag;
|
||||||
sta->last_rx_rate_vht_flag = status->vht_flag;
|
sta->last_rx_rate_vht_flag = status->vht_flag;
|
||||||
|
|
|
@ -1148,7 +1148,8 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta)
|
||||||
atomic_dec(&ps->num_sta_ps);
|
atomic_dec(&ps->num_sta_ps);
|
||||||
|
|
||||||
/* This station just woke up and isn't aware of our SMPS state */
|
/* This station just woke up and isn't aware of our SMPS state */
|
||||||
if (!ieee80211_smps_is_restrictive(sta->known_smps_mode,
|
if (!ieee80211_vif_is_mesh(&sdata->vif) &&
|
||||||
|
!ieee80211_smps_is_restrictive(sta->known_smps_mode,
|
||||||
sdata->smps_mode) &&
|
sdata->smps_mode) &&
|
||||||
sta->known_smps_mode != sdata->bss->req_smps &&
|
sta->known_smps_mode != sdata->bss->req_smps &&
|
||||||
sta_info_tx_streams(sta) != 1) {
|
sta_info_tx_streams(sta) != 1) {
|
||||||
|
|
|
@ -314,10 +314,9 @@ ieee80211_add_tx_radiotap_header(struct ieee80211_local *local,
|
||||||
!is_multicast_ether_addr(hdr->addr1))
|
!is_multicast_ether_addr(hdr->addr1))
|
||||||
txflags |= IEEE80211_RADIOTAP_F_TX_FAIL;
|
txflags |= IEEE80211_RADIOTAP_F_TX_FAIL;
|
||||||
|
|
||||||
if ((info->status.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) ||
|
if (info->status.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT)
|
||||||
(info->status.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT))
|
|
||||||
txflags |= IEEE80211_RADIOTAP_F_TX_CTS;
|
txflags |= IEEE80211_RADIOTAP_F_TX_CTS;
|
||||||
else if (info->status.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS)
|
if (info->status.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS)
|
||||||
txflags |= IEEE80211_RADIOTAP_F_TX_RTS;
|
txflags |= IEEE80211_RADIOTAP_F_TX_RTS;
|
||||||
|
|
||||||
put_unaligned_le16(txflags, pos);
|
put_unaligned_le16(txflags, pos);
|
||||||
|
|
|
@ -1780,7 +1780,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
|
||||||
mutex_unlock(&local->mtx);
|
mutex_unlock(&local->mtx);
|
||||||
|
|
||||||
if (sched_scan_stopped)
|
if (sched_scan_stopped)
|
||||||
cfg80211_sched_scan_stopped(local->hw.wiphy);
|
cfg80211_sched_scan_stopped_rtnl(local->hw.wiphy);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If this is for hw restart things are still running.
|
* If this is for hw restart things are still running.
|
||||||
|
|
|
@ -284,14 +284,22 @@ void cfg80211_sched_scan_results(struct wiphy *wiphy)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(cfg80211_sched_scan_results);
|
EXPORT_SYMBOL(cfg80211_sched_scan_results);
|
||||||
|
|
||||||
void cfg80211_sched_scan_stopped(struct wiphy *wiphy)
|
void cfg80211_sched_scan_stopped_rtnl(struct wiphy *wiphy)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
||||||
|
|
||||||
|
ASSERT_RTNL();
|
||||||
|
|
||||||
trace_cfg80211_sched_scan_stopped(wiphy);
|
trace_cfg80211_sched_scan_stopped(wiphy);
|
||||||
|
|
||||||
rtnl_lock();
|
|
||||||
__cfg80211_stop_sched_scan(rdev, true);
|
__cfg80211_stop_sched_scan(rdev, true);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(cfg80211_sched_scan_stopped_rtnl);
|
||||||
|
|
||||||
|
void cfg80211_sched_scan_stopped(struct wiphy *wiphy)
|
||||||
|
{
|
||||||
|
rtnl_lock();
|
||||||
|
cfg80211_sched_scan_stopped_rtnl(wiphy);
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(cfg80211_sched_scan_stopped);
|
EXPORT_SYMBOL(cfg80211_sched_scan_stopped);
|
||||||
|
|
|
@ -234,7 +234,6 @@ void cfg80211_conn_work(struct work_struct *work)
|
||||||
NULL, 0, NULL, 0,
|
NULL, 0, NULL, 0,
|
||||||
WLAN_STATUS_UNSPECIFIED_FAILURE,
|
WLAN_STATUS_UNSPECIFIED_FAILURE,
|
||||||
false, NULL);
|
false, NULL);
|
||||||
cfg80211_sme_free(wdev);
|
|
||||||
}
|
}
|
||||||
wdev_unlock(wdev);
|
wdev_unlock(wdev);
|
||||||
}
|
}
|
||||||
|
@ -648,6 +647,7 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
|
||||||
cfg80211_unhold_bss(bss_from_pub(bss));
|
cfg80211_unhold_bss(bss_from_pub(bss));
|
||||||
cfg80211_put_bss(wdev->wiphy, bss);
|
cfg80211_put_bss(wdev->wiphy, bss);
|
||||||
}
|
}
|
||||||
|
cfg80211_sme_free(wdev);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue