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 */ 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 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