* [RFC] mac80211: Change BA timeout
From: Sujith @ 2010-12-14 7:44 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless
The BlockAck session timout value is currently an arbitrary 5000.
This results in BA sessions being created and torn down incessantly
when mac80211 is used with a driver (say ath9k) in AP mode.
The 802.11 standard doesn't specify any default value for the timeout field.
And there is no benefit to be gained by tearing down BA sessions and
recreating them. The current value of 5000 doesn't cause any problems,
but it is hard to find an AP/STA in the field that uses a non-zero timeout.
Signed-off-by: Sujith Manoharan <Sujith.Manoharan@atheros.com>
---
net/mac80211/agg-tx.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
index d4679b2..e5e6311 100644
--- a/net/mac80211/agg-tx.c
+++ b/net/mac80211/agg-tx.c
@@ -342,7 +342,7 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
/* send AddBA request */
ieee80211_send_addba_request(sdata, sta->sta.addr, tid,
tid_tx->dialog_token, start_seq_num,
- 0x40, 5000);
+ 0x40, 0);
}
int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid)
--
1.7.3.3
^ permalink raw reply related
* Re: [RFC] mac80211: Change BA timeout
From: Johannes Berg @ 2010-12-14 7:47 UTC (permalink / raw)
To: Sujith; +Cc: linux-wireless
In-Reply-To: <19719.8288.322475.954293@gargle.gargle.HOWL>
On Tue, 2010-12-14 at 13:14 +0530, Sujith wrote:
> The BlockAck session timout value is currently an arbitrary 5000.
> This results in BA sessions being created and torn down incessantly
> when mac80211 is used with a driver (say ath9k) in AP mode.
>
> The 802.11 standard doesn't specify any default value for the timeout field.
> And there is no benefit to be gained by tearing down BA sessions and
> recreating them. The current value of 5000 doesn't cause any problems,
> but it is hard to find an AP/STA in the field that uses a non-zero timeout.
Please make it configurable in the request API. Each session consumes
one of a very limited number of hardware queues on iwlwifi, and once we
go to having multiple connected stations to it as an AP, it would be
good to time out idle sessions.
johannes
^ permalink raw reply
* Re: [PATCH] nl80211: Add notification for dropped Deauth/Disassoc
From: Jouni Malinen @ 2010-12-14 7:46 UTC (permalink / raw)
To: Johannes Berg; +Cc: John W. Linville, linux-wireless
In-Reply-To: <1292310907.3569.1.camel@jlt3.sipsolutions.net>
On Tue, Dec 14, 2010 at 08:15:07AM +0100, Johannes Berg wrote:
> On Tue, 2010-12-14 at 00:00 +0200, Jouni Malinen wrote:
> > + * @NL80211_CMD_UNPROT_DEAUTHENTICATE: Unprotected deauthentication frame
> > + * @NL80211_CMD_UNPROT_DISASSOCIATE: Unprotected disassociation frame
>
> I don't mind, but if we add the frame body should we really have two
> commands? Or should we have just one? Are we likely to need similar
> functionality for other frames? The only ones I can think of are class 3
> frames from unassociated stations, but that seems like it should be
> separate anyway.
This one followed the existing example of NL80211_CMD_DEAUTH/DISASSOC,
but well, those are for both notification and requests, so I can see the
difference there.. For these notification-only ones, I would be fine
having a single command if that is desirable. Though, I would probably
not go as far as merging any other frames to this list since
deauth/disassoc are special case for the AP starting to send these as
replies to any Class 2 or 3 frame.
--
Jouni Malinen PGP id EFC895FA
^ permalink raw reply
* Re: [PATCH] nl80211: Add notification for dropped Deauth/Disassoc
From: Johannes Berg @ 2010-12-14 7:48 UTC (permalink / raw)
To: Jouni Malinen; +Cc: John W. Linville, linux-wireless
In-Reply-To: <20101214074653.GA28072@jm.kir.nu>
On Tue, 2010-12-14 at 09:46 +0200, Jouni Malinen wrote:
> On Tue, Dec 14, 2010 at 08:15:07AM +0100, Johannes Berg wrote:
> > On Tue, 2010-12-14 at 00:00 +0200, Jouni Malinen wrote:
> > > + * @NL80211_CMD_UNPROT_DEAUTHENTICATE: Unprotected deauthentication frame
> > > + * @NL80211_CMD_UNPROT_DISASSOCIATE: Unprotected disassociation frame
> >
> > I don't mind, but if we add the frame body should we really have two
> > commands? Or should we have just one? Are we likely to need similar
> > functionality for other frames? The only ones I can think of are class 3
> > frames from unassociated stations, but that seems like it should be
> > separate anyway.
>
> This one followed the existing example of NL80211_CMD_DEAUTH/DISASSOC,
> but well, those are for both notification and requests, so I can see the
> difference there.. For these notification-only ones, I would be fine
> having a single command if that is desirable. Though, I would probably
> not go as far as merging any other frames to this list since
> deauth/disassoc are special case for the AP starting to send these as
> replies to any Class 2 or 3 frame.
Ok. I don't think we really need to go to a single command, and this may
be more helpful for drivers that might not be able to give us the frame
at all due to firmware implementation, so maybe it's better to keep it
as is and not rely on the frame in wpa_s.
johannes
^ permalink raw reply
* [PATCH] ath9k: Make PM-QOS value as user configurable
From: Mohammed Shafi Shajakhan @ 2010-12-14 7:48 UTC (permalink / raw)
To: linville
Cc: linux-wireless, lrodriguez, Mohammed Shafi Shajakhan,
Senthilkumar Balasubramanian
From: Mohammed Shafi Shajakhan <mshajakhan@atheros.com>
This patch allows the pm-qos value to be user configurable by making it as
a module parameter.This will help our customers to configure the pm-qos
value according to the effect in throughput due to the DMA latency problem
which was observed in Intel Pinetrail platforms.
The tested value of '55' will be filled as the default
pm-qos-value incase the user does not specifies pm-qos value as a
module parameter.
example usage: sudo modprobe ath9k pmqos=65
Cc: Senthilkumar Balasubramanian <Senthilkumar.Balasubramanian@Atheros.com>
Signed-off-by: Mohammed Shafi Shajakhan <mshajakhan@atheros.com>
---
drivers/net/wireless/ath/ath9k/ath9k.h | 3 +++
drivers/net/wireless/ath/ath9k/init.c | 4 ++++
drivers/net/wireless/ath/ath9k/main.c | 2 +-
3 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h
index 9b5501f..b0b1216 100644
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
@@ -57,6 +57,8 @@ struct ath_node;
#define A_MAX(a, b) ((a) > (b) ? (a) : (b))
+#define ATH9K_PM_QOS_DEFAULT_VALUE 55
+
#define TSF_TO_TU(_h,_l) \
((((u32)(_h)) << 22) | (((u32)(_l)) >> 10))
@@ -663,6 +665,7 @@ static inline void ath_read_cachesize(struct ath_common *common, int *csz)
extern struct ieee80211_ops ath9k_ops;
extern int modparam_nohwcrypt;
extern int led_blink;
+extern int ath9k_pm_qos_value;
irqreturn_t ath_isr(int irq, void *dev);
int ath9k_init_device(u16 devid, struct ath_softc *sc, u16 subsysid,
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index b2983ce..1238795 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -41,6 +41,10 @@ static int ath9k_btcoex_enable;
module_param_named(btcoex_enable, ath9k_btcoex_enable, int, 0444);
MODULE_PARM_DESC(btcoex_enable, "Enable wifi-BT coexistence");
+int ath9k_pm_qos_value = ATH9K_PM_QOS_DEFAULT_VALUE;
+module_param_named(pmqos, ath9k_pm_qos_value, int, S_IRUSR | S_IRGRP | S_IROTH);
+MODULE_PARM_DESC(pmqos, "User specified PM-QOS value");
+
/* We use the hw_value as an index into our private channel structure */
#define CHAN2G(_freq, _idx) { \
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index c68205d..36f4f5a 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1196,7 +1196,7 @@ static int ath9k_start(struct ieee80211_hw *hw)
ath9k_btcoex_timer_resume(sc);
}
- pm_qos_update_request(&sc->pm_qos_req, 55);
+ pm_qos_update_request(&sc->pm_qos_req, ath9k_pm_qos_value);
if (ah->caps.pcie_lcr_extsync_en && common->bus_ops->extn_synch_en)
common->bus_ops->extn_synch_en(common);
--
1.7.0.4
^ permalink raw reply related
* Re: [PATCH] nl80211: Add notification for dropped Deauth/Disassoc
From: Johannes Berg @ 2010-12-14 7:51 UTC (permalink / raw)
To: Jouni Malinen; +Cc: John W. Linville, linux-wireless
In-Reply-To: <20101213220048.GA24752@jm.kir.nu>
On Tue, 2010-12-14 at 00:00 +0200, Jouni Malinen wrote:
> @@ -1539,12 +1539,30 @@ ieee80211_drop_unencrypted_mgmt(struct i
> if (rx->sta && test_sta_flags(rx->sta, WLAN_STA_MFP)) {
> if (unlikely(!ieee80211_has_protected(fc) &&
> ieee80211_is_unicast_robust_mgmt_frame(rx->skb) &&
> - rx->key))
> + rx->key)) {
> + if (ieee80211_is_deauth(fc))
> + cfg80211_send_unprot_deauth(rx->sdata->dev,
> + rx->skb->data,
> + rx->skb->len);
This is the RX path.
> +void cfg80211_send_unprot_disassoc(struct net_device *dev, const u8 *buf,
> + size_t len)
> +{
> + struct wireless_dev *wdev = dev->ieee80211_ptr;
> + struct wiphy *wiphy = wdev->wiphy;
> + struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
> +
> + wdev_lock(wdev);
> + nl80211_send_unprot_disassoc(rdev, dev, buf, len, GFP_KERNEL);
And this uses GFP_KERNEL. Surely that can't be right?
johannes
^ permalink raw reply
* Re: [PATCH] nl80211: Add notification for dropped Deauth/Disassoc
From: Johannes Berg @ 2010-12-14 7:54 UTC (permalink / raw)
To: Jouni Malinen; +Cc: John W. Linville, linux-wireless
In-Reply-To: <1292313111.3569.7.camel@jlt3.sipsolutions.net>
On Tue, 2010-12-14 at 08:51 +0100, Johannes Berg wrote:
> On Tue, 2010-12-14 at 00:00 +0200, Jouni Malinen wrote:
>
> > @@ -1539,12 +1539,30 @@ ieee80211_drop_unencrypted_mgmt(struct i
> > if (rx->sta && test_sta_flags(rx->sta, WLAN_STA_MFP)) {
> > if (unlikely(!ieee80211_has_protected(fc) &&
> > ieee80211_is_unicast_robust_mgmt_frame(rx->skb) &&
> > - rx->key))
> > + rx->key)) {
> > + if (ieee80211_is_deauth(fc))
> > + cfg80211_send_unprot_deauth(rx->sdata->dev,
> > + rx->skb->data,
> > + rx->skb->len);
>
> This is the RX path.
>
> > +void cfg80211_send_unprot_disassoc(struct net_device *dev, const u8 *buf,
> > + size_t len)
> > +{
> > + struct wireless_dev *wdev = dev->ieee80211_ptr;
> > + struct wiphy *wiphy = wdev->wiphy;
> > + struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
> > +
> > + wdev_lock(wdev);
> > + nl80211_send_unprot_disassoc(rdev, dev, buf, len, GFP_KERNEL);
>
> And this uses GFP_KERNEL. Surely that can't be right?
And the mutex too, for that matter, which seems unnecessary anyway.
johannes
^ permalink raw reply
* Re: [RFC] mac80211: Change BA timeout
From: Sujith @ 2010-12-14 8:19 UTC (permalink / raw)
To: Johannes Berg; +Cc: Sujith, linux-wireless
In-Reply-To: <1292312835.3569.5.camel@jlt3.sipsolutions.net>
Johannes Berg wrote:
> On Tue, 2010-12-14 at 13:14 +0530, Sujith wrote:
> > The BlockAck session timout value is currently an arbitrary 5000.
> > This results in BA sessions being created and torn down incessantly
> > when mac80211 is used with a driver (say ath9k) in AP mode.
> >
> > The 802.11 standard doesn't specify any default value for the timeout field.
> > And there is no benefit to be gained by tearing down BA sessions and
> > recreating them. The current value of 5000 doesn't cause any problems,
> > but it is hard to find an AP/STA in the field that uses a non-zero timeout.
>
> Please make it configurable in the request API. Each session consumes
> one of a very limited number of hardware queues on iwlwifi, and once we
> go to having multiple connected stations to it as an AP, it would be
> good to time out idle sessions.
Something like this ?
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
index 31fad82..33f3602 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
@@ -251,7 +251,7 @@ void ath9k_tx_tasklet(unsigned long data)
ista = (struct ath9k_htc_sta *)sta->drv_priv;
if (ath9k_htc_check_tx_aggr(priv, ista, tid)) {
- ieee80211_start_tx_ba_session(sta, tid);
+ ieee80211_start_tx_ba_session(sta, tid, 0);
spin_lock_bh(&priv->tx_lock);
ista->tid_state[tid] = AGGR_PROGRESS;
spin_unlock_bh(&priv->tx_lock);
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c
index 2061a75..896d129 100644
--- a/drivers/net/wireless/ath/ath9k/rc.c
+++ b/drivers/net/wireless/ath/ath9k/rc.c
@@ -1373,7 +1373,7 @@ static void ath_tx_status(void *priv, struct ieee80211_supported_band *sband,
an = (struct ath_node *)sta->drv_priv;
if(ath_tx_aggr_check(sc, an, tid))
- ieee80211_start_tx_ba_session(sta, tid);
+ ieee80211_start_tx_ba_session(sta, tid, 0);
}
}
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
index f450adc..732b329 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
@@ -387,7 +387,7 @@ static int rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv,
if (load > IWL_AGG_LOAD_THRESHOLD) {
IWL_DEBUG_HT(priv, "Starting Tx agg: STA: %pM tid: %d\n",
sta->addr, tid);
- ret = ieee80211_start_tx_ba_session(sta, tid);
+ ret = ieee80211_start_tx_ba_session(sta, tid, 5000);
if (ret == -EAGAIN) {
/*
* driver and mac80211 is out of sync
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index e411cf8..69ded1e 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -2435,6 +2435,7 @@ void ieee80211_queue_delayed_work(struct ieee80211_hw *hw,
* ieee80211_start_tx_ba_session - Start a tx Block Ack session.
* @sta: the station for which to start a BA session
* @tid: the TID to BA on.
+ * @timeout: session timeout value (in TUs)
*
* Return: success if addBA request was sent, failure otherwise
*
@@ -2442,7 +2443,8 @@ void ieee80211_queue_delayed_work(struct ieee80211_hw *hw,
* the need to start aggregation on a certain RA/TID, the session level
* will be managed by the mac80211.
*/
-int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid);
+int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid,
+ u16 timeout);
/**
* ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate.
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
index d4679b2..9cc472c 100644
--- a/net/mac80211/agg-tx.c
+++ b/net/mac80211/agg-tx.c
@@ -342,10 +342,11 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
/* send AddBA request */
ieee80211_send_addba_request(sdata, sta->sta.addr, tid,
tid_tx->dialog_token, start_seq_num,
- 0x40, 5000);
+ 0x40, tid_tx->timeout);
}
-int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid)
+int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid,
+ u16 timeout)
{
struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
struct ieee80211_sub_if_data *sdata = sta->sdata;
@@ -420,6 +421,8 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid)
skb_queue_head_init(&tid_tx->pending);
__set_bit(HT_AGG_STATE_WANT_START, &tid_tx->state);
+ tid_tx->timeout = timeout;
+
/* Tx timer */
tid_tx->addba_resp_timer.function = sta_addba_resp_timer_expired;
tid_tx->addba_resp_timer.data = (unsigned long)&sta->timer_to_tid[tid];
diff --git a/net/mac80211/debugfs_sta.c b/net/mac80211/debugfs_sta.c
index 8bb5af8..c04a139 100644
--- a/net/mac80211/debugfs_sta.c
+++ b/net/mac80211/debugfs_sta.c
@@ -189,7 +189,7 @@ static ssize_t sta_agg_status_write(struct file *file, const char __user *userbu
if (tx) {
if (start)
- ret = ieee80211_start_tx_ba_session(&sta->sta, tid);
+ ret = ieee80211_start_tx_ba_session(&sta->sta, tid, 5000);
else
ret = ieee80211_stop_tx_ba_session(&sta->sta, tid);
} else {
diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c
index 4ad7a36..165a451 100644
--- a/net/mac80211/rc80211_minstrel_ht.c
+++ b/net/mac80211/rc80211_minstrel_ht.c
@@ -374,7 +374,7 @@ minstrel_aggr_check(struct minstrel_priv *mp, struct ieee80211_sta *pubsta, stru
if (skb_get_queue_mapping(skb) == IEEE80211_AC_VO)
return;
- ieee80211_start_tx_ba_session(pubsta, tid);
+ ieee80211_start_tx_ba_session(pubsta, tid, 5000);
}
static void
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index fdca52c..bbdd2a8 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -78,6 +78,7 @@ enum ieee80211_sta_info_flags {
* @addba_resp_timer: timer for peer's response to addba request
* @pending: pending frames queue -- use sta's spinlock to protect
* @dialog_token: dialog token for aggregation session
+ * @timeout: session timeout value to be filled in ADDBA requests
* @state: session state (see above)
* @stop_initiator: initiator of a session stop
* @tx_stop: TX DelBA frame when stopping
@@ -96,6 +97,7 @@ struct tid_ampdu_tx {
struct timer_list addba_resp_timer;
struct sk_buff_head pending;
unsigned long state;
+ u16 timeout;
u8 dialog_token;
u8 stop_initiator;
bool tx_stop;
^ permalink raw reply related
* Re: [RFC] mac80211: Change BA timeout
From: Johannes Berg @ 2010-12-14 8:21 UTC (permalink / raw)
To: Sujith; +Cc: linux-wireless
In-Reply-To: <19719.10364.75022.257291@gargle.gargle.HOWL>
On Tue, 2010-12-14 at 13:49 +0530, Sujith wrote:
> Johannes Berg wrote:
> > On Tue, 2010-12-14 at 13:14 +0530, Sujith wrote:
> > > The BlockAck session timout value is currently an arbitrary 5000.
> > > This results in BA sessions being created and torn down incessantly
> > > when mac80211 is used with a driver (say ath9k) in AP mode.
> > >
> > > The 802.11 standard doesn't specify any default value for the timeout field.
> > > And there is no benefit to be gained by tearing down BA sessions and
> > > recreating them. The current value of 5000 doesn't cause any problems,
> > > but it is hard to find an AP/STA in the field that uses a non-zero timeout.
> >
> > Please make it configurable in the request API. Each session consumes
> > one of a very limited number of hardware queues on iwlwifi, and once we
> > go to having multiple connected stations to it as an AP, it would be
> > good to time out idle sessions.
>
> Something like this ?
[snip]
yeah, looks good, thanks
johannes
^ permalink raw reply
* [PATCH v2] nl80211: Add notification for dropped Deauth/Disassoc
From: Jouni Malinen @ 2010-12-14 8:41 UTC (permalink / raw)
To: John W. Linville, Johannes Berg; +Cc: linux-wireless
In-Reply-To: <20101213220048.GA24752@jm.kir.nu>
Add a new notification to indicate that a received, unprotected
Deauthentication or Disassociation frame was dropped due to
management frame protection being in use. This notification is
needed to allow user space (e.g., wpa_supplicant) to implement
SA Query procedure to recover from association state mismatch
between an AP and STA.
This is needed to avoid getting stuck in non-working state when MFP
(IEEE 802.11w) is used and a protected Deauthentication or
Disassociation frame is dropped for any reason. After that, the
station would silently discard any unprotected Deauthentication or
Disassociation frame that could be indicating that the AP does not
have association for the STA (when the Reason Code would be 6 or 7).
IEEE Std 802.11w-2009, 11.13 describes this recovery mechanism.
Signed-off-by: Jouni Malinen <j@w1.fi>
---
include/linux/nl80211.h | 10 ++++++++++
net/mac80211/rx.c | 22 ++++++++++++++++++++--
net/wireless/mlme.c | 22 ++++++++++++++++++++++
net/wireless/nl80211.c | 16 ++++++++++++++++
net/wireless/nl80211.h | 6 ++++++
5 files changed, 74 insertions(+), 2 deletions(-)
v2: Address comments from Johannes: replace GFP_KERNEL with GFP_ATOMIC
since these events are generated from RX handlers. Remove unnecessary
(and not suitable for this context) wdev_lock.
--- wireless-testing.orig/include/linux/nl80211.h 2010-12-13 23:41:17.000000000 -0800
+++ wireless-testing/include/linux/nl80211.h 2010-12-13 23:43:09.000000000 -0800
@@ -394,6 +394,13 @@
*
* @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface.
*
+ * @NL80211_CMD_UNPROT_DEAUTHENTICATE: Unprotected deauthentication frame
+ * notification. This event is used to indicate that an unprotected
+ * deauthentication frame was dropped when MFP is in use.
+ * @NL80211_CMD_UNPROT_DISASSOCIATE: Unprotected disassociation frame
+ * notification. This event is used to indicate that an unprotected
+ * disassociation frame was dropped when MFP is in use.
+ *
* @NL80211_CMD_MAX: highest used command number
* @__NL80211_CMD_AFTER_LAST: internal use
*/
@@ -500,6 +507,9 @@ enum nl80211_commands {
NL80211_CMD_FRAME_WAIT_CANCEL,
+ NL80211_CMD_UNPROT_DEAUTHENTICATE,
+ NL80211_CMD_UNPROT_DISASSOCIATE,
+
/* add new commands above here */
/* used to define NL80211_CMD_MAX below */
--- wireless-testing.orig/net/mac80211/rx.c 2010-12-13 23:29:51.000000000 -0800
+++ wireless-testing/net/mac80211/rx.c 2010-12-13 23:41:05.000000000 -0800
@@ -1539,12 +1539,30 @@ ieee80211_drop_unencrypted_mgmt(struct i
if (rx->sta && test_sta_flags(rx->sta, WLAN_STA_MFP)) {
if (unlikely(!ieee80211_has_protected(fc) &&
ieee80211_is_unicast_robust_mgmt_frame(rx->skb) &&
- rx->key))
+ rx->key)) {
+ if (ieee80211_is_deauth(fc))
+ cfg80211_send_unprot_deauth(rx->sdata->dev,
+ rx->skb->data,
+ rx->skb->len);
+ else if (ieee80211_is_disassoc(fc))
+ cfg80211_send_unprot_disassoc(rx->sdata->dev,
+ rx->skb->data,
+ rx->skb->len);
return -EACCES;
+ }
/* BIP does not use Protected field, so need to check MMIE */
if (unlikely(ieee80211_is_multicast_robust_mgmt_frame(rx->skb) &&
- ieee80211_get_mmie_keyidx(rx->skb) < 0))
+ ieee80211_get_mmie_keyidx(rx->skb) < 0)) {
+ if (ieee80211_is_deauth(fc))
+ cfg80211_send_unprot_deauth(rx->sdata->dev,
+ rx->skb->data,
+ rx->skb->len);
+ else if (ieee80211_is_disassoc(fc))
+ cfg80211_send_unprot_disassoc(rx->sdata->dev,
+ rx->skb->data,
+ rx->skb->len);
return -EACCES;
+ }
/*
* When using MFP, Action frames are not allowed prior to
* having configured keys.
--- wireless-testing.orig/net/wireless/mlme.c 2010-12-13 23:35:46.000000000 -0800
+++ wireless-testing/net/wireless/mlme.c 2010-12-14 10:23:56.000000000 -0800
@@ -263,6 +263,28 @@ void cfg80211_send_disassoc(struct net_d
}
EXPORT_SYMBOL(cfg80211_send_disassoc);
+void cfg80211_send_unprot_deauth(struct net_device *dev, const u8 *buf,
+ size_t len)
+{
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+ struct wiphy *wiphy = wdev->wiphy;
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
+
+ nl80211_send_unprot_deauth(rdev, dev, buf, len, GFP_ATOMIC);
+}
+EXPORT_SYMBOL(cfg80211_send_unprot_deauth);
+
+void cfg80211_send_unprot_disassoc(struct net_device *dev, const u8 *buf,
+ size_t len)
+{
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+ struct wiphy *wiphy = wdev->wiphy;
+ struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
+
+ nl80211_send_unprot_disassoc(rdev, dev, buf, len, GFP_ATOMIC);
+}
+EXPORT_SYMBOL(cfg80211_send_unprot_disassoc);
+
static void __cfg80211_auth_remove(struct wireless_dev *wdev, const u8 *addr)
{
int i;
--- wireless-testing.orig/net/wireless/nl80211.c 2010-12-13 23:39:23.000000000 -0800
+++ wireless-testing/net/wireless/nl80211.c 2010-12-13 23:40:15.000000000 -0800
@@ -5333,6 +5333,22 @@ void nl80211_send_disassoc(struct cfg802
NL80211_CMD_DISASSOCIATE, gfp);
}
+void nl80211_send_unprot_deauth(struct cfg80211_registered_device *rdev,
+ struct net_device *netdev, const u8 *buf,
+ size_t len, gfp_t gfp)
+{
+ nl80211_send_mlme_event(rdev, netdev, buf, len,
+ NL80211_CMD_UNPROT_DEAUTHENTICATE, gfp);
+}
+
+void nl80211_send_unprot_disassoc(struct cfg80211_registered_device *rdev,
+ struct net_device *netdev, const u8 *buf,
+ size_t len, gfp_t gfp)
+{
+ nl80211_send_mlme_event(rdev, netdev, buf, len,
+ NL80211_CMD_UNPROT_DISASSOCIATE, gfp);
+}
+
static void nl80211_send_mlme_timeout(struct cfg80211_registered_device *rdev,
struct net_device *netdev, int cmd,
const u8 *addr, gfp_t gfp)
--- wireless-testing.orig/net/wireless/nl80211.h 2010-12-13 23:38:49.000000000 -0800
+++ wireless-testing/net/wireless/nl80211.h 2010-12-13 23:39:07.000000000 -0800
@@ -25,6 +25,12 @@ void nl80211_send_deauth(struct cfg80211
void nl80211_send_disassoc(struct cfg80211_registered_device *rdev,
struct net_device *netdev,
const u8 *buf, size_t len, gfp_t gfp);
+void nl80211_send_unprot_deauth(struct cfg80211_registered_device *rdev,
+ struct net_device *netdev,
+ const u8 *buf, size_t len, gfp_t gfp);
+void nl80211_send_unprot_disassoc(struct cfg80211_registered_device *rdev,
+ struct net_device *netdev,
+ const u8 *buf, size_t len, gfp_t gfp);
void nl80211_send_auth_timeout(struct cfg80211_registered_device *rdev,
struct net_device *netdev,
const u8 *addr, gfp_t gfp);
--
Jouni Malinen PGP id EFC895FA
^ permalink raw reply
* unresolved symbols due to missing iwlcore.ko
From: Bringfried Stecklum @ 2010-12-14 10:13 UTC (permalink / raw)
To: linux-wireless
I am having trouble installing iwlagn from the recent compat-wireless. My system
is Ubuntu 8.10 running kernel 2.6.36-1. The reason is that iwlcore.ko does not
get build and installed in the update modules folder which, of course, leads
unresolved symbols. Here is a short log
stecklum@extragalactix:~/System/src/compat-wireless-2010-12-12$
./scripts/driver-select iwlwifi
make
...
Building modules, stage 2.
MODPOST 7 modules
CC /home/stecklum/System/src/compat-wireless-2010-12-12/compat/compat.mod.o
LD [M] /home/stecklum/System/src/compat-wireless-2010-12-12/compat/compat.ko
CC
/home/stecklum/System/src/compat-wireless-2010-12-12/drivers/net/atl1c/atl1c.mod.o
LD [M]
/home/stecklum/System/src/compat-wireless-2010-12-12/drivers/net/atl1c/atl1c.ko
CC
/home/stecklum/System/src/compat-wireless-2010-12-12/drivers/net/atl1e/atl1e.mod.o
LD [M]
/home/stecklum/System/src/compat-wireless-2010-12-12/drivers/net/atl1e/atl1e.ko
CC
/home/stecklum/System/src/compat-wireless-2010-12-12/drivers/net/atlx/atl1.mod.o
LD [M]
/home/stecklum/System/src/compat-wireless-2010-12-12/drivers/net/atlx/atl1.ko
CC
/home/stecklum/System/src/compat-wireless-2010-12-12/drivers/net/atlx/atl2.mod.o
LD [M]
/home/stecklum/System/src/compat-wireless-2010-12-12/drivers/net/atlx/atl2.ko
CC
/home/stecklum/System/src/compat-wireless-2010-12-12/net/mac80211/mac80211.mod.o
LD [M]
/home/stecklum/System/src/compat-wireless-2010-12-12/net/mac80211/mac80211.ko
CC
/home/stecklum/System/src/compat-wireless-2010-12-12/net/wireless/cfg80211.mod.o
LD [M]
/home/stecklum/System/src/compat-wireless-2010-12-12/net/wireless/cfg80211.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.36-1-generic'
So no iwlcore.ko at this stage.
This is after make install
stecklum@extragalactix:~/System/src/compat-wireless-2010-12-12$ find . -name
iwlcore.ko -print
stecklum@extragalactix:~/System/src/compat-wireless-2010-12-12$
and consequently the module is not in the update module folder. Thus, upon
modprobe iwlagn the original kernel module will be loaded which, of course,
lacks the new symbols.
Regards, Bringfried
^ permalink raw reply
* Re: [PATCH] ath9k_htc: Remove PCI specific configuration
From: Felix Fietkau @ 2010-12-14 10:48 UTC (permalink / raw)
To: Sujith; +Cc: linville, linux-wireless, Sujith.Manoharan
In-Reply-To: <19718.55706.982211.137208@gargle.gargle.HOWL>
On 2010-12-14 3:42 AM, Sujith wrote:
> From: Sujith Manoharan <Sujith.Manoharan@atheros.com>
>
> There is no need to configure PCI related registers for
> USB devices.
>
> Signed-off-by: Sujith Manoharan <Sujith.Manoharan@atheros.com>
> ---
> diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
> index 0f373be..2662553 100644
> --- a/drivers/net/wireless/ath/ath9k/hw.c
> +++ b/drivers/net/wireless/ath/ath9k/hw.c
> @@ -568,10 +568,12 @@ static int __ath9k_hw_init(struct ath_hw *ah)
> ah->WARegVal |= (AR_WA_D3_L1_DISABLE |
> AR_WA_ASPM_TIMER_BASED_DISABLE);
>
> - if (ah->is_pciexpress)
> + if (ah->is_pciexpress) {
> ath9k_hw_configpcipowersave(ah, 0, 0);
> - else
> - ath9k_hw_disablepcie(ah);
> + } else {
> + if (common->bus_ops->ath_bus_type != ATH_USB)
> + ath9k_hw_disablepcie(ah);
> + }
I don't really see the point of this check, since (with my other patch)
ath9k_hw_disablepcie already checks for AR_SREV_5416, which won't return
true on any USB based device.
- Felix
^ permalink raw reply
* Re: brcm80211 locking up
From: Sean Paul @ 2010-12-14 14:26 UTC (permalink / raw)
To: Brett Rudley; +Cc: Larry Finger, linux-wireless@vger.kernel.org
In-Reply-To: <7A94256FD72B884D9E7C55586C3CBCEE13856A1786@SJEXCHCCR01.corp.ad.broadcom.com>
Hi Brett,
I've been testing on a Lenovo S10-3t, with the 4313 chipset. I've
tried 2 other S10-3t units with the same result (making doubly sure
the switch was in the on position). I haven't tried another model with
the 4313 in it.
Is it possible that Larry's experiences with the b43 driver and rfkill
are related?
Thanks,
Sean
On Mon, Dec 13, 2010 at 2:32 PM, Brett Rudley <brudley@broadcom.com> wrote:
>
>> -----Original Message-----
>> From: linux-wireless-owner@vger.kernel.org [mailto:linux-wireless-
>> owner@vger.kernel.org] On Behalf Of Sean Paul
>> Sent: Monday, December 13, 2010 10:39 AM
>> To: Larry Finger
>> Cc: Brett Rudley; linux-wireless@vger.kernel.org
>> Subject: Re: brcm80211 locking up
>>
>> Hi Larry,
>> Thanks for the insight. It's very difficult to debug this since the
>> loop is hosing my system, so it's unclear whether an unload/reload
>> would fix the issue.
>>
>> Brett: Do you know the cause of the loop?
>
>> Two issues:
>
> - Something on your machine is forcing the radio off.
> - The driver isn't handling the radio off condition during load.
>
> The latter is on our todo list and I just haven't had time to deal with yet.
>
> The former is odd... I haven't seen this before (except for when my RF switch was actually off).
>
> What machine is this and have you seen the problem on any other type of machines? Does it happen all the time, some of the time?
>
> Brett
>
>
>
^ permalink raw reply
* Re: [PATCH 06/14] iwlagn: rename enhanced txpower fields
From: Guy, Wey-Yi @ 2010-12-14 15:24 UTC (permalink / raw)
To: Johannes Berg
Cc: linville@tuxdriver.com, linux-wireless@vger.kernel.org,
ipw3945-devel@lists.sourceforge.net
In-Reply-To: <1292311038.3569.4.camel@jlt3.sipsolutions.net>
Hi Johannes,
On Mon, 2010-12-13 at 23:17 -0800, Johannes Berg wrote:
> On Mon, 2010-12-13 at 16:09 -0800, Wey-Yi Guy wrote:
> > From: Johannes Berg <johannes.berg@intel.com>
> >
> > Some fields we didn't previously use from the
> > enhanced TX power structure will be needed in
> > the next patch, so rename them to their correct
> > names to be able to use them and change code
> > reading them accordingly.
>
> Would probably be better to get this and the 7/14 patch by merging
> wireless-2.6, rather than applying the patch again.
>
THat was my original plan, but the patch apply to wireless-2.6 is not
exactly the same as the one apply to wireless-next-2.6 since there are
number of patches apply to the same area.
Also if holding those 2 patches, I am also holding a lot of other
patches following.
Wey
^ permalink raw reply
* Re: [PATCH 03/14] iwlagn: check ready in iwlagn_bss_info_changed()
From: Guy, Wey-Yi @ 2010-12-14 15:26 UTC (permalink / raw)
To: Johannes Berg
Cc: linville@tuxdriver.com, linux-wireless@vger.kernel.org,
ipw3945-devel@lists.sourceforge.net, Zhao, Shanyu
In-Reply-To: <1292310979.3569.2.camel@jlt3.sipsolutions.net>
Johannes and John,
On Mon, 2010-12-13 at 23:16 -0800, Johannes Berg wrote:
> On Mon, 2010-12-13 at 16:09 -0800, Wey-Yi Guy wrote:
>
> > - if (WARN_ON(!ctx->vif)) {
> > + if (unlikely(!iwl_is_ready(priv))) {
> > + IWL_DEBUG_MAC80211(priv, "leave - not ready\n");
> > + mutex_unlock(&priv->mutex);
> > + return;
>
> There appears to be some whitespace damage here.
>
my bad did not check before push, I will submit another patch to fix it
and please merge both
Thanks
Wey
>
^ permalink raw reply
* [PATCH wireless-next-2.6] iwlagn: fix witespace damage
From: Wey-Yi Guy @ 2010-12-14 15:38 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, ipw3945-devel, Wey-Yi Guy
patch "iwlagn: check ready in iwlagn_bss_info_changed()" introduce
whitespace, fix it
please merge with the previous patch
Reported by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
---
this patch is also available from wireless-2.6 branch on
git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-2.6.git
drivers/net/wireless/iwlwifi/iwl-agn-rxon.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
index 4ed21bf..1a131dc 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
@@ -519,8 +519,8 @@ void iwlagn_bss_info_changed(struct ieee80211_hw *hw,
mutex_lock(&priv->mutex);
if (unlikely(!iwl_is_ready(priv))) {
- IWL_DEBUG_MAC80211(priv, "leave - not ready\n");
- mutex_unlock(&priv->mutex);
+ IWL_DEBUG_MAC80211(priv, "leave - not ready\n");
+ mutex_unlock(&priv->mutex);
return;
}
--
1.7.0.4
^ permalink raw reply related
* Re: [RFC v2 2/2] mac80211: add support for HW scheduled scan
From: Luciano Coelho @ 2010-12-14 16:06 UTC (permalink / raw)
To: ext Johannes Berg; +Cc: linux-wireless
In-Reply-To: <1292012143.3531.31.camel@jlt3.sipsolutions.net>
On Fri, 2010-12-10 at 21:15 +0100, ext Johannes Berg wrote:
> See ... I see nothing here in main.c that would set the wiphy flag, so
> you really should've checked it in cfg8021 :-)
Heheh! Well, as we discussed on IRC, I had set the wiphy flag directly
in the driver code. But as you recommended, I have now changed it so
that mac80211 will check if the driver has an op->sched_scan_start and
set the flag accordingly.
> > +struct ieee80211_sched_scan_ies {
> > + u8 *ie[IEEE80211_NUM_BANDS];
>
> const?
As discussed on IRC, in this case this doesn't need to be const. This
struct belongs to mac80211 and it needs to write to it when preparing
the sched_scan, so no need to const it and cast back to non-const when
assigning values to it. There no need to restrict the access to it from
the driver's point-of-view. In normal cases, the driver should not
write to the IEs, but there's no reason to prevent it from doing it.
> > + * @sched_scan_start: Ask the hardware to start scanning repeatedly at
> > + * specific intervals. The driver must call the
> > + * ieee80211_sched_scan_results() function whenever it finds results.
> > + * This process will continue until sched_scan_stop is called.
> > + *
> > + * @sched_scan_stop: Tell the hardware to stop an ongoing periodic scan.
> > + *
> > + * ieee80211_sched_scan_results() each time it finds some results.
>
> I think that should talk about filtering as well? Maybe a DOC: section
> would be good, dunno.
As discussed in your comments to the previous patch, I decided to leave
the filtering out for now and will add it later with a separate patch,
to keep things simple.
There was this extra "ieee80211_sched_scan_results..." pasted wrongly
there, which I have removed.
> > /**
> > + * ieee80211_sched_scan_results - got results from periodic scan
> > + *
> > + * When a periodic scan is running, this function needs to be called by the
> > + * driver whenever there are new scan results availble.
>
> typo: available
Fixed.
> > +TRACE_EVENT(drv_sched_scan_results,
> > + TP_PROTO(struct ieee80211_local *local),
> > +
> > + TP_ARGS(local),
> > +
> > + TP_STRUCT__entry(
> > + LOCAL_ENTRY
> > + ),
> > +
> > + TP_fast_assign(
> > + LOCAL_ASSIGN;
> > + ),
> > +
> > + TP_printk(
> > + LOCAL_PR_FMT, LOCAL_PR_ARG
> > + )
> > +);
>
> Shouldn't that be in the _api_ section?
Indeed. In fact this trace was not even used anywhere. I'll move it to
the api_ section and call it properly.
> > @@ -642,6 +642,7 @@ enum queue_stop_reason {
> > * that the scan completed.
> > * @SCAN_ABORTED: Set for our scan work function when the driver reported
> > * a scan complete for an aborted scan.
> > + * @SCAN_SCHED_SCANNING: We're currently performing periodic scans
>
> That reminds me ... can you scan and sched_scan at the same time?
> sched_scan while associated? Should these be prohibited, or documented
> as being implementation dependent?
With the wl12xx firmware, you can scan and sched_scan at the same time.
In theory, I haven't tried it very thoroughly. It doesn't support
sched_scan while associated, yet. But I think it's a good feature, eg.
for roaming, and we shouldn't restrict it in the mac80211.
I think the best is to document that it is implementation dependent.
And again, for the record, I'll implement a NL80211_SCHED_SCAN_STOPPED
event that the driver can send to userspace at any time when the
sched_scan is running. By doing so, we allow drivers that need to stop
the scan in certain scenarios (eg. while associating or starting a
one-shot scan) to inform the userspace, which then decides whether to
restart it or not.
Maybe we just mandate that sched_scan must work when idle. In other
cases the driver can always return -EBUSY, for instance if it doesn't
support sched_scan while associated.
> Also, how does this interact with IDLE? Obviously, the device won't be
> idle with this, but you still want it to be "otherwise" idle, no? Should
> we take this out of scanning flags and specify that it must be supported
> while the device is told that it's idle by mac80211? Do you expect this
> to be stopped before trying to associate?
The last question is easy to answer: see above. :)
About idle... I have made the assumption that we will consider
sched_scanning as idle, so mac80211 is not calling config() with
IEEE80211_CONF_CHANGE_IDLE when starting or stopping the sched_scan (it
checks local->scan_data when recalculating idle).
But indeed, now checking it more carefully, I can see that the scanning
flags are checked in many different places. I guess the best thing to
do is to take the sched_scan out of the scanning flags and check case by
case. Some kind of new state... we shouldn't suspend things while
sched_scan is running.
> > @@ -392,7 +392,8 @@ ieee80211_rx_h_passive_scan(struct ieee80211_rx_data *rx)
> > if (likely(!(status->rx_flags & IEEE80211_RX_IN_SCAN)))
> > return RX_CONTINUE;
> >
> > - if (test_bit(SCAN_HW_SCANNING, &local->scanning))
> > + if (test_bit(SCAN_HW_SCANNING, &local->scanning) ||
> > + test_bit(SCAN_SCHED_SCANNING, &local->scanning))
> > return ieee80211_scan_rx(rx->sdata, skb);
>
> This won't work while associated...
Damn, this is getting more complicated than I expected. As discussed,
this would eat all beacons during the entire duration of the sched_scan,
so association would break.
Can I change my mind and just forbid sched_scan while not idle? :D
No seriously, I'll continue thinking aboout how to solve this tomorrow.
> > + for (i = 0; i < IEEE80211_NUM_BANDS; i++) {
> > + local->sched_scan_ies.ie[i] = kzalloc(2 +
> > + IEEE80211_MAX_SSID_LEN +
> > + local->scan_ies_len,
> > + GFP_KERNEL);
>
>
> Oops ... how about if this allocation fails?
Oorgh! Fixed.
> > +void ieee80211_sched_scan_results(struct ieee80211_hw *hw)
> > +{
> > + struct ieee80211_local *local = hw_to_local(hw);
> > +
> > + mutex_lock(&local->mtx);
> > +
> > + cfg80211_sched_scan_results(hw->wiphy);
> > +
> > + mutex_unlock(&local->mtx);
>
> Does that really need locking? Seems ... pointless since cfg80211 will
> have to take care of its locking.
Indeed. Removed the locking here.
> Finally: how does this interact with HW reset? Should it be re-started
> if it was ever started?
As described earlier, we can rely on the NL80211_SCHED_SCAN_STOPPED
event, so the userspace may decided whether to restart the sched_scan or
not.
--
Cheers,
Luca.
^ permalink raw reply
* Re: [PATCH] ath9k: Make PM-QOS value as user configurable
From: Luis R. Rodriguez @ 2010-12-14 16:25 UTC (permalink / raw)
To: Mohammed Shajakhan
Cc: linville@tuxdriver.com, linux-wireless@vger.kernel.org,
Luis Rodriguez, Senthilkumar Balasubramanian
In-Reply-To: <1292312908-6182-1-git-send-email-mshajakhan@atheros.com>
On Mon, Dec 13, 2010 at 11:48:28PM -0800, Mohammed Shajakhan wrote:
> From: Mohammed Shafi Shajakhan <mshajakhan@atheros.com>
>
> This patch allows the pm-qos value to be user configurable by making it as
> a module parameter.This will help our customers to configure the pm-qos
> value according to the effect in throughput due to the DMA latency problem
> which was observed in Intel Pinetrail platforms.
> The tested value of '55' will be filled as the default
> pm-qos-value incase the user does not specifies pm-qos value as a
> module parameter.
> example usage: sudo modprobe ath9k pmqos=65
Where is this documented though? Can you please add some
/*
* some good docs
*/
of some sort as a followup patch? Thanks!
Luis
^ permalink raw reply
* pull request: wireless-next-2.6 2010-12-14
From: John W. Linville @ 2010-12-14 16:19 UTC (permalink / raw)
To: davem; +Cc: linux-wireless, netdev
Dave,
Here is another batch of updates intended for 2.6.38. This batch
includes some mac80211 updates from Johannes Berg, Felix Fietkau,
and Helmut Schaa, some ath cleanups from Joe Perches, more b43 N-phy
updates from Rafał Miłecki, more ath5k updates from Nick Kossifidis,
some ath9k bits from the Atheros guys, and a smattering of other bits.
This also includes another wireless-2.6 pull to grab some prerequisites
for later patches.
Please let me know if there are problems!
Thanks,
John
---
The following changes since commit 0dbaee3b37e118a96bb7b8eb0d9bbaeeb46264be:
net: Abstract default ADVMSS behind an accessor. (2010-12-13 12:52:14 -0800)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6.git for-davem
Amitkumar Karwar (1):
cfg80211: add some element IDs in enum ieee80211_eid
Ben Greear (3):
ath9k: Make DMA warning in ath_stoprecv WARN_ON_ONCE.
ath9k: Check for NULL sta in ath_tx_start
mac80211: Show max number of probe tries in debug message.
Bruno Randolf (4):
ath5k: Use EWMA factor of 1024 instead of 1000
lib: Improve EWMA efficiency by using bitshifts
nl80211/mac80211: Report signal average
ath5k: Use capabilities information for the number of TX queues
David Kilroy (4):
orinoco: allow IW_AUTH_MFP to pass through
orinoco: initialise priv->hw before assigning the interrupt
orinoco: clear countermeasure setting on commit
orinoco: fix TKIP countermeasure behaviour
Eliad Peller (1):
mac80211: fix dynamic-ps/pm_qos magic numbers
Felix Fietkau (4):
mac80211: remove a redundant check
mac80211: speed up AP probing using nullfunc frames
ath9k: fix a DMA related race condition on reset
mac80211: fix a compiler warning
Grumbach, Emmanuel (1):
iwlagn: Enable PCI L1 ACTIVE state after uCode has been loaded
Helmut Schaa (4):
mac80211: Update last_tx_rate only for data frames
mac80211: Fix BUG in pskb_expand_head when transmitting shared skbs
cfg80211: Add new BSS attribute ht_opmode
mac80211: Apply ht_opmode changes in ieee80211_change_bss
Javier Cardona (5):
nl80211/mac80211: define and allow configuring mesh element TTL
mac80211: Fix compilation error when mesh is disabled
ath5k: Fix beaconing in mesh mode
ath5k: Prevent mesh interfaces from being counted as ad-hoc
ath5k: Put the right tsf value in mesh beacons
Joe Perches (5):
MAINTAINERS: Add ATH GENERIC UTILITIES
ath: Add and use ath_printk and ath_<level>
ath: Convert ath_print(.., ATH_DBG_FATAL to ath_err
ath: Convert ath_print to ath_dbg
ath: Fix ath_dbg access beyond array bound
Johannes Berg (4):
mac80211: move mesh filter adjusting
cfg80211: require add_virtual_intf to return new dev
nl80211: refactor mesh parameter parsing
cfg80211/mac80211: add mesh join/leave commands
John W. Linville (5):
Merge branch 'wireless-next-2.6' of git://git.kernel.org/.../iwlwifi/iwlwifi-2.6
ath5k: remove MODULE_VERSION
Merge branch 'master' of git://git.kernel.org/.../linville/wireless-2.6
ath: fix build break with ATH_DBG_WARN_ON_ONCE
Merge branch 'master' of git://git.kernel.org/.../linville/wireless-next-2.6 into for-davem
Luis R. Rodriguez (2):
ath9k: skip ATH9K_INT_TIM_TIMER when we are idle
ath9k_hw: warn if we cannot change the power to the chip
Matteo Croce (1):
ath9k: fix bug in tx power
Mohammed Shafi Shajakhan (3):
ath9k: Properly use unlikely check macro
ath9k: Parse DTIM period from mac80211
ath9k: Remove dead code in recv.c
Nick Kossifidis (5):
ath5k: Always write tx powertable on hw
ath5k: Always free tx buffers before reset
ath5k: Disable ANI during reset
ath5k: Fix reporting of RX dma stop failure
ath5k: Include tx ack reporting on hw flags
Rafał Miłecki (8):
b43: N-PHY: update init tables
b43: N-PHY: reorder and optimize tables initialization
b43: N-PHY: implement own maskset
b43: flush PHY writes when needed
b43: N-PHY: silence warnings
b43: set TMS to work with current band width for N-PHY
b43: fix split of N-PHY devices into supported and not (based on PHY rev)
b43: rename config option for N-PHY, drop BROKEN
Rajkumar Manoharan (1):
ath9k: fix beacon resource related race condition
Sedat Dilek (1):
ath5k: Fix modinfo does not list alias -> pci-id lines
Senthil Balasubramanian (1):
ath9k: Fix STA disconnect issue due to received MIC failed bcast frames
Stanislaw Gruszka (2):
iwl3945: prevent too frequent firmware resets
iwlwifi: jiffies based tx queues watchdog
Sujith Manoharan (4):
ath9k_htc: Cleanup device identification
ath9k_htc: Add support for handling TX power configuration
ath9k_htc: Fix panic on FW download failure
ath9k_htc: Fix suspend/resume
Vasanthakumar Thiagarajan (26):
ath9k_hw: Define hw version macros for AR9485
ath9k_hw: Add initvals.h for AR9485
ath9k_hw: Enable hw initialization for AR9485
ath9k_hw: Initialize mode registers for AR9485
ath9k_hw: Initialize tx/rx gain table from initvals.h for AR9485
ath9k_hw: Eeeprom changes for AR9485
ath9k_hw: Disable LDPC for AR9485
ath9k: Disable TX STBC for AR9485
ath9k: Enable extended synch for AR9485 to fix L0s recovery issue
ath9k_hw: Find the maximum number of chains that hw supports
ath9k: Configure pll control for AR9485
ath9k_hw: Find chansel of AR_PHY_65NM_CH0_SYNTH7 for AR9485
ath9k_hw: Add a helper function to get spur channel pointer from cal data for AR9003 family
ath9k: Read spur channel information from eeprom for AR9485
ath9k_hw: Configure xpa bias level for AR9485
ath9k_hw: Read and configure antenna diversity control for AR9485
ath9k_hw: Configure internal regulator for AR9485
ath9k_hw: Read and configure turnning caps to regulate freq accuracy
ath9k_hw: Configure power control only for the supported chains
ath9k_hw: Program appropriate chianmask for AR9485 before starting AGC/IQ cal
ath9k_hw: Define IQcal correction coefficient registers using index
ath9k_hw: Add IQ cal changes for AR9485
ath9k_hw: Program appropriate register for temperature compensation cal for AR9485
ath9k_hw: Setup paprd only for supported chains
ath9k_hw: Disable MRC CCK for AR9485
ath9k: Add device id of AR9485 to pci table
Wey-Yi Guy (4):
iwlagn: fix race condition when reprogram sta
iwlagn: remove structure name reference to gen2
iwlwifi: check for STATUS_EXIT_PENDING when send RXON command
iwlagn: name change for bt_ch_announce module parameter
MAINTAINERS | 6 +
drivers/net/wireless/ath/ath.h | 115 +++-
drivers/net/wireless/ath/ath5k/base.c | 103 ++-
drivers/net/wireless/ath/ath5k/debug.c | 1 -
drivers/net/wireless/ath/ath5k/dma.c | 2 +-
drivers/net/wireless/ath/ath5k/pci.c | 1 +
drivers/net/wireless/ath/ath5k/phy.c | 33 +-
drivers/net/wireless/ath/ath5k/qcu.c | 4 +-
drivers/net/wireless/ath/ath9k/ahb.c | 7 +-
drivers/net/wireless/ath/ath9k/ani.c | 99 ++--
drivers/net/wireless/ath/ath9k/ar5008_phy.c | 199 ++---
drivers/net/wireless/ath/ath9k/ar9002_calib.c | 220 +++---
drivers/net/wireless/ath/ath9k/ar9002_hw.c | 6 +-
drivers/net/wireless/ath/ath9k/ar9002_mac.c | 20 +-
drivers/net/wireless/ath/ath9k/ar9003_calib.c | 473 ++++++++---
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 361 +++++----
drivers/net/wireless/ath/ath9k/ar9003_eeprom.h | 2 +
drivers/net/wireless/ath/ath9k/ar9003_hw.c | 278 +++++--
drivers/net/wireless/ath/ath9k/ar9003_mac.c | 16 +-
drivers/net/wireless/ath/ath9k/ar9003_paprd.c | 37 +-
drivers/net/wireless/ath/ath9k/ar9003_phy.c | 245 +++---
drivers/net/wireless/ath/ath9k/ar9003_phy.h | 70 ++-
drivers/net/wireless/ath/ath9k/ar9485_initvals.h | 943 ++++++++++++++++++++++
drivers/net/wireless/ath/ath9k/ath9k.h | 2 +-
drivers/net/wireless/ath/ath9k/beacon.c | 79 +-
drivers/net/wireless/ath/ath9k/calib.c | 59 +-
drivers/net/wireless/ath/ath9k/common.c | 4 +-
drivers/net/wireless/ath/ath9k/common.h | 1 -
drivers/net/wireless/ath/ath9k/eeprom.c | 4 +-
drivers/net/wireless/ath/ath9k/eeprom_4k.c | 72 +-
drivers/net/wireless/ath/ath9k/eeprom_9287.c | 45 +-
drivers/net/wireless/ath/ath9k/eeprom_def.c | 79 +-
drivers/net/wireless/ath/ath9k/gpio.c | 20 +-
drivers/net/wireless/ath/ath9k/hif_usb.c | 43 +-
drivers/net/wireless/ath/ath9k/hif_usb.h | 2 +
drivers/net/wireless/ath/ath9k/htc.h | 3 +
drivers/net/wireless/ath/ath9k/htc_drv_beacon.c | 24 +-
drivers/net/wireless/ath/ath9k/htc_drv_gpio.c | 15 +-
drivers/net/wireless/ath/ath9k/htc_drv_init.c | 78 +-
drivers/net/wireless/ath/ath9k/htc_drv_main.c | 202 +++---
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | 33 +-
drivers/net/wireless/ath/ath9k/hw.c | 201 +++---
drivers/net/wireless/ath/ath9k/hw.h | 7 +-
drivers/net/wireless/ath/ath9k/init.c | 35 +-
drivers/net/wireless/ath/ath9k/mac.c | 120 ++--
drivers/net/wireless/ath/ath9k/main.c | 216 +++---
drivers/net/wireless/ath/ath9k/pci.c | 20 +-
drivers/net/wireless/ath/ath9k/phy.h | 1 +
drivers/net/wireless/ath/ath9k/rc.c | 18 +-
drivers/net/wireless/ath/ath9k/recv.c | 81 +-
drivers/net/wireless/ath/ath9k/reg.h | 18 +-
drivers/net/wireless/ath/ath9k/virtual.c | 7 +-
drivers/net/wireless/ath/ath9k/wmi.c | 12 +-
drivers/net/wireless/ath/ath9k/xmit.c | 100 +--
drivers/net/wireless/ath/debug.c | 20 -
drivers/net/wireless/ath/debug.h | 92 ---
drivers/net/wireless/ath/key.c | 28 +-
drivers/net/wireless/ath/main.c | 20 +
drivers/net/wireless/b43/Kconfig | 13 +-
drivers/net/wireless/b43/Makefile | 8 +-
drivers/net/wireless/b43/main.c | 12 +-
drivers/net/wireless/b43/phy_common.c | 14 +-
drivers/net/wireless/b43/phy_common.h | 8 +
drivers/net/wireless/b43/phy_n.c | 26 +-
drivers/net/wireless/b43/tables_nphy.c | 224 +++---
drivers/net/wireless/iwlwifi/iwl-1000.c | 3 +-
drivers/net/wireless/iwlwifi/iwl-3945.c | 7 +-
drivers/net/wireless/iwlwifi/iwl-4965.c | 4 +-
drivers/net/wireless/iwlwifi/iwl-5000.c | 4 +-
drivers/net/wireless/iwlwifi/iwl-6000.c | 28 +-
drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 1 +
drivers/net/wireless/iwlwifi/iwl-agn-rxon.c | 3 +
drivers/net/wireless/iwlwifi/iwl-agn-ucode.c | 4 +
drivers/net/wireless/iwlwifi/iwl-agn.c | 91 +--
drivers/net/wireless/iwlwifi/iwl-agn.h | 20 +-
drivers/net/wireless/iwlwifi/iwl-core.c | 111 ++--
drivers/net/wireless/iwlwifi/iwl-core.h | 10 +-
drivers/net/wireless/iwlwifi/iwl-debugfs.c | 24 +-
drivers/net/wireless/iwlwifi/iwl-dev.h | 16 +-
drivers/net/wireless/iwlwifi/iwl-sta.c | 13 +
drivers/net/wireless/iwlwifi/iwl-tx.c | 2 -
drivers/net/wireless/iwlwifi/iwl3945-base.c | 28 +-
drivers/net/wireless/orinoco/main.c | 6 +
drivers/net/wireless/orinoco/orinoco_cs.c | 14 +-
drivers/net/wireless/orinoco/spectrum_cs.c | 14 +-
drivers/net/wireless/orinoco/wext.c | 12 +-
include/linux/average.h | 4 +-
include/linux/ieee80211.h | 3 +
include/linux/nl80211.h | 18 +
include/net/cfg80211.h | 58 +-
lib/average.c | 20 +-
net/mac80211/Kconfig | 1 +
net/mac80211/cfg.c | 70 ++-
net/mac80211/debugfs_netdev.c | 2 +
net/mac80211/ieee80211_i.h | 16 +-
net/mac80211/iface.c | 30 +-
net/mac80211/main.c | 5 +-
net/mac80211/mesh.c | 36 +-
net/mac80211/mesh.h | 23 -
net/mac80211/mesh_hwmp.c | 9 +-
net/mac80211/mesh_pathtbl.c | 7 +-
net/mac80211/mlme.c | 104 ++-
net/mac80211/rx.c | 1 +
net/mac80211/sta_info.c | 2 +
net/mac80211/sta_info.h | 3 +
net/mac80211/status.c | 18 +-
net/mac80211/tx.c | 28 +-
net/mac80211/work.c | 5 +-
net/wireless/Makefile | 2 +-
net/wireless/core.c | 15 +-
net/wireless/core.h | 13 +
net/wireless/mesh.c | 140 ++++
net/wireless/nl80211.c | 212 ++++-
net/wireless/util.c | 1 +
114 files changed, 4237 insertions(+), 2331 deletions(-)
create mode 100644 drivers/net/wireless/ath/ath9k/ar9485_initvals.h
delete mode 100644 drivers/net/wireless/ath/debug.h
create mode 100644 net/wireless/mesh.c
Omnibus patch is available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-next-2.6-2010-12-14.patch.bz2
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply
* [PATCH] nl80211: advertise maximum remain-on-channel duration
From: Johannes Berg @ 2010-12-14 16:54 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless@vger.kernel.org
From: Johannes Berg <johannes.berg@intel.com>
With the upcoming hardware offload implementation,
some devices will have a different maximum duration
for the remain-on-channel command. Advertise the
maximum duration in mac80211, and make mac80211 set
it.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
I'm working on the HW offload implementation, need to
get it tested. Does anyone mind that I mentioned it in
the commit log anyway? This is useful by itself since
it allows cfg80211 drivers to specify it, and wpa_s to
discover it ...
include/linux/nl80211.h | 5 +++++
include/net/cfg80211.h | 5 +++++
net/mac80211/main.c | 2 ++
net/wireless/nl80211.c | 7 ++++++-
4 files changed, 18 insertions(+), 1 deletion(-)
--- wireless-testing.orig/include/linux/nl80211.h 2010-12-14 16:54:01.000000000 +0100
+++ wireless-testing/include/linux/nl80211.h 2010-12-14 16:55:59.000000000 +0100
@@ -773,6 +773,9 @@ enum nl80211_commands {
* cache, a wiphy attribute.
*
* @NL80211_ATTR_DURATION: Duration of an operation in milliseconds, u32.
+ * @NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION: Device attribute that
+ * specifies the maximum duration that can be requested with the
+ * remain-on-channel operation, in milliseconds, u32.
*
* @NL80211_ATTR_COOKIE: Generic 64-bit cookie to identify objects.
*
@@ -1035,6 +1038,8 @@ enum nl80211_attrs {
NL80211_ATTR_KEY_DEFAULT_TYPES,
+ NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION,
+
/* add attributes here, update the policy in nl80211.c */
__NL80211_ATTR_AFTER_LAST,
--- wireless-testing.orig/include/net/cfg80211.h 2010-12-14 16:51:28.000000000 +0100
+++ wireless-testing/include/net/cfg80211.h 2010-12-14 16:53:15.000000000 +0100
@@ -1474,6 +1474,9 @@ struct ieee80211_txrx_stypes {
*
* @available_antennas: bitmap of antennas which are available to configure.
* antenna configuration commands will be rejected unless this is set.
+ *
+ * @max_remain_on_channel_duration: Maximum time a remain-on-channel operation
+ * may request, if implemented.
*/
struct wiphy {
/* assign these fields before you register the wiphy */
@@ -1511,6 +1514,8 @@ struct wiphy {
char fw_version[ETHTOOL_BUSINFO_LEN];
u32 hw_version;
+ u16 max_remain_on_channel_duration;
+
u8 max_num_pmkids;
u32 available_antennas;
--- wireless-testing.orig/net/wireless/nl80211.c 2010-12-14 16:53:29.000000000 +0100
+++ wireless-testing/net/wireless/nl80211.c 2010-12-14 16:58:53.000000000 +0100
@@ -755,6 +755,10 @@ static int nl80211_send_wiphy(struct sk_
nla_nest_end(msg, nl_cmds);
+ if (dev->ops->remain_on_channel)
+ NLA_PUT_U32(msg, NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION,
+ dev->wiphy.max_remain_on_channel_duration);
+
/* for now at least assume all drivers have it */
if (dev->ops->mgmt_tx)
NLA_PUT_FLAG(msg, NL80211_ATTR_OFFCHANNEL_TX_OK);
@@ -4228,7 +4232,8 @@ static int nl80211_remain_on_channel(str
* We should be on that channel for at least one jiffie,
* and more than 5 seconds seems excessive.
*/
- if (!duration || !msecs_to_jiffies(duration) || duration > 5000)
+ if (!duration || !msecs_to_jiffies(duration) ||
+ duration > rdev->wiphy.max_remain_on_channel_duration)
return -EINVAL;
if (!rdev->ops->remain_on_channel)
--- wireless-testing.orig/net/mac80211/main.c 2010-12-14 17:04:34.000000000 +0100
+++ wireless-testing/net/mac80211/main.c 2010-12-14 17:06:55.000000000 +0100
@@ -747,6 +747,8 @@ int ieee80211_register_hw(struct ieee802
}
}
+ local->hw.wiphy->max_remain_on_channel_duration = 5000;
+
result = wiphy_register(local->hw.wiphy);
if (result < 0)
goto fail_wiphy_register;
^ permalink raw reply
* another device working
From: Eduardo Costa @ 2010-12-14 17:09 UTC (permalink / raw)
To: linux-wireless
Hi guys,
I've made my device work with p54 without any hassle, so I wanted to report it.
This is an usb adpator widely provided by telefonica, here in spain. A
search based on the first couple of numbers of it's mac address
(00:14:A5), reveals this is the vendor and the model:
http://www.gemtek.com.tw/pro_wubi100.html
A picture of it can be found here:
http://www.zero13wireless.net/wireless/Mods_Wireless/GW3887AIK-usb.jpg
I also took the EMF protection cover out to see what was inside, but
didn't take any pictures either.
If you might need them, just let me know; there is just another two
smaller chips under (an ISL, and other I don't rembember now).
Although the supplied windows drivers for this device are called
prisma02, and in fact match the ones supplied by sparklan for it's
model WL-682, I couldn't make it work with ndiswrapper, due to it
returning `0xc010005' on a permanent basis, which ndiswrapper's source
defines as sort of "unable to initialize due to chip not found or
chip/driver mistmatch".
Anyways, I just had to add the following line to
`drivers/net/wireless/p54/p54usb.c' on a stock 2.6.30 kernel, prior to
recompilation and installing the module to make it work:
{USB_DEVICE (0x15a9, 0x0002)}, /* Gemtek WUBI-100GW 802.11g */
And about the firmware, it does work with stock p54's
`2.13.24.0.lm87.arm' found on the website, so I just had to copy it to
`/lib/firmware' while renaming it to `isl3887usb'.
Thanks so much for your code and support, and do not hetisate to
contact me if you need any further assistance on my side.
Regards,
^ permalink raw reply
* Re: [PATCH 14/17] rt2x00: Fix WMM Queue naming
From: Helmut Schaa @ 2010-12-14 17:49 UTC (permalink / raw)
To: Ivo van Doorn
Cc: John W. Linville, linux-wireless, users, Johannes Stezenbach,
jay.weihung
In-Reply-To: <201012131236.39071.IvDoorn@gmail.com>
Am Montag, 13. Dezember 2010 schrieb Ivo van Doorn:
> The Queue names were incorrectly copied from the legacy drivers,
> as a result the queue names were inversed to what was expected.
>
> This renames the queues using this mapping:
> QID_AC_BK -> QID_AC_VO (priority 0)
> QID_AC_BE -> QID_AC_VI (priority 1)
> QID_AC_VI -> QID_AC_BE (priority 2)
> QID_AC_VO -> QID_AC_BK (priority 3)
>
> Note that this was a naming problem only, which didn't affect
> the assignment of frames to their respective queues.
>
> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Ivo, due to the latest info from Ralink I'd say we should drop this patch
and instead introduce a mac80211_to_rt2x00_qid mapper that maps from
ieee80211_ac_numbers to data_queue_qid.
This patch doesn't cause any harm, but we would have to revert it partly
if we introduce the queue mapping as needed by the rt2x00 devices.
Thanks,
Helmut
> ---
> drivers/net/wireless/rt2x00/rt2400pci.c | 12 +++---
> drivers/net/wireless/rt2x00/rt2500pci.c | 12 +++---
> drivers/net/wireless/rt2x00/rt2800.h | 44 ++++++++++----------
> drivers/net/wireless/rt2x00/rt2800pci.c | 4 +-
> drivers/net/wireless/rt2x00/rt2x00queue.c | 18 ++++----
> drivers/net/wireless/rt2x00/rt2x00queue.h | 12 +++---
> drivers/net/wireless/rt2x00/rt2x00usb.c | 8 ++--
> drivers/net/wireless/rt2x00/rt61pci.c | 16 ++++----
> drivers/net/wireless/rt2x00/rt61pci.h | 62 ++++++++++++++--------------
> drivers/net/wireless/rt2x00/rt73usb.h | 36 ++++++++--------
> 10 files changed, 112 insertions(+), 112 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c
> index 2fc6ca5..54ca49a 100644
> --- a/drivers/net/wireless/rt2x00/rt2400pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2400pci.c
> @@ -664,12 +664,12 @@ static void rt2400pci_kick_queue(struct data_queue *queue)
> u32 reg;
>
> switch (queue->qid) {
> - case QID_AC_BE:
> + case QID_AC_VO:
> rt2x00pci_register_read(rt2x00dev, TXCSR0, ®);
> rt2x00_set_field32(®, TXCSR0_KICK_PRIO, 1);
> rt2x00pci_register_write(rt2x00dev, TXCSR0, reg);
> break;
> - case QID_AC_BK:
> + case QID_AC_VI:
> rt2x00pci_register_read(rt2x00dev, TXCSR0, ®);
> rt2x00_set_field32(®, TXCSR0_KICK_TX, 1);
> rt2x00pci_register_write(rt2x00dev, TXCSR0, reg);
> @@ -690,8 +690,8 @@ static void rt2400pci_stop_queue(struct data_queue *queue)
> u32 reg;
>
> switch (queue->qid) {
> - case QID_AC_BE:
> - case QID_AC_BK:
> + case QID_AC_VO:
> + case QID_AC_VI:
> case QID_ATIM:
> rt2x00pci_register_read(rt2x00dev, TXCSR0, ®);
> rt2x00_set_field32(®, TXCSR0_ABORT, 1);
> @@ -1322,13 +1322,13 @@ static irqreturn_t rt2400pci_interrupt_thread(int irq, void *dev_instance)
> * 4 - Priority ring transmit done interrupt.
> */
> if (rt2x00_get_field32(reg, CSR7_TXDONE_PRIORING))
> - rt2400pci_txdone(rt2x00dev, QID_AC_BE);
> + rt2400pci_txdone(rt2x00dev, QID_AC_VO);
>
> /*
> * 5 - Tx ring transmit done interrupt.
> */
> if (rt2x00_get_field32(reg, CSR7_TXDONE_TXRING))
> - rt2400pci_txdone(rt2x00dev, QID_AC_BK);
> + rt2400pci_txdone(rt2x00dev, QID_AC_VI);
>
> /* Enable interrupts again. */
> rt2x00dev->ops->lib->set_device_state(rt2x00dev,
> diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
> index d67f911..a9ff26a 100644
> --- a/drivers/net/wireless/rt2x00/rt2500pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2500pci.c
> @@ -754,12 +754,12 @@ static void rt2500pci_kick_queue(struct data_queue *queue)
> u32 reg;
>
> switch (queue->qid) {
> - case QID_AC_BE:
> + case QID_AC_VO:
> rt2x00pci_register_read(rt2x00dev, TXCSR0, ®);
> rt2x00_set_field32(®, TXCSR0_KICK_PRIO, 1);
> rt2x00pci_register_write(rt2x00dev, TXCSR0, reg);
> break;
> - case QID_AC_BK:
> + case QID_AC_VI:
> rt2x00pci_register_read(rt2x00dev, TXCSR0, ®);
> rt2x00_set_field32(®, TXCSR0_KICK_TX, 1);
> rt2x00pci_register_write(rt2x00dev, TXCSR0, reg);
> @@ -780,8 +780,8 @@ static void rt2500pci_stop_queue(struct data_queue *queue)
> u32 reg;
>
> switch (queue->qid) {
> - case QID_AC_BE:
> - case QID_AC_BK:
> + case QID_AC_VO:
> + case QID_AC_VI:
> case QID_ATIM:
> rt2x00pci_register_read(rt2x00dev, TXCSR0, ®);
> rt2x00_set_field32(®, TXCSR0_ABORT, 1);
> @@ -1455,13 +1455,13 @@ static irqreturn_t rt2500pci_interrupt_thread(int irq, void *dev_instance)
> * 4 - Priority ring transmit done interrupt.
> */
> if (rt2x00_get_field32(reg, CSR7_TXDONE_PRIORING))
> - rt2500pci_txdone(rt2x00dev, QID_AC_BE);
> + rt2500pci_txdone(rt2x00dev, QID_AC_VO);
>
> /*
> * 5 - Tx ring transmit done interrupt.
> */
> if (rt2x00_get_field32(reg, CSR7_TXDONE_TXRING))
> - rt2500pci_txdone(rt2x00dev, QID_AC_BK);
> + rt2500pci_txdone(rt2x00dev, QID_AC_VI);
>
> /* Enable interrupts again. */
> rt2x00dev->ops->lib->set_device_state(rt2x00dev,
> diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
> index 9ea0961..4c55e85 100644
> --- a/drivers/net/wireless/rt2x00/rt2800.h
> +++ b/drivers/net/wireless/rt2x00/rt2800.h
> @@ -213,10 +213,10 @@
>
> /*
> * WMM_AIFSN_CFG: Aifsn for each EDCA AC
> - * AIFSN0: AC_BE
> - * AIFSN1: AC_BK
> - * AIFSN2: AC_VI
> - * AIFSN3: AC_VO
> + * AIFSN0: AC_VO
> + * AIFSN1: AC_VI
> + * AIFSN2: AC_BE
> + * AIFSN3: AC_BK
> */
> #define WMM_AIFSN_CFG 0x0214
> #define WMM_AIFSN_CFG_AIFSN0 FIELD32(0x0000000f)
> @@ -226,10 +226,10 @@
>
> /*
> * WMM_CWMIN_CSR: CWmin for each EDCA AC
> - * CWMIN0: AC_BE
> - * CWMIN1: AC_BK
> - * CWMIN2: AC_VI
> - * CWMIN3: AC_VO
> + * CWMIN0: AC_VO
> + * CWMIN1: AC_VI
> + * CWMIN2: AC_BE
> + * CWMIN3: AC_BK
> */
> #define WMM_CWMIN_CFG 0x0218
> #define WMM_CWMIN_CFG_CWMIN0 FIELD32(0x0000000f)
> @@ -239,10 +239,10 @@
>
> /*
> * WMM_CWMAX_CSR: CWmax for each EDCA AC
> - * CWMAX0: AC_BE
> - * CWMAX1: AC_BK
> - * CWMAX2: AC_VI
> - * CWMAX3: AC_VO
> + * CWMAX0: AC_VO
> + * CWMAX1: AC_VI
> + * CWMAX2: AC_BE
> + * CWMAX3: AC_BK
> */
> #define WMM_CWMAX_CFG 0x021c
> #define WMM_CWMAX_CFG_CWMAX0 FIELD32(0x0000000f)
> @@ -251,18 +251,18 @@
> #define WMM_CWMAX_CFG_CWMAX3 FIELD32(0x0000f000)
>
> /*
> - * AC_TXOP0: AC_BK/AC_BE TXOP register
> - * AC0TXOP: AC_BK in unit of 32us
> - * AC1TXOP: AC_BE in unit of 32us
> + * AC_TXOP0: AC_VO/AC_VI TXOP register
> + * AC0TXOP: AC_VO in unit of 32us
> + * AC1TXOP: AC_VI in unit of 32us
> */
> #define WMM_TXOP0_CFG 0x0220
> #define WMM_TXOP0_CFG_AC0TXOP FIELD32(0x0000ffff)
> #define WMM_TXOP0_CFG_AC1TXOP FIELD32(0xffff0000)
>
> /*
> - * AC_TXOP1: AC_VO/AC_VI TXOP register
> - * AC2TXOP: AC_VI in unit of 32us
> - * AC3TXOP: AC_VO in unit of 32us
> + * AC_TXOP1: AC_BE/AC_BK TXOP register
> + * AC2TXOP: AC_BE in unit of 32us
> + * AC3TXOP: AC_BK in unit of 32us
> */
> #define WMM_TXOP1_CFG 0x0224
> #define WMM_TXOP1_CFG_AC2TXOP FIELD32(0x0000ffff)
> @@ -288,7 +288,7 @@
> #define MCU_CMD_CFG 0x022c
>
> /*
> - * AC_BK register offsets
> + * AC_VO register offsets
> */
> #define TX_BASE_PTR0 0x0230
> #define TX_MAX_CNT0 0x0234
> @@ -296,7 +296,7 @@
> #define TX_DTX_IDX0 0x023c
>
> /*
> - * AC_BE register offsets
> + * AC_VI register offsets
> */
> #define TX_BASE_PTR1 0x0240
> #define TX_MAX_CNT1 0x0244
> @@ -304,7 +304,7 @@
> #define TX_DTX_IDX1 0x024c
>
> /*
> - * AC_VI register offsets
> + * AC_BE register offsets
> */
> #define TX_BASE_PTR2 0x0250
> #define TX_MAX_CNT2 0x0254
> @@ -312,7 +312,7 @@
> #define TX_DTX_IDX2 0x025c
>
> /*
> - * AC_VO register offsets
> + * AC_BK register offsets
> */
> #define TX_BASE_PTR3 0x0260
> #define TX_MAX_CNT3 0x0264
> diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
> index 195f0be3..403013f 100644
> --- a/drivers/net/wireless/rt2x00/rt2800pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2800pci.c
> @@ -217,10 +217,10 @@ static void rt2800pci_kick_queue(struct data_queue *queue)
> struct queue_entry *entry;
>
> switch (queue->qid) {
> + case QID_AC_VO:
> + case QID_AC_VI:
> case QID_AC_BE:
> case QID_AC_BK:
> - case QID_AC_VI:
> - case QID_AC_VO:
> entry = rt2x00queue_get_entry(queue, Q_INDEX);
> rt2800_register_write(rt2x00dev, TX_CTX_IDX(queue->qid), entry->entry_idx);
> break;
> diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c
> index 52cc92d..ca82b3a 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00queue.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
> @@ -746,10 +746,10 @@ void rt2x00queue_pause_queue(struct data_queue *queue)
> return;
>
> switch (queue->qid) {
> + case QID_AC_VO:
> + case QID_AC_VI:
> case QID_AC_BE:
> case QID_AC_BK:
> - case QID_AC_VI:
> - case QID_AC_VO:
> /*
> * For TX queues, we have to disable the queue
> * inside mac80211.
> @@ -770,10 +770,10 @@ void rt2x00queue_unpause_queue(struct data_queue *queue)
> return;
>
> switch (queue->qid) {
> + case QID_AC_VO:
> + case QID_AC_VI:
> case QID_AC_BE:
> case QID_AC_BK:
> - case QID_AC_VI:
> - case QID_AC_VO:
> /*
> * For TX queues, we have to enable the queue
> * inside mac80211.
> @@ -834,10 +834,10 @@ void rt2x00queue_flush_queue(struct data_queue *queue, bool drop)
> unsigned int i;
> bool started;
> bool tx_queue =
> - (queue->qid == QID_AC_BE) ||
> - (queue->qid == QID_AC_BK) ||
> + (queue->qid == QID_AC_VO) ||
> (queue->qid == QID_AC_VI) ||
> - (queue->qid == QID_AC_VO);
> + (queue->qid == QID_AC_BE) ||
> + (queue->qid == QID_AC_BK);
>
> mutex_lock(&queue->status_lock);
>
> @@ -1141,7 +1141,7 @@ int rt2x00queue_allocate(struct rt2x00_dev *rt2x00dev)
> /*
> * Initialize queue parameters.
> * RX: qid = QID_RX
> - * TX: qid = QID_AC_BE + index
> + * TX: qid = QID_AC_VO + index
> * TX: cw_min: 2^5 = 32.
> * TX: cw_max: 2^10 = 1024.
> * BCN: qid = QID_BEACON
> @@ -1149,7 +1149,7 @@ int rt2x00queue_allocate(struct rt2x00_dev *rt2x00dev)
> */
> rt2x00queue_init(rt2x00dev, rt2x00dev->rx, QID_RX);
>
> - qid = QID_AC_BE;
> + qid = QID_AC_VO;
> tx_queue_for_each(rt2x00dev, queue)
> rt2x00queue_init(rt2x00dev, queue, qid++);
>
> diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.h b/drivers/net/wireless/rt2x00/rt2x00queue.h
> index 4765934..fab8e26 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00queue.h
> +++ b/drivers/net/wireless/rt2x00/rt2x00queue.h
> @@ -45,10 +45,10 @@
> /**
> * enum data_queue_qid: Queue identification
> *
> + * @QID_AC_VO: AC VO queue
> + * @QID_AC_VI: AC VI queue
> * @QID_AC_BE: AC BE queue
> * @QID_AC_BK: AC BK queue
> - * @QID_AC_VI: AC VI queue
> - * @QID_AC_VO: AC VO queue
> * @QID_HCCA: HCCA queue
> * @QID_MGMT: MGMT queue (prio queue)
> * @QID_RX: RX queue
> @@ -57,10 +57,10 @@
> * @QID_ATIM: Atim queue (value unspeficied, don't send it to device)
> */
> enum data_queue_qid {
> - QID_AC_BE = 0,
> - QID_AC_BK = 1,
> - QID_AC_VI = 2,
> - QID_AC_VO = 3,
> + QID_AC_VO = 0,
> + QID_AC_VI = 1,
> + QID_AC_BE = 2,
> + QID_AC_BK = 3,
> QID_HCCA = 4,
> QID_MGMT = 13,
> QID_RX = 14,
> diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c
> index 8a16b51..1a9937d 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00usb.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00usb.c
> @@ -353,10 +353,10 @@ static void rt2x00usb_kick_rx_entry(struct queue_entry *entry)
> void rt2x00usb_kick_queue(struct data_queue *queue)
> {
> switch (queue->qid) {
> + case QID_AC_VO:
> + case QID_AC_VI:
> case QID_AC_BE:
> case QID_AC_BK:
> - case QID_AC_VI:
> - case QID_AC_VO:
> if (!rt2x00queue_empty(queue))
> rt2x00queue_for_each_entry(queue, Q_INDEX_DONE, Q_INDEX,
> rt2x00usb_kick_tx_entry);
> @@ -403,10 +403,10 @@ void rt2x00usb_flush_queue(struct data_queue *queue)
> * Obtain the queue completion handler
> */
> switch (queue->qid) {
> + case QID_AC_VO:
> + case QID_AC_VI:
> case QID_AC_BE:
> case QID_AC_BK:
> - case QID_AC_VI:
> - case QID_AC_VO:
> completion = &queue->rt2x00dev->txdone_work;
> break;
> case QID_RX:
> diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
> index 7156b78..9405b10 100644
> --- a/drivers/net/wireless/rt2x00/rt61pci.c
> +++ b/drivers/net/wireless/rt2x00/rt61pci.c
> @@ -1171,22 +1171,22 @@ static void rt61pci_kick_queue(struct data_queue *queue)
> u32 reg;
>
> switch (queue->qid) {
> - case QID_AC_BE:
> + case QID_AC_VO:
> rt2x00pci_register_read(rt2x00dev, TX_CNTL_CSR, ®);
> rt2x00_set_field32(®, TX_CNTL_CSR_KICK_TX_AC0, 1);
> rt2x00pci_register_write(rt2x00dev, TX_CNTL_CSR, reg);
> break;
> - case QID_AC_BK:
> + case QID_AC_VI:
> rt2x00pci_register_read(rt2x00dev, TX_CNTL_CSR, ®);
> rt2x00_set_field32(®, TX_CNTL_CSR_KICK_TX_AC1, 1);
> rt2x00pci_register_write(rt2x00dev, TX_CNTL_CSR, reg);
> break;
> - case QID_AC_VI:
> + case QID_AC_BE:
> rt2x00pci_register_read(rt2x00dev, TX_CNTL_CSR, ®);
> rt2x00_set_field32(®, TX_CNTL_CSR_KICK_TX_AC2, 1);
> rt2x00pci_register_write(rt2x00dev, TX_CNTL_CSR, reg);
> break;
> - case QID_AC_VO:
> + case QID_AC_BK:
> rt2x00pci_register_read(rt2x00dev, TX_CNTL_CSR, ®);
> rt2x00_set_field32(®, TX_CNTL_CSR_KICK_TX_AC3, 1);
> rt2x00pci_register_write(rt2x00dev, TX_CNTL_CSR, reg);
> @@ -1202,22 +1202,22 @@ static void rt61pci_stop_queue(struct data_queue *queue)
> u32 reg;
>
> switch (queue->qid) {
> - case QID_AC_BE:
> + case QID_AC_VO:
> rt2x00pci_register_read(rt2x00dev, TX_CNTL_CSR, ®);
> rt2x00_set_field32(®, TX_CNTL_CSR_ABORT_TX_AC0, 1);
> rt2x00pci_register_write(rt2x00dev, TX_CNTL_CSR, reg);
> break;
> - case QID_AC_BK:
> + case QID_AC_VI:
> rt2x00pci_register_read(rt2x00dev, TX_CNTL_CSR, ®);
> rt2x00_set_field32(®, TX_CNTL_CSR_ABORT_TX_AC1, 1);
> rt2x00pci_register_write(rt2x00dev, TX_CNTL_CSR, reg);
> break;
> - case QID_AC_VI:
> + case QID_AC_BE:
> rt2x00pci_register_read(rt2x00dev, TX_CNTL_CSR, ®);
> rt2x00_set_field32(®, TX_CNTL_CSR_ABORT_TX_AC2, 1);
> rt2x00pci_register_write(rt2x00dev, TX_CNTL_CSR, reg);
> break;
> - case QID_AC_VO:
> + case QID_AC_BK:
> rt2x00pci_register_read(rt2x00dev, TX_CNTL_CSR, ®);
> rt2x00_set_field32(®, TX_CNTL_CSR_ABORT_TX_AC3, 1);
> rt2x00pci_register_write(rt2x00dev, TX_CNTL_CSR, reg);
> diff --git a/drivers/net/wireless/rt2x00/rt61pci.h b/drivers/net/wireless/rt2x00/rt61pci.h
> index afc803b..e3cd6db 100644
> --- a/drivers/net/wireless/rt2x00/rt61pci.h
> +++ b/drivers/net/wireless/rt2x00/rt61pci.h
> @@ -784,25 +784,25 @@ struct hw_pairwise_ta_entry {
> */
>
> /*
> - * AC0_BASE_CSR: AC_BK base address.
> + * AC0_BASE_CSR: AC_VO base address.
> */
> #define AC0_BASE_CSR 0x3400
> #define AC0_BASE_CSR_RING_REGISTER FIELD32(0xffffffff)
>
> /*
> - * AC1_BASE_CSR: AC_BE base address.
> + * AC1_BASE_CSR: AC_VI base address.
> */
> #define AC1_BASE_CSR 0x3404
> #define AC1_BASE_CSR_RING_REGISTER FIELD32(0xffffffff)
>
> /*
> - * AC2_BASE_CSR: AC_VI base address.
> + * AC2_BASE_CSR: AC_BE base address.
> */
> #define AC2_BASE_CSR 0x3408
> #define AC2_BASE_CSR_RING_REGISTER FIELD32(0xffffffff)
>
> /*
> - * AC3_BASE_CSR: AC_VO base address.
> + * AC3_BASE_CSR: AC_BK base address.
> */
> #define AC3_BASE_CSR 0x340c
> #define AC3_BASE_CSR_RING_REGISTER FIELD32(0xffffffff)
> @@ -814,7 +814,7 @@ struct hw_pairwise_ta_entry {
> #define MGMT_BASE_CSR_RING_REGISTER FIELD32(0xffffffff)
>
> /*
> - * TX_RING_CSR0: TX Ring size for AC_BK, AC_BE, AC_VI, AC_VO.
> + * TX_RING_CSR0: TX Ring size for AC_VO, AC_VI, AC_BE, AC_BK.
> */
> #define TX_RING_CSR0 0x3418
> #define TX_RING_CSR0_AC0_RING_SIZE FIELD32(0x000000ff)
> @@ -833,10 +833,10 @@ struct hw_pairwise_ta_entry {
>
> /*
> * AIFSN_CSR: AIFSN for each EDCA AC.
> - * AIFSN0: For AC_BK.
> - * AIFSN1: For AC_BE.
> - * AIFSN2: For AC_VI.
> - * AIFSN3: For AC_VO.
> + * AIFSN0: For AC_VO.
> + * AIFSN1: For AC_VI.
> + * AIFSN2: For AC_BE.
> + * AIFSN3: For AC_BK.
> */
> #define AIFSN_CSR 0x3420
> #define AIFSN_CSR_AIFSN0 FIELD32(0x0000000f)
> @@ -846,10 +846,10 @@ struct hw_pairwise_ta_entry {
>
> /*
> * CWMIN_CSR: CWmin for each EDCA AC.
> - * CWMIN0: For AC_BK.
> - * CWMIN1: For AC_BE.
> - * CWMIN2: For AC_VI.
> - * CWMIN3: For AC_VO.
> + * CWMIN0: For AC_VO.
> + * CWMIN1: For AC_VI.
> + * CWMIN2: For AC_BE.
> + * CWMIN3: For AC_BK.
> */
> #define CWMIN_CSR 0x3424
> #define CWMIN_CSR_CWMIN0 FIELD32(0x0000000f)
> @@ -859,10 +859,10 @@ struct hw_pairwise_ta_entry {
>
> /*
> * CWMAX_CSR: CWmax for each EDCA AC.
> - * CWMAX0: For AC_BK.
> - * CWMAX1: For AC_BE.
> - * CWMAX2: For AC_VI.
> - * CWMAX3: For AC_VO.
> + * CWMAX0: For AC_VO.
> + * CWMAX1: For AC_VI.
> + * CWMAX2: For AC_BE.
> + * CWMAX3: For AC_BK.
> */
> #define CWMAX_CSR 0x3428
> #define CWMAX_CSR_CWMAX0 FIELD32(0x0000000f)
> @@ -883,14 +883,14 @@ struct hw_pairwise_ta_entry {
>
> /*
> * TX_CNTL_CSR: KICK/Abort TX.
> - * KICK_TX_AC0: For AC_BK.
> - * KICK_TX_AC1: For AC_BE.
> - * KICK_TX_AC2: For AC_VI.
> - * KICK_TX_AC3: For AC_VO.
> - * ABORT_TX_AC0: For AC_BK.
> - * ABORT_TX_AC1: For AC_BE.
> - * ABORT_TX_AC2: For AC_VI.
> - * ABORT_TX_AC3: For AC_VO.
> + * KICK_TX_AC0: For AC_VO.
> + * KICK_TX_AC1: For AC_VI.
> + * KICK_TX_AC2: For AC_BE.
> + * KICK_TX_AC3: For AC_BK.
> + * ABORT_TX_AC0: For AC_VO.
> + * ABORT_TX_AC1: For AC_VI.
> + * ABORT_TX_AC2: For AC_BE.
> + * ABORT_TX_AC3: For AC_BK.
> */
> #define TX_CNTL_CSR 0x3430
> #define TX_CNTL_CSR_KICK_TX_AC0 FIELD32(0x00000001)
> @@ -1010,18 +1010,18 @@ struct hw_pairwise_ta_entry {
> #define E2PROM_CSR_LOAD_STATUS FIELD32(0x00000040)
>
> /*
> - * AC_TXOP_CSR0: AC_BK/AC_BE TXOP register.
> - * AC0_TX_OP: For AC_BK, in unit of 32us.
> - * AC1_TX_OP: For AC_BE, in unit of 32us.
> + * AC_TXOP_CSR0: AC_VO/AC_VI TXOP register.
> + * AC0_TX_OP: For AC_VO, in unit of 32us.
> + * AC1_TX_OP: For AC_VI, in unit of 32us.
> */
> #define AC_TXOP_CSR0 0x3474
> #define AC_TXOP_CSR0_AC0_TX_OP FIELD32(0x0000ffff)
> #define AC_TXOP_CSR0_AC1_TX_OP FIELD32(0xffff0000)
>
> /*
> - * AC_TXOP_CSR1: AC_VO/AC_VI TXOP register.
> - * AC2_TX_OP: For AC_VI, in unit of 32us.
> - * AC3_TX_OP: For AC_VO, in unit of 32us.
> + * AC_TXOP_CSR1: AC_BE/AC_BK TXOP register.
> + * AC2_TX_OP: For AC_BE, in unit of 32us.
> + * AC3_TX_OP: For AC_BK, in unit of 32us.
> */
> #define AC_TXOP_CSR1 0x3478
> #define AC_TXOP_CSR1_AC2_TX_OP FIELD32(0x0000ffff)
> diff --git a/drivers/net/wireless/rt2x00/rt73usb.h b/drivers/net/wireless/rt2x00/rt73usb.h
> index 1315ce5..9f6b470 100644
> --- a/drivers/net/wireless/rt2x00/rt73usb.h
> +++ b/drivers/net/wireless/rt2x00/rt73usb.h
> @@ -689,10 +689,10 @@ struct hw_pairwise_ta_entry {
>
> /*
> * AIFSN_CSR: AIFSN for each EDCA AC.
> - * AIFSN0: For AC_BK.
> - * AIFSN1: For AC_BE.
> - * AIFSN2: For AC_VI.
> - * AIFSN3: For AC_VO.
> + * AIFSN0: For AC_VO.
> + * AIFSN1: For AC_VI.
> + * AIFSN2: For AC_BE.
> + * AIFSN3: For AC_BK.
> */
> #define AIFSN_CSR 0x0400
> #define AIFSN_CSR_AIFSN0 FIELD32(0x0000000f)
> @@ -702,10 +702,10 @@ struct hw_pairwise_ta_entry {
>
> /*
> * CWMIN_CSR: CWmin for each EDCA AC.
> - * CWMIN0: For AC_BK.
> - * CWMIN1: For AC_BE.
> - * CWMIN2: For AC_VI.
> - * CWMIN3: For AC_VO.
> + * CWMIN0: For AC_VO.
> + * CWMIN1: For AC_VI.
> + * CWMIN2: For AC_BE.
> + * CWMIN3: For AC_BK.
> */
> #define CWMIN_CSR 0x0404
> #define CWMIN_CSR_CWMIN0 FIELD32(0x0000000f)
> @@ -715,10 +715,10 @@ struct hw_pairwise_ta_entry {
>
> /*
> * CWMAX_CSR: CWmax for each EDCA AC.
> - * CWMAX0: For AC_BK.
> - * CWMAX1: For AC_BE.
> - * CWMAX2: For AC_VI.
> - * CWMAX3: For AC_VO.
> + * CWMAX0: For AC_VO.
> + * CWMAX1: For AC_VI.
> + * CWMAX2: For AC_BE.
> + * CWMAX3: For AC_BK.
> */
> #define CWMAX_CSR 0x0408
> #define CWMAX_CSR_CWMAX0 FIELD32(0x0000000f)
> @@ -727,18 +727,18 @@ struct hw_pairwise_ta_entry {
> #define CWMAX_CSR_CWMAX3 FIELD32(0x0000f000)
>
> /*
> - * AC_TXOP_CSR0: AC_BK/AC_BE TXOP register.
> - * AC0_TX_OP: For AC_BK, in unit of 32us.
> - * AC1_TX_OP: For AC_BE, in unit of 32us.
> + * AC_TXOP_CSR0: AC_VO/AC_VI TXOP register.
> + * AC0_TX_OP: For AC_VO, in unit of 32us.
> + * AC1_TX_OP: For AC_VI, in unit of 32us.
> */
> #define AC_TXOP_CSR0 0x040c
> #define AC_TXOP_CSR0_AC0_TX_OP FIELD32(0x0000ffff)
> #define AC_TXOP_CSR0_AC1_TX_OP FIELD32(0xffff0000)
>
> /*
> - * AC_TXOP_CSR1: AC_VO/AC_VI TXOP register.
> - * AC2_TX_OP: For AC_VI, in unit of 32us.
> - * AC3_TX_OP: For AC_VO, in unit of 32us.
> + * AC_TXOP_CSR1: AC_BE/AC_BK TXOP register.
> + * AC2_TX_OP: For AC_BE, in unit of 32us.
> + * AC3_TX_OP: For AC_BK, in unit of 32us.
> */
> #define AC_TXOP_CSR1 0x0410
> #define AC_TXOP_CSR1_AC2_TX_OP FIELD32(0x0000ffff)
>
^ permalink raw reply
* DFS development roadmap 2010-12-14
From: Luis R. Rodriguez @ 2010-12-14 18:39 UTC (permalink / raw)
To: linux-wireless
Cc: linux-kernel, Vipin Mehta, Gery Kahn, Michael Green,
wireless-regdb, Tevfik Yucek, Susinder Gulasekaran, Rich Mosko,
Mahboob Alem, Madhan Jaganathan, Sundar Sankaran
Note: this is a public e-mail
We had a good IRC session, and were able to at least come up with a
development roadmap to focus on:
http://wireless.kernel.org/en/developers/DFS#Development_roadmap
Some good news is we have a raise in hands by TI to participate in the
development. Things we need to iron out for each development step:
1) Map countries to a DFS region bit
The plan is to map each country in db.txt from wireless-regdb to a DFS
region. There are only 3 known DFS regions:
* FCC
* ETSI
* JP/Telco
Michael, David, do you guys expect this to change any time soon (say
10 years or so)? Anyone else know?
I can work on this.
2) Get DFS region to the driver through cfg80211
This is pretty straight forward once we have 1) done, and I can work on it.
3) Where do we stuff DFS parameters for each region
One idea is to use the request_firmware() API as it is expected these
parameters will be region and chipset specific. This requires a good
review of all chipsets and with priority on the ones who have vendors
or we have documentation for that we want to support in existing
drivers. Today this means Atheros hardware and TI hardware.
Vipin, I am curios how you intend on programming DFS with ath6kl (if
this gets added, we should if TI is doing it ;) ), do you stuff all
DFS parameters in firmware?
Gery, how does TI do it?Most of the work here will involve hooking
things up for mac80211 / cfg80211 / nl80211. This will consists of
receiving DFS events from the driver for radar detection, keeping the
NOL list, sending it to hostapd, choosing a random channel, and
sending CSA to STAs.
4) Program hw DFS parameters
ath9k_hw already has some knobs for this, Felix already submitted some
of these changes upstream. Most of the work required here will take
place on ath9k.
5) DFS events
Most of the work here will involve hooking things up for mac80211 /
cfg80211 / nl80211. This will consists of receiving DFS events from
the driver for radar detection, keeping the NOL list, sending it to
hostapd, choosing a random channel, and sending CSA to STAs. We can
worry about this eventually, once we get the above 4 steps done.
Luis
^ permalink raw reply
* Re: [PATCH 14/17] rt2x00: Fix WMM Queue naming
From: Ivo Van Doorn @ 2010-12-14 18:44 UTC (permalink / raw)
To: Helmut Schaa
Cc: John W. Linville, linux-wireless, users, Johannes Stezenbach,
jay.weihung
In-Reply-To: <201012141849.48488.helmut.schaa@googlemail.com>
Hi,
>> The Queue names were incorrectly copied from the legacy drivers,
>> as a result the queue names were inversed to what was expected.
>>
>> This renames the queues using this mapping:
>> QID_AC_BK -> QID_AC_VO (priority 0)
>> QID_AC_BE -> QID_AC_VI (priority 1)
>> QID_AC_VI -> QID_AC_BE (priority 2)
>> QID_AC_VO -> QID_AC_BK (priority 3)
>>
>> Note that this was a naming problem only, which didn't affect
>> the assignment of frames to their respective queues.
>>
>> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
>
> Ivo, due to the latest info from Ralink I'd say we should drop this patch
> and instead introduce a mac80211_to_rt2x00_qid mapper that maps from
> ieee80211_ac_numbers to data_queue_qid.
>
> This patch doesn't cause any harm, but we would have to revert it partly
> if we introduce the queue mapping as needed by the rt2x00 devices.
I don't agree, this patch can safely be applied, since the mapping
is in the endpoint assignment, rather the register value usage,
I think the more optimal solution is fixing rt2x00usb_assign_endpoints.
In there it currently assigns endpoints assuming the first endpoint
is the highest priority, while we should be able to simply swap that
to invert the logic.
Ivo
^ permalink raw reply
* Re: [PATCH 14/17] rt2x00: Fix WMM Queue naming
From: Helmut Schaa @ 2010-12-14 18:57 UTC (permalink / raw)
To: Ivo Van Doorn
Cc: John W. Linville, linux-wireless, users, Johannes Stezenbach,
jay.weihung
In-Reply-To: <AANLkTimMGtZsY-ZhbR4Nt7Mh4W8KSAfAhbe3yF07ezaO@mail.gmail.com>
Am Dienstag, 14. Dezember 2010 schrieb Ivo Van Doorn:
> Hi,
>
> >> The Queue names were incorrectly copied from the legacy drivers,
> >> as a result the queue names were inversed to what was expected.
> >>
> >> This renames the queues using this mapping:
> >> QID_AC_BK -> QID_AC_VO (priority 0)
> >> QID_AC_BE -> QID_AC_VI (priority 1)
> >> QID_AC_VI -> QID_AC_BE (priority 2)
> >> QID_AC_VO -> QID_AC_BK (priority 3)
> >>
> >> Note that this was a naming problem only, which didn't affect
> >> the assignment of frames to their respective queues.
> >>
> >> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
> >
> > Ivo, due to the latest info from Ralink I'd say we should drop this patch
> > and instead introduce a mac80211_to_rt2x00_qid mapper that maps from
> > ieee80211_ac_numbers to data_queue_qid.
> >
> > This patch doesn't cause any harm, but we would have to revert it partly
> > if we introduce the queue mapping as needed by the rt2x00 devices.
>
> I don't agree, this patch can safely be applied, since the mapping
> is in the endpoint assignment, rather the register value usage,
> I think the more optimal solution is fixing rt2x00usb_assign_endpoints.
> In there it currently assigns endpoints assuming the first endpoint
> is the highest priority, while we should be able to simply swap that
> to invert the logic.
Ah, ok, sounds good to me, at least for USB. Do we need the same for PCI
devices?
Helmut
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox