wlan: LDPC changes on Host side
Change-Id: Ifa7d4a87a5ae99b214295e0ebf26c460479765fd
CR-Fixed: 427414
Conflicts:
prima/riva/inc/wlan_hal_msg.h
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 397462c..ab3134a 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -1482,6 +1482,16 @@
#define CFG_SCAN_AGING_PARAM_MAX ( 200 )
#define CFG_SCAN_AGING_PARAM_DEFAULT ( 60 )
+/* Config Param to enable the txLdpc capability
+ * 0 - disable
+ * 1 - HT LDPC enable
+ * 2 - VHT LDPC enable
+ * 3 - HT & VHT LDPC enable */
+#define CFG_TX_LDPC_ENABLE_FEATURE "gTxLdpcEnable"
+#define CFG_TX_LDPC_ENABLE_FEATURE_MIN ( 0 )
+#define CFG_TX_LDPC_ENABLE_FEATURE_MAX ( 3 )
+#define CFG_TX_LDPC_ENABLE_FEATURE_DEFAULT ( 0 )
+
/*---------------------------------------------------------------------------
Type declarations
-------------------------------------------------------------------------*/
@@ -1806,6 +1816,7 @@
v_BOOL_t fEnableActiveModeOffload;
#endif
v_U8_t scanAgingTimeout;
+ v_BOOL_t enableTxLdpc;
} hdd_config_t;
/*---------------------------------------------------------------------------
Function declarations and documenation
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 86842cc..6ab9bdd 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -1816,6 +1816,14 @@
CFG_SCAN_AGING_PARAM_DEFAULT,
CFG_SCAN_AGING_PARAM_MIN,
CFG_SCAN_AGING_PARAM_MAX ),
+
+REG_VARIABLE( CFG_TX_LDPC_ENABLE_FEATURE, WLAN_PARAM_Integer,
+ hdd_config_t, enableTxLdpc,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_TX_LDPC_ENABLE_FEATURE_DEFAULT,
+ CFG_TX_LDPC_ENABLE_FEATURE_MIN,
+ CFG_TX_LDPC_ENABLE_FEATURE_MAX ),
+
};
/*
@@ -3427,6 +3435,8 @@
//Scan Results Aging Time out value
smeConfig.csrConfig.scanCfgAgingTime = pConfig->scanAgingTimeout;
+ smeConfig.csrConfig.enableTxLdpc = pConfig->enableTxLdpc;
+
halStatus = sme_UpdateConfig( pHddCtx->hHal, &smeConfig);
if ( !HAL_STATUS_SUCCESS( halStatus ) )
{
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 7eafd87..4407431 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -662,6 +662,8 @@
#endif
tVOS_CON_MODE bssPersona;
+ tANI_U8 txLdpcIniFeatureEnabled;
+
tSirRSNie rsnIE; // RSN IE to be sent in
// Beacon and Probe
// Response frames
@@ -1259,7 +1261,8 @@
#ifdef FEATURE_WLAN_LFR
tAniBool isFastRoamIniFeatureEnabled;
#endif
-
+
+ tANI_U8 txLdpcIniFeatureEnabled;
#if (WNI_POLARIS_FW_PACKAGE == ADVANCED) && (WNI_POLARIS_FW_PRODUCT == AP)
tAniBool bpIndicator;
tSirBpIndicatorType bpType;
diff --git a/CORE/MAC/src/include/dphGlobal.h b/CORE/MAC/src/include/dphGlobal.h
index bbe822f..a17b6c2 100644
--- a/CORE/MAC/src/include/dphGlobal.h
+++ b/CORE/MAC/src/include/dphGlobal.h
@@ -627,6 +627,9 @@
tANI_U8 vhtSupportedChannelWidthSet;
#endif
+ tANI_U8 htLdpcCapable;
+ tANI_U8 vhtLdpcCapable;
+
/* When a station with already an existing dph entry tries to
* associate again, the old dph entry will be zeroed out except
diff --git a/CORE/MAC/src/pe/include/limSession.h b/CORE/MAC/src/pe/include/limSession.h
index 78f27eb..7a05b07 100644
--- a/CORE/MAC/src/pe/include/limSession.h
+++ b/CORE/MAC/src/pe/include/limSession.h
@@ -345,6 +345,7 @@
tANI_BOOLEAN LimHBFailureStatus;
tANI_U32 gLimPhyMode;
+ tANI_U8 txLdpcIniFeatureEnabled;
/**
* Following is the place holder for free peer index pool.
* A non-zero value indicates that peer index is available
diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.c b/CORE/MAC/src/pe/lim/limAssocUtils.c
index 4e8aa7b..51587cb 100644
--- a/CORE/MAC/src/pe/lim/limAssocUtils.c
+++ b/CORE/MAC/src/pe/lim/limAssocUtils.c
@@ -2233,6 +2233,27 @@
}
#endif
+#ifdef FEATURE_WLAN_TDLS
+ if((STA_ENTRY_PEER == pStaDs->staType) ||
+ (STA_ENTRY_TDLS_PEER == pStaDs->staType))
+#else
+ if (STA_ENTRY_PEER == pStaDs->staType)
+#endif
+ {
+ /* peer STA get the LDPC capability from pStaDs, which populated from
+ * HT/VHT capability*/
+ pAddStaParams->htLdpcCapable = pStaDs->htLdpcCapable;
+ pAddStaParams->vhtLdpcCapable = pStaDs->vhtLdpcCapable;
+ }
+ else if( STA_ENTRY_SELF == pStaDs->staType)
+ {
+ /* For Self STA get the LDPC capability from config.ini*/
+ pAddStaParams->htLdpcCapable =
+ (psessionEntry->txLdpcIniFeatureEnabled & 0x01);
+ pAddStaParams->vhtLdpcCapable =
+ ((psessionEntry->txLdpcIniFeatureEnabled >> 1)& 0x01);
+ }
+
/* Update PE session ID*/
pAddStaParams->sessionId = psessionEntry->peSessionId;
@@ -2606,6 +2627,13 @@
pAddStaParams->vhtCapable = psessionEntry->vhtCapability;
pAddStaParams->vhtTxChannelWidthSet = psessionEntry->apChanWidth;
#endif
+
+ /* For Self STA get the LDPC capability from session i.e config.ini*/
+ pAddStaParams->htLdpcCapable =
+ (psessionEntry->txLdpcIniFeatureEnabled & 0x01);
+ pAddStaParams->vhtLdpcCapable =
+ ((psessionEntry->txLdpcIniFeatureEnabled >> 1)& 0x01);
+
if(wlan_cfgGetInt(pMac, WNI_CFG_LISTEN_INTERVAL, &listenInterval) != eSIR_SUCCESS)
limLog(pMac, LOGP, FL("Couldn't get LISTEN_INTERVAL\n"));
pAddStaParams->listenInterval = (tANI_U16)listenInterval;
@@ -3296,7 +3324,9 @@
pAddBssParams->staContext.fShortGI20Mhz = (tANI_U8)pAssocRsp->HTCaps.shortGI20MHz;
pAddBssParams->staContext.fShortGI40Mhz = (tANI_U8)pAssocRsp->HTCaps.shortGI40MHz;
pAddBssParams->staContext.maxAmpduSize= pAssocRsp->HTCaps.maxRxAMPDUFactor;
-
+ pAddBssParams->staContext.htLdpcCapable = (tANI_U8)pAssocRsp->HTCaps.advCodingCap;
+ pAddBssParams->staContext.vhtLdpcCapable = (tANI_U8)pAssocRsp->VHTCaps.ldpcCodingCap;
+
if( pBeaconStruct->HTInfo.present )
pAddBssParams->staContext.rifsMode = pAssocRsp->HTInfo.rifsMode;
}
@@ -3573,6 +3603,8 @@
pAddBssParams->staContext.fShortGI20Mhz = (tANI_U8)pBeaconStruct->HTCaps.shortGI20MHz;
pAddBssParams->staContext.fShortGI40Mhz = (tANI_U8)pBeaconStruct->HTCaps.shortGI40MHz;
pAddBssParams->staContext.maxAmpduSize= pBeaconStruct->HTCaps.maxRxAMPDUFactor;
+ pAddBssParams->staContext.htLdpcCapable = (tANI_U8)pBeaconStruct->HTCaps.advCodingCap;
+ pAddBssParams->staContext.vhtLdpcCapable = (tANI_U8)pBeaconStruct->VHTCaps.ldpcCodingCap;
if( pBeaconStruct->HTInfo.present )
pAddBssParams->staContext.rifsMode = pBeaconStruct->HTInfo.rifsMode;
diff --git a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
index 643d702..64d24bd 100644
--- a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
@@ -1137,8 +1137,13 @@
#endif
pStaDs->baPolicyFlag = 0xFF;
+ pStaDs->htLdpcCapable = (tANI_U8)pAssocReq->HTCaps.advCodingCap;
}
+ if(pAssocReq->VHTCaps.present)
+ {
+ pStaDs->vhtLdpcCapable = (tANI_U8)pAssocReq->VHTCaps.ldpcCodingCap;
+ }
#ifdef WLAN_FEATURE_11AC
if (limPopulateMatchingRateSet(pMac,
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
index 0422d1b..df36d03 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
@@ -1453,6 +1453,12 @@
pSta->maxAmpduSize = 0; // 0: 8k, 1: 16k,2: 32k,3: 64k
+ /* For Self STA get the LDPC capability from config.ini*/
+ pSta->htLdpcCapable =
+ (psessionEntry->txLdpcIniFeatureEnabled & 0x01);
+ pSta->vhtLdpcCapable =
+ ((psessionEntry->txLdpcIniFeatureEnabled >> 1)& 0x01);
+
if(IS_DOT11_MODE_HT(psessionEntry->dot11mode))
{
pSta->htCapable = htCapable;
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index 9fd1a34..8f468ac 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -670,6 +670,10 @@
VOS_TRACE(VOS_MODULE_ID_PE,VOS_TRACE_LEVEL_INFO,
FL("*****psessionEntry->vhtCapability = %d"),psessionEntry->vhtCapability);
#endif
+
+ psessionEntry->txLdpcIniFeatureEnabled =
+ pSmeStartBssReq->txLdpcIniFeatureEnabled;
+
palCopyMemory(pMac->hHdd, (void*)&psessionEntry->rateSet,
(void*)&pSmeStartBssReq->operationalRateSet,
sizeof(tSirMacRateSet));
@@ -1624,6 +1628,8 @@
#ifdef FEATURE_WLAN_LFR
psessionEntry->isFastRoamIniFeatureEnabled = pSmeJoinReq->isFastRoamIniFeatureEnabled;
#endif
+ psessionEntry->txLdpcIniFeatureEnabled = pSmeJoinReq->txLdpcIniFeatureEnabled;
+
if(psessionEntry->bssType == eSIR_INFRASTRUCTURE_MODE)
{
psessionEntry->limSystemRole = eLIM_STA_ROLE;
diff --git a/CORE/MAC/src/pe/lim/limSerDesUtils.c b/CORE/MAC/src/pe/lim/limSerDesUtils.c
index dae0ba6..35e628b 100644
--- a/CORE/MAC/src/pe/lim/limSerDesUtils.c
+++ b/CORE/MAC/src/pe/lim/limSerDesUtils.c
@@ -1510,6 +1510,14 @@
if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE)
return eSIR_FAILURE;
+
+ // Extract txLdpcIniFeatureEnabled
+ pStartBssReq->txLdpcIniFeatureEnabled = *pBuf++;
+ len--;
+ if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE)
+ return eSIR_FAILURE;
+
+
// Extract rsnIe
pStartBssReq->rsnIE.length = limGetU16(pBuf);
pBuf += sizeof(tANI_U16);
@@ -2023,6 +2031,13 @@
return eSIR_FAILURE;
#endif
+ //txLdpcIniFeatureEnabled
+ pJoinReq->txLdpcIniFeatureEnabled= *pBuf++;
+ len--;
+ if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE)
+ return eSIR_FAILURE;
+
+
#if (WNI_POLARIS_FW_PACKAGE == ADVANCED) && defined(ANI_PRODUCT_TYPE_AP)
// Extract BP Indicator
pJoinReq->bpIndicator = (tAniBool) limGetU32(pBuf);
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index ffb1d39..f4f397c 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -1057,7 +1057,10 @@
#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
tANI_BOOLEAN nRoamPrefer5GHz;
#endif
+
tANI_U8 scanCfgAgingTime;
+
+ tANI_U8 enableTxLdpc;
}tCsrConfigParam;
//Tush
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index b513e18..7a1d3bf 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -620,6 +620,7 @@
#ifdef WLAN_FEATURE_11AC
tANI_U32 nVhtChannelWidth;
#endif
+ tANI_U8 txLdpcEnable;
}tCsrConfig;
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index f73a6ac..20e5356 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -1356,6 +1356,7 @@
pMac->roam.configParam.nVhtChannelWidth = pParam->nVhtChannelWidth;
#endif
pMac->scan.fIgnore_chan165 = pParam->fIgnore_chan165;
+ pMac->roam.configParam.txLdpcEnable = pParam->enableTxLdpc;
}
return status;
@@ -11667,6 +11668,11 @@
pBuf += sizeof(tAniBool);
}
#endif
+
+ // txLdpcIniFeatureEnabled
+ *pBuf = (tANI_U8)pMac->roam.configParam.txLdpcEnable;
+ pBuf++;
+
//BssDesc
csrPrepareJoinReassocReqBuffer( pMac, pBssDescription, pBuf,
(tANI_U8)pProfile->uapsd_mask);
@@ -12802,6 +12808,9 @@
*pBuf = (tANI_U8)pParam->bssPersona;
pBuf++;
+ //txLdpcIniFeatureEnabled
+ *pBuf = (tANI_U8)(tANI_U8)pMac->roam.configParam.txLdpcEnable;
+ pBuf++;
// set RSN IE
diff --git a/CORE/WDA/inc/legacy/halMsgApi.h b/CORE/WDA/inc/legacy/halMsgApi.h
index 63d9898..d747e2a 100644
--- a/CORE/WDA/inc/legacy/halMsgApi.h
+++ b/CORE/WDA/inc/legacy/halMsgApi.h
@@ -330,6 +330,8 @@
tANI_U8 vhtTxChannelWidthSet;
#endif
+ tANI_U8 htLdpcCapable;
+ tANI_U8 vhtLdpcCapable;
} tAddStaParams, *tpAddStaParams;
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index c20f6e0..c5531e4 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -3790,6 +3790,8 @@
wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
#endif
+ wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
+ wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
return ;
}
/*
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h
index 319ab60..0f94526 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h
@@ -1347,6 +1347,9 @@
wpt_uint8 ucVhtCapableSta;
wpt_uint8 ucVhtTxChannelWidthSet;
#endif
+
+ wpt_uint8 ucHtLdpcEnabled;
+ wpt_uint8 ucVhtLdpcEnabled;
}WDI_ConfigStaReqInfoType;
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index da7ed5b..45843f4 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -21751,6 +21751,9 @@
{
phalConfigSta_V1->vhtCapable = pwdiConfigSta->ucVhtCapableSta;
phalConfigSta_V1->vhtTxChannelWidthSet = pwdiConfigSta->ucVhtTxChannelWidthSet;
+ phalConfigSta_V1->htLdpcEnabled = pwdiConfigSta->ucHtLdpcEnabled;
+ phalConfigSta_V1->vhtLdpcEnabled = pwdiConfigSta->ucVhtLdpcEnabled;
+
}
#endif
}/*WDI_CopyWDIStaCtxToHALStaCtx*/;
diff --git a/riva/inc/wlan_hal_msg.h b/riva/inc/wlan_hal_msg.h
old mode 100644
new mode 100755
index 7f42668..18aef61
--- a/riva/inc/wlan_hal_msg.h
+++ b/riva/inc/wlan_hal_msg.h
@@ -1,43 +1,8 @@
/*
- * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-/*
- * Copyright (c) 2012, The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
+* Copyright (c) 2012 Qualcomm Atheros, Inc.
+* All Rights Reserved.
+* Qualcomm Atheros Confidential and Proprietary.
+*/
/*==========================================================================
*
@@ -1446,13 +1411,16 @@
tANI_U8 p2pCapableSta;
/*Reserved to align next field on a dword boundary*/
- tANI_U8 reserved;
- /*These rates are the intersection of peer and self capabilities.*/
+ tANI_U8 htLdpcEnabled:1;
+ tANI_U8 vhtLdpcEnabled:1;
+ tANI_U8 reserved:6;
+
+ /*These rates are the intersection of peer and self capabilities.*/
tSirSupportedRates_V1 supportedRates;
tANI_U8 vhtCapable;
tANI_U8 vhtTxChannelWidthSet;
-
+
} tConfigStaParams_V1, *tpConfigStaParams_V1;
typedef PACKED_PRE struct PACKED_POST