summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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