qcacmn: Add wmi support to get firmware roam scan stats
Add wmi layer support to get firmware roam scan statistics which includes
scoring of roam candidates, channels, old and new bssids etc.,
Change-Id: I3a0aafbe66d12eea40e71ceb4c7c3a60b9d6e04f
CRs-Fixed: 2203904
diff --git a/wmi_unified_param.h b/wmi_unified_param.h
index 8443b02..c26eca3 100644
--- a/wmi_unified_param.h
+++ b/wmi_unified_param.h
@@ -5614,6 +5614,7 @@
#endif
wmi_twt_enable_complete_event_id,
wmi_apf_get_vdev_work_memory_resp_event_id,
+ wmi_roam_scan_stats_event_id,
#ifdef OL_ATH_SMART_LOGGING
wmi_debug_fatal_condition_eventid,
@@ -8752,4 +8753,82 @@
#define WMI_HOST_VDEV_FLAGS_TRANSMIT_AP 0x00000002
#define WMI_HOST_VDEV_FLAGS_NON_TRANSMIT_AP 0x00000004
+/* Begin of roam scan stats definitions */
+
+#define WMI_ROAM_SCAN_STATS_MAX 5
+#define WMI_ROAM_SCAN_STATS_CANDIDATES_MAX 4
+#define WMI_ROAM_SCAN_STATS_CHANNELS_MAX 50
+
+/**
+ * struct wmi_roam_scan_stats_req - Structure to hold roam scan stats request
+ * @vdev_id: interface id
+ */
+struct wmi_roam_scan_stats_req {
+ uint32_t vdev_id;
+};
+
+/**
+ * struct wmi_roam_scan_cand - Roam scan candidates
+ * @score: score of AP
+ * @rssi: rssi of the AP
+ * @freq: center frequency
+ * @bssid: bssid of AP
+ */
+struct wmi_roam_scan_cand {
+ uint32_t score;
+ uint32_t rssi;
+ uint32_t freq;
+ uint8_t bssid[QDF_MAC_ADDR_SIZE];
+};
+
+/**
+ * struct wmi_roam_scan_stats_params - Roam scan details
+ * @time_stamp: time at which this roam scan happened
+ * @client_id: id of client which triggered this scan
+ * @num_scan_chans: number of channels that were scanned as part of this scan
+ * @scan_freqs: frequencies of the channels that were scanned
+ * @is_roam_successful: whether a successful roaming happened after this scan
+ * @old_bssid: bssid to which STA is connected just before this scan
+ * @new_bssid: bssid to which STA is roamed to in case of successful roaming
+ * @num_roam_candidates: no.of roam candidates that are being reported
+ * @roam_candidate: roam scan candidate details
+ * @trigger_id: reason for triggering this roam or roam scan
+ * @trigger_value: threshold value related to trigger_id
+ */
+struct wmi_roam_scan_stats_params {
+ uint64_t time_stamp;
+ uint32_t client_id;
+ uint32_t num_scan_chans;
+ uint32_t scan_freqs[WMI_ROAM_SCAN_STATS_CHANNELS_MAX];
+ uint32_t is_roam_successful;
+
+ /* Bssid to which STA is connected when the roam scan is triggered */
+ uint8_t old_bssid[QDF_MAC_ADDR_SIZE];
+
+ /*
+ * Bssid to which STA is connected after roaming. Will be valid only
+ * if is_roam_successful is true.
+ */
+ uint8_t new_bssid[QDF_MAC_ADDR_SIZE];
+
+ /* Number of roam candidates that are being reported in the stats */
+ uint32_t num_roam_candidates;
+ struct wmi_roam_scan_cand cand[WMI_ROAM_SCAN_STATS_CANDIDATES_MAX];
+ uint32_t trigger_id;
+ uint32_t trigger_value;
+};
+
+/**
+ * struct wmi_roam_scan_stats_res - Roam scan stats response from firmware
+ * @num_roam_scan: number of roam scans triggered
+ * @roam_scan: place holder to indicate the array of
+ * wmi_roam_scan_stats_params followed by this structure
+ */
+struct wmi_roam_scan_stats_res {
+ uint32_t num_roam_scans;
+ struct wmi_roam_scan_stats_params roam_scan[0];
+};
+
+/* End of roam scan stats definitions */
+
#endif /* _WMI_UNIFIED_PARAM_H_ */