Skip to contentSkip to conversation

adm8211: remove masking of protected bit

PATCH In review Harvey Harrison 3 participants 4 messages Jun 20, 2008 – Jun 22, 2008 Networking drivers (wireless)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 adm8211: remove masking of protected bit

Use the ieee80211_hdrlen helper to avoid byteshifting.

The masking of the protected bit made the two tests below never trigger.

Possibly a bugfix.

---
I'm not sure if this was intentional, please review. If it was intentional the two if-blocks should probably be deleted.

 drivers/net/wireless/adm8211.c |    8 +++-----
 1 files changed, 3 insertions(+), 5 deletions(-)
drivers/net/wireless/adm8211.c +3 -5
index 0ba55ba..ed650d7 100644
@@ -1685,7 +1685,6 @@ static void adm8211_tx_raw(struct ieee80211_hw *dev, struct sk_buff *skb,
 static int adm8211_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
 {
 	struct adm8211_tx_hdr *txhdr;
-	u16 fc;
 	size_t payload_len, hdrlen;
 	int plcp, dur, len, plcp_signal, short_preamble;
 	struct ieee80211_hdr *hdr;
@@ -1696,8 +1695,7 @@ static int adm8211_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
 	plcp_signal = txrate->bitrate;
 
 	hdr = (struct ieee80211_hdr *)skb->data;
-	fc = le16_to_cpu(hdr->frame_control) & ~IEEE80211_FCTL_PROTECTED;
-	hdrlen = ieee80211_get_hdrlen(fc);
+	hdrlen = ieee80211_hdrlen(hdr->frame_control);
 	memcpy(skb->cb, skb->data, hdrlen);
 	hdr = (struct ieee80211_hdr *)skb->cb;
 	skb_pull(skb, hdrlen);
@@ -1711,7 +1709,7 @@ static int adm8211_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
 	txhdr->frame_control = hdr->frame_control;
 
 	len = hdrlen + payload_len + FCS_LEN;
-	if (fc & IEEE80211_FCTL_PROTECTED)
+	if (ieee80211_has_protected(hdr->frame_control))
 		len += 8;
 
 	txhdr->frag = cpu_to_le16(0x0FFF);
@@ -1730,7 +1728,7 @@ static int adm8211_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
 	if (info->flags & IEEE80211_TX_CTL_USE_RTS_CTS)
 		txhdr->header_control |= cpu_to_le16(ADM8211_TXHDRCTL_ENABLE_RTS);
 
-	if (fc & IEEE80211_FCTL_PROTECTED)
+	if (ieee80211_has_protected(hdr->frame_control))
 		txhdr->header_control |= cpu_to_le16(ADM8211_TXHDRCTL_ENABLE_WEP_ENGINE);
 
 	txhdr->retry_limit = info->control.retry_limit;
Signature · 1 line
1.5.6.290.gc4e15
maintainer
#1 lore raw
Quoted 6 lines · Harvey Harrison

Use the ieee80211_hdrlen helper to avoid byteshifting.

The masking of the protected bit made the two tests below never trigger.

I'm not sure if this was intentional, please review. If it was intentional the two if-blocks should probably be deleted.

It was intentional, I think I asked before, adm8211 doesn't support hw crypto. But I agree, those code blocks should be deleted since the driver shouldn't use that bit anyway to detect whether to do hw crypto or not.

johannes

#2 lore raw
In reply to Harvey Harrison
Quoted 3 lines · On Thursday 19 June 2008 23:34:10 Harvey Harrison wrote:

I'm not sure if this was intentional, please review. If it was intentional the two if-blocks should probably be deleted.

This was intentional. The key configuration code for adm8211 was never hooked up so the hardware can't do encryption. You can remove the checks for the protected frame bit. Just leave the local fc variable in.

-Michael Wu

#3 lore raw

PATCH 1/1 adm8211: remove unnecessary protected bit mask/check

Removes now unused fc local var and uses the new ieee80211_hdrlen which directly uses the le16 frame control value.

---
 drivers/net/wireless/adm8211.c |    9 +--------
 1 files changed, 1 insertions(+), 8 deletions(-)
drivers/net/wireless/adm8211.c +1 -8
index 0ba55ba..3333d45 100644
@@ -1685,7 +1685,6 @@ static void adm8211_tx_raw(struct ieee80211_hw *dev, struct sk_buff *skb,
 static int adm8211_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
 {
 	struct adm8211_tx_hdr *txhdr;
-	u16 fc;
 	size_t payload_len, hdrlen;
 	int plcp, dur, len, plcp_signal, short_preamble;
 	struct ieee80211_hdr *hdr;
@@ -1696,8 +1695,7 @@ static int adm8211_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
 	plcp_signal = txrate->bitrate;
 
 	hdr = (struct ieee80211_hdr *)skb->data;
-	fc = le16_to_cpu(hdr->frame_control) & ~IEEE80211_FCTL_PROTECTED;
-	hdrlen = ieee80211_get_hdrlen(fc);
+	hdrlen = ieee80211_hdrlen(hdr->frame_control);
 	memcpy(skb->cb, skb->data, hdrlen);
 	hdr = (struct ieee80211_hdr *)skb->cb;
 	skb_pull(skb, hdrlen);
@@ -1711,8 +1709,6 @@ static int adm8211_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
 	txhdr->frame_control = hdr->frame_control;
 
 	len = hdrlen + payload_len + FCS_LEN;
-	if (fc & IEEE80211_FCTL_PROTECTED)
-		len += 8;
 
 	txhdr->frag = cpu_to_le16(0x0FFF);
 	adm8211_calc_durations(&dur, &plcp, payload_len,
@@ -1730,9 +1726,6 @@ static int adm8211_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
 	if (info->flags & IEEE80211_TX_CTL_USE_RTS_CTS)
 		txhdr->header_control |= cpu_to_le16(ADM8211_TXHDRCTL_ENABLE_RTS);
 
-	if (fc & IEEE80211_FCTL_PROTECTED)
-		txhdr->header_control |= cpu_to_le16(ADM8211_TXHDRCTL_ENABLE_WEP_ENGINE);
-
 	txhdr->retry_limit = info->control.retry_limit;
 
 	adm8211_tx_raw(dev, skb, plcp_signal, hdrlen);
Signature · 1 line
1.5.6.290.gc4e15