wlan: WDA/WDI Implementation for Extended Scan
WDA/WDI enhancements to support Extended scan feature.
CRs-fixed: 677849
Change-Id: I5e0b2d207f71078ade24cb8cc6d9229a3f9e6ac2
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h
index d7d6dd1..f354107 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h
@@ -405,6 +405,14 @@
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
WDI_LL_STATS_RESULTS_IND,
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ WDI_EXTSCAN_PROGRESS_IND,
+ WDI_EXTSCAN_SCAN_AVAILABLE_IND,
+ WDI_EXTSCAN_SCAN_RESULT_IND,
+ WDI_EXTSCAN_GET_CAPABILITIES_IND,
+ WDI_EXTSCAN_BSSID_HOTLIST_RESULT_IND,
+ WDI_EXTSCAN_SIGN_RSSI_RESULT_IND,
+#endif
WDI_MAX_IND
}WDI_LowLevelIndEnumType;
@@ -889,6 +897,10 @@
/*Link Layer Statistics from FW*/
void *pLinkLayerStatsResults;
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ /*EXTSCAN Results from FW*/
+ void *pEXTScanIndData;
+#endif
} wdiIndicationData;
}WDI_LowLevelIndType;
@@ -5614,6 +5626,155 @@
void* pUserData;
} WDI_DelPeriodicTxPtrnParamsType;
+#ifdef WLAN_FEATURE_EXTSCAN
+
+#define WDI_WLAN_EXTSCAN_MAX_CHANNELS 16
+#define WDI_WLAN_EXTSCAN_MAX_BUCKETS 16
+#define WDI_WLAN_EXTSCAN_MAX_HOTLIST_APS 128
+#define WDI_WLAN_EXTSCAN_MAX_SIGNIFICANT_CHANGE_APS 64
+
+typedef enum
+{
+ WDI_WIFI_BAND_UNSPECIFIED,
+ WDI_WIFI_BAND_BG = 1, // 2.4 GHz
+ WDI_WIFI_BAND_A = 2, // 5 GHz without DFS
+ WDI_WIFI_BAND_ABG = 3, // 2.4 GHz + 5 GHz; no DFS
+ WDI_WIFI_BAND_A_DFS = 4, // 5 GHz DFS only
+ WDI_WIFI_BAND_A_WITH_DFS = 6, // 5 GHz with DFS
+ WDI_WIFI_BAND_ABG_WITH_DFS = 7, // 2.4 GHz + 5 GHz with DFS
+
+ /* Keep it last */
+ WDI_WIFI_BAND_MAX
+} WDI_WifiBand;
+
+typedef struct
+{
+ wpt_uint32 channel; // frequency
+ wpt_uint32 dwellTimeMs; // dwell time hint
+ wpt_uint8 passive; // 0 => active,
+ // 1 => passive scan; ignored for DFS
+ wpt_uint8 chnlClass;
+} WDI_WifiScanChannelSpec;
+
+typedef struct
+{
+ wpt_uint8 bucket; // bucket index, 0 based
+ WDI_WifiBand band; // when UNSPECIFIED, use channel list
+
+ /*
+ * desired period, in millisecond; if this is too
+ * low, the firmware should choose to generate results as fast as
+ * it can instead of failing the command byte
+ */
+ wpt_uint32 period;
+
+ /*
+ * 0 => normal reporting (reporting rssi history
+ * only, when rssi history buffer is % full)
+ * 1 => same as 0 + report a scan completion event after scanning
+ * this bucket
+ * 2 => same as 1 + forward scan results (beacons/probe responses + IEs)
+ * in real time to HAL
+ */
+ wpt_uint8 reportEvents;
+
+ wpt_uint8 numChannels;
+
+ /*
+ * channels to scan; these may include DFS channels
+ */
+ WDI_WifiScanChannelSpec channels[WDI_WLAN_EXTSCAN_MAX_CHANNELS];
+} WDI_WifiScanBucketSpec;
+
+typedef struct
+{
+ wpt_uint32 requestId;
+ wpt_uint8 sessionId;
+ wpt_uint32 basePeriod; // base timer period
+ wpt_uint32 maxAPperScan;
+
+ /* in %, when buffer is this much full, wake up host */
+ wpt_uint32 reportThreshold;
+
+ wpt_uint8 numBuckets;
+ WDI_WifiScanBucketSpec buckets[WDI_WLAN_EXTSCAN_MAX_BUCKETS];
+} WDI_EXTScanStartReqParams;
+
+typedef struct
+{
+ wpt_uint32 requestId;
+ wpt_uint8 sessionId;
+} WDI_EXTScanStopReqParams;
+
+typedef struct
+{
+ wpt_uint32 requestId;
+ wpt_uint8 sessionId;
+
+ /*
+ * 1 return cached results and flush it
+ * 0 return cached results and do not flush
+ */
+ wpt_boolean flush;
+} WDI_EXTScanGetCachedResultsReqParams;
+
+typedef struct
+{
+ wpt_uint32 requestId;
+ wpt_uint8 sessionId;
+} WDI_EXTScanGetCapabilitiesReqParams;
+
+typedef struct
+{
+ wpt_uint8 bssid[6]; /* BSSID */
+ wpt_int32 low; // low threshold
+ wpt_int32 high; // high threshold
+ wpt_uint32 channel; // channel hint
+} WDI_APThresholdParam;
+
+typedef struct
+{
+ wpt_int32 requestId;
+ wpt_int8 sessionId; // session Id mapped to vdev_id
+
+ wpt_int32 numAp; // number of hotlist APs
+ WDI_APThresholdParam ap[WDI_WLAN_EXTSCAN_MAX_HOTLIST_APS]; // hotlist APs
+} WDI_EXTScanSetBSSIDHotlistReqParams;
+
+typedef struct
+{
+ wpt_uint32 requestId;
+ wpt_uint8 sessionId;
+} WDI_EXTScanResetBSSIDHotlistReqParams;
+
+
+typedef struct
+{
+ wpt_int32 requestId;
+ wpt_int8 sessionId; // session Id mapped to vdev_id
+
+ /* number of samples for averaging RSSI */
+ wpt_int32 rssiSampleSize;
+
+ /* number of missed samples to confirm AP loss */
+ wpt_int32 lostApSampleSize;
+
+ /* number of APs breaching threshold required for firmware
+ * to generate event
+ */
+ wpt_int32 minBreaching;
+
+ wpt_int32 numAp; // number of hotlist APs
+ WDI_APThresholdParam ap[WDI_WLAN_EXTSCAN_MAX_HOTLIST_APS]; // hotlist APs
+} WDI_EXTScanSetSignfRSSIChangeReqParams;
+
+typedef struct
+{
+ wpt_uint32 requestId;
+ wpt_uint8 sessionId;
+} WDI_EXTScanResetSignfRSSIChangeReqParams;
+#endif /* WLAN_FEATURE_EXTSCAN */
+
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
typedef struct
{
@@ -7498,6 +7659,24 @@
typedef void (*WDI_GetBcnMissRateCb)(wpt_uint8 status, wpt_uint32 bcnMissRate,
void* pUserData);
+#ifdef WLAN_FEATURE_EXTSCAN
+typedef void (*WDI_EXTScanStartRspCb)(void *pEventData,
+ void *pUserData);
+typedef void (*WDI_EXTScanStopRspCb)(void *pEventData,
+ void *pUserData);
+typedef void (*WDI_EXTScanGetCachedResultsRspCb)(void *pEventData,
+ void *pUserData);
+typedef void (*WDI_EXTScanGetCapabilitiesRspCb)(void *pEventData,
+ void *pUserData);
+typedef void (*WDI_EXTScanSetBSSIDHotlistRspCb)(void *pEventData,
+ void *pUserData);
+typedef void (*WDI_EXTScanResetBSSIDHotlistRspCb)(void *pEventData,
+ void *pUserData);
+typedef void (*WDI_EXTScanSetSignfRSSIChangeRspCb)(void *pEventData,
+ void *pUserData);
+typedef void (*WDI_EXTScanResetSignfRSSIChangeRspCb)(void *pEventData,
+ void *pUserData);
+#endif /* WLAN_FEATURE_EXTSCAN */
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
typedef void (*WDI_LLStatsSetRspCb)(void *pEventData,
@@ -10588,6 +10767,146 @@
);
#endif /* FEATURE_WLAN_LPHB */
+#ifdef WLAN_FEATURE_EXTSCAN
+/**
+ @brief WDI_EXTScanStartReq
+ This API is called to send EXTScan start request to FW
+
+ @param pwdiEXTScanStartReqParams : pointer to the request params.
+ wdiEXTScanStartRspCb : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanStartReq
+(
+ WDI_EXTScanStartReqParams* pwdiEXTScanStartReqParams,
+ WDI_EXTScanStartRspCb wdiEXTScanStartRspCb,
+ void* pUserData
+);
+
+/**
+ @brief WDI_EXTScanStopReq
+ This API is called to stop the EXTScan operations in the FW
+
+ @param pwdiEXTScanStopReqParams : pointer to the request params.
+ wdiEXTScanStopRspCb : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanStopReq
+(
+ WDI_EXTScanStopReqParams* pwdiEXTScanStopReqParams,
+ WDI_EXTScanStopRspCb wdiEXTScanStopRspCb,
+ void* pUserData
+);
+
+/**
+ @brief WDI_EXTScanGetCachedResultsReq
+ This API is called to send get link layer stats request in FW
+
+ @param pwdiEXTScanGetCachedResultsReqParams : pointer to the request params.
+ wdiEXTScanGetCachedResultsRspCb : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanGetCachedResultsReq
+(
+ WDI_EXTScanGetCachedResultsReqParams* pwdiEXTScanGetCachedResultsReqParams,
+ WDI_EXTScanGetCachedResultsRspCb wdiEXTScanGetCachedResultsRspCb,
+ void* pUserData
+);
+
+/**
+ @brief WDI_EXTScanGetCapabilitiesReq
+ This API is called to send get EXTScan capabilities from FW
+
+ @param pwdiEXTScanGetCachedResultsReqParams : pointer to the request params.
+ wdiEXTScanGetCachedResultsRspCb : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanGetCapabilitiesReq
+(
+ WDI_EXTScanGetCapabilitiesReqParams* pwdiEXTScanGetCapabilitiesReqParams,
+ WDI_EXTScanGetCapabilitiesRspCb wdiEXTScanGetCapabilitiesRspCb,
+ void* pUserData
+);
+
+/**
+ @brief WDI_EXTScanSetBSSIDHotlistReq
+ This API is called to send Set BSSID Hotlist Request FW
+
+ @param pwdiEXTScanSetBssidHotlistReqParams : pointer to the request params.
+ wdiEXTScanSetBSSIDHotlistRspCb : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanSetBSSIDHotlistReq
+(
+ WDI_EXTScanSetBSSIDHotlistReqParams* pwdiEXTScanSetBSSIDHotlistReqParams,
+ WDI_EXTScanSetBSSIDHotlistRspCb wdiEXTScanSetBSSIDHotlistRspCb,
+ void* pUserData
+);
+
+/**
+ @brief WDI_EXTScanResetBSSIDHotlistReq
+ This API is called to send Reset BSSID Hotlist Request FW
+
+ @param pwdiEXTScanResetBssidHotlistReqParams : pointer to the request params.
+ wdiEXTScanGetCachedResultsRspCb : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanResetBSSIDHotlistReq
+(
+ WDI_EXTScanResetBSSIDHotlistReqParams* pwdiEXTScanResetBSSIDHotlistReqParams,
+ WDI_EXTScanResetBSSIDHotlistRspCb wdiEXTScanResetBSSIDHotlistRspCb,
+ void* pUserData
+);
+
+/**
+ @brief WDI_EXTScanSetSignfRSSIChangeReq
+ This API is called to send Set Significant RSSI Request FW
+
+ @param pwdiEXTScanSetSignfRSSIChangeReqParams : pointer to the request params.
+ wdiEXTScanSetSignfRSSIChangeRspCb : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanSetSignfRSSIChangeReq
+(
+ WDI_EXTScanSetSignfRSSIChangeReqParams*
+ pwdiEXTScanSetSignfRSSIChangeReqParams,
+ WDI_EXTScanSetSignfRSSIChangeRspCb wdiEXTScanSetSignfRSSIChangeRspCb,
+ void* pUserData
+);
+
+/**
+ @brief WDI_EXTScanResetSignfRSSIChangeReq
+ This API is called to send Reset BSSID Hotlist Request FW
+
+ @param pwdiEXTScanResetSignfRSSIChangeReqParams : pointer to the request params.
+ wdiEXTScanResetSignfRSSIChangeRs : callback on getting the response.
+ usrData : Client context
+ @see
+ @return SUCCESS or FAIL
+*/
+WDI_Status WDI_EXTScanResetSignfRSSIChangeReq
+(
+ WDI_EXTScanResetSignfRSSIChangeReqParams*
+ pwdiEXTScanResetSignfRSSIChangeReqParams,
+ WDI_EXTScanResetSignfRSSIChangeRspCb wdiEXTScanResetSignfRSSIChangeRspCb,
+ void* pUserData
+);
+#endif /* WLAN_FEATURE_EXTSCAN */
+
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
/**
@brief WDI_LLStatsSetReq