wlan_vdev_mlme.h 20 KB

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