> +static u32 rateset_to_mask(struct ieee80211_supported_band *sband,
> +                        u8 *rates, u8 rates_len)


All of these just move around, right?

> +     if (info->attrs[NL80211_ATTR_TX_RATES]) {
> +             u32 rate, count_ht, count_vht, i;
> +             enum nl80211_band band;
> +
> +             err = nl80211_parse_tx_bitrate_mask(info,
> &params.beacon_rate);
> +             if (err)
> +                     return err;
> +
> +             band = params.chandef.chan->band;
> +             rate = params.beacon_rate.control[band].legacy;
> +             /* Allow only one rate */
> +             if (rate) {
> +                     if (rate & (rate - 1))
> +                             return -EINVAL;
> +             } else {
> +                     count_ht = 0;
> +                     for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN;
> i++) {
> +                             if
> (params.beacon_rate.control[band].ht_mcs[i]) {
> +                                     count_ht++;
> +                                     if (count_ht > 1)
> +                                             return -EINVAL;
> +                             }
> +                     }
> +                     count_vht = 0;
> +                     for (i = 0; i < NL80211_VHT_NSS_MAX; i++) {
> +                             if
> (params.beacon_rate.control[band].vht_mcs[i]) {
> +                                     count_vht++;
> +                                     if (count_vht > 1)
> +                                             return -EINVAL;
> +                             }
> +                     }
> +                     if (!count_ht && !count_vht)
> +                             return -EINVAL;
> +             }
> +     }
> 
I think it would be good to split out this "single rate" thing into a
helper function.

Thanks,
johannes

Reply via email to