qcacld-3.0: Send roam band value to userspace
OEM-SS sends ROAMBAND attribute via the vendor command QCA_WLAN_VENDOR_ROAMING_SUBCMD_CONTROL_SET to host to get current roam band value in the host. Fix is to process ROAMBAND attribute and send roam band value to upper layer. Change-Id: I56b208d00b40d4d3e6d3658d23fa1073f6fe1146 CRs-Fixed: 3009753
This commit is contained in:

committed by
Madan Koyyalamudi

parent
8d3a1d9e82
commit
5a8305cdd5
@@ -81,6 +81,17 @@ QDF_STATUS ucfg_cm_set_cckm_ie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
|||||||
const uint8_t *cck_ie, const uint8_t cck_ie_len);
|
const uint8_t *cck_ie, const uint8_t cck_ie_len);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_cm_get_roam_band() - Get roam band from rso config
|
||||||
|
* @psoc: Pointer to psoc
|
||||||
|
* @vdev_id: vdev id
|
||||||
|
* @roam_band: Pointer of a buffer to fill the roam band
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS ucfg_cm_get_roam_band(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||||
|
uint32_t *roam_band);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ucfg_cm_rso_set_roam_trigger() - Send roam trigger bitmap firmware
|
* ucfg_cm_rso_set_roam_trigger() - Send roam trigger bitmap firmware
|
||||||
* @pdev: Pointer to pdev
|
* @pdev: Pointer to pdev
|
||||||
|
@@ -139,6 +139,18 @@ release_ref:
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QDF_STATUS ucfg_cm_get_roam_band(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||||
|
uint32_t *roam_band)
|
||||||
|
{
|
||||||
|
struct cm_roam_values_copy temp;
|
||||||
|
|
||||||
|
wlan_cm_roam_cfg_get_value(psoc, vdev_id, ROAM_BAND, &temp);
|
||||||
|
|
||||||
|
*roam_band = temp.uint_value;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef FEATURE_WLAN_ESE
|
#ifdef FEATURE_WLAN_ESE
|
||||||
QDF_STATUS ucfg_cm_set_ese_roam_scan_channel_list(struct wlan_objmgr_pdev *pdev,
|
QDF_STATUS ucfg_cm_set_ese_roam_scan_channel_list(struct wlan_objmgr_pdev *pdev,
|
||||||
uint8_t vdev_id,
|
uint8_t vdev_id,
|
||||||
|
@@ -5409,9 +5409,34 @@ hdd_roam_control_config_buf_size(struct hdd_context *hdd_ctx,
|
|||||||
(nla_total_size(sizeof(uint32_t)) *
|
(nla_total_size(sizeof(uint32_t)) *
|
||||||
NUM_CHANNELS);
|
NUM_CHANNELS);
|
||||||
|
|
||||||
|
if (tb[QCA_ATTR_ROAM_CONTROL_BAND_MASK])
|
||||||
|
skb_len += NLA_HDRLEN + sizeof(uint32_t);
|
||||||
|
|
||||||
return skb_len;
|
return skb_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_reg_wifi_band_bitmap_to_vendor_bitmap() - Convert enum reg_wifi_band
|
||||||
|
* to enum qca_set_band
|
||||||
|
* @reg_wifi_band_bitmap: enum reg_wifi_band
|
||||||
|
*
|
||||||
|
* Return: qca_set_band value
|
||||||
|
*/
|
||||||
|
static uint32_t
|
||||||
|
wlan_reg_wifi_band_bitmap_to_vendor_bitmap(uint32_t reg_wifi_band_bitmap)
|
||||||
|
{
|
||||||
|
uint32_t vendor_mask = 0;
|
||||||
|
|
||||||
|
if (reg_wifi_band_bitmap & BIT(REG_BAND_2G))
|
||||||
|
vendor_mask |= QCA_SETBAND_2G;
|
||||||
|
if (reg_wifi_band_bitmap & BIT(REG_BAND_5G))
|
||||||
|
vendor_mask |= QCA_SETBAND_5G;
|
||||||
|
if (reg_wifi_band_bitmap & BIT(REG_BAND_6G))
|
||||||
|
vendor_mask |= QCA_SETBAND_6G;
|
||||||
|
|
||||||
|
return vendor_mask;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* hdd_roam_control_config_fill_data() - Fill the data requested by userspace
|
* hdd_roam_control_config_fill_data() - Fill the data requested by userspace
|
||||||
* @hdd_ctx: HDD context
|
* @hdd_ctx: HDD context
|
||||||
@@ -5431,7 +5456,7 @@ hdd_roam_control_config_fill_data(struct hdd_context *hdd_ctx, uint8_t vdev_id,
|
|||||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
uint8_t roam_control;
|
uint8_t roam_control;
|
||||||
struct nlattr *config, *get_freq_scheme, *get_freq;
|
struct nlattr *config, *get_freq_scheme, *get_freq;
|
||||||
uint32_t full_roam_scan_period;
|
uint32_t full_roam_scan_period, roam_band, vendor_band_mask;
|
||||||
uint8_t num_channels = 0;
|
uint8_t num_channels = 0;
|
||||||
uint32_t i = 0, freq_list[NUM_CHANNELS] = { 0 };
|
uint32_t i = 0, freq_list[NUM_CHANNELS] = { 0 };
|
||||||
struct hdd_adapter *hdd_adapter = NULL;
|
struct hdd_adapter *hdd_adapter = NULL;
|
||||||
@@ -5518,6 +5543,23 @@ hdd_roam_control_config_fill_data(struct hdd_context *hdd_ctx, uint8_t vdev_id,
|
|||||||
nla_nest_end(skb, get_freq);
|
nla_nest_end(skb, get_freq);
|
||||||
nla_nest_end(skb, get_freq_scheme);
|
nla_nest_end(skb, get_freq_scheme);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tb[QCA_ATTR_ROAM_CONTROL_BAND_MASK]) {
|
||||||
|
status = ucfg_cm_get_roam_band(hdd_ctx->psoc, vdev_id,
|
||||||
|
&roam_band);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
|
goto out;
|
||||||
|
vendor_band_mask =
|
||||||
|
wlan_reg_wifi_band_bitmap_to_vendor_bitmap(roam_band);
|
||||||
|
if (nla_put_u32(skb, QCA_ATTR_ROAM_CONTROL_BAND_MASK,
|
||||||
|
vendor_band_mask)) {
|
||||||
|
hdd_info("failed to put roam_band");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
hdd_debug("sending vendor_band_mask: %d reg band:%d",
|
||||||
|
vendor_band_mask, roam_band);
|
||||||
|
}
|
||||||
|
|
||||||
nla_nest_end(skb, config);
|
nla_nest_end(skb, config);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
@@ -13687,21 +13729,6 @@ static int wlan_hdd_cfg80211_setband(struct wiphy *wiphy,
|
|||||||
return errno;
|
return errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t
|
|
||||||
wlan_reg_wifi_band_bitmap_to_vendor_bitmap(uint32_t reg_wifi_band_bitmap)
|
|
||||||
{
|
|
||||||
uint32_t vendor_mask = 0;
|
|
||||||
|
|
||||||
if (reg_wifi_band_bitmap & BIT(REG_BAND_2G))
|
|
||||||
vendor_mask |= QCA_SETBAND_2G;
|
|
||||||
if (reg_wifi_band_bitmap & BIT(REG_BAND_5G))
|
|
||||||
vendor_mask |= QCA_SETBAND_5G;
|
|
||||||
if (reg_wifi_band_bitmap & BIT(REG_BAND_6G))
|
|
||||||
vendor_mask |= QCA_SETBAND_6G;
|
|
||||||
|
|
||||||
return vendor_mask;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*__wlan_hdd_cfg80211_getband() - get band
|
*__wlan_hdd_cfg80211_getband() - get band
|
||||||
* @wiphy: Pointer to wireless phy
|
* @wiphy: Pointer to wireless phy
|
||||||
|
Reference in New Issue
Block a user