2008-06-20 03:34:12

by Harvey Harrison

[permalink] [raw]
Subject: [PATCH] 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.

Signed-off-by: Harvey Harrison <[email protected]>
---
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(-)

diff --git a/drivers/net/wireless/adm8211.c b/drivers/net/wireless/adm8211.c
index 0ba55ba..ed650d7 100644
--- a/drivers/net/wireless/adm8211.c
+++ b/drivers/net/wireless/adm8211.c
@@ -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;
--
1.5.6.290.gc4e15





2008-06-22 02:18:43

by Michael Wu

[permalink] [raw]
Subject: Re: [PATCH] adm8211: remove masking of protected bit

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


Attachments:
(No filename) (410.00 B)
signature.asc (194.00 B)
This is a digitally signed message part.
Download all attachments

2008-06-22 02:33:23

by Harvey Harrison

[permalink] [raw]
Subject: [PATCH] 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.

Signed-off-by: Harvey Harrison <[email protected]>
---
drivers/net/wireless/adm8211.c | 9 +--------
1 files changed, 1 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/adm8211.c b/drivers/net/wireless/adm8211.c
index 0ba55ba..3333d45 100644
--- a/drivers/net/wireless/adm8211.c
+++ b/drivers/net/wireless/adm8211.c
@@ -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);
--
1.5.6.290.gc4e15




2008-06-20 06:49:38

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] adm8211: remove masking of protected bit

On Thu, 2008-06-19 at 20:34 -0700, Harvey Harrison wrote:
> 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


Attachments:
signature.asc (836.00 B)
This is a digitally signed message part