Lines Matching full:beacon
405 * the frame is buffered to be sent after DTIM beacon frame. in ieee80211_tx_h_multicast_ps_buf()
439 /* device releases frame after DTIM beacon */ in ieee80211_tx_h_multicast_ps_buf()
4959 struct beacon_data *beacon, in ieee80211_set_beacon_cntdwn() argument
4970 beacon_data = beacon->tail; in ieee80211_set_beacon_cntdwn()
4971 beacon_data_len = beacon->tail_len; in ieee80211_set_beacon_cntdwn()
4974 beacon_data = beacon->head; in ieee80211_set_beacon_cntdwn()
4975 beacon_data_len = beacon->head_len; in ieee80211_set_beacon_cntdwn()
4978 beacon_data = beacon->head; in ieee80211_set_beacon_cntdwn()
4979 beacon_data_len = beacon->head_len; in ieee80211_set_beacon_cntdwn()
4987 bcn_offsets = beacon->cntdwn_counter_offsets; in ieee80211_set_beacon_cntdwn()
4988 count = beacon->cntdwn_current_counter; in ieee80211_set_beacon_cntdwn()
5007 static u8 __ieee80211_beacon_update_cntdwn(struct beacon_data *beacon) in __ieee80211_beacon_update_cntdwn() argument
5009 beacon->cntdwn_current_counter--; in __ieee80211_beacon_update_cntdwn()
5012 WARN_ON_ONCE(!beacon->cntdwn_current_counter); in __ieee80211_beacon_update_cntdwn()
5014 return beacon->cntdwn_current_counter; in __ieee80211_beacon_update_cntdwn()
5020 struct beacon_data *beacon = NULL; in ieee80211_beacon_update_cntdwn() local
5026 beacon = rcu_dereference(sdata->deflink.u.ap.beacon); in ieee80211_beacon_update_cntdwn()
5028 beacon = rcu_dereference(sdata->u.ibss.presp); in ieee80211_beacon_update_cntdwn()
5030 beacon = rcu_dereference(sdata->u.mesh.beacon); in ieee80211_beacon_update_cntdwn()
5032 if (!beacon) in ieee80211_beacon_update_cntdwn()
5035 count = __ieee80211_beacon_update_cntdwn(beacon); in ieee80211_beacon_update_cntdwn()
5046 struct beacon_data *beacon = NULL; in ieee80211_beacon_set_cntdwn() local
5051 beacon = rcu_dereference(sdata->deflink.u.ap.beacon); in ieee80211_beacon_set_cntdwn()
5053 beacon = rcu_dereference(sdata->u.ibss.presp); in ieee80211_beacon_set_cntdwn()
5055 beacon = rcu_dereference(sdata->u.mesh.beacon); in ieee80211_beacon_set_cntdwn()
5057 if (!beacon) in ieee80211_beacon_set_cntdwn()
5060 if (counter < beacon->cntdwn_current_counter) in ieee80211_beacon_set_cntdwn()
5061 beacon->cntdwn_current_counter = counter; in ieee80211_beacon_set_cntdwn()
5071 struct beacon_data *beacon = NULL; in ieee80211_beacon_cntdwn_is_complete() local
5081 beacon = rcu_dereference(sdata->deflink.u.ap.beacon); in ieee80211_beacon_cntdwn_is_complete()
5082 if (WARN_ON(!beacon || !beacon->tail)) in ieee80211_beacon_cntdwn_is_complete()
5084 beacon_data = beacon->tail; in ieee80211_beacon_cntdwn_is_complete()
5085 beacon_data_len = beacon->tail_len; in ieee80211_beacon_cntdwn_is_complete()
5089 beacon = rcu_dereference(ifibss->presp); in ieee80211_beacon_cntdwn_is_complete()
5090 if (!beacon) in ieee80211_beacon_cntdwn_is_complete()
5093 beacon_data = beacon->head; in ieee80211_beacon_cntdwn_is_complete()
5094 beacon_data_len = beacon->head_len; in ieee80211_beacon_cntdwn_is_complete()
5098 beacon = rcu_dereference(ifmsh->beacon); in ieee80211_beacon_cntdwn_is_complete()
5099 if (!beacon) in ieee80211_beacon_cntdwn_is_complete()
5102 beacon_data = beacon->head; in ieee80211_beacon_cntdwn_is_complete()
5103 beacon_data_len = beacon->head_len; in ieee80211_beacon_cntdwn_is_complete()
5109 if (!beacon->cntdwn_counter_offsets[0]) in ieee80211_beacon_cntdwn_is_complete()
5112 if (WARN_ON_ONCE(beacon->cntdwn_counter_offsets[0] > beacon_data_len)) in ieee80211_beacon_cntdwn_is_complete()
5115 if (beacon_data[beacon->cntdwn_counter_offsets[0]] == 1) in ieee80211_beacon_cntdwn_is_complete()
5167 struct beacon_data *beacon, in ieee80211_beacon_get_finish() argument
5179 if (offs && beacon) { in ieee80211_beacon_get_finish()
5183 u16 csa_off = beacon->cntdwn_counter_offsets[i]; in ieee80211_beacon_get_finish()
5220 ieee80211_beacon_add_mbssid(struct sk_buff *skb, struct beacon_data *beacon, in ieee80211_beacon_add_mbssid() argument
5223 if (!beacon->mbssid_ies || !beacon->mbssid_ies->cnt || in ieee80211_beacon_add_mbssid()
5224 i > beacon->mbssid_ies->cnt) in ieee80211_beacon_add_mbssid()
5227 if (i < beacon->mbssid_ies->cnt) { in ieee80211_beacon_add_mbssid()
5228 skb_put_data(skb, beacon->mbssid_ies->elem[i].data, in ieee80211_beacon_add_mbssid()
5229 beacon->mbssid_ies->elem[i].len); in ieee80211_beacon_add_mbssid()
5231 if (beacon->rnr_ies && beacon->rnr_ies->cnt) { in ieee80211_beacon_add_mbssid()
5232 skb_put_data(skb, beacon->rnr_ies->elem[i].data, in ieee80211_beacon_add_mbssid()
5233 beacon->rnr_ies->elem[i].len); in ieee80211_beacon_add_mbssid()
5235 for (i = beacon->mbssid_ies->cnt; i < beacon->rnr_ies->cnt; i++) in ieee80211_beacon_add_mbssid()
5236 skb_put_data(skb, beacon->rnr_ies->elem[i].data, in ieee80211_beacon_add_mbssid()
5237 beacon->rnr_ies->elem[i].len); in ieee80211_beacon_add_mbssid()
5242 /* i == beacon->mbssid_ies->cnt, include all MBSSID elements */ in ieee80211_beacon_add_mbssid()
5243 for (i = 0; i < beacon->mbssid_ies->cnt; i++) in ieee80211_beacon_add_mbssid()
5244 skb_put_data(skb, beacon->mbssid_ies->elem[i].data, in ieee80211_beacon_add_mbssid()
5245 beacon->mbssid_ies->elem[i].len); in ieee80211_beacon_add_mbssid()
5254 struct beacon_data *beacon, in ieee80211_beacon_get_ap() argument
5265 if (beacon->cntdwn_counter_offsets[0]) { in ieee80211_beacon_get_ap()
5269 ieee80211_set_beacon_cntdwn(sdata, beacon, link); in ieee80211_beacon_get_ap()
5275 mbssid_len = ieee80211_get_mbssid_beacon_len(beacon->mbssid_ies, in ieee80211_beacon_get_ap()
5276 beacon->rnr_ies, in ieee80211_beacon_get_ap()
5279 skb = dev_alloc_skb(local->tx_headroom + beacon->head_len + in ieee80211_beacon_get_ap()
5280 beacon->tail_len + 256 + in ieee80211_beacon_get_ap()
5286 skb_put_data(skb, beacon->head, beacon->head_len); in ieee80211_beacon_get_ap()
5291 offs->tim_offset = beacon->head_len; in ieee80211_beacon_get_ap()
5292 offs->tim_length = skb->len - beacon->head_len; in ieee80211_beacon_get_ap()
5293 offs->cntdwn_counter_offs[0] = beacon->cntdwn_counter_offsets[0]; in ieee80211_beacon_get_ap()
5296 ieee80211_beacon_add_mbssid(skb, beacon, ema_index); in ieee80211_beacon_get_ap()
5304 if (beacon->tail) in ieee80211_beacon_get_ap()
5305 skb_put_data(skb, beacon->tail, beacon->tail_len); in ieee80211_beacon_get_ap()
5310 ieee80211_beacon_get_finish(hw, vif, link, offs, beacon, skb, in ieee80211_beacon_get_ap()
5320 bool is_template, struct beacon_data *beacon, in ieee80211_beacon_get_ap_ema_list() argument
5325 if (!beacon->mbssid_ies || !beacon->mbssid_ies->cnt) in ieee80211_beacon_get_ap_ema_list()
5328 ema = kzalloc(struct_size(ema, bcn, beacon->mbssid_ies->cnt), in ieee80211_beacon_get_ap_ema_list()
5333 for (ema->cnt = 0; ema->cnt < beacon->mbssid_ies->cnt; ema->cnt++) { in ieee80211_beacon_get_ap_ema_list()
5337 is_template, beacon, in ieee80211_beacon_get_ap_ema_list()
5343 if (ema->cnt == beacon->mbssid_ies->cnt) in ieee80211_beacon_get_ap_ema_list()
5362 struct beacon_data *beacon = NULL; in __ieee80211_beacon_get() local
5384 beacon = rcu_dereference(link->u.ap.beacon); in __ieee80211_beacon_get()
5385 if (!beacon) in __ieee80211_beacon_get()
5393 beacon, in __ieee80211_beacon_get()
5396 if (beacon->mbssid_ies && beacon->mbssid_ies->cnt) { in __ieee80211_beacon_get()
5397 if (ema_index >= beacon->mbssid_ies->cnt) in __ieee80211_beacon_get()
5401 ema_index = beacon->mbssid_ies->cnt; in __ieee80211_beacon_get()
5407 is_template, beacon, in __ieee80211_beacon_get()
5415 beacon = rcu_dereference(ifibss->presp); in __ieee80211_beacon_get()
5416 if (!beacon) in __ieee80211_beacon_get()
5419 if (beacon->cntdwn_counter_offsets[0]) { in __ieee80211_beacon_get()
5421 __ieee80211_beacon_update_cntdwn(beacon); in __ieee80211_beacon_get()
5423 ieee80211_set_beacon_cntdwn(sdata, beacon, link); in __ieee80211_beacon_get()
5426 skb = dev_alloc_skb(local->tx_headroom + beacon->head_len + in __ieee80211_beacon_get()
5431 skb_put_data(skb, beacon->head, beacon->head_len); in __ieee80211_beacon_get()
5437 ieee80211_beacon_get_finish(hw, vif, link, offs, beacon, skb, in __ieee80211_beacon_get()
5442 beacon = rcu_dereference(ifmsh->beacon); in __ieee80211_beacon_get()
5443 if (!beacon) in __ieee80211_beacon_get()
5446 if (beacon->cntdwn_counter_offsets[0]) { in __ieee80211_beacon_get()
5453 __ieee80211_beacon_update_cntdwn(beacon); in __ieee80211_beacon_get()
5455 ieee80211_set_beacon_cntdwn(sdata, beacon, link); in __ieee80211_beacon_get()
5459 ifmsh->sync_ops->adjust_tsf(sdata, beacon); in __ieee80211_beacon_get()
5462 beacon->head_len + in __ieee80211_beacon_get()
5464 beacon->tail_len + in __ieee80211_beacon_get()
5469 skb_put_data(skb, beacon->head, beacon->head_len); in __ieee80211_beacon_get()
5474 offs->tim_offset = beacon->head_len; in __ieee80211_beacon_get()
5475 offs->tim_length = skb->len - beacon->head_len; in __ieee80211_beacon_get()
5478 skb_put_data(skb, beacon->tail, beacon->tail_len); in __ieee80211_beacon_get()
5479 ieee80211_beacon_get_finish(hw, vif, link, offs, beacon, skb, in __ieee80211_beacon_get()
5863 struct beacon_data *beacon = in ieee80211_get_buffered_bc() local
5864 rcu_dereference(sdata->deflink.u.ap.beacon); in ieee80211_get_buffered_bc()
5866 if (!beacon || !beacon->head) in ieee80211_get_buffered_bc()
5877 goto out; /* send buffered bc/mc only after DTIM beacon */ in ieee80211_get_buffered_bc()