diff --git a/wmi/inc/wmi_unified_apf_tlv.h b/wmi/inc/wmi_unified_apf_tlv.h new file mode 100644 index 0000000000..2940d4c8c3 --- /dev/null +++ b/wmi/inc/wmi_unified_apf_tlv.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _WMI_UNIFIED_APF_TLV_H_ +#define _WMI_UNIFIED_APF_TLV_H_ + +#include "wmi_unified.h" +#include "wmi_unified_api.h" +#include "wmi_unified_param.h" + +/** + * send_set_active_bpf_mode_cmd_tlv() - configure active BPF mode in FW + * @wmi_handle: the WMI handle + * @vdev_id: the Id of the vdev to apply the configuration to + * @ucast_mode: the active BPF mode to configure for unicast packets + * @mcast_bcast_mode: the active BPF mode to configure for multicast/broadcast + * packets + * + * Return: QDF status + */ +QDF_STATUS +send_set_active_bpf_mode_cmd_tlv(wmi_unified_t wmi_handle, + uint8_t vdev_id, + enum wmi_host_active_bpf_mode ucast_mode, + enum wmi_host_active_bpf_mode + mcast_bcast_mode); +#endif /* _WMI_UNIFIED_APF_TLV_H_ */ diff --git a/wmi/src/wmi_unified_apf_tlv.c b/wmi/src/wmi_unified_apf_tlv.c new file mode 100644 index 0000000000..f5a0670cea --- /dev/null +++ b/wmi/src/wmi_unified_apf_tlv.c @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "wmi_unified_apf_tlv.h" + +QDF_STATUS send_set_active_bpf_mode_cmd_tlv(wmi_unified_t wmi_handle, + uint8_t vdev_id, + enum wmi_host_active_bpf_mode + ucast_mode, + enum wmi_host_active_bpf_mode + mcast_bcast_mode) +{ + const WMITLV_TAG_ID tag_id = + WMITLV_TAG_STRUC_wmi_bpf_set_vdev_active_mode_cmd_fixed_param; + const uint32_t tlv_len = WMITLV_GET_STRUCT_TLVLEN( + wmi_bpf_set_vdev_active_mode_cmd_fixed_param); + QDF_STATUS status; + wmi_bpf_set_vdev_active_mode_cmd_fixed_param *cmd; + wmi_buf_t buf; + + WMI_LOGD("Sending WMI_BPF_SET_VDEV_ACTIVE_MODE_CMDID(%u, %d, %d)", + vdev_id, ucast_mode, mcast_bcast_mode); + + /* allocate command buffer */ + buf = wmi_buf_alloc(wmi_handle, sizeof(*cmd)); + if (!buf) { + WMI_LOGE("%s: wmi_buf_alloc failed", __func__); + return QDF_STATUS_E_NOMEM; + } + + /* set TLV header */ + cmd = (wmi_bpf_set_vdev_active_mode_cmd_fixed_param *)wmi_buf_data(buf); + WMITLV_SET_HDR(&cmd->tlv_header, tag_id, tlv_len); + + /* populate data */ + cmd->vdev_id = vdev_id; + cmd->uc_mode = ucast_mode; + cmd->mcbc_mode = mcast_bcast_mode; + + /* send to FW */ + status = wmi_unified_cmd_send(wmi_handle, buf, sizeof(*cmd), + WMI_BPF_SET_VDEV_ACTIVE_MODE_CMDID); + if (QDF_IS_STATUS_ERROR(status)) { + WMI_LOGE("Failed to send WMI_BPF_SET_VDEV_ACTIVE_MODE_CMDID:%d", + status); + wmi_buf_free(buf); + return status; + } + + WMI_LOGD("Sent WMI_BPF_SET_VDEV_ACTIVE_MODE_CMDID successfully"); + + return QDF_STATUS_SUCCESS; +} + diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 3611c9c877..274ab9649d 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -24,6 +24,7 @@ #include #include #include +#include "wmi_unified_apf_tlv.h" #ifdef CONVERGED_P2P_ENABLE #include "wlan_p2p_public_struct.h" @@ -15535,63 +15536,6 @@ error: return status; } -/** - * send_set_active_bpf_mode_cmd_tlv() - configure active BPF mode in FW - * @wmi_handle: the WMI handle - * @vdev_id: the Id of the vdev to apply the configuration to - * @ucast_mode: the active BPF mode to configure for unicast packets - * @mcast_bcast_mode: the active BPF mode to configure for multicast/broadcast - * packets - * - * Return: QDF status - */ -static QDF_STATUS send_set_active_bpf_mode_cmd_tlv(wmi_unified_t wmi_handle, - uint8_t vdev_id, - enum wmi_host_active_bpf_mode ucast_mode, - enum wmi_host_active_bpf_mode mcast_bcast_mode) -{ - const WMITLV_TAG_ID tag_id = - WMITLV_TAG_STRUC_wmi_bpf_set_vdev_active_mode_cmd_fixed_param; - const uint32_t tlv_len = WMITLV_GET_STRUCT_TLVLEN( - wmi_bpf_set_vdev_active_mode_cmd_fixed_param); - QDF_STATUS status; - wmi_bpf_set_vdev_active_mode_cmd_fixed_param *cmd; - wmi_buf_t buf; - - WMI_LOGD("Sending WMI_BPF_SET_VDEV_ACTIVE_MODE_CMDID(%u, %d, %d)", - vdev_id, ucast_mode, mcast_bcast_mode); - - /* allocate command buffer */ - buf = wmi_buf_alloc(wmi_handle, sizeof(*cmd)); - if (!buf) { - WMI_LOGE("%s: wmi_buf_alloc failed", __func__); - return QDF_STATUS_E_NOMEM; - } - - /* set TLV header */ - cmd = (wmi_bpf_set_vdev_active_mode_cmd_fixed_param *)wmi_buf_data(buf); - WMITLV_SET_HDR(&cmd->tlv_header, tag_id, tlv_len); - - /* populate data */ - cmd->vdev_id = vdev_id; - cmd->uc_mode = ucast_mode; - cmd->mcbc_mode = mcast_bcast_mode; - - /* send to FW */ - status = wmi_unified_cmd_send(wmi_handle, buf, sizeof(*cmd), - WMI_BPF_SET_VDEV_ACTIVE_MODE_CMDID); - if (QDF_IS_STATUS_ERROR(status)) { - WMI_LOGE("Failed to send WMI_BPF_SET_VDEV_ACTIVE_MODE_CMDID:%d", - status); - wmi_buf_free(buf); - return status; - } - - WMI_LOGD("Sent WMI_BPF_SET_VDEV_ACTIVE_MODE_CMDID successfully"); - - return QDF_STATUS_SUCCESS; -} - /** * send_power_dbg_cmd_tlv() - send power debug commands * @wmi_handle: wmi handle