Browse Source

qcacld-3.0: Enable feature bits in get_supported_features()

This is a qcacld-2.0 to qcacld-3.0 propagation.

Enable feature bits WIFI_FEATURE_CONTROL_ROAMING,
WIFI_FEATURE_IE_WHITELIST and WIFI_FEATURE_SCAN_RAND.

Change-Id: Ia0f136e038e7da040faae04eaa11bcf56bb72443
CRs-Fixed: 1102187
Srinivas Girigowda 8 years ago
parent
commit
8df27eacb6
3 changed files with 55 additions and 0 deletions
  1. 46 0
      core/hdd/inc/wlan_hdd_main.h
  2. 6 0
      core/hdd/src/wlan_hdd_cfg80211.c
  3. 3 0
      core/hdd/src/wlan_hdd_cfg80211.h

+ 46 - 0
core/hdd/inc/wlan_hdd_main.h

@@ -1941,6 +1941,52 @@ bool hdd_is_5g_supported(hdd_context_t *pHddCtx);
 
 int wlan_hdd_scan_abort(hdd_adapter_t *pAdapter);
 
+#ifdef FEATURE_WLAN_LFR
+static inline bool hdd_driver_roaming_supported(hdd_context_t *hdd_ctx)
+{
+	return hdd_ctx->cfg_ini->isFastRoamIniFeatureEnabled;
+}
+#else
+static inline bool hdd_driver_roaming_supported(hdd_context_t *hdd_ctx)
+{
+	return false;
+}
+#endif
+
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+static inline bool hdd_firmware_roaming_supported(hdd_context_t *hdd_ctx)
+{
+	return hdd_ctx->cfg_ini->isRoamOffloadScanEnabled;
+}
+#else
+static inline bool hdd_firmware_roaming_supported(hdd_context_t *hdd_ctx)
+{
+	return false;
+}
+#endif
+
+static inline bool hdd_roaming_supported(hdd_context_t *hdd_ctx)
+{
+	bool val;
+
+	val = hdd_driver_roaming_supported(hdd_ctx) ||
+		hdd_firmware_roaming_supported(hdd_ctx);
+
+	return val;
+}
+
+#ifdef CFG80211_SCAN_RANDOM_MAC_ADDR
+static inline bool hdd_scan_random_mac_addr_supported(void)
+{
+	return true;
+}
+#else
+static inline bool hdd_scan_random_mac_addr_supported(void)
+{
+	return false;
+}
+#endif
+
 void hdd_get_fw_version(hdd_context_t *hdd_ctx,
 			uint32_t *major_spid, uint32_t *minor_spid,
 			uint32_t *siid, uint32_t *crmid);

+ 6 - 0
core/hdd/src/wlan_hdd_cfg80211.c

@@ -2693,6 +2693,12 @@ __wlan_hdd_cfg80211_get_supported_features(struct wiphy *wiphy,
 	if (hdd_link_layer_stats_supported())
 		fset |= WIFI_FEATURE_LINK_LAYER_STATS;
 
+	if (hdd_roaming_supported(pHddCtx))
+		fset |= WIFI_FEATURE_CONTROL_ROAMING;
+
+	if (hdd_scan_random_mac_addr_supported())
+		fset |= WIFI_FEATURE_SCAN_RAND;
+
 	skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, sizeof(fset) +
 						  NLMSG_HDRLEN);
 	if (!skb) {

+ 3 - 0
core/hdd/src/wlan_hdd_cfg80211.h

@@ -169,6 +169,9 @@ typedef enum {
 #define WIFI_FEATURE_MKEEP_ALIVE        0x100000  /* WiFi mkeep_alive */
 #define WIFI_FEATURE_CONFIG_NDO         0x200000  /* ND offload configure */
 #define WIFI_FEATURE_TX_TRANSMIT_POWER  0x400000  /* Tx transmit power levels */
+#define WIFI_FEATURE_CONTROL_ROAMING    0x800000  /* Enable/Disable roaming */
+#define WIFI_FEATURE_IE_WHITELIST       0x1000000 /* Support Probe IE white listing */
+#define WIFI_FEATURE_SCAN_RAND          0x2000000 /* Support MAC & Probe Sequence Number randomization */
 
 /* Support Tx Power Limit setting */
 #define WIFI_FEATURE_SET_TX_POWER_LIMIT 0x4000000