* [PATCH] rtl818x: fix RTS/CTS-less transmit
@ 2008-02-18 13:20 Johannes Berg
0 siblings, 0 replies; only message in thread
From: Johannes Berg @ 2008-02-18 13:20 UTC (permalink / raw)
To: John Linville; +Cc: Michael Wu, Hauke Mehrtens, David G Hamblen, linux-wireless
This fixes packet transmission of packets without RTS/CTS.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
This patch is similar to the one you already tested and also fixes
rtl8180.
drivers/net/wireless/rtl8180_dev.c | 14 ++++++++++----
drivers/net/wireless/rtl8187_dev.c | 12 +++++++++---
2 files changed, 19 insertions(+), 7 deletions(-)
--- everything.orig/drivers/net/wireless/rtl8187_dev.c 2008-02-18 12:19:40.070030491 +0100
+++ everything/drivers/net/wireless/rtl8187_dev.c 2008-02-18 12:52:19.960028104 +0100
@@ -176,17 +176,23 @@ static int rtl8187_tx(struct ieee80211_h
flags = skb->len;
flags |= RTL8187_TX_FLAG_NO_ENCRYPT;
- flags |= control->rts_cts_rate->hw_value << 19;
+
+ BUG_ON(!control->tx_rate);
+
flags |= control->tx_rate->hw_value << 24;
if (ieee80211_get_morefrag((struct ieee80211_hdr *)skb->data))
flags |= RTL8187_TX_FLAG_MORE_FRAG;
if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS) {
+ BUG_ON(!control->rts_cts_rate);
flags |= RTL8187_TX_FLAG_RTS;
+ flags |= control->rts_cts_rate->hw_value << 19;
rts_dur = ieee80211_rts_duration(dev, priv->vif,
skb->len, control);
- }
- if (control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT)
+ } else if (control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT) {
+ BUG_ON(!control->rts_cts_rate);
flags |= RTL8187_TX_FLAG_CTS;
+ flags |= control->rts_cts_rate->hw_value << 19;
+ }
hdr = (struct rtl8187_tx_hdr *)skb_push(skb, sizeof(*hdr));
hdr->flags = cpu_to_le32(flags);
--- everything.orig/drivers/net/wireless/rtl8180_dev.c 2008-02-18 12:50:51.580030491 +0100
+++ everything/drivers/net/wireless/rtl8180_dev.c 2008-02-18 12:52:48.240028429 +0100
@@ -255,19 +255,25 @@ static int rtl8180_tx(struct ieee80211_h
mapping = pci_map_single(priv->pdev, skb->data,
skb->len, PCI_DMA_TODEVICE);
+ BUG_ON(!control->tx_rate);
+
tx_flags = RTL8180_TX_DESC_FLAG_OWN | RTL8180_TX_DESC_FLAG_FS |
RTL8180_TX_DESC_FLAG_LS |
- (control->tx_rate->hw_value << 24) |
- (control->rts_cts_rate->hw_value << 19) | skb->len;
+ (control->tx_rate->hw_value << 24) | skb->len;
if (priv->r8185)
tx_flags |= RTL8180_TX_DESC_FLAG_DMA |
RTL8180_TX_DESC_FLAG_NO_ENC;
- if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS)
+ if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS) {
+ BUG_ON(!control->rts_cts_rate);
tx_flags |= RTL8180_TX_DESC_FLAG_RTS;
- else if (control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT)
+ tx_flags |= control->rts_cts_rate->hw_value << 19;
+ } else if (control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT) {
+ BUG_ON(!control->rts_cts_rate);
tx_flags |= RTL8180_TX_DESC_FLAG_CTS;
+ tx_flags |= control->rts_cts_rate->hw_value << 19;
+ }
*((struct ieee80211_tx_control **) skb->cb) =
kmemdup(control, sizeof(*control), GFP_ATOMIC);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-02-18 13:20 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-18 13:20 [PATCH] rtl818x: fix RTS/CTS-less transmit Johannes Berg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox