wmi_unified_ocb_ut.c 15 KB

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