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