aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHelmut Schaa <helmut.schaa@googlemail.com>2010-11-04 15:38:15 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-11-15 13:25:59 -0500
commit2b23cdaa3b0e9567597563e5a7a5103ecda447f0 (patch)
tree3aa87f486d324c381a9e38dc178939cd1b7d6793
parent08e5310028359de2daaa39cd10e9ca493c51792b (diff)
rt2x00: Reduce tx descriptor size
The tx descriptor values qid, cw_min, cw_max and aifs are directly accessible through the tx entry struct. So there's no need to copy them into the tx descriptor and passing them to the indiviual drivers. Instead we can just get the correct value from the tx entry. Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/rt2x00/rt2500pci.c6
-rw-r--r--drivers/net/wireless/rt2x00/rt2500usb.c6
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c2
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00queue.c8
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00queue.h9
-rw-r--r--drivers/net/wireless/rt2x00/rt61pci.c14
-rw-r--r--drivers/net/wireless/rt2x00/rt73usb.c8
7 files changed, 18 insertions, 35 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
index ab6c9eccd9bb..b69e55fedda9 100644
--- a/drivers/net/wireless/rt2x00/rt2500pci.c
+++ b/drivers/net/wireless/rt2x00/rt2500pci.c
@@ -1193,9 +1193,9 @@ static void rt2500pci_write_tx_desc(struct queue_entry *entry,
1193 1193
1194 rt2x00_desc_read(txd, 2, &word); 1194 rt2x00_desc_read(txd, 2, &word);
1195 rt2x00_set_field32(&word, TXD_W2_IV_OFFSET, IEEE80211_HEADER); 1195 rt2x00_set_field32(&word, TXD_W2_IV_OFFSET, IEEE80211_HEADER);
1196 rt2x00_set_field32(&word, TXD_W2_AIFS, txdesc->aifs); 1196 rt2x00_set_field32(&word, TXD_W2_AIFS, entry->queue->aifs);
1197 rt2x00_set_field32(&word, TXD_W2_CWMIN, txdesc->cw_min); 1197 rt2x00_set_field32(&word, TXD_W2_CWMIN, entry->queue->cw_min);
1198 rt2x00_set_field32(&word, TXD_W2_CWMAX, txdesc->cw_max); 1198 rt2x00_set_field32(&word, TXD_W2_CWMAX, entry->queue->cw_max);
1199 rt2x00_desc_write(txd, 2, word); 1199 rt2x00_desc_write(txd, 2, word);
1200 1200
1201 rt2x00_desc_read(txd, 3, &word); 1201 rt2x00_desc_read(txd, 3, &word);
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
index 725ae34f1815..f20ab79b2817 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.c
+++ b/drivers/net/wireless/rt2x00/rt2500usb.c
@@ -1081,9 +1081,9 @@ static void rt2500usb_write_tx_desc(struct queue_entry *entry,
1081 1081
1082 rt2x00_desc_read(txd, 1, &word); 1082 rt2x00_desc_read(txd, 1, &word);
1083 rt2x00_set_field32(&word, TXD_W1_IV_OFFSET, txdesc->iv_offset); 1083 rt2x00_set_field32(&word, TXD_W1_IV_OFFSET, txdesc->iv_offset);
1084 rt2x00_set_field32(&word, TXD_W1_AIFS, txdesc->aifs); 1084 rt2x00_set_field32(&word, TXD_W1_AIFS, entry->queue->aifs);
1085 rt2x00_set_field32(&word, TXD_W1_CWMIN, txdesc->cw_min); 1085 rt2x00_set_field32(&word, TXD_W1_CWMIN, entry->queue->cw_min);
1086 rt2x00_set_field32(&word, TXD_W1_CWMAX, txdesc->cw_max); 1086 rt2x00_set_field32(&word, TXD_W1_CWMAX, entry->queue->cw_max);
1087 rt2x00_desc_write(txd, 1, word); 1087 rt2x00_desc_write(txd, 1, word);
1088 1088
1089 rt2x00_desc_read(txd, 2, &word); 1089 rt2x00_desc_read(txd, 2, &word);
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index dcd3a8981ca2..6fa654956f4e 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -487,7 +487,7 @@ void rt2800_write_tx_data(struct queue_entry *entry,
487 txdesc->key_idx : 0xff); 487 txdesc->key_idx : 0xff);
488 rt2x00_set_field32(&word, TXWI_W1_MPDU_TOTAL_BYTE_COUNT, 488 rt2x00_set_field32(&word, TXWI_W1_MPDU_TOTAL_BYTE_COUNT,
489 txdesc->length); 489 txdesc->length);
490 rt2x00_set_field32(&word, TXWI_W1_PACKETID_QUEUE, txdesc->qid); 490 rt2x00_set_field32(&word, TXWI_W1_PACKETID_QUEUE, entry->queue->qid);
491 rt2x00_set_field32(&word, TXWI_W1_PACKETID_ENTRY, (entry->entry_idx % 3) + 1); 491 rt2x00_set_field32(&word, TXWI_W1_PACKETID_ENTRY, (entry->entry_idx % 3) + 1);
492 rt2x00_desc_write(txwi, 1, word); 492 rt2x00_desc_write(txwi, 1, word);
493 493
diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c
index e360d287defb..4e2a8c2e014d 100644
--- a/drivers/net/wireless/rt2x00/rt2x00queue.c
+++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
@@ -311,14 +311,6 @@ static void rt2x00queue_create_tx_descriptor(struct queue_entry *entry,
311 memset(txdesc, 0, sizeof(*txdesc)); 311 memset(txdesc, 0, sizeof(*txdesc));
312 312
313 /* 313 /*
314 * Initialize information from queue
315 */
316 txdesc->qid = entry->queue->qid;
317 txdesc->cw_min = entry->queue->cw_min;
318 txdesc->cw_max = entry->queue->cw_max;
319 txdesc->aifs = entry->queue->aifs;
320
321 /*
322 * Header and frame information. 314 * Header and frame information.
323 */ 315 */
324 txdesc->length = entry->skb->len; 316 txdesc->length = entry->skb->len;
diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.h b/drivers/net/wireless/rt2x00/rt2x00queue.h
index 64acfb62d909..8a36ef31e893 100644
--- a/drivers/net/wireless/rt2x00/rt2x00queue.h
+++ b/drivers/net/wireless/rt2x00/rt2x00queue.h
@@ -280,7 +280,6 @@ enum txentry_desc_flags {
280 * Summary of information for the frame descriptor before sending a TX frame. 280 * Summary of information for the frame descriptor before sending a TX frame.
281 * 281 *
282 * @flags: Descriptor flags (See &enum queue_entry_flags). 282 * @flags: Descriptor flags (See &enum queue_entry_flags).
283 * @qid: Queue identification (See &enum data_queue_qid).
284 * @length: Length of the entire frame. 283 * @length: Length of the entire frame.
285 * @header_length: Length of 802.11 header. 284 * @header_length: Length of 802.11 header.
286 * @length_high: PLCP length high word. 285 * @length_high: PLCP length high word.
@@ -293,11 +292,8 @@ enum txentry_desc_flags {
293 * @rate_mode: Rate mode (See @enum rate_modulation). 292 * @rate_mode: Rate mode (See @enum rate_modulation).
294 * @mpdu_density: MDPU density. 293 * @mpdu_density: MDPU density.
295 * @retry_limit: Max number of retries. 294 * @retry_limit: Max number of retries.
296 * @aifs: AIFS value.
297 * @ifs: IFS value. 295 * @ifs: IFS value.
298 * @txop: IFS value for 11n capable chips. 296 * @txop: IFS value for 11n capable chips.
299 * @cw_min: cwmin value.
300 * @cw_max: cwmax value.
301 * @cipher: Cipher type used for encryption. 297 * @cipher: Cipher type used for encryption.
302 * @key_idx: Key index used for encryption. 298 * @key_idx: Key index used for encryption.
303 * @iv_offset: Position where IV should be inserted by hardware. 299 * @iv_offset: Position where IV should be inserted by hardware.
@@ -306,8 +302,6 @@ enum txentry_desc_flags {
306struct txentry_desc { 302struct txentry_desc {
307 unsigned long flags; 303 unsigned long flags;
308 304
309 enum data_queue_qid qid;
310
311 u16 length; 305 u16 length;
312 u16 header_length; 306 u16 header_length;
313 307
@@ -323,11 +317,8 @@ struct txentry_desc {
323 u16 mpdu_density; 317 u16 mpdu_density;
324 318
325 short retry_limit; 319 short retry_limit;
326 short aifs;
327 short ifs; 320 short ifs;
328 short txop; 321 short txop;
329 short cw_min;
330 short cw_max;
331 322
332 enum cipher cipher; 323 enum cipher cipher;
333 u16 key_idx; 324 u16 key_idx;
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
index 3232336b7f42..fba9ee11873b 100644
--- a/drivers/net/wireless/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/rt2x00/rt61pci.c
@@ -1789,10 +1789,10 @@ static void rt61pci_write_tx_desc(struct queue_entry *entry,
1789 * Start writing the descriptor words. 1789 * Start writing the descriptor words.
1790 */ 1790 */
1791 rt2x00_desc_read(txd, 1, &word); 1791 rt2x00_desc_read(txd, 1, &word);
1792 rt2x00_set_field32(&word, TXD_W1_HOST_Q_ID, txdesc->qid); 1792 rt2x00_set_field32(&word, TXD_W1_HOST_Q_ID, entry->queue->qid);
1793 rt2x00_set_field32(&word, TXD_W1_AIFSN, txdesc->aifs); 1793 rt2x00_set_field32(&word, TXD_W1_AIFSN, entry->queue->aifs);
1794 rt2x00_set_field32(&word, TXD_W1_CWMIN, txdesc->cw_min); 1794 rt2x00_set_field32(&word, TXD_W1_CWMIN, entry->queue->cw_min);
1795 rt2x00_set_field32(&word, TXD_W1_CWMAX, txdesc->cw_max); 1795 rt2x00_set_field32(&word, TXD_W1_CWMAX, entry->queue->cw_max);
1796 rt2x00_set_field32(&word, TXD_W1_IV_OFFSET, txdesc->iv_offset); 1796 rt2x00_set_field32(&word, TXD_W1_IV_OFFSET, txdesc->iv_offset);
1797 rt2x00_set_field32(&word, TXD_W1_HW_SEQUENCE, 1797 rt2x00_set_field32(&word, TXD_W1_HW_SEQUENCE,
1798 test_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags)); 1798 test_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags));
@@ -1820,7 +1820,7 @@ static void rt61pci_write_tx_desc(struct queue_entry *entry,
1820 rt2x00_set_field32(&word, TXD_W5_WAITING_DMA_DONE_INT, 1); 1820 rt2x00_set_field32(&word, TXD_W5_WAITING_DMA_DONE_INT, 1);
1821 rt2x00_desc_write(txd, 5, word); 1821 rt2x00_desc_write(txd, 5, word);
1822 1822
1823 if (txdesc->qid != QID_BEACON) { 1823 if (entry->queue->qid != QID_BEACON) {
1824 rt2x00_desc_read(txd, 6, &word); 1824 rt2x00_desc_read(txd, 6, &word);
1825 rt2x00_set_field32(&word, TXD_W6_BUFFER_PHYSICAL_ADDRESS, 1825 rt2x00_set_field32(&word, TXD_W6_BUFFER_PHYSICAL_ADDRESS,
1826 skbdesc->skb_dma); 1826 skbdesc->skb_dma);
@@ -1866,8 +1866,8 @@ static void rt61pci_write_tx_desc(struct queue_entry *entry,
1866 * Register descriptor details in skb frame descriptor. 1866 * Register descriptor details in skb frame descriptor.
1867 */ 1867 */
1868 skbdesc->desc = txd; 1868 skbdesc->desc = txd;
1869 skbdesc->desc_len = 1869 skbdesc->desc_len = (entry->queue->qid == QID_BEACON) ? TXINFO_SIZE :
1870 (txdesc->qid == QID_BEACON) ? TXINFO_SIZE : TXD_DESC_SIZE; 1870 TXD_DESC_SIZE;
1871} 1871}
1872 1872
1873/* 1873/*
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
index 67447ec005bf..3c86f0075aed 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/rt2x00/rt73usb.c
@@ -1472,10 +1472,10 @@ static void rt73usb_write_tx_desc(struct queue_entry *entry,
1472 rt2x00_desc_write(txd, 0, word); 1472 rt2x00_desc_write(txd, 0, word);
1473 1473
1474 rt2x00_desc_read(txd, 1, &word); 1474 rt2x00_desc_read(txd, 1, &word);
1475 rt2x00_set_field32(&word, TXD_W1_HOST_Q_ID, txdesc->qid); 1475 rt2x00_set_field32(&word, TXD_W1_HOST_Q_ID, entry->queue->qid);
1476 rt2x00_set_field32(&word, TXD_W1_AIFSN, txdesc->aifs); 1476 rt2x00_set_field32(&word, TXD_W1_AIFSN, entry->queue->aifs);
1477 rt2x00_set_field32(&word, TXD_W1_CWMIN, txdesc->cw_min); 1477 rt2x00_set_field32(&word, TXD_W1_CWMIN, entry->queue->cw_min);
1478 rt2x00_set_field32(&word, TXD_W1_CWMAX, txdesc->cw_max); 1478 rt2x00_set_field32(&word, TXD_W1_CWMAX, entry->queue->cw_max);
1479 rt2x00_set_field32(&word, TXD_W1_IV_OFFSET, txdesc->iv_offset); 1479 rt2x00_set_field32(&word, TXD_W1_IV_OFFSET, txdesc->iv_offset);
1480 rt2x00_set_field32(&word, TXD_W1_HW_SEQUENCE, 1480 rt2x00_set_field32(&word, TXD_W1_HW_SEQUENCE,
1481 test_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags)); 1481 test_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags));