upgrade to latest compat-wireless and rt2800 version
[openwrt.git] / package / mac80211 / patches / 319-rt2x00-support-get_tkip_seq-fix-TX-streams-rt2800.patch
1 From 6b12c7bb631dd47cff8b0bad6d47c4b2439c6a59 Mon Sep 17 00:00:00 2001
2 From: Ivo van Doorn <IvDoorn@gmail.com>
3 Date: Sat, 14 Feb 2009 19:55:36 +0100
4 Subject: [PATCH] rt2x00: support get_tkip_seq, fix TX streams (rt2800pci)
5
6 Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
7 ---
8  drivers/net/wireless/rt2x00/rt2800pci.c |   23 ++++++++++++++++++++++-
9  drivers/net/wireless/rt2x00/rt2800pci.h |    6 ------
10  2 files changed, 22 insertions(+), 7 deletions(-)
11
12 diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
13 index 86ed55c..6e98c3d 100644
14 --- a/drivers/net/wireless/rt2x00/rt2800pci.c
15 +++ b/drivers/net/wireless/rt2x00/rt2800pci.c
16 @@ -1374,6 +1374,8 @@ static int rt2800pci_init_registers(struct rt2x00_dev *rt2x00dev)
17  
18         rt2x00pci_register_read(rt2x00dev, TX_RTS_CFG, &reg);
19         rt2x00_set_field32(&reg, TX_RTS_CFG_AUTO_RTS_RETRY_LIMIT, 32);
20 +       rt2x00_set_field32(&reg, TX_RTS_CFG_RTS_THRES,
21 +                          IEEE80211_MAX_RTS_THRESHOLD);
22         rt2x00_set_field32(&reg, TX_RTS_CFG_RTS_FBK_EN, 0);
23         rt2x00pci_register_write(rt2x00dev, TX_RTS_CFG, reg);
24  
25 @@ -2470,7 +2472,10 @@ static int rt2800pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
26         spec->ht.ampdu_factor = 3;
27         spec->ht.ampdu_density = 4;
28         spec->ht.mcs.tx_params =
29 -           IEEE80211_HT_MCS_TX_DEFINED;
30 +           IEEE80211_HT_MCS_TX_DEFINED |
31 +           IEEE80211_HT_MCS_TX_RX_DIFF |
32 +           ((rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH) - 1) <<
33 +               IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT);
34  
35         switch (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH)) {
36         case 3:
37 @@ -2552,6 +2557,21 @@ static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
38  /*
39   * IEEE80211 stack callback functions.
40   */
41 +static void rt2800pci_get_tkip_seq(struct ieee80211_hw *hw, u8 hw_key_idx,
42 +                                  u32 *iv32, u16 *iv16)
43 +{
44 +       struct rt2x00_dev *rt2x00dev = hw->priv;
45 +       struct mac_iveiv_entry iveiv_entry;
46 +       u32 offset;
47 +
48 +       offset = MAC_IVEIV_ENTRY(hw_key_idx);
49 +       rt2x00pci_register_multiread(rt2x00dev, offset,
50 +                                     &iveiv_entry, sizeof(iveiv_entry));
51 +
52 +       memcpy(&iveiv_entry.iv[0], iv16, sizeof(iv16));
53 +       memcpy(&iveiv_entry.iv[4], iv32, sizeof(iv32));
54 +}
55 +
56  static int rt2800pci_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
57  {
58         struct rt2x00_dev *rt2x00dev = hw->priv;
59 @@ -2681,6 +2701,7 @@ static const struct ieee80211_ops rt2800pci_mac80211_ops = {
60         .configure_filter       = rt2x00mac_configure_filter,
61         .set_key                = rt2x00mac_set_key,
62         .get_stats              = rt2x00mac_get_stats,
63 +       .get_tkip_seq           = rt2800pci_get_tkip_seq,
64         .set_rts_threshold      = rt2800pci_set_rts_threshold,
65         .bss_info_changed       = rt2x00mac_bss_info_changed,
66         .conf_tx                = rt2800pci_conf_tx,
67 diff --git a/drivers/net/wireless/rt2x00/rt2800pci.h b/drivers/net/wireless/rt2x00/rt2800pci.h
68 index f8bc958..ea2a431 100644
69 --- a/drivers/net/wireless/rt2x00/rt2800pci.h
70 +++ b/drivers/net/wireless/rt2x00/rt2800pci.h
71 @@ -1327,12 +1327,6 @@ struct mac_iveiv_entry {
72  } __attribute__ ((packed));
73  
74  /*
75 - * MAC_IVEIV:
76 - */
77 -#define MAC_IVEIV_EIV                  FIELD32(0x20000000)
78 -#define MAC_IVEIV_KEYIDX               FIELD32(0xc0000000)
79 -
80 -/*
81   * MAC_WCID_ATTRIBUTE:
82   */
83  #define MAC_WCID_ATTRIBUTE_KEYTAB      FIELD32(0x00000001)
84 -- 
85 1.6.0
86