Lines Matching full:beacon
398 * the frame is buffered to be sent after DTIM beacon frame. in ieee80211_tx_h_multicast_ps_buf()
432 /* device releases frame after DTIM beacon */ in ieee80211_tx_h_multicast_ps_buf()
4987 struct beacon_data *beacon, in ieee80211_set_beacon_cntdwn() argument
4998 beacon_data = beacon->tail; in ieee80211_set_beacon_cntdwn()
4999 beacon_data_len = beacon->tail_len; in ieee80211_set_beacon_cntdwn()
5002 beacon_data = beacon->head; in ieee80211_set_beacon_cntdwn()
5003 beacon_data_len = beacon->head_len; in ieee80211_set_beacon_cntdwn()
5006 beacon_data = beacon->head; in ieee80211_set_beacon_cntdwn()
5007 beacon_data_len = beacon->head_len; in ieee80211_set_beacon_cntdwn()
5015 bcn_offsets = beacon->cntdwn_counter_offsets; in ieee80211_set_beacon_cntdwn()
5016 count = beacon->cntdwn_current_counter; in ieee80211_set_beacon_cntdwn()
5035 static u8 __ieee80211_beacon_update_cntdwn(struct beacon_data *beacon) in __ieee80211_beacon_update_cntdwn() argument
5037 beacon->cntdwn_current_counter--; in __ieee80211_beacon_update_cntdwn()
5040 WARN_ON_ONCE(!beacon->cntdwn_current_counter); in __ieee80211_beacon_update_cntdwn()
5042 return beacon->cntdwn_current_counter; in __ieee80211_beacon_update_cntdwn()
5049 struct beacon_data *beacon = NULL; in ieee80211_beacon_update_cntdwn() local
5062 beacon = rcu_dereference(link->u.ap.beacon); in ieee80211_beacon_update_cntdwn()
5064 beacon = rcu_dereference(sdata->u.ibss.presp); in ieee80211_beacon_update_cntdwn()
5066 beacon = rcu_dereference(sdata->u.mesh.beacon); in ieee80211_beacon_update_cntdwn()
5068 if (!beacon) in ieee80211_beacon_update_cntdwn()
5071 count = __ieee80211_beacon_update_cntdwn(beacon); in ieee80211_beacon_update_cntdwn()
5082 struct beacon_data *beacon = NULL; in ieee80211_beacon_set_cntdwn() local
5087 beacon = rcu_dereference(sdata->deflink.u.ap.beacon); in ieee80211_beacon_set_cntdwn()
5089 beacon = rcu_dereference(sdata->u.ibss.presp); in ieee80211_beacon_set_cntdwn()
5091 beacon = rcu_dereference(sdata->u.mesh.beacon); in ieee80211_beacon_set_cntdwn()
5093 if (!beacon) in ieee80211_beacon_set_cntdwn()
5096 if (counter < beacon->cntdwn_current_counter) in ieee80211_beacon_set_cntdwn()
5097 beacon->cntdwn_current_counter = counter; in ieee80211_beacon_set_cntdwn()
5109 struct beacon_data *beacon = NULL; in ieee80211_beacon_cntdwn_is_complete() local
5127 beacon = rcu_dereference(link->u.ap.beacon); in ieee80211_beacon_cntdwn_is_complete()
5128 if (WARN_ON(!beacon || !beacon->tail)) in ieee80211_beacon_cntdwn_is_complete()
5130 beacon_data = beacon->tail; in ieee80211_beacon_cntdwn_is_complete()
5131 beacon_data_len = beacon->tail_len; in ieee80211_beacon_cntdwn_is_complete()
5135 beacon = rcu_dereference(ifibss->presp); in ieee80211_beacon_cntdwn_is_complete()
5136 if (!beacon) in ieee80211_beacon_cntdwn_is_complete()
5139 beacon_data = beacon->head; in ieee80211_beacon_cntdwn_is_complete()
5140 beacon_data_len = beacon->head_len; in ieee80211_beacon_cntdwn_is_complete()
5144 beacon = rcu_dereference(ifmsh->beacon); in ieee80211_beacon_cntdwn_is_complete()
5145 if (!beacon) in ieee80211_beacon_cntdwn_is_complete()
5148 beacon_data = beacon->head; in ieee80211_beacon_cntdwn_is_complete()
5149 beacon_data_len = beacon->head_len; in ieee80211_beacon_cntdwn_is_complete()
5155 if (!beacon->cntdwn_counter_offsets[0]) in ieee80211_beacon_cntdwn_is_complete()
5158 if (WARN_ON_ONCE(beacon->cntdwn_counter_offsets[0] > beacon_data_len)) in ieee80211_beacon_cntdwn_is_complete()
5161 if (beacon_data[beacon->cntdwn_counter_offsets[0]] == 1) in ieee80211_beacon_cntdwn_is_complete()
5213 struct beacon_data *beacon, in ieee80211_beacon_get_finish() argument
5225 if (offs && beacon) { in ieee80211_beacon_get_finish()
5229 u16 csa_off = beacon->cntdwn_counter_offsets[i]; in ieee80211_beacon_get_finish()
5266 ieee80211_beacon_add_mbssid(struct sk_buff *skb, struct beacon_data *beacon, in ieee80211_beacon_add_mbssid() argument
5269 if (!beacon->mbssid_ies || !beacon->mbssid_ies->cnt || in ieee80211_beacon_add_mbssid()
5270 i > beacon->mbssid_ies->cnt) in ieee80211_beacon_add_mbssid()
5273 if (i < beacon->mbssid_ies->cnt) { in ieee80211_beacon_add_mbssid()
5274 skb_put_data(skb, beacon->mbssid_ies->elem[i].data, in ieee80211_beacon_add_mbssid()
5275 beacon->mbssid_ies->elem[i].len); in ieee80211_beacon_add_mbssid()
5277 if (beacon->rnr_ies && beacon->rnr_ies->cnt) { in ieee80211_beacon_add_mbssid()
5278 skb_put_data(skb, beacon->rnr_ies->elem[i].data, in ieee80211_beacon_add_mbssid()
5279 beacon->rnr_ies->elem[i].len); in ieee80211_beacon_add_mbssid()
5281 for (i = beacon->mbssid_ies->cnt; i < beacon->rnr_ies->cnt; i++) in ieee80211_beacon_add_mbssid()
5282 skb_put_data(skb, beacon->rnr_ies->elem[i].data, in ieee80211_beacon_add_mbssid()
5283 beacon->rnr_ies->elem[i].len); in ieee80211_beacon_add_mbssid()
5288 /* i == beacon->mbssid_ies->cnt, include all MBSSID elements */ in ieee80211_beacon_add_mbssid()
5289 for (i = 0; i < beacon->mbssid_ies->cnt; i++) in ieee80211_beacon_add_mbssid()
5290 skb_put_data(skb, beacon->mbssid_ies->elem[i].data, in ieee80211_beacon_add_mbssid()
5291 beacon->mbssid_ies->elem[i].len); in ieee80211_beacon_add_mbssid()
5300 struct beacon_data *beacon, in ieee80211_beacon_get_ap() argument
5311 if (beacon->cntdwn_counter_offsets[0]) { in ieee80211_beacon_get_ap()
5315 ieee80211_set_beacon_cntdwn(sdata, beacon, link); in ieee80211_beacon_get_ap()
5321 mbssid_len = ieee80211_get_mbssid_beacon_len(beacon->mbssid_ies, in ieee80211_beacon_get_ap()
5322 beacon->rnr_ies, in ieee80211_beacon_get_ap()
5325 skb = dev_alloc_skb(local->tx_headroom + beacon->head_len + in ieee80211_beacon_get_ap()
5326 beacon->tail_len + 256 + in ieee80211_beacon_get_ap()
5332 skb_put_data(skb, beacon->head, beacon->head_len); in ieee80211_beacon_get_ap()
5337 offs->tim_offset = beacon->head_len; in ieee80211_beacon_get_ap()
5338 offs->tim_length = skb->len - beacon->head_len; in ieee80211_beacon_get_ap()
5339 offs->cntdwn_counter_offs[0] = beacon->cntdwn_counter_offsets[0]; in ieee80211_beacon_get_ap()
5342 ieee80211_beacon_add_mbssid(skb, beacon, ema_index); in ieee80211_beacon_get_ap()
5350 if (beacon->tail) in ieee80211_beacon_get_ap()
5351 skb_put_data(skb, beacon->tail, beacon->tail_len); in ieee80211_beacon_get_ap()
5358 ieee80211_beacon_get_finish(hw, vif, link, offs, beacon, skb, in ieee80211_beacon_get_ap()
5368 bool is_template, struct beacon_data *beacon, in ieee80211_beacon_get_ap_ema_list() argument
5373 if (!beacon->mbssid_ies || !beacon->mbssid_ies->cnt) in ieee80211_beacon_get_ap_ema_list()
5376 ema = kzalloc(struct_size(ema, bcn, beacon->mbssid_ies->cnt), in ieee80211_beacon_get_ap_ema_list()
5381 for (ema->cnt = 0; ema->cnt < beacon->mbssid_ies->cnt; ema->cnt++) { in ieee80211_beacon_get_ap_ema_list()
5385 is_template, beacon, in ieee80211_beacon_get_ap_ema_list()
5391 if (ema->cnt == beacon->mbssid_ies->cnt) in ieee80211_beacon_get_ap_ema_list()
5410 struct beacon_data *beacon = NULL; in __ieee80211_beacon_get() local
5432 beacon = rcu_dereference(link->u.ap.beacon); in __ieee80211_beacon_get()
5433 if (!beacon) in __ieee80211_beacon_get()
5441 beacon, in __ieee80211_beacon_get()
5444 if (beacon->mbssid_ies && beacon->mbssid_ies->cnt) { in __ieee80211_beacon_get()
5445 if (ema_index >= beacon->mbssid_ies->cnt) in __ieee80211_beacon_get()
5449 ema_index = beacon->mbssid_ies->cnt; in __ieee80211_beacon_get()
5455 is_template, beacon, in __ieee80211_beacon_get()
5463 beacon = rcu_dereference(ifibss->presp); in __ieee80211_beacon_get()
5464 if (!beacon) in __ieee80211_beacon_get()
5467 if (beacon->cntdwn_counter_offsets[0]) { in __ieee80211_beacon_get()
5469 __ieee80211_beacon_update_cntdwn(beacon); in __ieee80211_beacon_get()
5471 ieee80211_set_beacon_cntdwn(sdata, beacon, link); in __ieee80211_beacon_get()
5474 skb = dev_alloc_skb(local->tx_headroom + beacon->head_len + in __ieee80211_beacon_get()
5479 skb_put_data(skb, beacon->head, beacon->head_len); in __ieee80211_beacon_get()
5485 ieee80211_beacon_get_finish(hw, vif, link, offs, beacon, skb, in __ieee80211_beacon_get()
5490 beacon = rcu_dereference(ifmsh->beacon); in __ieee80211_beacon_get()
5491 if (!beacon) in __ieee80211_beacon_get()
5494 if (beacon->cntdwn_counter_offsets[0]) { in __ieee80211_beacon_get()
5501 __ieee80211_beacon_update_cntdwn(beacon); in __ieee80211_beacon_get()
5503 ieee80211_set_beacon_cntdwn(sdata, beacon, link); in __ieee80211_beacon_get()
5507 ifmsh->sync_ops->adjust_tsf(sdata, beacon); in __ieee80211_beacon_get()
5510 beacon->head_len + in __ieee80211_beacon_get()
5512 beacon->tail_len + in __ieee80211_beacon_get()
5517 skb_put_data(skb, beacon->head, beacon->head_len); in __ieee80211_beacon_get()
5522 offs->tim_offset = beacon->head_len; in __ieee80211_beacon_get()
5523 offs->tim_length = skb->len - beacon->head_len; in __ieee80211_beacon_get()
5526 skb_put_data(skb, beacon->tail, beacon->tail_len); in __ieee80211_beacon_get()
5527 ieee80211_beacon_get_finish(hw, vif, link, offs, beacon, skb, in __ieee80211_beacon_get()
5909 struct beacon_data *beacon = in ieee80211_get_buffered_bc() local
5910 rcu_dereference(sdata->deflink.u.ap.beacon); in ieee80211_get_buffered_bc()
5912 if (!beacon || !beacon->head) in ieee80211_get_buffered_bc()
5923 goto out; /* send buffered bc/mc only after DTIM beacon */ in ieee80211_get_buffered_bc()