wlan: Setting Max Tx Power Limit for specific band
Added two commands to set Max Tx Power for a specific band
Change-Id: Ie79a3f28f99f04848b69acee4811b69e13e14ac3
CRs-Fixed: 517289
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index a6fe45f..e1d2aa0 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -161,6 +161,8 @@
#define WE_SET_HIGHER_DTIM_TRANSITION 8
#define WE_SET_TM_LEVEL 9
#define WE_ENABLE_STRICT_FCC_REG 10
+#define WE_SET_MAX_TX_POWER_2_4 11
+#define WE_SET_MAX_TX_POWER_5_0 12
/* Private ioctls and their sub-ioctls */
#define WLAN_PRIV_SET_NONE_GET_INT (SIOCIWFIRSTPRIV + 1)
@@ -3994,6 +3996,38 @@
break;
}
+ case WE_SET_MAX_TX_POWER_2_4:
+ {
+ hddLog(VOS_TRACE_LEVEL_INFO,
+ "%s: Setting maximum tx power %d dBm for 2.4 GHz band",
+ __func__, set_value);
+ if (sme_SetMaxTxPowerPerBand(eCSR_BAND_24, set_value) !=
+ eHAL_STATUS_SUCCESS)
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: Setting maximum tx power failed for 2.4 GHz band",
+ __func__);
+ return -EIO;
+ }
+
+ break;
+ }
+ case WE_SET_MAX_TX_POWER_5_0:
+ {
+ hddLog(VOS_TRACE_LEVEL_INFO,
+ "%s: Setting maximum tx power %d dBm for 5.0 GHz band",
+ __func__, set_value);
+ if (sme_SetMaxTxPowerPerBand(eCSR_BAND_5G, set_value) !=
+ eHAL_STATUS_SUCCESS)
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: Setting maximum tx power failed for 5.0 GHz band",
+ __func__);
+ return -EIO;
+ }
+
+ break;
+ }
case WE_SET_HIGHER_DTIM_TRANSITION:
{
if(!((set_value == eANI_BOOLEAN_FALSE) ||
@@ -7225,7 +7259,17 @@
{ WE_SET_MAX_TX_POWER,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
0,
- "setMaxTxPower" },
+ "setMaxTxPower" },
+
+ { WE_SET_MAX_TX_POWER_2_4,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
+ "setTxMaxPower2G" },
+
+ { WE_SET_MAX_TX_POWER_5_0,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
+ "setTxMaxPower5G" },
/* SAP has TxMax whereas STA has MaxTx, adding TxMax for STA
* as well to keep same syntax as in SAP. Now onwards, STA
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 9ded008..3b4f5e8 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -614,6 +614,11 @@
#define SIR_HAL_START_SCAN_OFFLOAD_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 219)
#define SIR_HAL_UPDATE_CHAN_LIST_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 220)
+#define SIR_HAL_SET_MAX_TX_POWER_PER_BAND_REQ \
+ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 223)
+#define SIR_HAL_SET_MAX_TX_POWER_PER_BAND_RSP \
+ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 224)
+
#define SIR_HAL_MSG_TYPES_END (SIR_HAL_ITC_MSG_TYPES_BEGIN + 0xFF)
// CFG message types
#define SIR_CFG_MSG_TYPES_BEGIN (SIR_CFG_MODULE_ID << 8)
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index e5ba060..cd9b1db 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -2268,6 +2268,16 @@
tSirMacAddr pSelfMacAddress, v_S7_t dB);
/* ---------------------------------------------------------------------------
+ \fn sme_SetMaxTxPowerPerBand
+ \brief Used to set the Maximum Transmit Power for
+ specific band dynamically. Note: this setting will not persist over reboots
+ \param band
+ \param power to set in dB
+ \- return eHalStatus
+ -------------------------------------------------------------------------*/
+eHalStatus sme_SetMaxTxPowerPerBand(eCsrBand band, v_S7_t db);
+
+/* ---------------------------------------------------------------------------
\fn sme_SetTxPower
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 585112b..656dea4 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -7825,6 +7825,51 @@
/* ---------------------------------------------------------------------------
+ \fn sme_SetMaxTxPowerPerBand
+
+ \brief Set the Maximum Transmit Power specific to band dynamically.
+ Note: this setting will not persist over reboots.
+
+ \param band
+ \param power to set in dB
+ \- return eHalStatus
+
+ ----------------------------------------------------------------------------*/
+eHalStatus sme_SetMaxTxPowerPerBand(eCsrBand band, v_S7_t dB)
+{
+ vos_msg_t msg;
+ tpMaxTxPowerPerBandParams pMaxTxPowerPerBandParams = NULL;
+
+ pMaxTxPowerPerBandParams = vos_mem_malloc(sizeof(tMaxTxPowerPerBandParams));
+ if (NULL == pMaxTxPowerPerBandParams)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s:Not able to allocate memory for pMaxTxPowerPerBandParams",
+ __func__);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ pMaxTxPowerPerBandParams->power = dB;
+ pMaxTxPowerPerBandParams->bandInfo = band;
+
+ msg.type = WDA_SET_MAX_TX_POWER_PER_BAND_REQ;
+ msg.reserved = 0;
+ msg.bodyptr = pMaxTxPowerPerBandParams;
+
+ if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MODULE_ID_WDA, &msg))
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s:Not able to post WDA_SET_MAX_TX_POWER_PER_BAND_REQ",
+ __func__);
+ vos_mem_free(pMaxTxPowerPerBandParams);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ return eHAL_STATUS_SUCCESS;
+}
+
+/* ---------------------------------------------------------------------------
+
\fn sme_SetTxPower
\brief Set Transmit Power dynamically. Note: this setting will
diff --git a/CORE/WDA/inc/legacy/halMsgApi.h b/CORE/WDA/inc/legacy/halMsgApi.h
index d010bf8..6bb84a3 100644
--- a/CORE/WDA/inc/legacy/halMsgApi.h
+++ b/CORE/WDA/inc/legacy/halMsgApi.h
@@ -1302,6 +1302,12 @@
tPowerdBm power;
}tMaxTxPowerParams, *tpMaxTxPowerParams;
+typedef struct sMaxTxPowerPerBandParams
+{
+ eCsrBand bandInfo;
+ tPowerdBm power;
+}tMaxTxPowerPerBandParams, *tpMaxTxPowerPerBandParams;
+
typedef struct sAddStaSelfParams
{
tSirMacAddr selfMacAddr;
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 5224d9c..faf933d 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -1006,6 +1006,11 @@
#define WDA_SET_MAX_TX_POWER_REQ SIR_HAL_SET_MAX_TX_POWER_REQ
#define WDA_SET_MAX_TX_POWER_RSP SIR_HAL_SET_MAX_TX_POWER_RSP
+#define WDA_SET_MAX_TX_POWER_PER_BAND_REQ \
+ SIR_HAL_SET_MAX_TX_POWER_PER_BAND_REQ
+#define WDA_SET_MAX_TX_POWER_PER_BAND_RSP \
+ SIR_HAL_SET_MAX_TX_POWER_PER_BAND_RSP
+
#define WDA_SEND_MSG_COMPLETE SIR_HAL_SEND_MSG_COMPLETE
/// PE <-> HAL Host Offload message
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index af81709..0ca8570 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -6436,6 +6436,114 @@
#endif
/*
+ * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
+ * send the response to PE with power value received from WDI
+ */
+void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
+ *pwdiSetMaxTxPowerPerBandRsp,
+ void* pUserData)
+{
+ tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+ tWDA_CbContext *pWDA = NULL;
+ tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
+
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "<------ %s ", __func__);
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWdaParams received NULL", __func__);
+ VOS_ASSERT(0);
+ return ;
+ }
+ pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
+ pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
+ if ( NULL == pMxTxPwrPerBandParams )
+ {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pMxTxPwrPerBandParams received NULL ", __func__);
+ VOS_ASSERT(0);
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+ vos_mem_free(pWdaParams);
+ return;
+ }
+
+ /*need to free memory for the pointers used in the
+ WDA Process.Set Max Tx Power Req function*/
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+ vos_mem_free(pWdaParams);
+ pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
+
+ /* send response to UMAC*/
+ WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
+ pMxTxPwrPerBandParams, 0);
+
+ return;
+}
+
+/*
+ * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
+ * Request to WDI to send set Max Tx Power Per band Request
+ */
+ VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
+ tMaxTxPowerPerBandParams
+ *MaxTxPowerPerBandParams)
+{
+ WDI_Status status = WDI_STATUS_SUCCESS;
+ WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
+ tWDA_ReqParams *pWdaParams = NULL;
+
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "------> %s ", __func__);
+
+ wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
+ sizeof(WDI_SetMaxTxPowerPerBandParamsType));
+
+ if (NULL == wdiSetMxTxPwrPerBandParams)
+ {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __func__);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_NOMEM;
+ }
+ pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __func__);
+ vos_mem_free(wdiSetMxTxPwrPerBandParams);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_NOMEM;
+ }
+ /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
+ wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
+ MaxTxPowerPerBandParams->bandInfo;
+ wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
+ MaxTxPowerPerBandParams->power;
+ wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
+ pWdaParams->pWdaContext = pWDA;
+ pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
+ /* store Params pass it to WDI */
+ pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
+ status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
+ WDA_SetMaxTxPowerPerBandCallBack,
+ pWdaParams);
+ if (IS_WDI_STATUS_FAILURE(status))
+ {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failure in SET MAX TX Power REQ Params WDI API,"
+ " free all the memory");
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+ vos_mem_free(pWdaParams);
+ /* send response to UMAC*/
+ WDA_SendMsg(pWDA,
+ WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
+ MaxTxPowerPerBandParams, 0);
+ }
+ return CONVERT_WDI2VOS_STATUS(status);
+}
+
+/*
* FUNCTION: WDA_SetTxPowerCallBack
* send the response to PE with power value received from WDI
*/
@@ -11667,6 +11775,12 @@
break;
}
#endif
+ case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
+ {
+ WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
+ pMsg->bodyptr);
+ break;
+ }
case WDA_SET_TX_POWER_REQ:
{
WDA_ProcessSetTxPowerReq(pWDA,
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h
index ad8eba7..ccf2c5e 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h
@@ -3219,6 +3219,45 @@
}WDI_SetMaxTxPowerParamsType;
/*---------------------------------------------------------------------------
+ WDI_Band
+---------------------------------------------------------------------------*/
+typedef enum
+{
+ WDI_BAND_ALL,
+ WDI_BAND_24,
+ WDI_BAND_5G,
+ WDI_BAND_MAX,
+}eWDIBand;
+
+/*---------------------------------------------------------------------------
+ WDI_MaxTxPowerPerBandInfoType
+---------------------------------------------------------------------------*/
+typedef struct
+{
+ eWDIBand bandInfo;
+ /* In request power == MaxTxpower to be used.*/
+ wpt_uint8 ucPower;
+}WDI_MaxTxPowerPerBandInfoType;
+
+/*---------------------------------------------------------------------------
+ WDI_SetMaxTxPowerPerBandParamsType
+---------------------------------------------------------------------------*/
+typedef struct
+{
+ /*Link Info*/
+ WDI_MaxTxPowerPerBandInfoType wdiMaxTxPowerPerBandInfo;
+
+ /*Request status callback offered by UMAC - it is called if the current
+ req has returned PENDING as status; it delivers the status of sending
+ the message over the BUS */
+ WDI_ReqStatusCb wdiReqStatusCB;
+
+ /*The user data passed in by UMAC, it will be sent back when the above
+ function pointer will be called */
+ void* pUserData;
+}WDI_SetMaxTxPowerPerBandParamsType;
+
+/*---------------------------------------------------------------------------
WDI_SetTxPowerParamsType
---------------------------------------------------------------------------*/
typedef struct
@@ -3251,6 +3290,19 @@
}WDI_SetMaxTxPowerRspMsg;
/*---------------------------------------------------------------------------
+ WDI_SetMaxTxPowerPerBandRspMsg
+---------------------------------------------------------------------------*/
+typedef struct
+{
+ /* In response, power==tx power used for management frames*/
+ wpt_int8 ucPower;
+
+ /*Result of the operation*/
+ WDI_Status wdiStatus;
+
+}WDI_SetMaxTxPowerPerBandRspMsg;
+
+/*---------------------------------------------------------------------------
WDI_SetTxPowerRspMsg
---------------------------------------------------------------------------*/
@@ -6076,6 +6128,27 @@
void* pUserData);
/*---------------------------------------------------------------------------
+ WDA_SetMaxTxPowerPerBandRspCb
+
+ DESCRIPTION
+
+ This callback is invoked by DAL when it has received a
+ set max Tx Power Per Band response from the underlying device.
+
+ PARAMETERS
+
+ IN
+ wdiSetMaxTxPowerPerBandRsp: response status received from HAL
+ pUserData: user data
+
+ RETURN VALUE
+ The result code associated with performing the operation
+---------------------------------------------------------------------------*/
+typedef void (*WDA_SetMaxTxPowerPerBandRspCb)(WDI_SetMaxTxPowerPerBandRspMsg
+ *wdiSetMaxTxPowerPerBandRsp,
+ void* pUserData);
+
+/*---------------------------------------------------------------------------
WDA_SetTxPowerRspCb
DESCRIPTION
@@ -7906,6 +7979,37 @@
void* pUserData
);
+/**
+ @brief WDI_SetMaxTxPowerPerBandReq will be called when the upper
+ MAC wants to set Max Tx Power to HW for specific band. Upon the
+ call of this API the WLAN DAL will pack and send a HAL
+ Set Max Tx Power Per Band request message to the lower RIVA
+ sub-system if DAL is in state STARTED.
+
+ In state BUSY this request will be queued. Request won't
+ be allowed in any other state.
+
+
+ @param WDI_SetMaxTxPowerPerBandParamsType: Max Tx Per Band Info
+
+ WDA_SetMaxTxPowerPerBandRspCb: This callback is invoked by DAL
+ when it has received a set max Tx Power Per Band response from
+ the underlying device.
+
+ pUserData: user data will be passed back with the
+ callback
+
+ @see WDI_SetMaxTxPowerPerBandReq
+ @return Result of the function call
+*/
+WDI_Status
+WDI_SetMaxTxPowerPerBandReq
+(
+ WDI_SetMaxTxPowerPerBandParamsType* pwdiSetMaxTxPowerPerBandParams,
+ WDA_SetMaxTxPowerPerBandRspCb wdiReqStatusCb,
+ void* pUserData
+);
+
#ifdef FEATURE_WLAN_CCX
/**
@brief WDI_TSMStatsReq will be called by the upper MAC to fetch
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
index 2b9d06a..aa6492c 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
@@ -456,6 +456,8 @@
/* WLAN FW set batch scan request */
WDI_SET_BATCH_SCAN_REQ = 86,
#endif
+ /*WLAN DAL Set Max Tx Power Per band Request*/
+ WDI_SET_MAX_TX_POWER_PER_BAND_REQ = 89,
WDI_MAX_REQ,
@@ -755,6 +757,7 @@
WDI_SET_BATCH_SCAN_RESP = 85,
#endif
+ WDI_SET_MAX_TX_POWER_PER_BAND_RSP = 88,
/*-------------------------------------------------------------------------
Indications
!! Keep these last in the enum if possible
@@ -2249,6 +2252,22 @@
);
/**
+ @brief Process Set Max Tx Power Per Band Request function (called when Main
+ FSM allows it)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status WDI_ProcessSetMaxTxPowerPerBandReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+/**
@brief Process Set Tx Power Request function (called when Main
FSM allows it)
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index b034188..edc182f 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -394,6 +394,17 @@
#else
NULL,
#endif /* FEATURE_WLAN_LPHB */
+#if defined WLAN_FEATURE_RELIABLE_MCAST
+ WDI_ProcessLBPLeaderReq, /* WDI_LBP_LEADER_REQ */
+#else
+ NULL,
+#endif /* WLAN_FEATURE_RELIABLE_MCAST */
+
+#ifdef FEATURE_CESIUM_PROPRIETARY
+ WDI_ProcessIbssPeerInfoReq, /* WDI_HAL_IBSS_PEER_INFO_REQ */
+#else
+ NULL,
+#endif /* FEATURE_CESIUM_PROPRIETARY */
#ifdef FEATURE_WLAN_BATCH_SCAN
WDI_ProcessSetBatchScanReq, /* WDI_SET_BATCH_SCAN_REQ */
@@ -401,6 +412,7 @@
NULL,
#endif /* FEATURE_WLAN_BATCH_SCAN */
+ WDI_ProcessSetMaxTxPowerPerBandReq, /* WDI_SET_MAX_TX_POWER_PER_BAND_REQ*/
/*-------------------------------------------------------------------------
Indications
-------------------------------------------------------------------------*/
@@ -921,6 +933,7 @@
CASE_RETURN_STRING( WDI_SET_STA_BCAST_KEY_REQ );
CASE_RETURN_STRING( WDI_RMV_STA_BCAST_KEY_REQ );
CASE_RETURN_STRING( WDI_SET_MAX_TX_POWER_REQ );
+ CASE_RETURN_STRING( WDI_SET_MAX_TX_POWER_PER_BAND_REQ );
CASE_RETURN_STRING( WDI_P2P_GO_NOTICE_OF_ABSENCE_REQ );
#ifdef FEATURE_WLAN_TDLS
CASE_RETURN_STRING( WDI_TDLS_LINK_ESTABLISH_REQ );
@@ -2932,6 +2945,55 @@
}
/**
+ @brief WDI_SetMaxTxPowerPerBandReq will be called when the upper
+ MAC wants to set Max Tx Power to HW for specific band.
+
+ @param pwdiSetMaxTxPowerPerBandParams: Tx Power Information
+
+ wdiReqStatusCb: callback for passing back the
+ response msg from the device
+
+ pUserData: user data will be passed back with the
+ callback
+
+ @see WDI_SetMaxTxPowerPerBandReq
+ @return Result of the function call
+*/
+WDI_Status
+WDI_SetMaxTxPowerPerBandReq
+(
+ WDI_SetMaxTxPowerPerBandParamsType* pwdiSetMaxTxPowerPerBandParams,
+ WDA_SetMaxTxPowerPerBandRspCb wdiReqStatusCb,
+ void* pUserData
+)
+{
+ WDI_EventInfoType wdiEventData;
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ /*------------------------------------------------------------------------
+ Sanity Check
+ ------------------------------------------------------------------------*/
+ if ( eWLAN_PAL_FALSE == gWDIInitialized )
+ {
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "WDI API call before module is initialized - Fail request");
+
+ return WDI_STATUS_E_NOT_ALLOWED;
+ }
+
+ /*------------------------------------------------------------------------
+ Fill in Event data and post to the Main FSM
+ ------------------------------------------------------------------------*/
+ wdiEventData.wdiRequest = WDI_SET_MAX_TX_POWER_PER_BAND_REQ;
+ wdiEventData.pEventData = pwdiSetMaxTxPowerPerBandParams;
+ wdiEventData.uEventDataSize = sizeof(*pwdiSetMaxTxPowerPerBandParams);
+ wdiEventData.pCBfnc = wdiReqStatusCb;
+ wdiEventData.pUserData = pUserData;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+/**
@brief WDI_SetTxPowerReq will be called when the upper
MAC wants to set Tx Power to HW.
In state BUSY this request will be queued. Request won't
@@ -12613,6 +12675,88 @@
}
+/*
+ @brief Process Set Max Tx Power Per Band Request function (called when Main
+ FSM allows it)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status WDI_ProcessSetMaxTxPowerPerBandReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_SetMaxTxPowerPerBandParamsType* pwdiSetMaxTxPowerPerBandParams = NULL;
+ WDA_SetMaxTxPowerPerBandRspCb wdiSetMaxTxPowerPerBandRspCb;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usDataOffset = 0;
+ wpt_uint16 usSendSize = 0;
+ tpSetMaxTxPwrPerBandReq phalSetMxTxPwrPerBand = NULL;
+ WDI_Status rValue = WDI_STATUS_SUCCESS;
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ /*-------------------------------------------------------------------------
+ Sanity check
+ -------------------------------------------------------------------------*/
+ if (( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData ) ||
+ ( NULL == pEventData->pCBfnc ))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+ pwdiSetMaxTxPowerPerBandParams = \
+ (WDI_SetMaxTxPowerPerBandParamsType*)pEventData->pEventData;
+
+ wdiSetMaxTxPowerPerBandRspCb = \
+ (WDA_SetMaxTxPowerPerBandRspCb)pEventData->pCBfnc;
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ -----------------------------------------------------------------------*/
+
+ rValue = WDI_GetMessageBuffer(pWDICtx,
+ WDI_SET_MAX_TX_POWER_PER_BAND_REQ,
+ sizeof(tSetMaxTxPwrPerBandParams),
+ &pSendBuffer, &usDataOffset, &usSendSize);
+
+ if ((WDI_STATUS_SUCCESS != rValue)|| (usSendSize <
+ (usDataOffset + sizeof(tSetMaxTxPwrPerBandParams))))
+ {
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "Unable to get Set Max Tx Power Per Band req %p %p %p",
+ pEventData, pwdiSetMaxTxPowerPerBandParams,
+ wdiSetMaxTxPowerPerBandRspCb);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+
+ phalSetMxTxPwrPerBand = (tpSetMaxTxPwrPerBandReq)(pSendBuffer + usDataOffset);
+ phalSetMxTxPwrPerBand->setMaxTxPwrPerBandParams.bandInfo = \
+ pwdiSetMaxTxPowerPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo;
+
+ phalSetMxTxPwrPerBand->setMaxTxPwrPerBandParams.power = \
+ pwdiSetMaxTxPowerPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower;
+
+ pWDICtx->wdiReqStatusCB = pwdiSetMaxTxPowerPerBandParams->wdiReqStatusCB;
+ pWDICtx->pReqStatusUserData = pwdiSetMaxTxPowerPerBandParams->pUserData;
+
+ /*-------------------------------------------------------------------------
+ Send Set Max Tx Power Per Band Request to HAL
+ -------------------------------------------------------------------------*/
+ return WDI_SendMsg(pWDICtx, pSendBuffer, usSendSize,
+ wdiSetMaxTxPowerPerBandRspCb, pEventData->pUserData,
+ WDI_SET_MAX_TX_POWER_PER_BAND_RSP);
+}
+
/**
@brief Process Set Tx Power Request function (called when Main
FSM allows it)
@@ -22562,6 +22706,8 @@
return WLAN_HAL_UPDATE_PROBE_RSP_TEMPLATE_REQ;
case WDI_SET_MAX_TX_POWER_REQ:
return WLAN_HAL_SET_MAX_TX_POWER_REQ;
+ case WDI_SET_MAX_TX_POWER_PER_BAND_REQ:
+ return WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_REQ;
case WDI_SET_TX_POWER_REQ:
return WLAN_HAL_SET_TX_POWER_REQ;
case WDI_P2P_GO_NOTICE_OF_ABSENCE_REQ:
@@ -22819,6 +22965,8 @@
return WDI_HAL_TX_PER_HIT_IND;
case WLAN_HAL_SET_MAX_TX_POWER_RSP:
return WDI_SET_MAX_TX_POWER_RESP;
+ case WLAN_HAL_SET_MAX_TX_POWER_PER_BAND_RSP:
+ return WDI_SET_MAX_TX_POWER_PER_BAND_RSP;
case WLAN_HAL_SET_TX_POWER_RSP:
return WDI_SET_TX_POWER_RESP;
case WLAN_HAL_SET_P2P_GONOA_RSP: