Lines Matching refs:rdev
85 static inline void bss_ref_get(struct cfg80211_registered_device *rdev, in bss_ref_get() argument
88 lockdep_assert_held(&rdev->bss_lock); in bss_ref_get()
99 static inline void bss_ref_put(struct cfg80211_registered_device *rdev, in bss_ref_put() argument
102 lockdep_assert_held(&rdev->bss_lock); in bss_ref_put()
118 static bool __cfg80211_unlink_bss(struct cfg80211_registered_device *rdev, in __cfg80211_unlink_bss() argument
121 lockdep_assert_held(&rdev->bss_lock); in __cfg80211_unlink_bss()
138 rb_erase(&bss->rbn, &rdev->bss_tree); in __cfg80211_unlink_bss()
139 bss_ref_put(rdev, bss); in __cfg80211_unlink_bss()
143 static void __cfg80211_bss_expire(struct cfg80211_registered_device *rdev, in __cfg80211_bss_expire() argument
149 lockdep_assert_held(&rdev->bss_lock); in __cfg80211_bss_expire()
151 list_for_each_entry_safe(bss, tmp, &rdev->bss_list, list) { in __cfg80211_bss_expire()
157 if (__cfg80211_unlink_bss(rdev, bss)) in __cfg80211_bss_expire()
162 rdev->bss_generation++; in __cfg80211_bss_expire()
165 void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev, in ___cfg80211_scan_done() argument
177 if (rdev->scan_msg) { in ___cfg80211_scan_done()
178 nl80211_send_scan_result(rdev, rdev->scan_msg); in ___cfg80211_scan_done()
179 rdev->scan_msg = NULL; in ___cfg80211_scan_done()
183 request = rdev->scan_req; in ___cfg80211_scan_done()
200 spin_lock_bh(&rdev->bss_lock); in ___cfg80211_scan_done()
201 __cfg80211_bss_expire(rdev, request->scan_start); in ___cfg80211_scan_done()
202 spin_unlock_bh(&rdev->bss_lock); in ___cfg80211_scan_done()
205 msg = nl80211_build_scan_msg(rdev, wdev, request->aborted); in ___cfg80211_scan_done()
218 rdev->scan_req = NULL; in ___cfg80211_scan_done()
222 rdev->scan_msg = msg; in ___cfg80211_scan_done()
224 nl80211_send_scan_result(rdev, msg); in ___cfg80211_scan_done()
229 struct cfg80211_registered_device *rdev; in __cfg80211_scan_done() local
231 rdev = container_of(wk, struct cfg80211_registered_device, in __cfg80211_scan_done()
235 ___cfg80211_scan_done(rdev, true); in __cfg80211_scan_done()
252 struct cfg80211_registered_device *rdev; in __cfg80211_sched_scan_results() local
255 rdev = container_of(wk, struct cfg80211_registered_device, in __cfg80211_sched_scan_results()
260 request = rtnl_dereference(rdev->sched_scan_req); in __cfg80211_sched_scan_results()
266 spin_lock_bh(&rdev->bss_lock); in __cfg80211_sched_scan_results()
267 __cfg80211_bss_expire(rdev, request->scan_start); in __cfg80211_sched_scan_results()
268 spin_unlock_bh(&rdev->bss_lock); in __cfg80211_sched_scan_results()
272 nl80211_send_sched_scan_results(rdev, request->dev); in __cfg80211_sched_scan_results()
291 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_sched_scan_stopped_rtnl() local
297 __cfg80211_stop_sched_scan(rdev, true); in cfg80211_sched_scan_stopped_rtnl()
309 int __cfg80211_stop_sched_scan(struct cfg80211_registered_device *rdev, in __cfg80211_stop_sched_scan() argument
317 if (!rdev->sched_scan_req) in __cfg80211_stop_sched_scan()
320 sched_scan_req = rtnl_dereference(rdev->sched_scan_req); in __cfg80211_stop_sched_scan()
324 int err = rdev_sched_scan_stop(rdev, dev); in __cfg80211_stop_sched_scan()
329 nl80211_send_sched_scan(rdev, dev, NL80211_CMD_SCHED_SCAN_STOPPED); in __cfg80211_stop_sched_scan()
331 RCU_INIT_POINTER(rdev->sched_scan_req, NULL); in __cfg80211_stop_sched_scan()
337 void cfg80211_bss_age(struct cfg80211_registered_device *rdev, in cfg80211_bss_age() argument
343 spin_lock_bh(&rdev->bss_lock); in cfg80211_bss_age()
344 list_for_each_entry(bss, &rdev->bss_list, list) in cfg80211_bss_age()
346 spin_unlock_bh(&rdev->bss_lock); in cfg80211_bss_age()
349 void cfg80211_bss_expire(struct cfg80211_registered_device *rdev) in cfg80211_bss_expire() argument
351 __cfg80211_bss_expire(rdev, jiffies - IEEE80211_SCAN_RESULT_EXPIRE); in cfg80211_bss_expire()
588 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_get_bss() local
596 spin_lock_bh(&rdev->bss_lock); in cfg80211_get_bss()
598 list_for_each_entry(bss, &rdev->bss_list, list) { in cfg80211_get_bss()
617 bss_ref_get(rdev, res); in cfg80211_get_bss()
622 spin_unlock_bh(&rdev->bss_lock); in cfg80211_get_bss()
630 static void rb_insert_bss(struct cfg80211_registered_device *rdev, in rb_insert_bss() argument
633 struct rb_node **p = &rdev->bss_tree.rb_node; in rb_insert_bss()
656 rb_insert_color(&bss->rbn, &rdev->bss_tree); in rb_insert_bss()
660 rb_find_bss(struct cfg80211_registered_device *rdev, in rb_find_bss() argument
664 struct rb_node *n = rdev->bss_tree.rb_node; in rb_find_bss()
683 static bool cfg80211_combine_bsses(struct cfg80211_registered_device *rdev, in cfg80211_combine_bsses() argument
713 list_for_each_entry(bss, &rdev->bss_list, list) { in cfg80211_combine_bsses()
747 cfg80211_bss_update(struct cfg80211_registered_device *rdev, in cfg80211_bss_update() argument
758 spin_lock_bh(&rdev->bss_lock); in cfg80211_bss_update()
761 spin_unlock_bh(&rdev->bss_lock); in cfg80211_bss_update()
765 found = rb_find_bss(rdev, tmp, BSS_CMP_REGULAR); in cfg80211_bss_update()
852 new = kzalloc(sizeof(*new) + rdev->wiphy.bss_priv_size, in cfg80211_bss_update()
868 hidden = rb_find_bss(rdev, tmp, BSS_CMP_HIDE_ZLEN); in cfg80211_bss_update()
870 hidden = rb_find_bss(rdev, tmp, in cfg80211_bss_update()
887 if (!cfg80211_combine_bsses(rdev, new)) { in cfg80211_bss_update()
893 list_add_tail(&new->list, &rdev->bss_list); in cfg80211_bss_update()
894 rb_insert_bss(rdev, new); in cfg80211_bss_update()
898 rdev->bss_generation++; in cfg80211_bss_update()
899 bss_ref_get(rdev, found); in cfg80211_bss_update()
900 spin_unlock_bh(&rdev->bss_lock); in cfg80211_bss_update()
904 spin_unlock_bh(&rdev->bss_lock); in cfg80211_bss_update()
1109 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_ref_bss() local
1117 spin_lock_bh(&rdev->bss_lock); in cfg80211_ref_bss()
1118 bss_ref_get(rdev, bss); in cfg80211_ref_bss()
1119 spin_unlock_bh(&rdev->bss_lock); in cfg80211_ref_bss()
1125 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_put_bss() local
1133 spin_lock_bh(&rdev->bss_lock); in cfg80211_put_bss()
1134 bss_ref_put(rdev, bss); in cfg80211_put_bss()
1135 spin_unlock_bh(&rdev->bss_lock); in cfg80211_put_bss()
1141 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_unlink_bss() local
1149 spin_lock_bh(&rdev->bss_lock); in cfg80211_unlink_bss()
1151 if (__cfg80211_unlink_bss(rdev, bss)) in cfg80211_unlink_bss()
1152 rdev->bss_generation++; in cfg80211_unlink_bss()
1154 spin_unlock_bh(&rdev->bss_lock); in cfg80211_unlink_bss()
1162 struct cfg80211_registered_device *rdev; in cfg80211_get_dev_from_ifindex() local
1171 rdev = wiphy_to_rdev(dev->ieee80211_ptr->wiphy); in cfg80211_get_dev_from_ifindex()
1173 rdev = ERR_PTR(-ENODEV); in cfg80211_get_dev_from_ifindex()
1175 return rdev; in cfg80211_get_dev_from_ifindex()
1182 struct cfg80211_registered_device *rdev; in cfg80211_wext_siwscan() local
1195 rdev = cfg80211_get_dev_from_ifindex(dev_net(dev), dev->ifindex); in cfg80211_wext_siwscan()
1197 if (IS_ERR(rdev)) in cfg80211_wext_siwscan()
1198 return PTR_ERR(rdev); in cfg80211_wext_siwscan()
1200 if (rdev->scan_req || rdev->scan_msg) { in cfg80211_wext_siwscan()
1205 wiphy = &rdev->wiphy; in cfg80211_wext_siwscan()
1295 rdev->scan_req = creq; in cfg80211_wext_siwscan()
1296 err = rdev_scan(rdev, creq); in cfg80211_wext_siwscan()
1298 rdev->scan_req = NULL; in cfg80211_wext_siwscan()
1301 nl80211_send_scan_start(rdev, dev->ieee80211_ptr); in cfg80211_wext_siwscan()
1619 static int ieee80211_scan_results(struct cfg80211_registered_device *rdev, in ieee80211_scan_results() argument
1628 spin_lock_bh(&rdev->bss_lock); in ieee80211_scan_results()
1629 cfg80211_bss_expire(rdev); in ieee80211_scan_results()
1631 list_for_each_entry(bss, &rdev->bss_list, list) { in ieee80211_scan_results()
1636 current_ev = ieee80211_bss(&rdev->wiphy, info, bss, in ieee80211_scan_results()
1643 spin_unlock_bh(&rdev->bss_lock); in ieee80211_scan_results()
1655 struct cfg80211_registered_device *rdev; in cfg80211_wext_giwscan() local
1661 rdev = cfg80211_get_dev_from_ifindex(dev_net(dev), dev->ifindex); in cfg80211_wext_giwscan()
1663 if (IS_ERR(rdev)) in cfg80211_wext_giwscan()
1664 return PTR_ERR(rdev); in cfg80211_wext_giwscan()
1666 if (rdev->scan_req || rdev->scan_msg) in cfg80211_wext_giwscan()
1669 res = ieee80211_scan_results(rdev, info, extra, data->length); in cfg80211_wext_giwscan()