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