wlan_vdev_mlme.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606
  1. /*
  2. * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
  3. *
  4. * Permission to use, copy, modify, and/or distribute this software for any
  5. * purpose with or without fee is hereby granted, provided that the above
  6. * copyright notice and this permission notice appear in all copies.
  7. *
  8. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  9. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  10. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  11. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  12. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  13. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  14. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. /**
  17. * DOC: Define VDEV MLME structure and APIs
  18. */
  19. #ifndef _WLAN_VDEV_MLME_H_
  20. #define _WLAN_VDEV_MLME_H_
  21. struct vdev_mlme_obj;
  22. /**
  23. * struct vdev_mlme_proto - VDEV protocol strucutre
  24. */
  25. struct vdev_mlme_proto {
  26. };
  27. /**
  28. * enum beacon_update_op - Beacon update op type
  29. * @BEACON_INIT: Initialize beacon
  30. * @BEACON_REINIT: Re-initialize beacon
  31. * @BEACON_UPDATE: Update dynamic fields of beacon
  32. * @BEACON_CSA: Enable CSA IE
  33. * @BEACON_FREE: Beacon buffer free
  34. */
  35. enum beacon_update_op {
  36. BEACON_INIT,
  37. BEACON_REINIT,
  38. BEACON_UPDATE,
  39. BEACON_CSA,
  40. BEACON_FREE,
  41. };
  42. /**
  43. * enum vdev_cmd_type - Command type
  44. * @START_REQ: Start request
  45. * @RESTART_REQ: Restart request
  46. */
  47. enum vdev_cmd_type {
  48. START_REQ,
  49. RESTART_REQ,
  50. };
  51. /**
  52. * struct vdev_mlme_ops - VDEV MLME operation callbacks structure
  53. * @mlme_vdev_validate_basic_params: callback to validate VDEV basic params
  54. * @mlme_vdev_reset_proto_params: callback to Reset protocol params
  55. * @mlme_vdev_start_send: callback to initiate actions of VDEV
  56. * MLME start operation
  57. * @mlme_vdev_restart_send: callback to initiate actions of VDEV
  58. * MLME restart operation
  59. * @mlme_vdev_stop_start_send: callback to block start/restart VDEV
  60. * request command
  61. * @mlme_vdev_start_continue: callback to initiate operations on
  62. * LMAC/FW start response
  63. * @mlme_vdev_up_send: callback to initiate actions of VDEV
  64. * MLME up operation
  65. * @mlme_vdev_notify_up_complete: callback to notify VDEV MLME on moving
  66. * to UP state
  67. * @mlme_vdev_notify_roam_start: callback to initiate roaming
  68. * @mlme_vdev_update_beacon: callback to initiate beacon update
  69. * @mlme_vdev_disconnect_peers: callback to initiate disconnection of
  70. * peers
  71. * @mlme_vdev_dfs_cac_timer_stop: callback to stop the DFS CAC timer
  72. * @mlme_vdev_stop_send: callback to initiate actions of VDEV
  73. * MLME stop operation
  74. * @mlme_vdev_stop_continue: callback to initiate operations on
  75. * LMAC/FW stop response
  76. * @mlme_vdev_bss_peer_delete_continue: callback to initiate operations on BSS
  77. * peer delete completion
  78. * @mlme_vdev_down_send: callback to initiate actions of VDEV
  79. * MLME down operation
  80. */
  81. struct vdev_mlme_ops {
  82. QDF_STATUS (*mlme_vdev_validate_basic_params)(
  83. struct vdev_mlme_obj *vdev_mlme,
  84. uint16_t event_data_len, void *event_data);
  85. QDF_STATUS (*mlme_vdev_reset_proto_params)(
  86. struct vdev_mlme_obj *vdev_mlme,
  87. uint16_t event_data_len, void *event_data);
  88. QDF_STATUS (*mlme_vdev_start_send)(
  89. struct vdev_mlme_obj *vdev_mlme,
  90. uint16_t event_data_len, void *event_data);
  91. QDF_STATUS (*mlme_vdev_restart_send)(
  92. struct vdev_mlme_obj *vdev_mlme,
  93. uint16_t event_data_len, void *event_data);
  94. QDF_STATUS (*mlme_vdev_stop_start_send)(
  95. struct vdev_mlme_obj *vdev_mlme,
  96. enum vdev_cmd_type type,
  97. uint16_t event_data_len, void *event_data);
  98. QDF_STATUS (*mlme_vdev_start_continue)(
  99. struct vdev_mlme_obj *vdev_mlme,
  100. uint16_t event_data_len, void *event_data);
  101. QDF_STATUS (*mlme_vdev_sta_conn_start)(
  102. struct vdev_mlme_obj *vdev_mlme,
  103. uint16_t event_data_len, void *event_data);
  104. QDF_STATUS (*mlme_vdev_start_req_failed)(
  105. struct vdev_mlme_obj *vdev_mlme,
  106. uint16_t event_data_len, void *event_data);
  107. QDF_STATUS (*mlme_vdev_up_send)(
  108. struct vdev_mlme_obj *vdev_mlme,
  109. uint16_t event_data_len, void *event_data);
  110. QDF_STATUS (*mlme_vdev_notify_up_complete)(
  111. struct vdev_mlme_obj *vdev_mlme,
  112. uint16_t event_data_len, void *event_data);
  113. QDF_STATUS (*mlme_vdev_notify_roam_start)(
  114. struct vdev_mlme_obj *vdev_mlme,
  115. uint16_t event_data_len, void *event_data);
  116. QDF_STATUS (*mlme_vdev_update_beacon)(
  117. struct vdev_mlme_obj *vdev_mlme,
  118. enum beacon_update_op op,
  119. uint16_t event_data_len, void *event_data);
  120. QDF_STATUS (*mlme_vdev_disconnect_peers)(
  121. struct vdev_mlme_obj *vdev_mlme,
  122. uint16_t event_data_len, void *event_data);
  123. QDF_STATUS (*mlme_vdev_dfs_cac_timer_stop)(
  124. struct vdev_mlme_obj *vdev_mlme,
  125. uint16_t event_data_len, void *event_data);
  126. QDF_STATUS (*mlme_vdev_stop_send)(
  127. struct vdev_mlme_obj *vdev_mlme,
  128. uint16_t event_data_len, void *event_data);
  129. QDF_STATUS (*mlme_vdev_stop_continue)(
  130. struct vdev_mlme_obj *vdev_mlme,
  131. uint16_t event_data_len, void *event_data);
  132. QDF_STATUS (*mlme_vdev_down_send)(
  133. struct vdev_mlme_obj *vdev_mlme,
  134. uint16_t event_data_len, void *event_data);
  135. QDF_STATUS (*mlme_vdev_notify_down_complete)(
  136. struct vdev_mlme_obj *vdev_mlme,
  137. uint16_t event_data_len, void *event_data);
  138. };
  139. /**
  140. * struct vdev_mlme_obj - VDEV MLME component object
  141. * @vdev_proto: VDEV MLME proto substructure
  142. * @sm_lock: VDEV SM lock
  143. * @vdev_cmd_lock: VDEV MLME command atomicity
  144. * @sm_hdl: VDEV SM handle
  145. * @ops: VDEV MLME callback table
  146. * @ext_vdev_ptr: VDEV MLME legacy pointer
  147. */
  148. struct vdev_mlme_obj {
  149. struct vdev_mlme_proto vdev_proto;
  150. #ifdef VDEV_SM_LOCK_SUPPORT
  151. qdf_spinlock_t sm_lock;
  152. qdf_mutex_t vdev_cmd_lock;
  153. #endif
  154. struct wlan_sm *sm_hdl;
  155. struct wlan_objmgr_vdev *vdev;
  156. struct vdev_mlme_ops *ops;
  157. void *ext_vdev_ptr;
  158. };
  159. /**
  160. * mlme_vdev_validate_basic_params - Validate basic params
  161. * @vdev_mlme_obj: VDEV MLME comp object
  162. * @event_data_len: data size
  163. * @event_data: event data
  164. *
  165. * API validate MLME VDEV basic parameters
  166. *
  167. * Return: SUCCESS on successful validation
  168. * FAILURE, if any parameter is not initialized
  169. */
  170. static inline QDF_STATUS mlme_vdev_validate_basic_params(
  171. struct vdev_mlme_obj *vdev_mlme,
  172. uint16_t event_data_len, void *event_data)
  173. {
  174. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  175. if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_validate_basic_params)
  176. ret = vdev_mlme->ops->mlme_vdev_validate_basic_params(
  177. vdev_mlme, event_data_len, event_data);
  178. return ret;
  179. }
  180. /**
  181. * mlme_vdev_reset_proto_params - Reset VDEV protocol params
  182. * @vdev_mlme_obj: VDEV MLME comp object
  183. * @event_data_len: data size
  184. * @event_data: event data
  185. *
  186. * API resets the protocol params fo vdev
  187. *
  188. * Return: SUCCESS on successful reset
  189. * FAILURE, if it fails due to any
  190. */
  191. static inline QDF_STATUS mlme_vdev_reset_proto_params(
  192. struct vdev_mlme_obj *vdev_mlme,
  193. uint16_t event_data_len, void *event_data)
  194. {
  195. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  196. if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_reset_proto_params)
  197. ret = vdev_mlme->ops->mlme_vdev_reset_proto_params(
  198. vdev_mlme, event_data_len, event_data);
  199. return ret;
  200. }
  201. /**
  202. * mlme_vdev_start_send - Invokes VDEV start operation
  203. * @vdev_mlme_obj: VDEV MLME comp object
  204. * @event_data_len: data size
  205. * @event_data: event data
  206. *
  207. * API invokes VDEV start operation
  208. *
  209. * Return: SUCCESS on successful completion of start operation
  210. * FAILURE, if it fails due to any
  211. */
  212. static inline QDF_STATUS mlme_vdev_start_send(
  213. struct vdev_mlme_obj *vdev_mlme,
  214. uint16_t event_data_len, void *event_data)
  215. {
  216. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  217. if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_send)
  218. ret = vdev_mlme->ops->mlme_vdev_start_send(
  219. vdev_mlme, event_data_len, event_data);
  220. return ret;
  221. }
  222. /**
  223. * mlme_vdev_restart_send - Invokes VDEV restart operation
  224. * @vdev_mlme_obj: VDEV MLME comp object
  225. * @event_data_len: data size
  226. * @event_data: event data
  227. *
  228. * API invokes VDEV restart operation
  229. *
  230. * Return: SUCCESS on successful completion of restart operation
  231. * FAILURE, if it fails due to any
  232. */
  233. static inline QDF_STATUS mlme_vdev_restart_send(
  234. struct vdev_mlme_obj *vdev_mlme,
  235. uint16_t event_data_len, void *event_data)
  236. {
  237. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  238. if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_restart_send)
  239. ret = vdev_mlme->ops->mlme_vdev_restart_send(
  240. vdev_mlme, event_data_len, event_data);
  241. return ret;
  242. }
  243. /**
  244. * mlme_vdev_stop_start_send - Invoke block VDEV restart operation
  245. * @vdev_mlme_obj: VDEV MLME comp object
  246. * @restart: restart req/start req
  247. * @event_data_len: data size
  248. * @event_data: event data
  249. *
  250. * API invokes stops pending VDEV restart operation
  251. *
  252. * Return: SUCCESS alsways
  253. */
  254. static inline QDF_STATUS mlme_vdev_stop_start_send(
  255. struct vdev_mlme_obj *vdev_mlme,
  256. uint8_t restart,
  257. uint16_t event_data_len, void *event_data)
  258. {
  259. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  260. if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_start_send)
  261. ret = vdev_mlme->ops->mlme_vdev_stop_start_send(
  262. vdev_mlme, restart, event_data_len, event_data);
  263. return ret;
  264. }
  265. /**
  266. * mlme_vdev_start_continue - VDEV start response handling
  267. * @vdev_mlme_obj: VDEV MLME comp object
  268. * @event_data_len: data size
  269. * @event_data: event data
  270. *
  271. * API invokes VDEV start response actions
  272. *
  273. * Return: SUCCESS on successful completion of start response operation
  274. * FAILURE, if it fails due to any
  275. */
  276. static inline QDF_STATUS mlme_vdev_start_continue(
  277. struct vdev_mlme_obj *vdev_mlme,
  278. uint16_t event_data_len, void *event_data)
  279. {
  280. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  281. if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_continue)
  282. ret = vdev_mlme->ops->mlme_vdev_start_continue(
  283. vdev_mlme, event_data_len, event_data);
  284. return ret;
  285. }
  286. /**
  287. * mlme_vdev_start_req_failed - Invoke Station VDEV connection, if it pause
  288. * @vdev_mlme_obj: VDEV MLME comp object
  289. * @event_data_len: data size
  290. * @event_data: event data
  291. *
  292. * API invokes on START fail response
  293. *
  294. * Return: SUCCESS on successful invocation of callback
  295. * FAILURE, if it fails due to any
  296. */
  297. static inline QDF_STATUS mlme_vdev_start_req_failed(
  298. struct vdev_mlme_obj *vdev_mlme,
  299. uint16_t event_data_len, void *event_data)
  300. {
  301. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  302. if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_req_failed)
  303. ret = vdev_mlme->ops->mlme_vdev_start_req_failed(
  304. vdev_mlme, event_data_len, event_data);
  305. return ret;
  306. }
  307. /**
  308. * mlme_vdev_sta_conn_start - Invoke Station VDEV connection, if it pause
  309. * @vdev_mlme_obj: VDEV MLME comp object
  310. * @event_data_len: data size
  311. * @event_data: event data
  312. *
  313. * API invokes connection SM to start station connection
  314. *
  315. * Return: SUCCESS on successful invocation of connection sm
  316. * FAILURE, if it fails due to any
  317. */
  318. static inline QDF_STATUS mlme_vdev_sta_conn_start(
  319. struct vdev_mlme_obj *vdev_mlme,
  320. uint16_t event_data_len, void *event_data)
  321. {
  322. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  323. if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_sta_conn_start)
  324. ret = vdev_mlme->ops->mlme_vdev_sta_conn_start(
  325. vdev_mlme, event_data_len, event_data);
  326. return ret;
  327. }
  328. /**
  329. * mlme_vdev_up_send - VDEV up operation
  330. * @vdev_mlme_obj: VDEV MLME comp object
  331. * @event_data_len: data size
  332. * @event_data: event data
  333. *
  334. * API invokes VDEV up operations
  335. *
  336. * Return: SUCCESS on successful completion of up operation
  337. * FAILURE, if it fails due to any
  338. */
  339. static inline QDF_STATUS mlme_vdev_up_send(
  340. struct vdev_mlme_obj *vdev_mlme,
  341. uint16_t event_data_len, void *event_data)
  342. {
  343. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  344. if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_up_send)
  345. ret = vdev_mlme->ops->mlme_vdev_up_send(
  346. vdev_mlme, event_data_len, event_data);
  347. return ret;
  348. }
  349. /**
  350. * mlme_vdev_notify_up_complete - VDEV up state transition notification
  351. * @vdev_mlme_obj: VDEV MLME comp object
  352. * @event_data_len: data size
  353. * @event_data: event data
  354. *
  355. * API notifies MLME on moving to UP state
  356. *
  357. * Return: SUCCESS on successful completion of up notification
  358. * FAILURE, if it fails due to any
  359. */
  360. static inline
  361. QDF_STATUS mlme_vdev_notify_up_complete(struct vdev_mlme_obj *vdev_mlme,
  362. uint16_t event_data_len,
  363. void *event_data)
  364. {
  365. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  366. if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_up_complete)
  367. ret = vdev_mlme->ops->mlme_vdev_notify_up_complete(
  368. vdev_mlme, event_data_len, event_data);
  369. return ret;
  370. }
  371. /**
  372. * mlme_vdev_notify_roam_start - VDEV Roaming notification
  373. * @vdev_mlme_obj: VDEV MLME comp object
  374. * @event_len: data size
  375. * @event_data: event data
  376. *
  377. * API notifies MLME on roaming
  378. *
  379. * Return: SUCCESS on successful completion of up notification
  380. * FAILURE, if it fails due to any
  381. */
  382. static inline
  383. QDF_STATUS mlme_vdev_notify_roam_start(struct vdev_mlme_obj *vdev_mlme,
  384. uint16_t event_len, void *event_data)
  385. {
  386. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  387. if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_roam_start)
  388. ret = vdev_mlme->ops->mlme_vdev_notify_roam_start(vdev_mlme,
  389. event_len,
  390. event_data);
  391. return ret;
  392. }
  393. /**
  394. * mlme_vdev_update_beacon - Updates beacon
  395. * @vdev_mlme_obj: VDEV MLME comp object
  396. * @op: beacon update type
  397. * @event_data_len: data size
  398. * @event_data: event data
  399. *
  400. * API updates/allocates/frees the beacon
  401. *
  402. * Return: SUCCESS on successful update of beacon
  403. * FAILURE, if it fails due to any
  404. */
  405. static inline
  406. QDF_STATUS mlme_vdev_update_beacon(struct vdev_mlme_obj *vdev_mlme,
  407. enum beacon_update_op op,
  408. uint16_t event_data_len, void *event_data)
  409. {
  410. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  411. if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_update_beacon)
  412. ret = vdev_mlme->ops->mlme_vdev_update_beacon(vdev_mlme, op,
  413. event_data_len, event_data);
  414. return ret;
  415. }
  416. /**
  417. * mlme_vdev_disconnect_peers - Disconnect peers
  418. * @vdev_mlme_obj: VDEV MLME comp object
  419. * @event_data_len: data size
  420. * @event_data: event data
  421. *
  422. * API trigger stations disconnection with AP VDEV or AP disconnection with STA
  423. * VDEV
  424. *
  425. * Return: SUCCESS on successful invocation of station disconnection
  426. * FAILURE, if it fails due to any
  427. */
  428. static inline QDF_STATUS mlme_vdev_disconnect_peers(
  429. struct vdev_mlme_obj *vdev_mlme,
  430. uint16_t event_data_len, void *event_data)
  431. {
  432. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  433. if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_disconnect_peers)
  434. ret = vdev_mlme->ops->mlme_vdev_disconnect_peers(
  435. vdev_mlme, event_data_len, event_data);
  436. return ret;
  437. }
  438. /**
  439. * mlme_vdev_dfs_cac_timer_stop - Stop CAC timer
  440. * @vdev_mlme_obj: VDEV MLME comp object
  441. * @event_data_len: data size
  442. * @event_data: event data
  443. *
  444. * API stops the CAC timer through DFS API
  445. *
  446. * Return: SUCCESS on successful CAC timer stop
  447. * FAILURE, if it fails due to any
  448. */
  449. static inline QDF_STATUS mlme_vdev_dfs_cac_timer_stop(
  450. struct vdev_mlme_obj *vdev_mlme,
  451. uint16_t event_data_len, void *event_data)
  452. {
  453. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  454. if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop)
  455. ret = vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop(
  456. vdev_mlme, event_data_len, event_data);
  457. return ret;
  458. }
  459. /**
  460. * mlme_vdev_stop_send - Invokes VDEV stop operation
  461. * @vdev_mlme_obj: VDEV MLME comp object
  462. * @event_data_len: data size
  463. * @event_data: event data
  464. *
  465. * API invokes VDEV stop operation
  466. *
  467. * Return: SUCCESS on successful completion of stop operation
  468. * FAILURE, if it fails due to any
  469. */
  470. static inline QDF_STATUS mlme_vdev_stop_send(
  471. struct vdev_mlme_obj *vdev_mlme,
  472. uint16_t event_data_len, void *event_data)
  473. {
  474. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  475. if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_send)
  476. ret = vdev_mlme->ops->mlme_vdev_stop_send(
  477. vdev_mlme, event_data_len, event_data);
  478. return ret;
  479. }
  480. /**
  481. * mlme_vdev_stop_continue - VDEV stop response handling
  482. * @vdev_mlme_obj: VDEV MLME comp object
  483. * @event_data_len: data size
  484. * @event_data: event data
  485. *
  486. * API invokes VDEV stop response actions
  487. *
  488. * Return: SUCCESS on successful completion of stop response operation
  489. * FAILURE, if it fails due to any
  490. */
  491. static inline QDF_STATUS mlme_vdev_stop_continue(
  492. struct vdev_mlme_obj *vdev_mlme,
  493. uint16_t event_data_len, void *event_data)
  494. {
  495. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  496. if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_continue)
  497. ret = vdev_mlme->ops->mlme_vdev_stop_continue(vdev_mlme,
  498. event_data_len,
  499. event_data);
  500. return ret;
  501. }
  502. /**
  503. * mlme_vdev_down_send - VDEV down operation
  504. * @vdev_mlme_obj: VDEV MLME comp object
  505. * @event_data_len: data size
  506. * @event_data: event data
  507. *
  508. * API invokes VDEV down operation
  509. *
  510. * Return: SUCCESS on successful completion of VDEV down operation
  511. * FAILURE, if it fails due to any
  512. */
  513. static inline QDF_STATUS mlme_vdev_down_send(
  514. struct vdev_mlme_obj *vdev_mlme,
  515. uint16_t event_data_len, void *event_data)
  516. {
  517. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  518. if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_down_send)
  519. ret = vdev_mlme->ops->mlme_vdev_down_send(
  520. vdev_mlme, event_data_len, event_data);
  521. return ret;
  522. }
  523. /**
  524. * mlme_vdev_notify_down_complete - VDEV init state transition notification
  525. * @vdev_mlme_obj: VDEV MLME comp object
  526. * @event_data_len: data size
  527. * @event_data: event data
  528. *
  529. * API notifies MLME on moving to INIT state
  530. *
  531. * Return: SUCCESS on successful completion of down notification
  532. * FAILURE, if it fails due to any
  533. */
  534. static inline QDF_STATUS mlme_vdev_notify_down_complete(
  535. struct vdev_mlme_obj *vdev_mlme,
  536. uint16_t event_data_len, void *event_data)
  537. {
  538. QDF_STATUS ret = QDF_STATUS_SUCCESS;
  539. if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_notify_down_complete)
  540. ret = vdev_mlme->ops->mlme_vdev_notify_down_complete(
  541. vdev_mlme, event_data_len, event_data);
  542. return ret;
  543. }
  544. #endif