linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] libertas: use the common frame control functions
@ 2008-08-25 21:06 Harvey Harrison
  0 siblings, 0 replies; only message in thread
From: Harvey Harrison @ 2008-08-25 21:06 UTC (permalink / raw)
  To: John Linville; +Cc: linux-wireless

Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
---
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(-)

diff --git a/drivers/net/wireless/libertas_tf/main.c b/drivers/net/wireless/libertas_tf/main.c
index 2c1d680..c948021 100644
--- a/drivers/net/wireless/libertas_tf/main.c
+++ b/drivers/net/wireless/libertas_tf/main.c
@@ -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);
-- 
1.6.0.340.g84854




^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2008-08-25 21:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-25 21:06 [PATCH] libertas: use the common frame control functions Harvey Harrison

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).