Kaynağa Gözat

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
Hanumanth Reddy Pothula 8 yıl önce
ebeveyn
işleme
d51739fbfc

+ 14 - 0
wmi/inc/wmi_unified_api.h

@@ -837,6 +837,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);
 

+ 3 - 0
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);
 

+ 13 - 0
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);
 

+ 12 - 0
wmi/src/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

+ 45 - 0
wmi/src/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,