aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00
diff options
context:
space:
mode:
authorStanislaw Gruszka <sgruszka@redhat.com>2012-03-14 06:16:20 -0400
committerJohn W. Linville <linville@tuxdriver.com>2012-03-15 13:40:32 -0400
commit5f8f718ae1e1a6b4e16e67e9e67aff1864419f2e (patch)
treecc5381454378c365d3f6b4585718b5bc4580cb23 /drivers/net/wireless/rt2x00
parentf421111b5e69020c047eb3ff057e50f446c3c7a2 (diff)
rt2x00: rt2800usb: do not check packedid for aggregated frames
Tx statuses of aggregated subframes contain packetid of first subframe in the AMPDU. We can not identify AMPDU subframes based on packedid, so simply assume that status match first pending frame in the queue. Thats mostly the same what 2800pci do. Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> Acked-by: Gertjan van Wingerde <gwingerde@gmail.com> Acked-by: Helmut Schaa <helmut.schaa@googlemail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00')
-rw-r--r--drivers/net/wireless/rt2x00/rt2800usb.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
index eacf94b2f382..8c1d2c0df854 100644
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -502,7 +502,7 @@ rt2800usb_txdone_entry_check(struct queue_entry *entry, u32 reg)
502 __le32 *txwi; 502 __le32 *txwi;
503 u32 word; 503 u32 word;
504 int wcid, ack, pid; 504 int wcid, ack, pid;
505 int tx_wcid, tx_ack, tx_pid; 505 int tx_wcid, tx_ack, tx_pid, is_agg;
506 506
507 /* 507 /*
508 * This frames has returned with an IO error, 508 * This frames has returned with an IO error,
@@ -515,6 +515,7 @@ rt2800usb_txdone_entry_check(struct queue_entry *entry, u32 reg)
515 wcid = rt2x00_get_field32(reg, TX_STA_FIFO_WCID); 515 wcid = rt2x00_get_field32(reg, TX_STA_FIFO_WCID);
516 ack = rt2x00_get_field32(reg, TX_STA_FIFO_TX_ACK_REQUIRED); 516 ack = rt2x00_get_field32(reg, TX_STA_FIFO_TX_ACK_REQUIRED);
517 pid = rt2x00_get_field32(reg, TX_STA_FIFO_PID_TYPE); 517 pid = rt2x00_get_field32(reg, TX_STA_FIFO_PID_TYPE);
518 is_agg = rt2x00_get_field32(reg, TX_STA_FIFO_TX_AGGRE);
518 519
519 /* 520 /*
520 * Validate if this TX status report is intended for 521 * Validate if this TX status report is intended for
@@ -527,7 +528,7 @@ rt2800usb_txdone_entry_check(struct queue_entry *entry, u32 reg)
527 tx_ack = rt2x00_get_field32(word, TXWI_W1_ACK); 528 tx_ack = rt2x00_get_field32(word, TXWI_W1_ACK);
528 tx_pid = rt2x00_get_field32(word, TXWI_W1_PACKETID); 529 tx_pid = rt2x00_get_field32(word, TXWI_W1_PACKETID);
529 530
530 if ((wcid != tx_wcid) || (ack != tx_ack) || (pid != tx_pid)) { 531 if (wcid != tx_wcid || ack != tx_ack || (!is_agg && pid != tx_pid)) {
531 WARNING(entry->queue->rt2x00dev, 532 WARNING(entry->queue->rt2x00dev,
532 "TX status report missed for queue %d entry %d\n", 533 "TX status report missed for queue %d entry %d\n",
533 entry->queue->qid, entry->entry_idx); 534 entry->queue->qid, entry->entry_idx);