mac80211: update compat-wireless to 2009-01-10

SVN-Revision: 13961
lede-17.01
Gabor Juhos 2009-01-10 19:23:09 +00:00
parent db8867b4c5
commit 4122e0b8c8
12 changed files with 316 additions and 159 deletions

View File

@ -12,11 +12,11 @@ PKG_NAME:=mac80211
PKG_RELEASE:=1 PKG_RELEASE:=1
ifneq ($(CONFIG_LINUX_2_6_27)$(CONFIG_LINUX_2_6_28),) ifneq ($(CONFIG_LINUX_2_6_27)$(CONFIG_LINUX_2_6_28),)
PKG_VERSION:=2009-01-07 PKG_VERSION:=2009-01-10
PKG_SOURCE_URL:= \ PKG_SOURCE_URL:= \
http://www.orbit-lab.org/kernel/compat-wireless-2.6/2009/01 \ http://www.orbit-lab.org/kernel/compat-wireless-2.6/2009/01 \
http://wireless.kernel.org/download/compat-wireless-2.6 http://wireless.kernel.org/download/compat-wireless-2.6
PKG_MD5SUM:=2788149d630d48686f7ca79131cdbe8c PKG_MD5SUM:=6edd60f6b5ee600aec28e148bc8e2a05
else else
PKG_VERSION:=2008-08-06 PKG_VERSION:=2008-08-06
PKG_SOURCE_URL:=http://www.orbit-lab.org/kernel/compat-wireless-2.6/2008/08 PKG_SOURCE_URL:=http://www.orbit-lab.org/kernel/compat-wireless-2.6/2008/08

View File

@ -1,9 +1,7 @@
From 42d5399c2743dbd1ddaaadc8cb04adbfc65cc970 Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <IvDoorn@gmail.com> From: Ivo van Doorn <IvDoorn@gmail.com>
Date: Sun, 28 Dec 2008 12:48:46 +0000 (+0100) Date: Sat, 10 Jan 2009 11:01:10 +0100
Subject: rt2x00: Implement support for 802.11n Subject: [PATCH] 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
Extend rt2x00lib capabilities to support 802.11n, Extend rt2x00lib capabilities to support 802.11n,
it still lacks aggregation support, but that can 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> 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 --- a/drivers/net/wireless/rt2x00/Makefile
+++ b/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 obj-$(CONFIG_RT2X00_LIB_PCI) += rt2x00pci.o
--- a/drivers/net/wireless/rt2x00/rt2x00.h --- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/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 ACK_SIZE 14
#define IEEE80211_HEADER 24 #define IEEE80211_HEADER 24
@ -32,7 +41,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
#define PLCP 48 #define PLCP 48
#define BEACON 100 #define BEACON 100
#define PREAMBLE 144 #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. * for @tx_power_a, @tx_power_bg and @channels.
* @channels: Device/chipset specific channel values (See &struct rf_channel). * @channels: Device/chipset specific channel values (See &struct rf_channel).
* @channels_info: Additional information for channels (See &struct channel_info). * @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 { struct hw_mode_spec {
unsigned int supported_bands; unsigned int supported_bands;
@@ -369,6 +371,8 @@ struct hw_mode_spec { @@ -370,6 +372,8 @@ struct hw_mode_spec {
unsigned int num_channels; unsigned int num_channels;
const struct rf_channel *channels; const struct rf_channel *channels;
const struct channel_info *channels_info; 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_EXTERNAL_LNA_BG,
CONFIG_DOUBLE_ANTENNA, CONFIG_DOUBLE_ANTENNA,
CONFIG_DISABLE_LINK_TUNING, CONFIG_DISABLE_LINK_TUNING,
@ -59,12 +68,11 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
/* /*
--- a/drivers/net/wireless/rt2x00/rt2x00config.c --- a/drivers/net/wireless/rt2x00/rt2x00config.c
+++ b/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; libconf.conf = conf;
if (ieee80211_flags & IEEE80211_CONF_CHANGE_CHANNEL) { if (ieee80211_flags & IEEE80211_CONF_CHANGE_CHANNEL) {
+ if ((conf->ht.channel_type == NL80211_CHAN_HT40MINUS) || + if (conf_is_ht40(conf))
+ (conf->ht.channel_type == NL80211_CHAN_HT40PLUS))
+ __set_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags); + __set_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags);
+ else + else
+ __clear_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags); + __clear_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags);
@ -74,18 +82,113 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
sizeof(libconf.rf)); sizeof(libconf.rf));
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c --- a/drivers/net/wireless/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
@@ -384,7 +384,9 @@ void rt2x00lib_rxdone(struct rt2x00_dev @@ -315,18 +315,54 @@ void rt2x00lib_txdone(struct queue_entry
if (((rxdesc.dev_flags & RXDONE_SIGNAL_PLCP) && }
(rate->plcp == rxdesc.signal)) || EXPORT_SYMBOL_GPL(rt2x00lib_txdone);
((rxdesc.dev_flags & RXDONE_SIGNAL_BITRATE) &&
+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))) { - (rate->bitrate == rxdesc.signal))) {
+ (rate->bitrate == rxdesc.signal)) || - idx = i;
+ ((rxdesc.dev_flags & RXDONE_SIGNAL_MCS) && - break;
+ (rate->mcs == rxdesc.signal))) { - }
idx = i; - }
break; -
} - if (idx < 0) {
@@ -439,72 +441,84 @@ const struct rt2x00_rate rt2x00_supporte - 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, .bitrate = 10,
.ratemask = BIT(0), .ratemask = BIT(0),
.plcp = 0x00, .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; rt2x00dev->bands[IEEE80211_BAND_2GHZ].bitrates = rates;
hw->wiphy->bands[IEEE80211_BAND_2GHZ] = hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
&rt2x00dev->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]; rt2x00dev->bands[IEEE80211_BAND_5GHZ].bitrates = &rates[4];
hw->wiphy->bands[IEEE80211_BAND_5GHZ] = hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
&rt2x00dev->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->stbc = 0; /* FIXME: What value is needed? */
+ +
+ txdesc->mcs = rt2x00_get_rate_mcs(hwrate->mcs); + 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; + 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]; extern const struct rt2x00_rate rt2x00_supported_rates[12];
@@ -68,6 +69,14 @@ static inline int rt2x00_get_rate_preamb @@ -57,6 +58,14 @@ static inline const struct rt2x00_rate *
return (hw_value & 0xff00); return &rt2x00_supported_rates[hw_value & 0xff];
} }
+#define RATE_MCS(__mode, __mcs) \ +#define RATE_MCS(__mode, __mcs) \
@ -285,7 +388,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
/* /*
* Radio control handlers. * 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 */ #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 * 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_PAIRWISE: Use pairwise key table (instead of shared).
* @ENTRY_TXD_ENCRYPT_IV: Generate IV/EIV in hardware. * @ENTRY_TXD_ENCRYPT_IV: Generate IV/EIV in hardware.
* @ENTRY_TXD_ENCRYPT_MMIC: Generate MIC 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 { enum txentry_desc_flags {
ENTRY_TXD_RTS_FRAME, 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_PAIRWISE,
ENTRY_TXD_ENCRYPT_IV, ENTRY_TXD_ENCRYPT_IV,
ENTRY_TXD_ENCRYPT_MMIC, 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. * @length_low: PLCP length low word.
* @signal: PLCP signal. * @signal: PLCP signal.
* @service: PLCP service. * @service: PLCP service.
@ -382,7 +501,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
* @retry_limit: Max number of retries. * @retry_limit: Max number of retries.
* @aifs: AIFS value. * @aifs: AIFS value.
* @ifs: IFS value. * @ifs: IFS value.
@@ -291,7 +303,11 @@ struct txentry_desc { @@ -291,7 +305,11 @@ struct txentry_desc {
u16 signal; u16 signal;
u16 service; u16 service;

View File

@ -1,9 +1,7 @@
From dda25991ee4dc0a2ebe2e3b50857971fe1d878c4 Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <IvDoorn@gmail.com> From: Ivo van Doorn <IvDoorn@gmail.com>
Date: Sun, 28 Dec 2008 12:48:53 +0000 (+0100) Date: Sat, 10 Jan 2009 11:03:23 +0100
Subject: rt2x00: Implement support for rt2800pci Subject: [PATCH] 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
Add support for the rt2800pci chipset. 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: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> 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 --- a/drivers/net/wireless/rt2x00/Makefile
+++ b/drivers/net/wireless/rt2x00/Makefile +++ b/drivers/net/wireless/rt2x00/Makefile
@@ -16,5 +16,6 @@ obj-$(CONFIG_RT2X00_LIB_USB) += rt2x00u @@ -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 obj-$(CONFIG_RT73USB) += rt73usb.o
--- /dev/null --- /dev/null
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c +++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -0,0 +1,2693 @@ @@ -0,0 +1,2707 @@
+/* +/*
+ Copyright (C) 2004 - 2008 rt2x00 SourceForge Project + Copyright (C) 2004 - 2008 rt2x00 SourceForge Project
+ <http://rt2x00.serialmonkey.com> + <http://rt2x00.serialmonkey.com>
@ -1044,6 +1049,9 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+ return -EBUSY; + 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 + * Disable DMA, will be reenabled later when enabling
+ * the radio. + * the radio.
@ -1056,10 +1064,6 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+ rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1); + rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
+ rt2x00pci_register_write(rt2x00dev, WPDMA_GLO_CFG, reg); + 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 + * 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 + * Initialize BBP R/W access agent
+ */ + */
+ rt2x00pci_register_write(rt2x00dev, H2M_BBP_AGENT, 0); + 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, WPDMA_RST_IDX, reg);
+ +
+ rt2x00pci_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e1f); + 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, &reg); + rt2x00pci_register_read(rt2x00dev, MAC_SYS_CTRL, &reg);
+ rt2x00_set_field32(&reg, MAC_SYS_CTRL_RESET_CSR, 1); + rt2x00_set_field32(&reg, MAC_SYS_CTRL_RESET_CSR, 1);
+ rt2x00_set_field32(&reg, MAC_SYS_CTRL_RESET_BBP, 1); + rt2x00_set_field32(&reg, MAC_SYS_CTRL_RESET_BBP, 1);
+ rt2x00pci_register_write(rt2x00dev, MAC_SYS_CTRL, reg); + rt2x00pci_register_write(rt2x00dev, MAC_SYS_CTRL, reg);
+ +
+ rt2x00pci_register_write(rt2x00dev, MAC_SYS_CTRL, 0x00000000);
+
+ rt2x00pci_register_read(rt2x00dev, BCN_OFFSET0, &reg); + rt2x00pci_register_read(rt2x00dev, BCN_OFFSET0, &reg);
+ rt2x00_set_field32(&reg, BCN_OFFSET0_BCN0, 0xe0); /* 0x3800 */ + rt2x00_set_field32(&reg, BCN_OFFSET0_BCN0, 0xe0); /* 0x3800 */
+ rt2x00_set_field32(&reg, BCN_OFFSET0_BCN1, 0xe8); /* 0x3a00 */ + rt2x00_set_field32(&reg, BCN_OFFSET0_BCN1, 0xe8); /* 0x3a00 */
@ -1465,6 +1478,14 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+ unsigned int i; + unsigned int i;
+ u8 value; + 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++) { + for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
+ rt2800pci_bbp_read(rt2x00dev, 0, &value); + rt2800pci_bbp_read(rt2x00dev, 0, &value);
+ if ((value != 0xff) && (value != 0x00)) + if ((value != 0xff) && (value != 0x00))
@ -1564,6 +1585,12 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+ rt2x00_set_field32(&reg, INT_MASK_CSR_HCCA_DMA_DONE, mask); + rt2x00_set_field32(&reg, INT_MASK_CSR_HCCA_DMA_DONE, mask);
+ rt2x00_set_field32(&reg, INT_MASK_CSR_MGMT_DMA_DONE, mask); + rt2x00_set_field32(&reg, INT_MASK_CSR_MGMT_DMA_DONE, mask);
+ rt2x00_set_field32(&reg, INT_MASK_CSR_MCU_COMMAND, mask); + rt2x00_set_field32(&reg, INT_MASK_CSR_MCU_COMMAND, mask);
+ rt2x00_set_field32(&reg, INT_MASK_CSR_RXTX_COHERENT, mask);
+ rt2x00_set_field32(&reg, INT_MASK_CSR_TBTT, mask);
+ rt2x00_set_field32(&reg, INT_MASK_CSR_PRE_TBTT, mask);
+ rt2x00_set_field32(&reg, INT_MASK_CSR_TX_FIFO_STATUS, mask);
+ rt2x00_set_field32(&reg, INT_MASK_CSR_AUTO_WAKEUP, mask);
+ rt2x00_set_field32(&reg, INT_MASK_CSR_GPTIMER, mask);
+ rt2x00_set_field32(&reg, INT_MASK_CSR_RX_COHERENT, mask); + rt2x00_set_field32(&reg, INT_MASK_CSR_RX_COHERENT, mask);
+ rt2x00_set_field32(&reg, INT_MASK_CSR_TX_COHERENT, mask); + rt2x00_set_field32(&reg, INT_MASK_CSR_TX_COHERENT, mask);
+ rt2x00pci_register_write(rt2x00dev, INT_MASK_CSR, reg); + 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))) + rt2800pci_init_bbp(rt2x00dev)))
+ return -EIO; + 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 */ + /* Wait for DMA, ignore error */
+ rt2800pci_wait_wpdma_ready(rt2x00dev); + 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, &reg); + rt2x00pci_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
+ rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 1); + rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 1);
+ rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 1); + rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 1);
+ rt2x00_set_field32(&reg, WPDMA_GLO_CFG_WP_DMA_BURST_SIZE, 2);
+ rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
+ rt2x00pci_register_write(rt2x00dev, WPDMA_GLO_CFG, reg); + rt2x00pci_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
+ +
+ rt2x00pci_register_read(rt2x00dev, MAC_SYS_CTRL, &reg); + rt2x00pci_register_read(rt2x00dev, MAC_SYS_CTRL, &reg);
@ -1634,14 +1666,6 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+ rt2800pci_mcu_request(rt2x00dev, MCU_LED_3, 0xff, + rt2800pci_mcu_request(rt2x00dev, MCU_LED_3, 0xff,
+ word & 0xff, (word >> 8) & 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; + return 0;
+} +}
+ +
@ -1651,7 +1675,10 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+ +
+ rt2x00pci_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg); + rt2x00pci_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
+ rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0); + rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
+ rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_DMA_BUSY, 0);
+ rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0); + rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
+ rt2x00_set_field32(&reg, WPDMA_GLO_CFG_RX_DMA_BUSY, 0);
+ rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
+ rt2x00pci_register_write(rt2x00dev, WPDMA_GLO_CFG, reg); + rt2x00pci_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
+ +
+ rt2x00pci_register_write(rt2x00dev, MAC_SYS_CTRL, 0); + 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_desc_read(txwi, 1, &word);
+ rt2x00_set_field32(&word, TXWI_W1_ACK, + rt2x00_set_field32(&word, TXWI_W1_ACK,
+ test_bit(ENTRY_TXD_ACK, &txdesc->flags)); + test_bit(ENTRY_TXD_ACK, &txdesc->flags));
+ rt2x00_set_field32(&word, TXWI_W1_ACK, + rt2x00_set_field32(&word, TXWI_W1_NSEQ,
+ test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags)); + 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_BW_WIN_SIZE, txdesc->ba_size);
+ rt2x00_set_field32(&word, TXWI_W1_WIRELESS_CLI_ID, + rt2x00_set_field32(&word, TXWI_W1_WIRELESS_CLI_ID,
+ skbdesc->entry->entry_idx); + 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)) + if (rt2x00_get_field32(rxwi1, RXWI_W1_BW))
+ rxdesc->flags |= RX_FLAG_40MHZ; + 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.
+ /* + */
+ * Mask of 0x8 bit to remove the short preamble flag. + rxdesc->dev_flags |= RXDONE_SIGNAL_MCS;
+ */ + rxdesc->rate_mode = rt2x00_get_field32(rxwi1, RXWI_W1_PHYMODE);
+ rxdesc->signal = + rxdesc->signal = rt2x00_get_field32(rxwi1, RXWI_W1_MCS);
+ (RATE_MODE_CCK << 8) | +
+ (rt2x00_get_field32(rxwi1, RXWI_W1_MCS) & ~0x8); + /*
+ break; + * Mask of 0x8 bit to remove the short preamble flag.
+ case RATE_MODE_OFDM: + */
+ rxdesc->signal = + if (rxdesc->dev_flags == RATE_MODE_CCK)
+ (RATE_MODE_OFDM << 8) | + rxdesc->signal &= ~0x8;
+ 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;
+ }
+ +
+ rxdesc->rssi = + rxdesc->rssi =
+ (rt2x00_get_field32(rxwi2, RXWI_W2_RSSI0) + + (rt2x00_get_field32(rxwi2, RXWI_W2_RSSI0) +
@ -2722,7 +2741,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+module_exit(rt2800pci_exit); +module_exit(rt2800pci_exit);
--- /dev/null --- /dev/null
+++ b/drivers/net/wireless/rt2x00/rt2800pci.h +++ b/drivers/net/wireless/rt2x00/rt2800pci.h
@@ -0,0 +1,1873 @@ @@ -0,0 +1,1879 @@
+/* +/*
+ Copyright (C) 2004 - 2008 rt2x00 SourceForge Project + Copyright (C) 2004 - 2008 rt2x00 SourceForge Project
+ <http://rt2x00.serialmonkey.com> + <http://rt2x00.serialmonkey.com>
@ -2816,13 +2835,13 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+ * LOAD_STATUS: 1:loading, 0:done. + * LOAD_STATUS: 1:loading, 0:done.
+ */ + */
+#define E2PROM_CSR 0x0004 +#define E2PROM_CSR 0x0004
+#define E2PROM_CSR_RELOAD FIELD32(0x00000001) +#define E2PROM_CSR_DATA_CLOCK FIELD32(0x00000001)
+#define E2PROM_CSR_DATA_CLOCK FIELD32(0x00000002) +#define E2PROM_CSR_CHIP_SELECT FIELD32(0x00000002)
+#define E2PROM_CSR_CHIP_SELECT FIELD32(0x00000004) +#define E2PROM_CSR_DATA_IN FIELD32(0x00000004)
+#define E2PROM_CSR_DATA_IN FIELD32(0x00000008) +#define E2PROM_CSR_DATA_OUT FIELD32(0x00000008)
+#define E2PROM_CSR_DATA_OUT FIELD32(0x00000010)
+#define E2PROM_CSR_TYPE_93C46 FIELD32(0x00000020) +#define E2PROM_CSR_TYPE_93C46 FIELD32(0x00000020)
+#define E2PROM_CSR_LOAD_STATUS FIELD32(0x00000040) +#define E2PROM_CSR_LOAD_STATUS FIELD32(0x00000040)
+#define E2PROM_CSR_RELOAD FIELD32(0x00000080)
+ +
+/* +/*
+ * HOST-MCU shared memory + * 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_HCCA_DMA_DONE FIELD32(0x00000080)
+#define INT_MASK_CSR_MGMT_DMA_DONE FIELD32(0x00000100) +#define INT_MASK_CSR_MGMT_DMA_DONE FIELD32(0x00000100)
+#define INT_MASK_CSR_MCU_COMMAND FIELD32(0x00000200) +#define INT_MASK_CSR_MCU_COMMAND FIELD32(0x00000200)
+#define INT_MASK_CSR_RX_COHERENT FIELD32(0x40000000) +#define INT_MASK_CSR_RXTX_COHERENT FIELD32(0x00000400)
+#define INT_MASK_CSR_TX_COHERENT FIELD32(0x80000000) +#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 + * 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_0 0x0002
+#define EEPROM_MAC_ADDR_BYTE0 FIELD16(0x00ff) +#define EEPROM_MAC_ADDR_BYTE0 FIELD16(0x00ff)
+#define EEPROM_MAC_ADDR_BYTE1 FIELD16(0xff00) +#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_BYTE2 FIELD16(0x00ff)
+#define EEPROM_MAC_ADDR_BYTE3 FIELD16(0xff00) +#define EEPROM_MAC_ADDR_BYTE3 FIELD16(0xff00)
+#define EEPROM_MAC_ADDR_2 0x0004 +#define EEPROM_MAC_ADDR_2 0x0004
@ -4598,7 +4623,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+#endif /* RT2800PCI_H */ +#endif /* RT2800PCI_H */
--- a/drivers/net/wireless/rt2x00/rt2x00.h --- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/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 RT2561 0x0302
#define RT2661 0x0401 #define RT2661 0x0401
#define RT2571 0x1300 #define RT2571 0x1300

View File

@ -1,9 +1,7 @@
From 22592b5df5bef2754f56e165ee0828777a95fdfd Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <IvDoorn@gmail.com> From: Ivo van Doorn <IvDoorn@gmail.com>
Date: Sun, 28 Dec 2008 12:48:56 +0000 (+0100) Date: Sat, 10 Jan 2009 11:05:41 +0100
Subject: rt2x00: Implement support for rt2800usb Subject: [PATCH] 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
Add support for the rt2800usb chipset. 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: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> 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 --- a/drivers/net/wireless/rt2x00/Makefile
+++ b/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 +obj-$(CONFIG_RT2800USB) += rt2800usb.o
--- /dev/null --- /dev/null
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c +++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -0,0 +1,2548 @@ @@ -0,0 +1,2540 @@
+/* +/*
+ Copyright (C) 2004 - 2008 rt2x00 SourceForge Project + Copyright (C) 2004 - 2008 rt2x00 SourceForge Project
+ <http://rt2x00.serialmonkey.com> + <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); + 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 + * Initialize LED control
+ */ + */
+ rt2x00_eeprom_read(rt2x00dev, EEPROM_LED1, &word); + 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, + rt2800usb_mcu_request(rt2x00dev, MCU_LED_3, 0xff,
+ word & 0xff, (word >> 8) & 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; + return 0;
+} +}
+ +
@ -1661,8 +1667,8 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+ rt2x00_desc_read(txwi, 1, &word); + rt2x00_desc_read(txwi, 1, &word);
+ rt2x00_set_field32(&word, TXWI_W1_ACK, + rt2x00_set_field32(&word, TXWI_W1_ACK,
+ test_bit(ENTRY_TXD_ACK, &txdesc->flags)); + test_bit(ENTRY_TXD_ACK, &txdesc->flags));
+ rt2x00_set_field32(&word, TXWI_W1_ACK, + rt2x00_set_field32(&word, TXWI_W1_NSEQ,
+ test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags)); + 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_BW_WIN_SIZE, txdesc->ba_size);
+ rt2x00_set_field32(&word, TXWI_W1_WIRELESS_CLI_ID, 0xff); + rt2x00_set_field32(&word, TXWI_W1_WIRELESS_CLI_ID, 0xff);
+ rt2x00_set_field32(&word, TXWI_W1_MPDU_TOTAL_BYTE_COUNT, skb->len); + 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)) + if (rt2x00_get_field32(rxwi1, RXWI_W1_BW))
+ rxdesc->flags |= RX_FLAG_40MHZ; + 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.
+ /* + */
+ * Mask of 0x8 bit to remove the short preamble flag. + rxdesc->dev_flags |= RXDONE_SIGNAL_MCS;
+ */ + rxdesc->rate_mode = rt2x00_get_field32(rxwi1, RXWI_W1_PHYMODE);
+ rxdesc->signal = + rxdesc->signal = rt2x00_get_field32(rxwi1, RXWI_W1_MCS);
+ (RATE_MODE_CCK << 8) | +
+ (rt2x00_get_field32(rxwi1, RXWI_W1_MCS) & ~0x8); + /*
+ break; + * Mask of 0x8 bit to remove the short preamble flag.
+ case RATE_MODE_OFDM: + */
+ rxdesc->signal = + if (rxdesc->dev_flags == RATE_MODE_CCK)
+ (RATE_MODE_OFDM << 8) | + rxdesc->signal &= ~0x8;
+ 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;
+ }
+ +
+ rxdesc->rssi = + rxdesc->rssi =
+ (rt2x00_get_field32(rxwi2, RXWI_W2_RSSI0) + + (rt2x00_get_field32(rxwi2, RXWI_W2_RSSI0) +
@ -2574,7 +2572,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+module_exit(rt2800usb_exit); +module_exit(rt2800usb_exit);
--- /dev/null --- /dev/null
+++ b/drivers/net/wireless/rt2x00/rt2800usb.h +++ b/drivers/net/wireless/rt2x00/rt2800usb.h
@@ -0,0 +1,1886 @@ @@ -0,0 +1,1892 @@
+/* +/*
+ Copyright (C) 2004 - 2008 rt2x00 SourceForge Project + Copyright (C) 2004 - 2008 rt2x00 SourceForge Project
+ <http://rt2x00.serialmonkey.com> + <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_HCCA_DMA_DONE FIELD32(0x00000080)
+#define INT_MASK_CSR_MGMT_DMA_DONE FIELD32(0x00000100) +#define INT_MASK_CSR_MGMT_DMA_DONE FIELD32(0x00000100)
+#define INT_MASK_CSR_MCU_COMMAND FIELD32(0x00000200) +#define INT_MASK_CSR_MCU_COMMAND FIELD32(0x00000200)
+#define INT_MASK_CSR_RX_COHERENT FIELD32(0x40000000) +#define INT_MASK_CSR_RXTX_COHERENT FIELD32(0x00000400)
+#define INT_MASK_CSR_TX_COHERENT FIELD32(0x80000000) +#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 + * 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_0 0x0002
+#define EEPROM_MAC_ADDR_BYTE0 FIELD16(0x00ff) +#define EEPROM_MAC_ADDR_BYTE0 FIELD16(0x00ff)
+#define EEPROM_MAC_ADDR_BYTE1 FIELD16(0xff00) +#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_BYTE2 FIELD16(0x00ff)
+#define EEPROM_MAC_ADDR_BYTE3 FIELD16(0xff00) +#define EEPROM_MAC_ADDR_BYTE3 FIELD16(0xff00)
+#define EEPROM_MAC_ADDR_2 0x0004 +#define EEPROM_MAC_ADDR_2 0x0004
@ -4463,7 +4467,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+#endif /* RT2800USB_H */ +#endif /* RT2800USB_H */
--- a/drivers/net/wireless/rt2x00/rt2x00.h --- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/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 RT2860D 0x0681 /* 2.4GHz, 5GHz PCI/CB */
#define RT2890 0x0701 /* 2.4GHz PCIe */ #define RT2890 0x0701 /* 2.4GHz PCIe */
#define RT2890D 0x0781 /* 2.4GHz, 5GHz PCIe */ #define RT2890D 0x0781 /* 2.4GHz, 5GHz PCIe */

View File

@ -1,15 +1,14 @@
--- a/config.mk --- a/config.mk
+++ b/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_RT2X00_LIB_PCI=m
CONFIG_RT2400PCI=m CONFIG_RT2400PCI=m
CONFIG_RT2500PCI=m CONFIG_RT2500PCI=m
+CONFIG_RT2800PCI=m +CONFIG_RT2800PCI=m
+CONFIG_RT2800USB=m
NEED_RT2X00=y NEED_RT2X00=y
# Two rt2x00 drivers require firmware: rt61pci and rt73usb. They depend on # 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 # RT2500USB does not require firmware
CONFIG_RT2500USB=m CONFIG_RT2500USB=m
CONFIG_RT2X00_LIB_USB=m CONFIG_RT2X00_LIB_USB=m
@ -18,3 +17,13 @@
NEED_RT2X00=y NEED_RT2X00=y
# RT73USB requires firmware # RT73USB requires firmware
ifneq ($(CONFIG_CRC_ITU_T),) 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

View File

@ -97,7 +97,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
*csz = (int)u8tmp; *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 */ /* Deinitialize the device */
ath_detach(sc); ath_detach(sc);
@ -114,7 +114,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
ieee80211_free_hw(sc->hw); ieee80211_free_hw(sc->hw);
return -EIO; return -EIO;
} else { } 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 */ /* allocate descriptors */
@ -123,7 +123,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
dd->dd_desc_len, dd->dd_desc_len,
&dd->dd_desc_paddr); &dd->dd_desc_paddr);
if (dd->dd_desc == NULL) { 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; return 0;
fail2: fail2:
@ -132,7 +132,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
dd->dd_desc_len, dd->dd_desc, dd->dd_desc_paddr); dd->dd_desc_len, dd->dd_desc, dd->dd_desc_paddr);
fail: fail:
memset(dd, 0, sizeof(*dd)); 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 ath_descdma *dd,
struct list_head *head) 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); dd->dd_desc_len, dd->dd_desc, dd->dd_desc_paddr);
INIT_LIST_HEAD(head); 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->priv;
sc->hw = hw; sc->hw = hw;
@ -185,7 +185,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
sc->rx.bufsize, sc->rx.bufsize,
PCI_DMA_FROMDEVICE); 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 */ /* We will now give hardware our shiny new allocated skb */
bf->bf_mpdu = requeue_skb; bf->bf_mpdu = requeue_skb;

