1  /*
2   * Copyright (c) 2016-2020 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 <osdep.h>
19  #include <wmi.h>
20  #include <wmi_unified_priv.h>
21  #include "wmi_unified_bcn_api.h"
22  
23  /**
24   * send_bcn_buf_ll_cmd_tlv() - prepare and send beacon buffer to fw for LL
25   * @wmi_handle: wmi handle
26   * @param: bcn ll cmd parameter
27   *
28   * Return: QDF_STATUS_SUCCESS for success otherwise failure
29   */
send_bcn_buf_ll_cmd_tlv(wmi_unified_t wmi_handle,wmi_bcn_send_from_host_cmd_fixed_param * param)30  static QDF_STATUS send_bcn_buf_ll_cmd_tlv(
31  		wmi_unified_t wmi_handle,
32  		wmi_bcn_send_from_host_cmd_fixed_param *param)
33  {
34  	wmi_bcn_send_from_host_cmd_fixed_param *cmd;
35  	wmi_buf_t wmi_buf;
36  	QDF_STATUS ret;
37  
38  	wmi_buf = wmi_buf_alloc(wmi_handle, sizeof(*cmd));
39  	if (!wmi_buf)
40  		return QDF_STATUS_E_FAILURE;
41  
42  	cmd = (wmi_bcn_send_from_host_cmd_fixed_param *)wmi_buf_data(wmi_buf);
43  	WMITLV_SET_HDR(&cmd->tlv_header,
44  		       WMITLV_TAG_STRUC_wmi_bcn_send_from_host_cmd_fixed_param,
45  		       WMITLV_GET_STRUCT_TLVLEN
46  			       (wmi_bcn_send_from_host_cmd_fixed_param));
47  	cmd->vdev_id = param->vdev_id;
48  	cmd->data_len = param->data_len;
49  	cmd->frame_ctrl = param->frame_ctrl;
50  	cmd->frag_ptr = param->frag_ptr;
51  	cmd->dtim_flag = param->dtim_flag;
52  
53  	wmi_mtrace(WMI_PDEV_SEND_BCN_CMDID, cmd->vdev_id, 0);
54  	ret = wmi_unified_cmd_send(wmi_handle, wmi_buf, sizeof(*cmd),
55  				   WMI_PDEV_SEND_BCN_CMDID);
56  
57  	if (QDF_IS_STATUS_ERROR(ret)) {
58  		wmi_err("Failed to send WMI_PDEV_SEND_BCN_CMDID command");
59  		wmi_buf_free(wmi_buf);
60  	}
61  
62  	return ret;
63  }
64  
wmi_bcn_attach_tlv(wmi_unified_t wmi_handle)65  void wmi_bcn_attach_tlv(wmi_unified_t wmi_handle)
66  {
67  	struct wmi_ops *ops = wmi_handle->ops;
68  
69  	ops->send_bcn_buf_ll_cmd = send_bcn_buf_ll_cmd_tlv;
70  }
71