aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/rt2x00/rt2400pci.c15
-rw-r--r--drivers/net/wireless/rt2x00/rt2500pci.c9
-rw-r--r--drivers/net/wireless/rt2x00/rt61pci.c24
3 files changed, 21 insertions, 27 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c
index b4310d798f94..2c0cf394c78e 100644
--- a/drivers/net/wireless/rt2x00/rt2400pci.c
+++ b/drivers/net/wireless/rt2x00/rt2400pci.c
@@ -643,15 +643,6 @@ static void rt2400pci_init_txentry(struct rt2x00_dev *rt2x00dev,
643 struct queue_entry_priv_pci_tx *priv_tx = entry->priv_data; 643 struct queue_entry_priv_pci_tx *priv_tx = entry->priv_data;
644 u32 word; 644 u32 word;
645 645
646 rt2x00_desc_read(priv_tx->desc, 1, &word);
647 rt2x00_set_field32(&word, TXD_W1_BUFFER_ADDRESS, priv_tx->data_dma);
648 rt2x00_desc_write(priv_tx->desc, 1, word);
649
650 rt2x00_desc_read(priv_tx->desc, 2, &word);
651 rt2x00_set_field32(&word, TXD_W2_BUFFER_LENGTH,
652 entry->queue->data_size);
653 rt2x00_desc_write(priv_tx->desc, 2, word);
654
655 rt2x00_desc_read(priv_tx->desc, 0, &word); 646 rt2x00_desc_read(priv_tx->desc, 0, &word);
656 rt2x00_set_field32(&word, TXD_W0_VALID, 0); 647 rt2x00_set_field32(&word, TXD_W0_VALID, 0);
657 rt2x00_set_field32(&word, TXD_W0_OWNER_NIC, 0); 648 rt2x00_set_field32(&word, TXD_W0_OWNER_NIC, 0);
@@ -1004,13 +995,19 @@ static void rt2400pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1004 struct txentry_desc *txdesc) 995 struct txentry_desc *txdesc)
1005{ 996{
1006 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb); 997 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb);
998 struct queue_entry_priv_pci_tx *entry_priv = skbdesc->entry->priv_data;
1007 __le32 *txd = skbdesc->desc; 999 __le32 *txd = skbdesc->desc;
1008 u32 word; 1000 u32 word;
1009 1001
1010 /* 1002 /*
1011 * Start writing the descriptor words. 1003 * Start writing the descriptor words.
1012 */ 1004 */
1005 rt2x00_desc_read(entry_priv->desc, 1, &word);
1006 rt2x00_set_field32(&word, TXD_W1_BUFFER_ADDRESS, entry_priv->data_dma);
1007 rt2x00_desc_write(entry_priv->desc, 1, word);
1008
1013 rt2x00_desc_read(txd, 2, &word); 1009 rt2x00_desc_read(txd, 2, &word);
1010 rt2x00_set_field32(&word, TXD_W2_BUFFER_LENGTH, skbdesc->data_len);
1014 rt2x00_set_field32(&word, TXD_W2_DATABYTE_COUNT, skbdesc->data_len); 1011 rt2x00_set_field32(&word, TXD_W2_DATABYTE_COUNT, skbdesc->data_len);
1015 rt2x00_desc_write(txd, 2, word); 1012 rt2x00_desc_write(txd, 2, word);
1016 1013
diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
index 54aaa8375a2c..6c31c5db0ca1 100644
--- a/drivers/net/wireless/rt2x00/rt2500pci.c
+++ b/drivers/net/wireless/rt2x00/rt2500pci.c
@@ -733,10 +733,6 @@ static void rt2500pci_init_txentry(struct rt2x00_dev *rt2x00dev,
733 struct queue_entry_priv_pci_tx *priv_tx = entry->priv_data; 733 struct queue_entry_priv_pci_tx *priv_tx = entry->priv_data;
734 u32 word; 734 u32 word;
735 735
736 rt2x00_desc_read(priv_tx->desc, 1, &word);
737 rt2x00_set_field32(&word, TXD_W1_BUFFER_ADDRESS, priv_tx->data_dma);
738 rt2x00_desc_write(priv_tx->desc, 1, word);
739
740 rt2x00_desc_read(priv_tx->desc, 0, &word); 736 rt2x00_desc_read(priv_tx->desc, 0, &word);
741 rt2x00_set_field32(&word, TXD_W0_VALID, 0); 737 rt2x00_set_field32(&word, TXD_W0_VALID, 0);
742 rt2x00_set_field32(&word, TXD_W0_OWNER_NIC, 0); 738 rt2x00_set_field32(&word, TXD_W0_OWNER_NIC, 0);
@@ -1158,12 +1154,17 @@ static void rt2500pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1158 struct txentry_desc *txdesc) 1154 struct txentry_desc *txdesc)
1159{ 1155{
1160 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb); 1156 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb);
1157 struct queue_entry_priv_pci_tx *entry_priv = skbdesc->entry->priv_data;
1161 __le32 *txd = skbdesc->desc; 1158 __le32 *txd = skbdesc->desc;
1162 u32 word; 1159 u32 word;
1163 1160
1164 /* 1161 /*
1165 * Start writing the descriptor words. 1162 * Start writing the descriptor words.
1166 */ 1163 */
1164 rt2x00_desc_read(entry_priv->desc, 1, &word);
1165 rt2x00_set_field32(&word, TXD_W1_BUFFER_ADDRESS, entry_priv->data_dma);
1166 rt2x00_desc_write(entry_priv->desc, 1, word);
1167
1167 rt2x00_desc_read(txd, 2, &word); 1168 rt2x00_desc_read(txd, 2, &word);
1168 rt2x00_set_field32(&word, TXD_W2_IV_OFFSET, IEEE80211_HEADER); 1169 rt2x00_set_field32(&word, TXD_W2_IV_OFFSET, IEEE80211_HEADER);
1169 rt2x00_set_field32(&word, TXD_W2_AIFS, txdesc->aifs); 1170 rt2x00_set_field32(&word, TXD_W2_AIFS, txdesc->aifs);
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
index 68d2216131b2..d8e681ec4bb0 100644
--- a/drivers/net/wireless/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/rt2x00/rt61pci.c
@@ -1037,20 +1037,6 @@ static void rt61pci_init_txentry(struct rt2x00_dev *rt2x00dev,
1037 struct queue_entry_priv_pci_tx *priv_tx = entry->priv_data; 1037 struct queue_entry_priv_pci_tx *priv_tx = entry->priv_data;
1038 u32 word; 1038 u32 word;
1039 1039
1040 rt2x00_desc_read(priv_tx->desc, 1, &word);
1041 rt2x00_set_field32(&word, TXD_W1_BUFFER_COUNT, 1);
1042 rt2x00_desc_write(priv_tx->desc, 1, word);
1043
1044 rt2x00_desc_read(priv_tx->desc, 5, &word);
1045 rt2x00_set_field32(&word, TXD_W5_PID_TYPE, entry->queue->qid);
1046 rt2x00_set_field32(&word, TXD_W5_PID_SUBTYPE, entry->entry_idx);
1047 rt2x00_desc_write(priv_tx->desc, 5, word);
1048
1049 rt2x00_desc_read(priv_tx->desc, 6, &word);
1050 rt2x00_set_field32(&word, TXD_W6_BUFFER_PHYSICAL_ADDRESS,
1051 priv_tx->data_dma);
1052 rt2x00_desc_write(priv_tx->desc, 6, word);
1053
1054 rt2x00_desc_read(priv_tx->desc, 0, &word); 1040 rt2x00_desc_read(priv_tx->desc, 0, &word);
1055 rt2x00_set_field32(&word, TXD_W0_VALID, 0); 1041 rt2x00_set_field32(&word, TXD_W0_VALID, 0);
1056 rt2x00_set_field32(&word, TXD_W0_OWNER_NIC, 0); 1042 rt2x00_set_field32(&word, TXD_W0_OWNER_NIC, 0);
@@ -1529,6 +1515,7 @@ static void rt61pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1529 struct txentry_desc *txdesc) 1515 struct txentry_desc *txdesc)
1530{ 1516{
1531 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb); 1517 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb);
1518 struct queue_entry_priv_pci_tx *entry_priv = skbdesc->entry->priv_data;
1532 __le32 *txd = skbdesc->desc; 1519 __le32 *txd = skbdesc->desc;
1533 u32 word; 1520 u32 word;
1534 1521
@@ -1542,6 +1529,7 @@ static void rt61pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1542 rt2x00_set_field32(&word, TXD_W1_CWMAX, txdesc->cw_max); 1529 rt2x00_set_field32(&word, TXD_W1_CWMAX, txdesc->cw_max);
1543 rt2x00_set_field32(&word, TXD_W1_IV_OFFSET, IEEE80211_HEADER); 1530 rt2x00_set_field32(&word, TXD_W1_IV_OFFSET, IEEE80211_HEADER);
1544 rt2x00_set_field32(&word, TXD_W1_HW_SEQUENCE, 1); 1531 rt2x00_set_field32(&word, TXD_W1_HW_SEQUENCE, 1);
1532 rt2x00_set_field32(&word, TXD_W1_BUFFER_COUNT, 1);
1545 rt2x00_desc_write(txd, 1, word); 1533 rt2x00_desc_write(txd, 1, word);
1546 1534
1547 rt2x00_desc_read(txd, 2, &word); 1535 rt2x00_desc_read(txd, 2, &word);
@@ -1552,11 +1540,19 @@ static void rt61pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1552 rt2x00_desc_write(txd, 2, word); 1540 rt2x00_desc_write(txd, 2, word);
1553 1541
1554 rt2x00_desc_read(txd, 5, &word); 1542 rt2x00_desc_read(txd, 5, &word);
1543 rt2x00_set_field32(&word, TXD_W5_PID_TYPE, skbdesc->entry->queue->qid);
1544 rt2x00_set_field32(&word, TXD_W5_PID_SUBTYPE,
1545 skbdesc->entry->entry_idx);
1555 rt2x00_set_field32(&word, TXD_W5_TX_POWER, 1546 rt2x00_set_field32(&word, TXD_W5_TX_POWER,
1556 TXPOWER_TO_DEV(rt2x00dev->tx_power)); 1547 TXPOWER_TO_DEV(rt2x00dev->tx_power));
1557 rt2x00_set_field32(&word, TXD_W5_WAITING_DMA_DONE_INT, 1); 1548 rt2x00_set_field32(&word, TXD_W5_WAITING_DMA_DONE_INT, 1);
1558 rt2x00_desc_write(txd, 5, word); 1549 rt2x00_desc_write(txd, 5, word);
1559 1550
1551 rt2x00_desc_read(txd, 6, &word);
1552 rt2x00_set_field32(&word, TXD_W6_BUFFER_PHYSICAL_ADDRESS,
1553 entry_priv->data_dma);
1554 rt2x00_desc_write(txd, 6, word);
1555
1560 if (skbdesc->desc_len > TXINFO_SIZE) { 1556 if (skbdesc->desc_len > TXINFO_SIZE) {
1561 rt2x00_desc_read(txd, 11, &word); 1557 rt2x00_desc_read(txd, 11, &word);
1562 rt2x00_set_field32(&word, TXD_W11_BUFFER_LENGTH0, skbdesc->data_len); 1558 rt2x00_set_field32(&word, TXD_W11_BUFFER_LENGTH0, skbdesc->data_len);