Переглянути джерело

qcacld-3.0: Featurize RMC

Featurize RMC and disable for Genoa

Change-Id: I66b17622c89dd5736f152c4cd9506ce2706b4604
CRs-Fixed: 2304269
Rachit Kankane 6 роки тому
батько
коміт
ee1735c905

+ 1 - 0
Kbuild

@@ -1941,6 +1941,7 @@ cppflags-$(CONFIG_FEATURE_STATS_EXT) += -DWLAN_FEATURE_STATS_EXT
 cppflags-$(CONFIG_QCACLD_FEATURE_NAN) += -DWLAN_FEATURE_NAN
 cppflags-$(CONFIG_QCA_IBSS_SUPPORT) += -DQCA_IBSS_SUPPORT
 cppflags-$(CONFIG_WLAN_SYSFS) += -DWLAN_SYSFS
+cppflags-$(CONFIG_FEATURE_WLAN_RMC) += -DFEATURE_WLAN_RMC
 
 #Enable OL debug and wmi unified functions
 cppflags-$(CONFIG_ATH_PERF_PWR_OFFLOAD) += -DATH_PERF_PWR_OFFLOAD

+ 1 - 0
configs/default_defconfig

@@ -414,6 +414,7 @@ CONFIG_FEATURE_AP_MCC_CH_AVOIDANCE := y
 else
 CONFIG_QCOM_ESE := y
 CONFIG_QCA_IBSS_SUPPORT := y
+CONFIG_FEATURE_WLAN_RMC := y
 CONFIG_WLAN_OPEN_P2P_INTERFACE := y
 CONFIG_WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY := y
 endif

+ 1 - 0
configs/genoa.common

@@ -7,6 +7,7 @@ CONFIG_FEATURE_STATS_EXT := n
 CONFIG_QCA_IBSS_SUPPORT := y
 
 #required features
+CONFIG_FEATURE_WLAN_RMC := n
 CONFIG_QCACLD_WLAN_LFR2 := y
 CONFIG_QCACLD_WLAN_LFR3 := n
 CONFIG_QCOM_TDLS := y

+ 202 - 198
core/hdd/src/wlan_hdd_ioctl.c

@@ -238,150 +238,6 @@ static int hdd_get_tsm_stats(struct hdd_adapter *adapter,
 }
 #endif /*FEATURE_WLAN_ESE */
 
