Hi,

Apologies for the late review.

I've applied patch 1, but not this one yet:

>  #define IEEE80211_HE_MAC_CAP0_DYNAMIC_FRAG_LEVEL_2           0x10
>  #define IEEE80211_HE_MAC_CAP0_DYNAMIC_FRAG_LEVEL_3           0x18
>  #define IEEE80211_HE_MAC_CAP0_DYNAMIC_FRAG_MASK                      0x18
> +#define IEEE80211_HE_MAC_CAP0_DYNAMIC_FRAG_SHIFT             3

this will not be needed,
 
> -static void ieee80211_send_addba_resp(struct ieee80211_sub_if_data *sdata, 
> u8 *da, u16 tid,
> +static void ieee80211_add_addbaext(struct ieee80211_sub_if_data *sdata,
> +                                struct sk_buff *skb,
> +                                const struct ieee80211_addba_ext_ie *req)
> +{
> +     struct ieee80211_supported_band *sband;
> +     struct ieee80211_addba_ext_ie *resp;
> +     const struct ieee80211_sta_he_cap *he_cap;
> +     u8 frag_level, cap_frag_level;
> +     u8 *pos;
> +
> +     sband = ieee80211_get_sband(sdata);
> +     he_cap = ieee80211_get_he_iftype_cap(sband, sdata->vif.type);
> +     if (!he_cap)
> +             return;
> +
> +     pos = skb_put_zero(skb, 2 + sizeof(struct ieee80211_addba_ext_ie));
> +     *pos++ = WLAN_EID_ADDBA_EXT;
> +     *pos++ = sizeof(struct ieee80211_addba_ext_ie);
> +     resp = (struct ieee80211_addba_ext_ie *)pos;
> +     resp->data = req->data & IEEE80211_ADDBA_EXT_NO_FRAG;
> +
> +     frag_level = (req->data & IEEE80211_ADDBA_EXT_FRAG_LEVEL_MASK) >>
> +                  IEEE80211_ADDBA_EXT_FRAG_LEVEL_SHIFT;
> +     cap_frag_level = (he_cap->he_cap_elem.mac_cap_info[0] &
> +                       IEEE80211_HE_MAC_CAP0_DYNAMIC_FRAG_MASK) >>
> +                      IEEE80211_HE_MAC_CAP0_DYNAMIC_FRAG_SHIFT;

if you use u32_get_bits() from bitfield.h here for these two
assignments, which is nicer anyway.

> +     if (frag_level > cap_frag_level)
> +             frag_level = cap_frag_level;
> +     resp->data |= (frag_level << IEEE80211_ADDBA_EXT_FRAG_LEVEL_SHIFT) &
> +                   IEEE80211_ADDBA_EXT_FRAG_LEVEL_MASK;

and probably that could also be u8_encode_bits()?

> -     skb = dev_alloc_skb(sizeof(*mgmt) + local->hw.extra_tx_headroom);
> +     skb = dev_alloc_skb(sizeof(*mgmt) +
> +                 (addbaext ? 2 + sizeof(struct ieee80211_addba_ext_ie) : 0) +
> +                 local->hw.extra_tx_headroom);

not much point in the if (ternary operator) for ... 3 bytes? :-)

johannes

Reply via email to