qcacld-3.0: Relocate hdd_reg_set_band()

Function hdd_reg_set_band() is currently located in wlan_hdd_wext.c,
but this function is independent of wireless extensions, so relocate
it as part of the plan to omit wlan_hdd_wext.c from the build when
wireless extensions is not enabled.

Change-Id: Ia1a359a7781bef6017baf17c8be53c2f9bab2517
CRs-Fixed: 2229769
This commit is contained in:
Jeff Johnson 2018-04-23 16:21:00 -07:00 committed by nshrivas
parent d81ab0571c
commit b9d65f24a3
2 changed files with 122 additions and 122 deletions

View File

@ -38,6 +38,7 @@
#include "wlan_hdd_regulatory.h"
#include <wlan_reg_ucfg_api.h>
#include "cds_regdomain.h"
#include "cds_utils.h"
#include "pld_common.h"
#define REG_RULE_2412_2462 REG_RULE(2412-10, 2462+10, 40, 0, 20, 0)
@ -709,6 +710,127 @@ int hdd_reg_set_country(struct hdd_context *hdd_ctx, char *country_code)
return qdf_status_to_os_return(status);
}
int hdd_reg_set_band(struct net_device *dev, u8 ui_band)
{
struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(adapter);
enum band_info band;
QDF_STATUS status;
struct hdd_context *hdd_ctx;
enum band_info currBand;
enum band_info connectedBand;
long lrc;
hdd_ctx = WLAN_HDD_GET_CTX(adapter);
switch (ui_band) {
case WLAN_HDD_UI_BAND_AUTO:
band = BAND_ALL;
break;
case WLAN_HDD_UI_BAND_5_GHZ:
band = BAND_5G;
break;
case WLAN_HDD_UI_BAND_2_4_GHZ:
band = BAND_2G;
break;
default:
hdd_err("Invalid band value %u", ui_band);
return -EINVAL;
}
hdd_debug("change band to %u", band);
if ((band == BAND_2G && hdd_ctx->config->nBandCapability == 2) ||
(band == BAND_5G && hdd_ctx->config->nBandCapability == 1) ||
(band == BAND_ALL && hdd_ctx->config->nBandCapability != 0)) {
hdd_err("band value %u violate INI settings %u",
band, hdd_ctx->config->nBandCapability);
return -EIO;
}
if (band == BAND_ALL) {
hdd_debug("Auto band received. Setting band same as ini value %d",
hdd_ctx->config->nBandCapability);
band = hdd_ctx->config->nBandCapability;
}
if (QDF_STATUS_SUCCESS != ucfg_reg_get_curr_band(hdd_ctx->hdd_pdev,
&currBand)) {
hdd_debug("Failed to get current band config");
return -EIO;
}
if (currBand == band)
return 0;
hdd_ctx->curr_band = band;
/* Change band request received.
* Abort pending scan requests, flush the existing scan results,
* and change the band capability
*/
hdd_debug("Current band value = %u, new setting %u ",
currBand, band);
hdd_for_each_adapter(hdd_ctx, adapter) {
hHal = WLAN_HDD_GET_HAL_CTX(adapter);
wlan_abort_scan(hdd_ctx->hdd_pdev, INVAL_PDEV_ID,
adapter->session_id, INVALID_SCAN_ID, false);
connectedBand = hdd_conn_get_connected_band(
WLAN_HDD_GET_STATION_CTX_PTR(adapter));
/* Handling is done only for STA and P2P */
if (band != BAND_ALL &&
((adapter->device_mode == QDF_STA_MODE) ||
(adapter->device_mode == QDF_P2P_CLIENT_MODE)) &&
(hdd_conn_is_connected(
WLAN_HDD_GET_STATION_CTX_PTR(adapter)))
&& (connectedBand != band)) {
status = QDF_STATUS_SUCCESS;
/* STA already connected on current
* band, So issue disconnect first,
* then change the band
*/
hdd_debug("STA (Device mode %s(%d)) connected in band %u, Changing band to %u, Issuing Disconnect",
hdd_device_mode_to_string(adapter->device_mode),
adapter->device_mode, currBand, band);
INIT_COMPLETION(adapter->disconnect_comp_var);
status = sme_roam_disconnect(
WLAN_HDD_GET_HAL_CTX(adapter),
adapter->session_id,
eCSR_DISCONNECT_REASON_UNSPECIFIED);
if (QDF_STATUS_SUCCESS != status) {
hdd_err("sme_roam_disconnect failure, status: %d",
(int)status);
return -EINVAL;
}
lrc = wait_for_completion_timeout(
&adapter->disconnect_comp_var,
msecs_to_jiffies(
WLAN_WAIT_TIME_DISCONNECT));
if (lrc == 0) {
hdd_err("Timeout while waiting for csr_roam_disconnect");
return -ETIMEDOUT;
}
}
sme_scan_flush_result(hHal);
}
if (QDF_IS_STATUS_ERROR(ucfg_reg_set_band(hdd_ctx->hdd_pdev, band))) {
hdd_err("Failed to set the band value to %u", band);
return -EINVAL;
}
return 0;
}
/**
* hdd_restore_custom_reg_settings() - restore custom reg settings
* @wiphy: wiphy structure

View File

@ -8900,128 +8900,6 @@ static int iw_set_pno(struct net_device *dev,
}
#endif /* FEATURE_WLAN_SCAN_PNO */
/* Common function to SetBand */
int hdd_reg_set_band(struct net_device *dev, u8 ui_band)
{
struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(adapter);
enum band_info band;
QDF_STATUS status;
struct hdd_context *hdd_ctx;
enum band_info currBand;
enum band_info connectedBand;
long lrc;
hdd_ctx = WLAN_HDD_GET_CTX(adapter);
switch (ui_band) {
case WLAN_HDD_UI_BAND_AUTO:
band = BAND_ALL;
break;
case WLAN_HDD_UI_BAND_5_GHZ:
band = BAND_5G;
break;
case WLAN_HDD_UI_BAND_2_4_GHZ:
band = BAND_2G;
break;
default:
hdd_err("Invalid band value %u", ui_band);
return -EINVAL;
}
hdd_debug("change band to %u", band);
if ((band == BAND_2G && hdd_ctx->config->nBandCapability == 2) ||
(band == BAND_5G && hdd_ctx->config->nBandCapability == 1) ||
(band == BAND_ALL && hdd_ctx->config->nBandCapability != 0)) {
hdd_err("band value %u violate INI settings %u",
band, hdd_ctx->config->nBandCapability);
return -EIO;
}
if (band == BAND_ALL) {
hdd_debug("Auto band received. Setting band same as ini value %d",
hdd_ctx->config->nBandCapability);
band = hdd_ctx->config->nBandCapability;
}
if (QDF_STATUS_SUCCESS != ucfg_reg_get_curr_band(hdd_ctx->hdd_pdev,
&currBand)) {
hdd_debug("Failed to get current band config");
return -EIO;
}
if (currBand == band)
return 0;
hdd_ctx->curr_band = band;
/* Change band request received.
* Abort pending scan requests, flush the existing scan results,
* and change the band capability
*/
hdd_debug("Current band value = %u, new setting %u ",
currBand, band);
hdd_for_each_adapter(hdd_ctx, adapter) {
hHal = WLAN_HDD_GET_HAL_CTX(adapter);
wlan_abort_scan(hdd_ctx->hdd_pdev, INVAL_PDEV_ID,
adapter->session_id, INVALID_SCAN_ID, false);
connectedBand = hdd_conn_get_connected_band(
WLAN_HDD_GET_STATION_CTX_PTR(adapter));
/* Handling is done only for STA and P2P */
if (band != BAND_ALL &&
((adapter->device_mode == QDF_STA_MODE) ||
(adapter->device_mode == QDF_P2P_CLIENT_MODE)) &&
(hdd_conn_is_connected(
WLAN_HDD_GET_STATION_CTX_PTR(adapter)))
&& (connectedBand != band)) {
status = QDF_STATUS_SUCCESS;
/* STA already connected on current
* band, So issue disconnect first,
* then change the band
*/
hdd_debug("STA (Device mode %s(%d)) connected in band %u, Changing band to %u, Issuing Disconnect",
hdd_device_mode_to_string(adapter->device_mode),
adapter->device_mode, currBand, band);
INIT_COMPLETION(adapter->disconnect_comp_var);
status = sme_roam_disconnect(
WLAN_HDD_GET_HAL_CTX(adapter),
adapter->session_id,
eCSR_DISCONNECT_REASON_UNSPECIFIED);
if (QDF_STATUS_SUCCESS != status) {
hdd_err("sme_roam_disconnect failure, status: %d",
(int)status);
return -EINVAL;
}
lrc = wait_for_completion_timeout(
&adapter->disconnect_comp_var,
msecs_to_jiffies(
WLAN_WAIT_TIME_DISCONNECT));
if (lrc == 0) {
hdd_err("Timeout while waiting for csr_roam_disconnect");
return -ETIMEDOUT;
}
}
sme_scan_flush_result(hHal);
}
if (QDF_IS_STATUS_ERROR(ucfg_reg_set_band(hdd_ctx->hdd_pdev, band))) {
hdd_err("Failed to set the band value to %u", band);
return -EINVAL;
}
return 0;
}
static int __iw_set_band_config(struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)