Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into for-davem
This commit is contained in:
@@ -1441,12 +1441,38 @@ static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
|
||||
struct txentry_desc *txdesc)
|
||||
{
|
||||
struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb);
|
||||
__le32 *txd = skbdesc->desc;
|
||||
__le32 *txd = (__le32 *)(skb->data - TXD_DESC_SIZE);
|
||||
u32 word;
|
||||
|
||||
/*
|
||||
* Start writing the descriptor words.
|
||||
*/
|
||||
rt2x00_desc_read(txd, 0, &word);
|
||||
rt2x00_set_field32(&word, TXD_W0_BURST,
|
||||
test_bit(ENTRY_TXD_BURST, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_VALID, 1);
|
||||
rt2x00_set_field32(&word, TXD_W0_MORE_FRAG,
|
||||
test_bit(ENTRY_TXD_MORE_FRAG, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_ACK,
|
||||
test_bit(ENTRY_TXD_ACK, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_TIMESTAMP,
|
||||
test_bit(ENTRY_TXD_REQ_TIMESTAMP, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_OFDM,
|
||||
(txdesc->rate_mode == RATE_MODE_OFDM));
|
||||
rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs);
|
||||
rt2x00_set_field32(&word, TXD_W0_RETRY_MODE,
|
||||
test_bit(ENTRY_TXD_RETRY_MODE, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_TKIP_MIC,
|
||||
test_bit(ENTRY_TXD_ENCRYPT_MMIC, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_KEY_TABLE,
|
||||
test_bit(ENTRY_TXD_ENCRYPT_PAIRWISE, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_KEY_INDEX, txdesc->key_idx);
|
||||
rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, txdesc->length);
|
||||
rt2x00_set_field32(&word, TXD_W0_BURST2,
|
||||
test_bit(ENTRY_TXD_BURST, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_CIPHER_ALG, txdesc->cipher);
|
||||
rt2x00_desc_write(txd, 0, word);
|
||||
|
||||
rt2x00_desc_read(txd, 1, &word);
|
||||
rt2x00_set_field32(&word, TXD_W1_HOST_Q_ID, txdesc->queue);
|
||||
rt2x00_set_field32(&word, TXD_W1_AIFSN, txdesc->aifs);
|
||||
@@ -1475,31 +1501,11 @@ static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
|
||||
rt2x00_set_field32(&word, TXD_W5_WAITING_DMA_DONE_INT, 1);
|
||||
rt2x00_desc_write(txd, 5, word);
|
||||
|
||||
rt2x00_desc_read(txd, 0, &word);
|
||||
rt2x00_set_field32(&word, TXD_W0_BURST,
|
||||
test_bit(ENTRY_TXD_BURST, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_VALID, 1);
|
||||
rt2x00_set_field32(&word, TXD_W0_MORE_FRAG,
|
||||
test_bit(ENTRY_TXD_MORE_FRAG, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_ACK,
|
||||
test_bit(ENTRY_TXD_ACK, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_TIMESTAMP,
|
||||
test_bit(ENTRY_TXD_REQ_TIMESTAMP, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_OFDM,
|
||||
(txdesc->rate_mode == RATE_MODE_OFDM));
|
||||
rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs);
|
||||
rt2x00_set_field32(&word, TXD_W0_RETRY_MODE,
|
||||
test_bit(ENTRY_TXD_RETRY_MODE, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_TKIP_MIC,
|
||||
test_bit(ENTRY_TXD_ENCRYPT_MMIC, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_KEY_TABLE,
|
||||
test_bit(ENTRY_TXD_ENCRYPT_PAIRWISE, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_KEY_INDEX, txdesc->key_idx);
|
||||
rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, txdesc->length);
|
||||
rt2x00_set_field32(&word, TXD_W0_BURST2,
|
||||
test_bit(ENTRY_TXD_BURST, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_CIPHER_ALG, txdesc->cipher);
|
||||
rt2x00_desc_write(txd, 0, word);
|
||||
/*
|
||||
* Register descriptor details in skb frame descriptor.
|
||||
*/
|
||||
skbdesc->desc = txd;
|
||||
skbdesc->desc_len = TXD_DESC_SIZE;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1509,17 +1515,9 @@ static void rt73usb_write_beacon(struct queue_entry *entry,
|
||||
struct txentry_desc *txdesc)
|
||||
{
|
||||
struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
|
||||
struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
|
||||
unsigned int beacon_base;
|
||||
u32 reg;
|
||||
|
||||
/*
|
||||
* Add the descriptor in front of the skb.
|
||||
*/
|
||||
skb_push(entry->skb, entry->queue->desc_size);
|
||||
memcpy(entry->skb->data, skbdesc->desc, skbdesc->desc_len);
|
||||
skbdesc->desc = entry->skb->data;
|
||||
|
||||
/*
|
||||
* Disable beaconing while we are reloading the beacon data,
|
||||
* otherwise we might be sending out invalid data.
|
||||
@@ -1528,6 +1526,11 @@ static void rt73usb_write_beacon(struct queue_entry *entry,
|
||||
rt2x00_set_field32(®, TXRX_CSR9_BEACON_GEN, 0);
|
||||
rt2x00usb_register_write(rt2x00dev, TXRX_CSR9, reg);
|
||||
|
||||
/*
|
||||
* Take the descriptor in front of the skb into account.
|
||||
*/
|
||||
skb_push(entry->skb, TXD_DESC_SIZE);
|
||||
|
||||
/*
|
||||
* Write entire beacon with descriptor to register.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user