wmi_unified_ocb_ut.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524
  1. /*
  2. * Copyright (c) 2018 The Linux Foundation. All rights reserved.
  3. *
  4. * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  5. *
  6. *
  7. * Permission to use, copy, modify, and/or distribute this software for
  8. * any purpose with or without fee is hereby granted, provided that the
  9. * above copyright notice and this permission notice appear in all
  10. * copies.
  11. *
  12. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
  13. * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
  14. * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
  15. * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  16. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  17. * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  18. * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  19. * PERFORMANCE OF THIS SOFTWARE.
  20. */
  21. /*
  22. * This file was originally distributed by Qualcomm Atheros, Inc.
  23. * under proprietary terms before Copyright ownership was assigned
  24. * to the Linux Foundation.
  25. */
  26. #include "wmi_unified_api.h"
  27. #include "wmi.h"
  28. #include "wmi_version.h"
  29. #include "wmi_unified_priv.h"
  30. #include <wlan_defs.h>
  31. #include "target_if.h"
  32. #include "wma.h"
  33. #include "wlan_ocb_ucfg_api.h"
  34. #include "wlan_ocb_main.h"
  35. void wmi_ocb_ut_attach(struct wmi_unified *wmi_handle);
  36. static inline struct wlan_ocb_rx_ops *
  37. target_if_ocb_get_rx_ops(struct wlan_objmgr_psoc *psoc)
  38. {
  39. struct wlan_objmgr_pdev *pdev;
  40. struct ocb_pdev_obj *pdev_obj;
  41. pdev = wlan_objmgr_get_pdev_by_id(psoc, 0,
  42. WLAN_OCB_SB_ID);
  43. pdev_obj = (struct ocb_pdev_obj *)
  44. wlan_objmgr_pdev_get_comp_private_obj(pdev,
  45. WLAN_UMAC_COMP_OCB);
  46. return &pdev_obj->ocb_rxops;
  47. }
  48. /**
  49. * fake_vdev_create_cmd_tlv() - send VDEV create command to fw
  50. * @wmi_handle: wmi handle
  51. * @param: pointer to hold vdev create parameter
  52. * @macaddr: vdev mac address
  53. *
  54. * Return: QDF_STATUS_SUCCESS for success or error code
  55. */
  56. static QDF_STATUS fake_vdev_create_cmd_tlv(wmi_unified_t wmi_handle,
  57. uint8_t macaddr[IEEE80211_ADDR_LEN],
  58. struct vdev_create_params *param)
  59. {
  60. WMI_LOGP("%s : called", __func__);
  61. return QDF_STATUS_SUCCESS;
  62. }
  63. /**
  64. * fake_vdev_delete_cmd_tlv() - send VDEV delete command to fw
  65. * @wmi_handle: wmi handle
  66. * @if_id: vdev id
  67. *
  68. * Return: QDF_STATUS_SUCCESS for success or error code
  69. */
  70. static QDF_STATUS fake_vdev_delete_cmd_tlv(wmi_unified_t wmi_handle,
  71. uint8_t if_id)
  72. {
  73. WMI_LOGP("%s : called", __func__);
  74. return QDF_STATUS_SUCCESS;
  75. }
  76. /**
  77. * fake_ocb_set_utc_time_cmd_tlv() - send the UTC time to the firmware
  78. * @wmi_handle: pointer to the wmi handle
  79. * @utc: pointer to the UTC time struct
  80. *
  81. * Return: 0 on succes
  82. */
  83. static QDF_STATUS fake_ocb_set_utc_time_cmd_tlv(wmi_unified_t wmi_handle,
  84. struct ocb_utc_param *utc)
  85. {
  86. WMI_LOGP("%s : called", __func__);
  87. return QDF_STATUS_SUCCESS;
  88. }
  89. /**
  90. * fake_ocb_get_tsf_timer_cmd_tlv() - get ocb tsf timer val
  91. * @wmi_handle: pointer to the wmi handle
  92. * @request: pointer to the request
  93. *
  94. * Return: 0 on succes
  95. */
  96. static QDF_STATUS fake_ocb_get_tsf_timer_cmd_tlv(wmi_unified_t wmi_handle,
  97. uint8_t vdev_id)
  98. {
  99. QDF_STATUS status;
  100. struct wlan_objmgr_psoc *psoc;
  101. struct wlan_ocb_rx_ops *ocb_rx_ops;
  102. struct ocb_get_tsf_timer_response response;
  103. ol_scn_t scn = (ol_scn_t) wmi_handle->scn_handle;
  104. WMI_LOGP("%s : called", __func__);
  105. psoc = target_if_get_psoc_from_scn_hdl(scn);
  106. if (!psoc) {
  107. WMI_LOGP("null psoc");
  108. return -EINVAL;
  109. }
  110. response.vdev_id = vdev_id;
  111. response.timer_high = 0x1234;
  112. response.timer_low = 0x5678;
  113. ocb_rx_ops = target_if_ocb_get_rx_ops(psoc);
  114. if (ocb_rx_ops->ocb_tsf_timer) {
  115. status = ocb_rx_ops->ocb_tsf_timer(psoc, &response);
  116. if (status != QDF_STATUS_SUCCESS) {
  117. WMI_LOGP("ocb_tsf_timer failed.");
  118. return -EINVAL;
  119. }
  120. } else {
  121. WMI_LOGP("No ocb_tsf_timer callback");
  122. return -EINVAL;
  123. }
  124. return QDF_STATUS_SUCCESS;
  125. }
  126. /**
  127. * fake_dcc_clear_stats_cmd_tlv() - command to clear the DCC stats
  128. * @wmi_handle: pointer to the wmi handle
  129. * @vdev_id: vdev id
  130. * @dcc_stats_bitmap: dcc status bitmap
  131. *
  132. * Return: 0 on succes
  133. */
  134. static QDF_STATUS fake_dcc_clear_stats_cmd_tlv(wmi_unified_t wmi_handle,
  135. uint32_t vdev_id, uint32_t dcc_stats_bitmap)
  136. {
  137. WMI_LOGP("%s : called", __func__);
  138. return QDF_STATUS_SUCCESS;
  139. }
  140. wmi_dcc_ndl_stats_per_channel chan1_info[2] = {
  141. [0] = {.chan_info = 5860,
  142. .tx_power_datarate = 23 | (10 << 8),
  143. .carrier_sense_est_comm_range = 107 | (198 << 13),
  144. .dcc_stats = 78 | (56 << 8) | (345 << 16),
  145. .packet_stats = 1278 | (789 << 14),
  146. .channel_busy_time = 1389,
  147. },
  148. [1] = {.chan_info = 5880,
  149. .tx_power_datarate = 53 | (17 << 8),
  150. .carrier_sense_est_comm_range = 137 | (198 << 13),
  151. .dcc_stats = 78 | (66 << 8) | (245 << 16),
  152. .packet_stats = 1278 | (889 << 14),
  153. .channel_busy_time = 2389,
  154. },
  155. };
  156. /**
  157. * fake_dcc_get_stats_cmd_tlv() - get the DCC channel stats
  158. * @wmi_handle: pointer to the wmi handle
  159. * @get_stats_param: pointer to the dcc stats
  160. *
  161. * Return: 0 on succes
  162. */
  163. static QDF_STATUS fake_dcc_get_stats_cmd_tlv(wmi_unified_t wmi_handle,
  164. struct ocb_dcc_get_stats_param *get_stats_param)
  165. {
  166. QDF_STATUS status;
  167. struct wlan_objmgr_psoc *psoc;
  168. struct wlan_ocb_rx_ops *ocb_rx_ops;
  169. ol_scn_t scn = (ol_scn_t) wmi_handle->scn_handle;
  170. struct ocb_dcc_get_stats_response *response;
  171. WMI_LOGP("%s : called", __func__);
  172. psoc = target_if_get_psoc_from_scn_hdl(scn);
  173. if (!psoc) {
  174. WMI_LOGP("null psoc");
  175. return -EINVAL;
  176. }
  177. response = qdf_mem_malloc(sizeof(*response) + 2 *
  178. sizeof(wmi_dcc_ndl_stats_per_channel));
  179. response->num_channels = 2;
  180. response->channel_stats_array_len = 2 *
  181. sizeof(wmi_dcc_ndl_stats_per_channel);
  182. response->vdev_id = get_stats_param->vdev_id;
  183. response->channel_stats_array = (uint8_t *)response + sizeof(*response);
  184. qdf_mem_copy(response->channel_stats_array,
  185. &chan1_info,
  186. 2 * sizeof(wmi_dcc_ndl_stats_per_channel));
  187. WMI_LOGP("channel1 freq %d, channel2 freq %d", chan1_info[0].chan_info,
  188. chan1_info[1].chan_info);
  189. ocb_rx_ops = target_if_ocb_get_rx_ops(psoc);
  190. if (ocb_rx_ops->ocb_dcc_stats_indicate) {
  191. status = ocb_rx_ops->ocb_dcc_stats_indicate(psoc,
  192. response, true);
  193. if (status != QDF_STATUS_SUCCESS) {
  194. WMI_LOGP("dcc_stats_indicate failed.");
  195. status = -EINVAL;
  196. } else {
  197. status = 0;
  198. }
  199. } else {
  200. WMI_LOGP("No dcc_stats_indicate callback");
  201. status = -EINVAL;
  202. }
  203. qdf_mem_free(response);
  204. return QDF_STATUS_SUCCESS;
  205. }
  206. /**
  207. * fake_dcc_update_ndl_cmd_tlv() - command to update the NDL data
  208. * @wmi_handle: pointer to the wmi handle
  209. * @update_ndl_param: pointer to the request parameters
  210. *
  211. * Return: 0 on success
  212. */
  213. static QDF_STATUS fake_dcc_update_ndl_cmd_tlv(wmi_unified_t wmi_handle,
  214. struct ocb_dcc_update_ndl_param *update_ndl_param)
  215. {
  216. QDF_STATUS status;
  217. struct wlan_objmgr_psoc *psoc;
  218. struct wlan_ocb_rx_ops *ocb_rx_ops;
  219. ol_scn_t scn = (ol_scn_t) wmi_handle->scn_handle;
  220. struct ocb_dcc_update_ndl_response *resp;
  221. WMI_LOGP("%s : called", __func__);
  222. /* Allocate and populate the response */
  223. resp = qdf_mem_malloc(sizeof(*resp));
  224. if (!resp) {
  225. WMI_LOGP("%s:Error allocating memory for the response.",
  226. __func__);
  227. return -ENOMEM;
  228. }
  229. resp->vdev_id = update_ndl_param->vdev_id;
  230. resp->status = 0;
  231. psoc = target_if_get_psoc_from_scn_hdl(scn);
  232. if (!psoc) {
  233. WMI_LOGP("null psoc");
  234. return -EINVAL;
  235. }
  236. ocb_rx_ops = target_if_ocb_get_rx_ops(psoc);
  237. if (ocb_rx_ops->ocb_dcc_ndl_update) {
  238. status = ocb_rx_ops->ocb_dcc_ndl_update(psoc, resp);
  239. if (status != QDF_STATUS_SUCCESS) {
  240. WMI_LOGP("dcc_ndl_update failed.");
  241. status = -EINVAL;
  242. } else {
  243. status = 0;
  244. }
  245. } else {
  246. WMI_LOGP("No dcc_ndl_update callback");
  247. status = -EINVAL;
  248. }
  249. qdf_mem_free(resp);
  250. return QDF_STATUS_SUCCESS;
  251. }
  252. /**
  253. * fake_ocb_set_config_cmd_tlv() - send the OCB config to the FW
  254. * @wmi_handle: pointer to the wmi handle
  255. * @config: the OCB configuration
  256. *
  257. * Return: 0 on success
  258. */
  259. static QDF_STATUS fake_ocb_set_config_cmd_tlv(wmi_unified_t wmi_handle,
  260. struct ocb_config *config)
  261. {
  262. u32 i;
  263. QDF_STATUS status;
  264. struct wlan_objmgr_psoc *psoc;
  265. struct wlan_ocb_rx_ops *ocb_rx_ops;
  266. ol_scn_t scn = (ol_scn_t) wmi_handle->scn_handle;
  267. WMI_LOGP("%s : called", __func__);
  268. WMI_LOGI("%s: vdev_id=%d, channel_count=%d, schedule_size=%d, flag=%x",
  269. __func__, config->vdev_id, config->channel_count,
  270. config->schedule_size, config->flags);
  271. for (i = 0; i < config->channel_count; i++) {
  272. WMI_LOGI("%s: channel info for channel %d"
  273. " chan_freq=%d, bandwidth=%d, " QDF_MAC_ADDRESS_STR
  274. " max_pwr=%d, min_pwr=%d, reg_pwr=%d, antenna_max=%d, "
  275. "flags=%d", __func__, i, config->channels[i].chan_freq,
  276. config->channels[i].bandwidth,
  277. QDF_MAC_ADDR_ARRAY(
  278. config->channels[i].mac_address.bytes),
  279. config->channels[i].max_pwr,
  280. config->channels[i].min_pwr,
  281. config->channels[i].reg_pwr,
  282. config->channels[i].antenna_max,
  283. config->channels[i].flags);
  284. }
  285. for (i = 0; i < config->schedule_size; i++) {
  286. WMI_LOGI("%s: schedule info for channel %d: "
  287. "chan_fre=%d, total_duration=%d, guard_intreval=%d",
  288. __func__, i, config->schedule[i].chan_freq,
  289. config->schedule[i].total_duration,
  290. config->schedule[i].guard_interval);
  291. }
  292. psoc = target_if_get_psoc_from_scn_hdl(scn);
  293. if (!psoc) {
  294. WMI_LOGP("null psoc");
  295. return -EINVAL;
  296. }
  297. ocb_rx_ops = target_if_ocb_get_rx_ops(psoc);
  298. if (ocb_rx_ops->ocb_set_config_status) {
  299. status = ocb_rx_ops->ocb_set_config_status(psoc, 0);
  300. if (status != QDF_STATUS_SUCCESS) {
  301. WMI_LOGP("ocb_set_config_status failed.");
  302. return -EINVAL;
  303. }
  304. } else {
  305. WMI_LOGP("No ocb_set_config_status callback");
  306. return -EINVAL;
  307. }
  308. return QDF_STATUS_SUCCESS;
  309. }
  310. /**
  311. * fake_ocb_stop_timing_advert_cmd_tlv() - stop sending the
  312. * timing advertisement frames on a channel
  313. * @wmi_handle: pointer to the wmi handle
  314. * @timing_advert: pointer to the timing advertisement struct
  315. *
  316. * Return: 0 on succes
  317. */
  318. static QDF_STATUS fake_ocb_stop_timing_advert_cmd_tlv(wmi_unified_t wmi_handle,
  319. struct ocb_timing_advert_param *timing_advert)
  320. {
  321. WMI_LOGP("%s : called", __func__);
  322. return QDF_STATUS_SUCCESS;
  323. }
  324. /**
  325. * fake_ocb_start_timing_advert_cmd_tlv() - start sending the
  326. * timing advertisement frames on a channel
  327. * @wmi_handle: pointer to the wmi handle
  328. * @timing_advert: pointer to the timing advertisement struct
  329. *
  330. * Return: 0 on succes
  331. */
  332. static QDF_STATUS
  333. fake_ocb_start_timing_advert_cmd_tlv(wmi_unified_t wmi_handle,
  334. struct ocb_timing_advert_param *timing_advert)
  335. {
  336. WMI_LOGP("%s : called", __func__);
  337. return QDF_STATUS_SUCCESS;
  338. }
  339. /**
  340. * fake_peer_create_cmd_tlv() - send peer create command to fw
  341. * @wmi: wmi handle
  342. * @peer_addr: peer mac address
  343. * @peer_type: peer type
  344. * @vdev_id: vdev id
  345. *
  346. * Return: QDF_STATUS_SUCCESS for success or error code
  347. */
  348. static QDF_STATUS fake_peer_create_cmd_tlv(wmi_unified_t wmi,
  349. struct peer_create_params *param)
  350. {
  351. WMI_LOGP("%s : called", __func__);
  352. return QDF_STATUS_SUCCESS;
  353. }
  354. /**
  355. * fake_peer_delete_cmd_tlv() - send PEER delete command to fw
  356. * @wmi: wmi handle
  357. * @peer_addr: peer mac addr
  358. * @vdev_id: vdev id
  359. *
  360. * Return: QDF_STATUS_SUCCESS for success or error code
  361. */
  362. static QDF_STATUS fake_peer_delete_cmd_tlv(wmi_unified_t wmi,
  363. uint8_t peer_addr[IEEE80211_ADDR_LEN],
  364. uint8_t vdev_id)
  365. {
  366. WMI_LOGP("%s : called", __func__);
  367. return QDF_STATUS_SUCCESS;
  368. }
  369. /**
  370. * fake_vdev_start_cmd_tlv() - send vdev start request to fw
  371. * @wmi_handle: wmi handle
  372. * @req: vdev start params
  373. *
  374. * Return: QDF status
  375. */
  376. static QDF_STATUS fake_vdev_start_cmd_tlv(wmi_unified_t wmi_handle,
  377. struct vdev_start_params *req)
  378. {
  379. tp_wma_handle wma = (tp_wma_handle) wmi_handle->scn_handle;
  380. WMI_LOGP("%s : called", __func__);
  381. WMI_LOGI("%s: vdev_id %d freq %d chanmode %d ch_info is_dfs %d "
  382. "beacon interval %d dtim %d center_chan %d center_freq2 %d "
  383. "max_txpow: 0x%x "
  384. "Tx SS %d, Rx SS %d, ldpc_rx: %d, cac %d, regd %d, HE ops: %d",
  385. __func__, (int)req->vdev_id, req->chan_freq, req->chan_mode,
  386. (int)req->is_dfs, req->beacon_intval, req->dtim_period,
  387. req->band_center_freq1, req->band_center_freq2,
  388. req->max_txpow,
  389. req->preferred_tx_streams, req->preferred_rx_streams,
  390. (int)req->ldpc_rx_enabled, req->cac_duration_ms,
  391. req->regdomain, req->he_ops);
  392. wma_remove_vdev_req(wma, req->vdev_id,
  393. WMA_TARGET_REQ_TYPE_VDEV_START);
  394. wma_vdev_set_mlme_state(wma, req->vdev_id,
  395. WLAN_VDEV_S_RUN);
  396. ucfg_ocb_config_channel(wma->pdev);
  397. return QDF_STATUS_SUCCESS;
  398. }
  399. /**
  400. * fake_vdev_down_cmd_tlv() - send vdev down command to fw
  401. * @wmi: wmi handle
  402. * @vdev_id: vdev id
  403. *
  404. * Return: QDF_STATUS_SUCCESS for success or error code
  405. */
  406. static QDF_STATUS fake_vdev_down_cmd_tlv(wmi_unified_t wmi, uint8_t vdev_id)
  407. {
  408. WMI_LOGP("%s : called", __func__);
  409. return QDF_STATUS_SUCCESS;
  410. }
  411. /**
  412. * fake_vdev_set_param_cmd_tlv() - WMI vdev set parameter function
  413. * @param wmi_handle : handle to WMI.
  414. * @param macaddr : MAC address
  415. * @param param : pointer to hold vdev set parameter
  416. *
  417. * Return: 0 on success and -ve on failure.
  418. */
  419. static QDF_STATUS fake_vdev_set_param_cmd_tlv(wmi_unified_t wmi_handle,
  420. struct vdev_set_params *param)
  421. {
  422. WMI_LOGP("%s : called", __func__);
  423. return QDF_STATUS_SUCCESS;
  424. }
  425. /**
  426. * fake_set_enable_disable_mcc_adaptive_scheduler_cmd_tlv() -
  427. * faked API to enable/disable mcc scheduler
  428. * @wmi_handle: wmi handle
  429. * @mcc_adaptive_scheduler: enable/disable
  430. *
  431. * This function enable/disable mcc adaptive scheduler in fw.
  432. *
  433. * Return: QDF_STATUS_SUCCESS for success or error code
  434. */
  435. static QDF_STATUS fake_set_enable_disable_mcc_adaptive_scheduler_cmd_tlv(
  436. wmi_unified_t wmi_handle, uint32_t mcc_adaptive_scheduler,
  437. uint32_t pdev_id)
  438. {
  439. WMI_LOGP("%s : called", __func__);
  440. return QDF_STATUS_SUCCESS;
  441. }
  442. /*
  443. * fake_process_set_ie_info_cmd_tlv() - Function to send IE info to firmware
  444. * @wmi_handle: Pointer to WMi handle
  445. * @ie_data: Pointer for ie data
  446. *
  447. * This function sends IE information to firmware
  448. *
  449. * Return: QDF_STATUS_SUCCESS for success otherwise failure
  450. *
  451. */
  452. static QDF_STATUS fake_process_set_ie_info_cmd_tlv(wmi_unified_t wmi_handle,
  453. struct vdev_ie_info_param *ie_info)
  454. {
  455. WMI_LOGP("%s : called", __func__);
  456. return QDF_STATUS_SUCCESS;
  457. }
  458. void wmi_ocb_ut_attach(struct wmi_unified *wmi_handle)
  459. {
  460. struct wmi_ops *wmi_ops;
  461. if (!wmi_handle) {
  462. WMI_LOGP("%s: null wmi handle", __func__);
  463. return;
  464. }
  465. wmi_ops = wmi_handle->ops;
  466. wmi_ops->send_vdev_create_cmd = fake_vdev_create_cmd_tlv;
  467. wmi_ops->send_vdev_delete_cmd = fake_vdev_delete_cmd_tlv;
  468. wmi_ops->send_vdev_down_cmd = fake_vdev_down_cmd_tlv;
  469. wmi_ops->send_vdev_start_cmd = fake_vdev_start_cmd_tlv;
  470. wmi_ops->send_peer_create_cmd = fake_peer_create_cmd_tlv;
  471. wmi_ops->send_peer_delete_cmd = fake_peer_delete_cmd_tlv;
  472. wmi_ops->send_vdev_set_param_cmd = fake_vdev_set_param_cmd_tlv;
  473. wmi_ops->send_ocb_set_utc_time_cmd = fake_ocb_set_utc_time_cmd_tlv;
  474. wmi_ops->send_ocb_get_tsf_timer_cmd = fake_ocb_get_tsf_timer_cmd_tlv;
  475. wmi_ops->send_dcc_clear_stats_cmd = fake_dcc_clear_stats_cmd_tlv;
  476. wmi_ops->send_dcc_get_stats_cmd = fake_dcc_get_stats_cmd_tlv;
  477. wmi_ops->send_dcc_update_ndl_cmd = fake_dcc_update_ndl_cmd_tlv;
  478. wmi_ops->send_ocb_set_config_cmd = fake_ocb_set_config_cmd_tlv;
  479. wmi_ops->send_ocb_stop_timing_advert_cmd =
  480. fake_ocb_stop_timing_advert_cmd_tlv;
  481. wmi_ops->send_ocb_start_timing_advert_cmd =
  482. fake_ocb_start_timing_advert_cmd_tlv;
  483. wmi_ops->send_set_enable_disable_mcc_adaptive_scheduler_cmd =
  484. fake_set_enable_disable_mcc_adaptive_scheduler_cmd_tlv;
  485. wmi_ops->send_process_set_ie_info_cmd =
  486. fake_process_set_ie_info_cmd_tlv;
  487. }