[PATCH v3 05/10] wifi: mac80211: add support for DFS with multiple radios
Felix Fietkau
nbd at nbd.name
Tue Jul 2 04:07:46 PDT 2024
On 02.07.24 12:58, Karthikeyan Periyasamy wrote:
>
>
> On 7/1/2024 7:43 PM, Felix Fietkau wrote:
>> DFS can be supported with multi-channel combinations, as long as each DFS
>> capable radio only supports one channel.
>>
>> Signed-off-by: Felix Fietkau <nbd at nbd.name>
>> ---
>> net/mac80211/main.c | 32 ++++++++++++++++++++++++--------
>> 1 file changed, 24 insertions(+), 8 deletions(-)
>>
>> diff --git a/net/mac80211/main.c b/net/mac80211/main.c
>> index 7578ea56c12f..58bebfdaa062 100644
>> --- a/net/mac80211/main.c
>> +++ b/net/mac80211/main.c
>> @@ -1091,6 +1091,21 @@ static int ieee80211_init_cipher_suites(struct ieee80211_local *local)
>> return 0;
>> }
>>
>> +static bool
>> +ieee80211_ifcomb_check_radar(const struct ieee80211_iface_combination *comb,
>> + int n_comb)
>> +{
>> + int i;
>> +
>> + /* DFS is not supported with multi-channel combinations yet */
>> + for (i = 0; i < n_comb; i++, comb++)
>> + if (comb->radar_detect_widths &&
>> + comb->num_different_channels > 1)
>> + return false;
>> +
>> + return true;
>> +}
>> +
>> int ieee80211_register_hw(struct ieee80211_hw *hw)
>> {
>> struct ieee80211_local *local = hw_to_local(hw);
>> @@ -1177,17 +1192,18 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
>> if (comb->num_different_channels > 1)
>> return -EINVAL;
>> }
>> - } else {
>> - /* DFS is not supported with multi-channel combinations yet */
>> - for (i = 0; i < local->hw.wiphy->n_iface_combinations; i++) {
>> - const struct ieee80211_iface_combination *comb;
>> -
>> - comb = &local->hw.wiphy->iface_combinations[i];
>> + } else if (hw->wiphy->n_radio) {
>> + for (i = 0; i < hw->wiphy->n_radio; i++) {
>> + const struct wiphy_radio *radio = &hw->wiphy->radio[i];
>>
>> - if (comb->radar_detect_widths &&
>> - comb->num_different_channels > 1)
>> + if (!ieee80211_ifcomb_check_radar(radio->iface_combinations,
>> + radio->n_iface_combinations))
>> return -EINVAL;
>> }
>> + } else {
>> + if (!ieee80211_ifcomb_check_radar(hw->wiphy->iface_combinations,
>> + hw->wiphy->n_iface_combinations))
>> + return -EINVAL;
>> }
>>
>> /* Only HW csum features are currently compatible with mac80211 */
>
> In ieee80211_register_hw(), mac80211 check the global iface combination
> against the IBSS interface max.
>
> This check may fail for the radio specific iface combination
> advertisement since global iface combination is sum of all radio
> capabilities, no ?
You're right, will fix.
Thanks,
- Felix
More information about the ath12k
mailing list