add chaos_calmer branch
[15.05/openwrt.git] / package / kernel / mac80211 / patches / 600-0002-rt2x00-rt2800lib-introduce-RT2800_HAS_HIGH_SHARED_ME.patch
1 From a7f268af31dddf763fe3dbe9cbf96ea77e0540e0 Mon Sep 17 00:00:00 2001
2 From: Gabor Juhos <juhosg@openwrt.org>
3 Date: Sat, 17 Aug 2013 19:31:41 +0200
4 Subject: [PATCH] rt2x00: rt2800lib: introduce RT2800_HAS_HIGH_SHARED_MEM flag
5
6 Some chipsets have more than 16KB of shared memory.
7 Introduce a new rt2800 specific flag to indicate that
8 and add a helper function which helps to check the
9 presence of the new flag.
10
11 Also enable the new flag for the RT3593 chipset which
12 has 24KB of shared memory. The flag can also be used
13 for other chipsets, but none of those has been tested
14 yet.
15
16 Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
17 ---
18 Changes since v1:
19   - don't enable the new flag for RT3071 and RT5592
20 ---
21  drivers/net/wireless/rt2x00/rt2800lib.c |    4 ++++
22  drivers/net/wireless/rt2x00/rt2800lib.h |   13 +++++++++++++
23  2 files changed, 17 insertions(+)
24
25 --- a/drivers/net/wireless/rt2x00/rt2800lib.c
26 +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
27 @@ -7747,6 +7747,7 @@ static int rt2800_probe_rt(struct rt2x00
28  
29  int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev)
30  {
31 +       struct rt2800_drv_data *drv_data = rt2x00dev->drv_data;
32         int retval;
33         u32 reg;
34  
35 @@ -7754,6 +7755,9 @@ int rt2800_probe_hw(struct rt2x00_dev *r
36         if (retval)
37                 return retval;
38  
39 +       if (rt2x00_rt(rt2x00dev, RT3593))
40 +               __set_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags);
41 +
42         /*
43          * Allocate eeprom data.
44          */
45 --- a/drivers/net/wireless/rt2x00/rt2800lib.h
46 +++ b/drivers/net/wireless/rt2x00/rt2800lib.h
47 @@ -20,6 +20,10 @@
48  #ifndef RT2800LIB_H
49  #define RT2800LIB_H
50  
51 +enum rt2800_flag {
52 +       RT2800_HAS_HIGH_SHARED_MEM,
53 +};
54 +
55  /* RT2800 driver data structure */
56  struct rt2800_drv_data {
57         u8 calibration_bw20;
58 @@ -29,6 +33,8 @@ struct rt2800_drv_data {
59         u8 txmixer_gain_24g;
60         u8 txmixer_gain_5g;
61         unsigned int tbtt_tick;
62 +
63 +       unsigned long rt2800_flags;
64  };
65  
66  struct rt2800_ops {
67 @@ -61,6 +67,13 @@ struct rt2800_ops {
68         __le32 *(*drv_get_txwi)(struct queue_entry *entry);
69  };
70  
71 +static inline bool rt2800_has_high_shared_mem(struct rt2x00_dev *rt2x00dev)
72 +{
73 +       struct rt2800_drv_data *drv_data = rt2x00dev->drv_data;
74 +
75 +       return test_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags);
76 +}
77 +
78  static inline void rt2800_register_read(struct rt2x00_dev *rt2x00dev,
79                                         const unsigned int offset,
80                                         u32 *value)