diff options
| author | Hanumanth Reddy Pothula <c_hpothu@codeaurora.org> | 2017-01-19 18:47:43 +0530 |
|---|---|---|
| committer | Hanumanth Reddy Pothula <c_hpothu@codeaurora.org> | 2017-02-01 14:30:14 +0530 |
| commit | f4bc44ad81b3753184aa4fa9b2fd88ae89619227 (patch) | |
| tree | 592e4e6ccf35a050565626a199858e9cc617efec | |
| parent | 02b37893180055b8382436662afd55e1a6d5bc5c (diff) | |
qcacmn: Enable HW broadcast filter
Add ini to param to enable/disable HW filter for bc
(except arp) frame
Change-Id: Iccb68e1816c897a63414fff849f3d505ef6361e5
CRs-Fixed: 1113550
| -rw-r--r-- | wmi/inc/wmi_unified_api.h | 14 | ||||
| -rw-r--r-- | wmi/inc/wmi_unified_priv.h | 3 | ||||
| -rw-r--r-- | wmi/inc/wmi_unified_tlv.h | 13 | ||||
| -rw-r--r-- | wmi/src/wmi_unified_api.c | 12 | ||||
| -rw-r--r-- | wmi/src/wmi_unified_tlv.c | 45 |
5 files changed, 87 insertions, 0 deletions
diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index ce83cf445aa4..310132fc04d8 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/wmi/inc/wmi_unified_api.h @@ -842,6 +842,20 @@ QDF_STATUS wmi_unified_enable_arp_ns_offload_cmd(void *wmi_hdl, bool arp_only, uint8_t vdev_id); +/** + * wmi_unified_configure_broadcast_filter_cmd() - Enable/Disable Broadcast + * filter + * when target goes to wow suspend/resume mode + * @wmi_hdl: wmi handle + * @vdev_id: device identifier + * @bc_filter: enable/disable Broadcast filter + * + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS wmi_unified_configure_broadcast_filter_cmd(void *wmi_hdl, + uint8_t vdev_id, bool bc_filter); + QDF_STATUS wmi_unified_set_led_flashing_cmd(void *wmi_hdl, struct flashing_req_params *flashing); diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index 639b42ec91a4..dacb5eb2f1ad 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -179,6 +179,9 @@ QDF_STATUS (*send_vdev_delete_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_vdev_stop_cmd)(wmi_unified_t wmi, uint8_t vdev_id); +QDF_STATUS (*send_enable_broadcast_filter_cmd)(wmi_unified_t wmi_handle, + uint8_t vdev_id, bool enable); + QDF_STATUS (*send_vdev_down_cmd)(wmi_unified_t wmi, uint8_t vdev_id); diff --git a/wmi/inc/wmi_unified_tlv.h b/wmi/inc/wmi_unified_tlv.h index 8d0539070c70..08f888a2ac44 100644 --- a/wmi/inc/wmi_unified_tlv.h +++ b/wmi/inc/wmi_unified_tlv.h @@ -529,6 +529,19 @@ QDF_STATUS send_enable_arp_ns_offload_cmd_tlv(wmi_unified_t wmi_handle, bool arp_only, uint8_t vdev_id); +/** + * send_enable_broadcast_filter_cmd_tlv() - Enable/Disable Broadcast filter + * when target goes to wow suspend/resume mode + * @wma: wmi handle + * @vdev_id: device identifier + * @enable: enable/disable broadcast filter + * + * + * Return: QDF Status + */ +QDF_STATUS send_enable_broadcast_filter_cmd_tlv(wmi_unified_t wmi_handle, + uint8_t vdev_id, bool enable); + QDF_STATUS send_set_led_flashing_cmd_tlv(wmi_unified_t wmi_handle, struct flashing_req_params *flashing); diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index fbe555458a19..44a42aa30310 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -3177,6 +3177,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/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 5a9f3057037c..4d5b40805459 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -10460,6 +10460,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 @@ -12843,6 +12886,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, |
