mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
This commit is contained in:
commit
75c8ec71fb
43 changed files with 497 additions and 158 deletions
|
@ -1417,10 +1417,12 @@ int ieee80211_reconfig(struct ieee80211_local *local)
|
|||
}
|
||||
|
||||
/* add channel contexts */
|
||||
mutex_lock(&local->chanctx_mtx);
|
||||
list_for_each_entry(ctx, &local->chanctx_list, list)
|
||||
WARN_ON(drv_add_chanctx(local, ctx));
|
||||
mutex_unlock(&local->chanctx_mtx);
|
||||
if (local->use_chanctx) {
|
||||
mutex_lock(&local->chanctx_mtx);
|
||||
list_for_each_entry(ctx, &local->chanctx_list, list)
|
||||
WARN_ON(drv_add_chanctx(local, ctx));
|
||||
mutex_unlock(&local->chanctx_mtx);
|
||||
}
|
||||
|
||||
list_for_each_entry(sdata, &local->interfaces, list) {
|
||||
struct ieee80211_chanctx_conf *ctx_conf;
|
||||
|
@ -1439,6 +1441,21 @@ int ieee80211_reconfig(struct ieee80211_local *local)
|
|||
mutex_unlock(&local->chanctx_mtx);
|
||||
}
|
||||
|
||||
sdata = rtnl_dereference(local->monitor_sdata);
|
||||
if (sdata && local->use_chanctx && ieee80211_sdata_running(sdata)) {
|
||||
struct ieee80211_chanctx_conf *ctx_conf;
|
||||
|
||||
mutex_lock(&local->chanctx_mtx);
|
||||
ctx_conf = rcu_dereference_protected(sdata->vif.chanctx_conf,
|
||||
lockdep_is_held(&local->chanctx_mtx));
|
||||
if (ctx_conf) {
|
||||
ctx = container_of(ctx_conf, struct ieee80211_chanctx,
|
||||
conf);
|
||||
drv_assign_vif_chanctx(local, sdata, ctx);
|
||||
}
|
||||
mutex_unlock(&local->chanctx_mtx);
|
||||
}
|
||||
|
||||
/* add STAs back */
|
||||
mutex_lock(&local->sta_mtx);
|
||||
list_for_each_entry(sta, &local->sta_list, list) {
|
||||
|
@ -2015,3 +2032,54 @@ u8 ieee80211_mcs_to_chains(const struct ieee80211_mcs_info *mcs)
|
|||
return 2;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* ieee80211_calculate_rx_timestamp - calculate timestamp in frame
|
||||
* @local: mac80211 hw info struct
|
||||
* @status: RX status
|
||||
* @mpdu_len: total MPDU length (including FCS)
|
||||
* @mpdu_offset: offset into MPDU to calculate timestamp at
|
||||
*
|
||||
* This function calculates the RX timestamp at the given MPDU offset, taking
|
||||
* into account what the RX timestamp was. An offset of 0 will just normalize
|
||||
* the timestamp to TSF at beginning of MPDU reception.
|
||||
*/
|
||||
u64 ieee80211_calculate_rx_timestamp(struct ieee80211_local *local,
|
||||
struct ieee80211_rx_status *status,
|
||||
unsigned int mpdu_len,
|
||||
unsigned int mpdu_offset)
|
||||
{
|
||||
u64 ts = status->mactime;
|
||||
struct rate_info ri;
|
||||
u16 rate;
|
||||
|
||||
if (WARN_ON(!ieee80211_have_rx_timestamp(status)))
|
||||
return 0;
|
||||
|
||||
memset(&ri, 0, sizeof(ri));
|
||||
|
||||
/* Fill cfg80211 rate info */
|
||||
if (status->flag & RX_FLAG_HT) {
|
||||
ri.mcs = status->rate_idx;
|
||||
ri.flags |= RATE_INFO_FLAGS_MCS;
|
||||
if (status->flag & RX_FLAG_40MHZ)
|
||||
ri.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH;
|
||||
if (status->flag & RX_FLAG_SHORT_GI)
|
||||
ri.flags |= RATE_INFO_FLAGS_SHORT_GI;
|
||||
} else {
|
||||
struct ieee80211_supported_band *sband;
|
||||
|
||||
sband = local->hw.wiphy->bands[status->band];
|
||||
ri.legacy = sband->bitrates[status->rate_idx].bitrate;
|
||||
}
|
||||
|
||||
rate = cfg80211_calculate_bitrate(&ri);
|
||||
|
||||
/* rewind from end of MPDU */
|
||||
if (status->flag & RX_FLAG_MACTIME_END)
|
||||
ts -= mpdu_len * 8 * 10 / rate;
|
||||
|
||||
ts += mpdu_offset * 8 * 10 / rate;
|
||||
|
||||
return ts;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue