Merge "wlan: IOCTL to tune miracast"
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index 101f84f..34c50c8 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -167,6 +167,8 @@
#define WE_SET_TDLS_OFF_CHAN_MODE 16
#endif
#define WE_SET_SCAN_BAND_PREFERENCE 17
+#define WE_SET_MIRACAST_VENDOR_CONFIG 18
+
/* Private ioctls and their sub-ioctls */
#define WLAN_PRIV_SET_NONE_GET_INT (SIOCIWFIRSTPRIV + 1)
@@ -5023,7 +5025,36 @@
}
break;
}
+ /* The WE_SET_MIRACAST_VENDOR_CONFIG IOCTL should be set before the
+ * connection happens so that the params can take effect during
+ * association. Also this should not be used in STA+p2p concurrency
+ * as the param will also effect the STA mode.
+ */
+ case WE_SET_MIRACAST_VENDOR_CONFIG:
+ {
+ hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
+ hddLog(LOG1, FL(
+ "Set Miracast vendor tuning %d"), set_value);
+
+ if (1 == set_value || 0 == set_value)
+ {
+ if (eHAL_STATUS_SUCCESS != sme_SetMiracastVendorConfig(pHddCtx->hHal,
+ pHddCtx->cfg_ini->numBuffAdvert, set_value))
+ {
+ hddLog( LOGE, FL("set vendor miracast config failed"));
+ ret = -EIO;
+ }
+ }
+ else
+ {
+ hddLog(LOGE,
+ FL("Invalid value %d in WE_SET_MIRACAST_VENDOR_CONFIG IOCTL"), set_value);
+ ret = -EINVAL;
+ }
+
+ break;
+ }
default:
{
hddLog(LOGE, "Invalid IOCTL setvalue command %d value %d",
@@ -8920,6 +8951,10 @@
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
0, "set_scan_pref" },
+ { WE_SET_MIRACAST_VENDOR_CONFIG,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0, "setMiracstConf" },
+
/* handlers for main ioctl */
{ WLAN_PRIV_SET_NONE_GET_INT,
0,
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index dc3c221..5f3e1f1 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -1074,6 +1074,7 @@
v_BOOL_t isCoexScoIndSet;
v_U8_t miracast_mode;
+ tANI_BOOLEAN miracastVendorConfig;
} tAniSirGlobal;
#ifdef FEATURE_WLAN_TDLS
diff --git a/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c b/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c
index 52f8649..7a84b39 100644
--- a/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c
@@ -603,6 +603,10 @@
else
{
{
+ if ((VOS_P2P_GO_MODE == psessionEntry->pePersona) &&
+ pMac->miracastVendorConfig)
+ return;
+
// Broadcast SSID in the Probe Request.
// Reply with SSID we're configured with.
//Turn off the SSID length to 0 if hidden SSID feature is present
diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c
index 15ad46e..8b59d79 100644
--- a/CORE/MAC/src/pe/lim/limUtils.c
+++ b/CORE/MAC/src/pe/lim/limUtils.c
@@ -5972,14 +5972,25 @@
FL( "Requesting ADDBA with Cisco 1225 AP, window size 25"));
pMlmAddBAReq->baBufferSize = MAX_BA_WINDOW_SIZE_FOR_CISCO;
}
+ else if (pMac->miracastVendorConfig)
+ {
+ if (wlan_cfgGetInt(pMac, WNI_CFG_NUM_BUFF_ADVERT , &val) != eSIR_SUCCESS)
+ {
+ limLog(pMac, LOGE, FL("Unable to get WNI_CFG_NUM_BUFF_ADVERT"));
+ status = eSIR_FAILURE;
+ goto returnFailure;
+ }
+
+ pMlmAddBAReq->baBufferSize = val;
+ }
else
pMlmAddBAReq->baBufferSize = 0;
limLog( pMac, LOGW,
- FL( "Requesting an ADDBA to setup a %s BA session with STA %d for TID %d" ),
+ FL( "Requesting an ADDBA to setup a %s BA session with STA %d for TID %d buff = %d" ),
(pMlmAddBAReq->baPolicy ? "Immediate": "Delayed"),
pStaDs->staIndex,
- tid );
+ tid, pMlmAddBAReq->baBufferSize );
// BA Timeout
if (wlan_cfgGetInt(pMac, WNI_CFG_BA_TIMEOUT, &val) != eSIR_SUCCESS)
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index f7a5bc5..369531d 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -3486,4 +3486,8 @@
pEncryptMsgRSPCb encCB);
+eHalStatus sme_SetMiracastVendorConfig(tHalHandle hHal,
+ tANI_U32 iniNumBuffAdvert,
+ tANI_U32 set_value);
+
#endif //#if !defined( __SME_API_H )
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index f28cc48..de84d42 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -11779,3 +11779,79 @@
}
return(status);
}
+
+eHalStatus sme_SetMiracastVendorConfig(tHalHandle hHal,
+ tANI_U32 iniNumBuffAdvert , tANI_U32 set_value)
+{
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+ tANI_U8 mcsSet[SIZE_OF_SUPPORTED_MCS_SET];
+ tANI_U32 val = SIZE_OF_SUPPORTED_MCS_SET;
+
+ if (ccmCfgGetStr(hHal, WNI_CFG_SUPPORTED_MCS_SET, mcsSet, &val)
+ != eHAL_STATUS_SUCCESS)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("failed to get ini param, WNI_CFG_SUPPORTED_MCS_SET"));
+ return eHAL_STATUS_FAILURE;
+ }
+
+ if (set_value)
+ {
+ if (pMac->miracastVendorConfig)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ FL(" Miracast tuning already enabled!!"));
+ return eHAL_STATUS_SUCCESS;
+ }
+
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ FL("Enable Miracast tuning by disabling 64QAM rates, setting 4 blocks for aggregation and disabling probe response for broadcast probe in P2P-GO mode"));
+
+ if (ccmCfgSetInt(hHal, WNI_CFG_NUM_BUFF_ADVERT, 4,
+ NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Failure: Could not set WNI_CFG_NUM_BUFF_ADVERT"));
+ return eHAL_STATUS_FAILURE;
+ }
+ /* Disable 64QAM rates ie (MCS 5,6 and 7)
+ */
+ mcsSet[0]=0x1F;
+ }
+ else
+ {
+ if (!pMac->miracastVendorConfig)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ FL(" Miracast tuning already disabled!!"));
+ return eHAL_STATUS_SUCCESS;
+ }
+
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ FL("Disable Miracast tuning by enabling all MCS rates, setting %d blocks for aggregation and enabling probe response for broadcast probe in P2P-GO mode"),
+ iniNumBuffAdvert);
+
+ if (ccmCfgSetInt(hHal, WNI_CFG_NUM_BUFF_ADVERT, iniNumBuffAdvert,
+ NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Failure: Could not set WNI_CFG_NUM_BUFF_ADVERT"));
+ return eHAL_STATUS_FAILURE;
+ }
+ /* Enable all MCS rates)
+ */
+ mcsSet[0]=0xFF;
+ }
+
+ if (ccmCfgSetStr(hHal, WNI_CFG_SUPPORTED_MCS_SET, mcsSet,
+ val, NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Failure: Could not set WNI_CFG_SUPPORTED_MCS_SET"));
+ return eHAL_STATUS_FAILURE;
+ }
+
+ pMac->miracastVendorConfig = set_value;
+ return eHAL_STATUS_SUCCESS;
+}
+
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 6da3677..58e71f1 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -6004,7 +6004,7 @@
* Request to WDI to Update the ADDBA REQ params.
*/
VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
- tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
+ tANI_U16 baSessionID, tANI_U8 staIdx, tANI_U8 ucWinSize, tAddBAParams *pAddBAReqParams)
{
WDI_Status wstatus;
WDI_AddBAReqParamsType *wdiAddBAReqParam =
@@ -6034,7 +6034,7 @@
WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
wdiAddBaInfo->ucSTAIdx = staIdx ;
wdiAddBaInfo->ucBaSessionID = baSessionID ;
- wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
+ wdiAddBaInfo->ucWinSize = ucWinSize ;
} while(0) ;
wdiAddBAReqParam->wdiReqStatusCB = NULL ;
pWdaParams->pWdaContext = pWDA;
@@ -6093,7 +6093,6 @@
* if WDA in update TL state, update TL with BA session parama and send
* another request to HAL(/WDI) (ADD_BA_REQ)
*/
-
if((VOS_STATUS_SUCCESS ==
CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
(WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
@@ -6107,7 +6106,8 @@
wdiAddBaSession->ucWinSize,
wdiAddBaSession->usBaSSN );
WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
- wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
+ wdiAddBaSession->ucSTAIdx,
+ wdiAddBaSession->ucWinSize, pAddBAReqParams) ;
}
else
{