|
@@ -1037,20 +1037,6 @@ static void rt61pci_init_txentry(struct rt2x00_dev *rt2x00dev,
|
|
|
struct queue_entry_priv_pci_tx *priv_tx = entry->priv_data;
|
|
|
u32 word;
|
|
|
|
|
|
- rt2x00_desc_read(priv_tx->desc, 1, &word);
|
|
|
- rt2x00_set_field32(&word, TXD_W1_BUFFER_COUNT, 1);
|
|
|
- rt2x00_desc_write(priv_tx->desc, 1, word);
|
|
|
-
|
|
|
- rt2x00_desc_read(priv_tx->desc, 5, &word);
|
|
|
- rt2x00_set_field32(&word, TXD_W5_PID_TYPE, entry->queue->qid);
|
|
|
- rt2x00_set_field32(&word, TXD_W5_PID_SUBTYPE, entry->entry_idx);
|
|
|
- rt2x00_desc_write(priv_tx->desc, 5, word);
|
|
|
-
|
|
|
- rt2x00_desc_read(priv_tx->desc, 6, &word);
|
|
|
- rt2x00_set_field32(&word, TXD_W6_BUFFER_PHYSICAL_ADDRESS,
|
|
|
- priv_tx->data_dma);
|
|
|
- rt2x00_desc_write(priv_tx->desc, 6, word);
|
|
|
-
|
|
|
rt2x00_desc_read(priv_tx->desc, 0, &word);
|
|
|
rt2x00_set_field32(&word, TXD_W0_VALID, 0);
|
|
|
rt2x00_set_field32(&word, TXD_W0_OWNER_NIC, 0);
|
|
@@ -1529,6 +1515,7 @@ static void rt61pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
|
|
|
struct txentry_desc *txdesc)
|
|
|
{
|
|
|
struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb);
|
|
|
+ struct queue_entry_priv_pci_tx *entry_priv = skbdesc->entry->priv_data;
|
|
|
__le32 *txd = skbdesc->desc;
|
|
|
u32 word;
|
|
|
|
|
@@ -1542,6 +1529,7 @@ static void rt61pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
|
|
|
rt2x00_set_field32(&word, TXD_W1_CWMAX, txdesc->cw_max);
|
|
|
rt2x00_set_field32(&word, TXD_W1_IV_OFFSET, IEEE80211_HEADER);
|
|
|
rt2x00_set_field32(&word, TXD_W1_HW_SEQUENCE, 1);
|
|
|
+ rt2x00_set_field32(&word, TXD_W1_BUFFER_COUNT, 1);
|
|
|
rt2x00_desc_write(txd, 1, word);
|
|
|
|
|
|
rt2x00_desc_read(txd, 2, &word);
|
|
@@ -1552,11 +1540,19 @@ static void rt61pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
|
|
|
rt2x00_desc_write(txd, 2, word);
|
|
|
|
|
|
rt2x00_desc_read(txd, 5, &word);
|
|
|
+ rt2x00_set_field32(&word, TXD_W5_PID_TYPE, skbdesc->entry->queue->qid);
|
|
|
+ rt2x00_set_field32(&word, TXD_W5_PID_SUBTYPE,
|
|
|
+ skbdesc->entry->entry_idx);
|
|
|
rt2x00_set_field32(&word, TXD_W5_TX_POWER,
|
|
|
TXPOWER_TO_DEV(rt2x00dev->tx_power));
|
|
|
rt2x00_set_field32(&word, TXD_W5_WAITING_DMA_DONE_INT, 1);
|
|
|
rt2x00_desc_write(txd, 5, word);
|
|
|
|
|
|
+ rt2x00_desc_read(txd, 6, &word);
|
|
|
+ rt2x00_set_field32(&word, TXD_W6_BUFFER_PHYSICAL_ADDRESS,
|
|
|
+ entry_priv->data_dma);
|
|
|
+ rt2x00_desc_write(txd, 6, word);
|
|
|
+
|
|
|
if (skbdesc->desc_len > TXINFO_SIZE) {
|
|
|
rt2x00_desc_read(txd, 11, &word);
|
|
|
rt2x00_set_field32(&word, TXD_W11_BUFFER_LENGTH0, skbdesc->data_len);
|