qcacld-3.0: Add vendor command support for setband

This is a qcacld-2.0 to qcacld-3.0 propagation

This commit allows the upper layers to send setband request to
driver using vendor command.

Change-Id: I3ce769e5426a5afb85979b4e19dbabd234f18e98
CRs-Fixed: 879527
(cherry picked from commit 0e0eaa6aa061031c5cf5314497b9d41eb0aef850)
このコミットが含まれているのは:
Srinivas Dasari
2016-04-28 11:51:30 +05:30
committed by qcabuildsw
コミット 510e7fe109
2個のファイルの変更84行の追加1行の削除

ファイルの表示

@@ -7150,6 +7150,71 @@ static int wlan_hdd_cfg80211_get_wakelock_stats(struct wiphy *wiphy,
return ret; return ret;
} }
/**
*__wlan_hdd_cfg80211_setband() - set band
* @wiphy: Pointer to wireless phy
* @wdev: Pointer to wireless device
* @data: Pointer to data
* @data_len: Length of @data
*
* Return: 0 on success, negative errno on failure
*/
static int __wlan_hdd_cfg80211_setband(struct wiphy *wiphy,
struct wireless_dev *wdev,
const void *data, int data_len)
{
struct net_device *dev = wdev->netdev;
hdd_context_t *hdd_ctx = wiphy_priv(wiphy);
struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_MAX + 1];
int ret;
static const struct nla_policy policy[QCA_WLAN_VENDOR_ATTR_MAX + 1]
= {[QCA_WLAN_VENDOR_ATTR_SETBAND_VALUE] = { .type = NLA_U32 } };
ENTER();
ret = wlan_hdd_validate_context(hdd_ctx);
if (ret)
return ret;
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, data_len, policy)) {
hdd_err(FL("Invalid ATTR"));
return -EINVAL;
}
if (!tb[QCA_WLAN_VENDOR_ATTR_SETBAND_VALUE]) {
hdd_err(FL("attr SETBAND_VALUE failed"));
return -EINVAL;
}
ret = hdd_set_band(dev,
nla_get_u32(tb[QCA_WLAN_VENDOR_ATTR_SETBAND_VALUE]));
EXIT();
return ret;
}
/**
* wlan_hdd_cfg80211_setband() - Wrapper to setband
* @wiphy: wiphy structure pointer
* @wdev: Wireless device structure pointer
* @data: Pointer to the data received
* @data_len: Length of @data
*
* Return: 0 on success; errno on failure
*/
static int wlan_hdd_cfg80211_setband(struct wiphy *wiphy,
struct wireless_dev *wdev,
const void *data, int data_len)
{
int ret;
cds_ssr_protect(__func__);
ret = __wlan_hdd_cfg80211_setband(wiphy, wdev, data, data_len);
cds_ssr_unprotect(__func__);
return ret;
}
const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = { const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = {
{ {
.info.vendor_id = QCA_NL80211_VENDOR_ID, .info.vendor_id = QCA_NL80211_VENDOR_ID,
@@ -7699,6 +7764,13 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = {
WIPHY_VENDOR_CMD_NEED_RUNNING, WIPHY_VENDOR_CMD_NEED_RUNNING,
.doit = wlan_hdd_cfg80211_get_wakelock_stats .doit = wlan_hdd_cfg80211_get_wakelock_stats
}, },
{
.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_SETBAND,
.flags = WIPHY_VENDOR_CMD_NEED_WDEV |
WIPHY_VENDOR_CMD_NEED_NETDEV |
WIPHY_VENDOR_CMD_NEED_RUNNING,
.doit = wlan_hdd_cfg80211_setband
}
}; };
/** /**

ファイルの表示

@@ -254,10 +254,14 @@ typedef enum {
* @QCA_NL80211_VENDOR_SUBCMD_GET_WIFI_CONFIGURATION: get wifi config * @QCA_NL80211_VENDOR_SUBCMD_GET_WIFI_CONFIGURATION: get wifi config
* @QCA_NL80211_VENDOR_SUBCMD_GET_LOGGER_FEATURE_SET: get logging features * @QCA_NL80211_VENDOR_SUBCMD_GET_LOGGER_FEATURE_SET: get logging features
* @QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES: get link properties * @QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES: get link properties
* @QCA_NL80211_VENDOR_SUBCMD_GW_PARAM_CONFIG: set gateway parameters
* @QCA_NL80211_VENDOR_SUBCMD_GET_PREFERRED_FREQ_LIST: get preferred channel
list
* @QCA_NL80211_VENDOR_SUBCMD_SET_PROBABLE_OPER_CHANNEL: channel hint
* @QCA_NL80211_VENDOR_SUBCMD_SETBAND: vendor setband command
* @QCA_NL80211_VENDOR_SUBCMD_TRIGGER_SCAN: venodr scan command * @QCA_NL80211_VENDOR_SUBCMD_TRIGGER_SCAN: venodr scan command
* @QCA_NL80211_VENDOR_SUBCMD_SCAN_DONE: vendor scan complete * @QCA_NL80211_VENDOR_SUBCMD_SCAN_DONE: vendor scan complete
* @QCA_NL80211_VENDOR_SUBCMD_OTA_TEST: enable OTA test * @QCA_NL80211_VENDOR_SUBCMD_OTA_TEST: enable OTA test
* @QCA_NL80211_VENDOR_SUBCMD_GW_PARAM_CONFIG: set gateway parameters
* @QCA_NL80211_VENDOR_SUBCMD_SET_TXPOWER_SCALE: set tx power by percentage * @QCA_NL80211_VENDOR_SUBCMD_SET_TXPOWER_SCALE: set tx power by percentage
* @QCA_NL80211_VENDOR_SUBCMD_SET_TXPOWER_SCALE_DECR_DB: reduce tx power by DB * @QCA_NL80211_VENDOR_SUBCMD_SET_TXPOWER_SCALE_DECR_DB: reduce tx power by DB
* @QCA_NL80211_VENDOR_SUBCMD_SET_SAP_CONFIG: SAP configuration * @QCA_NL80211_VENDOR_SUBCMD_SET_SAP_CONFIG: SAP configuration
@@ -400,6 +404,9 @@ enum qca_nl80211_vendor_subcmds {
QCA_NL80211_VENDOR_SUBCMD_GET_PREFERRED_FREQ_LIST = 103, QCA_NL80211_VENDOR_SUBCMD_GET_PREFERRED_FREQ_LIST = 103,
QCA_NL80211_VENDOR_SUBCMD_SET_PROBABLE_OPER_CHANNEL = 104, QCA_NL80211_VENDOR_SUBCMD_SET_PROBABLE_OPER_CHANNEL = 104,
/* Vendor setband command */
QCA_NL80211_VENDOR_SUBCMD_SETBAND = 105,
/* Vendor scan commands */ /* Vendor scan commands */
QCA_NL80211_VENDOR_SUBCMD_TRIGGER_SCAN = 106, QCA_NL80211_VENDOR_SUBCMD_TRIGGER_SCAN = 106,
QCA_NL80211_VENDOR_SUBCMD_SCAN_DONE = 107, QCA_NL80211_VENDOR_SUBCMD_SCAN_DONE = 107,
@@ -834,6 +841,8 @@ enum qca_wlan_vendor_attr_get_tdls_capabilities {
* @QCA_WLAN_VENDOR_ATTR_MAC_ADDR: MAC Address attribute which is used by * @QCA_WLAN_VENDOR_ATTR_MAC_ADDR: MAC Address attribute which is used by
* QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES * QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES
* @QCA_WLAN_VENDOR_ATTR_FEATURE_FLAGS: Supported Features * @QCA_WLAN_VENDOR_ATTR_FEATURE_FLAGS: Supported Features
*@QCA_WLAN_VENDOR_ATTR_SETBAND_VALUE: setband attribute which is used by
* QCA_NL80211_VENDOR_SUBCMD_SETBAND
* @QCA_WLAN_VENDOR_ATTR_AFTER_LAST: After last * @QCA_WLAN_VENDOR_ATTR_AFTER_LAST: After last
* @QCA_WLAN_VENDOR_ATTR_MAX: Max value * @QCA_WLAN_VENDOR_ATTR_MAX: Max value
*/ */
@@ -848,6 +857,8 @@ enum qca_wlan_vendor_attr {
QCA_WLAN_VENDOR_ATTR_CONCURRENCY_CAPA = 9, QCA_WLAN_VENDOR_ATTR_CONCURRENCY_CAPA = 9,
QCA_WLAN_VENDOR_ATTR_MAX_CONCURRENT_CHANNELS_2_4_BAND = 10, QCA_WLAN_VENDOR_ATTR_MAX_CONCURRENT_CHANNELS_2_4_BAND = 10,
QCA_WLAN_VENDOR_ATTR_MAX_CONCURRENT_CHANNELS_5_0_BAND = 11, QCA_WLAN_VENDOR_ATTR_MAX_CONCURRENT_CHANNELS_5_0_BAND = 11,
QCA_WLAN_VENDOR_ATTR_SETBAND_VALUE = 12,
/* keep last */ /* keep last */
QCA_WLAN_VENDOR_ATTR_AFTER_LAST, QCA_WLAN_VENDOR_ATTR_AFTER_LAST,
QCA_WLAN_VENDOR_ATTR_MAX = QCA_WLAN_VENDOR_ATTR_AFTER_LAST - 1 QCA_WLAN_VENDOR_ATTR_MAX = QCA_WLAN_VENDOR_ATTR_AFTER_LAST - 1