Search Linux Wireless

Re: [PATCH V3 2/2] mac80211: add support for the ADDBA extension element

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux