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()
4966 struct beacon_data *beacon, in ieee80211_set_beacon_cntdwn() argument
4977 beacon_data = beacon->tail; in ieee80211_set_beacon_cntdwn()
4978 beacon_data_len = beacon->tail_len; in ieee80211_set_beacon_cntdwn()
4981 beacon_data = beacon->head; in ieee80211_set_beacon_cntdwn()
4982 beacon_data_len = beacon->head_len; in ieee80211_set_beacon_cntdwn()
4985 beacon_data = beacon->head; in ieee80211_set_beacon_cntdwn()
4986 beacon_data_len = beacon->head_len; in ieee80211_set_beacon_cntdwn()
4994 bcn_offsets = beacon->cntdwn_counter_offsets; in ieee80211_set_beacon_cntdwn()
4995 count = beacon->cntdwn_current_counter; in ieee80211_set_beacon_cntdwn()
5014 static u8 __ieee80211_beacon_update_cntdwn(struct beacon_data *beacon) in __ieee80211_beacon_update_cntdwn() argument
5016 beacon->cntdwn_current_counter--; in __ieee80211_beacon_update_cntdwn()
5019 WARN_ON_ONCE(!beacon->cntdwn_current_counter); in __ieee80211_beacon_update_cntdwn()
5021 return beacon->cntdwn_current_counter; in __ieee80211_beacon_update_cntdwn()
5027 struct beacon_data *beacon = NULL; in ieee80211_beacon_update_cntdwn() local
5033 beacon = rcu_dereference(sdata->deflink.u.ap.beacon); in ieee80211_beacon_update_cntdwn()
5035 beacon = rcu_dereference(sdata->u.ibss.presp); in ieee80211_beacon_update_cntdwn()
5037 beacon = rcu_dereference(sdata->u.mesh.beacon); in ieee80211_beacon_update_cntdwn()
5039 if (!beacon) in ieee80211_beacon_update_cntdwn()
5042 count = __ieee80211_beacon_update_cntdwn(beacon); in ieee80211_beacon_update_cntdwn()
5053 struct beacon_data *beacon = NULL; in ieee80211_beacon_set_cntdwn() local
5058 beacon = rcu_dereference(sdata->deflink.u.ap.beacon); in ieee80211_beacon_set_cntdwn()
5060 beacon = rcu_dereference(sdata->u.ibss.presp); in ieee80211_beacon_set_cntdwn()
5062 beacon = rcu_dereference(sdata->u.mesh.beacon); in ieee80211_beacon_set_cntdwn()
5064 if (!beacon) in ieee80211_beacon_set_cntdwn()
5067 if (counter < beacon->cntdwn_current_counter) in ieee80211_beacon_set_cntdwn()
5068 beacon->cntdwn_current_counter = counter; in ieee80211_beacon_set_cntdwn()
5078 struct beacon_data *beacon = NULL; in ieee80211_beacon_cntdwn_is_complete() local
5088 beacon = rcu_dereference(sdata->deflink.u.ap.beacon); in ieee80211_beacon_cntdwn_is_complete()
5089 if (WARN_ON(!beacon || !beacon->tail)) in ieee80211_beacon_cntdwn_is_complete()
5091 beacon_data = beacon->tail; in ieee80211_beacon_cntdwn_is_complete()
5092 beacon_data_len = beacon->tail_len; in ieee80211_beacon_cntdwn_is_complete()
5096 beacon = rcu_dereference(ifibss->presp); in ieee80211_beacon_cntdwn_is_complete()
5097 if (!beacon) in ieee80211_beacon_cntdwn_is_complete()
5100 beacon_data = beacon->head; in ieee80211_beacon_cntdwn_is_complete()
5101 beacon_data_len = beacon->head_len; in ieee80211_beacon_cntdwn_is_complete()
5105 beacon = rcu_dereference(ifmsh->beacon); in ieee80211_beacon_cntdwn_is_complete()
5106 if (!beacon) in ieee80211_beacon_cntdwn_is_complete()
5109 beacon_data = beacon->head; in ieee80211_beacon_cntdwn_is_complete()
5110 beacon_data_len = beacon->head_len; in ieee80211_beacon_cntdwn_is_complete()
5116 if (!beacon->cntdwn_counter_offsets[0]) in ieee80211_beacon_cntdwn_is_complete()
5119 if (WARN_ON_ONCE(beacon->cntdwn_counter_offsets[0] > beacon_data_len)) in ieee80211_beacon_cntdwn_is_complete()
5122 if (beacon_data[beacon->cntdwn_counter_offsets[0]] == 1) in ieee80211_beacon_cntdwn_is_complete()
5174 struct beacon_data *beacon, in ieee80211_beacon_get_finish() argument
5186 if (offs && beacon) { in ieee80211_beacon_get_finish()
5190 u16 csa_off = beacon->cntdwn_counter_offsets[i]; in ieee80211_beacon_get_finish()
5227 ieee80211_beacon_add_mbssid(struct sk_buff *skb, struct beacon_data *beacon, in ieee80211_beacon_add_mbssid() argument
5230 if (!beacon->mbssid_ies || !beacon->mbssid_ies->cnt || in ieee80211_beacon_add_mbssid()
5231 i > beacon->mbssid_ies->cnt) in ieee80211_beacon_add_mbssid()
5234 if (i < beacon->mbssid_ies->cnt) { in ieee80211_beacon_add_mbssid()
5235 skb_put_data(skb, beacon->mbssid_ies->elem[i].data, in ieee80211_beacon_add_mbssid()
5236 beacon->mbssid_ies->elem[i].len); in ieee80211_beacon_add_mbssid()
5238 if (beacon->rnr_ies && beacon->rnr_ies->cnt) { in ieee80211_beacon_add_mbssid()
5239 skb_put_data(skb, beacon->rnr_ies->elem[i].data, in ieee80211_beacon_add_mbssid()
5240 beacon->rnr_ies->elem[i].len); in ieee80211_beacon_add_mbssid()
5242 for (i = beacon->mbssid_ies->cnt; i < beacon->rnr_ies->cnt; i++) in ieee80211_beacon_add_mbssid()
5243 skb_put_data(skb, beacon->rnr_ies->elem[i].data, in ieee80211_beacon_add_mbssid()
5244 beacon->rnr_ies->elem[i].len); in ieee80211_beacon_add_mbssid()
5249 /* i == beacon->mbssid_ies->cnt, include all MBSSID elements */ in ieee80211_beacon_add_mbssid()
5250 for (i = 0; i < beacon->mbssid_ies->cnt; i++) in ieee80211_beacon_add_mbssid()
5251 skb_put_data(skb, beacon->mbssid_ies->elem[i].data, in ieee80211_beacon_add_mbssid()
5252 beacon->mbssid_ies->elem[i].len); in ieee80211_beacon_add_mbssid()
5261 struct beacon_data *beacon, in ieee80211_beacon_get_ap() argument
5272 if (beacon->cntdwn_counter_offsets[0]) { in ieee80211_beacon_get_ap()
5276 ieee80211_set_beacon_cntdwn(sdata, beacon, link); in ieee80211_beacon_get_ap()
5282 mbssid_len = ieee80211_get_mbssid_beacon_len(beacon->mbssid_ies, in ieee80211_beacon_get_ap()
5283 beacon->rnr_ies, in ieee80211_beacon_get_ap()
5286 skb = dev_alloc_skb(local->tx_headroom + beacon->head_len + in ieee80211_beacon_get_ap()
5287 beacon->tail_len + 256 + in ieee80211_beacon_get_ap()
5293 skb_put_data(skb, beacon->head, beacon->head_len); in ieee80211_beacon_get_ap()
5298 offs->tim_offset = beacon->head_len; in ieee80211_beacon_get_ap()
5299 offs->tim_length = skb->len - beacon->head_len; in ieee80211_beacon_get_ap()
5300 offs->cntdwn_counter_offs[0] = beacon->cntdwn_counter_offsets[0]; in ieee80211_beacon_get_ap()
5303 ieee80211_beacon_add_mbssid(skb, beacon, ema_index); in ieee80211_beacon_get_ap()
5311 if (beacon->tail) in ieee80211_beacon_get_ap()
5312 skb_put_data(skb, beacon->tail, beacon->tail_len); in ieee80211_beacon_get_ap()
5319 ieee80211_beacon_get_finish(hw, vif, link, offs, beacon, skb, in ieee80211_beacon_get_ap()
5329 bool is_template, struct beacon_data *beacon, in ieee80211_beacon_get_ap_ema_list() argument
5334 if (!beacon->mbssid_ies || !beacon->mbssid_ies->cnt) in ieee80211_beacon_get_ap_ema_list()
5337 ema = kzalloc(struct_size(ema, bcn, beacon->mbssid_ies->cnt), in ieee80211_beacon_get_ap_ema_list()
5342 for (ema->cnt = 0; ema->cnt < beacon->mbssid_ies->cnt; ema->cnt++) { in ieee80211_beacon_get_ap_ema_list()
5346 is_template, beacon, in ieee80211_beacon_get_ap_ema_list()
5352 if (ema->cnt == beacon->mbssid_ies->cnt) in ieee80211_beacon_get_ap_ema_list()
5371 struct beacon_data *beacon = NULL; in __ieee80211_beacon_get() local
5393 beacon = rcu_dereference(link->u.ap.beacon); in __ieee80211_beacon_get()
5394 if (!beacon) in __ieee80211_beacon_get()
5402 beacon, in __ieee80211_beacon_get()
5405 if (beacon->mbssid_ies && beacon->mbssid_ies->cnt) { in __ieee80211_beacon_get()
5406 if (ema_index >= beacon->mbssid_ies->cnt) in __ieee80211_beacon_get()
5410 ema_index = beacon->mbssid_ies->cnt; in __ieee80211_beacon_get()
5416 is_template, beacon, in __ieee80211_beacon_get()
5424 beacon = rcu_dereference(ifibss->presp); in __ieee80211_beacon_get()
5425 if (!beacon) in __ieee80211_beacon_get()
5428 if (beacon->cntdwn_counter_offsets[0]) { in __ieee80211_beacon_get()
5430 __ieee80211_beacon_update_cntdwn(beacon); in __ieee80211_beacon_get()
5432 ieee80211_set_beacon_cntdwn(sdata, beacon, link); in __ieee80211_beacon_get()
5435 skb = dev_alloc_skb(local->tx_headroom + beacon->head_len + in __ieee80211_beacon_get()
5440 skb_put_data(skb, beacon->head, beacon->head_len); in __ieee80211_beacon_get()
5446 ieee80211_beacon_get_finish(hw, vif, link, offs, beacon, skb, in __ieee80211_beacon_get()
5451 beacon = rcu_dereference(ifmsh->beacon); in __ieee80211_beacon_get()
5452 if (!beacon) in __ieee80211_beacon_get()
5455 if (beacon->cntdwn_counter_offsets[0]) { in __ieee80211_beacon_get()
5462 __ieee80211_beacon_update_cntdwn(beacon); in __ieee80211_beacon_get()
5464 ieee80211_set_beacon_cntdwn(sdata, beacon, link); in __ieee80211_beacon_get()
5468 ifmsh->sync_ops->adjust_tsf(sdata, beacon); in __ieee80211_beacon_get()
5471 beacon->head_len + in __ieee80211_beacon_get()
5473 beacon->tail_len + in __ieee80211_beacon_get()
5478 skb_put_data(skb, beacon->head, beacon->head_len); in __ieee80211_beacon_get()
5483 offs->tim_offset = beacon->head_len; in __ieee80211_beacon_get()
5484 offs->tim_length = skb->len - beacon->head_len; in __ieee80211_beacon_get()
5487 skb_put_data(skb, beacon->tail, beacon->tail_len); in __ieee80211_beacon_get()
5488 ieee80211_beacon_get_finish(hw, vif, link, offs, beacon, skb, in __ieee80211_beacon_get()
5872 struct beacon_data *beacon = in ieee80211_get_buffered_bc() local
5873 rcu_dereference(sdata->deflink.u.ap.beacon); in ieee80211_get_buffered_bc()
5875 if (!beacon || !beacon->head) in ieee80211_get_buffered_bc()
5886 goto out; /* send buffered bc/mc only after DTIM beacon */ in ieee80211_get_buffered_bc()