2009-02-21 22:38:07 +02:00
|
|
|
From e65441d3066e5a37b480e6fc8f0e9fbc43e86ba4 Mon Sep 17 00:00:00 2001
|
2009-02-16 21:55:09 +02:00
|
|
|
From: Ivo van Doorn <IvDoorn@gmail.com>
|
|
|
|
Date: Sat, 14 Feb 2009 19:56:24 +0100
|
|
|
|
Subject: [PATCH] rt2x00: support get_tkip_seq, fix TX streams (rt2800usb)
|
|
|
|
|
|
|
|
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|
|
|
---
|
|
|
|
drivers/net/wireless/rt2x00/rt2800usb.c | 23 ++++++++++++++++++++++-
|
|
|
|
drivers/net/wireless/rt2x00/rt2800usb.h | 6 ------
|
|
|
|
2 files changed, 22 insertions(+), 7 deletions(-)
|
|
|
|
|
|
|
|
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
|
|
|
|
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
|
2009-02-26 20:03:20 +02:00
|
|
|
@@ -1465,6 +1465,8 @@ static int rt2800usb_init_registers(stru
|
2009-02-16 21:55:09 +02:00
|
|
|
|
|
|
|
rt2x00usb_register_read(rt2x00dev, TX_RTS_CFG, ®);
|
|
|
|
rt2x00_set_field32(®, TX_RTS_CFG_AUTO_RTS_RETRY_LIMIT, 32);
|
|
|
|
+ rt2x00_set_field32(®, TX_RTS_CFG_RTS_THRES,
|
|
|
|
+ IEEE80211_MAX_RTS_THRESHOLD);
|
|
|
|
rt2x00_set_field32(®, TX_RTS_CFG_RTS_FBK_EN, 0);
|
|
|
|
rt2x00usb_register_write(rt2x00dev, TX_RTS_CFG, reg);
|
|
|
|
|
2009-02-26 20:03:20 +02:00
|
|
|
@@ -2521,7 +2523,10 @@ static int rt2800usb_probe_hw_mode(struc
|
2009-02-16 21:55:09 +02:00
|
|
|
spec->ht.ampdu_factor = 3;
|
|
|
|
spec->ht.ampdu_density = 4;
|
|
|
|
spec->ht.mcs.tx_params =
|
|
|
|
- IEEE80211_HT_MCS_TX_DEFINED;
|
|
|
|
+ IEEE80211_HT_MCS_TX_DEFINED |
|
|
|
|
+ IEEE80211_HT_MCS_TX_RX_DIFF |
|
|
|
|
+ ((rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH) - 1) <<
|
|
|
|
+ IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT);
|
|
|
|
|
|
|
|
switch (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH)) {
|
|
|
|
case 3:
|
2009-02-26 20:03:20 +02:00
|
|
|
@@ -2625,6 +2630,21 @@ static int rt2800usb_probe_hw(struct rt2
|
2009-02-16 21:55:09 +02:00
|
|
|
/*
|
|
|
|
* IEEE80211 stack callback functions.
|
|
|
|
*/
|
|
|
|
+static void rt2800usb_get_tkip_seq(struct ieee80211_hw *hw, u8 hw_key_idx,
|
|
|
|
+ u32 *iv32, u16 *iv16)
|
|
|
|
+{
|
|
|
|
+ struct rt2x00_dev *rt2x00dev = hw->priv;
|
|
|
|
+ struct mac_iveiv_entry iveiv_entry;
|
|
|
|
+ u32 offset;
|
|
|
|
+
|
|
|
|
+ offset = MAC_IVEIV_ENTRY(hw_key_idx);
|
|
|
|
+ rt2x00usb_register_multiread(rt2x00dev, offset,
|
|
|
|
+ &iveiv_entry, sizeof(iveiv_entry));
|
|
|
|
+
|
|
|
|
+ memcpy(&iveiv_entry.iv[0], iv16, sizeof(iv16));
|
|
|
|
+ memcpy(&iveiv_entry.iv[4], iv32, sizeof(iv32));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
static int rt2800usb_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
|
|
|
|
{
|
|
|
|
struct rt2x00_dev *rt2x00dev = hw->priv;
|
2009-02-26 20:03:20 +02:00
|
|
|
@@ -2754,6 +2774,7 @@ static const struct ieee80211_ops rt2800
|
2009-02-16 21:55:09 +02:00
|
|
|
.configure_filter = rt2x00mac_configure_filter,
|
|
|
|
.set_key = rt2x00mac_set_key,
|
|
|
|
.get_stats = rt2x00mac_get_stats,
|
|
|
|
+ .get_tkip_seq = rt2800usb_get_tkip_seq,
|
|
|
|
.set_rts_threshold = rt2800usb_set_rts_threshold,
|
|
|
|
.bss_info_changed = rt2x00mac_bss_info_changed,
|
|
|
|
.conf_tx = rt2800usb_conf_tx,
|
|
|
|
--- a/drivers/net/wireless/rt2x00/rt2800usb.h
|
|
|
|
+++ b/drivers/net/wireless/rt2x00/rt2800usb.h
|
|
|
|
@@ -1339,12 +1339,6 @@ struct mac_iveiv_entry {
|
|
|
|
} __attribute__ ((packed));
|
|
|
|
|
|
|
|
/*
|
|
|
|
- * MAC_IVEIV:
|
|
|
|
- */
|
|
|
|
-#define MAC_IVEIV_EIV FIELD32(0x20000000)
|
|
|
|
-#define MAC_IVEIV_KEYIDX FIELD32(0xc0000000)
|
|
|
|
-
|
|
|
|
-/*
|
|
|
|
* MAC_WCID_ATTRIBUTE:
|
|
|
|
*/
|
|
|
|
#define MAC_WCID_ATTRIBUTE_KEYTAB FIELD32(0x00000001)
|