You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.3 KiB
80 lines
2.3 KiB
From a7f268af31dddf763fe3dbe9cbf96ea77e0540e0 Mon Sep 17 00:00:00 2001
|
|
From: Gabor Juhos <juhosg@openwrt.org>
|
|
Date: Sat, 17 Aug 2013 19:31:41 +0200
|
|
Subject: [PATCH] rt2x00: rt2800lib: introduce RT2800_HAS_HIGH_SHARED_MEM flag
|
|
|
|
Some chipsets have more than 16KB of shared memory.
|
|
Introduce a new rt2800 specific flag to indicate that
|
|
and add a helper function which helps to check the
|
|
presence of the new flag.
|
|
|
|
Also enable the new flag for the RT3593 chipset which
|
|
has 24KB of shared memory. The flag can also be used
|
|
for other chipsets, but none of those has been tested
|
|
yet.
|
|
|
|
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
|
---
|
|
Changes since v1:
|
|
- don't enable the new flag for RT3071 and RT5592
|
|
---
|
|
drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 4 ++++
|
|
drivers/net/wireless/ralink/rt2x00/rt2800lib.h | 13 +++++++++++++
|
|
2 files changed, 17 insertions(+)
|
|
|
|
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
|
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
|
@@ -7721,6 +7721,7 @@ static int rt2800_probe_rt(struct rt2x00
|
|
|
|
int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev)
|
|
{
|
|
+ struct rt2800_drv_data *drv_data = rt2x00dev->drv_data;
|
|
int retval;
|
|
u32 reg;
|
|
|
|
@@ -7728,6 +7729,9 @@ int rt2800_probe_hw(struct rt2x00_dev *r
|
|
if (retval)
|
|
return retval;
|
|
|
|
+ if (rt2x00_rt(rt2x00dev, RT3593))
|
|
+ __set_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags);
|
|
+
|
|
/*
|
|
* Allocate eeprom data.
|
|
*/
|
|
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
|
|
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
|
|
@@ -22,6 +22,10 @@
|
|
|
|
#include "rt2800.h"
|
|
|
|
+enum rt2800_flag {
|
|
+ RT2800_HAS_HIGH_SHARED_MEM,
|
|
+};
|
|
+
|
|
/* RT2800 driver data structure */
|
|
struct rt2800_drv_data {
|
|
u8 calibration_bw20;
|
|
@@ -32,6 +36,8 @@ struct rt2800_drv_data {
|
|
u8 txmixer_gain_5g;
|
|
unsigned int tbtt_tick;
|
|
DECLARE_BITMAP(sta_ids, STA_IDS_SIZE);
|
|
+
|
|
+ unsigned long rt2800_flags;
|
|
};
|
|
|
|
struct rt2800_ops {
|
|
@@ -64,6 +70,13 @@ struct rt2800_ops {
|
|
__le32 *(*drv_get_txwi)(struct queue_entry *entry);
|
|
};
|
|
|
|
+static inline bool rt2800_has_high_shared_mem(struct rt2x00_dev *rt2x00dev)
|
|
+{
|
|
+ struct rt2800_drv_data *drv_data = rt2x00dev->drv_data;
|
|
+
|
|
+ return test_bit(RT2800_HAS_HIGH_SHARED_MEM, &drv_data->rt2800_flags);
|
|
+}
|
|
+
|
|
static inline void rt2800_register_read(struct rt2x00_dev *rt2x00dev,
|
|
const unsigned int offset,
|
|
u32 *value)
|
|
|