qcacld-2.0: Remove the support for iw_set_priv ioctl

iw_set_priv is obsolete, now hdd_ioctl handles the
driver commands.

Remove the code related to iw_set_priv ioctl

CRs-Fixed: 1048052
Change-Id: Ic64a45aab2d23669d6d1219f6d2d8a465d34ac10
This commit is contained in:
SaidiReddy Yenuga 2016-08-09 16:10:39 +05:30 committed by LuK1337
parent 5f24ef8dce
commit 00e5917be1
1 changed files with 1 additions and 436 deletions

View File

@ -3994,69 +3994,6 @@ static int iw_get_linkspeed_priv(struct net_device *dev,
return ret;
}
/*
* Support for the RSSI & RSSI-APPROX private commands
* Per the WiFi framework the response must be of the form
* "<ssid> rssi <xx>"
* unless we are not associated, in which case the response is
* "OK"
*/
static int iw_get_rssi(struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
char *cmd = extra;
int len = wrqu->data.length;
v_S7_t s7Rssi = 0;
hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
int ssidlen = pHddStaCtx->conn_info.SSID.SSID.length;
VOS_STATUS vosStatus;
int rc;
if ((eConnectionState_Associated != pHddStaCtx->conn_info.connState) ||
(0 == ssidlen) || (ssidlen >= len))
{
/* we are not connected or our SSID is too long
so we cannot report an rssi */
rc = scnprintf(cmd, len, "OK");
}
else
{
/* we are connected with a valid SSID
so we can write the SSID into the return buffer
(note that it is not NUL-terminated) */
memcpy(cmd, pHddStaCtx->conn_info.SSID.SSID.ssId, ssidlen );
vosStatus = wlan_hdd_get_rssi(pAdapter, &s7Rssi);
if (VOS_STATUS_SUCCESS == vosStatus)
{
/* append the rssi to the ssid in the format required by
the WiFI Framework */
rc = scnprintf(&cmd[ssidlen], len - ssidlen, " rssi %d", s7Rssi);
rc += ssidlen;
}
else
{
rc = -1;
}
}
/* verify that we wrote a valid response */
if ((rc < 0) || (rc >= len))
{
// encoding or length error?
hddLog(VOS_TRACE_LEVEL_ERROR,
"%s: Unable to encode RSSI, got [%s]",
__func__, cmd);
return -EIO;
}
/* a value is being successfully returned */
return rc;
}
VOS_STATUS wlan_hdd_enter_bmps(hdd_adapter_t *pAdapter, int mode)
{
struct statsContext context;
@ -4288,378 +4225,6 @@ void* wlan_hdd_change_country_code_callback(void *pAdapter)
return NULL;
}
/**
* __iw_set_priv() - SIOCSIWPRIV ioctl handler
* @dev: device upon which the ioctl was received
* @info: ioctl request information
* @wrqu: ioctl request data
* @extra: ioctl extra data
*
* Return: 0 on success, non-zero on error
*/
static int __iw_set_priv(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
char *cmd = NULL;
int cmd_len = wrqu->data.length;
int ret = 0;
int rc = 0;
VOS_STATUS vos_status = VOS_STATUS_SUCCESS;
hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
ENTER();
cmd = mem_alloc_copy_from_user_helper(wrqu->data.pointer,
wrqu->data.length);
if (NULL == cmd)
{
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"mem_alloc_copy_from_user_helper fail");
return -ENOMEM;
}
if (ioctl_debug)
{
pr_info("%s: req [%s] len [%d]\n", __func__, cmd, cmd_len);
}
hddLog(VOS_TRACE_LEVEL_INFO_MED,
"%s: ***Received %s cmd from Wi-Fi GUI***", __func__, cmd);
if (pHddCtx->isLogpInProgress) {
if (ioctl_debug)
{
pr_info("%s: RESTART in progress\n", __func__);
}
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
"%s:LOGP in Progress. Ignore!!!",__func__);
kfree(cmd);
return -EBUSY;
}
if (strncmp(cmd, "CSCAN", 5) == 0 )
{
if (eHAL_STATUS_SUCCESS != iw_set_cscan(dev, info, wrqu, cmd)) {
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: Error in iw_set_scan!", __func__);
rc = -EINVAL;
}
}
else if( strcasecmp(cmd, "start") == 0 ) {
hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "Start command");
/*Exit from Deep sleep or standby if we get the driver START cmd from android GUI*/
vos_status = wlan_hdd_exit_lowpower(pHddCtx, pAdapter);
if (vos_status == VOS_STATUS_SUCCESS)
{
union iwreq_data wrqu;
char buf[10];
memset(&wrqu, 0, sizeof(wrqu));
wrqu.data.length = strlcpy(buf, "START", sizeof(buf));
wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, buf);
}
else
{
hddLog(VOS_TRACE_LEVEL_ERROR, "%s: START CMD Status %d", __func__, vos_status);
rc = -EIO;
}
goto done;
}
else if( strcasecmp(cmd, "stop") == 0 )
{
union iwreq_data wrqu;
char buf[10];
hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "Stop command");
wlan_hdd_enter_lowpower(pHddCtx);
memset(&wrqu, 0, sizeof(wrqu));
wrqu.data.length = strlcpy(buf, "STOP", sizeof(buf));
wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, buf);
goto done;
}
else if (strcasecmp(cmd, "macaddr") == 0)
{
ret = snprintf(cmd, cmd_len, "Macaddr = " MAC_ADDRESS_STR,
MAC_ADDR_ARRAY(pAdapter->macAddressCurrent.bytes));
}
else if (strcasecmp(cmd, "scan-active") == 0)
{
hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
hddLog(VOS_TRACE_LEVEL_ERROR,
FL("making default scan to active"));
pHddCtx->ioctl_scan_mode = eSIR_ACTIVE_SCAN;
ret = snprintf(cmd, cmd_len, "OK");
}
else if (strcasecmp(cmd, "scan-passive") == 0)
{
hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
hddLog(VOS_TRACE_LEVEL_ERROR,
FL("making default scan to active"));
pHddCtx->ioctl_scan_mode = eSIR_PASSIVE_SCAN;
ret = snprintf(cmd, cmd_len, "OK");
}
else if( strcasecmp(cmd, "scan-mode") == 0 )
{
ret = snprintf(cmd, cmd_len, "ScanMode = %u", pAdapter->scan_info.scan_mode);
}
else if( strcasecmp(cmd, "linkspeed") == 0 )
{
ret = iw_get_linkspeed(dev, info, wrqu, cmd);
}
else if( strncasecmp(cmd, "COUNTRY", 7) == 0 ) {
char *country_code;
unsigned long rc;
eHalStatus eHal_status;
country_code = cmd + 8;
init_completion(&pAdapter->change_country_code);
eHal_status = sme_ChangeCountryCode(pHddCtx->hHal,
(void *)(tSmeChangeCountryCallback)wlan_hdd_change_country_code_callback,
country_code,
pAdapter,
pHddCtx->pvosContext,
eSIR_TRUE,
eSIR_TRUE);
/* Wait for completion */
rc = wait_for_completion_timeout(&pAdapter->change_country_code,
msecs_to_jiffies(WLAN_WAIT_TIME_STATS));
if (!rc) {
hddLog(VOS_TRACE_LEVEL_ERROR,
FL("SME timedout while setting country code"));
}
if (eHAL_STATUS_SUCCESS != eHal_status)
{
VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
"%s: SME Change Country code fail", __func__);
kfree(cmd);
return -EIO;
}
}
else if( strncasecmp(cmd, "rssi", 4) == 0 )
{
ret = iw_get_rssi(dev, info, wrqu, cmd);
}
else if( strncasecmp(cmd, "powermode", 9) == 0 ) {
int mode;
char *ptr;
if (9 < cmd_len)
{
ptr = (char*)(cmd + 9);
}else{
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"CMD LENGTH %d is not correct",cmd_len);
kfree(cmd);
return -EINVAL;
}
if (1 != sscanf(ptr,"%d",&mode))
{
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"powermode input %s is not correct",ptr);
kfree(cmd);
return -EIO;
}
if(!pHddCtx->cfg_ini->enablePowersaveOffload)
wlan_hdd_enter_bmps(pAdapter, mode);
else
wlan_hdd_set_powersave(pAdapter, mode);
}
else if (strncasecmp(cmd, "getpower", 8) == 0 ) {
v_U32_t pmc_state;
v_U16_t value;
pmc_state = pmcGetPmcState(WLAN_HDD_GET_HAL_CTX(pAdapter));
if(pmc_state == BMPS) {
value = DRIVER_POWER_MODE_AUTO;
}
else {
value = DRIVER_POWER_MODE_ACTIVE;
}
ret = snprintf(cmd, cmd_len, "powermode = %u", value);
}
else if( strncasecmp(cmd, "btcoexmode", 10) == 0 ) {
hddLog( VOS_TRACE_LEVEL_INFO, "btcoexmode");
/*TODO: set the btcoexmode*/
}
else if( strcasecmp(cmd, "btcoexstat") == 0 ) {
hddLog(VOS_TRACE_LEVEL_INFO, "BtCoex Status");
/*TODO: Return the btcoex status*/
}
else if( strcasecmp(cmd, "rxfilter-start") == 0 ) {
hddLog(VOS_TRACE_LEVEL_INFO, "Rx Data Filter Start command");
/*TODO: Enable Rx data Filter*/
}
else if( strcasecmp(cmd, "rxfilter-stop") == 0 ) {
hddLog(VOS_TRACE_LEVEL_INFO, "Rx Data Filter Stop command");
/*TODO: Disable Rx data Filter*/
}
else if( strcasecmp(cmd, "rxfilter-statistics") == 0 ) {
hddLog( VOS_TRACE_LEVEL_INFO, "Rx Data Filter Statistics command");
/*TODO: rxfilter-statistics*/
}
else if( strncasecmp(cmd, "rxfilter-add", 12) == 0 ) {
hddLog( VOS_TRACE_LEVEL_INFO, "rxfilter-add");
/*TODO: rxfilter-add*/
}
else if( strncasecmp(cmd, "rxfilter-remove",15) == 0 ) {
hddLog( VOS_TRACE_LEVEL_INFO, "rxfilter-remove");
/*TODO: rxfilter-remove*/
}
#ifdef FEATURE_WLAN_SCAN_PNO
else if( strncasecmp(cmd, "pnosetup", 8) == 0 ) {
hddLog( VOS_TRACE_LEVEL_INFO, "pnosetup");
/*TODO: support pnosetup*/
}
else if( strncasecmp(cmd, "pnoforce", 8) == 0 ) {
hddLog( VOS_TRACE_LEVEL_INFO, "pnoforce");
/*TODO: support pnoforce*/
}
else if( strncasecmp(cmd, "pno",3) == 0 ) {
hddLog( VOS_TRACE_LEVEL_INFO, "pno");
ret = iw_set_pno(dev, info, wrqu, cmd, 3);
kfree(cmd);
return ret;
}
#endif /*FEATURE_WLAN_SCAN_PNO*/
else if( strncasecmp(cmd, "powerparams",11) == 0 ) {
hddLog( VOS_TRACE_LEVEL_INFO, "powerparams");
vos_status = iw_set_power_params(dev, info, wrqu, cmd, 11);
kfree(cmd);
return (vos_status == VOS_STATUS_SUCCESS) ? 0 : -EINVAL;
}
else if( 0 == strncasecmp(cmd, "CONFIG-TX-TRACKING", 18) ) {
tSirTxPerTrackingParam tTxPerTrackingParam;
char *ptr;
if (18 < cmd_len)
{
ptr = (char*)(cmd + 18);
}else{
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"CMD LENGTH %d is not correct",cmd_len);
kfree(cmd);
return -EINVAL;
}
if (4 != sscanf(ptr,"%hhu %hhu %hhu %u",
&(tTxPerTrackingParam.ucTxPerTrackingEnable),
&(tTxPerTrackingParam.ucTxPerTrackingPeriod),
&(tTxPerTrackingParam.ucTxPerTrackingRatio),
&(tTxPerTrackingParam.uTxPerTrackingWatermark)))
{
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"CONFIG-TX-TRACKING %s input is not correct",ptr);
kfree(cmd);
return -EIO;
}
// parameters checking
// period has to be larger than 0
if (0 == tTxPerTrackingParam.ucTxPerTrackingPeriod)
{
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "Period input is not correct");
kfree(cmd);
return -EIO;
}
// use default value 5 is the input is not reasonable. in unit of 10%
if ((tTxPerTrackingParam.ucTxPerTrackingRatio > TX_PER_TRACKING_MAX_RATIO) || (0 == tTxPerTrackingParam.ucTxPerTrackingRatio))
{
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "Ratio input is not good. use default 5");
tTxPerTrackingParam.ucTxPerTrackingRatio = TX_PER_TRACKING_DEFAULT_RATIO;
}
// default is 5
if (0 == tTxPerTrackingParam.uTxPerTrackingWatermark)
{
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "Tx Packet number input is not good. use default 5");
tTxPerTrackingParam.uTxPerTrackingWatermark = TX_PER_TRACKING_DEFAULT_WATERMARK;
}
if (eHAL_STATUS_SUCCESS !=
sme_SetTxPerTracking(pHddCtx->hHal,
hdd_tx_per_hit_cb,
(void*)pAdapter, &tTxPerTrackingParam)) {
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, "Set Tx PER Tracking Failed!");
rc = -EIO;
}
}
else {
hddLog( VOS_TRACE_LEVEL_WARN, "%s: Unsupported GUI command %s",
__func__, cmd);
}
done:
/* many of the commands write information back into the command
string using snprintf(). check the return value here in one
place */
if ((ret < 0) || (ret >= cmd_len))
{
/* there was an encoding error or overflow */
rc = -EINVAL;
}
else if (ret > 0)
{
if (copy_to_user(wrqu->data.pointer, cmd, ret))
{
hddLog(VOS_TRACE_LEVEL_ERROR,
"%s: failed to copy data to user buffer", __func__);
kfree(cmd);
return -EFAULT;
}
wrqu->data.length = ret;
}
if (ioctl_debug)
{
pr_info("%s: rsp [%s] len [%d] status %d\n",
__func__, cmd, wrqu->data.length, rc);
}
kfree(cmd);
return rc;
}
/**
* iw_set_priv() - SSR wrapper for __iw_set_priv()
* @dev: pointer to net_device
* @info: pointer to iw_request_info
* @wrqu: pointer to iwreq_data
* @extra: pointer to extra ioctl payload
*
* Return: 0 on success, error number otherwise
*/
static int iw_set_priv(struct net_device *dev, struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
int ret;
vos_ssr_protect(__func__);
ret = __iw_set_priv(dev, info, wrqu, extra);
vos_ssr_unprotect(__func__);
return ret;
}
/**
* __iw_set_nick() - set nick
@ -11408,7 +10973,7 @@ static const iw_handler we_handler[] =
(iw_handler) NULL, /* SIOCGIWSENS */
(iw_handler) NULL, /* SIOCSIWRANGE */
(iw_handler) iw_get_range, /* SIOCGIWRANGE */
(iw_handler) iw_set_priv, /* SIOCSIWPRIV */
(iw_handler) NULL, /* SIOCSIWPRIV */
(iw_handler) NULL, /* SIOCGIWPRIV */
(iw_handler) NULL, /* SIOCSIWSTATS */
(iw_handler) NULL, /* SIOCGIWSTATS */