xref: /wlan-dirver/qca-wifi-host-cmn/wmi/src/wmi_unified_bcn_tlv.c (revision 11f5a63a6cbdda84849a730de22f0a71e635d58c)
1 
2 /*
3  * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 #include <osdep.h>
20 #include <wmi.h>
21 #include <wmi_unified_priv.h>
22 #include "wmi_unified_bcn_api.h"
23 
24 /**
25  * send_bcn_buf_ll_cmd_tlv() - prepare and send beacon buffer to fw for LL
26  * @wmi_handle: wmi handle
27  * @param: bcn ll cmd parameter
28  *
29  * Return: QDF_STATUS_SUCCESS for success otherwise failure
30  */
31 static QDF_STATUS send_bcn_buf_ll_cmd_tlv(
32 		wmi_unified_t wmi_handle,
33 		wmi_bcn_send_from_host_cmd_fixed_param *param)
34 {
35 	wmi_bcn_send_from_host_cmd_fixed_param *cmd;
36 	wmi_buf_t wmi_buf;
37 	QDF_STATUS ret;
38 
39 	wmi_buf = wmi_buf_alloc(wmi_handle, sizeof(*cmd));
40 	if (!wmi_buf)
41 		return QDF_STATUS_E_FAILURE;
42 
43 	cmd = (wmi_bcn_send_from_host_cmd_fixed_param *)wmi_buf_data(wmi_buf);
44 	WMITLV_SET_HDR(&cmd->tlv_header,
45 		       WMITLV_TAG_STRUC_wmi_bcn_send_from_host_cmd_fixed_param,
46 		       WMITLV_GET_STRUCT_TLVLEN
47 			       (wmi_bcn_send_from_host_cmd_fixed_param));
48 	cmd->vdev_id = param->vdev_id;
49 	cmd->data_len = param->data_len;
50 	cmd->frame_ctrl = param->frame_ctrl;
51 	cmd->frag_ptr = param->frag_ptr;
52 	cmd->dtim_flag = param->dtim_flag;
53 
54 	wmi_mtrace(WMI_PDEV_SEND_BCN_CMDID, cmd->vdev_id, 0);
55 	ret = wmi_unified_cmd_send(wmi_handle, wmi_buf, sizeof(*cmd),
56 				   WMI_PDEV_SEND_BCN_CMDID);
57 
58 	if (QDF_IS_STATUS_ERROR(ret)) {
59 		WMI_LOGE("Failed to send WMI_PDEV_SEND_BCN_CMDID command");
60 		wmi_buf_free(wmi_buf);
61 	}
62 
63 	return ret;
64 }
65 
66 void wmi_bcn_attach_tlv(wmi_unified_t wmi_handle)
67 {
68 	struct wmi_ops *ops = wmi_handle->ops;
69 
70 	ops->send_bcn_buf_ll_cmd = send_bcn_buf_ll_cmd_tlv;
71 }
72