core.c 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * This is the linux wireless configuration interface.
  4. *
  5. * Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
  6. * Copyright 2013-2014 Intel Mobile Communications GmbH
  7. * Copyright 2015-2017 Intel Deutschland GmbH
  8. * Copyright (C) 2018-2024 Intel Corporation
  9. */
  10. #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  11. #include <linux/if.h>
  12. #include <linux/module.h>
  13. #include <linux/err.h>
  14. #include <linux/list.h>
  15. #include <linux/slab.h>
  16. #include <linux/nl80211.h>
  17. #include <linux/debugfs.h>
  18. #include <linux/notifier.h>
  19. #include <linux/device.h>
  20. #include <linux/etherdevice.h>
  21. #include <linux/rtnetlink.h>
  22. #include <linux/sched.h>
  23. #include <net/genetlink.h>
  24. #include <net/cfg80211.h>
  25. #include "nl80211.h"
  26. #include "core.h"
  27. #include "sysfs.h"
  28. #include "debugfs.h"
  29. #include "wext-compat.h"
  30. #include "rdev-ops.h"
  31. /* name for sysfs, %d is appended */
  32. #define PHY_NAME "phy"
  33. MODULE_AUTHOR("Johannes Berg");
  34. MODULE_LICENSE("GPL");
  35. MODULE_DESCRIPTION("wireless configuration support");
  36. MODULE_ALIAS_GENL_FAMILY(NL80211_GENL_NAME);
  37. /* RCU-protected (and RTNL for writers) */
  38. LIST_HEAD(cfg80211_rdev_list);
  39. int cfg80211_rdev_list_generation;
  40. /* for debugfs */
  41. static struct dentry *ieee80211_debugfs_dir;
  42. /* for the cleanup, scan and event works */
  43. struct workqueue_struct *cfg80211_wq;
  44. static bool cfg80211_disable_40mhz_24ghz;
  45. module_param(cfg80211_disable_40mhz_24ghz, bool, 0644);
  46. MODULE_PARM_DESC(cfg80211_disable_40mhz_24ghz,
  47. "Disable 40MHz support in the 2.4GHz band");
  48. struct cfg80211_registered_device *cfg80211_rdev_by_wiphy_idx(int wiphy_idx)
  49. {
  50. struct cfg80211_registered_device *result = NULL, *rdev;
  51. ASSERT_RTNL();
  52. for_each_rdev(rdev) {
  53. if (rdev->wiphy_idx == wiphy_idx) {
  54. result = rdev;
  55. break;
  56. }
  57. }
  58. return result;
  59. }
  60. int get_wiphy_idx(struct wiphy *wiphy)
  61. {
  62. struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
  63. return rdev->wiphy_idx;
  64. }
  65. struct wiphy *wiphy_idx_to_wiphy(int wiphy_idx)
  66. {
  67. struct cfg80211_registered_device *rdev;
  68. ASSERT_RTNL();
  69. rdev = cfg80211_rdev_by_wiphy_idx(wiphy_idx);
  70. if (!rdev)
  71. return NULL;
  72. return &rdev->wiphy;
  73. }
  74. static int cfg80211_dev_check_name(struct cfg80211_registered_device *rdev,
  75. const char *newname)
  76. {
  77. struct cfg80211_registered_device *rdev2;
  78. int wiphy_idx, taken = -1, digits;
  79. ASSERT_RTNL();
  80. if (strlen(newname) > NL80211_WIPHY_NAME_MAXLEN)
  81. return -EINVAL;
  82. /* prohibit calling the thing phy%d when %d is not its number */
  83. sscanf(newname, PHY_NAME "%d%n", &wiphy_idx, &taken);
  84. if (taken == strlen(newname) && wiphy_idx != rdev->wiphy_idx) {
  85. /* count number of places needed to print wiphy_idx */
  86. digits = 1;
  87. while (wiphy_idx /= 10)
  88. digits++;
  89. /*
  90. * deny the name if it is phy<idx> where <idx> is printed
  91. * without leading zeroes. taken == strlen(newname) here
  92. */
  93. if (taken == strlen(PHY_NAME) + digits)
  94. return -EINVAL;
  95. }
  96. /* Ensure another device does not already have this name. */
  97. for_each_rdev(rdev2)
  98. if (strcmp(newname, wiphy_name(&rdev2->wiphy)) == 0)
  99. return -EINVAL;
  100. return 0;
  101. }
  102. int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
  103. char *newname)
  104. {
  105. int result;
  106. ASSERT_RTNL();
  107. lockdep_assert_wiphy(&rdev->wiphy);
  108. /* Ignore nop renames */
  109. if (strcmp(newname, wiphy_name(&rdev->wiphy)) == 0)
  110. return 0;
  111. result = cfg80211_dev_check_name(rdev, newname);
  112. if (result < 0)
  113. return result;
  114. result = device_rename(&rdev->wiphy.dev, newname);
  115. if (result)
  116. return result;
  117. if (!IS_ERR_OR_NULL(rdev->wiphy.debugfsdir))
  118. debugfs_rename(rdev->wiphy.debugfsdir->d_parent,
  119. rdev->wiphy.debugfsdir,
  120. rdev->wiphy.debugfsdir->d_parent, newname);
  121. nl80211_notify_wiphy(rdev, NL80211_CMD_NEW_WIPHY);
  122. return 0;
  123. }
  124. int cfg80211_switch_netns(struct cfg80211_registered_device *rdev,
  125. struct net *net)
  126. {
  127. struct wireless_dev *wdev;
  128. int err = 0;
  129. if (!(rdev->wiphy.flags & WIPHY_FLAG_NETNS_OK))
  130. return -EOPNOTSUPP;
  131. list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
  132. if (!wdev->netdev)
  133. continue;
  134. wdev->netdev->netns_local = false;
  135. err = dev_change_net_namespace(wdev->netdev, net, "wlan%d");
  136. if (err)
  137. break;
  138. wdev->netdev->netns_local = true;
  139. }
  140. if (err) {
  141. /* failed -- clean up to old netns */
  142. net = wiphy_net(&rdev->wiphy);
  143. list_for_each_entry_continue_reverse(wdev,
  144. &rdev->wiphy.wdev_list,
  145. list) {
  146. if (!wdev->netdev)
  147. continue;
  148. wdev->netdev->netns_local = false;
  149. err = dev_change_net_namespace(wdev->netdev, net,
  150. "wlan%d");
  151. WARN_ON(err);
  152. wdev->netdev->netns_local = true;
  153. }
  154. return err;
  155. }
  156. wiphy_lock(&rdev->wiphy);
  157. list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
  158. if (!wdev->netdev)
  159. continue;
  160. nl80211_notify_iface(rdev, wdev, NL80211_CMD_DEL_INTERFACE);
  161. }
  162. nl80211_notify_wiphy(rdev, NL80211_CMD_DEL_WIPHY);
  163. wiphy_net_set(&rdev->wiphy, net);
  164. err = device_rename(&rdev->wiphy.dev, dev_name(&rdev->wiphy.dev));
  165. WARN_ON(err);
  166. nl80211_notify_wiphy(rdev, NL80211_CMD_NEW_WIPHY);
  167. list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
  168. if (!wdev->netdev)
  169. continue;
  170. nl80211_notify_iface(rdev, wdev, NL80211_CMD_NEW_INTERFACE);
  171. }
  172. wiphy_unlock(&rdev->wiphy);
  173. return 0;
  174. }
  175. static void cfg80211_rfkill_poll(struct rfkill *rfkill, void *data)
  176. {
  177. struct cfg80211_registered_device *rdev = data;
  178. wiphy_lock(&rdev->wiphy);
  179. rdev_rfkill_poll(rdev);
  180. wiphy_unlock(&rdev->wiphy);
  181. }
  182. void cfg80211_stop_p2p_device(struct cfg80211_registered_device *rdev,
  183. struct wireless_dev *wdev)
  184. {
  185. lockdep_assert_held(&rdev->wiphy.mtx);
  186. if (WARN_ON(wdev->iftype != NL80211_IFTYPE_P2P_DEVICE))
  187. return;
  188. if (!wdev_running(wdev))
  189. return;
  190. rdev_stop_p2p_device(rdev, wdev);
  191. wdev->is_running = false;
  192. rdev->opencount--;
  193. if (rdev->scan_req && rdev->scan_req->wdev == wdev) {
  194. if (WARN_ON(!rdev->scan_req->notified &&
  195. (!rdev->int_scan_req ||
  196. !rdev->int_scan_req->notified)))
  197. rdev->scan_req->info.aborted = true;
  198. ___cfg80211_scan_done(rdev, false);
  199. }
  200. }
  201. void cfg80211_stop_nan(struct cfg80211_registered_device *rdev,
  202. struct wireless_dev *wdev)
  203. {
  204. lockdep_assert_held(&rdev->wiphy.mtx);
  205. if (WARN_ON(wdev->iftype != NL80211_IFTYPE_NAN))
  206. return;
  207. if (!wdev_running(wdev))
  208. return;
  209. rdev_stop_nan(rdev, wdev);
  210. wdev->is_running = false;
  211. rdev->opencount--;
  212. }
  213. void cfg80211_shutdown_all_interfaces(struct wiphy *wiphy)
  214. {
  215. struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
  216. struct wireless_dev *wdev;
  217. ASSERT_RTNL();
  218. list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
  219. if (wdev->netdev) {
  220. dev_close(wdev->netdev);
  221. continue;
  222. }
  223. /* otherwise, check iftype */
  224. wiphy_lock(wiphy);
  225. switch (wdev->iftype) {
  226. case NL80211_IFTYPE_P2P_DEVICE:
  227. cfg80211_stop_p2p_device(rdev, wdev);
  228. break;
  229. case NL80211_IFTYPE_NAN:
  230. cfg80211_stop_nan(rdev, wdev);
  231. break;
  232. default:
  233. break;
  234. }
  235. wiphy_unlock(wiphy);
  236. }
  237. }
  238. EXPORT_SYMBOL_GPL(cfg80211_shutdown_all_interfaces);
  239. static int cfg80211_rfkill_set_block(void *data, bool blocked)
  240. {
  241. struct cfg80211_registered_device *rdev = data;
  242. if (!blocked)
  243. return 0;
  244. rtnl_lock();
  245. cfg80211_shutdown_all_interfaces(&rdev->wiphy);
  246. rtnl_unlock();
  247. return 0;
  248. }
  249. static void cfg80211_rfkill_block_work(struct work_struct *work)
  250. {
  251. struct cfg80211_registered_device *rdev;
  252. rdev = container_of(work, struct cfg80211_registered_device,
  253. rfkill_block);
  254. cfg80211_rfkill_set_block(rdev, true);
  255. }
  256. static void cfg80211_event_work(struct work_struct *work)
  257. {
  258. struct cfg80211_registered_device *rdev;
  259. rdev = container_of(work, struct cfg80211_registered_device,
  260. event_work);
  261. wiphy_lock(&rdev->wiphy);
  262. cfg80211_process_rdev_events(rdev);
  263. wiphy_unlock(&rdev->wiphy);
  264. }
  265. void cfg80211_destroy_ifaces(struct cfg80211_registered_device *rdev)
  266. {
  267. struct wireless_dev *wdev, *tmp;
  268. ASSERT_RTNL();
  269. list_for_each_entry_safe(wdev, tmp, &rdev->wiphy.wdev_list, list) {
  270. if (wdev->nl_owner_dead) {
  271. if (wdev->netdev)
  272. dev_close(wdev->netdev);
  273. wiphy_lock(&rdev->wiphy);
  274. cfg80211_leave(rdev, wdev);
  275. cfg80211_remove_virtual_intf(rdev, wdev);
  276. wiphy_unlock(&rdev->wiphy);
  277. }
  278. }
  279. }
  280. static void cfg80211_destroy_iface_wk(struct work_struct *work)
  281. {
  282. struct cfg80211_registered_device *rdev;
  283. rdev = container_of(work, struct cfg80211_registered_device,
  284. destroy_work);
  285. rtnl_lock();
  286. cfg80211_destroy_ifaces(rdev);
  287. rtnl_unlock();
  288. }
  289. static void cfg80211_sched_scan_stop_wk(struct wiphy *wiphy,
  290. struct wiphy_work *work)
  291. {
  292. struct cfg80211_registered_device *rdev;
  293. struct cfg80211_sched_scan_request *req, *tmp;
  294. rdev = container_of(work, struct cfg80211_registered_device,
  295. sched_scan_stop_wk);
  296. list_for_each_entry_safe(req, tmp, &rdev->sched_scan_req_list, list) {
  297. if (req->nl_owner_dead)
  298. cfg80211_stop_sched_scan_req(rdev, req, false);
  299. }
  300. }
  301. static void cfg80211_propagate_radar_detect_wk(struct work_struct *work)
  302. {
  303. struct cfg80211_registered_device *rdev;
  304. rdev = container_of(work, struct cfg80211_registered_device,
  305. propagate_radar_detect_wk);
  306. rtnl_lock();
  307. regulatory_propagate_dfs_state(&rdev->wiphy, &rdev->radar_chandef,
  308. NL80211_DFS_UNAVAILABLE,
  309. NL80211_RADAR_DETECTED);
  310. rtnl_unlock();
  311. }
  312. static void cfg80211_propagate_cac_done_wk(struct work_struct *work)
  313. {
  314. struct cfg80211_registered_device *rdev;
  315. rdev = container_of(work, struct cfg80211_registered_device,
  316. propagate_cac_done_wk);
  317. rtnl_lock();
  318. regulatory_propagate_dfs_state(&rdev->wiphy, &rdev->cac_done_chandef,
  319. NL80211_DFS_AVAILABLE,
  320. NL80211_RADAR_CAC_FINISHED);
  321. rtnl_unlock();
  322. }
  323. static void cfg80211_wiphy_work(struct work_struct *work)
  324. {
  325. struct cfg80211_registered_device *rdev;
  326. struct wiphy_work *wk;
  327. rdev = container_of(work, struct cfg80211_registered_device, wiphy_work);
  328. trace_wiphy_work_worker_start(&rdev->wiphy);
  329. wiphy_lock(&rdev->wiphy);
  330. if (rdev->suspended)
  331. goto out;
  332. spin_lock_irq(&rdev->wiphy_work_lock);
  333. wk = list_first_entry_or_null(&rdev->wiphy_work_list,
  334. struct wiphy_work, entry);
  335. if (wk) {
  336. list_del_init(&wk->entry);
  337. if (!list_empty(&rdev->wiphy_work_list))
  338. queue_work(system_unbound_wq, work);
  339. spin_unlock_irq(&rdev->wiphy_work_lock);
  340. trace_wiphy_work_run(&rdev->wiphy, wk);
  341. wk->func(&rdev->wiphy, wk);
  342. } else {
  343. spin_unlock_irq(&rdev->wiphy_work_lock);
  344. }
  345. out:
  346. wiphy_unlock(&rdev->wiphy);
  347. }
  348. /* exported functions */
  349. struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv,
  350. const char *requested_name)
  351. {
  352. static atomic_t wiphy_counter = ATOMIC_INIT(0);
  353. struct cfg80211_registered_device *rdev;
  354. int alloc_size;
  355. WARN_ON(ops->add_key && (!ops->del_key || !ops->set_default_key));
  356. WARN_ON(ops->auth && (!ops->assoc || !ops->deauth || !ops->disassoc));
  357. WARN_ON(ops->connect && !ops->disconnect);
  358. WARN_ON(ops->join_ibss && !ops->leave_ibss);
  359. WARN_ON(ops->add_virtual_intf && !ops->del_virtual_intf);
  360. WARN_ON(ops->add_station && !ops->del_station);
  361. WARN_ON(ops->add_mpath && !ops->del_mpath);
  362. WARN_ON(ops->join_mesh && !ops->leave_mesh);
  363. WARN_ON(ops->start_p2p_device && !ops->stop_p2p_device);
  364. WARN_ON(ops->start_ap && !ops->stop_ap);
  365. WARN_ON(ops->join_ocb && !ops->leave_ocb);
  366. WARN_ON(ops->suspend && !ops->resume);
  367. WARN_ON(ops->sched_scan_start && !ops->sched_scan_stop);
  368. WARN_ON(ops->remain_on_channel && !ops->cancel_remain_on_channel);
  369. WARN_ON(ops->tdls_channel_switch && !ops->tdls_cancel_channel_switch);
  370. WARN_ON(ops->add_tx_ts && !ops->del_tx_ts);
  371. alloc_size = sizeof(*rdev) + sizeof_priv;
  372. rdev = kzalloc(alloc_size, GFP_KERNEL);
  373. if (!rdev)
  374. return NULL;
  375. rdev->ops = ops;
  376. rdev->wiphy_idx = atomic_inc_return(&wiphy_counter);
  377. if (unlikely(rdev->wiphy_idx < 0)) {
  378. /* ugh, wrapped! */
  379. atomic_dec(&wiphy_counter);
  380. kfree(rdev);
  381. return NULL;
  382. }
  383. /* atomic_inc_return makes it start at 1, make it start at 0 */
  384. rdev->wiphy_idx--;
  385. /* give it a proper name */
  386. if (requested_name && requested_name[0]) {
  387. int rv;
  388. rtnl_lock();
  389. rv = cfg80211_dev_check_name(rdev, requested_name);
  390. if (rv < 0) {
  391. rtnl_unlock();
  392. goto use_default_name;
  393. }
  394. rv = dev_set_name(&rdev->wiphy.dev, "%s", requested_name);
  395. rtnl_unlock();
  396. if (rv)
  397. goto use_default_name;
  398. } else {
  399. int rv;
  400. use_default_name:
  401. /* NOTE: This is *probably* safe w/out holding rtnl because of
  402. * the restrictions on phy names. Probably this call could
  403. * fail if some other part of the kernel (re)named a device
  404. * phyX. But, might should add some locking and check return
  405. * value, and use a different name if this one exists?
  406. */
  407. rv = dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx);
  408. if (rv < 0) {
  409. kfree(rdev);
  410. return NULL;
  411. }
  412. }
  413. mutex_init(&rdev->wiphy.mtx);
  414. INIT_LIST_HEAD(&rdev->wiphy.wdev_list);
  415. INIT_LIST_HEAD(&rdev->beacon_registrations);
  416. spin_lock_init(&rdev->beacon_registrations_lock);
  417. spin_lock_init(&rdev->bss_lock);
  418. INIT_LIST_HEAD(&rdev->bss_list);
  419. INIT_LIST_HEAD(&rdev->sched_scan_req_list);
  420. wiphy_work_init(&rdev->scan_done_wk, __cfg80211_scan_done);
  421. INIT_DELAYED_WORK(&rdev->dfs_update_channels_wk,
  422. cfg80211_dfs_channels_update_work);
  423. #ifdef CONFIG_CFG80211_WEXT
  424. rdev->wiphy.wext = &cfg80211_wext_handler;
  425. #endif
  426. device_initialize(&rdev->wiphy.dev);
  427. rdev->wiphy.dev.class = &ieee80211_class;
  428. rdev->wiphy.dev.platform_data = rdev;
  429. device_enable_async_suspend(&rdev->wiphy.dev);
  430. INIT_WORK(&rdev->destroy_work, cfg80211_destroy_iface_wk);
  431. wiphy_work_init(&rdev->sched_scan_stop_wk, cfg80211_sched_scan_stop_wk);
  432. INIT_WORK(&rdev->sched_scan_res_wk, cfg80211_sched_scan_results_wk);
  433. INIT_WORK(&rdev->propagate_radar_detect_wk,
  434. cfg80211_propagate_radar_detect_wk);
  435. INIT_WORK(&rdev->propagate_cac_done_wk, cfg80211_propagate_cac_done_wk);
  436. INIT_WORK(&rdev->mgmt_registrations_update_wk,
  437. cfg80211_mgmt_registrations_update_wk);
  438. spin_lock_init(&rdev->mgmt_registrations_lock);
  439. INIT_WORK(&rdev->wiphy_work, cfg80211_wiphy_work);
  440. INIT_LIST_HEAD(&rdev->wiphy_work_list);
  441. spin_lock_init(&rdev->wiphy_work_lock);
  442. #ifdef CONFIG_CFG80211_DEFAULT_PS
  443. rdev->wiphy.flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT;
  444. #endif
  445. wiphy_net_set(&rdev->wiphy, &init_net);
  446. rdev->rfkill_ops.set_block = cfg80211_rfkill_set_block;
  447. rdev->wiphy.rfkill = rfkill_alloc(dev_name(&rdev->wiphy.dev),
  448. &rdev->wiphy.dev, RFKILL_TYPE_WLAN,
  449. &rdev->rfkill_ops, rdev);
  450. if (!rdev->wiphy.rfkill) {
  451. wiphy_free(&rdev->wiphy);
  452. return NULL;
  453. }
  454. INIT_WORK(&rdev->rfkill_block, cfg80211_rfkill_block_work);
  455. INIT_WORK(&rdev->conn_work, cfg80211_conn_work);
  456. INIT_WORK(&rdev->event_work, cfg80211_event_work);
  457. INIT_WORK(&rdev->background_cac_abort_wk,
  458. cfg80211_background_cac_abort_wk);
  459. INIT_DELAYED_WORK(&rdev->background_cac_done_wk,
  460. cfg80211_background_cac_done_wk);
  461. init_waitqueue_head(&rdev->dev_wait);
  462. /*
  463. * Initialize wiphy parameters to IEEE 802.11 MIB default values.
  464. * Fragmentation and RTS threshold are disabled by default with the
  465. * special -1 value.
  466. */
  467. rdev->wiphy.retry_short = 7;
  468. rdev->wiphy.retry_long = 4;
  469. rdev->wiphy.frag_threshold = (u32) -1;
  470. rdev->wiphy.rts_threshold = (u32) -1;
  471. rdev->wiphy.coverage_class = 0;
  472. rdev->wiphy.max_num_csa_counters = 1;
  473. rdev->wiphy.max_sched_scan_plans = 1;
  474. rdev->wiphy.max_sched_scan_plan_interval = U32_MAX;
  475. return &rdev->wiphy;
  476. }
  477. EXPORT_SYMBOL(wiphy_new_nm);
  478. static
  479. int wiphy_verify_iface_combinations(struct wiphy *wiphy,
  480. const struct ieee80211_iface_combination *iface_comb,
  481. int n_iface_comb,
  482. bool combined_radio)
  483. {
  484. const struct ieee80211_iface_combination *c;
  485. int i, j;
  486. for (i = 0; i < n_iface_comb; i++) {
  487. u32 cnt = 0;
  488. u16 all_iftypes = 0;
  489. c = &iface_comb[i];
  490. /*
  491. * Combinations with just one interface aren't real,
  492. * however we make an exception for DFS.
  493. */
  494. if (WARN_ON((c->max_interfaces < 2) && !c->radar_detect_widths))
  495. return -EINVAL;
  496. /* Need at least one channel */
  497. if (WARN_ON(!c->num_different_channels))
  498. return -EINVAL;
  499. /* DFS only works on one channel. Avoid this check
  500. * for multi-radio global combination, since it hold
  501. * the capabilities of all radio combinations.
  502. */
  503. if (!combined_radio &&
  504. WARN_ON(c->radar_detect_widths &&
  505. c->num_different_channels > 1))
  506. return -EINVAL;
  507. if (WARN_ON(!c->n_limits))
  508. return -EINVAL;
  509. for (j = 0; j < c->n_limits; j++) {
  510. u16 types = c->limits[j].types;
  511. /* interface types shouldn't overlap */
  512. if (WARN_ON(types & all_iftypes))
  513. return -EINVAL;
  514. all_iftypes |= types;
  515. if (WARN_ON(!c->limits[j].max))
  516. return -EINVAL;
  517. /* Shouldn't list software iftypes in combinations! */
  518. if (WARN_ON(wiphy->software_iftypes & types))
  519. return -EINVAL;
  520. /* Only a single P2P_DEVICE can be allowed, avoid this
  521. * check for multi-radio global combination, since it
  522. * hold the capabilities of all radio combinations.
  523. */
  524. if (!combined_radio &&
  525. WARN_ON(types & BIT(NL80211_IFTYPE_P2P_DEVICE) &&
  526. c->limits[j].max > 1))
  527. return -EINVAL;
  528. /* Only a single NAN can be allowed, avoid this
  529. * check for multi-radio global combination, since it
  530. * hold the capabilities of all radio combinations.
  531. */
  532. if (!combined_radio &&
  533. WARN_ON(types & BIT(NL80211_IFTYPE_NAN) &&
  534. c->limits[j].max > 1))
  535. return -EINVAL;
  536. /*
  537. * This isn't well-defined right now. If you have an
  538. * IBSS interface, then its beacon interval may change
  539. * by joining other networks, and nothing prevents it
  540. * from doing that.
  541. * So technically we probably shouldn't even allow AP
  542. * and IBSS in the same interface, but it seems that
  543. * some drivers support that, possibly only with fixed
  544. * beacon intervals for IBSS.
  545. */
  546. if (WARN_ON(types & BIT(NL80211_IFTYPE_ADHOC) &&
  547. c->beacon_int_min_gcd)) {
  548. return -EINVAL;
  549. }
  550. cnt += c->limits[j].max;
  551. /*
  552. * Don't advertise an unsupported type
  553. * in a combination.
  554. */
  555. if (WARN_ON((wiphy->interface_modes & types) != types))
  556. return -EINVAL;
  557. }
  558. if (WARN_ON(all_iftypes & BIT(NL80211_IFTYPE_WDS)))
  559. return -EINVAL;
  560. /* You can't even choose that many! */
  561. if (WARN_ON(cnt < c->max_interfaces))
  562. return -EINVAL;
  563. }
  564. return 0;
  565. }
  566. static int wiphy_verify_combinations(struct wiphy *wiphy)
  567. {
  568. int i, ret;
  569. bool combined_radio = false;
  570. if (wiphy->n_radio) {
  571. for (i = 0; i < wiphy->n_radio; i++) {
  572. const struct wiphy_radio *radio = &wiphy->radio[i];
  573. ret = wiphy_verify_iface_combinations(wiphy,
  574. radio->iface_combinations,
  575. radio->n_iface_combinations,
  576. false);
  577. if (ret)
  578. return ret;
  579. }
  580. combined_radio = true;
  581. }
  582. ret = wiphy_verify_iface_combinations(wiphy,
  583. wiphy->iface_combinations,
  584. wiphy->n_iface_combinations,
  585. combined_radio);
  586. return ret;
  587. }
  588. int wiphy_register(struct wiphy *wiphy)
  589. {
  590. struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
  591. int res;
  592. enum nl80211_band band;
  593. struct ieee80211_supported_band *sband;
  594. bool have_band = false;
  595. int i;
  596. u16 ifmodes = wiphy->interface_modes;
  597. #ifdef CONFIG_PM
  598. if (WARN_ON(wiphy->wowlan &&
  599. (wiphy->wowlan->flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) &&
  600. !(wiphy->wowlan->flags & WIPHY_WOWLAN_SUPPORTS_GTK_REKEY)))
  601. return -EINVAL;
  602. if (WARN_ON(wiphy->wowlan &&
  603. !wiphy->wowlan->flags && !wiphy->wowlan->n_patterns &&
  604. !wiphy->wowlan->tcp))
  605. return -EINVAL;
  606. #endif
  607. if (WARN_ON((wiphy->features & NL80211_FEATURE_TDLS_CHANNEL_SWITCH) &&
  608. (!rdev->ops->tdls_channel_switch ||
  609. !rdev->ops->tdls_cancel_channel_switch)))
  610. return -EINVAL;
  611. if (WARN_ON((wiphy->interface_modes & BIT(NL80211_IFTYPE_NAN)) &&
  612. (!rdev->ops->start_nan || !rdev->ops->stop_nan ||
  613. !rdev->ops->add_nan_func || !rdev->ops->del_nan_func ||
  614. !(wiphy->nan_supported_bands & BIT(NL80211_BAND_2GHZ)))))
  615. return -EINVAL;
  616. if (WARN_ON(wiphy->interface_modes & BIT(NL80211_IFTYPE_WDS)))
  617. return -EINVAL;
  618. if (WARN_ON(wiphy->pmsr_capa && !wiphy->pmsr_capa->ftm.supported))
  619. return -EINVAL;
  620. if (wiphy->pmsr_capa && wiphy->pmsr_capa->ftm.supported) {
  621. if (WARN_ON(!wiphy->pmsr_capa->ftm.asap &&
  622. !wiphy->pmsr_capa->ftm.non_asap))
  623. return -EINVAL;
  624. if (WARN_ON(!wiphy->pmsr_capa->ftm.preambles ||
  625. !wiphy->pmsr_capa->ftm.bandwidths))
  626. return -EINVAL;
  627. if (WARN_ON(wiphy->pmsr_capa->ftm.preambles &
  628. ~(BIT(NL80211_PREAMBLE_LEGACY) |
  629. BIT(NL80211_PREAMBLE_HT) |
  630. BIT(NL80211_PREAMBLE_VHT) |
  631. BIT(NL80211_PREAMBLE_HE) |
  632. BIT(NL80211_PREAMBLE_DMG))))
  633. return -EINVAL;
  634. if (WARN_ON((wiphy->pmsr_capa->ftm.trigger_based ||
  635. wiphy->pmsr_capa->ftm.non_trigger_based) &&
  636. !(wiphy->pmsr_capa->ftm.preambles &
  637. BIT(NL80211_PREAMBLE_HE))))
  638. return -EINVAL;
  639. if (WARN_ON(wiphy->pmsr_capa->ftm.bandwidths &
  640. ~(BIT(NL80211_CHAN_WIDTH_20_NOHT) |
  641. BIT(NL80211_CHAN_WIDTH_20) |
  642. BIT(NL80211_CHAN_WIDTH_40) |
  643. BIT(NL80211_CHAN_WIDTH_80) |
  644. BIT(NL80211_CHAN_WIDTH_80P80) |
  645. BIT(NL80211_CHAN_WIDTH_160) |
  646. BIT(NL80211_CHAN_WIDTH_5) |
  647. BIT(NL80211_CHAN_WIDTH_10))))
  648. return -EINVAL;
  649. }
  650. if (WARN_ON((wiphy->regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED) &&
  651. (wiphy->regulatory_flags &
  652. (REGULATORY_CUSTOM_REG |
  653. REGULATORY_STRICT_REG |
  654. REGULATORY_COUNTRY_IE_FOLLOW_POWER |
  655. REGULATORY_COUNTRY_IE_IGNORE))))
  656. return -EINVAL;
  657. if (WARN_ON(wiphy->coalesce &&
  658. (!wiphy->coalesce->n_rules ||
  659. !wiphy->coalesce->n_patterns) &&
  660. (!wiphy->coalesce->pattern_min_len ||
  661. wiphy->coalesce->pattern_min_len >
  662. wiphy->coalesce->pattern_max_len)))
  663. return -EINVAL;
  664. if (WARN_ON(wiphy->ap_sme_capa &&
  665. !(wiphy->flags & WIPHY_FLAG_HAVE_AP_SME)))
  666. return -EINVAL;
  667. if (WARN_ON(wiphy->addresses && !wiphy->n_addresses))
  668. return -EINVAL;
  669. if (WARN_ON(wiphy->addresses &&
  670. !is_zero_ether_addr(wiphy->perm_addr) &&
  671. memcmp(wiphy->perm_addr, wiphy->addresses[0].addr,
  672. ETH_ALEN)))
  673. return -EINVAL;
  674. if (WARN_ON(wiphy->max_acl_mac_addrs &&
  675. (!(wiphy->flags & WIPHY_FLAG_HAVE_AP_SME) ||
  676. !rdev->ops->set_mac_acl)))
  677. return -EINVAL;
  678. /* assure only valid behaviours are flagged by driver
  679. * hence subtract 2 as bit 0 is invalid.
  680. */
  681. if (WARN_ON(wiphy->bss_select_support &&
  682. (wiphy->bss_select_support & ~(BIT(__NL80211_BSS_SELECT_ATTR_AFTER_LAST) - 2))))
  683. return -EINVAL;
  684. if (WARN_ON(wiphy_ext_feature_isset(&rdev->wiphy,
  685. NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X) &&
  686. (!rdev->ops->set_pmk || !rdev->ops->del_pmk)))
  687. return -EINVAL;
  688. if (WARN_ON(!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_FW_ROAM) &&
  689. rdev->ops->update_connect_params))
  690. return -EINVAL;
  691. if (wiphy->addresses)
  692. memcpy(wiphy->perm_addr, wiphy->addresses[0].addr, ETH_ALEN);
  693. /* sanity check ifmodes */
  694. WARN_ON(!ifmodes);
  695. ifmodes &= ((1 << NUM_NL80211_IFTYPES) - 1) & ~1;
  696. if (WARN_ON(ifmodes != wiphy->interface_modes))
  697. wiphy->interface_modes = ifmodes;
  698. res = wiphy_verify_combinations(wiphy);
  699. if (res)
  700. return res;
  701. /* sanity check supported bands/channels */
  702. for (band = 0; band < NUM_NL80211_BANDS; band++) {
  703. const struct ieee80211_sband_iftype_data *iftd;
  704. u16 types = 0;
  705. bool have_he = false;
  706. sband = wiphy->bands[band];
  707. if (!sband)
  708. continue;
  709. sband->band = band;
  710. if (WARN_ON(!sband->n_channels))
  711. return -EINVAL;
  712. /*
  713. * on 60GHz or sub-1Ghz band, there are no legacy rates, so
  714. * n_bitrates is 0
  715. */
  716. if (WARN_ON((band != NL80211_BAND_60GHZ &&
  717. band != NL80211_BAND_S1GHZ) &&
  718. !sband->n_bitrates))
  719. return -EINVAL;
  720. if (WARN_ON(band == NL80211_BAND_6GHZ &&
  721. (sband->ht_cap.ht_supported ||
  722. sband->vht_cap.vht_supported)))
  723. return -EINVAL;
  724. /*
  725. * Since cfg80211_disable_40mhz_24ghz is global, we can
  726. * modify the sband's ht data even if the driver uses a
  727. * global structure for that.
  728. */
  729. if (cfg80211_disable_40mhz_24ghz &&
  730. band == NL80211_BAND_2GHZ &&
  731. sband->ht_cap.ht_supported) {
  732. sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
  733. sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_40;
  734. }
  735. /*
  736. * Since we use a u32 for rate bitmaps in
  737. * ieee80211_get_response_rate, we cannot
  738. * have more than 32 legacy rates.
  739. */
  740. if (WARN_ON(sband->n_bitrates > 32))
  741. return -EINVAL;
  742. for (i = 0; i < sband->n_channels; i++) {
  743. sband->channels[i].orig_flags =
  744. sband->channels[i].flags;
  745. sband->channels[i].orig_mag = INT_MAX;
  746. sband->channels[i].orig_mpwr =
  747. sband->channels[i].max_power;
  748. sband->channels[i].band = band;
  749. if (WARN_ON(sband->channels[i].freq_offset >= 1000))
  750. return -EINVAL;
  751. }
  752. for_each_sband_iftype_data(sband, i, iftd) {
  753. bool has_ap, has_non_ap;
  754. u32 ap_bits = BIT(NL80211_IFTYPE_AP) |
  755. BIT(NL80211_IFTYPE_P2P_GO);
  756. if (WARN_ON(!iftd->types_mask))
  757. return -EINVAL;
  758. if (WARN_ON(types & iftd->types_mask))
  759. return -EINVAL;
  760. /* at least one piece of information must be present */
  761. if (WARN_ON(!iftd->he_cap.has_he))
  762. return -EINVAL;
  763. types |= iftd->types_mask;
  764. if (i == 0)
  765. have_he = iftd->he_cap.has_he;
  766. else
  767. have_he = have_he &&
  768. iftd->he_cap.has_he;
  769. has_ap = iftd->types_mask & ap_bits;
  770. has_non_ap = iftd->types_mask & ~ap_bits;
  771. /*
  772. * For EHT 20 MHz STA, the capabilities format differs
  773. * but to simplify, don't check 20 MHz but rather check
  774. * only if AP and non-AP were mentioned at the same time,
  775. * reject if so.
  776. */
  777. if (WARN_ON(iftd->eht_cap.has_eht &&
  778. has_ap && has_non_ap))
  779. return -EINVAL;
  780. }
  781. if (WARN_ON(!have_he && band == NL80211_BAND_6GHZ))
  782. return -EINVAL;
  783. have_band = true;
  784. }
  785. if (!have_band) {
  786. WARN_ON(1);
  787. return -EINVAL;
  788. }
  789. for (i = 0; i < rdev->wiphy.n_vendor_commands; i++) {
  790. /*
  791. * Validate we have a policy (can be explicitly set to
  792. * VENDOR_CMD_RAW_DATA which is non-NULL) and also that
  793. * we have at least one of doit/dumpit.
  794. */
  795. if (WARN_ON(!rdev->wiphy.vendor_commands[i].policy))
  796. return -EINVAL;
  797. if (WARN_ON(!rdev->wiphy.vendor_commands[i].doit &&
  798. !rdev->wiphy.vendor_commands[i].dumpit))
  799. return -EINVAL;
  800. }
  801. #ifdef CONFIG_PM
  802. if (WARN_ON(rdev->wiphy.wowlan && rdev->wiphy.wowlan->n_patterns &&
  803. (!rdev->wiphy.wowlan->pattern_min_len ||
  804. rdev->wiphy.wowlan->pattern_min_len >
  805. rdev->wiphy.wowlan->pattern_max_len)))
  806. return -EINVAL;
  807. #endif
  808. if (!wiphy->max_num_akm_suites)
  809. wiphy->max_num_akm_suites = NL80211_MAX_NR_AKM_SUITES;
  810. else if (wiphy->max_num_akm_suites < NL80211_MAX_NR_AKM_SUITES ||
  811. wiphy->max_num_akm_suites > CFG80211_MAX_NUM_AKM_SUITES)
  812. return -EINVAL;
  813. /* check and set up bitrates */
  814. ieee80211_set_bitrate_flags(wiphy);
  815. rdev->wiphy.features |= NL80211_FEATURE_SCAN_FLUSH;
  816. rtnl_lock();
  817. wiphy_lock(&rdev->wiphy);
  818. res = device_add(&rdev->wiphy.dev);
  819. if (res) {
  820. wiphy_unlock(&rdev->wiphy);
  821. rtnl_unlock();
  822. return res;
  823. }
  824. list_add_rcu(&rdev->list, &cfg80211_rdev_list);
  825. cfg80211_rdev_list_generation++;
  826. /* add to debugfs */
  827. rdev->wiphy.debugfsdir = debugfs_create_dir(wiphy_name(&rdev->wiphy),
  828. ieee80211_debugfs_dir);
  829. cfg80211_debugfs_rdev_add(rdev);
  830. nl80211_notify_wiphy(rdev, NL80211_CMD_NEW_WIPHY);
  831. wiphy_unlock(&rdev->wiphy);
  832. /* set up regulatory info */
  833. wiphy_regulatory_register(wiphy);
  834. if (wiphy->regulatory_flags & REGULATORY_CUSTOM_REG) {
  835. struct regulatory_request request;
  836. request.wiphy_idx = get_wiphy_idx(wiphy);
  837. request.initiator = NL80211_REGDOM_SET_BY_DRIVER;
  838. request.alpha2[0] = '9';
  839. request.alpha2[1] = '9';
  840. nl80211_send_reg_change_event(&request);
  841. }
  842. /* Check that nobody globally advertises any capabilities they do not
  843. * advertise on all possible interface types.
  844. */
  845. if (wiphy->extended_capabilities_len &&
  846. wiphy->num_iftype_ext_capab &&
  847. wiphy->iftype_ext_capab) {
  848. u8 supported_on_all, j;
  849. const struct wiphy_iftype_ext_capab *capab;
  850. capab = wiphy->iftype_ext_capab;
  851. for (j = 0; j < wiphy->extended_capabilities_len; j++) {
  852. if (capab[0].extended_capabilities_len > j)
  853. supported_on_all =
  854. capab[0].extended_capabilities[j];
  855. else
  856. supported_on_all = 0x00;
  857. for (i = 1; i < wiphy->num_iftype_ext_capab; i++) {
  858. if (j >= capab[i].extended_capabilities_len) {
  859. supported_on_all = 0x00;
  860. break;
  861. }
  862. supported_on_all &=
  863. capab[i].extended_capabilities[j];
  864. }
  865. if (WARN_ON(wiphy->extended_capabilities[j] &
  866. ~supported_on_all))
  867. break;
  868. }
  869. }
  870. rdev->wiphy.registered = true;
  871. rtnl_unlock();
  872. res = rfkill_register(rdev->wiphy.rfkill);
  873. if (res) {
  874. rfkill_destroy(rdev->wiphy.rfkill);
  875. rdev->wiphy.rfkill = NULL;
  876. wiphy_unregister(&rdev->wiphy);
  877. return res;
  878. }
  879. return 0;
  880. }
  881. EXPORT_SYMBOL(wiphy_register);
  882. void wiphy_rfkill_start_polling(struct wiphy *wiphy)
  883. {
  884. struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
  885. if (!rdev->ops->rfkill_poll)
  886. return;
  887. rdev->rfkill_ops.poll = cfg80211_rfkill_poll;
  888. rfkill_resume_polling(wiphy->rfkill);
  889. }
  890. EXPORT_SYMBOL(wiphy_rfkill_start_polling);
  891. void cfg80211_process_wiphy_works(struct cfg80211_registered_device *rdev,
  892. struct wiphy_work *end)
  893. {
  894. unsigned int runaway_limit = 100;
  895. unsigned long flags;
  896. lockdep_assert_held(&rdev->wiphy.mtx);
  897. spin_lock_irqsave(&rdev->wiphy_work_lock, flags);
  898. while (!list_empty(&rdev->wiphy_work_list)) {
  899. struct wiphy_work *wk;
  900. wk = list_first_entry(&rdev->wiphy_work_list,
  901. struct wiphy_work, entry);
  902. list_del_init(&wk->entry);
  903. spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags);
  904. trace_wiphy_work_run(&rdev->wiphy, wk);
  905. wk->func(&rdev->wiphy, wk);
  906. spin_lock_irqsave(&rdev->wiphy_work_lock, flags);
  907. if (wk == end)
  908. break;
  909. if (WARN_ON(--runaway_limit == 0))
  910. INIT_LIST_HEAD(&rdev->wiphy_work_list);
  911. }
  912. spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags);
  913. }
  914. void wiphy_unregister(struct wiphy *wiphy)
  915. {
  916. struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
  917. wait_event(rdev->dev_wait, ({
  918. int __count;
  919. wiphy_lock(&rdev->wiphy);
  920. __count = rdev->opencount;
  921. wiphy_unlock(&rdev->wiphy);
  922. __count == 0; }));
  923. if (rdev->wiphy.rfkill)
  924. rfkill_unregister(rdev->wiphy.rfkill);
  925. rtnl_lock();
  926. wiphy_lock(&rdev->wiphy);
  927. nl80211_notify_wiphy(rdev, NL80211_CMD_DEL_WIPHY);
  928. rdev->wiphy.registered = false;
  929. WARN_ON(!list_empty(&rdev->wiphy.wdev_list));
  930. /*
  931. * First remove the hardware from everywhere, this makes
  932. * it impossible to find from userspace.
  933. */
  934. debugfs_remove_recursive(rdev->wiphy.debugfsdir);
  935. list_del_rcu(&rdev->list);
  936. synchronize_rcu();
  937. /*
  938. * If this device got a regulatory hint tell core its
  939. * free to listen now to a new shiny device regulatory hint
  940. */
  941. wiphy_regulatory_deregister(wiphy);
  942. cfg80211_rdev_list_generation++;
  943. device_del(&rdev->wiphy.dev);
  944. #ifdef CONFIG_PM
  945. if (rdev->wiphy.wowlan_config && rdev->ops->set_wakeup)
  946. rdev_set_wakeup(rdev, false);
  947. #endif
  948. /* surely nothing is reachable now, clean up work */
  949. cfg80211_process_wiphy_works(rdev, NULL);
  950. wiphy_unlock(&rdev->wiphy);
  951. rtnl_unlock();
  952. /* this has nothing to do now but make sure it's gone */
  953. cancel_work_sync(&rdev->wiphy_work);
  954. cancel_work_sync(&rdev->conn_work);
  955. flush_work(&rdev->event_work);
  956. cancel_delayed_work_sync(&rdev->dfs_update_channels_wk);
  957. cancel_delayed_work_sync(&rdev->background_cac_done_wk);
  958. flush_work(&rdev->destroy_work);
  959. flush_work(&rdev->propagate_radar_detect_wk);
  960. flush_work(&rdev->propagate_cac_done_wk);
  961. flush_work(&rdev->mgmt_registrations_update_wk);
  962. flush_work(&rdev->background_cac_abort_wk);
  963. cfg80211_rdev_free_wowlan(rdev);
  964. cfg80211_free_coalesce(rdev->coalesce);
  965. rdev->coalesce = NULL;
  966. }
  967. EXPORT_SYMBOL(wiphy_unregister);
  968. void cfg80211_dev_free(struct cfg80211_registered_device *rdev)
  969. {
  970. struct cfg80211_internal_bss *scan, *tmp;
  971. struct cfg80211_beacon_registration *reg, *treg;
  972. unsigned long flags;
  973. spin_lock_irqsave(&rdev->wiphy_work_lock, flags);
  974. WARN_ON(!list_empty(&rdev->wiphy_work_list));
  975. spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags);
  976. cancel_work_sync(&rdev->wiphy_work);
  977. rfkill_destroy(rdev->wiphy.rfkill);
  978. list_for_each_entry_safe(reg, treg, &rdev->beacon_registrations, list) {
  979. list_del(&reg->list);
  980. kfree(reg);
  981. }
  982. list_for_each_entry_safe(scan, tmp, &rdev->bss_list, list)
  983. cfg80211_put_bss(&rdev->wiphy, &scan->pub);
  984. mutex_destroy(&rdev->wiphy.mtx);
  985. /*
  986. * The 'regd' can only be non-NULL if we never finished
  987. * initializing the wiphy and thus never went through the
  988. * unregister path - e.g. in failure scenarios. Thus, it
  989. * cannot have been visible to anyone if non-NULL, so we
  990. * can just free it here.
  991. */
  992. kfree(rcu_dereference_raw(rdev->wiphy.regd));
  993. kfree(rdev);
  994. }
  995. void wiphy_free(struct wiphy *wiphy)
  996. {
  997. put_device(&wiphy->dev);
  998. }
  999. EXPORT_SYMBOL(wiphy_free);
  1000. void wiphy_rfkill_set_hw_state_reason(struct wiphy *wiphy, bool blocked,
  1001. enum rfkill_hard_block_reasons reason)
  1002. {
  1003. struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
  1004. if (rfkill_set_hw_state_reason(wiphy->rfkill, blocked, reason))
  1005. schedule_work(&rdev->rfkill_block);
  1006. }
  1007. EXPORT_SYMBOL(wiphy_rfkill_set_hw_state_reason);
  1008. static void _cfg80211_unregister_wdev(struct wireless_dev *wdev,
  1009. bool unregister_netdev)
  1010. {
  1011. struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
  1012. struct cfg80211_cqm_config *cqm_config;
  1013. unsigned int link_id;
  1014. ASSERT_RTNL();
  1015. lockdep_assert_held(&rdev->wiphy.mtx);
  1016. nl80211_notify_iface(rdev, wdev, NL80211_CMD_DEL_INTERFACE);
  1017. wdev->registered = false;
  1018. if (wdev->netdev) {
  1019. sysfs_remove_link(&wdev->netdev->dev.kobj, "phy80211");
  1020. if (unregister_netdev)
  1021. unregister_netdevice(wdev->netdev);
  1022. }
  1023. list_del_rcu(&wdev->list);
  1024. synchronize_net();
  1025. rdev->devlist_generation++;
  1026. cfg80211_mlme_purge_registrations(wdev);
  1027. switch (wdev->iftype) {
  1028. case NL80211_IFTYPE_P2P_DEVICE:
  1029. cfg80211_stop_p2p_device(rdev, wdev);
  1030. break;
  1031. case NL80211_IFTYPE_NAN:
  1032. cfg80211_stop_nan(rdev, wdev);
  1033. break;
  1034. default:
  1035. break;
  1036. }
  1037. #ifdef CONFIG_CFG80211_WEXT
  1038. kfree_sensitive(wdev->wext.keys);
  1039. wdev->wext.keys = NULL;
  1040. #endif
  1041. wiphy_work_cancel(wdev->wiphy, &wdev->cqm_rssi_work);
  1042. /* deleted from the list, so can't be found from nl80211 any more */
  1043. cqm_config = rcu_access_pointer(wdev->cqm_config);
  1044. kfree_rcu(cqm_config, rcu_head);
  1045. RCU_INIT_POINTER(wdev->cqm_config, NULL);
  1046. /*
  1047. * Ensure that all events have been processed and
  1048. * freed.
  1049. */
  1050. cfg80211_process_wdev_events(wdev);
  1051. if (wdev->iftype == NL80211_IFTYPE_STATION ||
  1052. wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) {
  1053. for (link_id = 0; link_id < ARRAY_SIZE(wdev->links); link_id++) {
  1054. struct cfg80211_internal_bss *curbss;
  1055. curbss = wdev->links[link_id].client.current_bss;
  1056. if (WARN_ON(curbss)) {
  1057. cfg80211_unhold_bss(curbss);
  1058. cfg80211_put_bss(wdev->wiphy, &curbss->pub);
  1059. wdev->links[link_id].client.current_bss = NULL;
  1060. }
  1061. }
  1062. }
  1063. wdev->connected = false;
  1064. }
  1065. void cfg80211_unregister_wdev(struct wireless_dev *wdev)
  1066. {
  1067. _cfg80211_unregister_wdev(wdev, true);
  1068. }
  1069. EXPORT_SYMBOL(cfg80211_unregister_wdev);
  1070. static const struct device_type wiphy_type = {
  1071. .name = "wlan",
  1072. };
  1073. void cfg80211_update_iface_num(struct cfg80211_registered_device *rdev,
  1074. enum nl80211_iftype iftype, int num)
  1075. {
  1076. lockdep_assert_held(&rdev->wiphy.mtx);
  1077. rdev->num_running_ifaces += num;
  1078. if (iftype == NL80211_IFTYPE_MONITOR)
  1079. rdev->num_running_monitor_ifaces += num;
  1080. }
  1081. void cfg80211_leave(struct cfg80211_registered_device *rdev,
  1082. struct wireless_dev *wdev)
  1083. {
  1084. struct net_device *dev = wdev->netdev;
  1085. struct cfg80211_sched_scan_request *pos, *tmp;
  1086. lockdep_assert_held(&rdev->wiphy.mtx);
  1087. cfg80211_pmsr_wdev_down(wdev);
  1088. cfg80211_stop_background_radar_detection(wdev);
  1089. switch (wdev->iftype) {
  1090. case NL80211_IFTYPE_ADHOC:
  1091. cfg80211_leave_ibss(rdev, dev, true);
  1092. break;
  1093. case NL80211_IFTYPE_P2P_CLIENT:
  1094. case NL80211_IFTYPE_STATION:
  1095. list_for_each_entry_safe(pos, tmp, &rdev->sched_scan_req_list,
  1096. list) {
  1097. if (dev == pos->dev)
  1098. cfg80211_stop_sched_scan_req(rdev, pos, false);
  1099. }
  1100. #ifdef CONFIG_CFG80211_WEXT
  1101. kfree(wdev->wext.ie);
  1102. wdev->wext.ie = NULL;
  1103. wdev->wext.ie_len = 0;
  1104. wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC;
  1105. #endif
  1106. cfg80211_disconnect(rdev, dev,
  1107. WLAN_REASON_DEAUTH_LEAVING, true);
  1108. break;
  1109. case NL80211_IFTYPE_MESH_POINT:
  1110. cfg80211_leave_mesh(rdev, dev);
  1111. break;
  1112. case NL80211_IFTYPE_AP:
  1113. case NL80211_IFTYPE_P2P_GO:
  1114. cfg80211_stop_ap(rdev, dev, -1, true);
  1115. break;
  1116. case NL80211_IFTYPE_OCB:
  1117. cfg80211_leave_ocb(rdev, dev);
  1118. break;
  1119. case NL80211_IFTYPE_P2P_DEVICE:
  1120. case NL80211_IFTYPE_NAN:
  1121. /* cannot happen, has no netdev */
  1122. break;
  1123. case NL80211_IFTYPE_AP_VLAN:
  1124. case NL80211_IFTYPE_MONITOR:
  1125. /* nothing to do */
  1126. break;
  1127. case NL80211_IFTYPE_UNSPECIFIED:
  1128. case NL80211_IFTYPE_WDS:
  1129. case NUM_NL80211_IFTYPES:
  1130. /* invalid */
  1131. break;
  1132. }
  1133. }
  1134. void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev,
  1135. gfp_t gfp)
  1136. {
  1137. struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
  1138. struct cfg80211_event *ev;
  1139. unsigned long flags;
  1140. trace_cfg80211_stop_iface(wiphy, wdev);
  1141. ev = kzalloc(sizeof(*ev), gfp);
  1142. if (!ev)
  1143. return;
  1144. ev->type = EVENT_STOPPED;
  1145. spin_lock_irqsave(&wdev->event_lock, flags);
  1146. list_add_tail(&ev->list, &wdev->event_list);
  1147. spin_unlock_irqrestore(&wdev->event_lock, flags);
  1148. queue_work(cfg80211_wq, &rdev->event_work);
  1149. }
  1150. EXPORT_SYMBOL(cfg80211_stop_iface);
  1151. void cfg80211_init_wdev(struct wireless_dev *wdev)
  1152. {
  1153. INIT_LIST_HEAD(&wdev->event_list);
  1154. spin_lock_init(&wdev->event_lock);
  1155. INIT_LIST_HEAD(&wdev->mgmt_registrations);
  1156. INIT_LIST_HEAD(&wdev->pmsr_list);
  1157. spin_lock_init(&wdev->pmsr_lock);
  1158. INIT_WORK(&wdev->pmsr_free_wk, cfg80211_pmsr_free_wk);
  1159. #ifdef CONFIG_CFG80211_WEXT
  1160. wdev->wext.default_key = -1;
  1161. wdev->wext.default_mgmt_key = -1;
  1162. wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC;
  1163. #endif
  1164. wiphy_work_init(&wdev->cqm_rssi_work, cfg80211_cqm_rssi_notify_work);
  1165. if (wdev->wiphy->flags & WIPHY_FLAG_PS_ON_BY_DEFAULT)
  1166. wdev->ps = true;
  1167. else
  1168. wdev->ps = false;
  1169. /* allow mac80211 to determine the timeout */
  1170. wdev->ps_timeout = -1;
  1171. if ((wdev->iftype == NL80211_IFTYPE_STATION ||
  1172. wdev->iftype == NL80211_IFTYPE_P2P_CLIENT ||
  1173. wdev->iftype == NL80211_IFTYPE_ADHOC) && !wdev->use_4addr)
  1174. wdev->netdev->priv_flags |= IFF_DONT_BRIDGE;
  1175. INIT_WORK(&wdev->disconnect_wk, cfg80211_autodisconnect_wk);
  1176. }
  1177. void cfg80211_register_wdev(struct cfg80211_registered_device *rdev,
  1178. struct wireless_dev *wdev)
  1179. {
  1180. ASSERT_RTNL();
  1181. lockdep_assert_held(&rdev->wiphy.mtx);
  1182. /*
  1183. * We get here also when the interface changes network namespaces,
  1184. * as it's registered into the new one, but we don't want it to
  1185. * change ID in that case. Checking if the ID is already assigned
  1186. * works, because 0 isn't considered a valid ID and the memory is
  1187. * 0-initialized.
  1188. */
  1189. if (!wdev->identifier)
  1190. wdev->identifier = ++rdev->wdev_id;
  1191. list_add_rcu(&wdev->list, &rdev->wiphy.wdev_list);
  1192. rdev->devlist_generation++;
  1193. wdev->registered = true;
  1194. if (wdev->netdev &&
  1195. sysfs_create_link(&wdev->netdev->dev.kobj, &rdev->wiphy.dev.kobj,
  1196. "phy80211"))
  1197. pr_err("failed to add phy80211 symlink to netdev!\n");
  1198. nl80211_notify_iface(rdev, wdev, NL80211_CMD_NEW_INTERFACE);
  1199. }
  1200. int cfg80211_register_netdevice(struct net_device *dev)
  1201. {
  1202. struct wireless_dev *wdev = dev->ieee80211_ptr;
  1203. struct cfg80211_registered_device *rdev;
  1204. int ret;
  1205. ASSERT_RTNL();
  1206. if (WARN_ON(!wdev))
  1207. return -EINVAL;
  1208. rdev = wiphy_to_rdev(wdev->wiphy);
  1209. lockdep_assert_held(&rdev->wiphy.mtx);
  1210. /* we'll take care of this */
  1211. wdev->registered = true;
  1212. wdev->registering = true;
  1213. ret = register_netdevice(dev);
  1214. if (ret)
  1215. goto out;
  1216. cfg80211_register_wdev(rdev, wdev);
  1217. ret = 0;
  1218. out:
  1219. wdev->registering = false;
  1220. if (ret)
  1221. wdev->registered = false;
  1222. return ret;
  1223. }
  1224. EXPORT_SYMBOL(cfg80211_register_netdevice);
  1225. static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
  1226. unsigned long state, void *ptr)
  1227. {
  1228. struct net_device *dev = netdev_notifier_info_to_dev(ptr);
  1229. struct wireless_dev *wdev = dev->ieee80211_ptr;
  1230. struct cfg80211_registered_device *rdev;
  1231. struct cfg80211_sched_scan_request *pos, *tmp;
  1232. if (!wdev)
  1233. return NOTIFY_DONE;
  1234. rdev = wiphy_to_rdev(wdev->wiphy);
  1235. WARN_ON(wdev->iftype == NL80211_IFTYPE_UNSPECIFIED);
  1236. switch (state) {
  1237. case NETDEV_POST_INIT:
  1238. SET_NETDEV_DEVTYPE(dev, &wiphy_type);
  1239. wdev->netdev = dev;
  1240. /* can only change netns with wiphy */
  1241. dev->netns_local = true;
  1242. cfg80211_init_wdev(wdev);
  1243. break;
  1244. case NETDEV_REGISTER:
  1245. if (!wdev->registered) {
  1246. wiphy_lock(&rdev->wiphy);
  1247. cfg80211_register_wdev(rdev, wdev);
  1248. wiphy_unlock(&rdev->wiphy);
  1249. }
  1250. break;
  1251. case NETDEV_UNREGISTER:
  1252. /*
  1253. * It is possible to get NETDEV_UNREGISTER multiple times,
  1254. * so check wdev->registered.
  1255. */
  1256. if (wdev->registered && !wdev->registering) {
  1257. wiphy_lock(&rdev->wiphy);
  1258. _cfg80211_unregister_wdev(wdev, false);
  1259. wiphy_unlock(&rdev->wiphy);
  1260. }
  1261. break;
  1262. case NETDEV_GOING_DOWN:
  1263. wiphy_lock(&rdev->wiphy);
  1264. cfg80211_leave(rdev, wdev);
  1265. cfg80211_remove_links(wdev);
  1266. wiphy_unlock(&rdev->wiphy);
  1267. /* since we just did cfg80211_leave() nothing to do there */
  1268. cancel_work_sync(&wdev->disconnect_wk);
  1269. cancel_work_sync(&wdev->pmsr_free_wk);
  1270. break;
  1271. case NETDEV_DOWN:
  1272. wiphy_lock(&rdev->wiphy);
  1273. cfg80211_update_iface_num(rdev, wdev->iftype, -1);
  1274. if (rdev->scan_req && rdev->scan_req->wdev == wdev) {
  1275. if (WARN_ON(!rdev->scan_req->notified &&
  1276. (!rdev->int_scan_req ||
  1277. !rdev->int_scan_req->notified)))
  1278. rdev->scan_req->info.aborted = true;
  1279. ___cfg80211_scan_done(rdev, false);
  1280. }
  1281. list_for_each_entry_safe(pos, tmp,
  1282. &rdev->sched_scan_req_list, list) {
  1283. if (WARN_ON(pos->dev == wdev->netdev))
  1284. cfg80211_stop_sched_scan_req(rdev, pos, false);
  1285. }
  1286. rdev->opencount--;
  1287. wiphy_unlock(&rdev->wiphy);
  1288. wake_up(&rdev->dev_wait);
  1289. break;
  1290. case NETDEV_UP:
  1291. wiphy_lock(&rdev->wiphy);
  1292. cfg80211_update_iface_num(rdev, wdev->iftype, 1);
  1293. switch (wdev->iftype) {
  1294. #ifdef CONFIG_CFG80211_WEXT
  1295. case NL80211_IFTYPE_ADHOC:
  1296. cfg80211_ibss_wext_join(rdev, wdev);
  1297. break;
  1298. case NL80211_IFTYPE_STATION:
  1299. cfg80211_mgd_wext_connect(rdev, wdev);
  1300. break;
  1301. #endif
  1302. #ifdef CONFIG_MAC80211_MESH
  1303. case NL80211_IFTYPE_MESH_POINT:
  1304. {
  1305. /* backward compat code... */
  1306. struct mesh_setup setup;
  1307. memcpy(&setup, &default_mesh_setup,
  1308. sizeof(setup));
  1309. /* back compat only needed for mesh_id */
  1310. setup.mesh_id = wdev->u.mesh.id;
  1311. setup.mesh_id_len = wdev->u.mesh.id_up_len;
  1312. if (wdev->u.mesh.id_up_len)
  1313. __cfg80211_join_mesh(rdev, dev,
  1314. &setup,
  1315. &default_mesh_config);
  1316. break;
  1317. }
  1318. #endif
  1319. default:
  1320. break;
  1321. }
  1322. rdev->opencount++;
  1323. /*
  1324. * Configure power management to the driver here so that its
  1325. * correctly set also after interface type changes etc.
  1326. */
  1327. if ((wdev->iftype == NL80211_IFTYPE_STATION ||
  1328. wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) &&
  1329. rdev->ops->set_power_mgmt &&
  1330. rdev_set_power_mgmt(rdev, dev, wdev->ps,
  1331. wdev->ps_timeout)) {
  1332. /* assume this means it's off */
  1333. wdev->ps = false;
  1334. }
  1335. wiphy_unlock(&rdev->wiphy);
  1336. break;
  1337. case NETDEV_PRE_UP:
  1338. if (!cfg80211_iftype_allowed(wdev->wiphy, wdev->iftype,
  1339. wdev->use_4addr, 0))
  1340. return notifier_from_errno(-EOPNOTSUPP);
  1341. if (rfkill_blocked(rdev->wiphy.rfkill))
  1342. return notifier_from_errno(-ERFKILL);
  1343. break;
  1344. default:
  1345. return NOTIFY_DONE;
  1346. }
  1347. wireless_nlevent_flush();
  1348. return NOTIFY_OK;
  1349. }
  1350. static struct notifier_block cfg80211_netdev_notifier = {
  1351. .notifier_call = cfg80211_netdev_notifier_call,
  1352. };
  1353. static void __net_exit cfg80211_pernet_exit(struct net *net)
  1354. {
  1355. struct cfg80211_registered_device *rdev;
  1356. rtnl_lock();
  1357. for_each_rdev(rdev) {
  1358. if (net_eq(wiphy_net(&rdev->wiphy), net))
  1359. WARN_ON(cfg80211_switch_netns(rdev, &init_net));
  1360. }
  1361. rtnl_unlock();
  1362. }
  1363. static struct pernet_operations cfg80211_pernet_ops = {
  1364. .exit = cfg80211_pernet_exit,
  1365. };
  1366. void wiphy_work_queue(struct wiphy *wiphy, struct wiphy_work *work)
  1367. {
  1368. struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
  1369. unsigned long flags;
  1370. trace_wiphy_work_queue(wiphy, work);
  1371. spin_lock_irqsave(&rdev->wiphy_work_lock, flags);
  1372. if (list_empty(&work->entry))
  1373. list_add_tail(&work->entry, &rdev->wiphy_work_list);
  1374. spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags);
  1375. queue_work(system_unbound_wq, &rdev->wiphy_work);
  1376. }
  1377. EXPORT_SYMBOL_GPL(wiphy_work_queue);
  1378. void wiphy_work_cancel(struct wiphy *wiphy, struct wiphy_work *work)
  1379. {
  1380. struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
  1381. unsigned long flags;
  1382. lockdep_assert_held(&wiphy->mtx);
  1383. trace_wiphy_work_cancel(wiphy, work);
  1384. spin_lock_irqsave(&rdev->wiphy_work_lock, flags);
  1385. if (!list_empty(&work->entry))
  1386. list_del_init(&work->entry);
  1387. spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags);
  1388. }
  1389. EXPORT_SYMBOL_GPL(wiphy_work_cancel);
  1390. void wiphy_work_flush(struct wiphy *wiphy, struct wiphy_work *work)
  1391. {
  1392. struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
  1393. unsigned long flags;
  1394. bool run;
  1395. trace_wiphy_work_flush(wiphy, work);
  1396. spin_lock_irqsave(&rdev->wiphy_work_lock, flags);
  1397. run = !work || !list_empty(&work->entry);
  1398. spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags);
  1399. if (run)
  1400. cfg80211_process_wiphy_works(rdev, work);
  1401. }
  1402. EXPORT_SYMBOL_GPL(wiphy_work_flush);
  1403. void wiphy_delayed_work_timer(struct timer_list *t)
  1404. {
  1405. struct wiphy_delayed_work *dwork = from_timer(dwork, t, timer);
  1406. wiphy_work_queue(dwork->wiphy, &dwork->work);
  1407. }
  1408. EXPORT_SYMBOL(wiphy_delayed_work_timer);
  1409. void wiphy_delayed_work_queue(struct wiphy *wiphy,
  1410. struct wiphy_delayed_work *dwork,
  1411. unsigned long delay)
  1412. {
  1413. trace_wiphy_delayed_work_queue(wiphy, &dwork->work, delay);
  1414. if (!delay) {
  1415. del_timer(&dwork->timer);
  1416. wiphy_work_queue(wiphy, &dwork->work);
  1417. return;
  1418. }
  1419. dwork->wiphy = wiphy;
  1420. mod_timer(&dwork->timer, jiffies + delay);
  1421. }
  1422. EXPORT_SYMBOL_GPL(wiphy_delayed_work_queue);
  1423. void wiphy_delayed_work_cancel(struct wiphy *wiphy,
  1424. struct wiphy_delayed_work *dwork)
  1425. {
  1426. lockdep_assert_held(&wiphy->mtx);
  1427. del_timer_sync(&dwork->timer);
  1428. wiphy_work_cancel(wiphy, &dwork->work);
  1429. }
  1430. EXPORT_SYMBOL_GPL(wiphy_delayed_work_cancel);
  1431. void wiphy_delayed_work_flush(struct wiphy *wiphy,
  1432. struct wiphy_delayed_work *dwork)
  1433. {
  1434. lockdep_assert_held(&wiphy->mtx);
  1435. del_timer_sync(&dwork->timer);
  1436. wiphy_work_flush(wiphy, &dwork->work);
  1437. }
  1438. EXPORT_SYMBOL_GPL(wiphy_delayed_work_flush);
  1439. bool wiphy_delayed_work_pending(struct wiphy *wiphy,
  1440. struct wiphy_delayed_work *dwork)
  1441. {
  1442. return timer_pending(&dwork->timer);
  1443. }
  1444. EXPORT_SYMBOL_GPL(wiphy_delayed_work_pending);
  1445. static int __init cfg80211_init(void)
  1446. {
  1447. int err;
  1448. err = register_pernet_device(&cfg80211_pernet_ops);
  1449. if (err)
  1450. goto out_fail_pernet;
  1451. err = wiphy_sysfs_init();
  1452. if (err)
  1453. goto out_fail_sysfs;
  1454. err = register_netdevice_notifier(&cfg80211_netdev_notifier);
  1455. if (err)
  1456. goto out_fail_notifier;
  1457. err = nl80211_init();
  1458. if (err)
  1459. goto out_fail_nl80211;
  1460. ieee80211_debugfs_dir = debugfs_create_dir("ieee80211", NULL);
  1461. err = regulatory_init();
  1462. if (err)
  1463. goto out_fail_reg;
  1464. cfg80211_wq = alloc_ordered_workqueue("cfg80211", WQ_MEM_RECLAIM);
  1465. if (!cfg80211_wq) {
  1466. err = -ENOMEM;
  1467. goto out_fail_wq;
  1468. }
  1469. return 0;
  1470. out_fail_wq:
  1471. regulatory_exit();
  1472. out_fail_reg:
  1473. debugfs_remove(ieee80211_debugfs_dir);
  1474. nl80211_exit();
  1475. out_fail_nl80211:
  1476. unregister_netdevice_notifier(&cfg80211_netdev_notifier);
  1477. out_fail_notifier:
  1478. wiphy_sysfs_exit();
  1479. out_fail_sysfs:
  1480. unregister_pernet_device(&cfg80211_pernet_ops);
  1481. out_fail_pernet:
  1482. return err;
  1483. }
  1484. fs_initcall(cfg80211_init);
  1485. static void __exit cfg80211_exit(void)
  1486. {
  1487. debugfs_remove(ieee80211_debugfs_dir);
  1488. nl80211_exit();
  1489. unregister_netdevice_notifier(&cfg80211_netdev_notifier);
  1490. wiphy_sysfs_exit();
  1491. regulatory_exit();
  1492. unregister_pernet_device(&cfg80211_pernet_ops);
  1493. destroy_workqueue(cfg80211_wq);
  1494. }
  1495. module_exit(cfg80211_exit);