* Re: compat-wireless-2.6.37-rc5 released
From: Luis R. Rodriguez @ 2010-12-10 16:20 UTC (permalink / raw)
To: linux-wireless; +Cc: Senthil Balasubramanian, Felix Fietkau
In-Reply-To: <AANLkTikFnb=ErjA0VeS6oekExHxT1-Mh5_wa28UqEZZ4@mail.gmail.com>
On Thu, Dec 9, 2010 at 5:08 PM, Luis R. Rodriguez <mcgrof@gmail.com> wrote:
>> 01-ath9k-OTP.patch
>> 03-ath9k-no-aggr-VO.patch
>> 04-mac80211-no-aggr-VO.patch
>> 05-ath9k-Reintroduce-modparam-to-enable-btcoex.patch
I'll skip this one, better synch the modparam with a kernel release
rather than an update like compat-wireless.
>> 06-ath9k_hw-fix-A-MPDU-key-search-issues-on-AR9003.patch
I'm going to start sucking the reset in for a compat-wireless-2.6.37
release. Please let me know if you believe any other patches are
worthy, even if they are for other drivers, etc.
Luis
^ permalink raw reply
* [RFC] mac80211: support IBSS RSN with SW crypto
From: Johannes Berg @ 2010-12-10 16:10 UTC (permalink / raw)
To: linux-wireless@vger.kernel.org
From: Johannes Berg <johannes.berg@intel.com>
When software crypto is used, mac80211 will
support IBSS RSN, it doesn't depend on the
driver in that case.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
net/mac80211/main.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
--- wireless-testing.orig/net/mac80211/main.c 2010-12-10 17:07:22.000000000 +0100
+++ wireless-testing/net/mac80211/main.c 2010-12-10 17:08:25.000000000 +0100
@@ -517,11 +517,15 @@ struct ieee80211_hw *ieee80211_alloc_hw(
wiphy->mgmt_stypes = ieee80211_default_mgmt_stypes;
+ wiphy->privid = mac80211_wiphy_privid;
+
wiphy->flags |= WIPHY_FLAG_NETNS_OK |
WIPHY_FLAG_4ADDR_AP |
WIPHY_FLAG_4ADDR_STATION |
WIPHY_FLAG_SUPPORTS_SEPARATE_DEFAULT_KEYS;
- wiphy->privid = mac80211_wiphy_privid;
+
+ if (!ops->set_key)
+ wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
wiphy->bss_priv_size = sizeof(struct ieee80211_bss);
^ permalink raw reply
* Re: [ath9k-devel] .36 ath9k patches for .35-longterm
From: Luis R. Rodriguez @ 2010-12-10 15:56 UTC (permalink / raw)
To: Andi Kleen; +Cc: linux-wireless, ath9k-devel
In-Reply-To: <20101210093258.GA4703@basil.fritz.box>
On Fri, Dec 10, 2010 at 1:32 AM, Andi Kleen <andi@firstfloor.org> wrote:
> I sent this to the athk9 maintainers earlier, but it looks like
> Atheros' mailserver doesn't like my mailserver and I got a bounce.
> Resending to the lists.
Heh, odd.
> -Andi
>
> ----- Forwarded message from Andi Kleen <andi@firstfloor.org> -----
>
> Date: Thu, 9 Dec 2010 19:34:12 +0100
> From: Andi Kleen <andi@firstfloor.org>
> To: lrodriguez@atheros.com, nbd@openwrt.org, bjorn.smedman@venatech.se,
> mshajakhan@atheros.com, senthilkumar@atheros.com,
> vasanth@atheros.com, rmanoharan@atheros.com
> Cc: stable@kernel.org
> Subject: .36 ath9k patches for .35-longterm
> User-Agent: Mutt/1.5.20 (2009-06-14)
>
> Hi,
>
> I've been looking at the extremly large number of ath9k patches which are in the
> 2.6.36 stable queue:
>
> ath9k-add-locking-for-starting-the-pcu-on-rx.patch
> ath9k-add-locking-for-stopping-rx.patch
> ath9k-a-mpdu-rate-control-info-fix.patch
> ath9k-built-in-rate-control-a-mpdu-fix.patch
> ath9k-clean-up-fix-aggregation-session-flush.patch
> ath9k-fix-an-aggregation-start-related-race-condition.patch
> ath9k-fix-channel-flag-regd-issues-with-multiple-cards.patch
> ath9k-fix-enabling-ani-tx-monitor-after-bg-scan.patch
> ath9k-fix-incorrect-access-of-rate-flags-in-rc.patch
> ath9k-fix-power-save-race-conditions.patch
> ath9k-fix-regression-on-beacon-loss-after-bgscan.patch
> ath9k-fix-regression-which-disabled-ps-on-ath9k.patch
> ath9k-fix-regression-which-prevents-chip-sleep-after-cab-data.patch
> ath9k-fix-spurious-mic-failure-reports.patch
> ath9k-fix-timeout-on-stopping-rx-dma.patch
>
> Some of them apply to .35, but a lot of others do not and I found
> it difficult to decide which ones are suitable for 2.6.36
You mean for 2.6.35?
> and what
> their dependencies are.
>
> Could you guys please indicate:
> - Which patches are needed for 2.6.35
> - If they have additional dependencies for .35 please note the upstream
> commit in the standard format.
Eek, um OK, we'll give this a some good review and get back to you.
I'd like to also point out we have a few directories in the
compat-wireless-2.6.36.y branch which are used to add extra patches on
top of the stable 2.6.36.y kernel release, some of them are dragging
in pending stable patches (pending-stable/ directory), some are cherry
picked patches from linux-next (linux-next-cherry-picks/) and some are
patches posted to linux-wireless which at that time had yet to be
merged into linux-next (linux-next-pending/ ). The
compat-wireless-2.6.36-5-spn.tar.bz2 release for example contains all
of these three patch series. I should not the pending-stable patches
are *all* pending-stable patches for linux-wireless and bluetooth.
http://git.kernel.org/?p=linux/kernel/git/mcgrof/compat-wireless-2.6.git;a=tree;h=refs/heads/linux-2.6.36.y;hb=refs/heads/linux-2.6.36.y
> Right now I didn't merge any ath9x patches until this is resolved.
This will take a bit of time, as some of these patches may require
manual backport and as you noted some dependencies. Given that this is
for long term we will do some work to get this to you. Its too bad we
can't get AR9003 support in there, that's a huge set of patches
though.
Luis
^ permalink raw reply
* Re: BUG: Microcode SW error detected / Frequent disconnects
From: Guy, Wey-Yi @ 2010-12-10 15:26 UTC (permalink / raw)
To: sedat.dilek@gmail.com; +Cc: Florian Kriener, linux-wireless@vger.kernel.org
In-Reply-To: <AANLkTikb1Pmk3F6BL1ewrKpQaOxrG-McxbfnfTGNcZKo@mail.gmail.com>
Hi
On Fri, 2010-12-10 at 07:27 -0700, Sedat Dilek wrote:
> On Fri, Dec 10, 2010 at 2:09 PM, Florian Kriener <florian@kriener.org> wrote:
> > Dear Intel wireless experts,
> >
> > when connecting to a certain network I always get a lot of network
> > hangs, which can sometimes be solved temporarily by reconnecting to that
> > network. The cause seems to be a microcode software error. At leat, that
> > is what dmesg shows. I attached a piece of it.
> >
> > The access point in question is a speedport w503v, which is a Telekom
> > (German ISP) branded AVM or Arcadyan dsl router. It is located in a WLAN
> > polluted area with approx. 45 networks nearby. Most of them are between
> > channels 6 and 11. The access point in question is somehow seated at
> > channel 10, which I cannot change.
> >
> > % uname -a
> > Linux nanuk 2.6.36-trunk-amd64 #1 SMP Wed Oct 27 14:28:29 UTC 2010
> > x86_64 GNU/Linux
> >
>
> Guessing you are using a Debian kernel from experimental.
> 'uname -a' is normally not enough, we need the Debian version string.
> (As there was only one 2.6.36 kernel, it is clear which version you have).
> There is now a 2.6.37-rc4 in experimental, please try that.
> bwh has prepared -rc5 a few hours ago and it will be uploaded to
> experimental soonish.
> (You check out from SVN and build by yourself or wait, see
> instructions on Debian kernel team wiki).
>
> Another possibility is you use compat-wireless stable or bleeding-edge
> (in addition to your host 2.6.36 kernel).
>
> All these "experiments" only to see if it is a problem in 2.6.36.
> (Might be the Intel developers know where the problem is exactly).
>
> Next question is: You have latest firmware file(s) from non-free?
> (Or look at Intel's iwlwifi download website).
>
> BTW, sometimes a full dmesg log is more helpful than a truncated one.
Looks like you have 5000 NIC device based on the firmware version.
Please let me know the problem still happen in 2.6.36. If does, we can
look into possible firmware problem
Thanks
Wey
^ permalink raw reply
* Re: [PATCH] mac80211: Fix deadlock in ieee80211_do_stop.
From: Tejun Heo @ 2010-12-10 15:11 UTC (permalink / raw)
To: Ben Greear; +Cc: Johannes Berg, Luis R. Rodriguez, linux-wireless
In-Reply-To: <4D0156F6.4000306@candelatech.com>
Hello, Ben.
On 12/09/2010 11:23 PM, Ben Greear wrote:
> I saw a brief hang today, and did a sysrq-t, and then saw the timer
> printout you added here. But, I think that was caused by sysrq-t.
> The system recovered and ran fine.
It would be nice if you turn on printk timestamp. How brief is brief?
Can you please turn on printk timestamp? @115200, the dump would have
taken ~25 seconds so yes it was mostly caused by sysrq-t dump. In the
dump, iface_work is at the same position in R state. It looks like
the ifmgd->mtx. Can you please confirm this with gdb? This would
only happen if the lock is highly contended. Would this be the case
Johaness?
> The second time (after several hours of rebooting), the hang was worse
> and the system ran OOM after maybe 30 seconds. I did a sysrq-t then.
>
> I see quite a few printouts from your debug message, but all of them
> after things start going OOM, and after sysrq-t.
>
> Here's the console capture:
>
> http://www.candelatech.com/~greearb/minicom_ath9k_log4.txt
>
> Let me know if you need more traces like this if I hit it again.
I don't know the code very well but it looks very suspicious. A task
ends up trying to flush a work which can run for extended period of
time during which memory is aggressively used for buffering (looks
like skb's are piling up without any limit), which is likely to
further slow down other stuff. This sounds like an extremely fragile
mechanism to me. When the work is being constantly being rescheduled,
cancel ends up waiting one fewer time then flush. If the work is
running and pending, flush waits for the pending one to finish, while
cancel would kill the pending one and waits for only the current one
to finish. I think it could be that that difference is acting as a
threshold between going bonkers and staying alive.
Can you please test whether the following patch makes any difference?
If flush_work() is misbehaving, the following wouldn't fix anything
but if this livelock is indeed caused by iface_work running too long,
the problem should go away.
One way or the other, Johannes, please consider fixing the behavior
here. It's way too fragile.
Thanks.
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 7aa8559..86bdfdd 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -723,6 +723,7 @@ static void ieee80211_iface_work(struct work_struct *work)
struct sk_buff *skb;
struct sta_info *sta;
struct ieee80211_ra_tid *ra_tid;
+ unsigned int cnt = 0;
if (!ieee80211_sdata_running(sdata))
return;
@@ -825,6 +826,11 @@ static void ieee80211_iface_work(struct work_struct *work)
}
kfree_skb(skb);
+
+ if (++cnt > 100) {
+ ieee80211_queue_work(&local->hw, work);
+ break;
+ }
}
/* then other type-dependent work */
^ permalink raw reply related
* [RFC v2 0/2] implementation of scheduled scan
From: luciano.coelho @ 2010-12-10 15:07 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes
From: Luciano Coelho <luciano.coelho@nokia.com>
Hi,
So, here's my second RFC for the scheduled scan implementation (which we used
to call periodic scan earlier). I have applied all Johannes's comments, except
for two things:
* I kept the return value in the sched_scan_stop chain, because, at least with
wl12xx, the call can fail (due to OOM for instance). I think it's cleaner
this way.
* I have not implemented support for passing the scan interval from userspace
yet. I'll work on it next week and send it as a separate patch.
One of the main things you'll notice is that I merged the patches into two
patches instead of 15, which caused some people to whip me before. :P
Please give me some comments, if you have the time (and bother).
Cheers,
Luca.
Luciano Coelho (2):
cfg80211/nl80211: add support for scheduled scans
mac80211: add support for HW scheduled scan
include/linux/nl80211.h | 9 ++
include/net/cfg80211.h | 48 ++++++++
include/net/mac80211.h | 40 +++++++
net/mac80211/cfg.c | 26 ++++
net/mac80211/driver-ops.h | 30 +++++
net/mac80211/driver-trace.h | 63 ++++++++++
net/mac80211/ieee80211_i.h | 8 ++
net/mac80211/rx.c | 4 +-
net/mac80211/scan.c | 80 +++++++++++++
net/wireless/core.c | 6 +
net/wireless/core.h | 3 +
net/wireless/nl80211.c | 271 +++++++++++++++++++++++++++++++++++++++++++
net/wireless/nl80211.h | 6 +
net/wireless/scan.c | 18 +++
14 files changed, 611 insertions(+), 1 deletions(-)
^ permalink raw reply
* [RFC v2 1/2] cfg80211/nl80211: add support for scheduled scans
From: luciano.coelho @ 2010-12-10 15:07 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes
In-Reply-To: <1291993632-6921-1-git-send-email-luciano.coelho@nokia.com>
From: Luciano Coelho <luciano.coelho@nokia.com>
Implement new functionality for scheduled scan offload. With this feature we
can scan automatically for specific SSIDs (or any if not specified) at
certain intervals.
The idea is that the hardware can perform scan automatically and filter on
desired results without waking up the host unnecessarily.
Add NL80211_CMD_START_SCHED_SCAN and NL80211_CMD_STOP_SCHED_SCAN
commands to the nl80211 interface. When results are available they are
reported by NL80211_CMD_SCHED_SCAN_RESULTS events.
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
---
include/linux/nl80211.h | 9 ++
include/net/cfg80211.h | 48 +++++++++
net/wireless/core.c | 6 +
net/wireless/core.h | 3 +
net/wireless/nl80211.c | 271 +++++++++++++++++++++++++++++++++++++++++++++++
net/wireless/nl80211.h | 6 +
net/wireless/scan.c | 18 +++
7 files changed, 361 insertions(+), 0 deletions(-)
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h
index 3804212..4571a90 100644
--- a/include/linux/nl80211.h
+++ b/include/linux/nl80211.h
@@ -199,6 +199,11 @@
* @NL80211_CMD_SCAN_ABORTED: scan was aborted, for unspecified reasons,
* partial scan results may be available
*
+ * @NL80211_CMD_START_SCHED_SCAN: start a periodic scan
+ * @NL80211_CMD_STOP_SCHED_SCAN: stop a periodic scan
+ * @NL80211_CMD_SCHED_SCAN_RESULTS: there are periodic scan results
+ * available.
+ *
* @NL80211_CMD_GET_SURVEY: get survey resuls, e.g. channel occupation
* or noise level
* @NL80211_CMD_NEW_SURVEY_RESULTS: survey data notification (as a reply to
@@ -508,6 +513,10 @@ enum nl80211_commands {
NL80211_CMD_JOIN_MESH,
NL80211_CMD_LEAVE_MESH,
+ NL80211_CMD_START_SCHED_SCAN,
+ NL80211_CMD_STOP_SCHED_SCAN,
+ NL80211_CMD_SCHED_SCAN_RESULTS,
+
/* add new commands above here */
/* used to define NL80211_CMD_MAX below */
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 0d59799..ff2e8fe 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -741,6 +741,33 @@ struct cfg80211_scan_request {
};
/**
+ * struct cfg80211_sched_scan_request - periodic scan request description
+ *
+ * @ssids: SSIDs to report (other SSIDs will be filtered out)
+ * @n_ssids: number of SSIDs
+ * @n_channels: total number of channels to scan
+ * @ie: optional information element(s) to add into Probe Request or %NULL
+ * @ie_len: length of ie in octets
+ * @wiphy: the wiphy this was for
+ * @dev: the interface
+ * @channels: channels to scan
+ */
+struct cfg80211_sched_scan_request {
+ struct cfg80211_ssid *ssids;
+ int n_ssids;
+ u32 n_channels;
+ const u8 *ie;
+ size_t ie_len;
+
+ /* internal */
+ struct wiphy *wiphy;
+ struct net_device *dev;
+
+ /* keep last */
+ struct ieee80211_channel *channels[0];
+};
+
+/**
* enum cfg80211_signal_type - signal type
*
* @CFG80211_SIGNAL_TYPE_NONE: no signal strength information available
@@ -1173,6 +1200,8 @@ struct cfg80211_pmksa {
* @set_power_mgmt: Configure WLAN power management. A timeout value of -1
* allows the driver to adjust the dynamic ps timeout value.
* @set_cqm_rssi_config: Configure connection quality monitor RSSI threshold.
+ * @sched_scan_start: Tell the driver to start a periodic scan.
+ * @sched_scan_stop: Tell the driver to stop an ongoing periodic scan.
*
* @mgmt_frame_register: Notify driver that a management frame type was
* registered. Note that this callback may not sleep, and cannot run
@@ -1351,6 +1380,12 @@ struct cfg80211_ops {
int (*set_antenna)(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant);
int (*get_antenna)(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant);
+
+ int (*sched_scan_start)(struct wiphy *wiphy,
+ struct net_device *dev,
+ struct cfg80211_sched_scan_request *request);
+ int (*sched_scan_stop)(struct wiphy *wiphy,
+ struct net_device *dev);
};
/*
@@ -1393,6 +1428,7 @@ struct cfg80211_ops {
* control port protocol ethertype. The device also honours the
* control_port_no_encrypt flag.
* @WIPHY_FLAG_IBSS_RSN: The device supports IBSS RSN.
+ * @WIPHY_FLAG_SCHED_SCAN: The device supports scheduled scans
*/
enum wiphy_flags {
WIPHY_FLAG_CUSTOM_REGULATORY = BIT(0),
@@ -1404,6 +1440,7 @@ enum wiphy_flags {
WIPHY_FLAG_4ADDR_STATION = BIT(6),
WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7),
WIPHY_FLAG_IBSS_RSN = BIT(8),
+ WIPHY_FLAG_SUPPORTS_SCHED_SCAN = BIT(9),
};
struct mac_address {
@@ -1457,6 +1494,8 @@ struct ieee80211_txrx_stypes {
* @max_scan_ie_len: maximum length of user-controlled IEs device can
* add to probe request frames transmitted during a scan, must not
* include fixed IEs like supported rates
+ * @max_sched_scan_ssids: maximum number of SSIDs the device can use in
+ * periodic scans
* @coverage_class: current coverage class
* @fw_version: firmware version for ethtool reporting
* @hw_version: hardware version for ethtool reporting
@@ -1493,6 +1532,8 @@ struct wiphy {
u8 max_scan_ssids;
u16 max_scan_ie_len;
+ u8 max_sched_scan_ssids;
+
int n_cipher_suites;
const u32 *cipher_suites;
@@ -2170,6 +2211,13 @@ int cfg80211_wext_siwpmksa(struct net_device *dev,
void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted);
/**
+ * cfg80211_sched_scan_results - notify that new scan results are available
+ *
+ * @request: the corresponding periodic scan request
+ */
+void cfg80211_sched_scan_results(struct wiphy *wiphy);
+
+/**
* cfg80211_inform_bss_frame - inform cfg80211 of a received BSS frame
*
* @wiphy: the wiphy reporting the BSS
diff --git a/net/wireless/core.c b/net/wireless/core.c
index 79772fc..241a106 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -365,6 +365,7 @@ struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv)
spin_lock_init(&rdev->bss_lock);
INIT_LIST_HEAD(&rdev->bss_list);
INIT_WORK(&rdev->scan_done_wk, __cfg80211_scan_done);
+ INIT_WORK(&rdev->sched_scan_wk, __cfg80211_sched_scan_results);
#ifdef CONFIG_CFG80211_WEXT
rdev->wiphy.wext = &cfg80211_wext_handler;
@@ -647,6 +648,11 @@ static void wdev_cleanup_work(struct work_struct *work)
___cfg80211_scan_done(rdev, true);
}
+ if (rdev->sched_scan_req &&
+ rdev->sched_scan_req->dev == wdev->netdev) {
+ nl80211_sched_scan_stopped(rdev, wdev->netdev);
+ }
+
cfg80211_unlock_rdev(rdev);
mutex_lock(&rdev->devlist_mtx);
diff --git a/net/wireless/core.h b/net/wireless/core.h
index 743203b..0d35692 100644
--- a/net/wireless/core.h
+++ b/net/wireless/core.h
@@ -60,8 +60,10 @@ struct cfg80211_registered_device {
struct rb_root bss_tree;
u32 bss_generation;
struct cfg80211_scan_request *scan_req; /* protected by RTNL */
+ struct cfg80211_sched_scan_request *sched_scan_req;
unsigned long suspend_at;
struct work_struct scan_done_wk;
+ struct work_struct sched_scan_wk;
#ifdef CONFIG_NL80211_TESTMODE
struct genl_info *testmode_info;
@@ -396,6 +398,7 @@ void cfg80211_sme_rx_auth(struct net_device *dev, const u8 *buf, size_t len);
void cfg80211_sme_disassoc(struct net_device *dev, int idx);
void __cfg80211_scan_done(struct work_struct *wk);
void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev, bool leak);
+void __cfg80211_sched_scan_results(struct work_struct *wk);
void cfg80211_upload_connect_keys(struct wireless_dev *wdev);
int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
struct net_device *dev, enum nl80211_iftype ntype,
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index c3f80e5..c8331a5 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -683,6 +683,8 @@ static int nl80211_send_wiphy(struct sk_buff *msg, u32 pid, u32 seq, int flags,
}
CMD(set_channel, SET_CHANNEL);
CMD(set_wds_peer, SET_WDS_PEER);
+ if (dev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN)
+ CMD(sched_scan_start, START_SCHED_SCAN);
#undef CMD
@@ -3106,6 +3108,200 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
return err;
}
+static int nl80211_start_sched_scan(struct sk_buff *skb,
+ struct genl_info *info)
+{
+ struct cfg80211_sched_scan_request *request;
+ struct cfg80211_registered_device *rdev = info->user_ptr[0];
+ struct net_device *dev = info->user_ptr[1];
+ struct cfg80211_ssid *ssid;
+ struct ieee80211_channel *channel;
+ struct nlattr *attr;
+ struct wiphy *wiphy;
+ int err, tmp, n_ssids = 0, n_channels, i;
+ enum ieee80211_band band;
+ size_t ie_len;
+
+ if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE]))
+ return -EINVAL;
+
+ printk(KERN_DEBUG "nl80211_start_sched_scan\n");
+
+ if (!rdev->ops->sched_scan_start) {
+ return -EOPNOTSUPP;
+ }
+
+ if (rdev->sched_scan_req) {
+ return -EINPROGRESS;
+ }
+
+ wiphy = &rdev->wiphy;
+
+ if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]) {
+ n_channels = validate_scan_freqs(
+ info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]);
+ if (!n_channels)
+ return -EINVAL;
+ } else {
+ n_channels = 0;
+
+ for (band = 0; band < IEEE80211_NUM_BANDS; band++)
+ if (wiphy->bands[band])
+ n_channels += wiphy->bands[band]->n_channels;
+ }
+
+ if (info->attrs[NL80211_ATTR_SCAN_SSIDS])
+ nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], tmp)
+ n_ssids++;
+
+ if (n_ssids > wiphy->max_sched_scan_ssids)
+ return -EINVAL;
+
+ if (info->attrs[NL80211_ATTR_IE])
+ ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
+ else
+ ie_len = 0;
+
+ if (ie_len > wiphy->max_scan_ie_len)
+ return -EINVAL;
+
+ request = kzalloc(sizeof(*request)
+ + sizeof(*ssid) * n_ssids
+ + sizeof(channel) * n_channels
+ + ie_len, GFP_KERNEL);
+ if (!request)
+ return -ENOMEM;
+
+ if (n_ssids)
+ request->ssids = (void *)&request->channels[n_channels];
+ request->n_ssids = n_ssids;
+ if (ie_len) {
+ if (request->ssids)
+ request->ie = (void *)(request->ssids + n_ssids);
+ else
+ request->ie = (void *)(request->channels + n_channels);
+ }
+
+ i = 0;
+ if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]) {
+ /* user specified, bail out if channel not found */
+ nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_FREQUENCIES], tmp) {
+ struct ieee80211_channel *chan;
+
+ chan = ieee80211_get_channel(wiphy, nla_get_u32(attr));
+
+ if (!chan) {
+ err = -EINVAL;
+ goto out_free;
+ }
+
+ /* ignore disabled channels */
+ if (chan->flags & IEEE80211_CHAN_DISABLED)
+ continue;
+
+ request->channels[i] = chan;
+ i++;
+ }
+ } else {
+ /* all channels */
+ for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
+ int j;
+ if (!wiphy->bands[band])
+ continue;
+ for (j = 0; j < wiphy->bands[band]->n_channels; j++) {
+ struct ieee80211_channel *chan;
+
+ chan = &wiphy->bands[band]->channels[j];
+
+ if (chan->flags & IEEE80211_CHAN_DISABLED)
+ continue;
+
+ request->channels[i] = chan;
+ i++;
+ }
+ }
+ }
+
+ if (!i) {
+ err = -EINVAL;
+ goto out_free;
+ }
+
+ request->n_channels = i;
+
+ i = 0;
+ if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) {
+ nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], tmp) {
+ if (request->ssids[i].ssid_len > IEEE80211_MAX_SSID_LEN) {
+ err = -EINVAL;
+ goto out_free;
+ }
+ memcpy(request->ssids[i].ssid, nla_data(attr), nla_len(attr));
+ request->ssids[i].ssid_len = nla_len(attr);
+ i++;
+ }
+ }
+
+ if (info->attrs[NL80211_ATTR_IE]) {
+ request->ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
+ memcpy((void *)request->ie,
+ nla_data(info->attrs[NL80211_ATTR_IE]),
+ request->ie_len);
+ }
+
+ request->dev = dev;
+ request->wiphy = &rdev->wiphy;
+
+ rdev->sched_scan_req = request;
+
+ err = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request);
+ if (!err) {
+ nl80211_send_sched_scan(rdev, dev,
+ NL80211_CMD_START_SCHED_SCAN);
+ dev_hold(dev);
+ } else {
+out_free:
+ kfree(request);
+ rdev->sched_scan_req = NULL;
+ }
+
+ return err;
+}
+
+void nl80211_sched_scan_stopped(struct cfg80211_registered_device *rdev,
+ struct net_device *dev)
+{
+ dev_put(dev);
+ kfree(rdev->sched_scan_req);
+ rdev->sched_scan_req = NULL;
+}
+
+static int nl80211_stop_sched_scan(struct sk_buff *skb,
+ struct genl_info *info)
+{
+ struct cfg80211_registered_device *rdev = info->user_ptr[0];
+ struct net_device *dev = info->user_ptr[1];
+ int err;
+
+ printk(KERN_DEBUG "nl80211_stop_sched_scan\n");
+
+ if (!rdev->ops->sched_scan_stop)
+ return -EOPNOTSUPP;
+
+ if (!rdev->sched_scan_req)
+ return 0;
+
+ err = rdev->ops->sched_scan_stop(&rdev->wiphy, dev);
+ if (err)
+ goto out;
+
+ nl80211_send_sched_scan(rdev, dev, NL80211_CMD_STOP_SCHED_SCAN);
+
+ nl80211_sched_scan_stopped(rdev, dev);
+out:
+ return err;
+}
+
static int nl80211_send_bss(struct sk_buff *msg, u32 pid, u32 seq, int flags,
struct cfg80211_registered_device *rdev,
struct wireless_dev *wdev,
@@ -4876,6 +5072,22 @@ static struct genl_ops nl80211_ops[] = {
.dumpit = nl80211_dump_scan,
},
{
+ .cmd = NL80211_CMD_START_SCHED_SCAN,
+ .doit = nl80211_start_sched_scan,
+ .policy = nl80211_policy,
+ .flags = GENL_ADMIN_PERM,
+ .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
+ NL80211_FLAG_NEED_RTNL,
+ },
+ {
+ .cmd = NL80211_CMD_STOP_SCHED_SCAN,
+ .doit = nl80211_stop_sched_scan,
+ .policy = nl80211_policy,
+ .flags = GENL_ADMIN_PERM,
+ .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
+ NL80211_FLAG_NEED_RTNL,
+ },
+ {
.cmd = NL80211_CMD_AUTHENTICATE,
.doit = nl80211_authenticate,
.policy = nl80211_policy,
@@ -5185,6 +5397,28 @@ static int nl80211_send_scan_msg(struct sk_buff *msg,
return -EMSGSIZE;
}
+static int
+nl80211_send_sched_scan_msg(struct sk_buff *msg,
+ struct cfg80211_registered_device *rdev,
+ struct net_device *netdev,
+ u32 pid, u32 seq, int flags, u32 cmd)
+{
+ void *hdr;
+
+ hdr = nl80211hdr_put(msg, pid, seq, flags, cmd);
+ if (!hdr)
+ return -1;
+
+ NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx);
+ NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex);
+
+ return genlmsg_end(msg, hdr);
+
+ nla_put_failure:
+ genlmsg_cancel(msg, hdr);
+ return -EMSGSIZE;
+}
+
void nl80211_send_scan_start(struct cfg80211_registered_device *rdev,
struct net_device *netdev)
{
@@ -5242,6 +5476,43 @@ void nl80211_send_scan_aborted(struct cfg80211_registered_device *rdev,
nl80211_scan_mcgrp.id, GFP_KERNEL);
}
+void nl80211_send_sched_scan_results(struct cfg80211_registered_device *rdev,
+ struct net_device *netdev)
+{
+ struct sk_buff *msg;
+
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
+ if (!msg)
+ return;
+
+ if (nl80211_send_sched_scan_msg(msg, rdev, netdev, 0, 0, 0,
+ NL80211_CMD_SCHED_SCAN_RESULTS) < 0) {
+ nlmsg_free(msg);
+ return;
+ }
+
+ genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0,
+ nl80211_scan_mcgrp.id, GFP_KERNEL);
+}
+
+void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev,
+ struct net_device *netdev, u32 cmd)
+{
+ struct sk_buff *msg;
+
+ msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ if (!msg)
+ return;
+
+ if (nl80211_send_sched_scan_msg(msg, rdev, netdev, 0, 0, 0, cmd) < 0) {
+ nlmsg_free(msg);
+ return;
+ }
+
+ genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0,
+ nl80211_scan_mcgrp.id, GFP_KERNEL);
+}
+
/*
* This can happen on global regulatory changes or device specific settings
* based on custom world regulatory domains.
diff --git a/net/wireless/nl80211.h b/net/wireless/nl80211.h
index 16c2f71..9e12758 100644
--- a/net/wireless/nl80211.h
+++ b/net/wireless/nl80211.h
@@ -12,6 +12,10 @@ void nl80211_send_scan_done(struct cfg80211_registered_device *rdev,
struct net_device *netdev);
void nl80211_send_scan_aborted(struct cfg80211_registered_device *rdev,
struct net_device *netdev);
+void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev,
+ struct net_device *netdev, u32 cmd);
+void nl80211_send_sched_scan_results(struct cfg80211_registered_device *rdev,
+ struct net_device *netdev);
void nl80211_send_reg_change_event(struct regulatory_request *request);
void nl80211_send_rx_auth(struct cfg80211_registered_device *rdev,
struct net_device *netdev,
@@ -91,5 +95,7 @@ void
nl80211_send_cqm_pktloss_notify(struct cfg80211_registered_device *rdev,
struct net_device *netdev, const u8 *peer,
u32 num_packets, gfp_t gfp);
+void nl80211_sched_scan_stopped(struct cfg80211_registered_device *rdev,
+ struct net_device *dev);
#endif /* __NET_WIRELESS_NL80211_H */
diff --git a/net/wireless/scan.c b/net/wireless/scan.c
index 503ebb8..e28101c 100644
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
@@ -93,6 +93,24 @@ void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted)
}
EXPORT_SYMBOL(cfg80211_scan_done);
+void __cfg80211_sched_scan_results(struct work_struct *wk)
+{
+ struct cfg80211_registered_device *rdev;
+
+ rdev = container_of(wk, struct cfg80211_registered_device,
+ sched_scan_wk);
+
+ cfg80211_lock_rdev(rdev);
+ nl80211_send_sched_scan_results(rdev, rdev->sched_scan_req->dev);
+ cfg80211_unlock_rdev(rdev);
+}
+
+void cfg80211_sched_scan_results(struct wiphy *wiphy)
+{
+ queue_work(cfg80211_wq, &wiphy_to_dev(wiphy)->sched_scan_wk);
+}
+EXPORT_SYMBOL(cfg80211_sched_scan_results);
+
static void bss_release(struct kref *ref)
{
struct cfg80211_internal_bss *bss;
--
1.7.0.4
^ permalink raw reply related
* [RFC v2 2/2] mac80211: add support for HW scheduled scan
From: luciano.coelho @ 2010-12-10 15:07 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes
In-Reply-To: <1291993632-6921-1-git-send-email-luciano.coelho@nokia.com>
From: Luciano Coelho <luciano.coelho@nokia.com>
Implement support for HW scheduled scan. The mac80211 code doesn't perform
scheduled scans itself, but calls the driver to start and stop scheduled
scans.
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
---
include/net/mac80211.h | 40 +++++++++++++++++++++
net/mac80211/cfg.c | 26 ++++++++++++++
net/mac80211/driver-ops.h | 30 ++++++++++++++++
net/mac80211/driver-trace.h | 63 +++++++++++++++++++++++++++++++++
net/mac80211/ieee80211_i.h | 8 ++++
net/mac80211/rx.c | 4 ++-
net/mac80211/scan.c | 80 +++++++++++++++++++++++++++++++++++++++++++
7 files changed, 250 insertions(+), 1 deletions(-)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index e411cf8..2378ca9 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -528,6 +528,21 @@ struct ieee80211_tx_info {
};
};
+/**
+ * ieee80211_sched_scan_ies - scheduled scan IEs
+ *
+ * This structure is used to pass the appropriate IEs to be used in scheduled
+ * scans for all bands. It contains both the IEs passed from the userspace
+ * and the ones generated by mac80211.
+ *
+ * @ie: array with the IEs for each supported band
+ * @len: array with the total length of the IEs for each band
+ */
+struct ieee80211_sched_scan_ies {
+ u8 *ie[IEEE80211_NUM_BANDS];
+ size_t len[IEEE80211_NUM_BANDS];
+};
+
static inline struct ieee80211_tx_info *IEEE80211_SKB_CB(struct sk_buff *skb)
{
return (struct ieee80211_tx_info *)skb->cb;
@@ -1650,6 +1665,15 @@ enum ieee80211_ampdu_mlme_action {
* any error unless this callback returned a negative error code.
* The callback can sleep.
*
+ * @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.
+ *
* @sw_scan_start: Notifier function that is called just before a software scan
* is started. Can be NULL, if the driver doesn't need this notification.
* The callback can sleep.
@@ -1787,6 +1811,12 @@ struct ieee80211_ops {
u32 iv32, u16 *phase1key);
int (*hw_scan)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
struct cfg80211_scan_request *req);
+ int (*sched_scan_start)(struct ieee80211_hw *hw,
+ struct ieee80211_vif *vif,
+ struct cfg80211_sched_scan_request *req,
+ struct ieee80211_sched_scan_ies *ies);
+ int (*sched_scan_stop)(struct ieee80211_hw *hw,
+ struct ieee80211_vif *vif);
void (*sw_scan_start)(struct ieee80211_hw *hw);
void (*sw_scan_complete)(struct ieee80211_hw *hw);
int (*get_stats)(struct ieee80211_hw *hw,
@@ -2369,6 +2399,16 @@ void ieee80211_wake_queues(struct ieee80211_hw *hw);
void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted);
/**
+ * 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.
+ *
+ * @hw: the hardware that is performing periodic scans
+ */
+void ieee80211_sched_scan_results(struct ieee80211_hw *hw);
+
+/**
* ieee80211_iterate_active_interfaces - iterate active interfaces
*
* This function iterates over the interfaces associated with a given
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index c30b8b7..f870c9e 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1255,6 +1255,30 @@ static int ieee80211_scan(struct wiphy *wiphy,
return ieee80211_request_scan(sdata, req);
}
+static int
+ieee80211_sched_scan_start(struct wiphy *wiphy,
+ struct net_device *dev,
+ struct cfg80211_sched_scan_request *req)
+{
+ struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+
+ if (!sdata->local->ops->sched_scan_start)
+ return -EOPNOTSUPP;
+
+ return ieee80211_request_sched_scan_start(sdata, req);
+}
+
+static int
+ieee80211_sched_scan_stop(struct wiphy *wiphy, struct net_device *dev)
+{
+ struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+
+ if (!sdata->local->ops->sched_scan_stop)
+ return -EOPNOTSUPP;
+
+ return ieee80211_request_sched_scan_stop(sdata);
+}
+
static int ieee80211_auth(struct wiphy *wiphy, struct net_device *dev,
struct cfg80211_auth_request *req)
{
@@ -1797,6 +1821,8 @@ struct cfg80211_ops mac80211_config_ops = {
.suspend = ieee80211_suspend,
.resume = ieee80211_resume,
.scan = ieee80211_scan,
+ .sched_scan_start = ieee80211_sched_scan_start,
+ .sched_scan_stop = ieee80211_sched_scan_stop,
.auth = ieee80211_auth,
.assoc = ieee80211_assoc,
.deauth = ieee80211_deauth,
diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h
index 4244554..83f2963 100644
--- a/net/mac80211/driver-ops.h
+++ b/net/mac80211/driver-ops.h
@@ -191,6 +191,36 @@ static inline int drv_hw_scan(struct ieee80211_local *local,
return ret;
}
+static inline int
+drv_sched_scan_start(struct ieee80211_local *local,
+ struct ieee80211_sub_if_data *sdata,
+ struct cfg80211_sched_scan_request *req,
+ struct ieee80211_sched_scan_ies *ies)
+{
+ int ret;
+
+ might_sleep();
+
+ trace_drv_sched_scan_start(local, sdata, req);
+ ret = local->ops->sched_scan_start(&local->hw, &sdata->vif,
+ req, ies);
+ trace_drv_return_int(local, ret);
+ return ret;
+}
+
+static inline int drv_sched_scan_stop(struct ieee80211_local *local,
+ struct ieee80211_sub_if_data *sdata)
+{
+ int ret;
+
+ might_sleep();
+
+ trace_drv_sched_scan_stop(local, sdata);
+ ret = local->ops->sched_scan_stop(&local->hw, &sdata->vif);
+ trace_drv_return_int(local, ret);
+ return ret;
+}
+
static inline void drv_sw_scan_start(struct ieee80211_local *local)
{
might_sleep();
diff --git a/net/mac80211/driver-trace.h b/net/mac80211/driver-trace.h
index c2772f2..3b19d2c 100644
--- a/net/mac80211/driver-trace.h
+++ b/net/mac80211/driver-trace.h
@@ -439,6 +439,51 @@ TRACE_EVENT(drv_hw_scan,
)
);
+TRACE_EVENT(drv_sched_scan_start,
+ TP_PROTO(struct ieee80211_local *local,
+ struct ieee80211_sub_if_data *sdata,
+ struct cfg80211_sched_scan_request *req),
+
+ TP_ARGS(local, sdata, req),
+
+ TP_STRUCT__entry(
+ LOCAL_ENTRY
+ VIF_ENTRY
+ ),
+
+ TP_fast_assign(
+ LOCAL_ASSIGN;
+ VIF_ASSIGN;
+ ),
+
+ TP_printk(
+ LOCAL_PR_FMT VIF_PR_FMT,
+ LOCAL_PR_ARG, VIF_PR_ARG
+ )
+);
+
+TRACE_EVENT(drv_sched_scan_stop,
+ TP_PROTO(struct ieee80211_local *local,
+ struct ieee80211_sub_if_data *sdata),
+
+ TP_ARGS(local, sdata),
+
+ TP_STRUCT__entry(
+ LOCAL_ENTRY
+ VIF_ENTRY
+ ),
+
+ TP_fast_assign(
+ LOCAL_ASSIGN;
+ VIF_ASSIGN;
+ ),
+
+ TP_printk(
+ LOCAL_PR_FMT VIF_PR_FMT,
+ LOCAL_PR_ARG, VIF_PR_ARG
+ )
+);
+
TRACE_EVENT(drv_sw_scan_start,
TP_PROTO(struct ieee80211_local *local),
@@ -475,6 +520,24 @@ TRACE_EVENT(drv_sw_scan_complete,
)
);
+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
+ )
+);
+
TRACE_EVENT(drv_get_stats,
TP_PROTO(struct ieee80211_local *local,
struct ieee80211_low_level_stats *stats,
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 72499fe..6f726dc 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -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
*/
enum {
SCAN_SW_SCANNING,
@@ -649,6 +650,7 @@ enum {
SCAN_OFF_CHANNEL,
SCAN_COMPLETED,
SCAN_ABORTED,
+ SCAN_SCHED_SCANNING,
};
/**
@@ -810,6 +812,7 @@ struct ieee80211_local {
enum ieee80211_band hw_scan_band;
int scan_channel_idx;
int scan_ies_len;
+ struct ieee80211_sched_scan_ies sched_scan_ies;
unsigned long leave_oper_channel_time;
enum mac80211_scan_state next_scan_state;
@@ -1109,6 +1112,11 @@ ieee80211_rx_bss_get(struct ieee80211_local *local, u8 *bssid, int freq,
void ieee80211_rx_bss_put(struct ieee80211_local *local,
struct ieee80211_bss *bss);
+/* periodic scan handling */
+int ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata,
+ struct cfg80211_sched_scan_request *req);
+int ieee80211_request_sched_scan_stop(struct ieee80211_sub_if_data *sdata);
+
/* off-channel helpers */
void ieee80211_offchannel_stop_beaconing(struct ieee80211_local *local);
void ieee80211_offchannel_stop_station(struct ieee80211_local *local);
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 2fe8f5f..b78aba9 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -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);
if (test_bit(SCAN_SW_SCANNING, &local->scanning)) {
@@ -2713,6 +2714,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
local->dot11ReceivedFragmentCount++;
if (unlikely(test_bit(SCAN_HW_SCANNING, &local->scanning) ||
+ test_bit(SCAN_SCHED_SCANNING, &local->scanning) ||
test_bit(SCAN_OFF_CHANNEL, &local->scanning)))
status->rx_flags |= IEEE80211_RX_IN_SCAN;
diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
index fb274db..419989f 100644
--- a/net/mac80211/scan.c
+++ b/net/mac80211/scan.c
@@ -15,6 +15,7 @@
#include <linux/if_arp.h>
#include <linux/rtnetlink.h>
#include <linux/pm_qos_params.h>
+#include <linux/slab.h>
#include <net/sch_generic.h>
#include <linux/slab.h>
#include <net/mac80211.h>
@@ -822,3 +823,82 @@ void ieee80211_scan_cancel(struct ieee80211_local *local)
if (finish)
__ieee80211_scan_completed_finish(&local->hw, false);
}
+
+int ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata,
+ struct cfg80211_sched_scan_request *req)
+{
+ struct ieee80211_local *local = sdata->local;
+ int ret, i;
+
+ mutex_lock(&sdata->local->mtx);
+
+ if (test_bit(SCAN_SCHED_SCANNING, &local->scanning)) {
+ ret = -EBUSY;
+ goto out;
+ }
+
+ if (!local->ops->sched_scan_start) {
+ ret = -ENOTSUPP;
+ goto out;
+ }
+
+ 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);
+
+ local->sched_scan_ies.len[i] =
+ ieee80211_build_preq_ies(local,
+ local->sched_scan_ies.ie[i],
+ req->ie, req->ie_len, i,
+ (u32) -1, 0);
+ }
+
+ ret = drv_sched_scan_start(local, sdata, req,
+ &local->sched_scan_ies);
+ if (!ret)
+ __set_bit(SCAN_SCHED_SCANNING, &local->scanning);
+out:
+ mutex_unlock(&sdata->local->mtx);
+
+ return ret;
+}
+
+int ieee80211_request_sched_scan_stop(struct ieee80211_sub_if_data *sdata)
+{
+ struct ieee80211_local *local = sdata->local;
+ int ret = 0, i;
+
+ mutex_lock(&sdata->local->mtx);
+
+ if (!local->ops->sched_scan_stop) {
+ ret = -ENOTSUPP;
+ goto out;
+ }
+
+ if (test_bit(SCAN_SCHED_SCANNING, &local->scanning)) {
+ for (i = 0; i < IEEE80211_NUM_BANDS; i++)
+ kfree(local->sched_scan_ies.ie[i]);
+
+ ret = drv_sched_scan_stop(local, sdata);
+ __clear_bit(SCAN_SCHED_SCANNING, &local->scanning);
+ }
+
+out:
+ mutex_unlock(&sdata->local->mtx);
+
+ return ret;
+}
+
+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);
+}
+EXPORT_SYMBOL(ieee80211_sched_scan_results);
--
1.7.0.4
^ permalink raw reply related
* Enhanced Roaming with eth9k/wpa_supplicant/mac80211
From: Olivier BILHAUT @ 2010-12-10 14:33 UTC (permalink / raw)
To: linux-wireless
Hello !
We're currently putting in production many wireless clients in our
Hospital (France). There is for the moment 20 linux clients on approx.
30 hp colubris access points.
I know that my request is on the todo list, but does anyone know when
roaming will be be enhanced in the mac80211 module?
It's quite uncomfortable to be juste under an AP and to be linked to
another far away, and to see web applications laggy.
I hope that you understand my English and that you understand my request.
Cheers.
--
-----------------------
*** Olivier BILHAUT
*** Service Informatique
*** Fondation de la Miséricorde
*** Email : o.bilhaut@fondation-misericorde.fr
*** Tel : 02.31.38.50.50
*** Fax : 02.31.38.50.00
^ permalink raw reply
* Re: BUG: Microcode SW error detected / Frequent disconnects
From: Sedat Dilek @ 2010-12-10 14:27 UTC (permalink / raw)
To: Florian Kriener; +Cc: linux-wireless
In-Reply-To: <201012101409.38146.florian@kriener.org>
On Fri, Dec 10, 2010 at 2:09 PM, Florian Kriener <florian@kriener.org> wrote:
> Dear Intel wireless experts,
>
> when connecting to a certain network I always get a lot of network
> hangs, which can sometimes be solved temporarily by reconnecting to that
> network. The cause seems to be a microcode software error. At leat, that
> is what dmesg shows. I attached a piece of it.
>
> The access point in question is a speedport w503v, which is a Telekom
> (German ISP) branded AVM or Arcadyan dsl router. It is located in a WLAN
> polluted area with approx. 45 networks nearby. Most of them are between
> channels 6 and 11. The access point in question is somehow seated at
> channel 10, which I cannot change.
>
> % uname -a
> Linux nanuk 2.6.36-trunk-amd64 #1 SMP Wed Oct 27 14:28:29 UTC 2010
> x86_64 GNU/Linux
>
Guessing you are using a Debian kernel from experimental.
'uname -a' is normally not enough, we need the Debian version string.
(As there was only one 2.6.36 kernel, it is clear which version you have).
There is now a 2.6.37-rc4 in experimental, please try that.
bwh has prepared -rc5 a few hours ago and it will be uploaded to
experimental soonish.
(You check out from SVN and build by yourself or wait, see
instructions on Debian kernel team wiki).
Another possibility is you use compat-wireless stable or bleeding-edge
(in addition to your host 2.6.36 kernel).
All these "experiments" only to see if it is a problem in 2.6.36.
(Might be the Intel developers know where the problem is exactly).
Next question is: You have latest firmware file(s) from non-free?
(Or look at Intel's iwlwifi download website).
BTW, sometimes a full dmesg log is more helpful than a truncated one.
- Sedat -
^ permalink raw reply
* BUG: Microcode SW error detected / Frequent disconnects
From: Florian Kriener @ 2010-12-10 13:09 UTC (permalink / raw)
To: linux-wireless
[-- Attachment #1: Type: Text/Plain, Size: 854 bytes --]
Dear Intel wireless experts,
when connecting to a certain network I always get a lot of network
hangs, which can sometimes be solved temporarily by reconnecting to that
network. The cause seems to be a microcode software error. At leat, that
is what dmesg shows. I attached a piece of it.
The access point in question is a speedport w503v, which is a Telekom
(German ISP) branded AVM or Arcadyan dsl router. It is located in a WLAN
polluted area with approx. 45 networks nearby. Most of them are between
channels 6 and 11. The access point in question is somehow seated at
channel 10, which I cannot change.
% uname -a
Linux nanuk 2.6.36-trunk-amd64 #1 SMP Wed Oct 27 14:28:29 UTC 2010
x86_64 GNU/Linux
I am not on this list, so please CC me in the replies and/or contact me
directly if I can help you somehow.
Sincerely,
Florian Kriener.
[-- Attachment #2: dmesg.log --]
[-- Type: text/x-log, Size: 36721 bytes --]
[ 14.249192] iwlagn: Intel(R) Wireless WiFi Link AGN driver for Linux, in-tree:
[ 14.249199] iwlagn: Copyright(c) 2003-2010 Intel Corporation
[ 14.249324] iwlagn 0000:03:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
[ 14.249338] iwlagn 0000:03:00.0: setting latency timer to 64
[ 14.249394] iwlagn 0000:03:00.0: Detected Intel(R) Ultimate N WiFi Link 5300 AGN, REV=0x24
[ 14.269929] iwlagn 0000:03:00.0: device EEPROM VER=0x11f, CALIB=0x4
[ 14.269964] iwlagn 0000:03:00.0: Tunable channels: 13 802.11bg, 24 802.11a channels
[ 14.270239] iwlagn 0000:03:00.0: irq 47 for MSI/MSI-X
[ 14.291466] iwlagn 0000:03:00.0: loaded firmware version 8.24.2.12
[ 14.329687] phy0: Selected rate control algorithm 'iwl-agn-rs'
[ 21.898873] ADDRCONF(NETDEV_UP): wlan0: link is not ready
[ 54.654673] wlan0: authenticate with 00:1f:3f:62:fd:83 (try 1)
[ 54.662825] wlan0: authenticated
[ 54.662854] wlan0: associate with 00:1f:3f:62:fd:83 (try 1)
[ 54.669637] wlan0: RX AssocResp from 00:1f:3f:62:fd:83 (capab=0x431 status=0 aid=1)
[ 54.669641] wlan0: associated
[ 54.677600] ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[ 65.284013] wlan0: no IPv6 routers present
[ 77.035644] iwlagn 0000:03:00.0: Aggregation not enabled for tid 0 because load = 10
[ 81.274698] iwlagn 0000:03:00.0: Microcode SW error detected. Restarting 0x2000000.
[ 81.274702] iwlagn 0000:03:00.0: Loaded firmware version: 8.24.2.12
[ 81.274717] iwlagn 0000:03:00.0: Start IWL Error Log Dump:
[ 81.274719] iwlagn 0000:03:00.0: Status: 0x000212E4, count: 5
[ 81.274863] iwlagn 0000:03:00.0: Desc Time data1 data2 line
[ 81.274866] iwlagn 0000:03:00.0: SYSASSERT (0x0005) 1947531076 0x00008035 0x00006902 1364
[ 81.274868] iwlagn 0000:03:00.0: pc blink1 blink2 ilink1 ilink2 hcmd
[ 81.274871] iwlagn 0000:03:00.0: 0x03AE8 0x039B8 0x039B8 0x008B2 0x00000 0x446004E
[ 81.274873] iwlagn 0000:03:00.0: CSR values:
[ 81.274874] iwlagn 0000:03:00.0: (2nd byte of CSR_INT_COALESCING is CSR_INT_PERIODIC_REG)
[ 81.274879] iwlagn 0000:03:00.0: CSR_HW_IF_CONFIG_REG: 0X00480302
[ 81.274884] iwlagn 0000:03:00.0: CSR_INT_COALESCING: 0X0000ff40
[ 81.274888] iwlagn 0000:03:00.0: CSR_INT: 0X00000000
[ 81.274893] iwlagn 0000:03:00.0: CSR_INT_MASK: 0X00000000
[ 81.274904] iwlagn 0000:03:00.0: CSR_FH_INT_STATUS: 0X00000000
[ 81.274908] iwlagn 0000:03:00.0: CSR_GPIO_IN: 0X00000000
[ 81.274913] iwlagn 0000:03:00.0: CSR_RESET: 0X00000000
[ 81.274918] iwlagn 0000:03:00.0: CSR_GP_CNTRL: 0X080403c5
[ 81.274923] iwlagn 0000:03:00.0: CSR_HW_REV: 0X00000024
[ 81.274927] iwlagn 0000:03:00.0: CSR_EEPROM_REG: 0X00000000
[ 81.274932] iwlagn 0000:03:00.0: CSR_EEPROM_GP: 0X90000004
[ 81.274936] iwlagn 0000:03:00.0: CSR_OTP_GP_REG: 0X00060000
[ 81.274941] iwlagn 0000:03:00.0: CSR_GIO_REG: 0X00080046
[ 81.274946] iwlagn 0000:03:00.0: CSR_GP_UCODE_REG: 0X0000553e
[ 81.274950] iwlagn 0000:03:00.0: CSR_GP_DRIVER_REG: 0X00000000
[ 81.274955] iwlagn 0000:03:00.0: CSR_UCODE_DRV_GP1: 0X00000000
[ 81.274960] iwlagn 0000:03:00.0: CSR_UCODE_DRV_GP2: 0X00000000
[ 81.274964] iwlagn 0000:03:00.0: CSR_LED_REG: 0X00000058
[ 81.274969] iwlagn 0000:03:00.0: CSR_DRAM_INT_TBL_REG: 0X88139fcc
[ 81.274973] iwlagn 0000:03:00.0: CSR_GIO_CHICKEN_BITS: 0X27800200
[ 81.274978] iwlagn 0000:03:00.0: CSR_ANA_PLL_CFG: 0X00880300
[ 81.274983] iwlagn 0000:03:00.0: CSR_HW_REV_WA_REG: 0X0001001a
[ 81.274987] iwlagn 0000:03:00.0: CSR_DBG_HPET_MEM_REG: 0Xffff0000
[ 81.274989] iwlagn 0000:03:00.0: FH register values:
[ 81.275005] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_STTS_WPTR_REG: 0X139a9600
[ 81.275020] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_RBDCB_BASE_REG: 0X0139ad60
[ 81.275033] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_WPTR: 0X000000b8
[ 81.275047] iwlagn 0000:03:00.0: FH_MEM_RCSR_CHNL0_CONFIG_REG: 0X80819104
[ 81.275060] iwlagn 0000:03:00.0: FH_MEM_RSSR_SHARED_CTRL_REG: 0X000000fc
[ 81.275073] iwlagn 0000:03:00.0: FH_MEM_RSSR_RX_STATUS_REG: 0X07030000
[ 81.275087] iwlagn 0000:03:00.0: FH_MEM_RSSR_RX_ENABLE_ERR_IRQ2DRV: 0X00000000
[ 81.275101] iwlagn 0000:03:00.0: FH_TSSR_TX_STATUS_REG: 0X07ff0001
[ 81.275116] iwlagn 0000:03:00.0: FH_TSSR_TX_ERROR_REG: 0X00000000
[ 81.275171] iwlagn 0000:03:00.0: Start IWL Event Log Dump: display last 20 entries
[ 81.275190] iwlagn 0000:03:00.0: EVT_LOGT:0059393352:0x01000110:0211
[ 81.275201] iwlagn 0000:03:00.0: EVT_LOGT:0059393358:0x00000000:0212
[ 81.275211] iwlagn 0000:03:00.0: EVT_LOGT:0059393442:0x00000000:0215
[ 81.275222] iwlagn 0000:03:00.0: EVT_LOGT:0059393446:0x00000008:0220
[ 81.275232] iwlagn 0000:03:00.0: EVT_LOGT:0059393542:0x0214001c:0206
[ 81.275243] iwlagn 0000:03:00.0: EVT_LOGT:0059393544:0x00000001:0204
[ 81.275255] iwlagn 0000:03:00.0: EVT_LOGT:0059393547:0x00000001:0219
[ 81.275266] iwlagn 0000:03:00.0: EVT_LOGT:0059393549:0x01000110:0211
[ 81.275276] iwlagn 0000:03:00.0: EVT_LOGT:0059393555:0x00000000:0212
[ 81.275287] iwlagn 0000:03:00.0: EVT_LOGT:0059393639:0x00000000:0215
[ 81.275297] iwlagn 0000:03:00.0: EVT_LOGT:0059393643:0x00000008:0220
[ 81.275307] iwlagn 0000:03:00.0: EVT_LOGT:0059394000:0x0214001c:0206
[ 81.275318] iwlagn 0000:03:00.0: EVT_LOGT:0059394002:0x00000001:0204
[ 81.275328] iwlagn 0000:03:00.0: EVT_LOGT:0059394005:0x00000001:0219
[ 81.275339] iwlagn 0000:03:00.0: EVT_LOGT:0059394007:0x01000110:0211
[ 81.275349] iwlagn 0000:03:00.0: EVT_LOGT:0059394013:0x00000000:0212
[ 81.275359] iwlagn 0000:03:00.0: EVT_LOGT:0059394097:0x00000000:0215
[ 81.275370] iwlagn 0000:03:00.0: EVT_LOGT:0059394101:0x00000008:0220
[ 81.275380] iwlagn 0000:03:00.0: EVT_LOGT:0059394412:0x0446004e:0401
[ 81.275391] iwlagn 0000:03:00.0: EVT_LOGT:0059394424:0x00000000:0125
[ 81.434036] iwlagn 0000:03:00.0: Microcode SW error detected. Restarting 0x2000000.
[ 81.434039] iwlagn 0000:03:00.0: Loaded firmware version: 8.24.2.12
[ 81.434055] iwlagn 0000:03:00.0: Start IWL Error Log Dump:
[ 81.434057] iwlagn 0000:03:00.0: Status: 0x000212E4, count: 5
[ 81.434194] iwlagn 0000:03:00.0: Desc Time data1 data2 line
[ 81.434197] iwlagn 0000:03:00.0: SYSASSERT (0x0005) 1947690316 0x00008035 0x00012902 1364
[ 81.434200] iwlagn 0000:03:00.0: pc blink1 blink2 ilink1 ilink2 hcmd
[ 81.434202] iwlagn 0000:03:00.0: 0x03AE8 0x039B8 0x039B8 0x008B2 0x00000 0x42E004E
[ 81.434204] iwlagn 0000:03:00.0: CSR values:
[ 81.434206] iwlagn 0000:03:00.0: (2nd byte of CSR_INT_COALESCING is CSR_INT_PERIODIC_REG)
[ 81.434211] iwlagn 0000:03:00.0: CSR_HW_IF_CONFIG_REG: 0X00480302
[ 81.434216] iwlagn 0000:03:00.0: CSR_INT_COALESCING: 0X0000ff40
[ 81.434220] iwlagn 0000:03:00.0: CSR_INT: 0X00000000
[ 81.434225] iwlagn 0000:03:00.0: CSR_INT_MASK: 0X00000000
[ 81.434229] iwlagn 0000:03:00.0: CSR_FH_INT_STATUS: 0X00000000
[ 81.434234] iwlagn 0000:03:00.0: CSR_GPIO_IN: 0X00000000
[ 81.434239] iwlagn 0000:03:00.0: CSR_RESET: 0X00000000
[ 81.434243] iwlagn 0000:03:00.0: CSR_GP_CNTRL: 0X080403c5
[ 81.434248] iwlagn 0000:03:00.0: CSR_HW_REV: 0X00000024
[ 81.434252] iwlagn 0000:03:00.0: CSR_EEPROM_REG: 0X00000000
[ 81.434257] iwlagn 0000:03:00.0: CSR_EEPROM_GP: 0X90000004
[ 81.434262] iwlagn 0000:03:00.0: CSR_OTP_GP_REG: 0X00060000
[ 81.434266] iwlagn 0000:03:00.0: CSR_GIO_REG: 0X00080046
[ 81.434271] iwlagn 0000:03:00.0: CSR_GP_UCODE_REG: 0X00000079
[ 81.434275] iwlagn 0000:03:00.0: CSR_GP_DRIVER_REG: 0X00000000
[ 81.434280] iwlagn 0000:03:00.0: CSR_UCODE_DRV_GP1: 0X00000000
[ 81.434285] iwlagn 0000:03:00.0: CSR_UCODE_DRV_GP2: 0X00000000
[ 81.434289] iwlagn 0000:03:00.0: CSR_LED_REG: 0X00000078
[ 81.434294] iwlagn 0000:03:00.0: CSR_DRAM_INT_TBL_REG: 0X88139fcc
[ 81.434298] iwlagn 0000:03:00.0: CSR_GIO_CHICKEN_BITS: 0X27800200
[ 81.434303] iwlagn 0000:03:00.0: CSR_ANA_PLL_CFG: 0X00880300
[ 81.434308] iwlagn 0000:03:00.0: CSR_HW_REV_WA_REG: 0X0001001a
[ 81.434312] iwlagn 0000:03:00.0: CSR_DBG_HPET_MEM_REG: 0Xffff0000
[ 81.434314] iwlagn 0000:03:00.0: FH register values:
[ 81.434327] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_STTS_WPTR_REG: 0X139a9600
[ 81.434340] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_RBDCB_BASE_REG: 0X0139ad60
[ 81.434353] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_WPTR: 0X00000050
[ 81.434366] iwlagn 0000:03:00.0: FH_MEM_RCSR_CHNL0_CONFIG_REG: 0X80819104
[ 81.434379] iwlagn 0000:03:00.0: FH_MEM_RSSR_SHARED_CTRL_REG: 0X000000fc
[ 81.434392] iwlagn 0000:03:00.0: FH_MEM_RSSR_RX_STATUS_REG: 0X07030000
[ 81.434405] iwlagn 0000:03:00.0: FH_MEM_RSSR_RX_ENABLE_ERR_IRQ2DRV: 0X00000000
[ 81.434417] iwlagn 0000:03:00.0: FH_TSSR_TX_STATUS_REG: 0X07ff0001
[ 81.434430] iwlagn 0000:03:00.0: FH_TSSR_TX_ERROR_REG: 0X00000000
[ 81.434481] iwlagn 0000:03:00.0: Start IWL Event Log Dump: display last 20 entries
[ 81.434499] iwlagn 0000:03:00.0: EVT_LOGT:0000147048:0x00000000:0212
[ 81.434509] iwlagn 0000:03:00.0: EVT_LOGT:0000148076:0x00000000:0215
[ 81.434520] iwlagn 0000:03:00.0: EVT_LOGT:0000148080:0x00000008:0220
[ 81.434530] iwlagn 0000:03:00.0: EVT_LOGT:0000148091:0x00000000:0301
[ 81.434540] iwlagn 0000:03:00.0: EVT_LOGT:0000148362:0x000000d4:0303
[ 81.434551] iwlagn 0000:03:00.0: EVT_LOGT:0000148396:0x00000007:0217
[ 81.434561] iwlagn 0000:03:00.0: EVT_LOGT:0000148397:0x0206001c:0217
[ 81.434572] iwlagn 0000:03:00.0: EVT_LOGT:0000148501:0x0207001c:0206
[ 81.434582] iwlagn 0000:03:00.0: EVT_LOGT:0000148503:0x00000001:0204
[ 81.434593] iwlagn 0000:03:00.0: EVT_LOGT:0000148506:0x00000001:0219
[ 81.434603] iwlagn 0000:03:00.0: EVT_LOGT:0000148508:0x01000111:0211
[ 81.434613] iwlagn 0000:03:00.0: EVT_LOGT:0000148513:0x00000000:0212
[ 81.434624] iwlagn 0000:03:00.0: EVT_LOGT:0000149837:0x00000000:0215
[ 81.434634] iwlagn 0000:03:00.0: EVT_LOGT:0000149841:0x00000008:0220
[ 81.434645] iwlagn 0000:03:00.0: EVT_LOGT:0000149852:0x00000000:0301
[ 81.434655] iwlagn 0000:03:00.0: EVT_LOGT:0000150123:0x000000d4:0303
[ 81.434666] iwlagn 0000:03:00.0: EVT_LOGT:0000150157:0x00000008:0217
[ 81.434676] iwlagn 0000:03:00.0: EVT_LOGT:0000150158:0x0207001c:0217
[ 81.434686] iwlagn 0000:03:00.0: EVT_LOGT:0000150558:0x042e004e:0401
[ 81.434697] iwlagn 0000:03:00.0: EVT_LOGT:0000150570:0x00000000:0125
[ 99.516346] iwlagn 0000:03:00.0: Microcode SW error detected. Restarting 0x2000000.
[ 99.516349] iwlagn 0000:03:00.0: Loaded firmware version: 8.24.2.12
[ 99.516364] iwlagn 0000:03:00.0: Start IWL Error Log Dump:
[ 99.516366] iwlagn 0000:03:00.0: Status: 0x000212E4, count: 5
[ 99.516505] iwlagn 0000:03:00.0: Desc Time data1 data2 line
[ 99.516508] iwlagn 0000:03:00.0: SYSASSERT (0x0005) 1965763517 0x00008035 0x0000C908 1364
[ 99.516511] iwlagn 0000:03:00.0: pc blink1 blink2 ilink1 ilink2 hcmd
[ 99.516513] iwlagn 0000:03:00.0: 0x03AE8 0x039B8 0x039B8 0x008B2 0x00000 0x4CF004E
[ 99.516515] iwlagn 0000:03:00.0: CSR values:
[ 99.516517] iwlagn 0000:03:00.0: (2nd byte of CSR_INT_COALESCING is CSR_INT_PERIODIC_REG)
[ 99.516522] iwlagn 0000:03:00.0: CSR_HW_IF_CONFIG_REG: 0X00480302
[ 99.516527] iwlagn 0000:03:00.0: CSR_INT_COALESCING: 0X0000ff40
[ 99.516531] iwlagn 0000:03:00.0: CSR_INT: 0X00000000
[ 99.516536] iwlagn 0000:03:00.0: CSR_INT_MASK: 0X00000000
[ 99.516541] iwlagn 0000:03:00.0: CSR_FH_INT_STATUS: 0X00000000
[ 99.516545] iwlagn 0000:03:00.0: CSR_GPIO_IN: 0X00000000
[ 99.516550] iwlagn 0000:03:00.0: CSR_RESET: 0X00000000
[ 99.516554] iwlagn 0000:03:00.0: CSR_GP_CNTRL: 0X080403c5
[ 99.516559] iwlagn 0000:03:00.0: CSR_HW_REV: 0X00000024
[ 99.516564] iwlagn 0000:03:00.0: CSR_EEPROM_REG: 0X00000000
[ 99.516568] iwlagn 0000:03:00.0: CSR_EEPROM_GP: 0X90000004
[ 99.516573] iwlagn 0000:03:00.0: CSR_OTP_GP_REG: 0X00060000
[ 99.516578] iwlagn 0000:03:00.0: CSR_GIO_REG: 0X00080046
[ 99.516582] iwlagn 0000:03:00.0: CSR_GP_UCODE_REG: 0X00001c95
[ 99.516587] iwlagn 0000:03:00.0: CSR_GP_DRIVER_REG: 0X00000000
[ 99.516591] iwlagn 0000:03:00.0: CSR_UCODE_DRV_GP1: 0X00000000
[ 99.516596] iwlagn 0000:03:00.0: CSR_UCODE_DRV_GP2: 0X00000000
[ 99.516601] iwlagn 0000:03:00.0: CSR_LED_REG: 0X00000058
[ 99.516605] iwlagn 0000:03:00.0: CSR_DRAM_INT_TBL_REG: 0X88139fcc
[ 99.516610] iwlagn 0000:03:00.0: CSR_GIO_CHICKEN_BITS: 0X27800200
[ 99.516615] iwlagn 0000:03:00.0: CSR_ANA_PLL_CFG: 0X00880300
[ 99.516619] iwlagn 0000:03:00.0: CSR_HW_REV_WA_REG: 0X0001001a
[ 99.516624] iwlagn 0000:03:00.0: CSR_DBG_HPET_MEM_REG: 0Xffff0000
[ 99.516626] iwlagn 0000:03:00.0: FH register values:
[ 99.516639] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_STTS_WPTR_REG: 0X139a9600
[ 99.516652] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_RBDCB_BASE_REG: 0X0139ad60
[ 99.516665] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_WPTR: 0X000000b0
[ 99.516678] iwlagn 0000:03:00.0: FH_MEM_RCSR_CHNL0_CONFIG_REG: 0X80819104
[ 99.516691] iwlagn 0000:03:00.0: FH_MEM_RSSR_SHARED_CTRL_REG: 0X000000fc
[ 99.516704] iwlagn 0000:03:00.0: FH_MEM_RSSR_RX_STATUS_REG: 0X07030000
[ 99.516718] iwlagn 0000:03:00.0: FH_MEM_RSSR_RX_ENABLE_ERR_IRQ2DRV: 0X00000000
[ 99.516731] iwlagn 0000:03:00.0: FH_TSSR_TX_STATUS_REG: 0X07ff0001
[ 99.516744] iwlagn 0000:03:00.0: FH_TSSR_TX_ERROR_REG: 0X00000000
[ 99.516796] iwlagn 0000:03:00.0: Start IWL Event Log Dump: display last 20 entries
[ 99.516813] iwlagn 0000:03:00.0: EVT_LOGT:0018047644:0x00000000:0212
[ 99.516824] iwlagn 0000:03:00.0: EVT_LOGT:0018047740:0x00000000:0215
[ 99.516835] iwlagn 0000:03:00.0: EVT_LOGT:0018047744:0x00000008:0220
[ 99.516845] iwlagn 0000:03:00.0: EVT_LOGT:0018047760:0x00000000:0302
[ 99.516856] iwlagn 0000:03:00.0: EVT_LOGT:0018047805:0x000000d4:0303
[ 99.516866] iwlagn 0000:03:00.0: EVT_LOGT:0018047810:0x0000006d:0217
[ 99.516877] iwlagn 0000:03:00.0: EVT_LOGT:0018047811:0x026c001c:0217
[ 99.516887] iwlagn 0000:03:00.0: EVT_LOGT:0018062298:0x026d001c:0206
[ 99.516898] iwlagn 0000:03:00.0: EVT_LOGT:0018062300:0x00000001:0204
[ 99.516908] iwlagn 0000:03:00.0: EVT_LOGT:0018062304:0x00000001:0219
[ 99.516919] iwlagn 0000:03:00.0: EVT_LOGT:0018062305:0x01000110:0211
[ 99.516929] iwlagn 0000:03:00.0: EVT_LOGT:0018062310:0x00000000:0212
[ 99.516940] iwlagn 0000:03:00.0: EVT_LOGT:0018062410:0x00000000:0215
[ 99.516951] iwlagn 0000:03:00.0: EVT_LOGT:0018062414:0x00000008:0220
[ 99.516962] iwlagn 0000:03:00.0: EVT_LOGT:0018062431:0x00000000:0302
[ 99.516972] iwlagn 0000:03:00.0: EVT_LOGT:0018062475:0x000000d4:0303
[ 99.516983] iwlagn 0000:03:00.0: EVT_LOGT:0018062480:0x0000006e:0217
[ 99.516994] iwlagn 0000:03:00.0: EVT_LOGT:0018062481:0x026d001c:0217
[ 99.517004] iwlagn 0000:03:00.0: EVT_LOGT:0018064622:0x04cf004e:0401
[ 99.517015] iwlagn 0000:03:00.0: EVT_LOGT:0018064634:0x00000000:0125
[ 99.635879] iwlagn 0000:03:00.0: Microcode SW error detected. Restarting 0x2000000.
[ 99.635882] iwlagn 0000:03:00.0: Loaded firmware version: 8.24.2.12
[ 99.635899] iwlagn 0000:03:00.0: Start IWL Error Log Dump:
[ 99.635901] iwlagn 0000:03:00.0: Status: 0x000212E4, count: 5
[ 99.636066] iwlagn 0000:03:00.0: Desc Time data1 data2 line
[ 99.636070] iwlagn 0000:03:00.0: SYSASSERT (0x0005) 1965882964 0x00008035 0x00014908 1364
[ 99.636072] iwlagn 0000:03:00.0: pc blink1 blink2 ilink1 ilink2 hcmd
[ 99.636075] iwlagn 0000:03:00.0: 0x03AE8 0x039B8 0x039B8 0x008B2 0x00000 0x42C004E
[ 99.636077] iwlagn 0000:03:00.0: CSR values:
[ 99.636078] iwlagn 0000:03:00.0: (2nd byte of CSR_INT_COALESCING is CSR_INT_PERIODIC_REG)
[ 99.636083] iwlagn 0000:03:00.0: CSR_HW_IF_CONFIG_REG: 0X00480302
[ 99.636088] iwlagn 0000:03:00.0: CSR_INT_COALESCING: 0X0000ff40
[ 99.636093] iwlagn 0000:03:00.0: CSR_INT: 0X00000000
[ 99.636098] iwlagn 0000:03:00.0: CSR_INT_MASK: 0X00000000
[ 99.636102] iwlagn 0000:03:00.0: CSR_FH_INT_STATUS: 0X00000000
[ 99.636107] iwlagn 0000:03:00.0: CSR_GPIO_IN: 0X00000000
[ 99.636112] iwlagn 0000:03:00.0: CSR_RESET: 0X00000000
[ 99.636116] iwlagn 0000:03:00.0: CSR_GP_CNTRL: 0X080403c5
[ 99.636121] iwlagn 0000:03:00.0: CSR_HW_REV: 0X00000024
[ 99.636126] iwlagn 0000:03:00.0: CSR_EEPROM_REG: 0X00000000
[ 99.636130] iwlagn 0000:03:00.0: CSR_EEPROM_GP: 0X90000004
[ 99.636134] iwlagn 0000:03:00.0: CSR_OTP_GP_REG: 0X00060000
[ 99.636139] iwlagn 0000:03:00.0: CSR_GIO_REG: 0X00080046
[ 99.636144] iwlagn 0000:03:00.0: CSR_GP_UCODE_REG: 0X00000044
[ 99.636148] iwlagn 0000:03:00.0: CSR_GP_DRIVER_REG: 0X00000000
[ 99.636153] iwlagn 0000:03:00.0: CSR_UCODE_DRV_GP1: 0X00000000
[ 99.636158] iwlagn 0000:03:00.0: CSR_UCODE_DRV_GP2: 0X00000000
[ 99.636162] iwlagn 0000:03:00.0: CSR_LED_REG: 0X00000078
[ 99.636167] iwlagn 0000:03:00.0: CSR_DRAM_INT_TBL_REG: 0X88139fcc
[ 99.636172] iwlagn 0000:03:00.0: CSR_GIO_CHICKEN_BITS: 0X27800200
[ 99.636176] iwlagn 0000:03:00.0: CSR_ANA_PLL_CFG: 0X00880300
[ 99.636181] iwlagn 0000:03:00.0: CSR_HW_REV_WA_REG: 0X0001001a
[ 99.636186] iwlagn 0000:03:00.0: CSR_DBG_HPET_MEM_REG: 0Xffff0000
[ 99.636188] iwlagn 0000:03:00.0: FH register values:
[ 99.636203] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_STTS_WPTR_REG: 0X139a9600
[ 99.636218] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_RBDCB_BASE_REG: 0X0139ad60
[ 99.636233] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_WPTR: 0X00000060
[ 99.636248] iwlagn 0000:03:00.0: FH_MEM_RCSR_CHNL0_CONFIG_REG: 0X80819104
[ 99.636263] iwlagn 0000:03:00.0: FH_MEM_RSSR_SHARED_CTRL_REG: 0X000000fc
[ 99.636278] iwlagn 0000:03:00.0: FH_MEM_RSSR_RX_STATUS_REG: 0X07030000
[ 99.636293] iwlagn 0000:03:00.0: FH_MEM_RSSR_RX_ENABLE_ERR_IRQ2DRV: 0X00000000
[ 99.636308] iwlagn 0000:03:00.0: FH_TSSR_TX_STATUS_REG: 0X07ff0001
[ 99.636323] iwlagn 0000:03:00.0: FH_TSSR_TX_ERROR_REG: 0X00000000
[ 99.636379] iwlagn 0000:03:00.0: Start IWL Event Log Dump: display last 20 entries
[ 99.636397] iwlagn 0000:03:00.0: EVT_LOGT:0000108856:0x00000000:0212
[ 99.636407] iwlagn 0000:03:00.0: EVT_LOGT:0000109787:0x00000000:0215
[ 99.636418] iwlagn 0000:03:00.0: EVT_LOGT:0000109791:0x00000008:0220
[ 99.636428] iwlagn 0000:03:00.0: EVT_LOGT:0000109803:0x00000000:0301
[ 99.636439] iwlagn 0000:03:00.0: EVT_LOGT:0000110073:0x000000d4:0303
[ 99.636449] iwlagn 0000:03:00.0: EVT_LOGT:0000110107:0x00000008:0217
[ 99.636459] iwlagn 0000:03:00.0: EVT_LOGT:0000110108:0x0207001c:0217
[ 99.636470] iwlagn 0000:03:00.0: EVT_LOGT:0000110358:0x0000010f:0106
[ 99.636480] iwlagn 0000:03:00.0: EVT_LOGT:0000110359:0x00000000:0302
[ 99.636491] iwlagn 0000:03:00.0: EVT_LOGT:0000110391:0x000000b4:0303
[ 99.636501] iwlagn 0000:03:00.0: EVT_LOGT:0000110399:0x000000c4:0322
[ 99.636511] iwlagn 0000:03:00.0: EVT_LOGT:0000110448:0x00000000:0302
[ 99.636522] iwlagn 0000:03:00.0: EVT_LOGT:0000110476:0x00000436:0323
[ 99.636532] iwlagn 0000:03:00.0: EVT_LOGT:0000110497:0x00000000:1350
[ 99.636543] iwlagn 0000:03:00.0: EVT_LOGT:0000110497:0x00000000:1351
[ 99.636553] iwlagn 0000:03:00.0: EVT_LOGT:0000110498:0x00000001:1352
[ 99.636563] iwlagn 0000:03:00.0: EVT_LOGT:0000110498:0x00000002:1353
[ 99.636574] iwlagn 0000:03:00.0: EVT_LOGT:0000110660:0x000000d4:0322
[ 99.636584] iwlagn 0000:03:00.0: EVT_LOGT:0000110924:0x042c004e:0401
[ 99.636595] iwlagn 0000:03:00.0: EVT_LOGT:0000110935:0x00000000:0125
[ 104.881792] iwlagn 0000:03:00.0: iwlagn_tx_agg_start on ra = 00:1f:3f:62:fd:83 tid = 0
[ 140.703932] iwlagn 0000:03:00.0: Microcode SW error detected. Restarting 0x2000000.
[ 140.703935] iwlagn 0000:03:00.0: Loaded firmware version: 8.24.2.12
[ 140.703950] iwlagn 0000:03:00.0: Start IWL Error Log Dump:
[ 140.703952] iwlagn 0000:03:00.0: Status: 0x000212E4, count: 5
[ 140.704094] iwlagn 0000:03:00.0: Desc Time data1 data2 line
[ 140.704097] iwlagn 0000:03:00.0: SYSASSERT (0x0005) 2006930345 0x00008035 0x00004903 1364
[ 140.704100] iwlagn 0000:03:00.0: pc blink1 blink2 ilink1 ilink2 hcmd
[ 140.704102] iwlagn 0000:03:00.0: 0x03AE8 0x039B8 0x039B8 0x008B2 0x00000 0x41D004E
[ 140.704104] iwlagn 0000:03:00.0: CSR values:
[ 140.704106] iwlagn 0000:03:00.0: (2nd byte of CSR_INT_COALESCING is CSR_INT_PERIODIC_REG)
[ 140.704111] iwlagn 0000:03:00.0: CSR_HW_IF_CONFIG_REG: 0X00480302
[ 140.704116] iwlagn 0000:03:00.0: CSR_INT_COALESCING: 0X0000ff40
[ 140.704120] iwlagn 0000:03:00.0: CSR_INT: 0X00000000
[ 140.704125] iwlagn 0000:03:00.0: CSR_INT_MASK: 0X00000000
[ 140.704130] iwlagn 0000:03:00.0: CSR_FH_INT_STATUS: 0X00000000
[ 140.704134] iwlagn 0000:03:00.0: CSR_GPIO_IN: 0X00000000
[ 140.704139] iwlagn 0000:03:00.0: CSR_RESET: 0X00000000
[ 140.704144] iwlagn 0000:03:00.0: CSR_GP_CNTRL: 0X080403c5
[ 140.704148] iwlagn 0000:03:00.0: CSR_HW_REV: 0X00000024
[ 140.704153] iwlagn 0000:03:00.0: CSR_EEPROM_REG: 0X00000000
[ 140.704158] iwlagn 0000:03:00.0: CSR_EEPROM_GP: 0X90000004
[ 140.704162] iwlagn 0000:03:00.0: CSR_OTP_GP_REG: 0X00060000
[ 140.704167] iwlagn 0000:03:00.0: CSR_GIO_REG: 0X00080046
[ 140.704172] iwlagn 0000:03:00.0: CSR_GP_UCODE_REG: 0X00005997
[ 140.704176] iwlagn 0000:03:00.0: CSR_GP_DRIVER_REG: 0X00000000
[ 140.704181] iwlagn 0000:03:00.0: CSR_UCODE_DRV_GP1: 0X00000000
[ 140.704186] iwlagn 0000:03:00.0: CSR_UCODE_DRV_GP2: 0X00000000
[ 140.704190] iwlagn 0000:03:00.0: CSR_LED_REG: 0X00000058
[ 140.704195] iwlagn 0000:03:00.0: CSR_DRAM_INT_TBL_REG: 0X88139fcc
[ 140.704200] iwlagn 0000:03:00.0: CSR_GIO_CHICKEN_BITS: 0X27800200
[ 140.704204] iwlagn 0000:03:00.0: CSR_ANA_PLL_CFG: 0X00880300
[ 140.704209] iwlagn 0000:03:00.0: CSR_HW_REV_WA_REG: 0X0001001a
[ 140.704214] iwlagn 0000:03:00.0: CSR_DBG_HPET_MEM_REG: 0Xffff0000
[ 140.704215] iwlagn 0000:03:00.0: FH register values:
[ 140.704228] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_STTS_WPTR_REG: 0X139a9600
[ 140.704242] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_RBDCB_BASE_REG: 0X0139ad60
[ 140.704255] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_WPTR: 0X000000a0
[ 140.704268] iwlagn 0000:03:00.0: FH_MEM_RCSR_CHNL0_CONFIG_REG: 0X80819104
[ 140.704281] iwlagn 0000:03:00.0: FH_MEM_RSSR_SHARED_CTRL_REG: 0X000000fc
[ 140.704294] iwlagn 0000:03:00.0: FH_MEM_RSSR_RX_STATUS_REG: 0X07030000
[ 140.704308] iwlagn 0000:03:00.0: FH_MEM_RSSR_RX_ENABLE_ERR_IRQ2DRV: 0X00000000
[ 140.704321] iwlagn 0000:03:00.0: FH_TSSR_TX_STATUS_REG: 0X07ff0001
[ 140.704334] iwlagn 0000:03:00.0: FH_TSSR_TX_ERROR_REG: 0X00000000
[ 140.704386] iwlagn 0000:03:00.0: Start IWL Event Log Dump: display last 20 entries
[ 140.704403] iwlagn 0000:03:00.0: EVT_LOGT:0041035840:0xc0000000:0228
[ 140.704414] iwlagn 0000:03:00.0: EVT_LOGT:0041035841:0x00000001:0204
[ 140.704424] iwlagn 0000:03:00.0: EVT_LOGT:0041035845:0x00000001:0214
[ 140.704435] iwlagn 0000:03:00.0: EVT_LOGT:0041035845:0x01041110:0205
[ 140.704445] iwlagn 0000:03:00.0: EVT_LOGT:0041035875:0x00000020:0208
[ 140.704456] iwlagn 0000:03:00.0: EVT_LOGT:0041035895:0x00000000:0302
[ 140.704466] iwlagn 0000:03:00.0: EVT_LOGT:0041035927:0x000000c4:0303
[ 140.704477] iwlagn 0000:03:00.0: EVT_LOGT:0041035934:0x00000001:0203
[ 140.704487] iwlagn 0000:03:00.0: EVT_LOGT:0041035938:0x0ac9001c:0206
[ 140.704498] iwlagn 0000:03:00.0: EVT_LOGT:0041035939:0x00000040:0204
[ 140.704508] iwlagn 0000:03:00.0: EVT_LOGT:0041035942:0x01040110:0211
[ 140.704519] iwlagn 0000:03:00.0: EVT_LOGT:0041036292:0x00000000:0212
[ 140.704529] iwlagn 0000:03:00.0: EVT_LOGT:0041036419:0x00000000:0215
[ 140.704540] iwlagn 0000:03:00.0: EVT_LOGT:0041036423:0x00000008:0220
[ 140.704550] iwlagn 0000:03:00.0: EVT_LOGT:0041036441:0x00000000:0302
[ 140.704561] iwlagn 0000:03:00.0: EVT_LOGT:0041036473:0x000000d4:0303
[ 140.704571] iwlagn 0000:03:00.0: EVT_LOGT:0041036477:0x000012ca:0217
[ 140.704582] iwlagn 0000:03:00.0: EVT_LOGT:0041036478:0x0ac9001c:0217
[ 140.704592] iwlagn 0000:03:00.0: EVT_LOGT:0041038623:0x041d004e:0401
[ 140.704603] iwlagn 0000:03:00.0: EVT_LOGT:0041038635:0x00000000:0125
[ 140.741115] iwlagn 0000:03:00.0: Stopping AGG while state not ON or starting
[ 140.741120] iwlagn 0000:03:00.0: queue number out of range: 0, must be 10 to 19
[ 476.640915] iwlagn 0000:03:00.0: Microcode SW error detected. Restarting 0x2000000.
[ 476.640925] iwlagn 0000:03:00.0: Loaded firmware version: 8.24.2.12
[ 476.640945] iwlagn 0000:03:00.0: Start IWL Error Log Dump:
[ 476.640951] iwlagn 0000:03:00.0: Status: 0x0002B2E4, count: 5
[ 476.641110] iwlagn 0000:03:00.0: Desc Time data1 data2 line
[ 476.641120] iwlagn 0000:03:00.0: SYSASSERT (0x0005) 2342698155 0x01808035 0x0000C908 1364
[ 476.641126] iwlagn 0000:03:00.0: pc blink1 blink2 ilink1 ilink2 hcmd
[ 476.641134] iwlagn 0000:03:00.0: 0x03AE8 0x039B8 0x039B8 0x008B2 0x00000 0x47F004E
[ 476.641140] iwlagn 0000:03:00.0: CSR values:
[ 476.641145] iwlagn 0000:03:00.0: (2nd byte of CSR_INT_COALESCING is CSR_INT_PERIODIC_REG)
[ 476.641155] iwlagn 0000:03:00.0: CSR_HW_IF_CONFIG_REG: 0X00480302
[ 476.641164] iwlagn 0000:03:00.0: CSR_INT_COALESCING: 0X0000ff40
[ 476.641173] iwlagn 0000:03:00.0: CSR_INT: 0X00000000
[ 476.641181] iwlagn 0000:03:00.0: CSR_INT_MASK: 0X00000000
[ 476.641190] iwlagn 0000:03:00.0: CSR_FH_INT_STATUS: 0X00000000
[ 476.641198] iwlagn 0000:03:00.0: CSR_GPIO_IN: 0X00000000
[ 476.641207] iwlagn 0000:03:00.0: CSR_RESET: 0X00000000
[ 476.641215] iwlagn 0000:03:00.0: CSR_GP_CNTRL: 0X080403c5
[ 476.641224] iwlagn 0000:03:00.0: CSR_HW_REV: 0X00000024
[ 476.641232] iwlagn 0000:03:00.0: CSR_EEPROM_REG: 0X00000000
[ 476.641241] iwlagn 0000:03:00.0: CSR_EEPROM_GP: 0X90000004
[ 476.641250] iwlagn 0000:03:00.0: CSR_OTP_GP_REG: 0X00060000
[ 476.641258] iwlagn 0000:03:00.0: CSR_GIO_REG: 0X00080046
[ 476.641267] iwlagn 0000:03:00.0: CSR_GP_UCODE_REG: 0X0000ba6f
[ 476.641275] iwlagn 0000:03:00.0: CSR_GP_DRIVER_REG: 0X00000000
[ 476.641284] iwlagn 0000:03:00.0: CSR_UCODE_DRV_GP1: 0X00000000
[ 476.641293] iwlagn 0000:03:00.0: CSR_UCODE_DRV_GP2: 0X00000000
[ 476.641301] iwlagn 0000:03:00.0: CSR_LED_REG: 0X00000058
[ 476.641310] iwlagn 0000:03:00.0: CSR_DRAM_INT_TBL_REG: 0X88139fcc
[ 476.641318] iwlagn 0000:03:00.0: CSR_GIO_CHICKEN_BITS: 0X27800200
[ 476.641327] iwlagn 0000:03:00.0: CSR_ANA_PLL_CFG: 0X00880300
[ 476.641336] iwlagn 0000:03:00.0: CSR_HW_REV_WA_REG: 0X0001001a
[ 476.641344] iwlagn 0000:03:00.0: CSR_DBG_HPET_MEM_REG: 0Xffff0000
[ 476.641350] iwlagn 0000:03:00.0: FH register values:
[ 476.641368] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_STTS_WPTR_REG: 0X139a9600
[ 476.641387] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_RBDCB_BASE_REG: 0X0139ad60
[ 476.641405] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_WPTR: 0X000000f8
[ 476.641424] iwlagn 0000:03:00.0: FH_MEM_RCSR_CHNL0_CONFIG_REG: 0X80819104
[ 476.641442] iwlagn 0000:03:00.0: FH_MEM_RSSR_SHARED_CTRL_REG: 0X000000fc
[ 476.641461] iwlagn 0000:03:00.0: FH_MEM_RSSR_RX_STATUS_REG: 0X07030000
[ 476.641479] iwlagn 0000:03:00.0: FH_MEM_RSSR_RX_ENABLE_ERR_IRQ2DRV: 0X00000000
[ 476.641498] iwlagn 0000:03:00.0: FH_TSSR_TX_STATUS_REG: 0X07ff0001
[ 476.641516] iwlagn 0000:03:00.0: FH_TSSR_TX_ERROR_REG: 0X00000000
[ 476.641578] iwlagn 0000:03:00.0: Start IWL Event Log Dump: display last 20 entries
[ 476.641602] iwlagn 0000:03:00.0: EVT_LOGT:0335757278:0xc0000000:0228
[ 476.641618] iwlagn 0000:03:00.0: EVT_LOGT:0335757279:0x00000001:0204
[ 476.641633] iwlagn 0000:03:00.0: EVT_LOGT:0335757283:0x00000001:0214
[ 476.641649] iwlagn 0000:03:00.0: EVT_LOGT:0335757283:0x01041110:0205
[ 476.641665] iwlagn 0000:03:00.0: EVT_LOGT:0335757329:0x00000020:0208
[ 476.641680] iwlagn 0000:03:00.0: EVT_LOGT:0335757349:0x00000000:0302
[ 476.641696] iwlagn 0000:03:00.0: EVT_LOGT:0335757393:0x000000c4:0303
[ 476.641711] iwlagn 0000:03:00.0: EVT_LOGT:0335757400:0x00000001:0203
[ 476.641727] iwlagn 0000:03:00.0: EVT_LOGT:0335757404:0x0212001c:0206
[ 476.641742] iwlagn 0000:03:00.0: EVT_LOGT:0335757405:0x00000040:0204
[ 476.641758] iwlagn 0000:03:00.0: EVT_LOGT:0335757408:0x01040110:0211
[ 476.641773] iwlagn 0000:03:00.0: EVT_LOGT:0335757412:0x00000000:0212
[ 476.641789] iwlagn 0000:03:00.0: EVT_LOGT:0335757513:0x00000000:0215
[ 476.641805] iwlagn 0000:03:00.0: EVT_LOGT:0335757517:0x00000008:0220
[ 476.641820] iwlagn 0000:03:00.0: EVT_LOGT:0335757535:0x00000000:0302
[ 476.641835] iwlagn 0000:03:00.0: EVT_LOGT:0335757579:0x000000d4:0303
[ 476.641851] iwlagn 0000:03:00.0: EVT_LOGT:0335757583:0x00001213:0217
[ 476.641867] iwlagn 0000:03:00.0: EVT_LOGT:0335757584:0x0212001c:0217
[ 476.641882] iwlagn 0000:03:00.0: EVT_LOGT:0335758039:0x047f004e:0401
[ 476.641898] iwlagn 0000:03:00.0: EVT_LOGT:0335758051:0x00000000:0125
[ 483.372110] iwlagn 0000:03:00.0: iwlagn_tx_agg_start on ra = 00:1f:3f:62:fd:83 tid = 0
[ 585.299189] iwlagn 0000:03:00.0: Stopping AGG while state not ON or starting
[ 585.312556] wlan0: deauthenticating from 00:1f:3f:62:fd:83 by local choice (reason=3)
[ 585.315659] iwlagn 0000:03:00.0: Stopping AGG while state not ON or starting
[ 586.945592] ADDRCONF(NETDEV_UP): wlan0: link is not ready
[ 590.212288] wlan0: authenticate with 00:1f:3f:62:fd:83 (try 1)
[ 590.215480] wlan0: authenticated
[ 590.215527] wlan0: associate with 00:1f:3f:62:fd:83 (try 1)
[ 590.223530] wlan0: RX AssocResp from 00:1f:3f:62:fd:83 (capab=0x431 status=0 aid=1)
[ 590.223535] wlan0: associated
[ 590.235279] ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[ 600.648248] wlan0: no IPv6 routers present
[ 931.683252] iwlagn 0000:03:00.0: Microcode SW error detected. Restarting 0x2000000.
[ 931.683256] iwlagn 0000:03:00.0: Loaded firmware version: 8.24.2.12
[ 931.683273] iwlagn 0000:03:00.0: Start IWL Error Log Dump:
[ 931.683276] iwlagn 0000:03:00.0: Status: 0x000212E4, count: 5
[ 931.683419] iwlagn 0000:03:00.0: Desc Time data1 data2 line
[ 931.683423] iwlagn 0000:03:00.0: SYSASSERT (0x0005) 2797511542 0x01808035 0x0000C90F 1364
[ 931.683425] iwlagn 0000:03:00.0: pc blink1 blink2 ilink1 ilink2 hcmd
[ 931.683427] iwlagn 0000:03:00.0: 0x03AE8 0x039B8 0x039B8 0x008B2 0x00000 0x46E004E
[ 931.683429] iwlagn 0000:03:00.0: CSR values:
[ 931.683431] iwlagn 0000:03:00.0: (2nd byte of CSR_INT_COALESCING is CSR_INT_PERIODIC_REG)
[ 931.683435] iwlagn 0000:03:00.0: CSR_HW_IF_CONFIG_REG: 0X00480302
[ 931.683440] iwlagn 0000:03:00.0: CSR_INT_COALESCING: 0X0000ff40
[ 931.683444] iwlagn 0000:03:00.0: CSR_INT: 0X00000000
[ 931.683449] iwlagn 0000:03:00.0: CSR_INT_MASK: 0X00000000
[ 931.683453] iwlagn 0000:03:00.0: CSR_FH_INT_STATUS: 0X00000000
[ 931.683458] iwlagn 0000:03:00.0: CSR_GPIO_IN: 0X00000000
[ 931.683462] iwlagn 0000:03:00.0: CSR_RESET: 0X00000000
[ 931.683467] iwlagn 0000:03:00.0: CSR_GP_CNTRL: 0X080403c5
[ 931.683471] iwlagn 0000:03:00.0: CSR_HW_REV: 0X00000024
[ 931.683476] iwlagn 0000:03:00.0: CSR_EEPROM_REG: 0X00000000
[ 931.683480] iwlagn 0000:03:00.0: CSR_EEPROM_GP: 0X90000004
[ 931.683485] iwlagn 0000:03:00.0: CSR_OTP_GP_REG: 0X00060000
[ 931.683489] iwlagn 0000:03:00.0: CSR_GIO_REG: 0X00080046
[ 931.683494] iwlagn 0000:03:00.0: CSR_GP_UCODE_REG: 0X00002f25
[ 931.683498] iwlagn 0000:03:00.0: CSR_GP_DRIVER_REG: 0X00000000
[ 931.683503] iwlagn 0000:03:00.0: CSR_UCODE_DRV_GP1: 0X00000000
[ 931.683507] iwlagn 0000:03:00.0: CSR_UCODE_DRV_GP2: 0X00000000
[ 931.683512] iwlagn 0000:03:00.0: CSR_LED_REG: 0X00000058
[ 931.683516] iwlagn 0000:03:00.0: CSR_DRAM_INT_TBL_REG: 0X88139fcc
[ 931.683521] iwlagn 0000:03:00.0: CSR_GIO_CHICKEN_BITS: 0X27800200
[ 931.683525] iwlagn 0000:03:00.0: CSR_ANA_PLL_CFG: 0X00880300
[ 931.683530] iwlagn 0000:03:00.0: CSR_HW_REV_WA_REG: 0X0001001a
[ 931.683534] iwlagn 0000:03:00.0: CSR_DBG_HPET_MEM_REG: 0Xffff0000
[ 931.683536] iwlagn 0000:03:00.0: FH register values:
[ 931.683549] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_STTS_WPTR_REG: 0X139a9600
[ 931.683562] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_RBDCB_BASE_REG: 0X0139ad60
[ 931.683575] iwlagn 0000:03:00.0: FH_RSCSR_CHNL0_WPTR: 0X00000018
[ 931.683588] iwlagn 0000:03:00.0: FH_MEM_RCSR_CHNL0_CONFIG_REG: 0X80819104
[ 931.683600] iwlagn 0000:03:00.0: FH_MEM_RSSR_SHARED_CTRL_REG: 0X000000fc
[ 931.683613] iwlagn 0000:03:00.0: FH_MEM_RSSR_RX_STATUS_REG: 0X07030000
[ 931.683626] iwlagn 0000:03:00.0: FH_MEM_RSSR_RX_ENABLE_ERR_IRQ2DRV: 0X00000000
[ 931.683639] iwlagn 0000:03:00.0: FH_TSSR_TX_STATUS_REG: 0X07ff0001
[ 931.683652] iwlagn 0000:03:00.0: FH_TSSR_TX_ERROR_REG: 0X00000000
[ 931.683703] iwlagn 0000:03:00.0: Start IWL Event Log Dump: display last 20 entries
[ 931.683720] iwlagn 0000:03:00.0: EVT_LOGT:0344585191:0x01000110:0211
[ 931.683730] iwlagn 0000:03:00.0: EVT_LOGT:0344585195:0x00000000:0212
[ 931.683740] iwlagn 0000:03:00.0: EVT_LOGT:0344585235:0x00000000:0215
[ 931.683751] iwlagn 0000:03:00.0: EVT_LOGT:0344585239:0x00000008:0220
[ 931.683761] iwlagn 0000:03:00.0: EVT_LOGT:0344585441:0x0246001c:0206
[ 931.683772] iwlagn 0000:03:00.0: EVT_LOGT:0344585443:0x00000001:0204
[ 931.683782] iwlagn 0000:03:00.0: EVT_LOGT:0344585447:0x00000001:0214
[ 931.683792] iwlagn 0000:03:00.0: EVT_LOGT:0344585447:0x01001110:0205
[ 931.683802] iwlagn 0000:03:00.0: EVT_LOGT:0344585470:0x00000020:0208
[ 931.683813] iwlagn 0000:03:00.0: EVT_LOGT:0344585489:0x00000000:0302
[ 931.683823] iwlagn 0000:03:00.0: EVT_LOGT:0344585519:0x000000c4:0303
[ 931.683833] iwlagn 0000:03:00.0: EVT_LOGT:0344585526:0x00000001:0203
[ 931.683844] iwlagn 0000:03:00.0: EVT_LOGT:0344585529:0x0246001c:0206
[ 931.683854] iwlagn 0000:03:00.0: EVT_LOGT:0344585530:0x00000040:0204
[ 931.683864] iwlagn 0000:03:00.0: EVT_LOGT:0344585533:0x01000110:0211
[ 931.683875] iwlagn 0000:03:00.0: EVT_LOGT:0344585538:0x00000000:0212
[ 931.683885] iwlagn 0000:03:00.0: EVT_LOGT:0344585578:0x00000000:0215
[ 931.683895] iwlagn 0000:03:00.0: EVT_LOGT:0344585582:0x00000008:0220
[ 931.683905] iwlagn 0000:03:00.0: EVT_LOGT:0344585621:0x046e004e:0401
[ 931.683916] iwlagn 0000:03:00.0: EVT_LOGT:0344585632:0x00000000:0125
^ permalink raw reply
* Re: [PATCH v2] cfg80211: Add antenna availability information
From: Bruno Randolf @ 2010-12-10 12:47 UTC (permalink / raw)
To: John W. Linville; +Cc: johannes, linux-wireless
In-Reply-To: <20101208143101.GC2423@tuxdriver.com>
On Wednesday 08 December 2010 23:31:01 John W. Linville wrote:
> On Wed, Dec 08, 2010 at 12:44:29PM +0900, Bruno Randolf wrote:
> > Add a field to wiphy for the hardware to report the availble antennas for
> > configuration. Only if this is set to something bigger than zero, will
> > the anntenna configuration ops be executed.
> >
> > Allthough this could be a simple number of antennas, I defined it as a
> > bitmap of antennas which are available for configuration, since it's
> > more consistent with the rest of the antenna API and there could be
> > cases where the hardware allows only configuration of certain antennas.
> > As it does not make much of a difference in size or normal usage, I
> > think it's better to be able to support this, in case the need arises.
> >
> > The antenna configuration is now also checked against the availabe
> > antennas and rejected if it does not match.
> >
> > Signed-off-by: Bruno Randolf <br1@einfach.org>
> >
> > v2: reject antenna configurations which don't match the available
> > antennas ---
>
> Please either put the "v2" part before the "Signed-off-by" or
> (preferably) after the "---" line. Also, make sure to use 3 "-"
> characters -- often you use only 2 of them and the results from
> applying with "git am" are messy.
Oh, I'm sorry for that. For some reason I thought 2 -- are ok. Will be careful
to have three from now on.
bruno
^ permalink raw reply
* Re: [PATCH] fix hostap registration order
From: Meelis Roos @ 2010-12-10 7:19 UTC (permalink / raw)
To: j; +Cc: David Miller, netdev, linux-wireless
In-Reply-To: <20101209.195315.193716225.davem@davemloft.net>
> > In 2.6.37-rc4, hostap_pci init gives a WARNING with backtrace telling
> > that netif_stop_queue is called before register_netdev. Fix it by moving
> > this call after register_netdev. Removes the warning and seems to work,
> > but why is the call to netif_stop_queue needed at all after
> > register_netdev?
>
> It should simply not touch the queue state at all at this point.
>
> Your change would add a race. At the moment the device is registered
> it can be brought up, and then your code will eroneously modify
> the queue state.
OK, I can make a simpler patch for that but I would like to understand
the original reasons for having netif_stop_queue there. Just a relict or
still somehow important?
Jouni?
--
Meelis Roos (mroos@linux.ee)
^ permalink raw reply
* Re: [PATCH 1/4] b43: N-PHY: update init tables
From: Rafał Miłecki @ 2010-12-10 6:36 UTC (permalink / raw)
To: ikorot; +Cc: Larry Finger, Hauke Mehrtens, linux-wireless, b43-dev
In-Reply-To: <26490304.1291947984094.JavaMail.root@elwamui-rubis.atl.sa.earthlink.net>
W dniu 10 grudnia 2010 03:26 użytkownik <ikorot@earthlink.net> napisał:
> -----Original Message-----
>>From: Rafał Miłecki <zajec5@gmail.com>
>>Sent: Dec 9, 2010 6:06 AM
>>To: ikorot@earthlink.net
>>Cc: Larry Finger <Larry.Finger@lwfinger.net>, Hauke Mehrtens <hauke@hauke-m.de>, linux-wireless@vger.kernel.org, b43-dev@lists.infradead.org
>>Subject: Re: [PATCH 1/4] b43: N-PHY: update init tables
>>
>>2010/12/8 <ikorot@earthlink.net>:
>>> Larry,
>>>
>>>
>>> -----Original Message-----
>>>>From: Larry Finger <Larry.Finger@lwfinger.net>
>>>>Sent: Dec 7, 2010 12:00 PM
>>>>To: ikorot@earthlink.net
>>>>Cc: Hauke Mehrtens <hauke@hauke-m.de>, linux-wireless@vger.kernel.org, b43-dev@lists.infradead.org
>>>>Subject: Re: [PATCH 1/4] b43: N-PHY: update init tables
>>>>
>>>>On 12/07/2010 01:49 PM, ikorot@earthlink.net wrote:
>>>>>> One reason is that these tables changed from non-zero to zero values between
>>>>>> Broadcom driver 4.174.64.19 and 5.10.56.46. As they might change again, I think
>>>>>> we should retain the full version.
>>>>>
>>>>> Is there a way to check for version of the driver?
>>>>> This way whoever uses old one won't be screwed...
>>>>
>>>>That will not be a problem as no older version of b43 works at all with b43. To
>>>>help you understand this change, when the 4.174.64.19 Broadcom driver was
>>>>reverse-engineered, the tables had non-zero values. Rafel later compared the
>>>>trace dumps of b43 with the latest version of wl and found that the values are
>>>>now zero. When I rechecked driver 5.10.56.46, I found them to be zero there as
>>>>well and changed the specs.
>>>
>>> Well, it maybe feasible to keep the old values and check
>>> the version of the driver, since you are saying yourself
>>> that the value might be changing in the future.
>>> Maybe for couple of releases only?
>>
>>Sorry, but I don't understand that at all. What do you mean by version
>>of the driver? What driver?
>
> #if B43_VERSION <= x.x.x.x
> // table initialized to some values
> #else
> //table initialized to 0's
> #endif
You want to put condition checking b43 version in... b43 driver? I
can't follow you.
--
Rafał
^ permalink raw reply
* [PATCH] ath9k: Use power save wrappers for TSF get/set
From: Sujith @ 2010-12-10 5:57 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Sujith.Manoharan
From: Sujith Manoharan <Sujith.Manoharan@atheros.com>
The HW has to be awake when accessing registers.
Signed-off-by: Sujith Manoharan <Sujith.Manoharan@atheros.com>
---
drivers/net/wireless/ath/ath9k/main.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 3e0c8a1..890b825 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1944,7 +1944,9 @@ static u64 ath9k_get_tsf(struct ieee80211_hw *hw)
struct ath_softc *sc = aphy->sc;
mutex_lock(&sc->mutex);
+ ath9k_ps_wakeup(sc);
tsf = ath9k_hw_gettsf64(sc->sc_ah);
+ ath9k_ps_restore(sc);
mutex_unlock(&sc->mutex);
return tsf;
@@ -1956,7 +1958,9 @@ static void ath9k_set_tsf(struct ieee80211_hw *hw, u64 tsf)
struct ath_softc *sc = aphy->sc;
mutex_lock(&sc->mutex);
+ ath9k_ps_wakeup(sc);
ath9k_hw_settsf64(sc->sc_ah, tsf);
+ ath9k_ps_restore(sc);
mutex_unlock(&sc->mutex);
}
--
1.7.3.3
^ permalink raw reply related
* Re: [PATCH 0/4] Make N-PHY support experimental
From: Larry Finger @ 2010-12-10 4:05 UTC (permalink / raw)
To: Jon Saul; +Cc: Rafał Miłecki, linux-wireless, Johannes Berg, b43-dev
In-Reply-To: <4D01A3EC.9000408@gmail.com>
On 12/09/2010 09:52 PM, Jon Saul wrote:
> On 12/09/2010 10:03 AM, Larry Finger wrote:
>> I sent a question to the seller of the card I mentioned earlier asking them to
>> tell me the PCI IDs and explaining why I needed to know. If they answer, we will
>> at least know if it is a 14e4:432b. If so, then it certainly will have a PHY rev
>>> 2. At that price, I'm willing to buy it myself, but there should be money
>> available to get things for Rafał. Who has those funds? I think the last time I
>> got something though the donations, it was Stefano, but that was a long time ago.
>>
>> Rafał: If I get a rev > 2 card, you can certainly ssh into my computer for
>> testing, or I can do the runs here and send you the dumps.
>>
>> Larry
> I have a 14e4:432b card and am willing to help any way I can.
Thanks for the offer. I bought one that should have those ID values on Ebay
today. If it is not a 432b, or some other N PHY with rev > 2, I have the right
to return it. The seller did not know the IDs. In that case, I will contact you
to see what we can arrange.
Larry
^ permalink raw reply
* Re: [PATCH] fix hostap registration order
From: David Miller @ 2010-12-10 3:53 UTC (permalink / raw)
To: mroos; +Cc: netdev, j, linux-wireless
In-Reply-To: <alpine.SOC.1.00.1012100020110.26229@math.ut.ee>
From: Meelis Roos <mroos@linux.ee>
Date: Fri, 10 Dec 2010 01:19:23 +0200 (EET)
> In 2.6.37-rc4, hostap_pci init gives a WARNING with backtrace telling
> that netif_stop_queue is called before register_netdev. Fix it by moving
> this call after register_netdev. Removes the warning and seems to work,
> but why is the call to netif_stop_queue needed at all after
> register_netdev?
>
> Signed-off-by: Meelis Roos <mroos@linux.ee>
It should simply not touch the queue state at all at this point.
Your change would add a race. At the moment the device is registered
it can be brought up, and then your code will eroneously modify
the queue state.
^ permalink raw reply
* Re: [PATCH 0/4] Make N-PHY support experimental
From: Jon Saul @ 2010-12-10 3:52 UTC (permalink / raw)
To: Larry Finger
Cc: Rafał Miłecki, linux-wireless, Johannes Berg, b43-dev
In-Reply-To: <4D00FDD4.3050705@lwfinger.net>
On 12/09/2010 10:03 AM, Larry Finger wrote:
> I sent a question to the seller of the card I mentioned earlier asking them to
> tell me the PCI IDs and explaining why I needed to know. If they answer, we will
> at least know if it is a 14e4:432b. If so, then it certainly will have a PHY rev
>> 2. At that price, I'm willing to buy it myself, but there should be money
> available to get things for Rafał. Who has those funds? I think the last time I
> got something though the donations, it was Stefano, but that was a long time ago.
>
> Rafał: If I get a rev > 2 card, you can certainly ssh into my computer for
> testing, or I can do the runs here and send you the dumps.
>
> Larry
I have a 14e4:432b card and am willing to help any way I can.
--
0x00
^ permalink raw reply
* Re: [PATCH 1/4] b43: N-PHY: update init tables
From: ikorot @ 2010-12-10 2:26 UTC (permalink / raw)
To: Rafał Miłecki
Cc: Larry Finger, Hauke Mehrtens, linux-wireless, b43-dev
Rafal,
-----Original Message-----
>From: Rafał Miłecki <zajec5@gmail.com>
>Sent: Dec 9, 2010 6:06 AM
>To: ikorot@earthlink.net
>Cc: Larry Finger <Larry.Finger@lwfinger.net>, Hauke Mehrtens <hauke@hauke-m.de>, linux-wireless@vger.kernel.org, b43-dev@lists.infradead.org
>Subject: Re: [PATCH 1/4] b43: N-PHY: update init tables
>
>2010/12/8 <ikorot@earthlink.net>:
>> Larry,
>>
>>
>> -----Original Message-----
>>>From: Larry Finger <Larry.Finger@lwfinger.net>
>>>Sent: Dec 7, 2010 12:00 PM
>>>To: ikorot@earthlink.net
>>>Cc: Hauke Mehrtens <hauke@hauke-m.de>, linux-wireless@vger.kernel.org, b43-dev@lists.infradead.org
>>>Subject: Re: [PATCH 1/4] b43: N-PHY: update init tables
>>>
>>>On 12/07/2010 01:49 PM, ikorot@earthlink.net wrote:
>>>>> One reason is that these tables changed from non-zero to zero values between
>>>>> Broadcom driver 4.174.64.19 and 5.10.56.46. As they might change again, I think
>>>>> we should retain the full version.
>>>>
>>>> Is there a way to check for version of the driver?
>>>> This way whoever uses old one won't be screwed...
>>>
>>>That will not be a problem as no older version of b43 works at all with b43. To
>>>help you understand this change, when the 4.174.64.19 Broadcom driver was
>>>reverse-engineered, the tables had non-zero values. Rafel later compared the
>>>trace dumps of b43 with the latest version of wl and found that the values are
>>>now zero. When I rechecked driver 5.10.56.46, I found them to be zero there as
>>>well and changed the specs.
>>
>> Well, it maybe feasible to keep the old values and check
>> the version of the driver, since you are saying yourself
>> that the value might be changing in the future.
>> Maybe for couple of releases only?
>
>Sorry, but I don't understand that at all. What do you mean by version
>of the driver? What driver?
#if B43_VERSION <= x.x.x.x
// table initialized to some values
#else
//table initialized to 0's
#endif
>
>b43 comes with tables built in, there is no way b43 could use tables
>from other version of b43...
Thank you.
>
>--
>Rafał
^ permalink raw reply
* [PATCH 1/2] ieee80211: add Parameter Set Count bitmask
From: Bing Zhao @ 2010-12-10 2:24 UTC (permalink / raw)
To: linux-wireless
Cc: John W. Linville, Johannes Berg, Amitkumar Karwar, Kiran Divekar,
Frank Huang, Bing Zhao
WMM IE QoS Info field lower 4 bits: Parameter Set Count
Signed-off-by: Bing Zhao <bzhao@marvell.com>
---
include/linux/ieee80211.h | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index 351c0ab..7f23545 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -122,6 +122,7 @@
/* U-APSD queue for WMM IEs sent by AP */
#define IEEE80211_WMM_IE_AP_QOSINFO_UAPSD (1<<7)
+#define IEEE80211_WMM_IE_AP_QOSINFO_PARAM_SET_CNT_MASK 0x0f
/* U-APSD queues for WMM IEs sent by STA */
#define IEEE80211_WMM_IE_STA_QOSINFO_AC_VO (1<<0)
--
1.7.0.2
^ permalink raw reply related
* [PATCH 2/2] mwifiex: remove bitfields and __BIG_ENDIAN_BITFIELD
From: Bing Zhao @ 2010-12-10 2:24 UTC (permalink / raw)
To: linux-wireless
Cc: John W. Linville, Johannes Berg, Amitkumar Karwar, Kiran Divekar,
Frank Huang, Bing Zhao
In-Reply-To: <1291947882-9124-1-git-send-email-bzhao@marvell.com>
From: Amitkumar Karwar <akarwar@marvell.com>
and some struct ieee_types_ definitions in ieee.h
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
---
drivers/net/wireless/mwifiex/cfg80211.c | 8 +--
drivers/net/wireless/mwifiex/fw.h | 23 +++-----
drivers/net/wireless/mwifiex/ieee.h | 93 +++++-------------------------
drivers/net/wireless/mwifiex/join.c | 39 +++++--------
drivers/net/wireless/mwifiex/scan.c | 34 ++++++------
drivers/net/wireless/mwifiex/wmm.c | 41 +++++++++-----
6 files changed, 86 insertions(+), 152 deletions(-)
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
index 7861cb7..99dade5 100644
--- a/drivers/net/wireless/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/mwifiex/cfg80211.c
@@ -1251,7 +1251,6 @@ mwifiex_inform_bss_from_scan_result(struct mwifiex_private *priv,
u8 *ie, *tmp, *ie_buf;
u32 ie_len;
u64 ts = 0;
- u8 *cap;
u8 *beacon;
int beacon_size;
u8 element_id;
@@ -1313,11 +1312,11 @@ mwifiex_inform_bss_from_scan_result(struct mwifiex_private *priv,
if (beacon) {
beacon += sizeof(scan_table[i].beacon_period)
+ sizeof(scan_table[i].time_stamp) +
- +sizeof(scan_table[i].cap_info);
+ +sizeof(scan_table[i].cap_info_bitmap);
beacon_size -= sizeof(scan_table[i].beacon_period)
+ sizeof(scan_table[i].time_stamp)
- + sizeof(scan_table[i].cap_info);
+ + sizeof(scan_table[i].cap_info_bitmap);
}
while (beacon_size >= sizeof(struct ieee_types_header)) {
@@ -1359,10 +1358,9 @@ mwifiex_inform_bss_from_scan_result(struct mwifiex_private *priv,
}
chan = ieee80211_get_channel(priv->wdev->wiphy,
scan_table[i].freq);
- cap = (u8 *) &scan_table[i].cap_info;
cfg80211_inform_bss(priv->wdev->wiphy, chan,
scan_table[i].mac_address,
- ts, (u16) (*cap),
+ ts, scan_table[i].cap_info_bitmap,
scan_table[i].beacon_period, ie_buf, ie_len,
scan_table[i].rssi, GFP_KERNEL);
}
diff --git a/drivers/net/wireless/mwifiex/fw.h b/drivers/net/wireless/mwifiex/fw.h
index d8f4011..16cdb85 100644
--- a/drivers/net/wireless/mwifiex/fw.h
+++ b/drivers/net/wireless/mwifiex/fw.h
@@ -522,24 +522,17 @@ struct rxpd {
u8 reserved;
} __attribute__ ((packed));
-struct mwifiex_chan_scan_mode {
-#ifdef __BIG_ENDIAN__BITFIELD
- u8 reserved_2_7:6;
- u8 disable_chan_filt:1;
- u8 passive_scan:1;
-#else
- u8 passive_scan:1;
- u8 disable_chan_filt:1;
- u8 reserved_2_7:6;
-#endif
-} __attribute__ ((packed));
+enum mwifiex_chan_scan_mode_bitmasks {
+ MWIFIEX_PASSIVE_SCAN = BIT(0),
+ MWIFIEX_DISABLE_CHAN_FILT = BIT(1),
+};
#define SECOND_CHANNEL_BELOW 0x30
#define SECOND_CHANNEL_ABOVE 0x10
struct mwifiex_chan_scan_param_set {
u8 radio_type;
u8 chan_number;
- struct mwifiex_chan_scan_mode chan_scan_mode;
+ u8 chan_scan_mode_bitmap;
__le16 min_scan_time;
__le16 max_scan_time;
} __attribute__ ((packed));
@@ -797,7 +790,7 @@ struct host_cmd_ds_802_11_deauthenticate {
struct host_cmd_ds_802_11_associate {
u8 peer_sta_addr[MWIFIEX_MAC_ADDR_LENGTH];
- struct ieee_types_cap_info cap_info;
+ __le16 cap_info_bitmap;
__le16 listen_interval;
__le16 beacon_period;
u8 dtim_period;
@@ -815,7 +808,7 @@ struct host_cmd_ds_802_11_ad_hoc_start {
union ieee_types_ss_param_set ss_param_set;
union ieee_types_phy_param_set phy_param_set;
u16 reserved1;
- struct ieee_types_cap_info cap;
+ __le16 cap_info_bitmap;
u8 DataRate[HOSTCMD_SUPPORTED_RATES];
} __attribute__ ((packed));
@@ -834,7 +827,7 @@ struct adhoc_bss_desc {
u8 local_time[8];
union ieee_types_phy_param_set phy_param_set;
union ieee_types_ss_param_set ss_param_set;
- struct ieee_types_cap_info cap;
+ __le16 cap_info_bitmap;
u8 data_rates[HOSTCMD_SUPPORTED_RATES];
/*
diff --git a/drivers/net/wireless/mwifiex/ieee.h b/drivers/net/wireless/mwifiex/ieee.h
index 3245f17..ae85c8a 100644
--- a/drivers/net/wireless/mwifiex/ieee.h
+++ b/drivers/net/wireless/mwifiex/ieee.h
@@ -53,41 +53,6 @@ struct ieee_types_generic {
#define CAPINFO_MASK (~(BIT(15) | BIT(14) | \
BIT(12) | BIT(11) | BIT(9)))
-struct ieee_types_cap_info {
-#ifdef __BIG_ENDIAN_BITFIELD
- u8 rsrvd1:2;
- u8 dsss_ofdm:1;
- u8 rsvrd2:2;
- u8 short_slot_time:1;
- u8 rsrvd3:1;
- u8 spectrum_mgmt:1;
- u8 chan_agility:1;
- u8 pbcc:1;
- u8 short_preamble:1;
- u8 privacy:1;
- u8 cf_poll_rqst:1;
- u8 cf_pollable:1;
- u8 ibss:1;
- u8 ess:1;
-#else
- u8 ess:1;
- u8 ibss:1;
- u8 cf_pollable:1;
- u8 cf_poll_rqst:1;
- u8 privacy:1;
- u8 short_preamble:1;
- u8 pbcc:1;
- u8 chan_agility:1;
- u8 spectrum_mgmt:1;
- u8 rsrvd3:1;
- u8 short_slot_time:1;
- u8 Apsd:1;
- u8 rsvrd2:1;
- u8 dsss_ofdm:1;
- u8 rsrvd1:2;
-#endif
-} __attribute__ ((packed));
-
struct ieee_types_cf_param_set {
u8 element_id;
u8 len;
@@ -135,52 +100,27 @@ struct ieee_types_erp_info {
} __attribute__ ((packed));
struct ieee_types_assoc_rsp {
- struct ieee_types_cap_info capability;
+ __le16 cap_info_bitmap;
__le16 status_code;
__le16 a_id;
u8 ie_buffer[1];
} __attribute__ ((packed));
-struct ieee_types_wmm_qos_info {
-#ifdef __BIG_ENDIAN_BITFIELD
- u8 qos_uapsd:1;
- u8 reserved:3;
- u8 para_set_count:4;
-#else
- u8 para_set_count:4;
- u8 reserved:3;
- u8 qos_uapsd:1;
-#endif
-} __attribute__ ((packed));
-
-struct ieee_types_wmm_aciaifsn {
-#ifdef __BIG_ENDIAN_BITFIELD
- u8 reserved:1;
- u8 aci:2;
- u8 acm:1;
- u8 aifsn:4;
-#else
- u8 aifsn:4;
- u8 acm:1;
- u8 aci:2;
- u8 reserved:1;
-#endif
-} __attribute__ ((packed));
+enum ieee_types_wmm_aciaifsn_bitmasks {
+ MWIFIEX_AIFSN = (BIT(0) | BIT(1) | BIT(2) | BIT(3)),
+ MWIFIEX_ACM = BIT(4),
+ MWIFIEX_ACI = (BIT(5) | BIT(6)),
+};
-struct ieee_types_wmm_ecw {
-#ifdef __BIG_ENDIAN_BITFIELD
- u8 ecw_max:4;
- u8 ecw_min:4;
-#else
- u8 ecw_min:4;
- u8 ecw_max:4;
-#endif
-} __attribute__ ((packed));
+enum ieee_types_wmm_ecw_bitmasks {
+ MWIFIEX_ECW_MIN = (BIT(0) | BIT(1) | BIT(2) | BIT(3)),
+ MWIFIEX_ECW_MAX = (BIT(4) | BIT(5) | BIT(6) | BIT(7)),
+};
struct ieee_types_wmm_ac_parameters {
- struct ieee_types_wmm_aciaifsn aci_aifsn; /**< AciAifSn */
- struct ieee_types_wmm_ecw ecw; /**< Ecw */
- __le16 tx_op_limit; /**< Tx op limit */
+ u8 aci_aifsn_bitmap;
+ u8 ecw_bitmap;
+ __le16 tx_op_limit;
} __attribute__ ((packed));
struct ieee_types_wmm_info {
@@ -196,8 +136,7 @@ struct ieee_types_wmm_info {
*/
struct ieee_types_vendor_header vend_hdr;
- struct ieee_types_wmm_qos_info qos_info;
-
+ u8 qos_info_bitmap;
} __attribute__ ((packed));
struct ieee_types_wmm_parameter {
@@ -211,7 +150,7 @@ struct ieee_types_wmm_parameter {
* Version [1]
*/
struct ieee_types_vendor_header vend_hdr;
- struct ieee_types_wmm_qos_info qos_info;
+ u8 qos_info_bitmap;
u8 reserved;
struct ieee_types_wmm_ac_parameters ac_params[IEEE80211_MAX_QUEUES];
} __attribute__ ((packed));
@@ -302,7 +241,7 @@ struct mwifiex_bssdescriptor {
u8 time_stamp[8];
union ieee_types_phy_param_set phy_param_set;
union ieee_types_ss_param_set ss_param_set;
- struct ieee_types_cap_info cap_info;
+ u16 cap_info_bitmap;
struct ieee_types_wmm_parameter wmm_ie;
u8 disable_11n;
struct ieee_types_htcap *bcn_ht_cap;
diff --git a/drivers/net/wireless/mwifiex/join.c b/drivers/net/wireless/mwifiex/join.c
index 2888f54..264cb01 100644
--- a/drivers/net/wireless/mwifiex/join.c
+++ b/drivers/net/wireless/mwifiex/join.c
@@ -381,7 +381,7 @@ mwifiex_cmd_802_11_associate(struct mwifiex_private *priv,
/* Set the beacon period */
assoc->beacon_period = cpu_to_le16(bss_desc->beacon_period);
- pos += sizeof(assoc->cap_info);
+ pos += sizeof(assoc->cap_info_bitmap);
pos += sizeof(assoc->listen_interval);
pos += sizeof(assoc->beacon_period);
pos += sizeof(assoc->dtim_period);
@@ -605,7 +605,7 @@ mwifiex_cmd_802_11_associate(struct mwifiex_private *priv,
cmd->size = cpu_to_le16((u16) (pos - (u8 *) assoc) + S_DS_GEN);
/* Set the Capability info at last */
- memcpy(&tmp_cap, &bss_desc->cap_info, sizeof(assoc->cap_info));
+ tmp_cap = bss_desc->cap_info_bitmap;
if (priv->adapter->config_bands == BAND_B)
SHORT_SLOT_TIME_DISABLED(tmp_cap);
@@ -613,7 +613,7 @@ mwifiex_cmd_802_11_associate(struct mwifiex_private *priv,
tmp_cap &= CAPINFO_MASK;
PRINTM(MINFO, "ASSOC_CMD: tmp_cap=%4X CAPINFO_MASK=%4lX\n",
tmp_cap, CAPINFO_MASK);
- memcpy(&assoc->cap_info, &tmp_cap, sizeof(assoc->cap_info));
+ assoc->cap_info_bitmap = cpu_to_le16(tmp_cap);
done:
LEAVE();
@@ -712,7 +712,7 @@ mwifiex_ret_802_11_associate(struct mwifiex_private *priv,
PRINTM(MERROR, "ASSOC_RESP: Association Failed, "
"status code = %d, error = 0x%x, a_id = 0x%x\n",
le16_to_cpu(assoc_rsp->status_code),
- le16_to_cpu(*(__le16 *) &assoc_rsp->capability),
+ le16_to_cpu(assoc_rsp->cap_info_bitmap),
le16_to_cpu(assoc_rsp->a_id));
ret = MWIFIEX_STATUS_FAILURE;
@@ -765,7 +765,8 @@ mwifiex_ret_802_11_associate(struct mwifiex_private *priv,
if (priv->wmm_enabled)
priv->curr_bss_params.wmm_uapsd_enabled
- = bss_desc->wmm_ie.qos_info.qos_uapsd;
+ = ((bss_desc->wmm_ie.qos_info_bitmap &
+ IEEE80211_WMM_IE_AP_QOSINFO_UAPSD) ? 1 : 0);
PRINTM(MINFO, "ASSOC_RESP: curr_pkt_filter is 0x%x\n",
priv->curr_pkt_filter);
@@ -989,19 +990,19 @@ mwifiex_cmd_802_11_ad_hoc_start(struct mwifiex_private *priv,
sizeof(union ieee_types_ss_param_set));
/* Set Capability info */
- adhoc_start->cap.ess = 0;
- adhoc_start->cap.ibss = 1;
- bss_desc->cap_info.ibss = 1;
+ bss_desc->cap_info_bitmap |= WLAN_CAPABILITY_IBSS;
+ tmp_cap = le16_to_cpu(adhoc_start->cap_info_bitmap);
+ tmp_cap &= ~WLAN_CAPABILITY_ESS;
+ tmp_cap |= WLAN_CAPABILITY_IBSS;
/* Set up privacy in bss_desc */
if (priv->sec_info.wep_status == MWIFIEX_802_11_WEP_ENABLED
|| priv->sec_info.wpa_enabled
|| priv->sec_info.ewpa_enabled) {
/** Ad-Hoc capability privacy on */
-#define AD_HOC_CAP_PRIVACY_ON 1
PRINTM(MINFO, "ADHOC_S_CMD: wep_status set, Privacy to WEP\n");
bss_desc->privacy = MWIFIEX_802_11_PRIV_FILTER_8021X_WEP;
- adhoc_start->cap.privacy = AD_HOC_CAP_PRIVACY_ON;
+ tmp_cap |= WLAN_CAPABILITY_PRIVACY;
} else {
PRINTM(MWARN, "ADHOC_S_CMD: wep_status NOT set, Setting "
"Privacy to ACCEPT ALL\n");
@@ -1178,14 +1179,12 @@ mwifiex_cmd_802_11_ad_hoc_start(struct mwifiex_private *priv,
(sizeof(struct host_cmd_ds_802_11_ad_hoc_start)
+ S_DS_GEN + cmd_append_size));
- memcpy(&tmp_cap, &adhoc_start->cap, sizeof(u16));
-
if (adapter->adhoc_start_band == BAND_B)
SHORT_SLOT_TIME_DISABLED(tmp_cap);
else
SHORT_SLOT_TIME_ENABLED(tmp_cap);
- memcpy(&adhoc_start->cap, &tmp_cap, sizeof(u16));
+ adhoc_start->cap_info_bitmap = cpu_to_le16(tmp_cap);
ret = MWIFIEX_STATUS_SUCCESS;
done:
@@ -1271,15 +1270,12 @@ mwifiex_cmd_802_11_ad_hoc_join(struct mwifiex_private *priv,
memcpy(&adhoc_join->bss_descriptor.ss_param_set,
&bss_desc->ss_param_set, sizeof(union ieee_types_ss_param_set));
- memcpy(&tmp_cap, &bss_desc->cap_info,
- sizeof(struct ieee_types_cap_info));
+ tmp_cap = bss_desc->cap_info_bitmap;
tmp_cap &= CAPINFO_MASK;
PRINTM(MINFO, "ADHOC_J_CMD: tmp_cap=%4X CAPINFO_MASK=%4lX\n",
tmp_cap, CAPINFO_MASK);
- memcpy(&adhoc_join->bss_descriptor.cap, &tmp_cap,
- sizeof(struct ieee_types_cap_info));
/* Information on BSSID descriptor passed to FW */
PRINTM(MINFO,
@@ -1319,7 +1315,7 @@ mwifiex_cmd_802_11_ad_hoc_join(struct mwifiex_private *priv,
if (priv->sec_info.wep_status == MWIFIEX_802_11_WEP_ENABLED
|| priv->sec_info.wpa_enabled || priv->sec_info.ewpa_enabled)
- adhoc_join->bss_descriptor.cap.privacy = AD_HOC_CAP_PRIVACY_ON;
+ tmp_cap |= WLAN_CAPABILITY_PRIVACY;
if (IS_SUPPORT_MULTI_BANDS(priv->adapter)) {
/* Append a channel TLV */
@@ -1460,11 +1456,8 @@ mwifiex_cmd_802_11_ad_hoc_join(struct mwifiex_private *priv,
(sizeof(struct host_cmd_ds_802_11_ad_hoc_join)
+ S_DS_GEN + cmd_append_size));
- memcpy(&tmp_cap, &adhoc_join->bss_descriptor.cap,
- sizeof(struct ieee_types_cap_info));
-
- memcpy(&adhoc_join->bss_descriptor.cap,
- &tmp_cap, sizeof(struct ieee_types_cap_info));
+ adhoc_join->bss_descriptor.cap_info_bitmap =
+ cpu_to_le16(tmp_cap);
done:
LEAVE();
diff --git a/drivers/net/wireless/mwifiex/scan.c b/drivers/net/wireless/mwifiex/scan.c
index d69a6cb..f496045 100644
--- a/drivers/net/wireless/mwifiex/scan.c
+++ b/drivers/net/wireless/mwifiex/scan.c
@@ -731,19 +731,18 @@ mwifiex_scan_create_channel_list(struct mwifiex_private *priv,
active_scan_time);
}
if (scan_type == MWIFIEX_SCAN_TYPE_PASSIVE)
- scan_chan_list[chan_idx].chan_scan_mode.
- passive_scan = true;
+ scan_chan_list[chan_idx].chan_scan_mode_bitmap
+ |= MWIFIEX_PASSIVE_SCAN;
else
- scan_chan_list[chan_idx].chan_scan_mode.
- passive_scan = false;
+ scan_chan_list[chan_idx].chan_scan_mode_bitmap
+ &= ~MWIFIEX_PASSIVE_SCAN;
scan_chan_list[chan_idx].chan_number =
(u32) ch->hw_value;
if (filtered_scan) {
scan_chan_list[chan_idx].max_scan_time =
cpu_to_le16(adapter->specific_scan_time);
- scan_chan_list[chan_idx].chan_scan_mode.
- disable_chan_filt =
- true;
+ scan_chan_list[chan_idx].chan_scan_mode_bitmap
+ |= MWIFIEX_DISABLE_CHAN_FILT;
}
}
@@ -822,8 +821,10 @@ mwifiex_scan_channel_list(struct mwifiex_private *priv,
"Dur(%d)\n",
tmp_chan_list->chan_number,
tmp_chan_list->radio_type,
- tmp_chan_list->chan_scan_mode.passive_scan,
- tmp_chan_list->chan_scan_mode.disable_chan_filt,
+ tmp_chan_list->chan_scan_mode_bitmap
+ & MWIFIEX_PASSIVE_SCAN,
+ (tmp_chan_list->chan_scan_mode_bitmap
+ & MWIFIEX_DISABLE_CHAN_FILT) >> 1,
le16_to_cpu(tmp_chan_list->max_scan_time));
/* Copy the current channel TLV to the command being
@@ -1172,10 +1173,12 @@ mwifiex_scan_setup_scan_config(struct mwifiex_private *priv,
if (scan_type == MWIFIEX_SCAN_TYPE_PASSIVE) {
(scan_chan_list +
- chan_idx)->chan_scan_mode.passive_scan = true;
+ chan_idx)->chan_scan_mode_bitmap
+ |= MWIFIEX_PASSIVE_SCAN;
} else {
(scan_chan_list +
- chan_idx)->chan_scan_mode.passive_scan = false;
+ chan_idx)->chan_scan_mode_bitmap
+ &= ~MWIFIEX_PASSIVE_SCAN;
}
if (user_scan_in->chan_list[chan_idx].scan_time) {
@@ -1334,7 +1337,6 @@ mwifiex_interpret_bss_desc_with_ie(struct mwifiex_adapter *adapter,
struct ieee_types_ds_param_set *ds_param_set;
struct ieee_types_cf_param_set *cf_param_set;
struct ieee_types_ibss_param_set *ibss_param_set;
- struct ieee_types_cap_info *cap_info;
struct mwifiex_802_11_fixed_ies fixed_ie;
u8 *current_ptr;
u8 *rate;
@@ -1434,9 +1436,7 @@ mwifiex_interpret_bss_desc_with_ie(struct mwifiex_adapter *adapter,
memcpy(&fixed_ie.capabilities, current_ptr, 2);
PRINTM(MINFO, "InterpretIE: fixed_ie.capabilities=0x%X\n",
fixed_ie.capabilities);
- cap_info = (struct ieee_types_cap_info *) &fixed_ie.capabilities;
- memcpy(&bss_entry->cap_info, cap_info,
- sizeof(struct ieee_types_cap_info));
+ bss_entry->cap_info_bitmap = le16_to_cpu(fixed_ie.capabilities);
current_ptr += 2;
bytes_left_for_current_beacon -= 2;
@@ -1447,14 +1447,14 @@ mwifiex_interpret_bss_desc_with_ie(struct mwifiex_adapter *adapter,
HEXDUMP("InterpretIE: IE info", (u8 *) current_ptr,
bytes_left_for_current_beacon);
- if (cap_info->privacy) {
+ if (bss_entry->cap_info_bitmap & WLAN_CAPABILITY_PRIVACY) {
PRINTM(MINFO, "InterpretIE: AP WEP enabled\n");
bss_entry->privacy = MWIFIEX_802_11_PRIV_FILTER_8021X_WEP;
} else {
bss_entry->privacy = MWIFIEX_802_11_PRIV_FILTER_ACCEPT_ALL;
}
- if (cap_info->ibss == 1)
+ if (bss_entry->cap_info_bitmap & WLAN_CAPABILITY_IBSS)
bss_entry->bss_mode = MWIFIEX_BSS_MODE_IBSS;
else
bss_entry->bss_mode = MWIFIEX_BSS_MODE_INFRA;
diff --git a/drivers/net/wireless/mwifiex/wmm.c b/drivers/net/wireless/mwifiex/wmm.c
index 4758151..3993845 100644
--- a/drivers/net/wireless/mwifiex/wmm.c
+++ b/drivers/net/wireless/mwifiex/wmm.c
@@ -91,10 +91,14 @@ mwifiex_wmm_ac_debug_print(const struct ieee_types_wmm_ac_parameters *ac_param)
PRINTM(MINFO, "WMM AC_%s: ACI=%d, ACM=%d, Aifsn=%d, "
"EcwMin=%d, EcwMax=%d, TxopLimit=%d\n",
- ac_str[wmm_aci_to_qidx_map[ac_param->aci_aifsn.aci]],
- ac_param->aci_aifsn.aci, ac_param->aci_aifsn.acm,
- ac_param->aci_aifsn.aifsn, ac_param->ecw.ecw_min,
- ac_param->ecw.ecw_max, le16_to_cpu(ac_param->tx_op_limit));
+ ac_str[wmm_aci_to_qidx_map[(ac_param->aci_aifsn_bitmap
+ & MWIFIEX_ACI) >> 5]],
+ (ac_param->aci_aifsn_bitmap & MWIFIEX_ACI) >> 5,
+ (ac_param->aci_aifsn_bitmap & MWIFIEX_ACM) >> 4,
+ ac_param->aci_aifsn_bitmap & MWIFIEX_AIFSN,
+ ac_param->ecw_bitmap & MWIFIEX_ECW_MIN,
+ (ac_param->ecw_bitmap & MWIFIEX_ECW_MAX) >> 4,
+ le16_to_cpu(ac_param->tx_op_limit));
LEAVE();
}
@@ -262,23 +266,28 @@ mwifiex_wmm_setup_queue_priorities(struct mwifiex_private *priv,
(u8 *) wmm_ie, sizeof(struct ieee_types_wmm_parameter));
PRINTM(MINFO, "WMM Parameter IE: version=%d, "
- "qos_info Parameter Set Count=%d, Reserved=%#x\n",
- wmm_ie->vend_hdr.version, wmm_ie->qos_info.para_set_count,
- wmm_ie->reserved);
+ "qos_info Parameter Set Count=%d, Reserved=%#x\n",
+ wmm_ie->vend_hdr.version, wmm_ie->qos_info_bitmap &
+ IEEE80211_WMM_IE_AP_QOSINFO_PARAM_SET_CNT_MASK,
+ wmm_ie->reserved);
for (num_ac = 0; num_ac < ARRAY_SIZE(wmm_ie->ac_params); num_ac++) {
- cw_min = (1 << wmm_ie->ac_params[num_ac].ecw.ecw_min) - 1;
+ cw_min = (1 << (wmm_ie->ac_params[num_ac].ecw_bitmap &
+ MWIFIEX_ECW_MIN)) - 1;
avg_back_off =
(cw_min >> 1) +
- wmm_ie->ac_params[num_ac].aci_aifsn.aifsn;
+ (wmm_ie->ac_params[num_ac].aci_aifsn_bitmap &
+ MWIFIEX_AIFSN);
- ac_idx = wmm_aci_to_qidx_map[wmm_ie->ac_params[num_ac].
- aci_aifsn.aci];
+ ac_idx = wmm_aci_to_qidx_map[(wmm_ie->ac_params[num_ac].
+ aci_aifsn_bitmap &
+ MWIFIEX_ACI) >> 5];
priv->wmm.queue_priority[ac_idx] = ac_idx;
tmp[ac_idx] = avg_back_off;
PRINTM(MINFO, "WMM: CWmax=%d CWmin=%d Avg Back-off=%d\n",
- (1 << wmm_ie->ac_params[num_ac].ecw.ecw_max) - 1,
+ (1 << ((wmm_ie->ac_params[num_ac].ecw_bitmap &
+ MWIFIEX_ECW_MAX) >> 4)) - 1,
cw_min, avg_back_off);
mwifiex_wmm_ac_debug_print(&wmm_ie->ac_params[num_ac]);
}
@@ -887,8 +896,9 @@ mwifiex_ret_wmm_get_status(struct mwifiex_private *priv,
WLAN_EID_VENDOR_SPECIFIC;
PRINTM(MINFO, "CMD_RESP: WMM_GET_STATUS: WMM Parameter "
- "Set: %d\n",
- wmm_param_ie->qos_info.para_set_count);
+ "Set Count: %d\n",
+ wmm_param_ie->qos_info_bitmap &
+ IEEE80211_WMM_IE_AP_QOSINFO_PARAM_SET_CNT_MASK);
memcpy((u8 *) &priv->curr_bss_params.bss_descriptor.
wmm_ie, wmm_param_ie,
@@ -962,7 +972,8 @@ mwifiex_wmm_process_association_req(struct mwifiex_private *priv,
wmm_tlv->header.len = cpu_to_le16((u16) wmm_info_ie[1]);
memcpy(wmm_tlv->wmm_ie, &wmm_info_ie[2],
le16_to_cpu(wmm_tlv->header.len));
- if (wmm_ie->qos_info.qos_uapsd)
+ if (wmm_ie->qos_info_bitmap &
+ IEEE80211_WMM_IE_AP_QOSINFO_UAPSD)
memcpy((u8 *) (wmm_tlv->wmm_ie
+ le16_to_cpu(wmm_tlv->header.len)
- sizeof(priv->wmm_qosinfo)),
--
1.7.0.2
^ permalink raw reply related
* Re: compat-wireless-2.6.37-rc5 released
From: Luis R. Rodriguez @ 2010-12-10 1:08 UTC (permalink / raw)
To: linux-wireless; +Cc: linux-kernel, linux-bluetooth
In-Reply-To: <AANLkTim5HQGNL-vSapeQw_-dJue89pYz7zc8eiShma8j@mail.gmail.com>
On Wed, Dec 8, 2010 at 4:15 PM, Luis R. Rodriguez <mcgrof@gmail.com> wrote:
> In later releases we will have to consider if we want to cherry pick
> anything extra or leave them as is. These few patches seem tempting to
> suck in:
>
> 01-ath9k-OTP.patch
> 03-ath9k-no-aggr-VO.patch
> 04-mac80211-no-aggr-VO.patch
> 05-ath9k-Reintroduce-modparam-to-enable-btcoex.patch
> 06-ath9k_hw-fix-A-MPDU-key-search-issues-on-AR9003.patch
>
> Particularly it is now known AR9003 devices will only ship with OTP
> so..
So it turns out this is inaccurate, AR9003 devices can ship with
EEPROM only or with OTP, it will vary, so while 2.6.36 and 2.6.37 will
not support only OTP based devices 2.6.38 will support both. What we
can do is cherry pick the OTP patches to the 2.6.36 and 2.6.37
compat-wireless releases but those two older stock kernels won't have
support for these.
Luis
^ permalink raw reply
* [PATCH] fix hostap registration order
From: Meelis Roos @ 2010-12-09 23:19 UTC (permalink / raw)
To: netdev, Jouni Malinen, linux-wireless
In 2.6.37-rc4, hostap_pci init gives a WARNING with backtrace telling
that netif_stop_queue is called before register_netdev. Fix it by moving
this call after register_netdev. Removes the warning and seems to work,
but why is the call to netif_stop_queue needed at all after
register_netdev?
Signed-off-by: Meelis Roos <mroos@linux.ee>
diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c
index b7cb165..cc760c5 100644
--- a/drivers/net/wireless/hostap/hostap_hw.c
+++ b/drivers/net/wireless/hostap/hostap_hw.c
@@ -3253,6 +3253,8 @@ while (0)
}
printk(KERN_INFO "%s: Registered netdevice %s\n", dev_info, dev->name);
+ netif_stop_queue(dev);
+
hostap_init_data(local);
return dev;
diff --git a/drivers/net/wireless/hostap/hostap_main.c b/drivers/net/wireless/hostap/hostap_main.c
index 25a2722..0f1b202 100644
--- a/drivers/net/wireless/hostap/hostap_main.c
+++ b/drivers/net/wireless/hostap/hostap_main.c
@@ -100,6 +100,7 @@ struct net_device * hostap_add_interface(struct local_info *local,
printk(KERN_DEBUG "%s: registered netdevice %s\n",
mdev->name, dev->name);
+ netif_stop_queue(dev);
return dev;
}
@@ -891,7 +892,6 @@ void hostap_setup_dev(struct net_device *dev, local_info_t *local,
SET_ETHTOOL_OPS(dev, &prism2_ethtool_ops);
- netif_stop_queue(dev);
}
static int hostap_enable_hostapd(local_info_t *local, int rtnl_locked)
--
Meelis Roos (mroos@linux.ee)
^ permalink raw reply related
* Re: Start dropping PCMCIA from compat-wireless for 2.6.38+
From: Luis R. Rodriguez @ 2010-12-09 22:39 UTC (permalink / raw)
To: Jesper Juhl; +Cc: linux-wireless, linux-kernel, linux-bluetooth
In-Reply-To: <alpine.LNX.2.00.1012092329480.25880@swampdragon.chaosbits.net>
On Thu, Dec 9, 2010 at 2:31 PM, Jesper Juhl <jj@chaosbits.net> wrote:
> On Thu, 9 Dec 2010, Luis R. Rodriguez wrote:
>
>> I'm going to start dropping PCMCIA stuff from compat-wireless as I
>> don't think we have any users of it nor interest to keep backporting
>> it. This entails dropping drivers like orinoco, b43 PCMCIA support,
>> libertas, as well as bluetooth bluecard_cs, bluecard_cs, dtl1_cs,
>> bt3c_cs and of course CONFIG_SSB_PCMCIAHOST. If you are a user please
>> yell now.
>>
> Yelling.
> While I'm not personally a user, my mother is. She still has an old IBM
> Thinkpad 600 laptop with a PCMCIA card in it that uses the orinoco driver.
And you have your mother using compat-wireless?
Luis
^ permalink raw reply
* Re: Start dropping PCMCIA from compat-wireless for 2.6.38+
From: Jesper Juhl @ 2010-12-09 22:36 UTC (permalink / raw)
To: Luis R. Rodriguez; +Cc: linux-wireless, linux-kernel, linux-bluetooth
In-Reply-To: <AANLkTikc_u4NhxdGzwQMjbEe12qYmhq481amazTK-JRc@mail.gmail.com>
On Thu, 9 Dec 2010, Luis R. Rodriguez wrote:
> On Thu, Dec 9, 2010 at 2:31 PM, Jesper Juhl <jj@chaosbits.net> wrote:
> > On Thu, 9 Dec 2010, Luis R. Rodriguez wrote:
> >
> >> I'm going to start dropping PCMCIA stuff from compat-wireless as I
> >> don't think we have any users of it nor interest to keep backporting
> >> it. This entails dropping drivers like orinoco, b43 PCMCIA support,
> >> libertas, as well as bluetooth bluecard_cs, bluecard_cs, dtl1_cs,
> >> bt3c_cs and of course CONFIG_SSB_PCMCIAHOST. If you are a user please
> >> yell now.
> >>
> > Yelling.
> > While I'm not personally a user, my mother is. She still has an old IBM
> > Thinkpad 600 laptop with a PCMCIA card in it that uses the orinoco driver.
>
> And you have your mother using compat-wireless?
>
Yes, as a matter of fact I do.
--
Jesper Juhl <jj@chaosbits.net> http://www.chaosbits.net/
Don't top-post http://www.catb.org/~esr/jargon/html/T/top-post.html
Plain text mails only, please.
^ 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