qcacld-3.0: HDD: Add support for 2.4Ghz HT40 STA

- Add support for 2.4Ghz HT40 STA.
- Add HT40 OBSS scan start and stop operation.
- Add support for extraction of OBSS scan paramters from beacon
  and probe response

Change-Id: Idc69d4d17271864c1d3bc2c6e16f25eae73331b0
CRs-Fixed: 947086
diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c
index ccc45f2..3c3fd4a 100644
--- a/core/hdd/src/wlan_hdd_wext.c
+++ b/core/hdd/src/wlan_hdd_wext.c
@@ -328,7 +328,8 @@
 #define WE_DUMP_PCIE_LOG           16
 #endif
 #define WE_GET_RECOVERY_STAT       17
-#define WE_GET_FW_PROFILE_DATA        18
+#define WE_GET_FW_PROFILE_DATA     18
+#define WE_STOP_OBSS_SCAN          19
 
 /* Private ioctls and their sub-ioctls */
 #define WLAN_PRIV_SET_VAR_INT_GET_NONE   (SIOCIWFIRSTPRIV + 7)
@@ -7423,14 +7424,14 @@
 				struct iw_request_info *info,
 				union iwreq_data *wrqu, char *extra)
 {
-	hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
+	hdd_adapter_t *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
 	hdd_context_t *hdd_ctx;
 	int ret;
 	int sub_cmd;
 
 	ENTER_DEV(dev);
 
-	hdd_ctx = WLAN_HDD_GET_CTX(pAdapter);
+	hdd_ctx = WLAN_HDD_GET_CTX(adapter);
 	ret = wlan_hdd_validate_context(hdd_ctx);
 	if (0 != ret)
 		return ret;
@@ -7458,25 +7459,25 @@
 	switch (sub_cmd) {
 	case WE_GET_RECOVERY_STAT:
 	{
-		tHalHandle hal = WLAN_HDD_GET_HAL_CTX(pAdapter);
+		tHalHandle hal = WLAN_HDD_GET_HAL_CTX(adapter);
 		sme_get_recovery_stats(hal);
 		break;
 	}
 
 	case WE_GET_FW_PROFILE_DATA:
-		ret = wma_cli_set_command(pAdapter->sessionId,
+		ret = wma_cli_set_command(adapter->sessionId,
 				WMI_WLAN_PROFILE_GET_PROFILE_DATA_CMDID,
 				0, DBG_CMD);
 		break;
 
 	case WE_SET_REASSOC_TRIGGER:
 	{
-		hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
-		tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter);
+		hdd_adapter_t *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
+		tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(adapter);
 		uint32_t roamId = 0;
 		tCsrRoamModifyProfileFields modProfileFields;
 		hdd_station_ctx_t *hdd_sta_ctx =
-				   WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
+				   WLAN_HDD_GET_STATION_CTX_PTR(adapter);
 
 		/* Reassoc to same AP, only supported for Open Security*/
 		if ((hdd_sta_ctx->conn_info.ucEncryptionType ||
@@ -7486,9 +7487,9 @@
 			return -ENOTSUPP;
 		}
 
-		sme_get_modify_profile_fields(hHal, pAdapter->sessionId,
+		sme_get_modify_profile_fields(hHal, adapter->sessionId,
 					      &modProfileFields);
-		sme_roam_reassoc(hHal, pAdapter->sessionId,
+		sme_roam_reassoc(hHal, adapter->sessionId,
 				 NULL, modProfileFields, &roamId, 1);
 		return 0;
 	}
@@ -7496,7 +7497,7 @@
 	case WE_DUMP_AGC_START:
 	{
 		hddLog(LOG1, "WE_DUMP_AGC_START");
-		ret = wma_cli_set_command(pAdapter->sessionId,
+		ret = wma_cli_set_command(adapter->sessionId,
 					  GEN_PARAM_DUMP_AGC_START,
 					  0, GEN_CMD);
 		break;
@@ -7504,7 +7505,7 @@
 	case WE_DUMP_AGC:
 	{
 		hddLog(LOG1, "WE_DUMP_AGC");
-		ret = wma_cli_set_command(pAdapter->sessionId,
+		ret = wma_cli_set_command(adapter->sessionId,
 					  GEN_PARAM_DUMP_AGC,
 					  0, GEN_CMD);
 		break;
@@ -7513,7 +7514,7 @@
 	case WE_DUMP_CHANINFO_START:
 	{
 		hddLog(LOG1, "WE_DUMP_CHANINFO_START");
-		ret = wma_cli_set_command(pAdapter->sessionId,
+		ret = wma_cli_set_command(adapter->sessionId,
 					  GEN_PARAM_DUMP_CHANINFO_START,
 					  0, GEN_CMD);
 		break;
@@ -7521,7 +7522,7 @@
 	case WE_DUMP_CHANINFO:
 	{
 		hddLog(LOG1, "WE_DUMP_CHANINFO_START");
-		ret = wma_cli_set_command(pAdapter->sessionId,
+		ret = wma_cli_set_command(adapter->sessionId,
 					  GEN_PARAM_DUMP_CHANINFO,
 					  0, GEN_CMD);
 		break;
@@ -7529,7 +7530,7 @@
 	case WE_DUMP_WATCHDOG:
 	{
 		hddLog(LOG1, "WE_DUMP_WATCHDOG");
-		ret = wma_cli_set_command(pAdapter->sessionId,
+		ret = wma_cli_set_command(adapter->sessionId,
 					  GEN_PARAM_DUMP_WATCHDOG,
 					  0, GEN_CMD);
 		break;
@@ -7538,12 +7539,29 @@
 	case WE_DUMP_PCIE_LOG:
 	{
 		hddLog(LOGE, "WE_DUMP_PCIE_LOG");
-		ret = wma_cli_set_command(pAdapter->sessionId,
+		ret = wma_cli_set_command(adapter->sessionId,
 					  GEN_PARAM_DUMP_PCIE_ACCESS_LOG,
 					  0, GEN_CMD);
 		break;
 	}
 #endif
+	case WE_STOP_OBSS_SCAN:
+	{
+		/*
+		 * 1.OBSS Scan is mandatory while operating in 2.4GHz
+		 * 2.OBSS scan is stopped by Firmware during the disassociation
+		 * 3.OBSS stop comamnd is added for debugging purpose
+		 */
+		tHalHandle hal;
+
+		hal = WLAN_HDD_GET_HAL_CTX(adapter);
+		if (hal == NULL) {
+			hdd_err("hal context is NULL");
+			return -EINVAL;
+		}
+		sme_ht40_stop_obss_scan(hal, adapter->sessionId);
+	}
+	break;
 	default:
 	{
 		hddLog(LOGE, "%s: unknown ioctl %d", __func__, sub_cmd);
@@ -10473,6 +10491,10 @@
 	 0,
 	 "dump_pcie_log"},
 #endif
+	{WE_STOP_OBSS_SCAN,
+	 0,
+	 0,
+	 "stop_obss_scan"},
 	/* handlers for main ioctl */
 	{WLAN_PRIV_SET_VAR_INT_GET_NONE,
 	 IW_PRIV_TYPE_INT | MAX_VAR_ARGS,