mirror of https://github.com/hak5/openwrt.git
parent
db8867b4c5
commit
4122e0b8c8
|
@ -12,11 +12,11 @@ PKG_NAME:=mac80211
|
|||
PKG_RELEASE:=1
|
||||
|
||||
ifneq ($(CONFIG_LINUX_2_6_27)$(CONFIG_LINUX_2_6_28),)
|
||||
PKG_VERSION:=2009-01-07
|
||||
PKG_VERSION:=2009-01-10
|
||||
PKG_SOURCE_URL:= \
|
||||
http://www.orbit-lab.org/kernel/compat-wireless-2.6/2009/01 \
|
||||
http://wireless.kernel.org/download/compat-wireless-2.6
|
||||
PKG_MD5SUM:=2788149d630d48686f7ca79131cdbe8c
|
||||
PKG_MD5SUM:=6edd60f6b5ee600aec28e148bc8e2a05
|
||||
else
|
||||
PKG_VERSION:=2008-08-06
|
||||
PKG_SOURCE_URL:=http://www.orbit-lab.org/kernel/compat-wireless-2.6/2008/08
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
From 42d5399c2743dbd1ddaaadc8cb04adbfc65cc970 Mon Sep 17 00:00:00 2001
|
||||
From: Ivo van Doorn <IvDoorn@gmail.com>
|
||||
Date: Sun, 28 Dec 2008 12:48:46 +0000 (+0100)
|
||||
Subject: rt2x00: Implement support for 802.11n
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fivd%2Frt2x00.git;a=commitdiff_plain;h=1ddf4bdad5f51a799ee580e125dda19dd18daa39
|
||||
|
||||
rt2x00: Implement support for 802.11n
|
||||
Date: Sat, 10 Jan 2009 11:01:10 +0100
|
||||
Subject: [PATCH] rt2x00: Implement support for 802.11n
|
||||
|
||||
Extend rt2x00lib capabilities to support 802.11n,
|
||||
it still lacks aggregation support, but that can
|
||||
|
@ -11,6 +9,17 @@ be added in the future.
|
|||
|
||||
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
||||
---
|
||||
drivers/net/wireless/rt2x00/Kconfig | 3 +
|
||||
drivers/net/wireless/rt2x00/Makefile | 1 +
|
||||
drivers/net/wireless/rt2x00/rt2x00.h | 5 ++
|
||||
drivers/net/wireless/rt2x00/rt2x00config.c | 5 ++
|
||||
drivers/net/wireless/rt2x00/rt2x00dev.c | 91 ++++++++++++++++++++-------
|
||||
drivers/net/wireless/rt2x00/rt2x00ht.c | 69 +++++++++++++++++++++
|
||||
drivers/net/wireless/rt2x00/rt2x00lib.h | 24 +++++++
|
||||
drivers/net/wireless/rt2x00/rt2x00queue.c | 1 +
|
||||
drivers/net/wireless/rt2x00/rt2x00queue.h | 26 +++++++-
|
||||
9 files changed, 197 insertions(+), 28 deletions(-)
|
||||
create mode 100644 drivers/net/wireless/rt2x00/rt2x00ht.c
|
||||
|
||||
--- a/drivers/net/wireless/rt2x00/Makefile
|
||||
+++ b/drivers/net/wireless/rt2x00/Makefile
|
||||
|
@ -24,7 +33,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
obj-$(CONFIG_RT2X00_LIB_PCI) += rt2x00pci.o
|
||||
--- a/drivers/net/wireless/rt2x00/rt2x00.h
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
|
||||
@@ -107,6 +107,7 @@
|
||||
@@ -108,6 +108,7 @@
|
||||
*/
|
||||
#define ACK_SIZE 14
|
||||
#define IEEE80211_HEADER 24
|
||||
|
@ -32,7 +41,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
#define PLCP 48
|
||||
#define BEACON 100
|
||||
#define PREAMBLE 144
|
||||
@@ -356,6 +357,7 @@ static inline struct rt2x00_intf* vif_to
|
||||
@@ -357,6 +358,7 @@ static inline struct rt2x00_intf* vif_to
|
||||
* for @tx_power_a, @tx_power_bg and @channels.
|
||||
* @channels: Device/chipset specific channel values (See &struct rf_channel).
|
||||
* @channels_info: Additional information for channels (See &struct channel_info).
|
||||
|
@ -40,7 +49,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
*/
|
||||
struct hw_mode_spec {
|
||||
unsigned int supported_bands;
|
||||
@@ -369,6 +371,8 @@ struct hw_mode_spec {
|
||||
@@ -370,6 +372,8 @@ struct hw_mode_spec {
|
||||
unsigned int num_channels;
|
||||
const struct rf_channel *channels;
|
||||
const struct channel_info *channels_info;
|
||||
|
@ -49,7 +58,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
};
|
||||
|
||||
/*
|
||||
@@ -603,6 +607,7 @@ enum rt2x00_flags {
|
||||
@@ -604,6 +608,7 @@ enum rt2x00_flags {
|
||||
CONFIG_EXTERNAL_LNA_BG,
|
||||
CONFIG_DOUBLE_ANTENNA,
|
||||
CONFIG_DISABLE_LINK_TUNING,
|
||||
|
@ -59,12 +68,11 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
/*
|
||||
--- a/drivers/net/wireless/rt2x00/rt2x00config.c
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2x00config.c
|
||||
@@ -173,6 +173,12 @@ void rt2x00lib_config(struct rt2x00_dev
|
||||
@@ -173,6 +173,11 @@ void rt2x00lib_config(struct rt2x00_dev
|
||||
libconf.conf = conf;
|
||||
|
||||
if (ieee80211_flags & IEEE80211_CONF_CHANGE_CHANNEL) {
|
||||
+ if ((conf->ht.channel_type == NL80211_CHAN_HT40MINUS) ||
|
||||
+ (conf->ht.channel_type == NL80211_CHAN_HT40PLUS))
|
||||
+ if (conf_is_ht40(conf))
|
||||
+ __set_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags);
|
||||
+ else
|
||||
+ __clear_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags);
|
||||
|
@ -74,18 +82,113 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
sizeof(libconf.rf));
|
||||
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
|
||||
@@ -384,7 +384,9 @@ void rt2x00lib_rxdone(struct rt2x00_dev
|
||||
if (((rxdesc.dev_flags & RXDONE_SIGNAL_PLCP) &&
|
||||
(rate->plcp == rxdesc.signal)) ||
|
||||
((rxdesc.dev_flags & RXDONE_SIGNAL_BITRATE) &&
|
||||
- (rate->bitrate == rxdesc.signal))) {
|
||||
+ (rate->bitrate == rxdesc.signal)) ||
|
||||
+ ((rxdesc.dev_flags & RXDONE_SIGNAL_MCS) &&
|
||||
+ (rate->mcs == rxdesc.signal))) {
|
||||
idx = i;
|
||||
break;
|
||||
@@ -315,18 +315,54 @@ void rt2x00lib_txdone(struct queue_entry
|
||||
}
|
||||
@@ -439,72 +441,84 @@ const struct rt2x00_rate rt2x00_supporte
|
||||
EXPORT_SYMBOL_GPL(rt2x00lib_txdone);
|
||||
|
||||
+static int rt2x00lib_rxdone_read_signal(struct rt2x00_dev *rt2x00dev,
|
||||
+ struct rxdone_entry_desc *rxdesc)
|
||||
+{
|
||||
+ struct ieee80211_supported_band *sband;
|
||||
+ const struct rt2x00_rate *rate;
|
||||
+ unsigned int i;
|
||||
+ int signal;
|
||||
+ int type;
|
||||
+
|
||||
+ /*
|
||||
+ * For non-HT rates the MCS value needs to contain the
|
||||
+ * actually used rate modulation (CCK or OFDM).
|
||||
+ */
|
||||
+ if (rxdesc->dev_flags & RXDONE_SIGNAL_MCS)
|
||||
+ signal = RATE_MCS(rxdesc->rate_mode, rxdesc->signal);
|
||||
+ else
|
||||
+ signal = rxdesc->signal;
|
||||
+
|
||||
+ type = (rxdesc->dev_flags & RXDONE_SIGNAL_MASK);
|
||||
+
|
||||
+ sband = &rt2x00dev->bands[rt2x00dev->curr_band];
|
||||
+ for (i = 0; i < sband->n_bitrates; i++) {
|
||||
+ rate = rt2x00_get_rate(sband->bitrates[i].hw_value);
|
||||
+
|
||||
+ if (((type == RXDONE_SIGNAL_PLCP) &&
|
||||
+ (rate->plcp == signal)) ||
|
||||
+ ((type == RXDONE_SIGNAL_BITRATE) &&
|
||||
+ (rate->bitrate == signal)) ||
|
||||
+ ((type == RXDONE_SIGNAL_MCS) &&
|
||||
+ (rate->mcs == signal))) {
|
||||
+ return i;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ WARNING(rt2x00dev, "Frame received with unrecognized signal, "
|
||||
+ "signal=0x%.4x, type=%d.\n", signal, type);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
void rt2x00lib_rxdone(struct rt2x00_dev *rt2x00dev,
|
||||
struct queue_entry *entry)
|
||||
{
|
||||
struct rxdone_entry_desc rxdesc;
|
||||
struct sk_buff *skb;
|
||||
struct ieee80211_rx_status *rx_status = &rt2x00dev->rx_status;
|
||||
- struct ieee80211_supported_band *sband;
|
||||
- const struct rt2x00_rate *rate;
|
||||
unsigned int header_length;
|
||||
unsigned int align;
|
||||
- unsigned int i;
|
||||
- int idx = -1;
|
||||
+ int rate_idx;
|
||||
|
||||
/*
|
||||
* Allocate a new sk_buffer. If no new buffer available, drop the
|
||||
@@ -375,26 +411,17 @@ void rt2x00lib_rxdone(struct rt2x00_dev
|
||||
skb_trim(entry->skb, rxdesc.size);
|
||||
|
||||
/*
|
||||
- * Update RX statistics.
|
||||
- */
|
||||
- sband = &rt2x00dev->bands[rt2x00dev->curr_band];
|
||||
- for (i = 0; i < sband->n_bitrates; i++) {
|
||||
- rate = rt2x00_get_rate(sband->bitrates[i].hw_value);
|
||||
-
|
||||
- if (((rxdesc.dev_flags & RXDONE_SIGNAL_PLCP) &&
|
||||
- (rate->plcp == rxdesc.signal)) ||
|
||||
- ((rxdesc.dev_flags & RXDONE_SIGNAL_BITRATE) &&
|
||||
- (rate->bitrate == rxdesc.signal))) {
|
||||
- idx = i;
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if (idx < 0) {
|
||||
- WARNING(rt2x00dev, "Frame received with unrecognized signal,"
|
||||
- "signal=0x%.2x, type=%d.\n", rxdesc.signal,
|
||||
- (rxdesc.dev_flags & RXDONE_SIGNAL_MASK));
|
||||
- idx = 0;
|
||||
+ * Check if the frame was received using HT. In that case,
|
||||
+ * the rate is the MCS index and should be passed to mac80211
|
||||
+ * directly. Otherwise we need to translate the signal to
|
||||
+ * the correct bitrate index.
|
||||
+ */
|
||||
+ if (rxdesc.rate_mode == RATE_MODE_CCK ||
|
||||
+ rxdesc.rate_mode == RATE_MODE_OFDM) {
|
||||
+ rate_idx = rt2x00lib_rxdone_read_signal(rt2x00dev, &rxdesc);
|
||||
+ } else {
|
||||
+ rxdesc.flags |= RX_FLAG_HT;
|
||||
+ rate_idx = rxdesc.signal;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -404,7 +431,7 @@ void rt2x00lib_rxdone(struct rt2x00_dev
|
||||
rt2x00debug_update_crypto(rt2x00dev, &rxdesc);
|
||||
|
||||
rx_status->mactime = rxdesc.timestamp;
|
||||
- rx_status->rate_idx = idx;
|
||||
+ rx_status->rate_idx = rate_idx;
|
||||
rx_status->qual = rt2x00link_calculate_signal(rt2x00dev, rxdesc.rssi);
|
||||
rx_status->signal = rxdesc.rssi;
|
||||
rx_status->noise = rxdesc.noise;
|
||||
@@ -439,72 +466,84 @@ const struct rt2x00_rate rt2x00_supporte
|
||||
.bitrate = 10,
|
||||
.ratemask = BIT(0),
|
||||
.plcp = 0x00,
|
||||
|
@ -170,7 +273,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
},
|
||||
};
|
||||
|
||||
@@ -582,6 +596,8 @@ static int rt2x00lib_probe_hw_modes(stru
|
||||
@@ -580,6 +619,8 @@ static int rt2x00lib_probe_hw_modes(stru
|
||||
rt2x00dev->bands[IEEE80211_BAND_2GHZ].bitrates = rates;
|
||||
hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
|
||||
&rt2x00dev->bands[IEEE80211_BAND_2GHZ];
|
||||
|
@ -179,7 +282,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
}
|
||||
|
||||
/*
|
||||
@@ -598,6 +614,8 @@ static int rt2x00lib_probe_hw_modes(stru
|
||||
@@ -596,6 +637,8 @@ static int rt2x00lib_probe_hw_modes(stru
|
||||
rt2x00dev->bands[IEEE80211_BAND_5GHZ].bitrates = &rates[4];
|
||||
hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
|
||||
&rt2x00dev->bands[IEEE80211_BAND_5GHZ];
|
||||
|
@ -239,7 +342,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ txdesc->stbc = 0; /* FIXME: What value is needed? */
|
||||
+
|
||||
+ txdesc->mcs = rt2x00_get_rate_mcs(hwrate->mcs);
|
||||
+ if (rt2x00_get_rate_preamble(rate->hw_value))
|
||||
+ if (rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)
|
||||
+ txdesc->mcs |= 0x08;
|
||||
+
|
||||
+ /*
|
||||
|
@ -270,8 +373,8 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
};
|
||||
|
||||
extern const struct rt2x00_rate rt2x00_supported_rates[12];
|
||||
@@ -68,6 +69,14 @@ static inline int rt2x00_get_rate_preamb
|
||||
return (hw_value & 0xff00);
|
||||
@@ -57,6 +58,14 @@ static inline const struct rt2x00_rate *
|
||||
return &rt2x00_supported_rates[hw_value & 0xff];
|
||||
}
|
||||
|
||||
+#define RATE_MCS(__mode, __mcs) \
|
||||
|
@ -285,7 +388,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
/*
|
||||
* Radio control handlers.
|
||||
*/
|
||||
@@ -341,6 +350,21 @@ static inline void rt2x00crypto_rx_inser
|
||||
@@ -330,6 +339,21 @@ static inline void rt2x00crypto_rx_inser
|
||||
#endif /* CONFIG_RT2X00_LIB_CRYPTO */
|
||||
|
||||
/*
|
||||
|
@ -350,7 +453,23 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
|
||||
/**
|
||||
* struct rxdone_entry_desc: RX Entry descriptor
|
||||
@@ -243,6 +245,9 @@ struct txdone_entry_desc {
|
||||
@@ -177,6 +179,7 @@ enum rxdone_entry_desc_flags {
|
||||
* @size: Data size of the received frame.
|
||||
* @flags: MAC80211 receive flags (See &enum mac80211_rx_flags).
|
||||
* @dev_flags: Ralink receive flags (See &enum rxdone_entry_desc_flags).
|
||||
+ * @rate_mode: Rate mode (See @enum rate_modulation).
|
||||
* @cipher: Cipher type used during decryption.
|
||||
* @cipher_status: Decryption status.
|
||||
* @iv: IV/EIV data used during decryption.
|
||||
@@ -190,6 +193,7 @@ struct rxdone_entry_desc {
|
||||
int size;
|
||||
int flags;
|
||||
int dev_flags;
|
||||
+ u16 rate_mode;
|
||||
u8 cipher;
|
||||
u8 cipher_status;
|
||||
|
||||
@@ -243,6 +247,9 @@ struct txdone_entry_desc {
|
||||
* @ENTRY_TXD_ENCRYPT_PAIRWISE: Use pairwise key table (instead of shared).
|
||||
* @ENTRY_TXD_ENCRYPT_IV: Generate IV/EIV in hardware.
|
||||
* @ENTRY_TXD_ENCRYPT_MMIC: Generate MIC in hardware.
|
||||
|
@ -360,7 +479,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
*/
|
||||
enum txentry_desc_flags {
|
||||
ENTRY_TXD_RTS_FRAME,
|
||||
@@ -258,6 +263,9 @@ enum txentry_desc_flags {
|
||||
@@ -258,6 +265,9 @@ enum txentry_desc_flags {
|
||||
ENTRY_TXD_ENCRYPT_PAIRWISE,
|
||||
ENTRY_TXD_ENCRYPT_IV,
|
||||
ENTRY_TXD_ENCRYPT_MMIC,
|
||||
|
@ -370,7 +489,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
};
|
||||
|
||||
/**
|
||||
@@ -271,7 +279,11 @@ enum txentry_desc_flags {
|
||||
@@ -271,7 +281,11 @@ enum txentry_desc_flags {
|
||||
* @length_low: PLCP length low word.
|
||||
* @signal: PLCP signal.
|
||||
* @service: PLCP service.
|
||||
|
@ -382,7 +501,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
* @retry_limit: Max number of retries.
|
||||
* @aifs: AIFS value.
|
||||
* @ifs: IFS value.
|
||||
@@ -291,7 +303,11 @@ struct txentry_desc {
|
||||
@@ -291,7 +305,11 @@ struct txentry_desc {
|
||||
u16 signal;
|
||||
u16 service;
|
||||
|
|
@ -1,9 +1,7 @@
|
|||
From dda25991ee4dc0a2ebe2e3b50857971fe1d878c4 Mon Sep 17 00:00:00 2001
|
||||
From: Ivo van Doorn <IvDoorn@gmail.com>
|
||||
Date: Sun, 28 Dec 2008 12:48:53 +0000 (+0100)
|
||||
Subject: rt2x00: Implement support for rt2800pci
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fivd%2Frt2x00.git;a=commitdiff_plain;h=0be1744a47e7513f862554273216a8d37d2760e8
|
||||
|
||||
rt2x00: Implement support for rt2800pci
|
||||
Date: Sat, 10 Jan 2009 11:03:23 +0100
|
||||
Subject: [PATCH] rt2x00: Implement support for rt2800pci
|
||||
|
||||
Add support for the rt2800pci chipset.
|
||||
|
||||
|
@ -14,7 +12,14 @@ Signed-off-by: Mark Asselstine <asselsm@gmail.com>
|
|||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
||||
---
|
||||
|
||||
drivers/net/wireless/rt2x00/Kconfig | 15 +
|
||||
drivers/net/wireless/rt2x00/Makefile | 1 +
|
||||
drivers/net/wireless/rt2x00/rt2800pci.c | 2707 +++++++++++++++++++++++++++++++
|
||||
drivers/net/wireless/rt2x00/rt2800pci.h | 1879 +++++++++++++++++++++
|
||||
drivers/net/wireless/rt2x00/rt2x00.h | 4 +
|
||||
5 files changed, 4606 insertions(+), 0 deletions(-)
|
||||
create mode 100644 drivers/net/wireless/rt2x00/rt2800pci.c
|
||||
create mode 100644 drivers/net/wireless/rt2x00/rt2800pci.h
|
||||
--- a/drivers/net/wireless/rt2x00/Makefile
|
||||
+++ b/drivers/net/wireless/rt2x00/Makefile
|
||||
@@ -16,5 +16,6 @@ obj-$(CONFIG_RT2X00_LIB_USB) += rt2x00u
|
||||
|
@ -26,7 +31,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
obj-$(CONFIG_RT73USB) += rt73usb.o
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
|
||||
@@ -0,0 +1,2693 @@
|
||||
@@ -0,0 +1,2707 @@
|
||||
+/*
|
||||
+ Copyright (C) 2004 - 2008 rt2x00 SourceForge Project
|
||||
+ <http://rt2x00.serialmonkey.com>
|
||||
|
@ -1044,6 +1049,9 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ return -EBUSY;
|
||||
+ }
|
||||
+
|
||||
+ rt2x00pci_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000002);
|
||||
+ rt2x00pci_register_write(rt2x00dev, AUTOWAKEUP_CFG, 0x00000000);
|
||||
+
|
||||
+ /*
|
||||
+ * Disable DMA, will be reenabled later when enabling
|
||||
+ * the radio.
|
||||
|
@ -1056,10 +1064,6 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ rt2x00_set_field32(®, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
|
||||
+ rt2x00pci_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
|
||||
+
|
||||
+ rt2x00pci_register_write(rt2x00dev, WPDMA_RST_IDX, ~0);
|
||||
+ rt2x00pci_register_write(rt2x00dev, PBF_SYS_CTRL, 0x0e1f);
|
||||
+ rt2x00pci_register_write(rt2x00dev, PBF_SYS_CTRL, 0x0e00);
|
||||
+
|
||||
+ /*
|
||||
+ * enable Host program ram write selection
|
||||
+ */
|
||||
|
@ -1092,6 +1096,11 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * Disable interrupts
|
||||
+ */
|
||||
+ rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_IRQ_OFF);
|
||||
+
|
||||
+ /*
|
||||
+ * Initialize BBP R/W access agent
|
||||
+ */
|
||||
+ rt2x00pci_register_write(rt2x00dev, H2M_BBP_AGENT, 0);
|
||||
|
@ -1203,13 +1212,17 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ rt2x00pci_register_write(rt2x00dev, WPDMA_RST_IDX, reg);
|
||||
+
|
||||
+ rt2x00pci_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e1f);
|
||||
+ rt2x00pci_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000000);
|
||||
+ rt2x00pci_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e00);
|
||||
+
|
||||
+ rt2x00pci_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000003);
|
||||
+
|
||||
+ rt2x00pci_register_read(rt2x00dev, MAC_SYS_CTRL, ®);
|
||||
+ rt2x00_set_field32(®, MAC_SYS_CTRL_RESET_CSR, 1);
|
||||
+ rt2x00_set_field32(®, MAC_SYS_CTRL_RESET_BBP, 1);
|
||||
+ rt2x00pci_register_write(rt2x00dev, MAC_SYS_CTRL, reg);
|
||||
+
|
||||
+ rt2x00pci_register_write(rt2x00dev, MAC_SYS_CTRL, 0x00000000);
|
||||
+
|
||||
+ rt2x00pci_register_read(rt2x00dev, BCN_OFFSET0, ®);
|
||||
+ rt2x00_set_field32(®, BCN_OFFSET0_BCN0, 0xe0); /* 0x3800 */
|
||||
+ rt2x00_set_field32(®, BCN_OFFSET0_BCN1, 0xe8); /* 0x3a00 */
|
||||
|
@ -1465,6 +1478,14 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ unsigned int i;
|
||||
+ u8 value;
|
||||
+
|
||||
+ /*
|
||||
+ * BBP was enabled after firmware was loaded,
|
||||
+ * but we need to reactivate it now.
|
||||
+ */
|
||||
+ rt2x00pci_register_write(rt2x00dev, H2M_BBP_AGENT, 0x00000000);
|
||||
+ rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CSR, 0x00000000);
|
||||
+ msleep(1);
|
||||
+
|
||||
+ for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
|
||||
+ rt2800pci_bbp_read(rt2x00dev, 0, &value);
|
||||
+ if ((value != 0xff) && (value != 0x00))
|
||||
|
@ -1564,6 +1585,12 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ rt2x00_set_field32(®, INT_MASK_CSR_HCCA_DMA_DONE, mask);
|
||||
+ rt2x00_set_field32(®, INT_MASK_CSR_MGMT_DMA_DONE, mask);
|
||||
+ rt2x00_set_field32(®, INT_MASK_CSR_MCU_COMMAND, mask);
|
||||
+ rt2x00_set_field32(®, INT_MASK_CSR_RXTX_COHERENT, mask);
|
||||
+ rt2x00_set_field32(®, INT_MASK_CSR_TBTT, mask);
|
||||
+ rt2x00_set_field32(®, INT_MASK_CSR_PRE_TBTT, mask);
|
||||
+ rt2x00_set_field32(®, INT_MASK_CSR_TX_FIFO_STATUS, mask);
|
||||
+ rt2x00_set_field32(®, INT_MASK_CSR_AUTO_WAKEUP, mask);
|
||||
+ rt2x00_set_field32(®, INT_MASK_CSR_GPTIMER, mask);
|
||||
+ rt2x00_set_field32(®, INT_MASK_CSR_RX_COHERENT, mask);
|
||||
+ rt2x00_set_field32(®, INT_MASK_CSR_TX_COHERENT, mask);
|
||||
+ rt2x00pci_register_write(rt2x00dev, INT_MASK_CSR, reg);
|
||||
|
@ -1601,7 +1628,10 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ rt2800pci_init_bbp(rt2x00dev)))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ rt2x00pci_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00001a80);
|
||||
+ /*
|
||||
+ * Send signal to firmware during boot time.
|
||||
+ */
|
||||
+ rt2800pci_mcu_request(rt2x00dev, MCU_BOOT_SIGNAL, 0xff, 0, 0);
|
||||
+
|
||||
+ /* Wait for DMA, ignore error */
|
||||
+ rt2800pci_wait_wpdma_ready(rt2x00dev);
|
||||
|
@ -1612,6 +1642,8 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ rt2x00pci_register_read(rt2x00dev, WPDMA_GLO_CFG, ®);
|
||||
+ rt2x00_set_field32(®, WPDMA_GLO_CFG_ENABLE_TX_DMA, 1);
|
||||
+ rt2x00_set_field32(®, WPDMA_GLO_CFG_ENABLE_RX_DMA, 1);
|
||||
+ rt2x00_set_field32(®, WPDMA_GLO_CFG_WP_DMA_BURST_SIZE, 2);
|
||||
+ rt2x00_set_field32(®, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
|
||||
+ rt2x00pci_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
|
||||
+
|
||||
+ rt2x00pci_register_read(rt2x00dev, MAC_SYS_CTRL, ®);
|
||||
|
@ -1634,14 +1666,6 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ rt2800pci_mcu_request(rt2x00dev, MCU_LED_3, 0xff,
|
||||
+ word & 0xff, (word >> 8) & 0xff);
|
||||
+
|
||||
+ rt2x00pci_register_write(rt2x00dev, H2M_BBP_AGENT, 0);
|
||||
+ rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CSR, 0);
|
||||
+
|
||||
+ /*
|
||||
+ * Send signal to firmware during boot time.
|
||||
+ */
|
||||
+ rt2800pci_mcu_request(rt2x00dev, MCU_BOOT_SIGNAL, 0xff, 0, 0);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
|
@ -1651,7 +1675,10 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+
|
||||
+ rt2x00pci_register_read(rt2x00dev, WPDMA_GLO_CFG, ®);
|
||||
+ rt2x00_set_field32(®, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
|
||||
+ rt2x00_set_field32(®, WPDMA_GLO_CFG_TX_DMA_BUSY, 0);
|
||||
+ rt2x00_set_field32(®, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
|
||||
+ rt2x00_set_field32(®, WPDMA_GLO_CFG_RX_DMA_BUSY, 0);
|
||||
+ rt2x00_set_field32(®, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
|
||||
+ rt2x00pci_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
|
||||
+
|
||||
+ rt2x00pci_register_write(rt2x00dev, MAC_SYS_CTRL, 0);
|
||||
|
@ -1768,8 +1795,8 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ rt2x00_desc_read(txwi, 1, &word);
|
||||
+ rt2x00_set_field32(&word, TXWI_W1_ACK,
|
||||
+ test_bit(ENTRY_TXD_ACK, &txdesc->flags));
|
||||
+ rt2x00_set_field32(&word, TXWI_W1_ACK,
|
||||
+ test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags));
|
||||
+ rt2x00_set_field32(&word, TXWI_W1_NSEQ,
|
||||
+ test_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags));
|
||||
+ rt2x00_set_field32(&word, TXWI_W1_BW_WIN_SIZE, txdesc->ba_size);
|
||||
+ rt2x00_set_field32(&word, TXWI_W1_WIRELESS_CLI_ID,
|
||||
+ skbdesc->entry->entry_idx);
|
||||
|
@ -1943,26 +1970,18 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ if (rt2x00_get_field32(rxwi1, RXWI_W1_BW))
|
||||
+ rxdesc->flags |= RX_FLAG_40MHZ;
|
||||
+
|
||||
+ switch (rt2x00_get_field32(rxwi1, RXWI_W1_PHYMODE)) {
|
||||
+ case RATE_MODE_CCK:
|
||||
+ /*
|
||||
+ * Detect RX rate, always use MCS as signal type.
|
||||
+ */
|
||||
+ rxdesc->dev_flags |= RXDONE_SIGNAL_MCS;
|
||||
+ rxdesc->rate_mode = rt2x00_get_field32(rxwi1, RXWI_W1_PHYMODE);
|
||||
+ rxdesc->signal = rt2x00_get_field32(rxwi1, RXWI_W1_MCS);
|
||||
+
|
||||
+ /*
|
||||
+ * Mask of 0x8 bit to remove the short preamble flag.
|
||||
+ */
|
||||
+ rxdesc->signal =
|
||||
+ (RATE_MODE_CCK << 8) |
|
||||
+ (rt2x00_get_field32(rxwi1, RXWI_W1_MCS) & ~0x8);
|
||||
+ break;
|
||||
+ case RATE_MODE_OFDM:
|
||||
+ rxdesc->signal =
|
||||
+ (RATE_MODE_OFDM << 8) |
|
||||
+ rt2x00_get_field32(rxwi1, RXWI_W1_MCS);
|
||||
+ break;
|
||||
+ case RATE_MODE_HT_MIX:
|
||||
+ case RATE_MODE_HT_GREENFIELD:
|
||||
+ rxdesc->signal = rt2x00_get_field32(rxwi1, RXWI_W1_MCS);
|
||||
+ rxdesc->flags |= RX_FLAG_HT;
|
||||
+ break;
|
||||
+ }
|
||||
+ if (rxdesc->dev_flags == RATE_MODE_CCK)
|
||||
+ rxdesc->signal &= ~0x8;
|
||||
+
|
||||
+ rxdesc->rssi =
|
||||
+ (rt2x00_get_field32(rxwi2, RXWI_W2_RSSI0) +
|
||||
|
@ -2722,7 +2741,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+module_exit(rt2800pci_exit);
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2800pci.h
|
||||
@@ -0,0 +1,1873 @@
|
||||
@@ -0,0 +1,1879 @@
|
||||
+/*
|
||||
+ Copyright (C) 2004 - 2008 rt2x00 SourceForge Project
|
||||
+ <http://rt2x00.serialmonkey.com>
|
||||
|
@ -2816,13 +2835,13 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ * LOAD_STATUS: 1:loading, 0:done.
|
||||
+ */
|
||||
+#define E2PROM_CSR 0x0004
|
||||
+#define E2PROM_CSR_RELOAD FIELD32(0x00000001)
|
||||
+#define E2PROM_CSR_DATA_CLOCK FIELD32(0x00000002)
|
||||
+#define E2PROM_CSR_CHIP_SELECT FIELD32(0x00000004)
|
||||
+#define E2PROM_CSR_DATA_IN FIELD32(0x00000008)
|
||||
+#define E2PROM_CSR_DATA_OUT FIELD32(0x00000010)
|
||||
+#define E2PROM_CSR_DATA_CLOCK FIELD32(0x00000001)
|
||||
+#define E2PROM_CSR_CHIP_SELECT FIELD32(0x00000002)
|
||||
+#define E2PROM_CSR_DATA_IN FIELD32(0x00000004)
|
||||
+#define E2PROM_CSR_DATA_OUT FIELD32(0x00000008)
|
||||
+#define E2PROM_CSR_TYPE_93C46 FIELD32(0x00000020)
|
||||
+#define E2PROM_CSR_LOAD_STATUS FIELD32(0x00000040)
|
||||
+#define E2PROM_CSR_RELOAD FIELD32(0x00000080)
|
||||
+
|
||||
+/*
|
||||
+ * HOST-MCU shared memory
|
||||
|
@ -2869,8 +2888,14 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+#define INT_MASK_CSR_HCCA_DMA_DONE FIELD32(0x00000080)
|
||||
+#define INT_MASK_CSR_MGMT_DMA_DONE FIELD32(0x00000100)
|
||||
+#define INT_MASK_CSR_MCU_COMMAND FIELD32(0x00000200)
|
||||
+#define INT_MASK_CSR_RX_COHERENT FIELD32(0x40000000)
|
||||
+#define INT_MASK_CSR_TX_COHERENT FIELD32(0x80000000)
|
||||
+#define INT_MASK_CSR_RXTX_COHERENT FIELD32(0x00000400)
|
||||
+#define INT_MASK_CSR_TBTT FIELD32(0x00000800)
|
||||
+#define INT_MASK_CSR_PRE_TBTT FIELD32(0x00001000)
|
||||
+#define INT_MASK_CSR_TX_FIFO_STATUS FIELD32(0x00002000)
|
||||
+#define INT_MASK_CSR_AUTO_WAKEUP FIELD32(0x00004000)
|
||||
+#define INT_MASK_CSR_GPTIMER FIELD32(0x00008000)
|
||||
+#define INT_MASK_CSR_RX_COHERENT FIELD32(0x00010000)
|
||||
+#define INT_MASK_CSR_TX_COHERENT FIELD32(0x00020000)
|
||||
+
|
||||
+/*
|
||||
+ * WPDMA_GLO_CFG
|
||||
|
@ -4242,7 +4267,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+#define EEPROM_MAC_ADDR_0 0x0002
|
||||
+#define EEPROM_MAC_ADDR_BYTE0 FIELD16(0x00ff)
|
||||
+#define EEPROM_MAC_ADDR_BYTE1 FIELD16(0xff00)
|
||||
+#define EEPROM_MAC_ADDR1 0x0003
|
||||
+#define EEPROM_MAC_ADDR_1 0x0003
|
||||
+#define EEPROM_MAC_ADDR_BYTE2 FIELD16(0x00ff)
|
||||
+#define EEPROM_MAC_ADDR_BYTE3 FIELD16(0xff00)
|
||||
+#define EEPROM_MAC_ADDR_2 0x0004
|
||||
|
@ -4598,7 +4623,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+#endif /* RT2800PCI_H */
|
||||
--- a/drivers/net/wireless/rt2x00/rt2x00.h
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
|
||||
@@ -138,6 +138,10 @@ struct rt2x00_chip {
|
||||
@@ -139,6 +139,10 @@ struct rt2x00_chip {
|
||||
#define RT2561 0x0302
|
||||
#define RT2661 0x0401
|
||||
#define RT2571 0x1300
|
|
@ -1,9 +1,7 @@
|
|||
From 22592b5df5bef2754f56e165ee0828777a95fdfd Mon Sep 17 00:00:00 2001
|
||||
From: Ivo van Doorn <IvDoorn@gmail.com>
|
||||
Date: Sun, 28 Dec 2008 12:48:56 +0000 (+0100)
|
||||
Subject: rt2x00: Implement support for rt2800usb
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fivd%2Frt2x00.git;a=commitdiff_plain;h=e0af839d714d1d04af044d00858ce4113ebd602b
|
||||
|
||||
rt2x00: Implement support for rt2800usb
|
||||
Date: Sat, 10 Jan 2009 11:05:41 +0100
|
||||
Subject: [PATCH] rt2x00: Implement support for rt2800usb
|
||||
|
||||
Add support for the rt2800usb chipset.
|
||||
|
||||
|
@ -13,6 +11,14 @@ Signed-off-by: Mattias Nissler <mattias.nissler@gmx.de>
|
|||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
||||
---
|
||||
drivers/net/wireless/rt2x00/Kconfig | 14 +
|
||||
drivers/net/wireless/rt2x00/Makefile | 1 +
|
||||
drivers/net/wireless/rt2x00/rt2800usb.c | 2540 +++++++++++++++++++++++++++++++
|
||||
drivers/net/wireless/rt2x00/rt2800usb.h | 1892 +++++++++++++++++++++++
|
||||
drivers/net/wireless/rt2x00/rt2x00.h | 1 +
|
||||
5 files changed, 4448 insertions(+), 0 deletions(-)
|
||||
create mode 100644 drivers/net/wireless/rt2x00/rt2800usb.c
|
||||
create mode 100644 drivers/net/wireless/rt2x00/rt2800usb.h
|
||||
|
||||
--- a/drivers/net/wireless/rt2x00/Makefile
|
||||
+++ b/drivers/net/wireless/rt2x00/Makefile
|
||||
|
@ -23,7 +29,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+obj-$(CONFIG_RT2800USB) += rt2800usb.o
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
|
||||
@@ -0,0 +1,2548 @@
|
||||
@@ -0,0 +1,2540 @@
|
||||
+/*
|
||||
+ Copyright (C) 2004 - 2008 rt2x00 SourceForge Project
|
||||
+ <http://rt2x00.serialmonkey.com>
|
||||
|
@ -1516,6 +1522,11 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ rt2x00usb_register_write(rt2x00dev, MAC_SYS_CTRL, reg);
|
||||
+
|
||||
+ /*
|
||||
+ * Send signal to firmware during boot time.
|
||||
+ */
|
||||
+ rt2800usb_mcu_request(rt2x00dev, MCU_BOOT_SIGNAL, 0xff, 0, 0);
|
||||
+
|
||||
+ /*
|
||||
+ * Initialize LED control
|
||||
+ */
|
||||
+ rt2x00_eeprom_read(rt2x00dev, EEPROM_LED1, &word);
|
||||
|
@ -1530,11 +1541,6 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ rt2800usb_mcu_request(rt2x00dev, MCU_LED_3, 0xff,
|
||||
+ word & 0xff, (word >> 8) & 0xff);
|
||||
+
|
||||
+ /*
|
||||
+ * Send signal to firmware during boot time.
|
||||
+ */
|
||||
+ rt2800usb_mcu_request(rt2x00dev, MCU_BOOT_SIGNAL, 0xff, 0, 0);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
|
@ -1661,8 +1667,8 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ rt2x00_desc_read(txwi, 1, &word);
|
||||
+ rt2x00_set_field32(&word, TXWI_W1_ACK,
|
||||
+ test_bit(ENTRY_TXD_ACK, &txdesc->flags));
|
||||
+ rt2x00_set_field32(&word, TXWI_W1_ACK,
|
||||
+ test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags));
|
||||
+ rt2x00_set_field32(&word, TXWI_W1_NSEQ,
|
||||
+ test_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags));
|
||||
+ rt2x00_set_field32(&word, TXWI_W1_BW_WIN_SIZE, txdesc->ba_size);
|
||||
+ rt2x00_set_field32(&word, TXWI_W1_WIRELESS_CLI_ID, 0xff);
|
||||
+ rt2x00_set_field32(&word, TXWI_W1_MPDU_TOTAL_BYTE_COUNT, skb->len);
|
||||
|
@ -1851,26 +1857,18 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+ if (rt2x00_get_field32(rxwi1, RXWI_W1_BW))
|
||||
+ rxdesc->flags |= RX_FLAG_40MHZ;
|
||||
+
|
||||
+ switch (rt2x00_get_field32(rxwi1, RXWI_W1_PHYMODE)) {
|
||||
+ case RATE_MODE_CCK:
|
||||
+ /*
|
||||
+ * Detect RX rate, always use MCS as signal type.
|
||||
+ */
|
||||
+ rxdesc->dev_flags |= RXDONE_SIGNAL_MCS;
|
||||
+ rxdesc->rate_mode = rt2x00_get_field32(rxwi1, RXWI_W1_PHYMODE);
|
||||
+ rxdesc->signal = rt2x00_get_field32(rxwi1, RXWI_W1_MCS);
|
||||
+
|
||||
+ /*
|
||||
+ * Mask of 0x8 bit to remove the short preamble flag.
|
||||
+ */
|
||||
+ rxdesc->signal =
|
||||
+ (RATE_MODE_CCK << 8) |
|
||||
+ (rt2x00_get_field32(rxwi1, RXWI_W1_MCS) & ~0x8);
|
||||
+ break;
|
||||
+ case RATE_MODE_OFDM:
|
||||
+ rxdesc->signal =
|
||||
+ (RATE_MODE_OFDM << 8) |
|
||||
+ rt2x00_get_field32(rxwi1, RXWI_W1_MCS);
|
||||
+ break;
|
||||
+ case RATE_MODE_HT_MIX:
|
||||
+ case RATE_MODE_HT_GREENFIELD:
|
||||
+ rxdesc->signal = rt2x00_get_field32(rxwi1, RXWI_W1_MCS);
|
||||
+ rxdesc->flags |= RX_FLAG_HT;
|
||||
+ break;
|
||||
+ }
|
||||
+ if (rxdesc->dev_flags == RATE_MODE_CCK)
|
||||
+ rxdesc->signal &= ~0x8;
|
||||
+
|
||||
+ rxdesc->rssi =
|
||||
+ (rt2x00_get_field32(rxwi2, RXWI_W2_RSSI0) +
|
||||
|
@ -2574,7 +2572,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+module_exit(rt2800usb_exit);
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2800usb.h
|
||||
@@ -0,0 +1,1886 @@
|
||||
@@ -0,0 +1,1892 @@
|
||||
+/*
|
||||
+ Copyright (C) 2004 - 2008 rt2x00 SourceForge Project
|
||||
+ <http://rt2x00.serialmonkey.com>
|
||||
|
@ -2700,8 +2698,14 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+#define INT_MASK_CSR_HCCA_DMA_DONE FIELD32(0x00000080)
|
||||
+#define INT_MASK_CSR_MGMT_DMA_DONE FIELD32(0x00000100)
|
||||
+#define INT_MASK_CSR_MCU_COMMAND FIELD32(0x00000200)
|
||||
+#define INT_MASK_CSR_RX_COHERENT FIELD32(0x40000000)
|
||||
+#define INT_MASK_CSR_TX_COHERENT FIELD32(0x80000000)
|
||||
+#define INT_MASK_CSR_RXTX_COHERENT FIELD32(0x00000400)
|
||||
+#define INT_MASK_CSR_TBTT FIELD32(0x00000800)
|
||||
+#define INT_MASK_CSR_PRE_TBTT FIELD32(0x00001000)
|
||||
+#define INT_MASK_CSR_TX_FIFO_STATUS FIELD32(0x00002000)
|
||||
+#define INT_MASK_CSR_AUTO_WAKEUP FIELD32(0x00004000)
|
||||
+#define INT_MASK_CSR_GPTIMER FIELD32(0x00008000)
|
||||
+#define INT_MASK_CSR_RX_COHERENT FIELD32(0x00010000)
|
||||
+#define INT_MASK_CSR_TX_COHERENT FIELD32(0x00020000)
|
||||
+
|
||||
+/*
|
||||
+ * WPDMA_GLO_CFG
|
||||
|
@ -4097,7 +4101,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+#define EEPROM_MAC_ADDR_0 0x0002
|
||||
+#define EEPROM_MAC_ADDR_BYTE0 FIELD16(0x00ff)
|
||||
+#define EEPROM_MAC_ADDR_BYTE1 FIELD16(0xff00)
|
||||
+#define EEPROM_MAC_ADDR1 0x0003
|
||||
+#define EEPROM_MAC_ADDR_1 0x0003
|
||||
+#define EEPROM_MAC_ADDR_BYTE2 FIELD16(0x00ff)
|
||||
+#define EEPROM_MAC_ADDR_BYTE3 FIELD16(0xff00)
|
||||
+#define EEPROM_MAC_ADDR_2 0x0004
|
||||
|
@ -4463,7 +4467,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
|||
+#endif /* RT2800USB_H */
|
||||
--- a/drivers/net/wireless/rt2x00/rt2x00.h
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
|
||||
@@ -142,6 +142,7 @@ struct rt2x00_chip {
|
||||
@@ -143,6 +143,7 @@ struct rt2x00_chip {
|
||||
#define RT2860D 0x0681 /* 2.4GHz, 5GHz PCI/CB */
|
||||
#define RT2890 0x0701 /* 2.4GHz PCIe */
|
||||
#define RT2890D 0x0781 /* 2.4GHz, 5GHz PCIe */
|
|
@ -1,15 +1,14 @@
|
|||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -156,6 +156,8 @@ CONFIG_ADM8211=m
|
||||
@@ -156,6 +156,7 @@ CONFIG_ADM8211=m
|
||||
CONFIG_RT2X00_LIB_PCI=m
|
||||
CONFIG_RT2400PCI=m
|
||||
CONFIG_RT2500PCI=m
|
||||
+CONFIG_RT2800PCI=m
|
||||
+CONFIG_RT2800USB=m
|
||||
NEED_RT2X00=y
|
||||
|
||||
# Two rt2x00 drivers require firmware: rt61pci and rt73usb. They depend on
|
||||
@@ -197,6 +199,8 @@ CONFIG_RTL8187=m
|
||||
@@ -197,6 +198,8 @@ CONFIG_RTL8187=m
|
||||
# RT2500USB does not require firmware
|
||||
CONFIG_RT2500USB=m
|
||||
CONFIG_RT2X00_LIB_USB=m
|
||||
|
@ -18,3 +17,13 @@
|
|||
NEED_RT2X00=y
|
||||
# RT73USB requires firmware
|
||||
ifneq ($(CONFIG_CRC_ITU_T),)
|
||||
@@ -204,6 +207,9 @@ CONFIG_RT73USB=m
|
||||
NEED_RT2X00_FIRMWARE=y
|
||||
endif
|
||||
|
||||
+# RT2800USB support
|
||||
+CONFIG_RT2800USB=m
|
||||
+
|
||||
endif # end of USB driver list
|
||||
|
||||
# Common rt2x00 requirements
|
||||
|
|
|
@ -97,7 +97,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
*csz = (int)u8tmp;
|
||||
|
||||
/*
|
||||
@@ -1267,11 +1268,11 @@ static int ath_start_rfkill_poll(struct
|
||||
@@ -1269,11 +1270,11 @@ static int ath_start_rfkill_poll(struct
|
||||
|
||||
/* Deinitialize the device */
|
||||
ath_detach(sc);
|
||||
|
@ -114,7 +114,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
ieee80211_free_hw(sc->hw);
|
||||
return -EIO;
|
||||
} else {
|
||||
@@ -1708,7 +1709,7 @@ int ath_descdma_setup(struct ath_softc *
|
||||
@@ -1716,7 +1717,7 @@ int ath_descdma_setup(struct ath_softc *
|
||||
}
|
||||
|
||||
/* allocate descriptors */
|
||||
|
@ -123,7 +123,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
dd->dd_desc_len,
|
||||
&dd->dd_desc_paddr);
|
||||
if (dd->dd_desc == NULL) {
|
||||
@@ -1756,7 +1757,7 @@ int ath_descdma_setup(struct ath_softc *
|
||||
@@ -1764,7 +1765,7 @@ int ath_descdma_setup(struct ath_softc *
|
||||
}
|
||||
return 0;
|
||||
fail2:
|
||||
|
@ -132,7 +132,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
dd->dd_desc_len, dd->dd_desc, dd->dd_desc_paddr);
|
||||
fail:
|
||||
memset(dd, 0, sizeof(*dd));
|
||||
@@ -1770,7 +1771,7 @@ void ath_descdma_cleanup(struct ath_soft
|
||||
@@ -1778,7 +1779,7 @@ void ath_descdma_cleanup(struct ath_soft
|
||||
struct ath_descdma *dd,
|
||||
struct list_head *head)
|
||||
{
|
||||
|
@ -141,7 +141,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
dd->dd_desc_len, dd->dd_desc, dd->dd_desc_paddr);
|
||||
|
||||
INIT_LIST_HEAD(head);
|
||||
@@ -2615,7 +2616,7 @@ static int ath_pci_probe(struct pci_dev
|
||||
@@ -2624,7 +2625,7 @@ static int ath_pci_probe(struct pci_dev
|
||||
|
||||
sc = hw->priv;
|
||||
sc->hw = hw;
|
||||
|
@ -185,7 +185,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
sc->rx.bufsize,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
|
||||
@@ -599,10 +601,11 @@ int ath_rx_tasklet(struct ath_softc *sc,
|
||||
@@ -605,10 +607,11 @@ int ath_rx_tasklet(struct ath_softc *sc,
|
||||
|
||||
/* We will now give hardware our shiny new allocated skb */
|
||||
bf->bf_mpdu = requeue_skb;
|
||||
|
|
|
@ -95,7 +95,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
}
|
||||
--- a/drivers/net/wireless/ath9k/main.c
|
||||
+++ b/drivers/net/wireless/ath9k/main.c
|
||||
@@ -1709,9 +1709,8 @@ int ath_descdma_setup(struct ath_softc *
|
||||
@@ -1717,9 +1717,8 @@ int ath_descdma_setup(struct ath_softc *
|
||||
}
|
||||
|
||||
/* allocate descriptors */
|
||||
|
@ -107,7 +107,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
if (dd->dd_desc == NULL) {
|
||||
error = -ENOMEM;
|
||||
goto fail;
|
||||
@@ -1757,8 +1756,8 @@ int ath_descdma_setup(struct ath_softc *
|
||||
@@ -1765,8 +1764,8 @@ int ath_descdma_setup(struct ath_softc *
|
||||
}
|
||||
return 0;
|
||||
fail2:
|
||||
|
@ -118,7 +118,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
fail:
|
||||
memset(dd, 0, sizeof(*dd));
|
||||
return error;
|
||||
@@ -1771,8 +1770,8 @@ void ath_descdma_cleanup(struct ath_soft
|
||||
@@ -1779,8 +1778,8 @@ void ath_descdma_cleanup(struct ath_soft
|
||||
struct ath_descdma *dd,
|
||||
struct list_head *head)
|
||||
{
|
||||
|
@ -177,7 +177,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
|
||||
skb_put(skb, ds->ds_rxstat.rs_datalen);
|
||||
skb->protocol = cpu_to_be16(ETH_P_CONTROL);
|
||||
@@ -601,16 +599,15 @@ int ath_rx_tasklet(struct ath_softc *sc,
|
||||
@@ -607,16 +605,15 @@ int ath_rx_tasklet(struct ath_softc *sc,
|
||||
|
||||
/* We will now give hardware our shiny new allocated skb */
|
||||
bf->bf_mpdu = requeue_skb;
|
||||
|
|
|
@ -55,7 +55,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
{
|
||||
u8 u8tmp;
|
||||
|
||||
@@ -1338,7 +1338,7 @@ static int ath_init(u16 devid, struct at
|
||||
@@ -1340,7 +1340,7 @@ static int ath_init(u16 devid, struct at
|
||||
* Cache line size is used to size and align various
|
||||
* structures used to communicate with the hardware.
|
||||
*/
|
||||
|
@ -64,7 +64,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
/* XXX assert csz is non-zero */
|
||||
sc->sc_cachelsz = csz << 2; /* convert to bytes */
|
||||
|
||||
@@ -2529,6 +2529,10 @@ ath_rf_name(u16 rf_version)
|
||||
@@ -2538,6 +2538,10 @@ ath_rf_name(u16 rf_version)
|
||||
return "????";
|
||||
}
|
||||
|
||||
|
@ -75,7 +75,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
{
|
||||
void __iomem *mem;
|
||||
@@ -2617,6 +2621,7 @@ static int ath_pci_probe(struct pci_dev
|
||||
@@ -2626,6 +2630,7 @@ static int ath_pci_probe(struct pci_dev
|
||||
sc->hw = hw;
|
||||
sc->dev = &pdev->dev;
|
||||
sc->mem = mem;
|
||||
|
|
|
@ -51,7 +51,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
|
||||
/* return bus cachesize in 4B word units */
|
||||
|
||||
@@ -1267,13 +1268,7 @@ static int ath_start_rfkill_poll(struct
|
||||
@@ -1269,13 +1270,7 @@ static int ath_start_rfkill_poll(struct
|
||||
rfkill_free(sc->rf_kill.rfkill);
|
||||
|
||||
/* Deinitialize the device */
|
||||
|
@ -66,7 +66,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
return -EIO;
|
||||
} else {
|
||||
sc->sc_flags |= SC_OP_RFKILL_REGISTERED;
|
||||
@@ -1284,6 +1279,14 @@ static int ath_start_rfkill_poll(struct
|
||||
@@ -1286,6 +1281,14 @@ static int ath_start_rfkill_poll(struct
|
||||
}
|
||||
#endif /* CONFIG_RFKILL */
|
||||
|
||||
|
@ -81,7 +81,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
static void ath_detach(struct ath_softc *sc)
|
||||
{
|
||||
struct ieee80211_hw *hw = sc->hw;
|
||||
@@ -2529,8 +2532,18 @@ ath_rf_name(u16 rf_version)
|
||||
@@ -2538,8 +2541,18 @@ ath_rf_name(u16 rf_version)
|
||||
return "????";
|
||||
}
|
||||
|
||||
|
@ -100,7 +100,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
};
|
||||
|
||||
static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
@@ -2637,6 +2650,8 @@ static int ath_pci_probe(struct pci_dev
|
||||
@@ -2646,6 +2659,8 @@ static int ath_pci_probe(struct pci_dev
|
||||
goto bad4;
|
||||
}
|
||||
|
||||
|
@ -109,7 +109,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
ah = sc->sc_ah;
|
||||
printk(KERN_INFO
|
||||
"%s: Atheros AR%s MAC/BB Rev:%x "
|
||||
@@ -2667,13 +2682,7 @@ static void ath_pci_remove(struct pci_de
|
||||
@@ -2676,13 +2691,7 @@ static void ath_pci_remove(struct pci_de
|
||||
struct ieee80211_hw *hw = pci_get_drvdata(pdev);
|
||||
struct ath_softc *sc = hw->priv;
|
||||
|
||||
|
|
|
@ -100,7 +100,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
static void ath_cache_conf_rate(struct ath_softc *sc,
|
||||
struct ieee80211_conf *conf)
|
||||
{
|
||||
@@ -498,7 +465,7 @@ static void ath9k_tasklet(unsigned long
|
||||
@@ -500,7 +467,7 @@ static void ath9k_tasklet(unsigned long
|
||||
ath9k_hw_set_interrupts(sc->sc_ah, sc->sc_imask);
|
||||
}
|
||||
|
||||
|
@ -109,7 +109,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
{
|
||||
struct ath_softc *sc = dev;
|
||||
struct ath_hal *ah = sc->sc_ah;
|
||||
@@ -1279,7 +1246,7 @@ static int ath_start_rfkill_poll(struct
|
||||
@@ -1281,7 +1248,7 @@ static int ath_start_rfkill_poll(struct
|
||||
}
|
||||
#endif /* CONFIG_RFKILL */
|
||||
|
||||
|
@ -118,7 +118,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
{
|
||||
ath_detach(sc);
|
||||
free_irq(sc->irq, sc);
|
||||
@@ -1287,7 +1254,7 @@ static void ath_cleanup(struct ath_softc
|
||||
@@ -1289,7 +1256,7 @@ static void ath_cleanup(struct ath_softc
|
||||
ieee80211_free_hw(sc->hw);
|
||||
}
|
||||
|
||||
|
@ -127,7 +127,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
{
|
||||
struct ieee80211_hw *hw = sc->hw;
|
||||
int i = 0;
|
||||
@@ -1538,7 +1505,7 @@ bad:
|
||||
@@ -1543,7 +1510,7 @@ bad:
|
||||
return error;
|
||||
}
|
||||
|
||||
|
@ -136,7 +136,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
{
|
||||
struct ieee80211_hw *hw = sc->hw;
|
||||
int error = 0;
|
||||
@@ -2457,7 +2424,7 @@ static int ath9k_ampdu_action(struct iee
|
||||
@@ -2466,7 +2433,7 @@ static int ath9k_ampdu_action(struct iee
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -145,7 +145,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
.tx = ath9k_tx,
|
||||
.start = ath9k_start,
|
||||
.stop = ath9k_stop,
|
||||
@@ -2501,7 +2468,7 @@ static struct {
|
||||
@@ -2510,7 +2477,7 @@ static struct {
|
||||
/*
|
||||
* Return the MAC/BB name. "????" is returned if the MAC/BB is unknown.
|
||||
*/
|
||||
|
@ -154,7 +154,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
ath_mac_bb_name(u32 mac_bb_version)
|
||||
{
|
||||
int i;
|
||||
@@ -2518,7 +2485,7 @@ ath_mac_bb_name(u32 mac_bb_version)
|
||||
@@ -2527,7 +2494,7 @@ ath_mac_bb_name(u32 mac_bb_version)
|
||||
/*
|
||||
* Return the RF name. "????" is returned if the RF is unknown.
|
||||
*/
|
||||
|
@ -163,7 +163,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
ath_rf_name(u16 rf_version)
|
||||
{
|
||||
int i;
|
||||
@@ -2532,234 +2499,7 @@ ath_rf_name(u16 rf_version)
|
||||
@@ -2541,234 +2508,7 @@ ath_rf_name(u16 rf_version)
|
||||
return "????";
|
||||
}
|
||||
|
||||
|
@ -399,7 +399,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
{
|
||||
int error;
|
||||
|
||||
@@ -2771,26 +2511,30 @@ static int __init init_ath_pci(void)
|
||||
@@ -2780,26 +2520,30 @@ static int __init init_ath_pci(void)
|
||||
printk(KERN_ERR
|
||||
"Unable to register rate control algorithm: %d\n",
|
||||
error);
|
||||
|
|
|
@ -205,7 +205,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
#endif /* CORE_H */
|
||||
--- a/drivers/net/wireless/ath9k/main.c
|
||||
+++ b/drivers/net/wireless/ath9k/main.c
|
||||
@@ -2522,8 +2522,17 @@ static int __init ath9k_init(void)
|
||||
@@ -2531,8 +2531,17 @@ static int __init ath9k_init(void)
|
||||
goto err_rate_unregister;
|
||||
}
|
||||
|
||||
|
@ -223,7 +223,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
err_rate_unregister:
|
||||
ath_rate_control_unregister();
|
||||
err_out:
|
||||
@@ -2533,6 +2542,7 @@ module_init(ath9k_init);
|
||||
@@ -2542,6 +2551,7 @@ module_init(ath9k_init);
|
||||
|
||||
static void __exit ath9k_exit(void)
|
||||
{
|
||||
|
|
|
@ -49,7 +49,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||
|
||||
if (!ath9k_hw_wait(ah,
|
||||
AR_RTC_STATUS,
|
||||
@@ -2599,7 +2599,7 @@ static void ath9k_set_power_sleep(struct
|
||||
@@ -2616,7 +2616,7 @@ static void ath9k_set_power_sleep(struct
|
||||
if (!AR_SREV_9100(ah))
|
||||
REG_WRITE(ah, AR_RC, AR_RC_AHB | AR_RC_HOSTIF);
|
||||
|
||||
|
|
Loading…
Reference in New Issue