From 6b12c7bb631dd47cff8b0bad6d47c4b2439c6a59 Mon Sep 17 00:00:00 2001 From: Ivo van Doorn Date: Sat, 14 Feb 2009 19:55:36 +0100 Subject: [PATCH] rt2x00: support get_tkip_seq, fix TX streams (rt2800pci) Signed-off-by: Ivo van Doorn --- drivers/net/wireless/rt2x00/rt2800pci.c | 23 ++++++++++++++++++++++- drivers/net/wireless/rt2x00/rt2800pci.h | 6 ------ 2 files changed, 22 insertions(+), 7 deletions(-) --- a/drivers/net/wireless/rt2x00/rt2800pci.c +++ b/drivers/net/wireless/rt2x00/rt2800pci.c @@ -1374,6 +1374,8 @@ static int rt2800pci_init_registers(stru rt2x00pci_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); rt2x00pci_register_write(rt2x00dev, TX_RTS_CFG, reg); @@ -2470,7 +2472,10 @@ static int rt2800pci_probe_hw_mode(struc 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: @@ -2552,6 +2557,21 @@ static int rt2800pci_probe_hw(struct rt2 /* * IEEE80211 stack callback functions. */ +static void rt2800pci_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); + rt2x00pci_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 rt2800pci_set_rts_threshold(struct ieee80211_hw *hw, u32 value) { struct rt2x00_dev *rt2x00dev = hw->priv; @@ -2681,6 +2701,7 @@ static const struct ieee80211_ops rt2800 .configure_filter = rt2x00mac_configure_filter, .set_key = rt2x00mac_set_key, .get_stats = rt2x00mac_get_stats, + .get_tkip_seq = rt2800pci_get_tkip_seq, .set_rts_threshold = rt2800pci_set_rts_threshold, .bss_info_changed = rt2x00mac_bss_info_changed, .conf_tx = rt2800pci_conf_tx, --- a/drivers/net/wireless/rt2x00/rt2800pci.h +++ b/drivers/net/wireless/rt2x00/rt2800pci.h @@ -1327,12 +1327,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)