qcacld-3.0: Refactor LISTEN_INTERVAL configuration

One of the HDD functions with the highest cyclomatic complexity is
__wlan_hdd_cfg80211_wifi_configuration_set(). In order to reduce the
complexity there is a plan to replace the inline attribute handling
with a vtable-based approach.

As part of that goal refactor the following independent attribute
handling into a separate function and add that function to the vtable:
- QCA_WLAN_VENDOR_ATTR_CONFIG_LISTEN_INTERVAL

Change-Id: I61b679c4fda4b803a8721054694102c7af46fc88
CRs-Fixed: 2371562
这个提交包含在:
Jeff Johnson
2018-11-14 12:33:28 -08:00
提交者 nshrivas
父节点 bcaeafb9f6
当前提交 6db916208e

查看文件

@@ -5623,6 +5623,31 @@ static int hdd_config_modulated_dtim(struct hdd_adapter *adapter,
return qdf_status_to_os_return(status); return qdf_status_to_os_return(status);
} }
static int hdd_config_listen_interval(struct hdd_adapter *adapter,
const struct nlattr *attr)
{
struct wlan_objmgr_vdev *vdev;
uint32_t listen_interval;
QDF_STATUS status;
listen_interval = nla_get_u32(attr);
if (listen_interval > cfg_max(CFG_PMO_ENABLE_DYNAMIC_DTIM)) {
hdd_err_rl("Invalid value for listen interval - %d",
listen_interval);
return -EINVAL;
}
vdev = hdd_objmgr_get_vdev(adapter);
if (!vdev)
return -EINVAL;
status = ucfg_pmo_config_listen_interval(vdev, listen_interval);
hdd_objmgr_put_vdev(adapter);
return qdf_status_to_os_return(status);
}
static int hdd_config_scan_default_ies(struct hdd_adapter *adapter, static int hdd_config_scan_default_ies(struct hdd_adapter *adapter,
const struct nlattr *attr) const struct nlattr *attr)
{ {
@@ -5702,6 +5727,8 @@ static const struct independent_setters independent_setters[] = {
hdd_config_fine_time_measurement}, hdd_config_fine_time_measurement},
{QCA_WLAN_VENDOR_ATTR_CONFIG_MODULATED_DTIM, {QCA_WLAN_VENDOR_ATTR_CONFIG_MODULATED_DTIM,
hdd_config_modulated_dtim}, hdd_config_modulated_dtim},
{QCA_WLAN_VENDOR_ATTR_CONFIG_LISTEN_INTERVAL,
hdd_config_listen_interval},
}; };
/** /**
@@ -5815,7 +5842,6 @@ __wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy,
int errno; int errno;
int ret; int ret;
int ret_val = 0; int ret_val = 0;
u32 override_li;
u16 stats_avg_factor; u16 stats_avg_factor;
u32 guard_time; u32 guard_time;
uint8_t set_value; uint8_t set_value;
@@ -5838,7 +5864,6 @@ __wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy,
uint16_t latency_level; uint16_t latency_level;
mac_handle_t mac_handle; mac_handle_t mac_handle;
bool b_value; bool b_value;
struct wlan_objmgr_vdev *vdev;
uint8_t bmiss_first_bcnt; uint8_t bmiss_first_bcnt;
uint8_t bmiss_final_bcnt; uint8_t bmiss_final_bcnt;
@@ -5872,26 +5897,6 @@ __wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy,
mac_handle = hdd_ctx->mac_handle; mac_handle = hdd_ctx->mac_handle;
if (tb[QCA_WLAN_VENDOR_ATTR_CONFIG_LISTEN_INTERVAL]) {
override_li = nla_get_u32(
tb[QCA_WLAN_VENDOR_ATTR_CONFIG_LISTEN_INTERVAL]);
if (override_li > cfg_max(CFG_PMO_ENABLE_DYNAMIC_DTIM)) {
hdd_err_rl("Invalid value for listen interval - %d",
override_li);
return -EINVAL;
}
vdev = hdd_objmgr_get_vdev(adapter);
if (!vdev)
return -EINVAL;
status = ucfg_pmo_config_listen_interval(vdev,
override_li);
hdd_objmgr_put_vdev(adapter);
if (status != QDF_STATUS_SUCCESS)
ret_val = -EPERM;
}
if (tb[QCA_WLAN_VENDOR_ATTR_CONFIG_LRO]) { if (tb[QCA_WLAN_VENDOR_ATTR_CONFIG_LRO]) {
enable_flag = nla_get_u8(tb[QCA_WLAN_VENDOR_ATTR_CONFIG_LRO]); enable_flag = nla_get_u8(tb[QCA_WLAN_VENDOR_ATTR_CONFIG_LRO]);
ret_val = hdd_lro_set_reset(hdd_ctx, adapter, ret_val = hdd_lro_set_reset(hdd_ctx, adapter,