diff --git a/wmi_unified_api.c b/wmi_unified_api.c index 52824acffa..ee85918b30 100644 --- a/wmi_unified_api.c +++ b/wmi_unified_api.c @@ -3217,6 +3217,18 @@ QDF_STATUS wmi_unified_enable_arp_ns_offload_cmd(void *wmi_hdl, return QDF_STATUS_E_FAILURE; } +QDF_STATUS wmi_unified_configure_broadcast_filter_cmd(void *wmi_hdl, + uint8_t vdev_id, bool bc_filter) +{ + wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; + + if (wmi_handle->ops->send_enable_broadcast_filter_cmd) + return wmi_handle->ops->send_enable_broadcast_filter_cmd( + wmi_handle, vdev_id, bc_filter); + + return QDF_STATUS_E_FAILURE; +} + /** * wmi_unified_set_led_flashing_cmd() - set led flashing in fw * @wmi_hdl: wmi handle diff --git a/wmi_unified_tlv.c b/wmi_unified_tlv.c index 3aee76e849..c533c672f7 100644 --- a/wmi_unified_tlv.c +++ b/wmi_unified_tlv.c @@ -10794,6 +10794,49 @@ QDF_STATUS send_enable_arp_ns_offload_cmd_tlv(wmi_unified_t wmi_handle, return QDF_STATUS_SUCCESS; } +QDF_STATUS send_enable_broadcast_filter_cmd_tlv(wmi_unified_t wmi_handle, + uint8_t vdev_id, bool enable) +{ + int32_t res; + wmi_hw_data_filter_cmd_fixed_param *cmd; + A_UINT8 *buf_ptr; + wmi_buf_t buf; + int32_t len; + + /* + * TLV place holder size for array of ARP tuples + */ + len = sizeof(wmi_hw_data_filter_cmd_fixed_param); + + buf = wmi_buf_alloc(wmi_handle, len); + if (!buf) { + WMI_LOGE("%s: wmi_buf_alloc failed", __func__); + return QDF_STATUS_E_NOMEM; + } + + buf_ptr = (A_UINT8 *) wmi_buf_data(buf); + cmd = (wmi_hw_data_filter_cmd_fixed_param *) buf_ptr; + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_hw_data_filter_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN + (wmi_hw_data_filter_cmd_fixed_param)); + cmd->vdev_id = vdev_id; + cmd->enable = enable; + cmd->hw_filter_bitmap = WMI_HW_DATA_FILTER_DROP_NON_ARP_BC; + + WMI_LOGD("HW Broadcast Filter vdev_id: %d", cmd->vdev_id); + + res = wmi_unified_cmd_send(wmi_handle, buf, len, + WMI_HW_DATA_FILTER_CMDID); + if (res) { + WMI_LOGE("Failed to enable ARP NDP/NSffload"); + wmi_buf_free(buf); + return QDF_STATUS_E_FAILURE; + } + + return QDF_STATUS_SUCCESS; +} + /** * send_set_ssid_hotlist_cmd_tlv() - Handle an SSID hotlist set request * @wmi_handle: wmi handle @@ -13519,6 +13562,8 @@ struct wmi_ops tlv_ops = { send_pdev_set_dual_mac_config_cmd_tlv, .send_enable_arp_ns_offload_cmd = send_enable_arp_ns_offload_cmd_tlv, + .send_enable_broadcast_filter_cmd = + send_enable_broadcast_filter_cmd_tlv, .send_app_type1_params_in_fw_cmd = send_app_type1_params_in_fw_cmd_tlv, .send_set_ssid_hotlist_cmd = send_set_ssid_hotlist_cmd_tlv,