Lines Matching refs:ctx

16 					  struct ieee80211_chanctx *ctx)  in ieee80211_chanctx_num_assigned()  argument
23 list_for_each_entry(link, &ctx->assigned_links, assigned_chanctx_list) in ieee80211_chanctx_num_assigned()
30 struct ieee80211_chanctx *ctx) in ieee80211_chanctx_num_reserved() argument
37 list_for_each_entry(link, &ctx->reserved_links, reserved_chanctx_list) in ieee80211_chanctx_num_reserved()
44 struct ieee80211_chanctx *ctx) in ieee80211_chanctx_refcount() argument
46 return ieee80211_chanctx_num_assigned(local, ctx) + in ieee80211_chanctx_refcount()
47 ieee80211_chanctx_num_reserved(local, ctx); in ieee80211_chanctx_refcount()
52 struct ieee80211_chanctx *ctx; in ieee80211_num_chanctx() local
57 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_num_chanctx()
58 if (radio_idx >= 0 && ctx->conf.radio_idx != radio_idx) in ieee80211_num_chanctx()
121 ieee80211_chanctx_compatible(struct ieee80211_chanctx *ctx, in ieee80211_chanctx_compatible() argument
129 .oper = ctx->conf.def, in ieee80211_chanctx_compatible()
130 .ap = ctx->conf.ap, in ieee80211_chanctx_compatible()
142 struct ieee80211_chanctx *ctx, in ieee80211_chanctx_reserved_chanreq() argument
153 list_for_each_entry(link, &ctx->reserved_links, reserved_chanctx_list) { in ieee80211_chanctx_reserved_chanreq()
164 struct ieee80211_chanctx *ctx, in ieee80211_chanctx_non_reserved_chandef() argument
173 list_for_each_entry(link, &ctx->assigned_links, assigned_chanctx_list) { in ieee80211_chanctx_non_reserved_chandef()
190 struct ieee80211_chanctx *ctx, in ieee80211_chanctx_can_reserve() argument
197 if (!ieee80211_chanctx_reserved_chanreq(local, ctx, req, &tmp)) in ieee80211_chanctx_can_reserve()
200 if (!ieee80211_chanctx_non_reserved_chandef(local, ctx, req, &tmp)) in ieee80211_chanctx_can_reserve()
203 if (!list_empty(&ctx->reserved_links) && in ieee80211_chanctx_can_reserve()
204 ieee80211_chanctx_reserved_chanreq(local, ctx, req, &tmp)) in ieee80211_chanctx_can_reserve()
215 struct ieee80211_chanctx *ctx; in ieee80211_find_reservation_chanctx() local
222 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_find_reservation_chanctx()
223 if (ctx->replace_state == IEEE80211_CHANCTX_WILL_BE_REPLACED) in ieee80211_find_reservation_chanctx()
226 if (ctx->mode == IEEE80211_CHANCTX_EXCLUSIVE) in ieee80211_find_reservation_chanctx()
229 if (!ieee80211_chanctx_can_reserve(local, ctx, chanreq)) in ieee80211_find_reservation_chanctx()
232 return ctx; in ieee80211_find_reservation_chanctx()
311 struct ieee80211_chanctx *ctx, in ieee80211_get_chanctx_max_required_bw() argument
320 return ctx->conf.def.width; in ieee80211_get_chanctx_max_required_bw()
326 if (link->reserved_chanctx != ctx) in ieee80211_get_chanctx_max_required_bw()
329 rcu_access_pointer(link->conf->chanctx_conf) != &ctx->conf) in ieee80211_get_chanctx_max_required_bw()
380 rcu_access_pointer(sdata->vif.bss_conf.chanctx_conf) == &ctx->conf) in ieee80211_get_chanctx_max_required_bw()
381 max_bw = max(max_bw, ctx->conf.def.width); in ieee80211_get_chanctx_max_required_bw()
393 struct ieee80211_chanctx *ctx, in _ieee80211_recalc_chanctx_min_def() argument
403 if (ctx->conf.def.width == NL80211_CHAN_WIDTH_5 || in _ieee80211_recalc_chanctx_min_def()
404 ctx->conf.def.width == NL80211_CHAN_WIDTH_10 || in _ieee80211_recalc_chanctx_min_def()
405 ctx->conf.def.width == NL80211_CHAN_WIDTH_1 || in _ieee80211_recalc_chanctx_min_def()
406 ctx->conf.def.width == NL80211_CHAN_WIDTH_2 || in _ieee80211_recalc_chanctx_min_def()
407 ctx->conf.def.width == NL80211_CHAN_WIDTH_4 || in _ieee80211_recalc_chanctx_min_def()
408 ctx->conf.def.width == NL80211_CHAN_WIDTH_8 || in _ieee80211_recalc_chanctx_min_def()
409 ctx->conf.def.width == NL80211_CHAN_WIDTH_16 || in _ieee80211_recalc_chanctx_min_def()
410 ctx->conf.radar_enabled) { in _ieee80211_recalc_chanctx_min_def()
411 ctx->conf.min_def = ctx->conf.def; in _ieee80211_recalc_chanctx_min_def()
415 max_bw = ieee80211_get_chanctx_max_required_bw(local, ctx, rsvd_for, in _ieee80211_recalc_chanctx_min_def()
419 min_def = ctx->conf.def; in _ieee80211_recalc_chanctx_min_def()
423 if (cfg80211_chandef_identical(&ctx->conf.min_def, &min_def)) in _ieee80211_recalc_chanctx_min_def()
426 ctx->conf.min_def = min_def; in _ieee80211_recalc_chanctx_min_def()
427 if (!ctx->driver_present) in _ieee80211_recalc_chanctx_min_def()
434 struct ieee80211_chanctx *ctx, in ieee80211_chan_bw_change() argument
439 local->hw.wiphy->bands[ctx->conf.def.chan->band]; in ieee80211_chan_bw_change()
463 if (rcu_access_pointer(link_conf->chanctx_conf) != &ctx->conf) in ieee80211_chan_bw_change()
501 struct ieee80211_chanctx *ctx, in ieee80211_recalc_chanctx_min_def() argument
505 u32 changed = _ieee80211_recalc_chanctx_min_def(local, ctx, rsvd_for, in ieee80211_recalc_chanctx_min_def()
512 ieee80211_chan_bw_change(local, ctx, false, true); in ieee80211_recalc_chanctx_min_def()
514 drv_change_chanctx(local, ctx, changed); in ieee80211_recalc_chanctx_min_def()
517 ieee80211_chan_bw_change(local, ctx, false, false); in ieee80211_recalc_chanctx_min_def()
521 struct ieee80211_chanctx *ctx, in _ieee80211_change_chanctx() argument
528 .oper = ctx->conf.def, in _ieee80211_change_chanctx()
529 .ap = ctx->conf.ap, in _ieee80211_change_chanctx()
554 ieee80211_recalc_chanctx_min_def(local, ctx, rsvd_for, false); in _ieee80211_change_chanctx()
558 WARN_ON(ieee80211_chanctx_refcount(local, ctx) > 1 && in _ieee80211_change_chanctx()
559 !cfg80211_chandef_compatible(&ctx->conf.def, &chanreq->oper)); in _ieee80211_change_chanctx()
561 ieee80211_remove_wbrf(local, &ctx->conf.def); in _ieee80211_change_chanctx()
563 if (!cfg80211_chandef_identical(&ctx->conf.def, &chanreq->oper)) { in _ieee80211_change_chanctx()
564 if (ctx->conf.def.width != chanreq->oper.width) in _ieee80211_change_chanctx()
566 if (ctx->conf.def.punctured != chanreq->oper.punctured) in _ieee80211_change_chanctx()
569 if (!cfg80211_chandef_identical(&ctx->conf.ap, &chanreq->ap)) in _ieee80211_change_chanctx()
571 ctx->conf.def = *chandef; in _ieee80211_change_chanctx()
572 ctx->conf.ap = chanreq->ap; in _ieee80211_change_chanctx()
575 changed |= _ieee80211_recalc_chanctx_min_def(local, ctx, rsvd_for, false); in _ieee80211_change_chanctx()
577 ieee80211_add_wbrf(local, &ctx->conf.def); in _ieee80211_change_chanctx()
579 drv_change_chanctx(local, ctx, changed); in _ieee80211_change_chanctx()
586 struct ieee80211_chanctx *ctx, in ieee80211_change_chanctx() argument
590 _ieee80211_change_chanctx(local, ctx, old_ctx, chanreq, NULL); in ieee80211_change_chanctx()
601 struct ieee80211_chanctx *ctx; in ieee80211_find_chanctx() local
611 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_find_chanctx()
614 if (ctx->replace_state != IEEE80211_CHANCTX_REPLACE_NONE) in ieee80211_find_chanctx()
617 if (ctx->mode == IEEE80211_CHANCTX_EXCLUSIVE) in ieee80211_find_chanctx()
620 compat = ieee80211_chanctx_compatible(ctx, chanreq, &tmp); in ieee80211_find_chanctx()
624 compat = ieee80211_chanctx_reserved_chanreq(local, ctx, in ieee80211_find_chanctx()
635 link->reserved_chanctx = ctx; in ieee80211_find_chanctx()
637 &ctx->reserved_links); in ieee80211_find_chanctx()
639 ieee80211_change_chanctx(local, ctx, ctx, compat); in ieee80211_find_chanctx()
641 return ctx; in ieee80211_find_chanctx()
687 struct ieee80211_chanctx *ctx) in ieee80211_chanctx_radar_required() argument
689 struct ieee80211_chanctx_conf *conf = &ctx->conf; in ieee80211_chanctx_radar_required()
711 struct ieee80211_chanctx *ctx; in ieee80211_alloc_chanctx() local
715 ctx = kzalloc(sizeof(*ctx) + local->hw.chanctx_data_size, GFP_KERNEL); in ieee80211_alloc_chanctx()
716 if (!ctx) in ieee80211_alloc_chanctx()
719 INIT_LIST_HEAD(&ctx->assigned_links); in ieee80211_alloc_chanctx()
720 INIT_LIST_HEAD(&ctx->reserved_links); in ieee80211_alloc_chanctx()
721 ctx->conf.def = chanreq->oper; in ieee80211_alloc_chanctx()
722 ctx->conf.ap = chanreq->ap; in ieee80211_alloc_chanctx()
723 ctx->conf.rx_chains_static = 1; in ieee80211_alloc_chanctx()
724 ctx->conf.rx_chains_dynamic = 1; in ieee80211_alloc_chanctx()
725 ctx->mode = mode; in ieee80211_alloc_chanctx()
726 ctx->conf.radar_enabled = false; in ieee80211_alloc_chanctx()
727 ctx->conf.radio_idx = radio_idx; in ieee80211_alloc_chanctx()
728 ctx->radar_detected = false; in ieee80211_alloc_chanctx()
729 _ieee80211_recalc_chanctx_min_def(local, ctx, NULL, false); in ieee80211_alloc_chanctx()
731 return ctx; in ieee80211_alloc_chanctx()
735 struct ieee80211_chanctx *ctx) in ieee80211_add_chanctx() argument
742 ieee80211_add_wbrf(local, &ctx->conf.def); in ieee80211_add_chanctx()
749 err = drv_add_chanctx(local, ctx); in ieee80211_add_chanctx()
765 struct ieee80211_chanctx *ctx; in ieee80211_new_chanctx() local
770 ctx = ieee80211_alloc_chanctx(local, chanreq, mode, radio_idx); in ieee80211_new_chanctx()
771 if (!ctx) in ieee80211_new_chanctx()
774 err = ieee80211_add_chanctx(local, ctx); in ieee80211_new_chanctx()
776 kfree(ctx); in ieee80211_new_chanctx()
782 list_add_rcu(&ctx->list, &local->chanctx_list); in ieee80211_new_chanctx()
783 return ctx; in ieee80211_new_chanctx()
787 struct ieee80211_chanctx *ctx, in ieee80211_del_chanctx() argument
792 drv_remove_chanctx(local, ctx); in ieee80211_del_chanctx()
797 ieee80211_remove_wbrf(local, &ctx->conf.def); in ieee80211_del_chanctx()
801 struct ieee80211_chanctx *ctx, in ieee80211_free_chanctx() argument
806 WARN_ON_ONCE(ieee80211_chanctx_refcount(local, ctx) != 0); in ieee80211_free_chanctx()
808 list_del_rcu(&ctx->list); in ieee80211_free_chanctx()
809 ieee80211_del_chanctx(local, ctx, skip_idle_recalc); in ieee80211_free_chanctx()
810 kfree_rcu(ctx, rcu_head); in ieee80211_free_chanctx()
814 struct ieee80211_chanctx *ctx) in ieee80211_recalc_chanctx_chantype() argument
816 struct ieee80211_chanctx_conf *conf = &ctx->conf; in ieee80211_recalc_chanctx_chantype()
876 ieee80211_change_chanctx(local, ctx, ctx, compat); in ieee80211_recalc_chanctx_chantype()
1115 struct ieee80211_chanctx *ctx = link->reserved_chanctx; in ieee80211_link_unreserve_chanctx() local
1119 if (WARN_ON(!ctx)) in ieee80211_link_unreserve_chanctx()
1125 if (ieee80211_chanctx_refcount(sdata->local, ctx) == 0) { in ieee80211_link_unreserve_chanctx()
1126 if (ctx->replace_state == IEEE80211_CHANCTX_REPLACES_OTHER) { in ieee80211_link_unreserve_chanctx()
1127 if (WARN_ON(!ctx->replace_ctx)) in ieee80211_link_unreserve_chanctx()
1130 WARN_ON(ctx->replace_ctx->replace_state != in ieee80211_link_unreserve_chanctx()
1132 WARN_ON(ctx->replace_ctx->replace_ctx != ctx); in ieee80211_link_unreserve_chanctx()
1134 ctx->replace_ctx->replace_ctx = NULL; in ieee80211_link_unreserve_chanctx()
1135 ctx->replace_ctx->replace_state = in ieee80211_link_unreserve_chanctx()
1138 list_del_rcu(&ctx->list); in ieee80211_link_unreserve_chanctx()
1139 kfree_rcu(ctx, rcu_head); in ieee80211_link_unreserve_chanctx()
1141 ieee80211_free_chanctx(sdata->local, ctx, false); in ieee80211_link_unreserve_chanctx()
1152 struct ieee80211_chanctx *new_ctx, *ctx; in ieee80211_replace_chanctx() local
1176 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_replace_chanctx()
1177 if (ctx->replace_state != in ieee80211_replace_chanctx()
1181 if (!list_empty(&ctx->reserved_links)) in ieee80211_replace_chanctx()
1184 if (ctx->conf.radio_idx >= 0) { in ieee80211_replace_chanctx()
1185 radio = &wiphy->radio[ctx->conf.radio_idx]; in ieee80211_replace_chanctx()
1190 curr_ctx = ctx; in ieee80211_replace_chanctx()
1512 struct ieee80211_chanctx *ctx, *old_ctx; in ieee80211_chsw_switch_vifs() local
1522 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_chsw_switch_vifs()
1523 if (ctx->replace_state != IEEE80211_CHANCTX_REPLACES_OTHER) in ieee80211_chsw_switch_vifs()
1526 if (WARN_ON(!ctx->replace_ctx)) { in ieee80211_chsw_switch_vifs()
1531 list_for_each_entry(link, &ctx->reserved_links, in ieee80211_chsw_switch_vifs()
1539 vif_chsw[i].new_ctx = &ctx->conf; in ieee80211_chsw_switch_vifs()
1556 struct ieee80211_chanctx *ctx; in ieee80211_chsw_switch_ctxs() local
1561 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_chsw_switch_ctxs()
1562 if (ctx->replace_state != IEEE80211_CHANCTX_REPLACES_OTHER) in ieee80211_chsw_switch_ctxs()
1565 if (!list_empty(&ctx->replace_ctx->assigned_links)) in ieee80211_chsw_switch_ctxs()
1568 ieee80211_del_chanctx(local, ctx->replace_ctx, false); in ieee80211_chsw_switch_ctxs()
1569 err = ieee80211_add_chanctx(local, ctx); in ieee80211_chsw_switch_ctxs()
1577 WARN_ON(ieee80211_add_chanctx(local, ctx)); in ieee80211_chsw_switch_ctxs()
1578 list_for_each_entry_continue_reverse(ctx, &local->chanctx_list, list) { in ieee80211_chsw_switch_ctxs()
1579 if (ctx->replace_state != IEEE80211_CHANCTX_REPLACES_OTHER) in ieee80211_chsw_switch_ctxs()
1582 if (!list_empty(&ctx->replace_ctx->assigned_links)) in ieee80211_chsw_switch_ctxs()
1585 ieee80211_del_chanctx(local, ctx, false); in ieee80211_chsw_switch_ctxs()
1586 WARN_ON(ieee80211_add_chanctx(local, ctx->replace_ctx)); in ieee80211_chsw_switch_ctxs()
1594 struct ieee80211_chanctx *ctx, *ctx_tmp, *old_ctx; in ieee80211_vif_use_reserved_switch() local
1616 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_vif_use_reserved_switch()
1619 if (ctx->replace_state != IEEE80211_CHANCTX_REPLACES_OTHER) in ieee80211_vif_use_reserved_switch()
1622 if (WARN_ON(!ctx->replace_ctx)) { in ieee80211_vif_use_reserved_switch()
1633 list_for_each_entry(link, &ctx->replace_ctx->assigned_links, in ieee80211_vif_use_reserved_switch()
1654 ctx->conf.radar_enabled = false; in ieee80211_vif_use_reserved_switch()
1655 list_for_each_entry(link, &ctx->reserved_links, in ieee80211_vif_use_reserved_switch()
1673 ctx->conf.radar_enabled = true; in ieee80211_vif_use_reserved_switch()
1686 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_vif_use_reserved_switch()
1689 if (ctx->replace_state != IEEE80211_CHANCTX_REPLACES_OTHER) in ieee80211_vif_use_reserved_switch()
1692 if (WARN_ON(!ctx->replace_ctx)) { in ieee80211_vif_use_reserved_switch()
1697 list_for_each_entry(link, &ctx->reserved_links, in ieee80211_vif_use_reserved_switch()
1707 ieee80211_recalc_chanctx_min_def(local, ctx, NULL, true); in ieee80211_vif_use_reserved_switch()
1731 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_vif_use_reserved_switch()
1734 if (ctx->replace_state != IEEE80211_CHANCTX_REPLACES_OTHER) in ieee80211_vif_use_reserved_switch()
1737 if (WARN_ON(!ctx->replace_ctx)) { in ieee80211_vif_use_reserved_switch()
1742 list_for_each_entry(link, &ctx->reserved_links, in ieee80211_vif_use_reserved_switch()
1752 &ctx->conf); in ieee80211_vif_use_reserved_switch()
1774 ieee80211_recalc_chanctx_chantype(local, ctx); in ieee80211_vif_use_reserved_switch()
1775 ieee80211_recalc_smps_chanctx(local, ctx); in ieee80211_vif_use_reserved_switch()
1776 ieee80211_recalc_radar_chanctx(local, ctx); in ieee80211_vif_use_reserved_switch()
1777 ieee80211_recalc_chanctx_min_def(local, ctx, NULL, false); in ieee80211_vif_use_reserved_switch()
1779 list_for_each_entry_safe(link, link_tmp, &ctx->reserved_links, in ieee80211_vif_use_reserved_switch()
1781 if (ieee80211_link_get_chanctx(link) != ctx) in ieee80211_vif_use_reserved_switch()
1786 &ctx->assigned_links); in ieee80211_vif_use_reserved_switch()
1790 ieee80211_chan_bw_change(local, ctx, false, false); in ieee80211_vif_use_reserved_switch()
1800 list_for_each_entry_safe(link, link_tmp, &ctx->reserved_links, in ieee80211_vif_use_reserved_switch()
1805 if (WARN_ON(link->reserved_chanctx != ctx)) in ieee80211_vif_use_reserved_switch()
1832 list_for_each_entry_safe(ctx, ctx_tmp, &local->chanctx_list, list) { in ieee80211_vif_use_reserved_switch()
1833 if (ctx->replace_state != IEEE80211_CHANCTX_WILL_BE_REPLACED) in ieee80211_vif_use_reserved_switch()
1836 ctx->replace_ctx->replace_ctx = NULL; in ieee80211_vif_use_reserved_switch()
1837 ctx->replace_ctx->replace_state = in ieee80211_vif_use_reserved_switch()
1840 list_del_rcu(&ctx->list); in ieee80211_vif_use_reserved_switch()
1841 kfree_rcu(ctx, rcu_head); in ieee80211_vif_use_reserved_switch()
1847 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_vif_use_reserved_switch()
1850 if (ctx->replace_state != IEEE80211_CHANCTX_REPLACES_OTHER) in ieee80211_vif_use_reserved_switch()
1853 list_for_each_entry_safe(link, link_tmp, &ctx->reserved_links, in ieee80211_vif_use_reserved_switch()
1870 struct ieee80211_chanctx *ctx; in __ieee80211_link_release_channel() local
1880 ctx = container_of(conf, struct ieee80211_chanctx, conf); in __ieee80211_link_release_channel()
1891 if (ieee80211_chanctx_refcount(local, ctx) == 0) in __ieee80211_link_release_channel()
1892 ieee80211_free_chanctx(local, ctx, skip_idle_recalc); in __ieee80211_link_release_channel()
1908 struct ieee80211_chanctx *ctx; in _ieee80211_link_use_channel() local
1939 ctx = ieee80211_find_chanctx(local, link, chanreq, mode); in _ieee80211_link_use_channel()
1941 if (ctx) in _ieee80211_link_use_channel()
1946 ctx = ERR_PTR(-EBUSY); in _ieee80211_link_use_channel()
1948 ctx = ieee80211_new_chanctx(local, chanreq, mode, in _ieee80211_link_use_channel()
1950 if (IS_ERR(ctx)) { in _ieee80211_link_use_channel()
1951 ret = PTR_ERR(ctx); in _ieee80211_link_use_channel()
1957 ret = ieee80211_assign_link_chanctx(link, ctx, assign_on_failure); in _ieee80211_link_use_channel()
1961 WARN_ON(link->reserved_chanctx != ctx); in _ieee80211_link_use_channel()
1968 if (ieee80211_chanctx_refcount(local, ctx) == 0) in _ieee80211_link_use_channel()
1969 ieee80211_free_chanctx(local, ctx, false); in _ieee80211_link_use_channel()
1973 ieee80211_recalc_smps_chanctx(local, ctx); in _ieee80211_link_use_channel()
1974 ieee80211_recalc_radar_chanctx(local, ctx); in _ieee80211_link_use_channel()
2055 struct ieee80211_chanctx *ctx, in ieee80211_chanctx_recheck() argument
2068 if (rcu_access_pointer(link->conf->chanctx_conf) == &ctx->conf) { in ieee80211_chanctx_recheck()
2076 if (link->reserved_chanctx == ctx) { in ieee80211_chanctx_recheck()
2097 struct ieee80211_chanctx *ctx; in ieee80211_link_change_chanreq() local
2123 ctx = container_of(conf, struct ieee80211_chanctx, conf); in ieee80211_link_change_chanreq()
2125 compat = ieee80211_chanctx_recheck(local, link, ctx, chanreq, &tmp); in ieee80211_link_change_chanreq()
2129 switch (ctx->replace_state) { in ieee80211_link_change_chanreq()
2131 if (!ieee80211_chanctx_reserved_chanreq(local, ctx, compat, in ieee80211_link_change_chanreq()
2149 ieee80211_recalc_chanctx_chantype(local, ctx); in ieee80211_link_change_chanreq()
2200 struct ieee80211_chanctx *ctx; in ieee80211_iter_chan_contexts_atomic() local
2203 list_for_each_entry_rcu(ctx, &local->chanctx_list, list) in ieee80211_iter_chan_contexts_atomic()
2204 if (ctx->driver_present) in ieee80211_iter_chan_contexts_atomic()
2205 iter(hw, &ctx->conf, iter_data); in ieee80211_iter_chan_contexts_atomic()
2218 struct ieee80211_chanctx *ctx; in ieee80211_iter_chan_contexts_mtx() local
2222 list_for_each_entry(ctx, &local->chanctx_list, list) in ieee80211_iter_chan_contexts_mtx()
2223 if (ctx->driver_present) in ieee80211_iter_chan_contexts_mtx()
2224 iter(hw, &ctx->conf, iter_data); in ieee80211_iter_chan_contexts_mtx()