aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt73usb.c
diff options
context:
space:
mode:
authorGertjan van Wingerde <gwingerde@gmail.com>2010-05-11 17:51:40 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-05-12 16:41:44 -0400
commit85b7a8b3871bde7885516fed2a1c8da699913318 (patch)
tree80c488fc082b06c9278e8e30db0033306404e8a1 /drivers/net/wireless/rt2x00/rt73usb.c
parente01f1ec35ff91c8a3f4a3e48a0c8ab476124b973 (diff)
rt2x00: Simplify TXD handling of beacons.
The handling of tx descriptors for beacons can be simplified by updating write_tx_desc implementations of each driver to write directly to the queue entry descriptor instead of to a provided memory area. This is also a preparation for further clean ups where descriptors are properly reserved in the skb instead of fiddling with the skb data pointer. Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com> Acked-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt73usb.c')
-rw-r--r--drivers/net/wireless/rt2x00/rt73usb.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
index fa40d434e729..fca661c2e2a3 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/rt2x00/rt73usb.c
@@ -1440,7 +1440,7 @@ static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1440 struct txentry_desc *txdesc) 1440 struct txentry_desc *txdesc)
1441{ 1441{
1442 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb); 1442 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb);
1443 __le32 *txd = skbdesc->desc; 1443 __le32 *txd = (__le32 *)(skb->data - TXD_DESC_SIZE);
1444 u32 word; 1444 u32 word;
1445 1445
1446 /* 1446 /*
@@ -1499,6 +1499,12 @@ static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1499 TXPOWER_TO_DEV(rt2x00dev->tx_power)); 1499 TXPOWER_TO_DEV(rt2x00dev->tx_power));
1500 rt2x00_set_field32(&word, TXD_W5_WAITING_DMA_DONE_INT, 1); 1500 rt2x00_set_field32(&word, TXD_W5_WAITING_DMA_DONE_INT, 1);
1501 rt2x00_desc_write(txd, 5, word); 1501 rt2x00_desc_write(txd, 5, word);
1502
1503 /*
1504 * Register descriptor details in skb frame descriptor.
1505 */
1506 skbdesc->desc = txd;
1507 skbdesc->desc_len = TXD_DESC_SIZE;
1502} 1508}
1503 1509
1504/* 1510/*
@@ -1508,18 +1514,10 @@ static void rt73usb_write_beacon(struct queue_entry *entry,
1508 struct txentry_desc *txdesc) 1514 struct txentry_desc *txdesc)
1509{ 1515{
1510 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; 1516 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
1511 struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
1512 unsigned int beacon_base; 1517 unsigned int beacon_base;
1513 u32 reg; 1518 u32 reg;
1514 1519
1515 /* 1520 /*
1516 * Add the descriptor in front of the skb.
1517 */
1518 skb_push(entry->skb, entry->queue->desc_size);
1519 memcpy(entry->skb->data, skbdesc->desc, skbdesc->desc_len);
1520 skbdesc->desc = entry->skb->data;
1521
1522 /*
1523 * Disable beaconing while we are reloading the beacon data, 1521 * Disable beaconing while we are reloading the beacon data,
1524 * otherwise we might be sending out invalid data. 1522 * otherwise we might be sending out invalid data.
1525 */ 1523 */
@@ -1528,6 +1526,11 @@ static void rt73usb_write_beacon(struct queue_entry *entry,
1528 rt2x00usb_register_write(rt2x00dev, TXRX_CSR9, reg); 1526 rt2x00usb_register_write(rt2x00dev, TXRX_CSR9, reg);
1529 1527
1530 /* 1528 /*
1529 * Take the descriptor in front of the skb into account.
1530 */
1531 skb_push(entry->skb, TXD_DESC_SIZE);
1532
1533 /*
1531 * Write entire beacon with descriptor to register. 1534 * Write entire beacon with descriptor to register.
1532 */ 1535 */
1533 beacon_base = HW_BEACON_OFFSET(entry->entry_idx); 1536 beacon_base = HW_BEACON_OFFSET(entry->entry_idx);