summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSudha, Daram <dsudha@qti.qualcomm.com>2014-01-05 01:25:21 -0800
committerPrakash Dhavali <pdhavali@qca.qualcomm.com>2014-01-26 00:53:52 -0800
commitfcbf0505d02186ee28e4f12f38ebb2fddb846f1f (patch)
treec613b06416eaa72f51a984360ea436ccf82f3500
parent7edd14ab5ed9f2be95362c865eadd5eb978be267 (diff)
qca-cld: support for greenTx configuration.
The configuration is provided to control greentx feature parameters in firmware. The feature is used to reduce the power consumption while maintaining the throughput. The following iwpriv commands were added. 1."iwpriv wlan0 gtxHTMcs/get_gtxHTMcs" 2. "iwpriv wlan0 gtxVHTMcs/get_gtxVHTMcs" 3. "iwpriv wlan0 gtxUsrCfg/get_gtxUsrCfg" 4."iwpriv wlan0 gtxThre/get_gtxThre" 5."iwpriv wlan0 gtxMargin/get_gtxMargin" 6."iwpriv wlan0 gtxStep/get_gtxStep" 7."iwpriv wlan0 gtxMinTpc/get_gtxMinTpc" 8."iwpriv wlan0 gtxBWMask/get_gtxBWMask" Change-Id: I5c507c664fa2d470099166fe0ac664e3ff6fef87 CRs-Fixed: 594023
-rw-r--r--CORE/HDD/src/wlan_hdd_wext.c254
-rw-r--r--CORE/SERVICES/COMMON/wlan_tgt_def_config.h33
-rw-r--r--CORE/SERVICES/COMMON/wma_api.h1
-rw-r--r--CORE/SERVICES/WMA/wma.c174
-rw-r--r--CORE/SERVICES/WMA/wma.h22
5 files changed, 482 insertions, 2 deletions
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index 243420078334..239fdf781e34 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -212,6 +212,15 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2},
#define WE_SET_BURST_ENABLE 60
#define WE_SET_BURST_DUR 61
+/* GTX Commands */
+#define WE_SET_GTX_HT_MCS 62
+#define WE_SET_GTX_VHT_MCS 63
+#define WE_SET_GTX_USRCFG 64
+#define WE_SET_GTX_THRE 65
+#define WE_SET_GTX_MARGIN 66
+#define WE_SET_GTX_STEP 67
+#define WE_SET_GTX_MINTPC 68
+#define WE_SET_GTX_BWMASK 69
/* Private ioctls and their sub-ioctls */
#define WLAN_PRIV_SET_NONE_GET_INT (SIOCIWFIRSTPRIV + 1)
@@ -260,9 +269,18 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2},
#define WE_GET_QPOWER_MAX_TX_BEFORE_WAKE 42
#define WE_GET_QPOWER_SPEC_PSPOLL_WAKE_INTERVAL 43
#define WE_GET_QPOWER_SPEC_MAX_SPEC_NODATA_PSPOLL 44
-
#define WE_GET_BURST_ENABLE 45
#define WE_GET_BURST_DUR 46
+/* GTX Commands */
+#define WE_GET_GTX_HT_MCS 47
+#define WE_GET_GTX_VHT_MCS 48
+#define WE_GET_GTX_USRCFG 49
+#define WE_GET_GTX_THRE 50
+#define WE_GET_GTX_MARGIN 51
+#define WE_GET_GTX_STEP 52
+#define WE_GET_GTX_MINTPC 53
+#define WE_GET_GTX_BWMASK 54
+
#endif
/* Private ioctls and their sub-ioctls */
@@ -4579,6 +4597,78 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf
break;
}
+ case WE_SET_GTX_HT_MCS:
+ {
+ hddLog(LOG1, "WMI_VDEV_PARAM_GTX_HT_MCS %d", set_value);
+ ret = process_wma_set_command((int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_HT_MCS,
+ set_value, GTX_CMD);
+ break;
+ }
+
+ case WE_SET_GTX_VHT_MCS:
+ {
+ hddLog(LOG1, "WMI_VDEV_PARAM_GTX_VHT_MCS %d", set_value);
+ ret = process_wma_set_command((int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_VHT_MCS,
+ set_value, GTX_CMD);
+ break;
+ }
+
+ case WE_SET_GTX_USRCFG:
+ {
+ hddLog(LOG1, "WMI_VDEV_PARAM_GTX_USR_CFG %d", set_value);
+ ret = process_wma_set_command((int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_USR_CFG,
+ set_value, GTX_CMD);
+ break;
+ }
+
+ case WE_SET_GTX_THRE:
+ {
+ hddLog(LOG1, "WMI_VDEV_PARAM_GTX_THRE %d", set_value);
+ ret = process_wma_set_command((int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_THRE,
+ set_value, GTX_CMD);
+ break;
+ }
+
+ case WE_SET_GTX_MARGIN:
+ {
+ hddLog(LOG1, "WMI_VDEV_PARAM_GTX_MARGIN %d", set_value);
+ ret = process_wma_set_command((int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_MARGIN,
+ set_value, GTX_CMD);
+ break;
+ }
+
+ case WE_SET_GTX_STEP:
+ {
+ hddLog(LOG1, "WMI_VDEV_PARAM_GTX_STEP %d", set_value);
+ ret = process_wma_set_command((int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_STEP,
+ set_value, GTX_CMD);
+ break;
+ }
+
+ case WE_SET_GTX_MINTPC:
+ {
+ hddLog(LOG1, "WMI_VDEV_PARAM_GTX_MINTPC %d", set_value);
+ ret = process_wma_set_command((int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_MINTPC,
+ set_value, GTX_CMD);
+ break;
+ }
+
+ case WE_SET_GTX_BWMASK:
+ {
+ hddLog(LOG1, "WMI_VDEV_PARAM_GTX_BWMASK %d", set_value);
+ ret = process_wma_set_command((int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_BW_MASK,
+ set_value, GTX_CMD);
+ break;
+ }
+
case WE_SET_LDPC:
{
tANI_U32 value;
@@ -5418,6 +5508,86 @@ static int iw_setnone_getint(struct net_device *dev, struct iw_request_info *inf
break;
}
+ case WE_GET_GTX_HT_MCS:
+ {
+ hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_HT_MCS");
+ *value = wma_cli_get_command(wmapvosContext,
+ (int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_HT_MCS,
+ GTX_CMD);
+ break;
+ }
+
+ case WE_GET_GTX_VHT_MCS:
+ {
+ hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_VHT_MCS");
+ *value = wma_cli_get_command(wmapvosContext,
+ (int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_VHT_MCS,
+ GTX_CMD);
+ break;
+ }
+
+ case WE_GET_GTX_USRCFG:
+ {
+ hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_USR_CFG");
+ *value = wma_cli_get_command(wmapvosContext,
+ (int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_USR_CFG,
+ GTX_CMD);
+ break;
+ }
+
+ case WE_GET_GTX_THRE:
+ {
+ hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_THRE");
+ *value = wma_cli_get_command(wmapvosContext,
+ (int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_THRE,
+ GTX_CMD);
+ break;
+ }
+
+ case WE_GET_GTX_MARGIN:
+ {
+ hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_MARGIN");
+ *value = wma_cli_get_command(wmapvosContext,
+ (int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_MARGIN,
+ GTX_CMD);
+ break;
+ }
+
+ case WE_GET_GTX_STEP:
+ {
+ hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_STEP");
+ *value = wma_cli_get_command(wmapvosContext,
+ (int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_STEP,
+ GTX_CMD);
+ break;
+ }
+
+ case WE_GET_GTX_MINTPC:
+ {
+ hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_MINTPC");
+ *value = wma_cli_get_command(wmapvosContext,
+ (int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_MINTPC,
+ GTX_CMD);
+ break;
+ }
+
+ case WE_GET_GTX_BWMASK:
+ {
+ hddLog(LOG1, "GET WMI_VDEV_PARAM_GTX_BW_MASK");
+ *value = wma_cli_get_command(wmapvosContext,
+ (int)pAdapter->sessionId,
+ (int)WMI_VDEV_PARAM_GTX_BW_MASK,
+ GTX_CMD);
+ break;
+ }
+
case WE_GET_LDPC:
{
hddLog(LOG1, "GET WMI_VDEV_PARAM_LDPC");
@@ -9110,9 +9280,49 @@ static const struct iw_priv_args we_private_args[] = {
0,
"cwmenable" },
- { WE_SET_TX_CHAINMASK,
+ { WE_SET_GTX_HT_MCS,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
+ "gtxHTMcs" },
+
+ { WE_SET_GTX_VHT_MCS,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
+ "gtxVHTMcs" },
+
+ { WE_SET_GTX_USRCFG,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
+ "gtxUsrCfg" },
+
+ { WE_SET_GTX_THRE,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
+ "gtxThre" },
+
+ { WE_SET_GTX_MARGIN,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
+ "gtxMargin" },
+
+ { WE_SET_GTX_STEP,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
0,
+ "gtxStep" },
+
+ { WE_SET_GTX_MINTPC,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
+ "gtxMinTpc" },
+
+ { WE_SET_GTX_BWMASK,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
+ "gtxBWMask" },
+
+ { WE_SET_TX_CHAINMASK,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
"txchainmask" },
{ WE_SET_RX_CHAINMASK,
@@ -9399,6 +9609,46 @@ static const struct iw_priv_args we_private_args[] = {
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"get_cwmenable" },
+ { WE_GET_GTX_HT_MCS,
+ 0,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ "get_gtxHTMcs" },
+
+ { WE_GET_GTX_VHT_MCS,
+ 0,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ "get_gtxVHTMcs" },
+
+ { WE_GET_GTX_USRCFG,
+ 0,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ "get_gtxUsrCfg" },
+
+ { WE_GET_GTX_THRE,
+ 0,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ "get_gtxThre" },
+
+ { WE_GET_GTX_MARGIN,
+ 0,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ "get_gtxMargin" },
+
+ { WE_GET_GTX_STEP,
+ 0,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ "get_gtxStep" },
+
+ { WE_GET_GTX_MINTPC,
+ 0,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ "get_gtxMinTpc" },
+
+ { WE_GET_GTX_BWMASK,
+ 0,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ "get_gtxBWMask" },
+
{ WE_GET_TX_CHAINMASK,
0,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
diff --git a/CORE/SERVICES/COMMON/wlan_tgt_def_config.h b/CORE/SERVICES/COMMON/wlan_tgt_def_config.h
index dee90620fab7..866f1b22f29b 100644
--- a/CORE/SERVICES/COMMON/wlan_tgt_def_config.h
+++ b/CORE/SERVICES/COMMON/wlan_tgt_def_config.h
@@ -197,4 +197,37 @@
*/
#define CFG_TGT_NUM_TDLS_CONN_TABLE_ENTRIES 32
+/*
+ * ht enable highest MCS by default
+ */
+#define CFG_TGT_DEFAULT_GTX_HT_MASK 0x8080
+/*
+ * vht enable highest MCS by default
+ */
+#define CFG_TGT_DEFAULT_GTX_VHT_MASK 0x80200
+/*
+ * resv for furture use, bit 30 is used for fix tpc, bit0-3 for Power save balance
+ */
+#define CFG_TGT_DEFAULT_GTX_USR_CFG 0xa
+/*
+ * threshold to enable GTX
+ */
+#define CFG_TGT_DEFAULT_GTX_PER_THRESHOLD 3
+/*
+ * margin to move back when per > margin + threshold
+ */
+#define CFG_TGT_DEFAULT_GTX_PER_MARGIN 2
+/*
+ * step for every move
+ */
+#define CFG_TGT_DEFAULT_GTX_TPC_STEP 1
+/*
+ * lowest TPC
+ */
+#define CFG_TGT_DEFAULT_GTX_TPC_MIN 0
+/*
+ * enable all BW 20/40/80/160
+ */
+#define CFG_TGT_DEFAULT_GTX_BW_MASK 0xf
+
#endif /*__WLAN_TGT_DEF_CONFIG_H__ */
diff --git a/CORE/SERVICES/COMMON/wma_api.h b/CORE/SERVICES/COMMON/wma_api.h
index e6b12588e10c..f0c834a7dc45 100644
--- a/CORE/SERVICES/COMMON/wma_api.h
+++ b/CORE/SERVICES/COMMON/wma_api.h
@@ -82,6 +82,7 @@ typedef enum {
#define DBG_CMD 4
#define PPS_CMD 5
#define QPOWER_CMD 6
+#define GTX_CMD 7
#ifdef QCA_WIFI_ISOC
VOS_STATUS wma_nv_download_start(v_VOID_t *vos_context);
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index afa0b86ad540..a6de6405a364 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -4846,6 +4846,15 @@ static VOS_STATUS wma_vdev_start(tp_wma_handle wma,
intr[cmd->vdev_id].chanmode = chanmode; /* save channel mode */
intr[cmd->vdev_id].ht_capable = req->ht_capable;
intr[cmd->vdev_id].vht_capable = req->vht_capable;
+ intr[cmd->vdev_id].config.gtx_info.gtxRTMask[0] = CFG_TGT_DEFAULT_GTX_HT_MASK;
+ intr[cmd->vdev_id].config.gtx_info.gtxRTMask[1] = CFG_TGT_DEFAULT_GTX_VHT_MASK;
+ intr[cmd->vdev_id].config.gtx_info.gtxUsrcfg = CFG_TGT_DEFAULT_GTX_USR_CFG;
+ intr[cmd->vdev_id].config.gtx_info.gtxPERThreshold = CFG_TGT_DEFAULT_GTX_PER_THRESHOLD;
+ intr[cmd->vdev_id].config.gtx_info.gtxPERMargin = CFG_TGT_DEFAULT_GTX_PER_MARGIN;
+ intr[cmd->vdev_id].config.gtx_info.gtxTPCstep = CFG_TGT_DEFAULT_GTX_TPC_STEP;
+ intr[cmd->vdev_id].config.gtx_info.gtxTPCMin = CFG_TGT_DEFAULT_GTX_TPC_MIN;
+ intr[cmd->vdev_id].config.gtx_info.gtxBWMask = CFG_TGT_DEFAULT_GTX_BW_MASK;
+
WMI_SET_CHANNEL_MODE(chan, chanmode);
chan->band_center_freq1 = chan->mhz;
@@ -5778,6 +5787,41 @@ static int32_t wmi_unified_set_sta_ps_param(wmi_unified_t wmi_handle,
return 0;
}
+static int
+wmi_unified_vdev_set_gtx_cfg_send(wmi_unified_t wmi_handle, u_int32_t if_id,
+ gtx_config_t *gtx_info)
+{
+ wmi_vdev_set_gtx_params_cmd_fixed_param *cmd;
+ wmi_buf_t buf;
+ int len = sizeof(wmi_vdev_set_gtx_params_cmd_fixed_param);
+ buf = wmi_buf_alloc(wmi_handle, len);
+ if (!buf) {
+ WMA_LOGE("%s:wmi_buf_alloc failed\n", __FUNCTION__);
+ return -1;
+ }
+ cmd = (wmi_vdev_set_gtx_params_cmd_fixed_param *)wmi_buf_data(buf);
+ WMITLV_SET_HDR(&cmd->tlv_header,
+ WMITLV_TAG_STRUC_wmi_vdev_set_gtx_params_cmd_fixed_param,
+ WMITLV_GET_STRUCT_TLVLEN(wmi_vdev_set_gtx_params_cmd_fixed_param));
+ cmd->vdev_id = if_id;
+
+ cmd->gtxRTMask[0] = gtx_info->gtxRTMask[0];
+ cmd->gtxRTMask[1] = gtx_info->gtxRTMask[1];
+ cmd->userGtxMask = gtx_info->gtxUsrcfg;
+ cmd->gtxPERThreshold = gtx_info->gtxPERThreshold;
+ cmd->gtxPERMargin = gtx_info->gtxPERMargin;
+ cmd->gtxTPCstep = gtx_info->gtxTPCstep;
+ cmd->gtxTPCMin = gtx_info->gtxTPCMin;
+ cmd->gtxBWMask = gtx_info->gtxBWMask;
+
+ WMA_LOGD("Setting vdev%d GTX values:htmcs 0x%x, vhtmcs 0x%x, usermask 0x%x, \
+ gtxPERThreshold %d, gtxPERMargin %d, gtxTPCstep %d, gtxTPCMin %d, \
+ gtxBWMask 0x%x.\n", if_id, cmd->gtxRTMask[0], cmd->gtxRTMask[1],
+ cmd->userGtxMask, cmd->gtxPERThreshold, cmd->gtxPERMargin,
+ cmd->gtxTPCstep, cmd->gtxTPCMin, cmd->gtxBWMask);
+ return wmi_unified_cmd_send(wmi_handle, buf, len, WMI_VDEV_SET_GTX_PARAMS_CMDID);
+}
+
static void wma_process_cli_set_cmd(tp_wma_handle wma,
wda_cli_set_cmd_t *privcmd)
{
@@ -6067,6 +6111,73 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma,
break;
}
break;
+ case GTX_CMD:
+ WMA_LOGD("vdev id %d pid %d pval %d", privcmd->param_vdev_id,
+ privcmd->param_id, privcmd->param_value);
+ switch (privcmd->param_id) {
+ case WMI_VDEV_PARAM_GTX_HT_MCS:
+ intr[vid].config.gtx_info.gtxRTMask[0] = privcmd->param_value;
+ ret = wmi_unified_vdev_set_gtx_cfg_send(wma->wmi_handle,
+ privcmd->param_vdev_id,
+ &intr[vid].config.gtx_info);
+ break;
+ case WMI_VDEV_PARAM_GTX_VHT_MCS:
+ intr[vid].config.gtx_info.gtxRTMask[1] = privcmd->param_value;
+ ret = wmi_unified_vdev_set_gtx_cfg_send(wma->wmi_handle,
+ privcmd->param_vdev_id,
+ &intr[vid].config.gtx_info);
+ break;
+
+ case WMI_VDEV_PARAM_GTX_USR_CFG:
+ intr[vid].config.gtx_info.gtxUsrcfg = privcmd->param_value;
+ ret = wmi_unified_vdev_set_gtx_cfg_send(wma->wmi_handle,
+ privcmd->param_vdev_id,
+ &intr[vid].config.gtx_info);
+ break;
+
+ case WMI_VDEV_PARAM_GTX_THRE:
+ intr[vid].config.gtx_info.gtxPERThreshold = privcmd->param_value;
+ ret = wmi_unified_vdev_set_gtx_cfg_send(wma->wmi_handle,
+ privcmd->param_vdev_id,
+ &intr[vid].config.gtx_info);
+ break;
+
+ case WMI_VDEV_PARAM_GTX_MARGIN:
+ intr[vid].config.gtx_info.gtxPERMargin = privcmd->param_value;
+ ret = wmi_unified_vdev_set_gtx_cfg_send(wma->wmi_handle,
+ privcmd->param_vdev_id,
+ &intr[vid].config.gtx_info);
+ break;
+
+ case WMI_VDEV_PARAM_GTX_STEP:
+ intr[vid].config.gtx_info.gtxTPCstep = privcmd->param_value;
+ ret = wmi_unified_vdev_set_gtx_cfg_send(wma->wmi_handle,
+ privcmd->param_vdev_id,
+ &intr[vid].config.gtx_info);
+ break;
+
+ case WMI_VDEV_PARAM_GTX_MINTPC:
+ intr[vid].config.gtx_info.gtxTPCMin = privcmd->param_value;
+ ret = wmi_unified_vdev_set_gtx_cfg_send(wma->wmi_handle,
+ privcmd->param_vdev_id,
+ &intr[vid].config.gtx_info);
+ break;
+
+ case WMI_VDEV_PARAM_GTX_BW_MASK:
+ intr[vid].config.gtx_info.gtxBWMask = privcmd->param_value;
+ ret = wmi_unified_vdev_set_gtx_cfg_send(wma->wmi_handle,
+ privcmd->param_vdev_id,
+ &intr[vid].config.gtx_info);
+ if (ret) {
+ WMA_LOGE("wmi_unified_vdev_set_param_send"
+ " failed ret %d", ret);
+ return;
+ }
+ break;
+ default:
+ break;
+ }
+ break;
default:
WMA_LOGE("Invalid vpdev command id");
@@ -6207,6 +6318,32 @@ int wma_cli_get_command(void *wmapvosContext, int vdev_id,
case WMI_VDEV_PARAM_NSS:
ret = intr[vdev_id].config.nss;
break;
+#ifdef QCA_SUPPORT_GTX
+ case WMI_VDEV_PARAM_GTX_HT_MCS:
+ ret = intr[vdev_id].config.gtx_info.gtxRTMask[0];
+ break;
+ case WMI_VDEV_PARAM_GTX_VHT_MCS:
+ ret = intr[vdev_id].config.gtx_info.gtxRTMask[1];
+ break;
+ case WMI_VDEV_PARAM_GTX_USR_CFG:
+ ret = intr[vdev_id].config.gtx_info.gtxUsrcfg;
+ break;
+ case WMI_VDEV_PARAM_GTX_THRE:
+ ret = intr[vdev_id].config.gtx_info.gtxPERThreshold;
+ break;
+ case WMI_VDEV_PARAM_GTX_MARGIN:
+ ret = intr[vdev_id].config.gtx_info.gtxPERMargin;
+ break;
+ case WMI_VDEV_PARAM_GTX_STEP:
+ ret = intr[vdev_id].config.gtx_info.gtxTPCstep;
+ break;
+ case WMI_VDEV_PARAM_GTX_MINTPC:
+ ret = intr[vdev_id].config.gtx_info.gtxTPCMin;
+ break;
+ case WMI_VDEV_PARAM_GTX_BW_MASK:
+ ret = intr[vdev_id].config.gtx_info.gtxBWMask;
+ break;
+#endif
case WMI_VDEV_PARAM_LDPC:
ret = intr[vdev_id].config.ldpc;
break;
@@ -6351,6 +6488,37 @@ int wma_cli_get_command(void *wmapvosContext, int vdev_id,
" yet implemented 0x%x", param_id);
return -EINVAL;
}
+ } else if (GTX_CMD == vpdev) {
+ switch (param_id) {
+ case WMI_VDEV_PARAM_GTX_HT_MCS:
+ ret = intr[vdev_id].config.gtx_info.gtxRTMask[0];
+ break;
+ case WMI_VDEV_PARAM_GTX_VHT_MCS:
+ ret = intr[vdev_id].config.gtx_info.gtxRTMask[1];
+ break;
+ case WMI_VDEV_PARAM_GTX_USR_CFG:
+ ret = intr[vdev_id].config.gtx_info.gtxUsrcfg;
+ break;
+ case WMI_VDEV_PARAM_GTX_THRE:
+ ret = intr[vdev_id].config.gtx_info.gtxPERThreshold;
+ break;
+ case WMI_VDEV_PARAM_GTX_MARGIN:
+ ret = intr[vdev_id].config.gtx_info.gtxPERMargin;
+ break;
+ case WMI_VDEV_PARAM_GTX_STEP:
+ ret = intr[vdev_id].config.gtx_info.gtxTPCstep;
+ break;
+ case WMI_VDEV_PARAM_GTX_MINTPC:
+ ret = intr[vdev_id].config.gtx_info.gtxTPCMin;
+ break;
+ case WMI_VDEV_PARAM_GTX_BW_MASK:
+ ret = intr[vdev_id].config.gtx_info.gtxBWMask;
+ break;
+ default:
+ WMA_LOGE("Invalid generic vdev command/Not"
+ " yet implemented 0x%x", param_id);
+ return -EINVAL;
+ }
}
return ret;
}
@@ -6457,6 +6625,7 @@ wma_vdev_set_bss_params(tp_wma_handle wma, int vdev_id,
{
int ret;
uint32_t slot_time;
+ struct wma_txrx_node *intr = wma->interfaces;
/* Beacon Interval setting */
ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id,
@@ -6466,6 +6635,11 @@ wma_vdev_set_bss_params(tp_wma_handle wma, int vdev_id,
if (ret)
WMA_LOGE("failed to set WMI_VDEV_PARAM_BEACON_INTERVAL\n");
+ ret = wmi_unified_vdev_set_gtx_cfg_send(wma->wmi_handle, vdev_id,
+ &intr[vdev_id].config.gtx_info);
+ if (ret)
+ WMA_LOGE("failed to set WMI_VDEV_PARAM_DTIM_PERIOD\n");
+
ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id,
WMI_VDEV_PARAM_DTIM_PERIOD,
dtimPeriod);
diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h
index 40a546c675ab..934100c17fd9 100644
--- a/CORE/SERVICES/WMA/wma.h
+++ b/CORE/SERVICES/WMA/wma.h
@@ -302,6 +302,16 @@ struct qpower_params {
};
typedef struct {
+ u_int32_t gtxRTMask[2]; /* for HT and VHT rate masks */
+ u_int32_t gtxUsrcfg; /* host request for GTX mask */
+ u_int32_t gtxPERThreshold; /* default: 10% */
+ u_int32_t gtxPERMargin; /* default: 2% */
+ u_int32_t gtxTPCstep; /* default: 1 */
+ u_int32_t gtxTPCMin; /* default: 5 */
+ u_int32_t gtxBWMask; /* 20/40/80/160 Mhz */
+}gtx_config_t;
+
+typedef struct {
u_int32_t ani_enable;
u_int32_t ani_poll_len;
u_int32_t ani_listen_len;
@@ -330,6 +340,7 @@ typedef struct {
u_int32_t amsdu;
struct pps pps_params;
struct qpower_params qpower_params;
+ gtx_config_t gtx_info;
} vdev_cli_config_t;
#define WMA_WOW_PTRN_MASK_VALID 0xFF
@@ -1314,6 +1325,17 @@ typedef enum {
WMI_VDEV_VHT_SET_GID_MGMT = 9
} packet_power_save;
+typedef enum {
+ WMI_VDEV_PARAM_GTX_HT_MCS,
+ WMI_VDEV_PARAM_GTX_VHT_MCS,
+ WMI_VDEV_PARAM_GTX_USR_CFG,
+ WMI_VDEV_PARAM_GTX_THRE,
+ WMI_VDEV_PARAM_GTX_MARGIN,
+ WMI_VDEV_PARAM_GTX_STEP,
+ WMI_VDEV_PARAM_GTX_MINTPC,
+ WMI_VDEV_PARAM_GTX_BW_MASK,
+}green_tx_param;
+
#define WMA_DEFAULT_QPOWER_MAX_PSPOLL_BEFORE_WAKE 1
#define WMA_DEFAULT_QPOWER_TX_WAKE_THRESHOLD 2
#define WMA_DEFAULT_SIFS_BURST_DURATION 8160