libertas: use the common frame control functions
PATCH 1/1 libertas: use the common frame control functions
Signed-off-by Harvey Harrison <[email protected]>
---
I noticed some new sparse warnings in linux-next from this file, instead of silencing the warnings by making fc_le a __le16, I decided to move this function over to the common helpers.
It may be worth a common helper somewhere to check the packet alignment rather than have each driver hand-roll alignment checking.
drivers/net/wireless/libertas_tf/main.c | 20 ++++++++------------ 1 files changed, 8 insertions(+), 12 deletions(-)
drivers/net/wireless/libertas_tf/main.c +8 -12
@@ -477,9 +477,9 @@ int lbtf_rx(struct lbtf_private *priv, struct sk_buff *skb) {struct ieee80211_rx_status stats;struct rxpd *prxpd; -bool is_qos, is_4addr, is_amsdu, need_padding; +int need_padding;unsigned int flags; -u16 fc, fc_le; +struct ieee80211_hdr *hdr; prxpd = (struct rxpd *) skb->data;
@@ -497,19 +497,15 @@ int lbtf_rx(struct lbtf_private *priv, struct sk_buff *skb) stats.rate_idx = prxpd->rx_rate;skb_pull (skb,sizeof (struct rxpd )); - fc_le = *((__le16 *) skb->data); - fc =le16_to_cpu (fc_le); + hdr = (struct ieee80211_hdr *)skb->data; flags =le32_to_cpu (*(__le32 *)(skb->data +4 )); - is_qos = ((fc &IEEE80211_FCTL_FTYPE ) ==IEEE80211_FTYPE_DATA ) && - (fc &IEEE80211_STYPE_QOS_DATA ); - is_4addr = (fc & (IEEE80211_FCTL_TODS |IEEE80211_FCTL_FROMDS )) == - (IEEE80211_FCTL_TODS |IEEE80211_FCTL_FROMDS ); - is_amsdu = ((fc &0x8C ) ==0x88 ) && - (*(skb->data +ieee80211_hdrlen (fc_le) -QOS_CONTROL_LEN ) - &IEEE80211_QOS_CONTROL_A_MSDU_PRESENT ); + need_padding =ieee80211_is_data_qos (hdr->frame_control); + need_padding ^=ieee80211_has_a4 (hdr->frame_control); + need_padding ^=ieee80211_is_data_qos (hdr->frame_control) && + (*ieee80211_get_qos_ctl (hdr) & +IEEE80211_QOS_CONTROL_A_MSDU_PRESENT ); - need_padding = is_qos ^ is_4addr ^ is_amsdu;if (need_padding) {memmove (skb->data +2 , skb->data, skb->len);skb_reserve (skb,2 );
Signature · 1 line
1.6.0.340.g84854