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()
271 nl80211_send_sched_scan_results(rdev, request->dev); in __cfg80211_sched_scan_results()
290 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_sched_scan_stopped_rtnl() local
296 __cfg80211_stop_sched_scan(rdev, true); in cfg80211_sched_scan_stopped_rtnl()
308 int __cfg80211_stop_sched_scan(struct cfg80211_registered_device *rdev, in __cfg80211_stop_sched_scan() argument
316 if (!rdev->sched_scan_req) in __cfg80211_stop_sched_scan()
319 sched_scan_req = rtnl_dereference(rdev->sched_scan_req); in __cfg80211_stop_sched_scan()
323 int err = rdev_sched_scan_stop(rdev, dev); in __cfg80211_stop_sched_scan()
328 nl80211_send_sched_scan(rdev, dev, NL80211_CMD_SCHED_SCAN_STOPPED); in __cfg80211_stop_sched_scan()
330 RCU_INIT_POINTER(rdev->sched_scan_req, NULL); in __cfg80211_stop_sched_scan()
336 void cfg80211_bss_age(struct cfg80211_registered_device *rdev, in cfg80211_bss_age() argument
342 spin_lock_bh(&rdev->bss_lock); in cfg80211_bss_age()
343 list_for_each_entry(bss, &rdev->bss_list, list) in cfg80211_bss_age()
345 spin_unlock_bh(&rdev->bss_lock); in cfg80211_bss_age()
348 void cfg80211_bss_expire(struct cfg80211_registered_device *rdev) in cfg80211_bss_expire() argument
350 __cfg80211_bss_expire(rdev, jiffies - IEEE80211_SCAN_RESULT_EXPIRE); in cfg80211_bss_expire()
587 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_get_bss() local
595 spin_lock_bh(&rdev->bss_lock); in cfg80211_get_bss()
597 list_for_each_entry(bss, &rdev->bss_list, list) { in cfg80211_get_bss()
616 bss_ref_get(rdev, res); in cfg80211_get_bss()
621 spin_unlock_bh(&rdev->bss_lock); in cfg80211_get_bss()
629 static void rb_insert_bss(struct cfg80211_registered_device *rdev, in rb_insert_bss() argument
632 struct rb_node **p = &rdev->bss_tree.rb_node; in rb_insert_bss()
655 rb_insert_color(&bss->rbn, &rdev->bss_tree); in rb_insert_bss()
659 rb_find_bss(struct cfg80211_registered_device *rdev, in rb_find_bss() argument
663 struct rb_node *n = rdev->bss_tree.rb_node; in rb_find_bss()
682 static bool cfg80211_combine_bsses(struct cfg80211_registered_device *rdev, in cfg80211_combine_bsses() argument
712 list_for_each_entry(bss, &rdev->bss_list, list) { in cfg80211_combine_bsses()
746 cfg80211_bss_update(struct cfg80211_registered_device *rdev, in cfg80211_bss_update() argument
757 spin_lock_bh(&rdev->bss_lock); in cfg80211_bss_update()
760 spin_unlock_bh(&rdev->bss_lock); in cfg80211_bss_update()
764 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()
1110 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_ref_bss() local
1118 spin_lock_bh(&rdev->bss_lock); in cfg80211_ref_bss()
1119 bss_ref_get(rdev, bss); in cfg80211_ref_bss()
1120 spin_unlock_bh(&rdev->bss_lock); in cfg80211_ref_bss()
1126 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_put_bss() local
1134 spin_lock_bh(&rdev->bss_lock); in cfg80211_put_bss()
1135 bss_ref_put(rdev, bss); in cfg80211_put_bss()
1136 spin_unlock_bh(&rdev->bss_lock); in cfg80211_put_bss()
1142 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_unlink_bss() local
1150 spin_lock_bh(&rdev->bss_lock); in cfg80211_unlink_bss()
1152 if (__cfg80211_unlink_bss(rdev, bss)) in cfg80211_unlink_bss()
1153 rdev->bss_generation++; in cfg80211_unlink_bss()
1155 spin_unlock_bh(&rdev->bss_lock); in cfg80211_unlink_bss()
1163 struct cfg80211_registered_device *rdev; in cfg80211_get_dev_from_ifindex() local
1172 rdev = wiphy_to_rdev(dev->ieee80211_ptr->wiphy); in cfg80211_get_dev_from_ifindex()
1174 rdev = ERR_PTR(-ENODEV); in cfg80211_get_dev_from_ifindex()
1176 return rdev; in cfg80211_get_dev_from_ifindex()
1183 struct cfg80211_registered_device *rdev; in cfg80211_wext_siwscan() local
1196 rdev = cfg80211_get_dev_from_ifindex(dev_net(dev), dev->ifindex); in cfg80211_wext_siwscan()
1198 if (IS_ERR(rdev)) in cfg80211_wext_siwscan()
1199 return PTR_ERR(rdev); in cfg80211_wext_siwscan()
1201 if (rdev->scan_req || rdev->scan_msg) { in cfg80211_wext_siwscan()
1206 wiphy = &rdev->wiphy; in cfg80211_wext_siwscan()
1296 rdev->scan_req = creq; in cfg80211_wext_siwscan()
1297 err = rdev_scan(rdev, creq); in cfg80211_wext_siwscan()
1299 rdev->scan_req = NULL; in cfg80211_wext_siwscan()
1302 nl80211_send_scan_start(rdev, dev->ieee80211_ptr); in cfg80211_wext_siwscan()
1620 static int ieee80211_scan_results(struct cfg80211_registered_device *rdev, in ieee80211_scan_results() argument
1629 spin_lock_bh(&rdev->bss_lock); in ieee80211_scan_results()
1630 cfg80211_bss_expire(rdev); in ieee80211_scan_results()
1632 list_for_each_entry(bss, &rdev->bss_list, list) { in ieee80211_scan_results()
1637 current_ev = ieee80211_bss(&rdev->wiphy, info, bss, in ieee80211_scan_results()
1644 spin_unlock_bh(&rdev->bss_lock); in ieee80211_scan_results()
1656 struct cfg80211_registered_device *rdev; in cfg80211_wext_giwscan() local
1662 rdev = cfg80211_get_dev_from_ifindex(dev_net(dev), dev->ifindex); in cfg80211_wext_giwscan()
1664 if (IS_ERR(rdev)) in cfg80211_wext_giwscan()
1665 return PTR_ERR(rdev); in cfg80211_wext_giwscan()
1667 if (rdev->scan_req || rdev->scan_msg) in cfg80211_wext_giwscan()
1670 res = ieee80211_scan_results(rdev, info, extra, data->length); in cfg80211_wext_giwscan()