Bug #365
Fwd: [PATCH] ath9k: Fix TX fragmentation
| Status: | New | Start date: | ||
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assignee: | - | % Done: | 0% |
|
| Category: | - | Spent time: | - | |
| Target version: | 1st Public Cerowrt release |
Description
---------- Forwarded message ----------
From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Date: Tue, Apr 17, 2012 at 4:04 AM
Subject: [PATCH] ath9k: Fix TX fragmentation
To: linville@tuxdriver.com
Cc: linux-wireless@vger.kernel.org
Assigning sequence number for frames without taking care
of the fragment field breaks transmission of fragmented frames.
Fix this by assigning the fragment number properly.
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath9k/xmit.c | 10 +++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c
b/drivers/net/wireless/ath/ath9k/xmit.c
index 834e6bc..23eaa1b 100644
--- a/drivers/net/wireless/ath/ath9k/xmit.c
++ b/drivers/net/wireless/ath/ath9k/xmit.c@ -1820,6 +1820,7 @ static struct ath_buf
*ath_tx_setup_buffer(struct ath_softc *sc,
struct ath_frame_info *fi = get_frame_info(skb);
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
struct ath_buf *bf;
int fragno;
u16 seqno;
bf = ath_tx_get_buffer(sc);@ -1831,9 +1832,16 @ static struct ath_buf
*ath_tx_setup_buffer(struct ath_softc *sc,
ATH_TXBUF_RESET(bf);
if (tid) {
+ fragno = le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG;
seqno = tid->seq_next;
hdr->seq_ctrl = cpu_to_le16(tid->seq_next <<
IEEE80211_SEQ_SEQ_SHIFT);
- INCR;
if (fragno)
+ hdr->seq_ctrl |= cpu_to_le16(fragno);
if (!ieee80211_has_morefrags(hdr->frame_control))
+ INCR;
+
bf->bf_state.seqno = seqno;
}
History
Updated by Dave Täht about 1 year ago
- Target version set to 1st Public Cerowrt release