diff options
author | Gertjan van Wingerde <gwingerde@gmail.com> | 2010-05-11 17:51:40 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-05-12 16:41:44 -0400 |
commit | 85b7a8b3871bde7885516fed2a1c8da699913318 (patch) | |
tree | 80c488fc082b06c9278e8e30db0033306404e8a1 /drivers/net/wireless/rt2x00/rt73usb.c | |
parent | e01f1ec35ff91c8a3f4a3e48a0c8ab476124b973 (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.c | 21 |
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); |