-/* Function header is left blank intentionally */
-static int hdd_parse_setrmcenable_command(uint8_t *pValue,
-					  uint8_t *pRmcEnable)
-{
-	uint8_t *inPtr = pValue;
-	int tempInt;
-	int v = 0;
-	char buf[32];
-	*pRmcEnable = 0;
-
-	inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE);
-
-	if (NULL == inPtr)
-		return 0;
-	else if (SPACE_ASCII_VALUE != *inPtr)
-		return 0;
-
-	while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr))
-		inPtr++;
-
-	if ('\0' == *inPtr)
-		return 0;
-
-	v = sscanf(inPtr, "%31s ", buf);
-	if (1 != v)
-		return -EINVAL;
-
-	v = kstrtos32(buf, 10, &tempInt);
-	if (v < 0)
-		return -EINVAL;
-
-	*pRmcEnable = tempInt;
-
-	hdd_debug("ucRmcEnable: %d", *pRmcEnable);
-
-	return 0;
-}
-
-/* Function header is left blank intentionally */
-static int hdd_parse_setrmcactionperiod_command(uint8_t *pValue,
-						uint32_t *pActionPeriod)
-{
-	uint8_t *inPtr = pValue;
-	int tempInt;
-	int v = 0;
-	char buf[32];
-	*pActionPeriod = 0;
-
-	inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE);
-
-	if (NULL == inPtr)
-		return -EINVAL;
-	else if (SPACE_ASCII_VALUE != *inPtr)
-		return -EINVAL;
-
-	while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr))
-		inPtr++;
-
-	if ('\0' == *inPtr)
-		return 0;
-
-	v = sscanf(inPtr, "%31s ", buf);
-	if (1 != v)
-		return -EINVAL;
-
-	v = kstrtos32(buf, 10, &tempInt);
-	if (v < 0)
-		return -EINVAL;
-
-	if ((tempInt < WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMIN) ||
-	    (tempInt > WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMAX))
-		return -EINVAL;
-
-	*pActionPeriod = tempInt;
-
-	hdd_debug("uActionPeriod: %d", *pActionPeriod);
-
-	return 0;
-}
-
-/* Function header is left blank intentionally */
-static int hdd_parse_setrmcrate_command(uint8_t *pValue,
-					uint32_t *pRate,
-					enum tx_rate_info *pTxFlags)
-{
-	uint8_t *inPtr = pValue;
-	int tempInt;
-	int v = 0;
-	char buf[32];
-	*pRate = 0;
-	*pTxFlags = 0;
-
-	inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE);
-
-	if (NULL == inPtr)
-		return -EINVAL;
-	else if (SPACE_ASCII_VALUE != *inPtr)
-		return -EINVAL;
-
-	while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr))
-		inPtr++;
-
-	if ('\0' == *inPtr)
-		return 0;
-
-	v = sscanf(inPtr, "%31s ", buf);
-	if (1 != v)
-		return -EINVAL;
-
-	v = kstrtos32(buf, 10, &tempInt);
-	if (v < 0)
-		return -EINVAL;
-
-	switch (tempInt) {
-	default:
-		hdd_warn("Unsupported rate: %d", tempInt);
-		return -EINVAL;
-	case 0:
-	case 6:
-	case 9:
-	case 12:
-	case 18:
-	case 24:
-	case 36:
-	case 48:
-	case 54:
-		*pTxFlags = TX_RATE_LEGACY;
-		*pRate = tempInt * 10;
-		break;
-	case 65:
-		*pTxFlags = TX_RATE_HT20;
-		*pRate = tempInt * 10;
-		break;
-	case 72:
-		*pTxFlags = TX_RATE_HT20 | TX_RATE_SGI;
-		*pRate = 722;
-		break;
-	}
-
-	hdd_debug("Rate: %d", *pRate);
-
-	return 0;
-}
-
 /**
  * hdd_get_ibss_peer_info_cb() - IBSS peer Info request callback
  * @UserData: Adapter private data
@@ -5012,6 +4868,151 @@ exit:
 	return ret;
 }
 
+#ifdef FEATURE_WLAN_RMC
+/* Function header is left blank intentionally */
+static int hdd_parse_setrmcenable_command(uint8_t *pValue,
+					  uint8_t *pRmcEnable)
+{
+	uint8_t *inPtr = pValue;
+	int tempInt;
+	int v = 0;
+	char buf[32];
+	*pRmcEnable = 0;
+
+	inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE);
+
+	if (NULL == inPtr)
+		return 0;
+	else if (SPACE_ASCII_VALUE != *inPtr)
+		return 0;
+
+	while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr))
+		inPtr++;
+
+	if ('\0' == *inPtr)
+		return 0;
+
+	v = sscanf(inPtr, "%31s ", buf);
+	if (1 != v)
+		return -EINVAL;
+
+	v = kstrtos32(buf, 10, &tempInt);
+	if (v < 0)
+		return -EINVAL;
+
+	*pRmcEnable = tempInt;
+
+	hdd_debug("ucRmcEnable: %d", *pRmcEnable);
+
+	return 0;
+}
+
+/* Function header is left blank intentionally */
+static int hdd_parse_setrmcactionperiod_command(uint8_t *pValue,
+						uint32_t *pActionPeriod)
+{
+	uint8_t *inPtr = pValue;
+	int tempInt;
+	int v = 0;
+	char buf[32];
+	*pActionPeriod = 0;
+
+	inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE);
+
+	if (NULL == inPtr)
+		return -EINVAL;
+	else if (SPACE_ASCII_VALUE != *inPtr)
+		return -EINVAL;
+
+	while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr))
+		inPtr++;
+
+	if ('\0' == *inPtr)
+		return 0;
+
+	v = sscanf(inPtr, "%31s ", buf);
+	if (1 != v)
+		return -EINVAL;
+
+	v = kstrtos32(buf, 10, &tempInt);
+	if (v < 0)
+		return -EINVAL;
+
+	if ((tempInt < WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMIN) ||
+	    (tempInt > WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMAX))
+		return -EINVAL;
+
+	*pActionPeriod = tempInt;
+
+	hdd_debug("uActionPeriod: %d", *pActionPeriod);
+
+	return 0;
+}
+
+/* Function header is left blank intentionally */
+static int hdd_parse_setrmcrate_command(uint8_t *pValue,
+					uint32_t *pRate,
+					enum tx_rate_info *pTxFlags)
+{
+	uint8_t *inPtr = pValue;
+	int tempInt;
+	int v = 0;
+	char buf[32];
+	*pRate = 0;
+	*pTxFlags = 0;
+
+	inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE);
+
+	if (NULL == inPtr)
+		return -EINVAL;
+	else if (SPACE_ASCII_VALUE != *inPtr)
+		return -EINVAL;
+
+	while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr))
+		inPtr++;
+
+	if ('\0' == *inPtr)
+		return 0;
+
+	v = sscanf(inPtr, "%31s ", buf);
+	if (1 != v)
+		return -EINVAL;
+
+	v = kstrtos32(buf, 10, &tempInt);
+	if (v < 0)
+		return -EINVAL;
+
+	switch (tempInt) {
+	default:
+		hdd_warn("Unsupported rate: %d", tempInt);
+		return -EINVAL;
+	case 0:
+	case 6:
+	case 9:
+	case 12:
+	case 18:
+	case 24:
+	case 36:
+	case 48:
+	case 54:
+		*pTxFlags = TX_RATE_LEGACY;
+		*pRate = tempInt * 10;
+		break;
+	case 65:
+		*pTxFlags = TX_RATE_HT20;
+		*pRate = tempInt * 10;
+		break;
+	case 72:
+		*pTxFlags = TX_RATE_HT20 | TX_RATE_SGI;
+		*pRate = 722;
+		break;
+	}
+
+	hdd_debug("Rate: %d", *pRate);
+
+	return 0;
+}
+
 static int drv_cmd_set_rmc_enable(struct hdd_adapter *adapter,
 				  struct hdd_context *hdd_ctx,
 				  uint8_t *command,
@@ -5118,6 +5119,60 @@ exit:
 	return ret;
 }
 
+static int drv_cmd_set_rmc_tx_rate(struct hdd_adapter *adapter,
+				   struct hdd_context *hdd_ctx,
+				   uint8_t *command,
+				   uint8_t command_len,
+				   struct hdd_priv_data *priv_data)
+{
+	int ret = 0;
+	uint8_t *value = command;
+	uint32_t uRate = 0;
+	enum tx_rate_info txFlags = 0;
+	tSirRateUpdateInd rateUpdateParams = {0};
+	int status;
+	struct hdd_config *pConfig = hdd_ctx->config;
+
+	if ((QDF_IBSS_MODE != adapter->device_mode) &&
+	    (QDF_SAP_MODE != adapter->device_mode)) {
+		hdd_err("Received SETRMCTXRATE cmd in invalid mode %s(%d)",
+			 hdd_device_mode_to_string(adapter->device_mode),
+			 adapter->device_mode);
+		hdd_err("SETRMCTXRATE cmd is allowed only in IBSS/SOFTAP mode");
+		ret = -EINVAL;
+		goto exit;
+	}
+
+	status = hdd_parse_setrmcrate_command(value, &uRate, &txFlags);
+	if (status) {
+		hdd_err("Invalid SETRMCTXRATE command");
+		ret = -EINVAL;
+		goto exit;
+	}
+	hdd_debug("uRate %d", uRate);
+	/* -1 implies ignore this param */
+	rateUpdateParams.ucastDataRate = -1;
+
+	/*
+	 * Fill the user specifieed RMC rate param
+	 * and the derived tx flags.
+	 */
+	rateUpdateParams.nss = (pConfig->enable2x2 == 0) ? 0 : 1;
+	rateUpdateParams.reliableMcastDataRate = uRate;
+	rateUpdateParams.reliableMcastDataRateTxFlag = txFlags;
+	rateUpdateParams.dev_mode = adapter->device_mode;
+	rateUpdateParams.bcastDataRate = -1;
+	memcpy(rateUpdateParams.bssid.bytes,
+	       adapter->mac_addr.bytes,
+	       sizeof(rateUpdateParams.bssid));
+	status = sme_send_rate_update_ind(hdd_ctx->mac_handle,
+					  &rateUpdateParams);
+
+exit:
+	return ret;
+}
+#endif /* FEATURE_WLAN_RMC */
+
 static int drv_cmd_get_ibss_peer_info_all(struct hdd_adapter *adapter,
 					  struct hdd_context *hdd_ctx,
 					  uint8_t *command,
@@ -5331,59 +5386,6 @@ exit:
 	return ret;
 }
 
-static int drv_cmd_set_rmc_tx_rate(struct hdd_adapter *adapter,
-				   struct hdd_context *hdd_ctx,
-				   uint8_t *command,
-				   uint8_t command_len,
-				   struct hdd_priv_data *priv_data)
-{
-	int ret = 0;
-	uint8_t *value = command;
-	uint32_t uRate = 0;
-	enum tx_rate_info txFlags = 0;
-	tSirRateUpdateInd rateUpdateParams = {0};
-	int status;
-	struct hdd_config *pConfig = hdd_ctx->config;
-
-	if ((QDF_IBSS_MODE != adapter->device_mode) &&
-	    (QDF_SAP_MODE != adapter->device_mode)) {
-		hdd_err("Received SETRMCTXRATE cmd in invalid mode %s(%d)",
-			 hdd_device_mode_to_string(adapter->device_mode),
-			 adapter->device_mode);
-		hdd_err("SETRMCTXRATE cmd is allowed only in IBSS/SOFTAP mode");
-		ret = -EINVAL;
-		goto exit;
-	}
-
-	status = hdd_parse_setrmcrate_command(value, &uRate, &txFlags);
-	if (status) {
-		hdd_err("Invalid SETRMCTXRATE command");
-		ret = -EINVAL;
-		goto exit;
-	}
-	hdd_debug("uRate %d", uRate);
-	/* -1 implies ignore this param */
-	rateUpdateParams.ucastDataRate = -1;
-
-	/*
-	 * Fill the user specifieed RMC rate param
-	 * and the derived tx flags.
-	 */
-	rateUpdateParams.nss = (pConfig->enable2x2 == 0) ? 0 : 1;
-	rateUpdateParams.reliableMcastDataRate = uRate;
-	rateUpdateParams.reliableMcastDataRateTxFlag = txFlags;
-	rateUpdateParams.dev_mode = adapter->device_mode;
-	rateUpdateParams.bcastDataRate = -1;
-	memcpy(rateUpdateParams.bssid.bytes,
-	       adapter->mac_addr.bytes,
-	       sizeof(rateUpdateParams.bssid));
-	status = sme_send_rate_update_ind(hdd_ctx->mac_handle,
-					  &rateUpdateParams);
-
-exit:
-	return ret;
-}
-
 static int drv_cmd_set_ibss_tx_fail_event(struct hdd_adapter *adapter,
 					  struct hdd_context *hdd_ctx,
 					  uint8_t *command,
@@ -7353,11 +7355,13 @@ static const struct hdd_drv_cmd hdd_drv_cmds[] = {
 	{"SETDWELLTIME",              drv_cmd_set_dwell_time, true},
 	{"MIRACAST",                  drv_cmd_miracast, true},
 	{"SETIBSSBEACONOUIDATA",      drv_cmd_set_ibss_beacon_oui_data, true},
+#ifdef FEATURE_WLAN_RMC
 	{"SETRMCENABLE",              drv_cmd_set_rmc_enable, true},
 	{"SETRMCACTIONPERIOD",        drv_cmd_set_rmc_action_period, true},
+	{"SETRMCTXRATE",              drv_cmd_set_rmc_tx_rate, true},
+#endif
 	{"GETIBSSPEERINFOALL",        drv_cmd_get_ibss_peer_info_all, false},
 	{"GETIBSSPEERINFO",           drv_cmd_get_ibss_peer_info, true},
-	{"SETRMCTXRATE",              drv_cmd_set_rmc_tx_rate, true},
 	{"SETIBSSTXFAILEVENT",        drv_cmd_set_ibss_tx_fail_event, true},
 #ifdef FEATURE_WLAN_ESE
 	{"SETCCXROAMSCANCHANNELS",    drv_cmd_set_ccx_roam_scan_channels, true},

+ 2 - 0
core/mac/src/sys/legacy/src/utils/src/mac_trace.c

@@ -527,9 +527,11 @@ uint8_t *mac_trace_get_wma_msg_string(uint16_t wma_msg)
 		CASE_RETURN_STRING(WMA_IBSS_CESIUM_ENABLE_IND);
 		CASE_RETURN_STRING(WMA_GET_IBSS_PEER_INFO_REQ);
 		CASE_RETURN_STRING(WMA_TX_FAIL_MONITOR_IND);
+#ifdef FEATURE_WLAN_RMC
 		CASE_RETURN_STRING(WMA_RMC_ENABLE_IND);
 		CASE_RETURN_STRING(WMA_RMC_DISABLE_IND);
 		CASE_RETURN_STRING(WMA_RMC_ACTION_PERIOD_IND);
+#endif
 		CASE_RETURN_STRING(WMA_INIT_THERMAL_INFO_CMD);
 		CASE_RETURN_STRING(WMA_SET_THERMAL_LEVEL);
 		CASE_RETURN_STRING(WMA_SET_SAP_INTRABSS_DIS);

+ 2 - 0
core/sme/inc/sme_api.h

@@ -806,9 +806,11 @@ QDF_STATUS sme_roam_del_pmkid_from_cache(tHalHandle hHal, uint8_t sessionId,
 		tPmkidCacheInfo *pmksa, bool flush_cache);
 void sme_get_command_q_status(tHalHandle hHal);
 
+#ifdef FEATURE_WLAN_RMC
 QDF_STATUS sme_enable_rmc(tHalHandle hHal, uint32_t sessionId);
 QDF_STATUS sme_disable_rmc(tHalHandle hHal, uint32_t sessionId);
 QDF_STATUS sme_send_rmc_action_period(tHalHandle hHal, uint32_t sessionId);
+#endif
 QDF_STATUS sme_request_ibss_peer_info(tHalHandle hHal, void *pUserData,
 	pIbssPeerInfoCb peerInfoCbk, bool allPeerInfoReqd, uint8_t staIdx);
 QDF_STATUS sme_send_cesium_enable_ind(tHalHandle hHal, uint32_t sessionId);

+ 3 - 1
core/sme/src/common/sme_api.c

@@ -8475,6 +8475,7 @@ sme_del_periodic_tx_ptrn(tHalHandle hal,
 	return status;
 }
 
+#ifdef FEATURE_WLAN_RMC
 /*
  * sme_enable_rmc() - enables RMC
  * @hHal : Pointer to global HAL handle
@@ -8572,6 +8573,7 @@ QDF_STATUS sme_send_rmc_action_period(tHalHandle hHal, uint32_t sessionId)
 
 	return status;
 }
+#endif /* FEATURE_WLAN_RMC */
 
 /*
  * sme_request_ibss_peer_info() -  request ibss peer info
@@ -9839,7 +9841,7 @@ QDF_STATUS sme_send_rate_update_ind(tHalHandle hHal,
 		if (!QDF_IS_STATUS_SUCCESS
 			    (scheduler_post_msg(QDF_MODULE_ID_WMA, &msg))) {
 			QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
-				  "%s: Not able to post WMA_SET_RMC_RATE_IND to WMA!",
+				  "%s: Not able to post WMA_RATE_UPDATE_IND to WMA!",
 				  __func__);
 
 			sme_release_global_lock(&pMac->sme);

+ 20 - 0
core/wma/inc/wma_internal.h

@@ -980,11 +980,31 @@ QDF_STATUS wma_process_get_peer_info_req
 QDF_STATUS wma_process_tx_fail_monitor_ind
 	(tp_wma_handle wma, tAniTXFailMonitorInd *pReq);
 
+#ifdef FEATURE_WLAN_RMC
 QDF_STATUS wma_process_rmc_enable_ind(tp_wma_handle wma);
 
 QDF_STATUS wma_process_rmc_disable_ind(tp_wma_handle wma);
 
 QDF_STATUS wma_process_rmc_action_period_ind(tp_wma_handle wma);
+#else
+static inline
+QDF_STATUS wma_process_rmc_enable_ind(tp_wma_handle wma)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
+static inline
+QDF_STATUS wma_process_rmc_disable_ind(tp_wma_handle wma)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
+static inline
+QDF_STATUS wma_process_rmc_action_period_ind(tp_wma_handle wma)
+{
+	return QDF_STATUS_SUCCESS;
+}
+#endif
 
 QDF_STATUS wma_process_add_periodic_tx_ptrn_ind(WMA_HANDLE handle,
 						tSirAddPeriodicTxPtrn *

+ 2 - 0
core/wma/src/wma_features.c

@@ -3439,6 +3439,7 @@ QDF_STATUS wma_process_tx_fail_monitor_ind(tp_wma_handle wma,
 	return QDF_STATUS_SUCCESS;
 }
 
+#ifdef FEATURE_WLAN_RMC
 /**
  * wma_process_rmc_enable_ind() - enables RMC functionality in target
  * @wma: wma handle
@@ -3608,6 +3609,7 @@ QDF_STATUS wma_process_rmc_action_period_ind(tp_wma_handle wma)
 
 	return QDF_STATUS_SUCCESS;
 }
+#endif /* FEATURE_WLAN_RMC */
 
 /**
  * wma_process_add_periodic_tx_ptrn_ind - add periodic tx ptrn