qcacmn: Add obss detection info extract handler

Add hander to extract obss detection info received
from firmware.

Change-Id: I5fde304915a97d37d6cbe58e7a315e91fbac61b6
CRs-Fixed: 2170184
diff --git a/wmi_unified_api.h b/wmi_unified_api.h
index 44d431b..9aa0c51 100644
--- a/wmi_unified_api.h
+++ b/wmi_unified_api.h
@@ -1911,4 +1911,22 @@
 
 QDF_STATUS wmi_unified_send_obss_detection_cfg_cmd(void *wmi_hdl,
 			struct wmi_obss_detection_cfg_param *cfg);
+
+/**
+ * wmi_unified_extract_obss_detection_info() - WMI function to extract obss
+ *  detection info from FW.
+ * @wmi_hdl: wmi handle
+ * @data: event data from firmware
+ * @info: Pointer to hold obss detection info
+ *
+ * This function is used to extract obss info from firmware.
+ *
+ * Return: QDF_STATUS
+ */
+
+QDF_STATUS wmi_unified_extract_obss_detection_info(void *wmi_hdl,
+						   uint8_t *data,
+						   struct wmi_obss_detect_info
+						   *info);
+
 #endif /* _WMI_UNIFIED_API_H_ */
diff --git a/wmi_unified_param.h b/wmi_unified_param.h
index d0eae3e..a84d9e9 100644
--- a/wmi_unified_param.h
+++ b/wmi_unified_param.h
@@ -8297,4 +8297,33 @@
 	uint32_t obss_ht_20mhz_detect_mode;
 };
 
+/**
+ * enum sap_obss_detection_reason - obss detection event reasons
+ * @OBSS_OFFLOAD_DETECTION_DISABLED: OBSS detection disabled
+ * @OBSS_OFFLOAD_DETECTION_PRESENT: OBSS present detection
+ * @OBSS_OFFLOAD_DETECTION_ABSENT: OBSS absent detection
+ *
+ * Defines different types of reasons for obss detection event from firmware.
+ */
+enum wmi_obss_detection_reason {
+	OBSS_OFFLOAD_DETECTION_DISABLED = 0,
+	OBSS_OFFLOAD_DETECTION_PRESENT  = 1,
+	OBSS_OFFLOAD_DETECTION_ABSENT   = 2,
+};
+
+/**
+ * struct wmi_obss_detect_info - OBSS detection info from firmware
+ * @vdev_id: IDof the vdev to which this info belongs.
+ * @reason: Indicate if present or Absent detection,
+ *          also if not supported offload for this vdev.
+ * @matched_detection_masks: Detection bit map.
+ * @matched_bssid_addr: MAC address valid for only if info is present detection.
+ */
+struct wmi_obss_detect_info {
+	uint32_t vdev_id;
+	enum wmi_obss_detection_reason reason;
+	uint32_t matched_detection_masks;
+	uint8_t matched_bssid_addr[IEEE80211_ADDR_LEN];
+};
+
 #endif /* _WMI_UNIFIED_PARAM_H_ */
diff --git a/wmi_unified_priv.h b/wmi_unified_priv.h
index cc231d1..5f426c7 100644
--- a/wmi_unified_priv.h
+++ b/wmi_unified_priv.h
@@ -1496,6 +1496,8 @@
 			      struct wmi_btm_config *params);
 QDF_STATUS (*send_obss_detection_cfg_cmd)(wmi_unified_t wmi_handle,
 		struct wmi_obss_detection_cfg_param *obss_cfg_param);
+QDF_STATUS (*extract_obss_detection_info)(uint8_t *evt_buf,
+					  struct wmi_obss_detect_info *info);
 };
 
 /* Forward declartion for psoc*/