mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-22 12:42:51 +01:00
wiphy: add getter for frequency/band info
This adds two new APIs: wiphy_get_frequency_info(): Used to get information about a given frequency such as disabled/no-IR. This can also be used to check if the frequency is supported (NULL return is unsupported). wiphy_band_is_disabled(): Checks if a band is disabled. Note that an unsupported band will also return true. Checking support should be done with wiphy_get_supported_bands()
This commit is contained in:
parent
3a87b6c518
commit
7d8ba43212
91
src/wiphy.c
91
src/wiphy.c
@ -496,6 +496,67 @@ const struct scan_freq_set *wiphy_get_disabled_freqs(const struct wiphy *wiphy)
|
||||
return wiphy->disabled_freqs;
|
||||
}
|
||||
|
||||
static struct band *wiphy_get_band(const struct wiphy *wiphy, enum band_freq band)
|
||||
{
|
||||
switch (band) {
|
||||
case BAND_FREQ_2_4_GHZ:
|
||||
return wiphy->band_2g;
|
||||
case BAND_FREQ_5_GHZ:
|
||||
return wiphy->band_5g;
|
||||
case BAND_FREQ_6_GHZ:
|
||||
return wiphy->band_6g;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
const struct band_freq_attrs *wiphy_get_frequency_info(
|
||||
const struct wiphy *wiphy,
|
||||
uint32_t freq)
|
||||
{
|
||||
struct band_freq_attrs *attr;
|
||||
enum band_freq band;
|
||||
uint8_t channel;
|
||||
struct band *bandp;
|
||||
|
||||
channel = band_freq_to_channel(freq, &band);
|
||||
if (!channel)
|
||||
return NULL;
|
||||
|
||||
bandp = wiphy_get_band(wiphy, band);
|
||||
if (!bandp)
|
||||
return NULL;
|
||||
|
||||
attr = &bandp->freq_attrs[channel];
|
||||
if (!attr->supported)
|
||||
return NULL;
|
||||
|
||||
return attr;
|
||||
}
|
||||
|
||||
bool wiphy_band_is_disabled(const struct wiphy *wiphy, enum band_freq band)
|
||||
{
|
||||
struct band_freq_attrs attr;
|
||||
unsigned int i;
|
||||
struct band *bandp;
|
||||
|
||||
bandp = wiphy_get_band(wiphy, band);
|
||||
if (!bandp)
|
||||
return true;
|
||||
|
||||
for (i = 0; i < bandp->freqs_len; i++) {
|
||||
attr = bandp->freq_attrs[i];
|
||||
|
||||
if (!attr.supported)
|
||||
continue;
|
||||
|
||||
if (!attr.disabled)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool wiphy_supports_probe_resp_offload(struct wiphy *wiphy)
|
||||
{
|
||||
return wiphy->ap_probe_resp_offload;
|
||||
@ -819,21 +880,7 @@ const uint8_t *wiphy_get_supported_rates(struct wiphy *wiphy,
|
||||
enum band_freq band,
|
||||
unsigned int *out_num)
|
||||
{
|
||||
struct band *bandp;
|
||||
|
||||
switch (band) {
|
||||
case BAND_FREQ_2_4_GHZ:
|
||||
bandp = wiphy->band_2g;
|
||||
break;
|
||||
case BAND_FREQ_5_GHZ:
|
||||
bandp = wiphy->band_5g;
|
||||
break;
|
||||
case BAND_FREQ_6_GHZ:
|
||||
bandp = wiphy->band_6g;
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
struct band *bandp = wiphy_get_band(wiphy, band);
|
||||
|
||||
if (!bandp)
|
||||
return NULL;
|
||||
@ -891,19 +938,9 @@ int wiphy_estimate_data_rate(struct wiphy *wiphy,
|
||||
if (band_freq_to_channel(bss->frequency, &band) == 0)
|
||||
return -ENOTSUP;
|
||||
|
||||
switch (band) {
|
||||
case BAND_FREQ_2_4_GHZ:
|
||||
bandp = wiphy->band_2g;
|
||||
break;
|
||||
case BAND_FREQ_5_GHZ:
|
||||
bandp = wiphy->band_5g;
|
||||
break;
|
||||
case BAND_FREQ_6_GHZ:
|
||||
bandp = wiphy->band_6g;
|
||||
break;
|
||||
default:
|
||||
bandp = wiphy_get_band(wiphy, band);
|
||||
if (!bandp)
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
ie_tlv_iter_init(&iter, ies, ies_len);
|
||||
|
||||
|
@ -102,6 +102,11 @@ const struct scan_freq_set *wiphy_get_supported_freqs(
|
||||
const struct wiphy *wiphy);
|
||||
const struct scan_freq_set *wiphy_get_disabled_freqs(const struct wiphy *wiphy);
|
||||
|
||||
const struct band_freq_attrs *wiphy_get_frequency_info(
|
||||
const struct wiphy *wiphy,
|
||||
uint32_t freq);
|
||||
bool wiphy_band_is_disabled(const struct wiphy *wiphy, enum band_freq band);
|
||||
|
||||
bool wiphy_supports_probe_resp_offload(struct wiphy *wiphy);
|
||||
bool wiphy_can_transition_disable(struct wiphy *wiphy);
|
||||
bool wiphy_can_offload(struct wiphy *wiphy);
|
||||
|
Loading…
Reference in New Issue
Block a user