qcacmn: Drop Action frame in FW config by host

Propagation from qcacld-2.0 to qcacmn.

Several Action frame categories are not processed in host and they
are not forwarded to supplicant either, but they are dropped in host.
These unprocessed action frames are forwarded to host by FW and
wake up host unnecessarily which leads to battery drain. With this fix,
host conveys FW the disallowed action frames list at HDD startup
so that the remaining frames can be dropped in FW itself thereafter
when under WoW mode.

Change-Id: I40b49d42df94085784c8f1d8321de0ee61473ae0
CRs-Fixed: 999114
diff --git a/wmi_unified_api.h b/wmi_unified_api.h
index 23da9c7..451544f 100644
--- a/wmi_unified_api.h
+++ b/wmi_unified_api.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2017 The Linux Foundation. All rights reserved.
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
@@ -646,8 +646,12 @@
 
 QDF_STATUS wmi_unified_egap_conf_params_cmd(void *wmi_hdl,
 		wmi_ap_ps_egap_param_cmd_fixed_param *egap_params);
+
 #endif
 
+QDF_STATUS wmi_unified_action_frame_patterns_cmd(void *wmi_hdl,
+			struct action_wakeup_set_param *action_params);
+
 QDF_STATUS wmi_unified_fw_profiling_data_cmd(void *wmi_hdl,
 			uint32_t cmd, uint32_t value1, uint32_t value2);
 
diff --git a/wmi_unified_param.h b/wmi_unified_param.h
index dfded1b..e378ae5 100644
--- a/wmi_unified_param.h
+++ b/wmi_unified_param.h
@@ -7084,4 +7084,20 @@
 	WMI_HOST_CALIBRATION_NOT_OK,
 };
 
+#define WMI_SUPPORTED_ACTION_CATEGORY           256
+#define WMI_SUPPORTED_ACTION_CATEGORY_ELE_LIST  (WMI_SUPPORTED_ACTION_CATEGORY/32)
+
+/**
+ * struct action_wakeup_set_param - action wakeup set params
+ * @vdev_id: virtual device id
+ * @operation: 0 reset to fw default, 1 set the bits,
+ *    2 add the setting bits, 3 delete the setting bits
+ * @action_category_map: bit mapping.
+ */
+struct action_wakeup_set_param {
+	uint32_t vdev_id;
+	uint32_t operation;
+	uint32_t action_category_map[WMI_SUPPORTED_ACTION_CATEGORY_ELE_LIST];
+};
+
 #endif /* _WMI_UNIFIED_PARAM_H_ */
diff --git a/wmi_unified_priv.h b/wmi_unified_priv.h
index ca93c7c..feb501f 100644
--- a/wmi_unified_priv.h
+++ b/wmi_unified_priv.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2017 The Linux Foundation. All rights reserved.
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
@@ -514,6 +514,9 @@
 				   WMI_CMD_ID cmd_id, uint8_t user_triggered);
 #endif
 
+QDF_STATUS (*send_action_frame_patterns_cmd)(wmi_unified_t wmi_handle,
+			struct action_wakeup_set_param *action_params);
+
 QDF_STATUS (*send_fw_profiling_cmd)(wmi_unified_t wmi_handle,
 			uint32_t cmd, uint32_t value1, uint32_t value2);
 
diff --git a/wmi_unified_tlv.h b/wmi_unified_tlv.h
index 5606315..8b2f7b2 100644
--- a/wmi_unified_tlv.h
+++ b/wmi_unified_tlv.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
@@ -357,6 +357,9 @@
 QDF_STATUS send_egap_conf_params_cmd_tlv(wmi_unified_t wmi_handle,
 				     wmi_ap_ps_egap_param_cmd_fixed_param *egap_params);
 
+QDF_STATUS send_action_frame_patterns_cmd_tlv(wmi_unified_t wmi_handle,
+		struct action_wakeup_set_param *action_params);
+
 QDF_STATUS send_fw_profiling_cmd_tlv(wmi_unified_t wmi_handle,
 			uint32_t cmd, uint32_t value1, uint32_t value2);