summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHanumanth Reddy Pothula <c_hpothu@codeaurora.org>2017-01-19 18:47:43 +0530
committerHanumanth Reddy Pothula <c_hpothu@codeaurora.org>2017-02-01 14:30:14 +0530
commitf4bc44ad81b3753184aa4fa9b2fd88ae89619227 (patch)
tree592e4e6ccf35a050565626a199858e9cc617efec
parent02b37893180055b8382436662afd55e1a6d5bc5c (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.h14
-rw-r--r--wmi/inc/wmi_unified_priv.h3
-rw-r--r--wmi/inc/wmi_unified_tlv.h13
-rw-r--r--wmi/src/wmi_unified_api.c12
-rw-r--r--wmi/src/wmi_unified_tlv.c45
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,