summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajesh Babu Prathipati <c_rbprat@qti.qualcomm.com>2014-05-30 10:08:16 +0530
committerAkash Patel <c_akashp@qca.qualcomm.com>2014-07-23 17:47:52 -0700
commit1dccf672c11ea92c2068bdf2b19617d5f97bd87d (patch)
treea3eec04caf9e884efb5c22999076a3f7a069e302
parent8f061aa7b98407846db88f88fafbadce0d402501 (diff)
wlan: Interface to set/get active/passive min/max channel dwell time.
Provide an interface to dynamically change active/passive min/max dwell time. The existing set and get "dwelltime" ioctls are enhanced to set and get the active/passive min/max channel dwell times. Change-Id: Ib4dfdbf816ea2286e884fb1698e2b0c80c79f662 CRs-Fixed: 696817
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c144
1 files changed, 126 insertions, 18 deletions
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index a34eebd29063..5dfc77779aba 100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -3514,6 +3514,128 @@ static int hdd_parse_setmaxtxpower_command(tANI_U8 *pValue, int *pTxPower)
} /*End of hdd_parse_setmaxtxpower_command*/
+static int hdd_get_dwell_time(hdd_config_t *pCfg, tANI_U8 *command, char *extra, tANI_U8 n, tANI_U8 *len)
+{
+ int ret = 0;
+
+ if (!pCfg || !command || !extra || !len)
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: argument passed for GETDWELLTIME is incorrect", __func__);
+ ret = -EINVAL;
+ return ret;
+ }
+
+ if (strncmp(command, "GETDWELLTIME ACTIVE MAX", 23) == 0)
+ {
+ *len = scnprintf(extra, n, "GETDWELLTIME ACTIVE MAX %u\n",
+ (int)pCfg->nActiveMaxChnTime);
+ return ret;
+ }
+ else if (strncmp(command, "GETDWELLTIME ACTIVE MIN", 23) == 0)
+ {
+ *len = scnprintf(extra, n, "GETDWELLTIME ACTIVE MIN %u\n",
+ (int)pCfg->nActiveMinChnTime);
+ return ret;
+ }
+ else if (strncmp(command, "GETDWELLTIME PASSIVE MAX", 24) == 0)
+ {
+ *len = scnprintf(extra, n, "GETDWELLTIME PASSIVE MAX %u\n",
+ (int)pCfg->nPassiveMaxChnTime);
+ return ret;
+ }
+ else if (strncmp(command, "GETDWELLTIME PASSIVE MIN", 24) == 0)
+ {
+ *len = scnprintf(extra, n, "GETDWELLTIME PASSIVE MIN %u\n",
+ (int)pCfg->nPassiveMinChnTime);
+ return ret;
+ }
+ else
+ {
+ ret = -EINVAL;
+ }
+
+ return ret;
+}
+
+static int hdd_set_dwell_time(hdd_adapter_t *pAdapter, tANI_U8 *command)
+{
+ hdd_config_t *pCfg;
+ tANI_U8 *value = command;
+ int val = 0, ret = 0, temp = 0;
+
+ if (!pAdapter || !command || !(pCfg = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini))
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: argument passed for SETDWELLTIME is incorrect", __func__);
+ ret = -EINVAL;
+ return ret;
+ }
+
+ if (strncmp(command, "SETDWELLTIME ACTIVE MAX", 23) == 0 )
+ {
+ value = value + 24;
+ temp = kstrtou32(value, 10, &val);
+ if (temp != 0 || val < CFG_ACTIVE_MAX_CHANNEL_TIME_MIN ||
+ val > CFG_ACTIVE_MAX_CHANNEL_TIME_MAX )
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: argument passed for SETDWELLTIME ACTIVE MAX is incorrect", __func__);
+ ret = -EFAULT;
+ return ret;
+ }
+ pCfg->nActiveMaxChnTime = val;
+ }
+ else if (strncmp(command, "SETDWELLTIME ACTIVE MIN", 23) == 0)
+ {
+ value = value + 24;
+ temp = kstrtou32(value, 10, &val);
+ if (temp !=0 || val < CFG_ACTIVE_MIN_CHANNEL_TIME_MIN ||
+ val > CFG_ACTIVE_MIN_CHANNEL_TIME_MAX )
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: argument passed for SETDWELLTIME ACTIVE MIN is incorrect", __func__);
+ ret = -EFAULT;
+ return ret;
+ }
+ pCfg->nActiveMinChnTime = val;
+ }
+ else if (strncmp(command, "SETDWELLTIME PASSIVE MAX", 24) == 0)
+ {
+ value = value + 25;
+ temp = kstrtou32(value, 10, &val);
+ if (temp != 0 || val < CFG_PASSIVE_MAX_CHANNEL_TIME_MIN ||
+ val > CFG_PASSIVE_MAX_CHANNEL_TIME_MAX )
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: argument passed for SETDWELLTIME PASSIVE MAX is incorrect", __func__);
+ ret = -EFAULT;
+ return ret;
+ }
+ pCfg->nPassiveMaxChnTime = val;
+ }
+ else if (strncmp(command, "SETDWELLTIME PASSIVE MIN", 24) == 0)
+ {
+ value = value + 25;
+ temp = kstrtou32(value, 10, &val);
+ if (temp != 0 || val < CFG_PASSIVE_MIN_CHANNEL_TIME_MIN ||
+ val > CFG_PASSIVE_MIN_CHANNEL_TIME_MAX )
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: argument passed for SETDWELLTIME PASSIVE MIN is incorrect", __func__);
+ ret = -EFAULT;
+ return ret;
+ }
+ pCfg->nPassiveMinChnTime = val;
+ }
+ else
+ {
+ ret = -EINVAL;
+ }
+
+ return ret;
+}
+
static int hdd_driver_command(hdd_adapter_t *pAdapter,
hdd_priv_data_t *ppriv_data)
{
@@ -5083,9 +5205,9 @@ static int hdd_driver_command(hdd_adapter_t *pAdapter,
char extra[32];
tANI_U8 len = 0;
- len = scnprintf(extra, sizeof(extra), "GETDWELLTIME %u\n",
- (int)pCfg->nActiveMaxChnTime);
- if (copy_to_user(priv_data.buf, &extra, len + 1))
+ memset(extra, 0, sizeof(extra));
+ ret = hdd_get_dwell_time(pCfg, command, extra, sizeof(extra), &len);
+ if (ret != 0 || copy_to_user(priv_data.buf, &extra, len + 1))
{
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: failed to copy data to user buffer", __func__);
@@ -5096,21 +5218,7 @@ static int hdd_driver_command(hdd_adapter_t *pAdapter,
}
else if (strncmp(command, "SETDWELLTIME", 12) == 0)
{
- tANI_U8 *value = command;
- hdd_config_t *pCfg = (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini;
- int val = 0, temp;
-
- value = value + 13;
- temp = kstrtou32(value, 10, &val);
- if ( temp != 0 || val < CFG_ACTIVE_MAX_CHANNEL_TIME_MIN ||
- val > CFG_ACTIVE_MAX_CHANNEL_TIME_MAX )
- {
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s: argument passed for SETDWELLTIME is incorrect", __func__);
- ret = -EFAULT;
- goto exit;
- }
- pCfg->nActiveMaxChnTime = val;
+ ret = hdd_set_dwell_time(pAdapter, command);
}
else if ( strncasecmp(command, "MIRACAST", 8) == 0 )
{