wmi_unified_roam_api.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. /*
  2. * Copyright (c) 2013-2021, The Linux Foundation. All rights reserved.
  3. * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for any
  6. * purpose with or without fee is hereby granted, provided that the above
  7. * copyright notice and this permission notice appear in all copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  10. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  11. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  12. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  13. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  14. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  15. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  16. */
  17. #include <osdep.h>
  18. #include <wmi.h>
  19. #include <wmi_unified_priv.h>
  20. #include <wmi_unified_roam_param.h>
  21. #include <wmi_unified_roam_api.h>
  22. #ifdef FEATURE_LFR_SUBNET_DETECTION
  23. QDF_STATUS
  24. wmi_unified_set_gateway_params_cmd(wmi_unified_t wmi_handle,
  25. struct gateway_update_req_param *req)
  26. {
  27. if (wmi_handle->ops->send_set_gateway_params_cmd)
  28. return wmi_handle->ops->send_set_gateway_params_cmd(wmi_handle,
  29. req);
  30. return QDF_STATUS_E_FAILURE;
  31. }
  32. #endif /* FEATURE_LFR_SUBNET_DETECTION */
  33. #ifdef FEATURE_RSSI_MONITOR
  34. QDF_STATUS
  35. wmi_unified_set_rssi_monitoring_cmd(wmi_unified_t wmi_handle,
  36. struct rssi_monitor_param *req)
  37. {
  38. if (wmi_handle->ops->send_set_rssi_monitoring_cmd)
  39. return wmi_handle->ops->send_set_rssi_monitoring_cmd(wmi_handle,
  40. req);
  41. return QDF_STATUS_E_FAILURE;
  42. }
  43. #endif /* FEATURE_RSSI_MONITOR */
  44. QDF_STATUS wmi_unified_roam_scan_offload_rssi_thresh_cmd(
  45. wmi_unified_t wmi_handle,
  46. struct wlan_roam_offload_scan_rssi_params *roam_req)
  47. {
  48. if (wmi_handle->ops->send_roam_scan_offload_rssi_thresh_cmd)
  49. return wmi_handle->ops->send_roam_scan_offload_rssi_thresh_cmd(
  50. wmi_handle, roam_req);
  51. return QDF_STATUS_E_FAILURE;
  52. }
  53. QDF_STATUS
  54. wmi_unified_roam_scan_offload_scan_period(
  55. wmi_unified_t wmi_handle,
  56. struct wlan_roam_scan_period_params *param)
  57. {
  58. if (wmi_handle->ops->send_roam_scan_offload_scan_period_cmd)
  59. return wmi_handle->ops->send_roam_scan_offload_scan_period_cmd(
  60. wmi_handle, param);
  61. return QDF_STATUS_E_FAILURE;
  62. }
  63. QDF_STATUS wmi_unified_roam_mawc_params_cmd(
  64. wmi_unified_t wmi_handle,
  65. struct wlan_roam_mawc_params *params)
  66. {
  67. if (wmi_handle->ops->send_roam_mawc_params_cmd)
  68. return wmi_handle->ops->send_roam_mawc_params_cmd(wmi_handle,
  69. params);
  70. return QDF_STATUS_E_FAILURE;
  71. }
  72. QDF_STATUS
  73. wmi_unified_roam_scan_filter_cmd(wmi_unified_t wmi_handle,
  74. struct roam_scan_filter_params *roam_req)
  75. {
  76. if (wmi_handle->ops->send_roam_scan_filter_cmd)
  77. return wmi_handle->ops->send_roam_scan_filter_cmd(wmi_handle,
  78. roam_req);
  79. return QDF_STATUS_E_FAILURE;
  80. }
  81. #ifdef FEATURE_WLAN_ESE
  82. QDF_STATUS wmi_unified_plm_stop_cmd(wmi_unified_t wmi_handle,
  83. const struct plm_req_params *plm)
  84. {
  85. if (wmi_handle->ops->send_plm_stop_cmd)
  86. return wmi_handle->ops->send_plm_stop_cmd(wmi_handle, plm);
  87. return QDF_STATUS_E_FAILURE;
  88. }
  89. QDF_STATUS wmi_unified_plm_start_cmd(wmi_unified_t wmi_handle,
  90. const struct plm_req_params *plm)
  91. {
  92. if (wmi_handle->ops->send_plm_start_cmd)
  93. return wmi_handle->ops->send_plm_start_cmd(wmi_handle, plm);
  94. return QDF_STATUS_E_FAILURE;
  95. }
  96. #endif /* FEATURE_WLAN_ESE */
  97. #ifdef WLAN_FEATURE_ROAM_OFFLOAD
  98. QDF_STATUS wmi_unified_set_ric_req_cmd(wmi_unified_t wmi_handle, void *msg,
  99. uint8_t is_add_ts)
  100. {
  101. if (wmi_handle->ops->send_set_ric_req_cmd)
  102. return wmi_handle->ops->send_set_ric_req_cmd(wmi_handle, msg,
  103. is_add_ts);
  104. return QDF_STATUS_E_FAILURE;
  105. }
  106. QDF_STATUS wmi_unified_roam_synch_complete_cmd(wmi_unified_t wmi_handle,
  107. uint8_t vdev_id)
  108. {
  109. if (wmi_handle->ops->send_process_roam_synch_complete_cmd)
  110. return wmi_handle->ops->send_process_roam_synch_complete_cmd(
  111. wmi_handle, vdev_id);
  112. return QDF_STATUS_E_FAILURE;
  113. }
  114. #ifdef WLAN_VENDOR_HANDOFF_CONTROL
  115. QDF_STATUS
  116. wmi_unified_roam_vendor_handoff_req_cmd(wmi_unified_t wmi_handle,
  117. uint8_t vdev_id, uint32_t param_id)
  118. {
  119. if (wmi_handle->ops->send_process_roam_vendor_handoff_req_cmd)
  120. return wmi_handle->ops->send_process_roam_vendor_handoff_req_cmd(
  121. wmi_handle, vdev_id, param_id);
  122. return QDF_STATUS_E_FAILURE;
  123. }
  124. QDF_STATUS
  125. wmi_extract_roam_vendor_control_param_event(wmi_unified_t wmi_handle,
  126. uint8_t *event, uint32_t len,
  127. struct roam_vendor_handoff_params **data)
  128. {
  129. if (wmi_handle->ops->extract_roam_vendor_control_param_event)
  130. return wmi_handle->ops->extract_roam_vendor_control_param_event(
  131. wmi_handle, event, len, data);
  132. return QDF_STATUS_E_FAILURE;
  133. }
  134. #endif
  135. #if defined(WLAN_FEATURE_ROAM_OFFLOAD) && defined(WLAN_FEATURE_11BE_MLO)
  136. QDF_STATUS
  137. wmi_extract_roam_synch_key_event(wmi_unified_t wmi_handle, uint8_t *event,
  138. uint32_t len,
  139. struct wlan_crypto_key_entry **keys,
  140. uint8_t *num_keys,
  141. struct qdf_mac_addr *mld_addr)
  142. {
  143. if (wmi_handle->ops->extract_roam_synch_key_event)
  144. return wmi_handle->ops->extract_roam_synch_key_event(
  145. wmi_handle, event,
  146. len, keys, num_keys,
  147. mld_addr);
  148. return QDF_STATUS_E_FAILURE;
  149. }
  150. #endif
  151. QDF_STATUS wmi_unified_roam_invoke_cmd(wmi_unified_t wmi_handle,
  152. struct roam_invoke_req *roaminvoke)
  153. {
  154. if (wmi_handle->ops->send_roam_invoke_cmd)
  155. return wmi_handle->ops->send_roam_invoke_cmd(wmi_handle,
  156. roaminvoke);
  157. return QDF_STATUS_E_FAILURE;
  158. }
  159. QDF_STATUS
  160. wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle,
  161. struct wlan_roam_disconnect_params *req)
  162. {
  163. if (wmi_handle->ops->send_disconnect_roam_params)
  164. return wmi_handle->ops->send_disconnect_roam_params(wmi_handle,
  165. req);
  166. return QDF_STATUS_E_FAILURE;
  167. }
  168. QDF_STATUS
  169. wmi_unified_send_idle_roam_params(wmi_unified_t wmi_handle,
  170. struct wlan_roam_idle_params *req)
  171. {
  172. if (wmi_handle->ops->send_idle_roam_params)
  173. return wmi_handle->ops->send_idle_roam_params(wmi_handle,
  174. req);
  175. return QDF_STATUS_E_FAILURE;
  176. }
  177. QDF_STATUS
  178. wmi_unified_send_roam_preauth_status(wmi_unified_t wmi_handle,
  179. struct wmi_roam_auth_status_params *params)
  180. {
  181. if (wmi_handle->ops->send_roam_preauth_status)
  182. return wmi_handle->ops->send_roam_preauth_status(wmi_handle,
  183. params);
  184. return QDF_STATUS_E_FAILURE;
  185. }
  186. QDF_STATUS wmi_unified_vdev_set_pcl_cmd(wmi_unified_t wmi_handle,
  187. struct set_pcl_cmd_params *params)
  188. {
  189. if (wmi_handle->ops->send_vdev_set_pcl_cmd)
  190. return wmi_handle->ops->send_vdev_set_pcl_cmd(wmi_handle,
  191. params);
  192. return QDF_STATUS_E_FAILURE;
  193. }
  194. #endif /* WLAN_FEATURE_ROAM_OFFLOAD */
  195. #ifdef WLAN_FEATURE_11BE_MLO
  196. QDF_STATUS
  197. wmi_unified_roam_mlo_config_cmd(wmi_unified_t wmi_handle,
  198. struct wlan_roam_mlo_config *req)
  199. {
  200. if (wmi_handle->ops->send_roam_mlo_config)
  201. return wmi_handle->ops->send_roam_mlo_config(wmi_handle,
  202. req);
  203. return QDF_STATUS_E_FAILURE;
  204. }
  205. #endif
  206. QDF_STATUS wmi_unified_roam_scan_offload_mode_cmd(
  207. wmi_unified_t wmi_handle,
  208. struct wlan_roam_scan_offload_params *rso_cfg)
  209. {
  210. if (wmi_handle->ops->send_roam_scan_offload_mode_cmd)
  211. return wmi_handle->ops->send_roam_scan_offload_mode_cmd(
  212. wmi_handle, rso_cfg);
  213. return QDF_STATUS_E_FAILURE;
  214. }
  215. QDF_STATUS wmi_unified_send_roam_scan_offload_ap_cmd(
  216. wmi_unified_t wmi_handle,
  217. struct ap_profile_params *ap_profile)
  218. {
  219. if (wmi_handle->ops->send_roam_scan_offload_ap_profile_cmd)
  220. return wmi_handle->ops->send_roam_scan_offload_ap_profile_cmd(
  221. wmi_handle, ap_profile);
  222. return QDF_STATUS_E_FAILURE;
  223. }
  224. QDF_STATUS wmi_unified_roam_scan_offload_cmd(wmi_unified_t wmi_handle,
  225. uint32_t command,
  226. uint32_t vdev_id)
  227. {
  228. if (wmi_handle->ops->send_roam_scan_offload_cmd)
  229. return wmi_handle->ops->send_roam_scan_offload_cmd(wmi_handle,
  230. command,
  231. vdev_id);
  232. return QDF_STATUS_E_FAILURE;
  233. }
  234. QDF_STATUS
  235. wmi_unified_roam_scan_offload_chan_list_cmd(
  236. wmi_unified_t wmi_handle,
  237. struct wlan_roam_scan_channel_list *rso_ch_info)
  238. {
  239. if (wmi_handle->ops->send_roam_scan_offload_chan_list_cmd)
  240. return wmi_handle->ops->send_roam_scan_offload_chan_list_cmd(
  241. wmi_handle, rso_ch_info);
  242. return QDF_STATUS_E_FAILURE;
  243. }
  244. QDF_STATUS wmi_unified_roam_scan_offload_rssi_change_cmd(
  245. wmi_unified_t wmi_handle,
  246. struct wlan_roam_rssi_change_params *params)
  247. {
  248. if (wmi_handle->ops->send_roam_scan_offload_rssi_change_cmd)
  249. return wmi_handle->ops->send_roam_scan_offload_rssi_change_cmd(
  250. wmi_handle, params);
  251. return QDF_STATUS_E_FAILURE;
  252. }
  253. QDF_STATUS
  254. wmi_unified_set_per_roam_config(wmi_unified_t wmi_handle,
  255. struct wlan_per_roam_config_req *req_buf)
  256. {
  257. if (wmi_handle->ops->send_per_roam_config_cmd)
  258. return wmi_handle->ops->send_per_roam_config_cmd(wmi_handle,
  259. req_buf);
  260. return QDF_STATUS_E_FAILURE;
  261. }
  262. QDF_STATUS wmi_unified_send_limit_off_chan_cmd(
  263. wmi_unified_t wmi_handle,
  264. struct wmi_limit_off_chan_param *limit_off_chan_param)
  265. {
  266. if (wmi_handle->ops->send_limit_off_chan_cmd)
  267. return wmi_handle->ops->send_limit_off_chan_cmd(wmi_handle,
  268. limit_off_chan_param);
  269. return QDF_STATUS_E_FAILURE;
  270. }
  271. #ifdef WLAN_FEATURE_FILS_SK
  272. QDF_STATUS wmi_unified_roam_send_hlp_cmd(wmi_unified_t wmi_handle,
  273. struct hlp_params *req_buf)
  274. {
  275. if (wmi_handle->ops->send_roam_scan_hlp_cmd)
  276. return wmi_handle->ops->send_roam_scan_hlp_cmd(wmi_handle,
  277. req_buf);
  278. return QDF_STATUS_E_FAILURE;
  279. }
  280. #endif /* WLAN_FEATURE_FILS_SK */
  281. QDF_STATUS wmi_unified_send_btm_config(wmi_unified_t wmi_handle,
  282. struct wlan_roam_btm_config *params)
  283. {
  284. if (wmi_handle->ops->send_btm_config)
  285. return wmi_handle->ops->send_btm_config(wmi_handle,
  286. params);
  287. return QDF_STATUS_E_FAILURE;
  288. }
  289. QDF_STATUS wmi_unified_send_bss_load_config(
  290. wmi_unified_t wmi_handle,
  291. struct wlan_roam_bss_load_config *params)
  292. {
  293. if (wmi_handle->ops->send_roam_bss_load_config)
  294. return wmi_handle->ops->send_roam_bss_load_config(wmi_handle,
  295. params);
  296. return QDF_STATUS_E_FAILURE;
  297. }
  298. QDF_STATUS
  299. wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle,
  300. struct wlan_roam_11k_offload_params *params)
  301. {
  302. if (wmi_handle->ops->send_offload_11k_cmd)
  303. return wmi_handle->ops->send_offload_11k_cmd(wmi_handle,
  304. params);
  305. return QDF_STATUS_E_FAILURE;
  306. }
  307. QDF_STATUS wmi_unified_invoke_neighbor_report_cmd(
  308. wmi_unified_t wmi_handle,
  309. struct wmi_invoke_neighbor_report_params *params)
  310. {
  311. if (wmi_handle->ops->send_invoke_neighbor_report_cmd)
  312. return wmi_handle->ops->send_invoke_neighbor_report_cmd(
  313. wmi_handle, params);
  314. return QDF_STATUS_E_FAILURE;
  315. }
  316. QDF_STATUS wmi_unified_get_roam_scan_ch_list(wmi_unified_t wmi_handle,
  317. uint8_t vdev_id)
  318. {
  319. if (wmi_handle->ops->send_roam_scan_ch_list_req_cmd)
  320. return wmi_handle->ops->send_roam_scan_ch_list_req_cmd(
  321. wmi_handle, vdev_id);
  322. return QDF_STATUS_E_FAILURE;
  323. }
  324. #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
  325. QDF_STATUS
  326. wmi_extract_roam_event(wmi_unified_t wmi_handle, uint8_t *event,
  327. uint32_t data_len,
  328. struct roam_offload_roam_event *roam_event)
  329. {
  330. if (wmi_handle->ops->extract_roam_event)
  331. return wmi_handle->ops->extract_roam_event(wmi_handle, event,
  332. data_len,
  333. roam_event);
  334. return QDF_STATUS_E_FAILURE;
  335. }
  336. #endif /* WLAN_FEATURE_HOST_ROAM || WLAN_FEATURE_ROAM_OFFLOAD */
  337. #ifdef WLAN_FEATURE_ROAM_OFFLOAD
  338. QDF_STATUS wmi_unified_set_roam_triggers(wmi_unified_t wmi_handle,
  339. struct wlan_roam_triggers *triggers)
  340. {
  341. if (wmi_handle->ops->send_set_roam_trigger_cmd)
  342. return wmi_handle->ops->send_set_roam_trigger_cmd(wmi_handle,
  343. triggers);
  344. return QDF_STATUS_E_FAILURE;
  345. }
  346. QDF_STATUS wmi_extract_roam_sync_event(wmi_unified_t wmi_handle, void *evt_buf,
  347. uint32_t len,
  348. struct roam_offload_synch_ind **sync_ind)
  349. {
  350. if (wmi_handle->ops->extract_roam_sync_event)
  351. return wmi_handle->ops->extract_roam_sync_event(wmi_handle,
  352. evt_buf,
  353. len,
  354. sync_ind);
  355. return QDF_STATUS_E_FAILURE;
  356. }
  357. QDF_STATUS
  358. wmi_extract_roam_sync_frame_event(wmi_unified_t wmi_handle, void *event,
  359. uint32_t len,
  360. struct roam_synch_frame_ind *frame_ptr)
  361. {
  362. if (wmi_handle->ops->extract_roam_sync_frame_event)
  363. return wmi_handle->ops->extract_roam_sync_frame_event(wmi_handle,
  364. event,
  365. len,
  366. frame_ptr);
  367. return QDF_STATUS_E_FAILURE;
  368. }
  369. QDF_STATUS
  370. wmi_extract_btm_denylist_event(wmi_unified_t wmi_handle,
  371. uint8_t *event,
  372. uint32_t data_len,
  373. struct roam_denylist_event **dst_list)
  374. {
  375. if (wmi_handle->ops->extract_btm_dl_event)
  376. return wmi_handle->ops->extract_btm_dl_event(wmi_handle,
  377. event,
  378. data_len,
  379. dst_list);
  380. return QDF_STATUS_E_FAILURE;
  381. }
  382. QDF_STATUS
  383. wmi_extract_vdev_disconnect_event(wmi_unified_t wmi_handle,
  384. uint8_t *event, uint32_t data_len,
  385. struct vdev_disconnect_event_data *data)
  386. {
  387. if (wmi_handle->ops->extract_vdev_disconnect_event)
  388. return wmi_handle->ops->extract_vdev_disconnect_event(
  389. wmi_handle, event, data_len, data);
  390. return QDF_STATUS_E_FAILURE;
  391. }
  392. QDF_STATUS
  393. wmi_extract_roam_scan_chan_list(wmi_unified_t wmi_handle,
  394. uint8_t *event, uint32_t data_len,
  395. struct cm_roam_scan_ch_resp **data)
  396. {
  397. if (wmi_handle->ops->extract_roam_scan_chan_list)
  398. return wmi_handle->ops->extract_roam_scan_chan_list(
  399. wmi_handle, event, data_len, data);
  400. return QDF_STATUS_E_FAILURE;
  401. }
  402. QDF_STATUS
  403. wmi_unified_extract_roam_btm_response(wmi_unified_t wmi, void *evt_buf,
  404. struct roam_btm_response_data *dst,
  405. uint8_t idx)
  406. {
  407. if (wmi->ops->extract_roam_btm_response_stats)
  408. return wmi->ops->extract_roam_btm_response_stats(wmi, evt_buf,
  409. dst, idx);
  410. return QDF_STATUS_E_FAILURE;
  411. }
  412. QDF_STATUS
  413. wmi_unified_extract_roam_initial_info(wmi_unified_t wmi, void *evt_buf,
  414. struct roam_initial_data *dst,
  415. uint8_t idx)
  416. {
  417. if (wmi->ops->extract_roam_initial_info)
  418. return wmi->ops->extract_roam_initial_info(wmi, evt_buf,
  419. dst, idx);
  420. return QDF_STATUS_E_FAILURE;
  421. }
  422. QDF_STATUS
  423. wmi_unified_extract_roam_msg_info(wmi_unified_t wmi, void *evt_buf,
  424. struct roam_msg_info *dst, uint8_t idx)
  425. {
  426. if (wmi->ops->extract_roam_msg_info)
  427. return wmi->ops->extract_roam_msg_info(wmi, evt_buf, dst, idx);
  428. return QDF_STATUS_E_FAILURE;
  429. }
  430. QDF_STATUS
  431. wmi_unified_extract_roam_extract_frame_info(wmi_unified_t wmi, void *evt_buf,
  432. struct roam_frame_stats *dst,
  433. uint8_t idx, uint8_t num_frames)
  434. {
  435. if (wmi->ops->extract_roam_frame_info)
  436. return wmi->ops->extract_roam_frame_info(wmi, evt_buf,
  437. dst, idx, num_frames);
  438. return QDF_STATUS_E_FAILURE;
  439. }
  440. QDF_STATUS
  441. wmi_extract_roam_stats_event(wmi_unified_t wmi_handle,
  442. uint8_t *event, uint32_t data_len,
  443. struct roam_stats_event **stats_info)
  444. {
  445. if (wmi_handle->ops->extract_roam_stats_event)
  446. return wmi_handle->ops->extract_roam_stats_event(wmi_handle,
  447. event,
  448. data_len,
  449. stats_info);
  450. return QDF_STATUS_E_FAILURE;
  451. }
  452. QDF_STATUS
  453. wmi_extract_auth_offload_event(wmi_unified_t wmi_handle,
  454. uint8_t *event, uint32_t data_len,
  455. struct auth_offload_event *auth_event)
  456. {
  457. if (wmi_handle->ops->extract_auth_offload_event)
  458. return wmi_handle->ops->extract_auth_offload_event(wmi_handle,
  459. event,
  460. data_len,
  461. auth_event);
  462. return QDF_STATUS_E_FAILURE;
  463. }
  464. QDF_STATUS
  465. wmi_extract_roam_pmkid_request(wmi_unified_t wmi_handle,
  466. uint8_t *event, uint32_t data_len,
  467. struct roam_pmkid_req_event **list)
  468. {
  469. if (wmi_handle->ops->extract_roam_pmkid_request)
  470. return wmi_handle->ops->extract_roam_pmkid_request(wmi_handle,
  471. event,
  472. data_len,
  473. list);
  474. return QDF_STATUS_E_FAILURE;
  475. }
  476. QDF_STATUS
  477. wmi_extract_roam_candidate_frame_event(wmi_unified_t wmi_handle, uint8_t *event,
  478. uint32_t len,
  479. struct roam_scan_candidate_frame *data)
  480. {
  481. if (wmi_handle->ops->extract_roam_candidate_frame)
  482. return wmi_handle->ops->extract_roam_candidate_frame(
  483. wmi_handle,
  484. event,
  485. len, data);
  486. return QDF_STATUS_E_FAILURE;
  487. }
  488. #endif