aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2008-04-29 11:18:59 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-05-07 15:02:26 -0400
commit57ffc589a92424f9def74fe0d49b2f7763ff07fd (patch)
tree2ec3f60cac2e5757206dee219e7b3a60ded13004
parent3e0d4cb12f6fd97193a455b49125398b2231c87c (diff)
mac80211: clean up get_tx_stats callback
The callback takes a ieee80211_tx_queue_stats with a contained array of ieee80211_tx_queue_stats_data, remove the former, rename the latter to ieee80211_tx_queue_stats and make tx_stats() take the array directly. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/adm8211.c7
-rw-r--r--drivers/net/wireless/ath5k/base.c8
-rw-r--r--drivers/net/wireless/ath5k/base.h3
-rw-r--r--drivers/net/wireless/b43/dma.c8
-rw-r--r--drivers/net/wireless/b43/pio.c8
-rw-r--r--drivers/net/wireless/b43legacy/dma.c8
-rw-r--r--drivers/net/wireless/b43legacy/pio.c8
-rw-r--r--drivers/net/wireless/iwlwifi/iwl3945-base.c6
-rw-r--r--drivers/net/wireless/iwlwifi/iwl4965-base.c6
-rw-r--r--drivers/net/wireless/p54/p54.h2
-rw-r--r--drivers/net/wireless/p54/p54common.c24
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00mac.c6
-rw-r--r--include/net/mac80211.h13
13 files changed, 45 insertions, 62 deletions
diff --git a/drivers/net/wireless/adm8211.c b/drivers/net/wireless/adm8211.c
index 5c0d2b082750..d93a1de77eb0 100644
--- a/drivers/net/wireless/adm8211.c
+++ b/drivers/net/wireless/adm8211.c
@@ -306,11 +306,10 @@ static int adm8211_get_tx_stats(struct ieee80211_hw *dev,
306 struct ieee80211_tx_queue_stats *stats) 306 struct ieee80211_tx_queue_stats *stats)
307{ 307{
308 struct adm8211_priv *priv = dev->priv; 308 struct adm8211_priv *priv = dev->priv;
309 struct ieee80211_tx_queue_stats_data *data = &stats->data[0];
310 309
311 data->len = priv->cur_tx - priv->dirty_tx; 310 stats[0].len = priv->cur_tx - priv->dirty_tx;
312 data->limit = priv->tx_ring_size - 2; 311 stats[0].limit = priv->tx_ring_size - 2;
313 data->count = priv->dirty_tx; 312 stats[0].count = priv->dirty_tx;
314 313
315 return 0; 314 return 0;
316} 315}
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c
index 3854619f3514..3201c1604340 100644
--- a/drivers/net/wireless/ath5k/base.c
+++ b/drivers/net/wireless/ath5k/base.c
@@ -1335,7 +1335,7 @@ ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf,
1335 1335
1336 spin_lock_bh(&txq->lock); 1336 spin_lock_bh(&txq->lock);
1337 list_add_tail(&bf->list, &txq->q); 1337 list_add_tail(&bf->list, &txq->q);
1338 sc->tx_stats.data[txq->qnum].len++; 1338 sc->tx_stats[txq->qnum].len++;
1339 if (txq->link == NULL) /* is this first packet? */ 1339 if (txq->link == NULL) /* is this first packet? */
1340 ath5k_hw_put_tx_buf(ah, txq->qnum, bf->daddr); 1340 ath5k_hw_put_tx_buf(ah, txq->qnum, bf->daddr);
1341 else /* no, so only link it */ 1341 else /* no, so only link it */
@@ -1566,7 +1566,7 @@ ath5k_txq_drainq(struct ath5k_softc *sc, struct ath5k_txq *txq)
1566 ath5k_txbuf_free(sc, bf); 1566 ath5k_txbuf_free(sc, bf);
1567 1567
1568 spin_lock_bh(&sc->txbuflock); 1568 spin_lock_bh(&sc->txbuflock);
1569 sc->tx_stats.data[txq->qnum].len--; 1569 sc->tx_stats[txq->qnum].len--;
1570 list_move_tail(&bf->list, &sc->txbuf); 1570 list_move_tail(&bf->list, &sc->txbuf);
1571 sc->txbuf_len++; 1571 sc->txbuf_len++;
1572 spin_unlock_bh(&sc->txbuflock); 1572 spin_unlock_bh(&sc->txbuflock);
@@ -1979,10 +1979,10 @@ ath5k_tx_processq(struct ath5k_softc *sc, struct ath5k_txq *txq)
1979 } 1979 }
1980 1980
1981 ieee80211_tx_status(sc->hw, skb, &txs); 1981 ieee80211_tx_status(sc->hw, skb, &txs);
1982 sc->tx_stats.data[txq->qnum].count++; 1982 sc->tx_stats[txq->qnum].count++;
1983 1983
1984 spin_lock(&sc->txbuflock); 1984 spin_lock(&sc->txbuflock);
1985 sc->tx_stats.data[txq->qnum].len--; 1985 sc->tx_stats[txq->qnum].len--;
1986 list_move_tail(&bf->list, &sc->txbuf); 1986 list_move_tail(&bf->list, &sc->txbuf);
1987 sc->txbuf_len++; 1987 sc->txbuf_len++;
1988 spin_unlock(&sc->txbuflock); 1988 spin_unlock(&sc->txbuflock);
diff --git a/drivers/net/wireless/ath5k/base.h b/drivers/net/wireless/ath5k/base.h
index 3a9755893018..ecb17495488c 100644
--- a/drivers/net/wireless/ath5k/base.h
+++ b/drivers/net/wireless/ath5k/base.h
@@ -92,7 +92,8 @@ struct ath5k_softc {
92 struct pci_dev *pdev; /* for dma mapping */ 92 struct pci_dev *pdev; /* for dma mapping */
93 void __iomem *iobase; /* address of the device */ 93 void __iomem *iobase; /* address of the device */
94 struct mutex lock; /* dev-level lock */ 94 struct mutex lock; /* dev-level lock */
95 struct ieee80211_tx_queue_stats tx_stats; 95 /* FIXME: how many does it really need? */
96 struct ieee80211_tx_queue_stats tx_stats[16];
96 struct ieee80211_low_level_stats ll_stats; 97 struct ieee80211_low_level_stats ll_stats;
97 struct ieee80211_hw *hw; /* IEEE 802.11 common */ 98 struct ieee80211_hw *hw; /* IEEE 802.11 common */
98 struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS]; 99 struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c
index 6dcbb3c87e72..f50e2014ffbe 100644
--- a/drivers/net/wireless/b43/dma.c
+++ b/drivers/net/wireless/b43/dma.c
@@ -1427,18 +1427,16 @@ void b43_dma_get_tx_stats(struct b43_wldev *dev,
1427{ 1427{
1428 const int nr_queues = dev->wl->hw->queues; 1428 const int nr_queues = dev->wl->hw->queues;
1429 struct b43_dmaring *ring; 1429 struct b43_dmaring *ring;
1430 struct ieee80211_tx_queue_stats_data *data;
1431 unsigned long flags; 1430 unsigned long flags;
1432 int i; 1431 int i;
1433 1432
1434 for (i = 0; i < nr_queues; i++) { 1433 for (i = 0; i < nr_queues; i++) {
1435 data = &(stats->data[i]);
1436 ring = select_ring_by_priority(dev, i); 1434 ring = select_ring_by_priority(dev, i);
1437 1435
1438 spin_lock_irqsave(&ring->lock, flags); 1436 spin_lock_irqsave(&ring->lock, flags);
1439 data->len = ring->used_slots / SLOTS_PER_PACKET; 1437 stats[i].len = ring->used_slots / SLOTS_PER_PACKET;
1440 data->limit = ring->nr_slots / SLOTS_PER_PACKET; 1438 stats[i].limit = ring->nr_slots / SLOTS_PER_PACKET;
1441 data->count = ring->nr_tx_packets; 1439 stats[i].count = ring->nr_tx_packets;
1442 spin_unlock_irqrestore(&ring->lock, flags); 1440 spin_unlock_irqrestore(&ring->lock, flags);
1443 } 1441 }
1444} 1442}
diff --git a/drivers/net/wireless/b43/pio.c b/drivers/net/wireless/b43/pio.c
index fcacafb04346..08c8a087f30e 100644
--- a/drivers/net/wireless/b43/pio.c
+++ b/drivers/net/wireless/b43/pio.c
@@ -611,18 +611,16 @@ void b43_pio_get_tx_stats(struct b43_wldev *dev,
611{ 611{
612 const int nr_queues = dev->wl->hw->queues; 612 const int nr_queues = dev->wl->hw->queues;
613 struct b43_pio_txqueue *q; 613 struct b43_pio_txqueue *q;
614 struct ieee80211_tx_queue_stats_data *data;
615 unsigned long flags; 614 unsigned long flags;
616 int i; 615 int i;
617 616
618 for (i = 0; i < nr_queues; i++) { 617 for (i = 0; i < nr_queues; i++) {
619 data = &(stats->data[i]);
620 q = select_queue_by_priority(dev, i); 618 q = select_queue_by_priority(dev, i);
621 619
622 spin_lock_irqsave(&q->lock, flags); 620 spin_lock_irqsave(&q->lock, flags);
623 data->len = B43_PIO_MAX_NR_TXPACKETS - q->free_packet_slots; 621 stats[i].len = B43_PIO_MAX_NR_TXPACKETS - q->free_packet_slots;
624 data->limit = B43_PIO_MAX_NR_TXPACKETS; 622 stats[i].limit = B43_PIO_MAX_NR_TXPACKETS;
625 data->count = q->nr_tx_packets; 623 stats[i].count = q->nr_tx_packets;
626 spin_unlock_irqrestore(&q->lock, flags); 624 spin_unlock_irqrestore(&q->lock, flags);
627 } 625 }
628} 626}
diff --git a/drivers/net/wireless/b43legacy/dma.c b/drivers/net/wireless/b43legacy/dma.c
index c990f87b107a..d6686f713b6d 100644
--- a/drivers/net/wireless/b43legacy/dma.c
+++ b/drivers/net/wireless/b43legacy/dma.c
@@ -1455,18 +1455,16 @@ void b43legacy_dma_get_tx_stats(struct b43legacy_wldev *dev,
1455{ 1455{
1456 const int nr_queues = dev->wl->hw->queues; 1456 const int nr_queues = dev->wl->hw->queues;
1457 struct b43legacy_dmaring *ring; 1457 struct b43legacy_dmaring *ring;
1458 struct ieee80211_tx_queue_stats_data *data;
1459 unsigned long flags; 1458 unsigned long flags;
1460 int i; 1459 int i;
1461 1460
1462 for (i = 0; i < nr_queues; i++) { 1461 for (i = 0; i < nr_queues; i++) {
1463 data = &(stats->data[i]);
1464 ring = priority_to_txring(dev, i); 1462 ring = priority_to_txring(dev, i);
1465 1463
1466 spin_lock_irqsave(&ring->lock, flags); 1464 spin_lock_irqsave(&ring->lock, flags);
1467 data->len = ring->used_slots / SLOTS_PER_PACKET; 1465 stats[i].len = ring->used_slots / SLOTS_PER_PACKET;
1468 data->limit = ring->nr_slots / SLOTS_PER_PACKET; 1466 stats[i].limit = ring->nr_slots / SLOTS_PER_PACKET;
1469 data->count = ring->nr_tx_packets; 1467 stats[i].count = ring->nr_tx_packets;
1470 spin_unlock_irqrestore(&ring->lock, flags); 1468 spin_unlock_irqrestore(&ring->lock, flags);
1471 } 1469 }
1472} 1470}
diff --git a/drivers/net/wireless/b43legacy/pio.c b/drivers/net/wireless/b43legacy/pio.c
index bcdd54eb2edb..8d3d27d3cd67 100644
--- a/drivers/net/wireless/b43legacy/pio.c
+++ b/drivers/net/wireless/b43legacy/pio.c
@@ -525,13 +525,11 @@ void b43legacy_pio_get_tx_stats(struct b43legacy_wldev *dev,
525{ 525{
526 struct b43legacy_pio *pio = &dev->pio; 526 struct b43legacy_pio *pio = &dev->pio;
527 struct b43legacy_pioqueue *queue; 527 struct b43legacy_pioqueue *queue;
528 struct ieee80211_tx_queue_stats_data *data;
529 528
530 queue = pio->queue1; 529 queue = pio->queue1;
531 data = &(stats->data[0]); 530 stats[0].len = B43legacy_PIO_MAXTXPACKETS - queue->nr_txfree;
532 data->len = B43legacy_PIO_MAXTXPACKETS - queue->nr_txfree; 531 stats[0].limit = B43legacy_PIO_MAXTXPACKETS;
533 data->limit = B43legacy_PIO_MAXTXPACKETS; 532 stats[0].count = queue->nr_tx_packets;
534 data->count = queue->nr_tx_packets;
535} 533}
536 534
537static void pio_rx_error(struct b43legacy_pioqueue *queue, 535static void pio_rx_error(struct b43legacy_pioqueue *queue,
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 67fd267c99ca..bad367cfbee3 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -7217,9 +7217,9 @@ static int iwl3945_mac_get_tx_stats(struct ieee80211_hw *hw,
7217 q = &txq->q; 7217 q = &txq->q;
7218 avail = iwl3945_queue_space(q); 7218 avail = iwl3945_queue_space(q);
7219 7219
7220 stats->data[i].len = q->n_window - avail; 7220 stats[i].len = q->n_window - avail;
7221 stats->data[i].limit = q->n_window - q->high_mark; 7221 stats[i].limit = q->n_window - q->high_mark;
7222 stats->data[i].count = q->n_window; 7222 stats[i].count = q->n_window;
7223 7223
7224 } 7224 }
7225 spin_unlock_irqrestore(&priv->lock, flags); 7225 spin_unlock_irqrestore(&priv->lock, flags);
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c
index f887a4e54ba2..64cb905cdaed 100644
--- a/drivers/net/wireless/iwlwifi/iwl4965-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c
@@ -6420,9 +6420,9 @@ static int iwl4965_mac_get_tx_stats(struct ieee80211_hw *hw,
6420 q = &txq->q; 6420 q = &txq->q;
6421 avail = iwl4965_queue_space(q); 6421 avail = iwl4965_queue_space(q);
6422 6422
6423 stats->data[i].len = q->n_window - avail; 6423 stats[i].len = q->n_window - avail;
6424 stats->data[i].limit = q->n_window - q->high_mark; 6424 stats[i].limit = q->n_window - q->high_mark;
6425 stats->data[i].count = q->n_window; 6425 stats[i].count = q->n_window;
6426 6426
6427 } 6427 }
6428 spin_unlock_irqrestore(&priv->lock, flags); 6428 spin_unlock_irqrestore(&priv->lock, flags);
diff --git a/drivers/net/wireless/p54/p54.h b/drivers/net/wireless/p54/p54.h
index 06d2c67f4c81..c6f27b9022f9 100644
--- a/drivers/net/wireless/p54/p54.h
+++ b/drivers/net/wireless/p54/p54.h
@@ -64,7 +64,7 @@ struct p54_common {
64 unsigned int tx_hdr_len; 64 unsigned int tx_hdr_len;
65 void *cached_vdcf; 65 void *cached_vdcf;
66 unsigned int fw_var; 66 unsigned int fw_var;
67 struct ieee80211_tx_queue_stats tx_stats; 67 struct ieee80211_tx_queue_stats tx_stats[4];
68}; 68};
69 69
70int p54_rx(struct ieee80211_hw *dev, struct sk_buff *skb); 70int p54_rx(struct ieee80211_hw *dev, struct sk_buff *skb);
diff --git a/drivers/net/wireless/p54/p54common.c b/drivers/net/wireless/p54/p54common.c
index 63f9badf3f52..59a26978f877 100644
--- a/drivers/net/wireless/p54/p54common.c
+++ b/drivers/net/wireless/p54/p54common.c
@@ -146,10 +146,10 @@ void p54_parse_firmware(struct ieee80211_hw *dev, const struct firmware *fw)
146 146
147 if (priv->fw_var >= 0x300) { 147 if (priv->fw_var >= 0x300) {
148 /* Firmware supports QoS, use it! */ 148 /* Firmware supports QoS, use it! */
149 priv->tx_stats.data[0].limit = 3; 149 priv->tx_stats[0].limit = 3;
150 priv->tx_stats.data[1].limit = 4; 150 priv->tx_stats[1].limit = 4;
151 priv->tx_stats.data[2].limit = 3; 151 priv->tx_stats[2].limit = 3;
152 priv->tx_stats.data[3].limit = 1; 152 priv->tx_stats[3].limit = 1;
153 dev->queues = 4; 153 dev->queues = 4;
154 } 154 }
155} 155}
@@ -379,7 +379,7 @@ static void inline p54_wake_free_queues(struct ieee80211_hw *dev)
379 * But, what if some are full? */ 379 * But, what if some are full? */
380 380
381 for (i = 0; i < dev->queues; i++) 381 for (i = 0; i < dev->queues; i++)
382 if (priv->tx_stats.data[i].len < priv->tx_stats.data[i].limit) 382 if (priv->tx_stats[i].len < priv->tx_stats[i].limit)
383 ieee80211_wake_queue(dev, i); 383 ieee80211_wake_queue(dev, i);
384} 384}
385 385
@@ -417,8 +417,7 @@ static void p54_rx_frame_sent(struct ieee80211_hw *dev, struct sk_buff *skb)
417 memcpy(&status.control, range->control, 417 memcpy(&status.control, range->control,
418 sizeof(status.control)); 418 sizeof(status.control));
419 kfree(range->control); 419 kfree(range->control);
420 priv->tx_stats.data[status.control.queue].len--; 420 priv->tx_stats[status.control.queue].len--;
421
422 entry_hdr = (struct p54_control_hdr *) entry->data; 421 entry_hdr = (struct p54_control_hdr *) entry->data;
423 entry_data = (struct p54_tx_control_allocdata *) entry_hdr->data; 422 entry_data = (struct p54_tx_control_allocdata *) entry_hdr->data;
424 if ((entry_hdr->magic1 & cpu_to_le16(0x4000)) != 0) 423 if ((entry_hdr->magic1 & cpu_to_le16(0x4000)) != 0)
@@ -555,7 +554,7 @@ static void p54_assign_address(struct ieee80211_hw *dev, struct sk_buff *skb,
555static int p54_tx(struct ieee80211_hw *dev, struct sk_buff *skb, 554static int p54_tx(struct ieee80211_hw *dev, struct sk_buff *skb,
556 struct ieee80211_tx_control *control) 555 struct ieee80211_tx_control *control)
557{ 556{
558 struct ieee80211_tx_queue_stats_data *current_queue; 557 struct ieee80211_tx_queue_stats *current_queue;
559 struct p54_common *priv = dev->priv; 558 struct p54_common *priv = dev->priv;
560 struct p54_control_hdr *hdr; 559 struct p54_control_hdr *hdr;
561 struct p54_tx_control_allocdata *txhdr; 560 struct p54_tx_control_allocdata *txhdr;
@@ -563,7 +562,7 @@ static int p54_tx(struct ieee80211_hw *dev, struct sk_buff *skb,
563 size_t padding, len; 562 size_t padding, len;
564 u8 rate; 563 u8 rate;
565 564
566 current_queue = &priv->tx_stats.data[control->queue]; 565 current_queue = &priv->tx_stats[control->queue];
567 if (unlikely(current_queue->len > current_queue->limit)) 566 if (unlikely(current_queue->len > current_queue->limit))
568 return NETDEV_TX_BUSY; 567 return NETDEV_TX_BUSY;
569 current_queue->len++; 568 current_queue->len++;
@@ -967,11 +966,8 @@ static int p54_get_tx_stats(struct ieee80211_hw *dev,
967 struct ieee80211_tx_queue_stats *stats) 966 struct ieee80211_tx_queue_stats *stats)
968{ 967{
969 struct p54_common *priv = dev->priv; 968 struct p54_common *priv = dev->priv;
970 unsigned int i;
971 969
972 for (i = 0; i < dev->queues; i++) 970 memcpy(stats, &priv->tx_stats, sizeof(stats[0]) * dev->queues);
973 memcpy(&stats->data[i], &priv->tx_stats.data[i],
974 sizeof(stats->data[i]));
975 971
976 return 0; 972 return 0;
977} 973}
@@ -1008,7 +1004,7 @@ struct ieee80211_hw *p54_init_common(size_t priv_data_len)
1008 dev->channel_change_time = 1000; /* TODO: find actual value */ 1004 dev->channel_change_time = 1000; /* TODO: find actual value */
1009 dev->max_rssi = 127; 1005 dev->max_rssi = 127;
1010 1006
1011 priv->tx_stats.data[0].limit = 5; 1007 priv->tx_stats[0].limit = 5;
1012 dev->queues = 1; 1008 dev->queues = 1;
1013 1009
1014 dev->extra_tx_headroom = sizeof(struct p54_control_hdr) + 4 + 1010 dev->extra_tx_headroom = sizeof(struct p54_control_hdr) + 4 +
diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c
index d4ceab7646e7..7bc5129484f2 100644
--- a/drivers/net/wireless/rt2x00/rt2x00mac.c
+++ b/drivers/net/wireless/rt2x00/rt2x00mac.c
@@ -457,9 +457,9 @@ int rt2x00mac_get_tx_stats(struct ieee80211_hw *hw,
457 unsigned int i; 457 unsigned int i;
458 458
459 for (i = 0; i < hw->queues; i++) { 459 for (i = 0; i < hw->queues; i++) {
460 stats->data[i].len = rt2x00dev->tx[i].length; 460 stats[i].len = rt2x00dev->tx[i].length;
461 stats->data[i].limit = rt2x00dev->tx[i].limit; 461 stats[i].limit = rt2x00dev->tx[i].limit;
462 stats->data[i].count = rt2x00dev->tx[i].count; 462 stats[i].count = rt2x00dev->tx[i].count;
463 } 463 }
464 464
465 return 0; 465 return 0;
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 740c11ca066c..346a7563ef02 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -117,13 +117,13 @@ struct ieee80211_tx_queue_params {
117}; 117};
118 118
119/** 119/**
120 * struct ieee80211_tx_queue_stats_data - transmit queue statistics 120 * struct ieee80211_tx_queue_stats - transmit queue statistics
121 * 121 *
122 * @len: number of packets in queue 122 * @len: number of packets in queue
123 * @limit: queue length limit 123 * @limit: queue length limit
124 * @count: number of frames sent 124 * @count: number of frames sent
125 */ 125 */
126struct ieee80211_tx_queue_stats_data { 126struct ieee80211_tx_queue_stats {
127 unsigned int len; 127 unsigned int len;
128 unsigned int limit; 128 unsigned int limit;
129 unsigned int count; 129 unsigned int count;
@@ -165,10 +165,6 @@ enum ieee80211_tx_queue {
165 NUM_TX_DATA_QUEUES_AMPDU = 16 165 NUM_TX_DATA_QUEUES_AMPDU = 16
166}; 166};
167 167
168struct ieee80211_tx_queue_stats {
169 struct ieee80211_tx_queue_stats_data data[NUM_TX_DATA_QUEUES_AMPDU];
170};
171
172struct ieee80211_low_level_stats { 168struct ieee80211_low_level_stats {
173 unsigned int dot11ACKFailureCount; 169 unsigned int dot11ACKFailureCount;
174 unsigned int dot11RTSFailureCount; 170 unsigned int dot11RTSFailureCount;
@@ -1083,9 +1079,8 @@ enum ieee80211_ampdu_mlme_action {
1083 * @get_tx_stats: Get statistics of the current TX queue status. This is used 1079 * @get_tx_stats: Get statistics of the current TX queue status. This is used
1084 * to get number of currently queued packets (queue length), maximum queue 1080 * to get number of currently queued packets (queue length), maximum queue
1085 * size (limit), and total number of packets sent using each TX queue 1081 * size (limit), and total number of packets sent using each TX queue
1086 * (count). This information is used for WMM to find out which TX 1082 * (count). The 'stats' pointer points to an array that has hw->queues +
1087 * queues have room for more packets and by hostapd to provide 1083 * hw->ampdu_queues items.
1088 * statistics about the current queueing state to external programs.
1089 * 1084 *
1090 * @get_tsf: Get the current TSF timer value from firmware/hardware. Currently, 1085 * @get_tsf: Get the current TSF timer value from firmware/hardware. Currently,
1091 * this is only used for IBSS mode debugging and, as such, is not a 1086 * this is only used for IBSS mode debugging and, as such, is not a