mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-22 21:22:37 +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;
|
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)
|
bool wiphy_supports_probe_resp_offload(struct wiphy *wiphy)
|
||||||
{
|
{
|
||||||
return wiphy->ap_probe_resp_offload;
|
return wiphy->ap_probe_resp_offload;
|
||||||
@ -819,21 +880,7 @@ const uint8_t *wiphy_get_supported_rates(struct wiphy *wiphy,
|
|||||||
enum band_freq band,
|
enum band_freq band,
|
||||||
unsigned int *out_num)
|
unsigned int *out_num)
|
||||||
{
|
{
|
||||||
struct band *bandp;
|
struct band *bandp = wiphy_get_band(wiphy, band);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!bandp)
|
if (!bandp)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -891,19 +938,9 @@ int wiphy_estimate_data_rate(struct wiphy *wiphy,
|
|||||||
if (band_freq_to_channel(bss->frequency, &band) == 0)
|
if (band_freq_to_channel(bss->frequency, &band) == 0)
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
|
|
||||||
switch (band) {
|
bandp = wiphy_get_band(wiphy, band);
|
||||||
case BAND_FREQ_2_4_GHZ:
|
if (!bandp)
|
||||||
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 -ENOTSUP;
|
return -ENOTSUP;
|
||||||
}
|
|
||||||
|
|
||||||
ie_tlv_iter_init(&iter, ies, ies_len);
|
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 wiphy *wiphy);
|
||||||
const struct scan_freq_set *wiphy_get_disabled_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_supports_probe_resp_offload(struct wiphy *wiphy);
|
||||||
bool wiphy_can_transition_disable(struct wiphy *wiphy);
|
bool wiphy_can_transition_disable(struct wiphy *wiphy);
|
||||||
bool wiphy_can_offload(struct wiphy *wiphy);
|
bool wiphy_can_offload(struct wiphy *wiphy);
|
||||||
|
Loading…
Reference in New Issue
Block a user