wmi_unified_ap_api.c 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063
  1. /*
  2. * Copyright (c) 2016-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. #include "wmi_unified_priv.h"
  19. #include "wmi_unified_param.h"
  20. #include "wmi_unified_ap_api.h"
  21. #include "qdf_module.h"
  22. /**
  23. * wmi_unified_peer_add_wds_entry_cmd_send() - WMI add wds entry cmd function
  24. * @param wmi_handle : handle to WMI.
  25. * @param param : pointer to hold wds entry param
  26. *
  27. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  28. */
  29. QDF_STATUS wmi_unified_peer_add_wds_entry_cmd_send(void *wmi_hdl,
  30. struct peer_add_wds_entry_params *param)
  31. {
  32. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  33. if (wmi_handle->ops->send_peer_add_wds_entry_cmd)
  34. return wmi_handle->ops->send_peer_add_wds_entry_cmd(wmi_handle,
  35. param);
  36. return QDF_STATUS_E_FAILURE;
  37. }
  38. /**
  39. * wmi_unified_peer_del_wds_entry_cmd_send() - WMI del wds entry cmd function
  40. * @param wmi_handle : handle to WMI.
  41. * @param param : pointer to hold wds entry param
  42. *
  43. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  44. */
  45. QDF_STATUS wmi_unified_peer_del_wds_entry_cmd_send(void *wmi_hdl,
  46. struct peer_del_wds_entry_params *param)
  47. {
  48. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  49. if (wmi_handle->ops->send_peer_del_wds_entry_cmd)
  50. return wmi_handle->ops->send_peer_del_wds_entry_cmd(wmi_handle,
  51. param);
  52. return QDF_STATUS_E_FAILURE;
  53. }
  54. /**
  55. * wmi_unified_peer_update_wds_entry_cmd_send() - WMI update wds entry cmd function
  56. * @param wmi_handle : handle to WMI.
  57. * @param param : pointer to hold wds entry param
  58. *
  59. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  60. */
  61. QDF_STATUS wmi_unified_peer_update_wds_entry_cmd_send(void *wmi_hdl,
  62. struct peer_update_wds_entry_params *param)
  63. {
  64. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  65. if (wmi->ops->send_peer_update_wds_entry_cmd)
  66. return wmi->ops->send_peer_update_wds_entry_cmd(wmi, param);
  67. return QDF_STATUS_E_FAILURE;
  68. }
  69. /**
  70. * wmi_unified_pdev_get_tpc_config_cmd_send() - WMI get tpc config function
  71. * @param wmi_handle : handle to WMI.
  72. * @param param : tpc config param
  73. *
  74. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  75. */
  76. QDF_STATUS wmi_unified_pdev_get_tpc_config_cmd_send(void *wmi_hdl,
  77. uint32_t param)
  78. {
  79. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  80. if (wmi_handle->ops->send_pdev_get_tpc_config_cmd)
  81. return wmi_handle->ops->send_pdev_get_tpc_config_cmd(wmi_handle,
  82. param);
  83. return QDF_STATUS_E_FAILURE;
  84. }
  85. /**
  86. * wmi_unified_beacon_send_cmd() - WMI beacon send function
  87. * @param wmi_handle : handle to WMI.
  88. * @param macaddr : MAC address
  89. * @param param : pointer to hold beacon send cmd parameter
  90. *
  91. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  92. */
  93. QDF_STATUS wmi_unified_beacon_send_cmd(void *wmi_hdl,
  94. struct beacon_params *param)
  95. {
  96. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  97. if (wmi_handle->ops->send_beacon_send_cmd)
  98. return wmi_handle->ops->send_beacon_send_cmd(wmi_handle,
  99. param);
  100. return QDF_STATUS_E_FAILURE;
  101. }
  102. /**
  103. * wmi_unified_set_ctl_table_cmd_send() - WMI ctl table cmd function
  104. * @param wmi_handle : handle to WMI.
  105. * @param param : pointer to hold ctl table param
  106. *
  107. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  108. */
  109. QDF_STATUS wmi_unified_set_ctl_table_cmd_send(void *wmi_hdl,
  110. struct ctl_table_params *param)
  111. {
  112. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  113. if (wmi_handle->ops->send_set_ctl_table_cmd)
  114. return wmi_handle->ops->send_set_ctl_table_cmd(wmi_handle,
  115. param);
  116. return QDF_STATUS_E_FAILURE;
  117. }
  118. /**
  119. * wmi_unified_set_mimogain_table_cmd_send() - WMI set mimogain cmd function
  120. * @param wmi_handle : handle to WMI.
  121. * @param param : pointer to hold mimogain param
  122. *
  123. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  124. */
  125. QDF_STATUS wmi_unified_set_mimogain_table_cmd_send(void *wmi_hdl,
  126. struct mimogain_table_params *param)
  127. {
  128. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  129. if (wmi_handle->ops->send_set_mimogain_table_cmd)
  130. return wmi_handle->ops->send_set_mimogain_table_cmd(wmi_handle,
  131. param);
  132. return QDF_STATUS_E_FAILURE;
  133. }
  134. /**
  135. * wmi_unified_packet_power_info_get_cmd_send() - WMI get packet power info function
  136. * @param wmi_handle : handle to WMI.
  137. * @param param : pointer to hold packet power info param
  138. *
  139. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  140. */
  141. QDF_STATUS wmi_unified_packet_power_info_get_cmd_send(void *wmi_hdl,
  142. struct packet_power_info_params *param)
  143. {
  144. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  145. if (wmi->ops->send_packet_power_info_get_cmd)
  146. return wmi->ops->send_packet_power_info_get_cmd(wmi, param);
  147. return QDF_STATUS_E_FAILURE;
  148. }
  149. /**
  150. * wmi_unified_vdev_config_ratemask_cmd_send() - WMI config ratemask function
  151. * @param wmi_handle : handle to WMI.
  152. * @param param : pointer to hold config ratemask param
  153. *
  154. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  155. */
  156. QDF_STATUS wmi_unified_vdev_config_ratemask_cmd_send(void *wmi_hdl,
  157. struct config_ratemask_params *param)
  158. {
  159. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  160. if (wmi->ops->send_vdev_config_ratemask_cmd)
  161. return wmi->ops->send_vdev_config_ratemask_cmd(wmi, param);
  162. return QDF_STATUS_E_FAILURE;
  163. }
  164. /**
  165. * wmi_unified_vdev_set_neighbour_rx_cmd_send() - WMI set neighbour rx function
  166. * @param wmi_handle : handle to WMI.
  167. * @param macaddr : MAC address
  168. * @param param : pointer to hold neighbour rx parameter
  169. *
  170. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  171. */
  172. QDF_STATUS wmi_unified_vdev_set_neighbour_rx_cmd_send(void *wmi_hdl,
  173. uint8_t macaddr[IEEE80211_ADDR_LEN],
  174. struct set_neighbour_rx_params *param)
  175. {
  176. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  177. if (wmi->ops->send_vdev_set_neighbour_rx_cmd)
  178. return wmi->ops->send_vdev_set_neighbour_rx_cmd(wmi,
  179. macaddr, param);
  180. return QDF_STATUS_E_FAILURE;
  181. }
  182. /**
  183. * wmi_unified_nf_dbr_dbm_info_get_cmd_send() - WMI request nf info function
  184. * @param wmi_handle : handle to WMI.
  185. * @mac_id: mac_id
  186. *
  187. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  188. */
  189. QDF_STATUS wmi_unified_nf_dbr_dbm_info_get_cmd_send(void *wmi_hdl,
  190. uint8_t mac_id)
  191. {
  192. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  193. if (wmi->ops->send_nf_dbr_dbm_info_get_cmd)
  194. return wmi->ops->send_nf_dbr_dbm_info_get_cmd(wmi, mac_id);
  195. return QDF_STATUS_E_FAILURE;
  196. }
  197. /**
  198. * wmi_unified_set_ht_ie_cmd_send() - WMI set channel cmd function
  199. * @param wmi_handle : handle to WMI.
  200. * @param param : pointer to hold channel param
  201. *
  202. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  203. */
  204. QDF_STATUS wmi_unified_set_ht_ie_cmd_send(void *wmi_hdl,
  205. struct ht_ie_params *param)
  206. {
  207. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  208. if (wmi_handle->ops->send_set_ht_ie_cmd)
  209. return wmi_handle->ops->send_set_ht_ie_cmd(wmi_handle, param);
  210. return QDF_STATUS_E_FAILURE;
  211. }
  212. /**
  213. * wmi_unified_set_vht_ie_cmd_send() - WMI set channel cmd function
  214. * @param wmi_handle : handle to WMI.
  215. * @param param : pointer to hold channel param
  216. *
  217. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  218. */
  219. QDF_STATUS wmi_unified_set_vht_ie_cmd_send(void *wmi_hdl,
  220. struct vht_ie_params *param)
  221. {
  222. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  223. if (wmi_handle->ops->send_set_vht_ie_cmd)
  224. return wmi_handle->ops->send_set_vht_ie_cmd(wmi_handle, param);
  225. return QDF_STATUS_E_FAILURE;
  226. }
  227. /**
  228. * wmi_unified_set_quiet_mode_cmd_send() - WMI set quiet mode function
  229. * @param wmi_handle : handle to WMI.
  230. * @param param : pointer to hold quiet mode param
  231. *
  232. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  233. */
  234. QDF_STATUS wmi_unified_set_quiet_mode_cmd_send(void *wmi_hdl,
  235. struct set_quiet_mode_params *param)
  236. {
  237. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  238. if (wmi_handle->ops->send_set_quiet_mode_cmd)
  239. return wmi_handle->ops->send_set_quiet_mode_cmd(wmi_handle,
  240. param);
  241. return QDF_STATUS_E_FAILURE;
  242. }
  243. /**
  244. * wmi_send_bcn_offload_control_cmd - send beacon ofload control cmd to fw
  245. * @wmi_hdl: wmi handle
  246. * @bcn_ctrl_param: pointer to bcn_offload_control param
  247. *
  248. * Return: QDF_STATUS_SUCCESS for success or error code
  249. */
  250. QDF_STATUS wmi_send_bcn_offload_control_cmd(void *wmi_hdl,
  251. struct bcn_offload_control *bcn_ctrl_param)
  252. {
  253. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  254. if (wmi_handle->ops->send_bcn_offload_control_cmd)
  255. return wmi_handle->ops->send_bcn_offload_control_cmd(wmi_handle,
  256. bcn_ctrl_param);
  257. return QDF_STATUS_E_FAILURE;
  258. }
  259. /**
  260. * wmi_extract_tbttoffset_num_vdevs() - extract tbtt offset num vdev
  261. * @wmi_handle: wmi handle
  262. * @param evt_buf: pointer to event buffer
  263. * @param vdev_map: Pointer to hold num vdev
  264. *
  265. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  266. */
  267. QDF_STATUS wmi_extract_tbttoffset_num_vdevs(void *wmi_hdl, void *evt_buf,
  268. uint32_t *num_vdevs)
  269. {
  270. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  271. if (wmi->ops->extract_tbttoffset_num_vdevs)
  272. return wmi->ops->extract_tbttoffset_num_vdevs(wmi,
  273. evt_buf, num_vdevs);
  274. return QDF_STATUS_E_FAILURE;
  275. }
  276. /**
  277. * wmi_extract_ext_tbttoffset_num_vdevs() - extract ext tbtt offset num vdev
  278. * @wmi_handle: wmi handle
  279. * @param evt_buf: pointer to event buffer
  280. * @param vdev_map: Pointer to hold num vdev
  281. *
  282. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  283. */
  284. QDF_STATUS wmi_extract_ext_tbttoffset_num_vdevs(void *wmi_hdl, void *evt_buf,
  285. uint32_t *num_vdevs)
  286. {
  287. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  288. if (wmi->ops->extract_ext_tbttoffset_num_vdevs)
  289. return wmi->ops->extract_ext_tbttoffset_num_vdevs(wmi,
  290. evt_buf, num_vdevs);
  291. return QDF_STATUS_E_FAILURE;
  292. }
  293. /**
  294. * wmi_extract_tbttoffset_update_params() - extract tbtt offset update param
  295. * @wmi_handle: wmi handle
  296. * @param evt_buf: pointer to event buffer
  297. * @param idx: Index referring to a vdev
  298. * @param tbtt_param: Pointer to tbttoffset event param
  299. *
  300. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  301. */
  302. QDF_STATUS wmi_extract_tbttoffset_update_params(void *wmi_hdl, void *evt_buf,
  303. uint8_t idx, struct tbttoffset_params *tbtt_param)
  304. {
  305. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  306. if (wmi->ops->extract_tbttoffset_update_params)
  307. return wmi->ops->extract_tbttoffset_update_params(wmi,
  308. evt_buf, idx, tbtt_param);
  309. return QDF_STATUS_E_FAILURE;
  310. }
  311. /**
  312. * wmi_extract_ext_tbttoffset_update_params() - extract tbtt offset update param
  313. * @wmi_handle: wmi handle
  314. * @param evt_buf: pointer to event buffer
  315. * @param idx: Index referring to a vdev
  316. * @param tbtt_param: Pointer to tbttoffset event param
  317. *
  318. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  319. */
  320. QDF_STATUS wmi_extract_ext_tbttoffset_update_params(void *wmi_hdl,
  321. void *evt_buf, uint8_t idx, struct tbttoffset_params *tbtt_param)
  322. {
  323. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  324. if (wmi->ops->extract_ext_tbttoffset_update_params)
  325. return wmi->ops->extract_ext_tbttoffset_update_params(wmi,
  326. evt_buf, idx, tbtt_param);
  327. return QDF_STATUS_E_FAILURE;
  328. }
  329. /**
  330. * wmi_extract_offchan_data_tx_compl_param() -
  331. * extract offchan data tx completion param from event
  332. * @wmi_hdl: wmi handle
  333. * @evt_buf: pointer to event buffer
  334. * @param: Pointer to offchan data tx completion param
  335. *
  336. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  337. */
  338. QDF_STATUS wmi_extract_offchan_data_tx_compl_param(void *wmi_hdl, void *evt_buf,
  339. struct wmi_host_offchan_data_tx_compl_event *param)
  340. {
  341. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  342. if (wmi_handle->ops->extract_offchan_data_tx_compl_param)
  343. return wmi_handle->ops->extract_offchan_data_tx_compl_param(
  344. wmi_handle, evt_buf, param);
  345. return QDF_STATUS_E_FAILURE;
  346. }
  347. /**
  348. * wmi_extract_pdev_csa_switch_count_status() - extract CSA switch count status
  349. * from event
  350. * @wmi_handle: wmi handle
  351. * @param evt_buf: pointer to event buffer
  352. * @param param: Pointer to CSA switch count status param
  353. *
  354. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  355. */
  356. QDF_STATUS wmi_extract_pdev_csa_switch_count_status(void *wmi_hdl,
  357. void *evt_buf,
  358. struct pdev_csa_switch_count_status *param)
  359. {
  360. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  361. if (wmi_handle->ops->extract_pdev_csa_switch_count_status)
  362. return wmi_handle->ops->extract_pdev_csa_switch_count_status(
  363. wmi_handle,
  364. evt_buf,
  365. param);
  366. return QDF_STATUS_E_FAILURE;
  367. }
  368. /**
  369. * wmi_extract_swba_num_vdevs() - extract swba num vdevs from event
  370. * @wmi_handle: wmi handle
  371. * @param evt_buf: pointer to event buffer
  372. * @param num_vdevs: Pointer to hold num vdevs
  373. *
  374. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  375. */
  376. QDF_STATUS wmi_extract_swba_num_vdevs(void *wmi_hdl, void *evt_buf,
  377. uint32_t *num_vdevs)
  378. {
  379. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  380. if (wmi_handle->ops->extract_swba_num_vdevs)
  381. return wmi_handle->ops->extract_swba_num_vdevs(wmi_handle,
  382. evt_buf, num_vdevs);
  383. return QDF_STATUS_E_FAILURE;
  384. }
  385. /**
  386. * wmi_extract_swba_tim_info() - extract swba tim info from event
  387. * @wmi_handle: wmi handle
  388. * @param evt_buf: pointer to event buffer
  389. * @param idx: Index to bcn info
  390. * @param tim_info: Pointer to hold tim info
  391. *
  392. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  393. */
  394. QDF_STATUS wmi_extract_swba_tim_info(void *wmi_hdl, void *evt_buf,
  395. uint32_t idx, wmi_host_tim_info *tim_info)
  396. {
  397. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  398. if (wmi_handle->ops->extract_swba_tim_info)
  399. return wmi_handle->ops->extract_swba_tim_info(wmi_handle,
  400. evt_buf, idx, tim_info);
  401. return QDF_STATUS_E_FAILURE;
  402. }
  403. /**
  404. * wmi_extract_swba_noa_info() - extract swba NoA information from event
  405. * @wmi_handle: wmi handle
  406. * @param evt_buf: pointer to event buffer
  407. * @param idx: Index to bcn info
  408. * @param p2p_desc: Pointer to hold p2p NoA info
  409. *
  410. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  411. */
  412. QDF_STATUS wmi_extract_swba_noa_info(void *wmi_hdl, void *evt_buf,
  413. uint32_t idx, wmi_host_p2p_noa_info *p2p_desc)
  414. {
  415. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  416. if (wmi_handle->ops->extract_swba_noa_info)
  417. return wmi_handle->ops->extract_swba_noa_info(wmi_handle,
  418. evt_buf, idx, p2p_desc);
  419. return QDF_STATUS_E_FAILURE;
  420. }
  421. /**
  422. * wmi_extract_peer_sta_kickout_ev() - extract peer sta kickout event
  423. * @wmi_handle: wmi handle
  424. * @param evt_buf: pointer to event buffer
  425. * @param ev: Pointer to hold peer param
  426. *
  427. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  428. */
  429. QDF_STATUS wmi_extract_peer_sta_kickout_ev(void *wmi_hdl, void *evt_buf,
  430. wmi_host_peer_sta_kickout_event *ev)
  431. {
  432. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  433. if (wmi_handle->ops->extract_peer_sta_kickout_ev)
  434. return wmi_handle->ops->extract_peer_sta_kickout_ev(wmi_handle,
  435. evt_buf, ev);
  436. return QDF_STATUS_E_FAILURE;
  437. }
  438. /**
  439. * wmi_unified_send_multiple_vdev_restart_req_cmd() - send multiple vdev restart
  440. * @wmi_handle: wmi handle
  441. * @param: multiple vdev restart parameter
  442. *
  443. * Send WMI_PDEV_MULTIPLE_VDEV_RESTART_REQUEST_CMDID parameters to fw.
  444. *
  445. * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
  446. */
  447. QDF_STATUS wmi_unified_send_multiple_vdev_restart_req_cmd(void *wmi_hdl,
  448. struct multiple_vdev_restart_params *param)
  449. {
  450. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  451. if (wmi_handle->ops->send_multiple_vdev_restart_req_cmd)
  452. return wmi_handle->ops->send_multiple_vdev_restart_req_cmd(
  453. wmi_handle,
  454. param);
  455. return QDF_STATUS_E_FAILURE;
  456. }
  457. /**
  458. * wmi_extract_wds_addr_event - Extract WDS addr WMI event
  459. *
  460. * @param wmi_handle : handle to WMI.
  461. * @param evt_buf : pointer to event buffer
  462. * @param len : length of the event buffer
  463. * @param wds_ev: pointer to strct to extract
  464. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  465. */
  466. QDF_STATUS wmi_extract_wds_addr_event(void *wmi_hdl, void *evt_buf,
  467. uint16_t len, wds_addr_event_t *wds_ev)
  468. {
  469. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  470. if (wmi_handle->ops->extract_wds_addr_event) {
  471. return wmi_handle->ops->extract_wds_addr_event(wmi_handle,
  472. evt_buf, len, wds_ev);
  473. }
  474. return QDF_STATUS_E_FAILURE;
  475. }
  476. qdf_export_symbol(wmi_extract_wds_addr_event);
  477. /**
  478. * wmi_extract_dcs_interference_type() - extract dcs interference type
  479. * @wmi_handle: wmi handle
  480. * @param evt_buf: pointer to event buffer
  481. * @param param: Pointer to hold dcs interference param
  482. *
  483. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  484. */
  485. QDF_STATUS wmi_extract_dcs_interference_type(void *wmi_hdl,
  486. void *evt_buf, struct wmi_host_dcs_interference_param *param)
  487. {
  488. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  489. if (wmi->ops->extract_dcs_interference_type) {
  490. return wmi->ops->extract_dcs_interference_type(wmi,
  491. evt_buf, param);
  492. }
  493. return QDF_STATUS_E_FAILURE;
  494. }
  495. /*
  496. * wmi_extract_dcs_cw_int() - extract dcs cw interference from event
  497. * @wmi_handle: wmi handle
  498. * @param evt_buf: pointer to event buffer
  499. * @param cw_int: Pointer to hold cw interference
  500. *
  501. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  502. */
  503. QDF_STATUS wmi_extract_dcs_cw_int(void *wmi_hdl, void *evt_buf,
  504. wmi_host_ath_dcs_cw_int *cw_int)
  505. {
  506. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  507. if (wmi_handle->ops->extract_dcs_cw_int) {
  508. return wmi_handle->ops->extract_dcs_cw_int(wmi_handle,
  509. evt_buf, cw_int);
  510. }
  511. return QDF_STATUS_E_FAILURE;
  512. }
  513. /**
  514. * wmi_extract_dcs_im_tgt_stats() - extract dcs im target stats from event
  515. * @wmi_handle: wmi handle
  516. * @param evt_buf: pointer to event buffer
  517. * @param wlan_stat: Pointer to hold wlan stats
  518. *
  519. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  520. */
  521. QDF_STATUS wmi_extract_dcs_im_tgt_stats(void *wmi_hdl, void *evt_buf,
  522. wmi_host_dcs_im_tgt_stats_t *wlan_stat)
  523. {
  524. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  525. if (wmi_handle->ops->extract_dcs_im_tgt_stats) {
  526. return wmi_handle->ops->extract_dcs_im_tgt_stats(wmi_handle,
  527. evt_buf, wlan_stat);
  528. }
  529. return QDF_STATUS_E_FAILURE;
  530. }
  531. /**
  532. * wmi_extract_peer_delete_response_event() -
  533. * extract vdev id and peer mac addresse from peer delete response event
  534. * @wmi_handle: wmi handle
  535. * @param evt_buf: pointer to event buffer
  536. * @param param: Pointer to hold evt buf
  537. *
  538. * Return: QDF_STATUS_SUCCESS for success or error code
  539. */
  540. QDF_STATUS wmi_extract_peer_delete_response_event(
  541. void *wmi_hdl,
  542. uint8_t *evt_buf,
  543. struct wmi_host_peer_delete_response_event *param)
  544. {
  545. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  546. if (wmi_handle->ops->extract_peer_delete_response_event)
  547. return wmi_handle->ops->extract_peer_delete_response_event(
  548. wmi_handle,
  549. evt_buf, param);
  550. return QDF_STATUS_E_FAILURE;
  551. }
  552. /**
  553. * wmi_extract_pdev_tpc_ev_param() - extract tpc param from event
  554. * @wmi_handle: wmi handle
  555. * @param evt_buf: pointer to event buffer
  556. * @param param: Pointer to hold tpc param
  557. *
  558. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  559. */
  560. QDF_STATUS wmi_extract_pdev_tpc_ev_param(void *wmi_hdl, void *evt_buf,
  561. wmi_host_pdev_tpc_event *param)
  562. {
  563. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  564. if (wmi_handle->ops->extract_pdev_tpc_ev_param)
  565. return wmi_handle->ops->extract_pdev_tpc_ev_param(wmi_handle,
  566. evt_buf, param);
  567. return QDF_STATUS_E_FAILURE;
  568. }
  569. /**
  570. * wmi_extract_pdev_tpc_config_ev_param() - extract pdev tpc configuration
  571. * param from event
  572. * @wmi_handle: wmi handle
  573. * @param evt_buf: pointer to event buffer
  574. * @param param: Pointer to hold tpc configuration
  575. *
  576. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  577. */
  578. QDF_STATUS wmi_extract_pdev_tpc_config_ev_param(void *wmi_hdl, void *evt_buf,
  579. wmi_host_pdev_tpc_config_event *param)
  580. {
  581. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  582. if (wmi->ops->extract_pdev_tpc_config_ev_param)
  583. return wmi->ops->extract_pdev_tpc_config_ev_param(wmi,
  584. evt_buf, param);
  585. return QDF_STATUS_E_FAILURE;
  586. }
  587. /**
  588. * wmi_extract_nfcal_power_ev_param() - extract noise floor calibration
  589. * power param from event
  590. * @wmi_handle: wmi handle
  591. * @param evt_buf: pointer to event buffer
  592. * @param param: Pointer to hold nf cal power param
  593. *
  594. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  595. */
  596. QDF_STATUS wmi_extract_nfcal_power_ev_param(void *wmi_hdl, void *evt_buf,
  597. wmi_host_pdev_nfcal_power_all_channels_event *param)
  598. {
  599. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  600. if (wmi_handle->ops->extract_nfcal_power_ev_param)
  601. return wmi_handle->ops->extract_nfcal_power_ev_param(wmi_handle,
  602. evt_buf, param);
  603. return QDF_STATUS_E_FAILURE;
  604. }
  605. /**
  606. * wmi_extract_peer_sta_ps_statechange_ev() - extract peer sta ps state
  607. * from event
  608. * @wmi_handle: wmi handle
  609. * @param evt_buf: pointer to event buffer
  610. * @param ev: Pointer to hold peer param and ps state
  611. *
  612. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  613. */
  614. QDF_STATUS wmi_extract_peer_sta_ps_statechange_ev(void *wmi_hdl, void *evt_buf,
  615. wmi_host_peer_sta_ps_statechange_event *ev)
  616. {
  617. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  618. if (wmi->ops->extract_peer_sta_ps_statechange_ev)
  619. return wmi->ops->extract_peer_sta_ps_statechange_ev(wmi,
  620. evt_buf, ev);
  621. return QDF_STATUS_E_FAILURE;
  622. }
  623. /**
  624. * wmi_extract_inst_rssi_stats_event() - extract inst rssi stats from event
  625. * @wmi_handle: wmi handle
  626. * @param evt_buf: pointer to event buffer
  627. * @param inst_rssi_resp: Pointer to hold inst rssi response
  628. *
  629. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  630. */
  631. QDF_STATUS wmi_extract_inst_rssi_stats_event(void *wmi_hdl, void *evt_buf,
  632. wmi_host_inst_stats_resp *inst_rssi_resp)
  633. {
  634. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  635. if (wmi->ops->extract_inst_rssi_stats_event)
  636. return wmi->ops->extract_inst_rssi_stats_event(wmi,
  637. evt_buf, inst_rssi_resp);
  638. return QDF_STATUS_E_FAILURE;
  639. }
  640. /**
  641. * wmi_send_pdev_caldata_version_check_cmd() - send reset peer mumimo
  642. * tx count to fw
  643. * @wmi_handle: wmi handle
  644. * @value: value
  645. *
  646. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  647. */
  648. QDF_STATUS
  649. wmi_send_pdev_caldata_version_check_cmd(void *wmi_hdl, uint32_t value)
  650. {
  651. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  652. if (wmi->ops->send_pdev_caldata_version_check_cmd)
  653. return wmi->ops->send_pdev_caldata_version_check_cmd(wmi,
  654. value);
  655. return QDF_STATUS_E_FAILURE;
  656. }
  657. /**
  658. * wmi_extract_pdev_caldata_version_check_ev_param() - extract caldata
  659. * from event
  660. * @wmi_handle: wmi handle
  661. * @param evt_buf: pointer to event buffer
  662. * @param param: Pointer to hold caldata version data
  663. *
  664. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  665. */
  666. QDF_STATUS wmi_extract_pdev_caldata_version_check_ev_param(void *wmi_hdl,
  667. void *evt_buf,
  668. wmi_host_pdev_check_cal_version_event *param)
  669. {
  670. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  671. if (wmi->ops->extract_pdev_caldata_version_check_ev_param)
  672. return wmi->ops->extract_pdev_caldata_version_check_ev_param(
  673. wmi, evt_buf, param);
  674. return QDF_STATUS_E_FAILURE;
  675. }
  676. #ifdef WLAN_SUPPORT_FILS
  677. QDF_STATUS
  678. wmi_unified_fils_discovery_send_cmd(void *wmi_hdl, struct fd_params *param)
  679. {
  680. wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
  681. if (wmi_handle->ops->send_fils_discovery_send_cmd)
  682. return wmi_handle->ops->send_fils_discovery_send_cmd(wmi_handle,
  683. param);
  684. return QDF_STATUS_E_FAILURE;
  685. }
  686. QDF_STATUS
  687. wmi_unified_fils_vdev_config_send_cmd(void *wmi_hdl,
  688. struct config_fils_params *param)
  689. {
  690. wmi_unified_t wmi = (wmi_unified_t)wmi_hdl;
  691. if (wmi->ops->send_vdev_fils_enable_cmd)
  692. return wmi->ops->send_vdev_fils_enable_cmd(wmi, param);
  693. return QDF_STATUS_E_FAILURE;
  694. }
  695. QDF_STATUS
  696. wmi_extract_swfda_vdev_id(void *wmi_hdl, void *evt_buf,
  697. uint32_t *vdev_id)
  698. {
  699. wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl;
  700. if (wmi_handle->ops->extract_swfda_vdev_id)
  701. return wmi_handle->ops->extract_swfda_vdev_id(wmi_handle,
  702. evt_buf, vdev_id);
  703. return QDF_STATUS_E_FAILURE;
  704. }
  705. #endif /* WLAN_SUPPORT_FILS */
  706. /**
  707. * wmi_unified_set_qboost_param_cmd_send() - WMI set_qboost function
  708. * @param wmi_handle : handle to WMI.
  709. * @param macaddr : MAC address
  710. * @param param : pointer to hold set_qboost parameter
  711. *
  712. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  713. */
  714. QDF_STATUS wmi_unified_set_qboost_param_cmd_send(void *wmi_hdl,
  715. uint8_t macaddr[IEEE80211_ADDR_LEN],
  716. struct set_qboost_params *param)
  717. {
  718. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  719. if (wmi_handle->ops->send_set_qboost_param_cmd)
  720. return wmi_handle->ops->send_set_qboost_param_cmd(wmi_handle,
  721. macaddr, param);
  722. return QDF_STATUS_E_FAILURE;
  723. }
  724. /**
  725. * wmi_unified_gpio_config_cmd_send() - WMI gpio config function
  726. * @param wmi_handle : handle to WMI.
  727. * @param param : pointer to hold gpio config param
  728. *
  729. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  730. */
  731. QDF_STATUS wmi_unified_gpio_config_cmd_send(void *wmi_hdl,
  732. struct gpio_config_params *param)
  733. {
  734. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  735. if (wmi_handle->ops->send_gpio_config_cmd)
  736. return wmi_handle->ops->send_gpio_config_cmd(wmi_handle, param);
  737. return QDF_STATUS_E_FAILURE;
  738. }
  739. /**
  740. * wmi_unified_gpio_output_cmd_send() - WMI gpio config function
  741. * @param wmi_handle : handle to WMI.
  742. * @param param : pointer to hold gpio config param
  743. *
  744. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  745. */
  746. QDF_STATUS wmi_unified_gpio_output_cmd_send(void *wmi_hdl,
  747. struct gpio_output_params *param)
  748. {
  749. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  750. if (wmi_handle->ops->send_gpio_output_cmd)
  751. return wmi_handle->ops->send_gpio_output_cmd(wmi_handle, param);
  752. return QDF_STATUS_E_FAILURE;
  753. }
  754. /**
  755. * wmi_unified_mcast_group_update_cmd_send() - WMI mcast grp update cmd function
  756. * @param wmi_handle : handle to WMI.
  757. * @param param : pointer to hold mcast grp param
  758. *
  759. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  760. */
  761. QDF_STATUS wmi_unified_mcast_group_update_cmd_send(void *wmi_hdl,
  762. struct mcast_group_update_params *param)
  763. {
  764. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  765. if (wmi_handle->ops->send_mcast_group_update_cmd)
  766. return wmi_handle->ops->send_mcast_group_update_cmd(wmi_handle,
  767. param);
  768. return QDF_STATUS_E_FAILURE;
  769. }
  770. /**
  771. * wmi_unified_pdev_qvit_cmd_send() - WMI pdev qvit cmd function
  772. * @param wmi_handle : handle to WMI.
  773. * @param param : pointer to hold qvit param
  774. *
  775. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  776. */
  777. QDF_STATUS wmi_unified_pdev_qvit_cmd_send(void *wmi_hdl,
  778. struct pdev_qvit_params *param)
  779. {
  780. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  781. if (wmi_handle->ops->send_pdev_qvit_cmd)
  782. return wmi_handle->ops->send_pdev_qvit_cmd(wmi_handle, param);
  783. return QDF_STATUS_E_FAILURE;
  784. }
  785. /**
  786. * wmi_unified_wmm_update_cmd_send() - WMI wmm update cmd function
  787. * @param wmi_handle : handle to WMI.
  788. * @param param : pointer to hold wmm param
  789. *
  790. * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  791. */
  792. QDF_STATUS wmi_unified_wmm_update_cmd_send(void *wmi_hdl,
  793. struct wmm_update_params *param)
  794. {
  795. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  796. if (wmi_handle->ops->send_wmm_update_cmd)
  797. return wmi_handle->ops->send_wmm_update_cmd(wmi_handle, param);
  798. return QDF_STATUS_E_FAILURE;
  799. }
  800. /**
  801. * wmi_extract_vdev_start_resp() - extract vdev start response
  802. * @wmi_handle: wmi handle
  803. * @param evt_buf: pointer to event buffer
  804. * @param vdev_rsp: Pointer to hold vdev response
  805. *
  806. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  807. */
  808. QDF_STATUS wmi_extract_vdev_start_resp(void *wmi_hdl, void *evt_buf,
  809. wmi_host_vdev_start_resp *vdev_rsp)
  810. {
  811. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  812. if (wmi_handle->ops->extract_vdev_start_resp)
  813. return wmi_handle->ops->extract_vdev_start_resp(wmi_handle,
  814. evt_buf, vdev_rsp);
  815. return QDF_STATUS_E_FAILURE;
  816. }
  817. /**
  818. * wmi_extract_vdev_delete_resp() - extract vdev delete response
  819. * @wmi_handle: wmi handle
  820. * @param evt_buf: pointer to event buffer
  821. * @param delete_rsp: Pointer to hold vdev delete response
  822. *
  823. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  824. */
  825. QDF_STATUS wmi_extract_vdev_delete_resp(void *wmi_hdl, void *evt_buf,
  826. struct wmi_host_vdev_delete_resp *delete_rsp)
  827. {
  828. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  829. if (wmi_handle->ops->extract_vdev_delete_resp)
  830. return wmi_handle->ops->extract_vdev_delete_resp(wmi_handle,
  831. evt_buf, delete_rsp);
  832. return QDF_STATUS_E_FAILURE;
  833. }
  834. /**
  835. * wmi_extract_vdev_stopped_param() - extract vdev stop param from event
  836. * @wmi_handle: wmi handle
  837. * @param evt_buf: pointer to event buffer
  838. * @param vdev_id: Pointer to hold vdev identifier
  839. *
  840. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  841. */
  842. QDF_STATUS wmi_extract_vdev_stopped_param(void *wmi_hdl, void *evt_buf,
  843. uint32_t *vdev_id)
  844. {
  845. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  846. if (wmi_handle->ops->extract_vdev_stopped_param)
  847. return wmi_handle->ops->extract_vdev_stopped_param(wmi_handle,
  848. evt_buf, vdev_id);
  849. return QDF_STATUS_E_FAILURE;
  850. }
  851. /**
  852. * wmi_extract_mgmt_tx_compl_param() - extract mgmt tx completion param
  853. * from event
  854. * @wmi_hdl: wmi handle
  855. * @evt_buf: pointer to event buffer
  856. * @param: Pointer to mgmt tx completion param
  857. *
  858. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  859. */
  860. QDF_STATUS wmi_extract_mgmt_tx_compl_param(void *wmi_hdl, void *evt_buf,
  861. wmi_host_mgmt_tx_compl_event *param)
  862. {
  863. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  864. if (wmi_handle->ops->extract_mgmt_tx_compl_param)
  865. return wmi_handle->ops->extract_mgmt_tx_compl_param(wmi_handle,
  866. evt_buf, param);
  867. return QDF_STATUS_E_FAILURE;
  868. }
  869. /**
  870. * wmi_extract_chan_info_event() - extract chan information from event
  871. * @wmi_handle: wmi handle
  872. * @param evt_buf: pointer to event buffer
  873. * @param chan_info: Pointer to hold chan information
  874. *
  875. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  876. */
  877. QDF_STATUS wmi_extract_chan_info_event(void *wmi_hdl, void *evt_buf,
  878. wmi_host_chan_info_event *chan_info)
  879. {
  880. wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
  881. if (wmi_handle->ops->extract_chan_info_event)
  882. return wmi_handle->ops->extract_chan_info_event(wmi_handle,
  883. evt_buf, chan_info);
  884. return QDF_STATUS_E_FAILURE;
  885. }
  886. /**
  887. * wmi_extract_channel_hopping_event() - extract channel hopping param
  888. * from event
  889. * @wmi_handle: wmi handle
  890. * @param evt_buf: pointer to event buffer
  891. * @param ch_hopping: Pointer to hold channel hopping param
  892. *
  893. * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  894. */
  895. QDF_STATUS wmi_extract_channel_hopping_event(void *wmi_hdl, void *evt_buf,
  896. wmi_host_pdev_channel_hopping_event *ch_hopping)
  897. {
  898. wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
  899. if (wmi->ops->extract_channel_hopping_event)
  900. return wmi->ops->extract_channel_hopping_event(wmi,
  901. evt_buf, ch_hopping);
  902. return QDF_STATUS_E_FAILURE;
  903. }