View File

@ -95,7 +95,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
} }
--- a/drivers/net/wireless/ath9k/main.c --- a/drivers/net/wireless/ath9k/main.c
+++ b/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 */ /* allocate descriptors */
@ -107,7 +107,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
if (dd->dd_desc == NULL) { if (dd->dd_desc == NULL) {
error = -ENOMEM; error = -ENOMEM;
goto fail; 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; return 0;
fail2: fail2:
@ -118,7 +118,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
fail: fail:
memset(dd, 0, sizeof(*dd)); memset(dd, 0, sizeof(*dd));
return error; 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 ath_descdma *dd,
struct list_head *head) 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_put(skb, ds->ds_rxstat.rs_datalen);
skb->protocol = cpu_to_be16(ETH_P_CONTROL); 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 */ /* We will now give hardware our shiny new allocated skb */
bf->bf_mpdu = requeue_skb; bf->bf_mpdu = requeue_skb;

View File

@ -55,7 +55,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
{ {
u8 u8tmp; 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 * Cache line size is used to size and align various
* structures used to communicate with the hardware. * 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 */ /* XXX assert csz is non-zero */
sc->sc_cachelsz = csz << 2; /* convert to bytes */ 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 "????"; 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) static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
{ {
void __iomem *mem; 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->hw = hw;
sc->dev = &pdev->dev; sc->dev = &pdev->dev;
sc->mem = mem; sc->mem = mem;

View File

@ -51,7 +51,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
/* return bus cachesize in 4B word units */ /* 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); rfkill_free(sc->rf_kill.rfkill);
/* Deinitialize the device */ /* Deinitialize the device */
@ -66,7 +66,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
return -EIO; return -EIO;
} else { } else {
sc->sc_flags |= SC_OP_RFKILL_REGISTERED; 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 */ #endif /* CONFIG_RFKILL */
@ -81,7 +81,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
static void ath_detach(struct ath_softc *sc) static void ath_detach(struct ath_softc *sc)
{ {
struct ieee80211_hw *hw = sc->hw; 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 "????"; 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) 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; goto bad4;
} }
@ -109,7 +109,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
ah = sc->sc_ah; ah = sc->sc_ah;
printk(KERN_INFO printk(KERN_INFO
"%s: Atheros AR%s MAC/BB Rev:%x " "%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 ieee80211_hw *hw = pci_get_drvdata(pdev);
struct ath_softc *sc = hw->priv; struct ath_softc *sc = hw->priv;

View File

@ -100,7 +100,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
static void ath_cache_conf_rate(struct ath_softc *sc, static void ath_cache_conf_rate(struct ath_softc *sc,
struct ieee80211_conf *conf) 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); 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_softc *sc = dev;
struct ath_hal *ah = sc->sc_ah; 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 */ #endif /* CONFIG_RFKILL */
@ -118,7 +118,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
{ {
ath_detach(sc); ath_detach(sc);
free_irq(sc->irq, 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); ieee80211_free_hw(sc->hw);
} }
@ -127,7 +127,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
{ {
struct ieee80211_hw *hw = sc->hw; struct ieee80211_hw *hw = sc->hw;
int i = 0; int i = 0;
@@ -1538,7 +1505,7 @@ bad: @@ -1543,7 +1510,7 @@ bad:
return error; return error;
} }
@ -136,7 +136,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
{ {
struct ieee80211_hw *hw = sc->hw; struct ieee80211_hw *hw = sc->hw;
int error = 0; 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; return ret;
} }
@ -145,7 +145,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
.tx = ath9k_tx, .tx = ath9k_tx,
.start = ath9k_start, .start = ath9k_start,
.stop = ath9k_stop, .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. * 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) ath_mac_bb_name(u32 mac_bb_version)
{ {
int i; 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. * 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) ath_rf_name(u16 rf_version)
{ {
int i; int i;
@@ -2532,234 +2499,7 @@ ath_rf_name(u16 rf_version) @@ -2541,234 +2508,7 @@ ath_rf_name(u16 rf_version)
return "????"; return "????";
} }
@ -399,7 +399,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
{ {
int error; 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 printk(KERN_ERR
"Unable to register rate control algorithm: %d\n", "Unable to register rate control algorithm: %d\n",
error); error);

View File

@ -205,7 +205,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
#endif /* CORE_H */ #endif /* CORE_H */
--- a/drivers/net/wireless/ath9k/main.c --- a/drivers/net/wireless/ath9k/main.c
+++ b/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; goto err_rate_unregister;
} }
@ -223,7 +223,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
err_rate_unregister: err_rate_unregister:
ath_rate_control_unregister(); ath_rate_control_unregister();
err_out: err_out:
@@ -2533,6 +2542,7 @@ module_init(ath9k_init); @@ -2542,6 +2551,7 @@ module_init(ath9k_init);
static void __exit ath9k_exit(void) static void __exit ath9k_exit(void)
{ {

View File

@ -49,7 +49,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
if (!ath9k_hw_wait(ah, if (!ath9k_hw_wait(ah,
AR_RTC_STATUS, 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)) if (!AR_SREV_9100(ah))
REG_WRITE(ah, AR_RC, AR_RC_AHB | AR_RC_HOSTIF); REG_WRITE(ah, AR_RC, AR_RC_AHB | AR_RC_HOSTIF);