aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt61pci.c
diff options
context:
space:
mode:
authorGertjan van Wingerde <gwingerde@kpnplanet.nl>2008-05-10 07:44:14 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-05-21 21:47:33 -0400
commit4de36fe5abe077a4c65bf0b6a309865aa043e055 (patch)
tree3d7aadff5f9163a115c1fd1ee6de5146b797c76b /drivers/net/wireless/rt2x00/rt61pci.c
parent70a96109439cba0af0780ee1dc25ec7ed15f0bae (diff)
rt2x00: Only initialize the minimum needed fields of PCI TX descriptors.
In preparation of replacing the statically allocated data DMA buffers with DMA-mapped skb's we need to change the TXD handling of the PCI drivers, by moving the programming of the buffer address fields to the actual TXD writing at TX time, instead of at start-up time. Signed-off-by: Gertjan van Wingerde <gwingerde@kpnplanet.nl> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt61pci.c')
-rw-r--r--drivers/net/wireless/rt2x00/rt61pci.c24
1 files changed, 10 insertions, 14 deletions
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);