* Re: NetworkManager not listing access points
From: Dan Williams @ 2013-09-23 16:13 UTC (permalink / raw)
To: Detlev Casanova; +Cc: Johannes Berg, linux-wireless, laurent.pinchart
In-Reply-To: <3006906.Q9n0kfrGGo@naboo>
On Sun, 2013-09-22 at 16:20 +0200, Detlev Casanova wrote:
> Le samedi 21 septembre 2013 22:51:59 Johannes Berg a écrit :
> > On Thu, 2013-09-19 at 07:58 +0200, Detlev Casanova wrote:
> > > Here is the output (attached file for formatting)
> >
> > Was that from the good case? The bad case would have been
> more
> > interesting.
>
> This is both cases. I made another one and here, I can give more
> details:
>
> Network manager is trying to list APs and fails until time
> 1379858724.386569
Ok, the logs indicate that the driver simply doesn't see any scan
results:
1379858724.381522: Received scan results (0 BSSes)
Then 20 seconds later (after the explicit iwlist), it finds some scan
results:
1379858746.953924: Received scan results (3 BSSes)
So I'm not sure what's going on here, but I don't think NetworkManager
is the issue; it's likely in the supplicant's scanning code or in the
driver itself. NetworkManager asks the supplicant to scan with both the
wildcard SSID and any hidden-tagged SSID, and the wildcard SSID should
ensure that all available APs are found.
Johannes, does anything else jump out at you in the logs?
Dan
> The The first "iwlist wlan0 scan" is done juste after the log line
> (1379858738.682054). It lists the APs in range in the console but
> not in the Network Manager ui.
>
> The second "iwlist wlan0 scan" is done at time 1379858739.802067
> and APs are being listed in the console and in the Network Manager
> UI.
>
> After that, NM will connect to the acces point with SSID "Maison".
>
> It also looks like the listing in Network Manager comes between the
> moment "iwlist wlan0 scan" is run for the second time and the
> moment is shows its output on the console.
>
> Detlev.
^ permalink raw reply
* RE: [Ilw] Intel 6300 crashes hard (3.11 regression?)
From: Grumbach, Emmanuel @ 2013-09-23 16:01 UTC (permalink / raw)
To: Andrew Lutomirski, ilw@linux.intel.com,
linux-wireless@vger.kernel.org
In-Reply-To: <CAObL_7HXC8qQ54O5QPAo7cQT2yeK-etgKD-7aoaL3dkT4qcOow@mail.gmail.com>
>
> I've had a failure twice on 3.11.1-200.fc19.x86_64. I've never seen it on
> earlier Fedora kernels or on 3.11-rc3. The computer hangs for a minute or so.
> When it comes back, wireless doesn't work. rmmoding and modprobing
> iwldvm doesn't help (it's at the bottom of the attachment).
>
> Even rebooting doesn't fix it unless I pull the battery. Otherwise iwlwifi loads
> but wlan0 doesn't appear and the only log line is the one saying that iwlwifi
> loaded.
>
> The messages on startup are:
>
> [ 11.440725] iwlwifi 0000:03:00.0: can't disable ASPM; OS doesn't
> have ASPM control
> [ 11.440788] iwlwifi 0000:03:00.0: irq 51 for MSI/MSI-X
> [ 11.455653] iwlwifi 0000:03:00.0: loaded firmware version 9.221.4.1
> build 25532 op_mode iwldvm
> [ 11.517924] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEBUG enabled
> [ 11.517930] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEBUGFS enabled
> [ 11.517932] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEVICE_TRACING
> disabled
> [ 11.517934] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_P2P disabled
> [ 11.517936] iwlwifi 0000:03:00.0: Detected Intel(R) Centrino(R)
> Ultimate-N 6300 AGN, REV=0x74
> [ 11.519626] iwlwifi 0000:03:00.0: L1 Enabled; Disabling L0S
>
> (Both failures happened with pcie_aspm=force, but this is without it.
> I want to see if disabling that option fixes it.)
Please do and report back - what I can see here is that we kinda can't access the NIC - so I would be curious if pcie_aspm=force changes the game here.
^ permalink raw reply
* Re: [PATCH 3.12] Revert "rt2x00pci: Use PCI MSIs whenever possible"
From: Jakub Kicinski @ 2013-09-23 13:42 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: linux-wireless, users, moorray
In-Reply-To: <20130923020812.GA1577@redhat.com>
On Mon, 23 Sep 2013 04:08:13 +0200, Stanislaw Gruszka wrote:
>This reverts commit 9483f40d8d01918b399b4e24d0c1111db0afffeb.
>
>Some devices stop to connect with above commit, see:
>https://bugzilla.kernel.org/show_bug.cgi?id=61621
>
>Since there is no clear benefit of having MSI enabled, just revert
>change to fix the problem.
>
>Cc: stable@vger.kernel.org # 3.11+
>Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Acked-by: Jakub Kicinski <kubakici@wp.pl>
>---
> drivers/net/wireless/rt2x00/rt2x00pci.c | 9 +--------
> 1 file changed, 1 insertion(+), 8 deletions(-)
>
>diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.c b/drivers/net/wireless/rt2x00/rt2x00pci.c
>index 76d95de..dc49e52 100644
>--- a/drivers/net/wireless/rt2x00/rt2x00pci.c
>+++ b/drivers/net/wireless/rt2x00/rt2x00pci.c
>@@ -105,13 +105,11 @@ int rt2x00pci_probe(struct pci_dev *pci_dev, const struct rt2x00_ops *ops)
> goto exit_release_regions;
> }
>
>- pci_enable_msi(pci_dev);
>-
> hw = ieee80211_alloc_hw(sizeof(struct rt2x00_dev), ops->hw);
> if (!hw) {
> rt2x00_probe_err("Failed to allocate hardware\n");
> retval = -ENOMEM;
>- goto exit_disable_msi;
>+ goto exit_release_regions;
> }
>
> pci_set_drvdata(pci_dev, hw);
>@@ -152,9 +150,6 @@ exit_free_reg:
> exit_free_device:
> ieee80211_free_hw(hw);
>
>-exit_disable_msi:
>- pci_disable_msi(pci_dev);
>-
> exit_release_regions:
> pci_release_regions(pci_dev);
>
>@@ -179,8 +174,6 @@ void rt2x00pci_remove(struct pci_dev *pci_dev)
> rt2x00pci_free_reg(rt2x00dev);
> ieee80211_free_hw(hw);
>
>- pci_disable_msi(pci_dev);
>-
> /*
> * Free the PCI device data.
> */
^ permalink raw reply
* [PATCH] mac80211: support reporting A-MSDU subframes individually
From: Michal Kazior @ 2013-09-23 13:34 UTC (permalink / raw)
To: johannes; +Cc: linux-wireless, Michal Kazior
Some devices may not be able to report A-MSDUs in
single buffers. Drivers for such devices were
forced to re-assemble A-MSDUs which would then
be eventually disassembled by mac80211. This could
lead to CPU cache thrashing and poor performance.
Since A-MSDU has a single sequence number all
subframes share it. This was in conflict with
retransmission/duplication recovery
(IEEE802.11-2012: 9.3.2.10).
Patch introduces a new flag that is meant to be
set for all individually reported A-MSDU subframes
except the last one. This ensures the
last_seq_ctrl is updated after the last subframe
is processed. If an A-MSDU is actually a duplicate
transmission all reported subframes will be
properly discarded.
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
---
There were no comments on the RFC so far so I'm
posting this as a patch.
The first driver that will use this is ath10k.
include/net/mac80211.h | 10 ++++++++++
net/mac80211/rx.c | 2 +-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 06ffae8..f8f049d 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -829,6 +829,15 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
* @RX_FLAG_STBC_MASK: STBC 2 bit bitmask. 1 - Nss=1, 2 - Nss=2, 3 - Nss=3
* @RX_FLAG_10MHZ: 10 MHz (half channel) was used
* @RX_FLAG_5MHZ: 5 MHz (quarter channel) was used
+ * @RX_FLAG_AMSDU_MORE: Some drivers may prefer to report separate A-MSDU
+ * subframes instead of a one huge frame for performance reasons.
+ * All, but the last MSDU from an A-MSDU should have this flag set. E.g.
+ * if an A-MSDU has 3 frames, the first 2 must have the flag set, while
+ * the 3rd (last) one must not have this flag set. The flag is used to
+ * deal with retransmission/duplication recovery properly since A-MSDU
+ * subframes share the same sequence number. Reported subframes can be
+ * either regular MSDU or singly A-MSDUs. Subframes must not be
+ * interleaved with other frames.
*/
enum mac80211_rx_flags {
RX_FLAG_MMIC_ERROR = BIT(0),
@@ -859,6 +868,7 @@ enum mac80211_rx_flags {
RX_FLAG_STBC_MASK = BIT(26) | BIT(27),
RX_FLAG_10MHZ = BIT(28),
RX_FLAG_5MHZ = BIT(29),
+ RX_FLAG_AMSDU_MORE = BIT(30),
};
#define RX_FLAG_STBC_SHIFT 26
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 8e908e1..43bee02 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -995,7 +995,7 @@ ieee80211_rx_h_check(struct ieee80211_rx_data *rx)
rx->sta->num_duplicates++;
}
return RX_DROP_UNUSABLE;
- } else
+ } else if (!(status->flag & RX_FLAG_AMSDU_MORE))
rx->sta->last_seq_ctrl[rx->seqno_idx] = hdr->seq_ctrl;
}
--
1.7.9.5
^ permalink raw reply related
* Intel 6300 crashes hard (3.11 regression?)
From: Andrew Lutomirski @ 2013-09-23 13:05 UTC (permalink / raw)
To: ilw@linux.intel.com, linux-wireless@vger.kernel.org
[-- Attachment #1: Type: text/plain, Size: 1281 bytes --]
I've had a failure twice on 3.11.1-200.fc19.x86_64. I've never seen
it on earlier Fedora kernels or on 3.11-rc3. The computer hangs for a
minute or so. When it comes back, wireless doesn't work. rmmoding
and modprobing iwldvm doesn't help (it's at the bottom of the
attachment).
Even rebooting doesn't fix it unless I pull the battery. Otherwise
iwlwifi loads but wlan0 doesn't appear and the only log line is the
one saying that iwlwifi loaded.
The messages on startup are:
[ 11.440725] iwlwifi 0000:03:00.0: can't disable ASPM; OS doesn't
have ASPM control
[ 11.440788] iwlwifi 0000:03:00.0: irq 51 for MSI/MSI-X
[ 11.455653] iwlwifi 0000:03:00.0: loaded firmware version 9.221.4.1
build 25532 op_mode iwldvm
[ 11.517924] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEBUG enabled
[ 11.517930] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEBUGFS enabled
[ 11.517932] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEVICE_TRACING disabled
[ 11.517934] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_P2P disabled
[ 11.517936] iwlwifi 0000:03:00.0: Detected Intel(R) Centrino(R)
Ultimate-N 6300 AGN, REV=0x74
[ 11.519626] iwlwifi 0000:03:00.0: L1 Enabled; Disabling L0S
(Both failures happened with pcie_aspm=force, but this is without it.
I want to see if disabling that option fixes it.)
[-- Attachment #2: iwl_hang_2.txt --]
[-- Type: text/plain, Size: 83068 bytes --]
[ 2930.687652] pci_pm_runtime_suspend(): hcd_pci_runtime_suspend+0x0/0x50 returns -16
[ 3030.922014] pci_pm_runtime_suspend(): hcd_pci_runtime_suspend+0x0/0x50 returns -16
[ 3116.219553] pci_pm_runtime_suspend(): hcd_pci_runtime_suspend+0x0/0x50 returns -16
[ 3208.606354] iwlwifi 0000:03:00.0: Error sending POWER_TABLE_CMD: time out after 2000ms.
[ 3208.606362] iwlwifi 0000:03:00.0: Current CMD queue read_ptr 152 write_ptr 156
[ 3208.606367] iwlwifi 0000:03:00.0: set power fail, ret = -110
[ 3210.605704] iwlwifi 0000:03:00.0: fail to flush all tx fifo queues Q 0
[ 3210.605710] iwlwifi 0000:03:00.0: Current SW read_ptr 71 write_ptr 72
[ 3210.626149] ------------[ cut here ]------------
[ 3210.626172] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/pcie/trans.c:883 iwl_trans_pcie_grab_nic_access+0xd3/0xe0 [iwlwifi]()
[ 3210.626175] Timeout waiting for hardware access (CSR_GP_CNTRL 0xffffffff)
[ 3210.626177] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3210.626240] ghash_clmulni_intel drm i2c_core video
[ 3210.626247] CPU: 1 PID: 3090 Comm: kworker/u16:65 Not tainted 3.11.1-200.fc19.x86_64 #1
[ 3210.626250] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3210.626275] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3210.626278] 0000000000000009 ffff88010bbe7ba8 ffffffff816476af ffff88010bbe7bf0
[ 3210.626284] ffff88010bbe7be0 ffffffff810670dd ffff88010f054000 ffff88010f057258
[ 3210.626288] ffff88010bbe7c80 0000000000000000 0000000000000200 ffff88010bbe7c40
[ 3210.626292] Call Trace:
[ 3210.626301] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3210.626307] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3210.626311] [<ffffffff8106714c>] warn_slowpath_fmt+0x4c/0x50
[ 3210.626323] [<ffffffffa03a3ec3>] iwl_trans_pcie_grab_nic_access+0xd3/0xe0 [iwlwifi]
[ 3210.626331] [<ffffffffa03a3c4f>] iwl_trans_pcie_read_mem+0x2f/0xb0 [iwlwifi]
[ 3210.626340] [<ffffffffa03a4163>] iwl_trans_pcie_wait_txq_empty+0x153/0x3d0 [iwlwifi]
[ 3210.626352] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3210.626373] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3210.626393] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3210.626400] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3210.626418] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3210.626435] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3210.626452] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3210.626458] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3210.626463] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3210.626468] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3210.626472] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3210.626477] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3210.626482] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3210.626487] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3210.626490] ---[ end trace 3a840b77ced47a7e ]---
[ 3210.626525] iwl data: 00000000: 40 7d be 0b 01 88 ff ff 00 7d be 0b 01 88 ff ff @}.......}......
[ 3210.646634] iwlwifi 0000:03:00.0: FH TRBs(0) = 0x5a5a5a5a
[ 3210.666975] iwlwifi 0000:03:00.0: FH TRBs(1) = 0x5a5a5a5a
[ 3210.686595] iwlwifi 0000:03:00.0: FH TRBs(2) = 0x5a5a5a5a
[ 3210.706114] iwlwifi 0000:03:00.0: FH TRBs(3) = 0x5a5a5a5a
[ 3210.725645] iwlwifi 0000:03:00.0: FH TRBs(4) = 0x5a5a5a5a
[ 3210.745149] iwlwifi 0000:03:00.0: FH TRBs(5) = 0x5a5a5a5a
[ 3210.764526] iwlwifi 0000:03:00.0: FH TRBs(6) = 0x5a5a5a5a
[ 3210.783717] iwlwifi 0000:03:00.0: FH TRBs(7) = 0x5a5a5a5a
[ 3210.822849] ------------[ cut here ]------------
[ 3210.822863] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3210.822865] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3210.822891] ghash_clmulni_intel drm i2c_core video
[ 3210.822895] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3210.822896] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3210.822909] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3210.822910] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3210.822912] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3210.822914] 0000000000000000 0000000000a02e34 0000000000000200 ffff88010bbe7ca8
[ 3210.822915] Call Trace:
[ 3210.822920] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3210.822922] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3210.822924] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3210.822928] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3210.822933] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3210.822941] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3210.822948] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3210.822951] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3210.822958] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3210.822964] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3210.822970] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3210.822972] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3210.822974] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3210.822976] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3210.822978] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3210.822980] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3210.822982] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3210.822984] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3210.822985] ---[ end trace 3a840b77ced47a7f ]---
[ 3210.862301] iwlwifi 0000:03:00.0: Q 0 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3210.901748] ------------[ cut here ]------------
[ 3210.901764] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3210.901765] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3210.901793] ghash_clmulni_intel drm i2c_core video
[ 3210.901797] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3210.901798] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3210.901813] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3210.901815] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3210.901817] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3210.901818] 0000000000000001 0000000000a02e38 000000000000a5a5 ffff88010bbe7ca8
[ 3210.901820] Call Trace:
[ 3210.901825] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3210.901828] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3210.901829] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3210.901833] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3210.901839] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3210.901847] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3210.901854] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3210.901857] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3210.901863] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3210.901870] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3210.901876] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3210.901878] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3210.901880] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3210.901882] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3210.901884] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3210.901885] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3210.901888] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3210.901889] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3210.901891] ---[ end trace 3a840b77ced47a80 ]---
[ 3210.941067] iwlwifi 0000:03:00.0: Q 1 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3210.980449] ------------[ cut here ]------------
[ 3210.980462] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3210.980463] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3210.980489] ghash_clmulni_intel drm i2c_core video
[ 3210.980493] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3210.980493] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3210.980507] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3210.980508] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3210.980510] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3210.980512] 0000000000000002 0000000000a02e3c 000000000000a5a5 ffff88010bbe7ca8
[ 3210.980513] Call Trace:
[ 3210.980518] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3210.980520] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3210.980522] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3210.980526] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3210.980531] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3210.980538] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3210.980545] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3210.980548] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3210.980554] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3210.980560] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3210.980566] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3210.980567] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3210.980569] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3210.980571] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3210.980573] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3210.980575] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3210.980577] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3210.980578] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3210.980579] ---[ end trace 3a840b77ced47a81 ]---
[ 3211.019944] iwlwifi 0000:03:00.0: Q 2 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3211.059290] ------------[ cut here ]------------
[ 3211.059300] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3211.059301] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3211.059325] ghash_clmulni_intel drm i2c_core video
[ 3211.059328] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3211.059329] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3211.059340] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3211.059341] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3211.059343] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3211.059345] 0000000000000003 0000000000a02e40 000000000000a5a5 ffff88010bbe7ca8
[ 3211.059346] Call Trace:
[ 3211.059350] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3211.059352] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3211.059353] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3211.059357] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3211.059361] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3211.059369] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3211.059375] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3211.059378] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3211.059384] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3211.059390] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3211.059396] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3211.059398] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3211.059399] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3211.059401] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3211.059403] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3211.059405] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.059407] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3211.059408] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.059410] ---[ end trace 3a840b77ced47a82 ]---
[ 3211.098745] iwlwifi 0000:03:00.0: Q 3 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3211.138058] ------------[ cut here ]------------
[ 3211.138066] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3211.138066] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3211.138089] ghash_clmulni_intel drm i2c_core video
[ 3211.138092] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3211.138093] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3211.138102] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3211.138103] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3211.138105] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3211.138106] 0000000000000004 0000000000a02e44 000000000000a5a5 ffff88010bbe7ca8
[ 3211.138108] Call Trace:
[ 3211.138111] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3211.138113] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3211.138114] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3211.138118] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3211.138122] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3211.138129] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3211.138136] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3211.138139] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3211.138144] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3211.138150] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3211.138156] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3211.138158] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3211.138160] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3211.138162] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3211.138163] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3211.138165] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.138167] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3211.138168] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.138169] ---[ end trace 3a840b77ced47a83 ]---
[ 3211.177447] iwlwifi 0000:03:00.0: Q 4 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3211.216746] ------------[ cut here ]------------
[ 3211.216754] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3211.216755] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3211.216779] ghash_clmulni_intel drm i2c_core video
[ 3211.216781] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3211.216782] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3211.216793] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3211.216794] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3211.216796] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3211.216798] 0000000000000005 0000000000a02e48 000000000000a5a5 ffff88010bbe7ca8
[ 3211.216799] Call Trace:
[ 3211.216802] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3211.216804] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3211.216806] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3211.216809] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3211.216814] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3211.216821] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3211.216828] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3211.216831] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3211.216837] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3211.216842] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3211.216848] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3211.216850] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3211.216852] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3211.216854] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3211.216855] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3211.216857] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.216859] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3211.216868] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.216869] ---[ end trace 3a840b77ced47a84 ]---
[ 3211.256226] iwlwifi 0000:03:00.0: Q 5 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3211.295528] ------------[ cut here ]------------
[ 3211.295535] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3211.295536] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3211.295560] ghash_clmulni_intel drm i2c_core video
[ 3211.295563] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3211.295564] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3211.295574] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3211.295575] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3211.295577] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3211.295579] 0000000000000006 0000000000a02e4c 000000000000a5a5 ffff88010bbe7ca8
[ 3211.295580] Call Trace:
[ 3211.295583] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3211.295585] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3211.295587] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3211.295590] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3211.295595] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3211.295603] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3211.295609] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3211.295612] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3211.295618] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3211.295624] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3211.295629] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3211.295631] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3211.295633] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3211.295635] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3211.295636] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3211.295638] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.295640] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3211.295642] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.295643] ---[ end trace 3a840b77ced47a85 ]---
[ 3211.334994] iwlwifi 0000:03:00.0: Q 6 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3211.374242] ------------[ cut here ]------------
[ 3211.374255] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3211.374256] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3211.374281] ghash_clmulni_intel drm i2c_core video
[ 3211.374284] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3211.374285] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3211.374298] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3211.374300] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3211.374301] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3211.374303] 0000000000000007 0000000000a02e50 000000000000a5a5 ffff88010bbe7ca8
[ 3211.374305] Call Trace:
[ 3211.374309] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3211.374312] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3211.374313] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3211.374317] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3211.374322] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3211.374329] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3211.374336] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3211.374339] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3211.374345] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3211.374351] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3211.374357] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3211.374359] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3211.374360] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3211.374362] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3211.374364] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3211.374366] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.374368] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3211.374369] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.374370] ---[ end trace 3a840b77ced47a86 ]---
[ 3211.413706] iwlwifi 0000:03:00.0: Q 7 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3211.453011] ------------[ cut here ]------------
[ 3211.453021] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3211.453022] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3211.453047] ghash_clmulni_intel drm i2c_core video
[ 3211.453050] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3211.453051] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3211.453061] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3211.453062] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3211.453064] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3211.453065] 0000000000000008 0000000000a02e54 000000000000a5a5 ffff88010bbe7ca8
[ 3211.453067] Call Trace:
[ 3211.453071] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3211.453073] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3211.453074] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3211.453078] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3211.453082] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3211.453090] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3211.453096] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3211.453099] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3211.453105] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3211.453111] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3211.453116] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3211.453118] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3211.453120] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3211.453122] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3211.453124] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3211.453126] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.453128] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3211.453129] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.453130] ---[ end trace 3a840b77ced47a87 ]---
[ 3211.492450] iwlwifi 0000:03:00.0: Q 8 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3211.531792] ------------[ cut here ]------------
[ 3211.531800] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3211.531801] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3211.531824] ghash_clmulni_intel drm i2c_core video
[ 3211.531827] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3211.531828] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3211.531838] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3211.531839] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3211.531841] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3211.531842] 0000000000000009 0000000000a02e58 000000000000a5a5 ffff88010bbe7ca8
[ 3211.531844] Call Trace:
[ 3211.531848] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3211.531850] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3211.531851] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3211.531855] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3211.531859] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3211.531866] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3211.531873] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3211.531875] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3211.531881] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3211.531887] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3211.531893] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3211.531895] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3211.531897] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3211.531898] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3211.531900] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3211.531902] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.531904] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3211.531905] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.531906] ---[ end trace 3a840b77ced47a88 ]---
[ 3211.571231] iwlwifi 0000:03:00.0: Q 9 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3211.610587] ------------[ cut here ]------------
[ 3211.610605] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3211.610606] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3211.610647] ghash_clmulni_intel drm i2c_core video
[ 3211.610651] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3211.610652] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3211.610665] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3211.610666] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3211.610669] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3211.610671] 000000000000000a 0000000000a02e5c 000000000000a5a5 ffff88010bbe7ca8
[ 3211.610673] Call Trace:
[ 3211.610678] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3211.610681] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3211.610684] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3211.610688] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3211.610693] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3211.610702] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3211.610711] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3211.610714] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3211.610721] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3211.610729] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3211.610737] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3211.610739] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3211.610742] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3211.610744] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3211.610746] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3211.610748] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.610750] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3211.610753] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.610754] ---[ end trace 3a840b77ced47a89 ]---
[ 3211.650120] iwlwifi 0000:03:00.0: Q 10 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3211.689445] ------------[ cut here ]------------
[ 3211.689454] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3211.689455] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3211.689480] ghash_clmulni_intel drm i2c_core video
[ 3211.689483] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3211.689484] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3211.689495] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3211.689496] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3211.689498] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3211.689499] 000000000000000b 0000000000a02e60 000000000000a5a5 ffff88010bbe7ca8
[ 3211.689501] Call Trace:
[ 3211.689505] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3211.689507] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3211.689509] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3211.689513] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3211.689517] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3211.689524] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3211.689531] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3211.689533] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3211.689539] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3211.689545] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3211.689551] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3211.689553] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3211.689555] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3211.689556] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3211.689558] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3211.689560] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.689562] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3211.689563] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.689565] ---[ end trace 3a840b77ced47a8a ]---
[ 3211.728940] iwlwifi 0000:03:00.0: Q 11 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3211.768256] ------------[ cut here ]------------
[ 3211.768267] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3211.768268] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3211.768294] ghash_clmulni_intel drm i2c_core video
[ 3211.768297] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3211.768298] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3211.768309] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3211.768311] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3211.768312] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3211.768314] 000000000000000c 0000000000a02e64 000000000000a5a5 ffff88010bbe7ca8
[ 3211.768316] Call Trace:
[ 3211.768320] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3211.768322] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3211.768323] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3211.768327] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3211.768332] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3211.768339] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3211.768346] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3211.768348] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3211.768354] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3211.768360] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3211.768366] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3211.768368] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3211.768370] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3211.768371] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3211.768373] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3211.768375] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.768377] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3211.768378] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.768380] ---[ end trace 3a840b77ced47a8b ]---
[ 3211.808010] iwlwifi 0000:03:00.0: Q 12 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3211.847362] ------------[ cut here ]------------
[ 3211.847371] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3211.847372] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3211.847396] ghash_clmulni_intel drm i2c_core video
[ 3211.847399] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3211.847400] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3211.847411] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3211.847412] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3211.847414] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3211.847415] 000000000000000d 0000000000a02e68 000000000000a5a5 ffff88010bbe7ca8
[ 3211.847417] Call Trace:
[ 3211.847421] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3211.847423] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3211.847424] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3211.847428] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3211.847432] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3211.847440] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3211.847447] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3211.847450] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3211.847456] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3211.847462] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3211.847468] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3211.847470] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3211.847471] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3211.847473] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3211.847475] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3211.847477] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.847479] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3211.847480] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.847481] ---[ end trace 3a840b77ced47a8c ]---
[ 3211.886844] iwlwifi 0000:03:00.0: Q 13 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3211.925942] ------------[ cut here ]------------
[ 3211.925961] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3211.925962] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3211.926003] ghash_clmulni_intel drm i2c_core video
[ 3211.926007] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3211.926009] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3211.926023] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3211.926025] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3211.926027] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3211.926029] 000000000000000e 0000000000a02e6c 000000000000a5a5 ffff88010bbe7ca8
[ 3211.926031] Call Trace:
[ 3211.926036] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3211.926038] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3211.926040] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3211.926044] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3211.926049] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3211.926057] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3211.926065] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3211.926069] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3211.926075] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3211.926081] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3211.926088] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3211.926090] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3211.926092] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3211.926094] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3211.926095] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3211.926097] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.926099] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3211.926101] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3211.926102] ---[ end trace 3a840b77ced47a8d ]---
[ 3211.965158] iwlwifi 0000:03:00.0: Q 14 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3212.004535] ------------[ cut here ]------------
[ 3212.004544] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3212.004545] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3212.004568] ghash_clmulni_intel drm i2c_core video
[ 3212.004571] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3212.004572] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3212.004582] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3212.004583] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3212.004585] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3212.004586] 000000000000000f 0000000000a02e70 000000000000a5a5 ffff88010bbe7ca8
[ 3212.004588] Call Trace:
[ 3212.004591] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3212.004593] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3212.004595] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3212.004599] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3212.004604] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3212.004611] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3212.004618] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3212.004620] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3212.004626] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3212.004632] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3212.004638] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3212.004640] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3212.004642] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3212.004644] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3212.004645] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3212.004647] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3212.004649] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3212.004650] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3212.004651] ---[ end trace 3a840b77ced47a8e ]---
[ 3212.044028] iwlwifi 0000:03:00.0: Q 15 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3212.083403] ------------[ cut here ]------------
[ 3212.083412] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3212.083413] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3212.083437] ghash_clmulni_intel drm i2c_core video
[ 3212.083440] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3212.083441] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3212.083451] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3212.083453] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3212.083454] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3212.083456] 0000000000000010 0000000000a02e74 000000000000a5a5 ffff88010bbe7ca8
[ 3212.083457] Call Trace:
[ 3212.083461] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3212.083463] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3212.083465] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3212.083468] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3212.083473] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3212.083480] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3212.083487] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3212.083489] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3212.083495] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3212.083501] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3212.083507] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3212.083509] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3212.083511] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3212.083513] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3212.083514] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3212.083516] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3212.083518] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3212.083519] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3212.083521] ---[ end trace 3a840b77ced47a8f ]---
[ 3212.122861] iwlwifi 0000:03:00.0: Q 16 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3212.162210] ------------[ cut here ]------------
[ 3212.162222] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3212.162223] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3212.162249] ghash_clmulni_intel drm i2c_core video
[ 3212.162252] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3212.162253] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3212.162265] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3212.162266] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3212.162268] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3212.162270] 0000000000000011 0000000000a02e78 000000000000a5a5 ffff88010bbe7ca8
[ 3212.162271] Call Trace:
[ 3212.162275] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3212.162278] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3212.162280] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3212.162283] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3212.162288] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3212.162296] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3212.162304] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3212.162307] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3212.162313] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3212.162319] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3212.162325] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3212.162327] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3212.162329] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3212.162331] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3212.162333] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3212.162335] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3212.162337] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3212.162338] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3212.162340] ---[ end trace 3a840b77ced47a90 ]---
[ 3212.201678] iwlwifi 0000:03:00.0: Q 17 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3212.240980] ------------[ cut here ]------------
[ 3212.240989] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3212.240990] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3212.241014] ghash_clmulni_intel drm i2c_core video
[ 3212.241017] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3212.241018] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3212.241029] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3212.241030] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3212.241032] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3212.241033] 0000000000000012 0000000000a02e7c 000000000000a5a5 ffff88010bbe7ca8
[ 3212.241035] Call Trace:
[ 3212.241038] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3212.241040] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3212.241042] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3212.241045] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3212.241050] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3212.241057] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3212.241064] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3212.241067] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3212.241073] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3212.241079] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3212.241085] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3212.241087] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3212.241088] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3212.241090] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3212.241092] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3212.241094] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3212.241095] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3212.241097] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3212.241098] ---[ end trace 3a840b77ced47a91 ]---
[ 3212.280379] iwlwifi 0000:03:00.0: Q 18 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3212.319685] ------------[ cut here ]------------
[ 3212.319695] WARNING: CPU: 1 PID: 3090 at drivers/net/wireless/iwlwifi/iwl-trans.h:758 iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]()
[ 3212.319696] Modules linked in: tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper
[ 3212.319720] ghash_clmulni_intel drm i2c_core video
[ 3212.319723] CPU: 1 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3212.319724] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3212.319735] Workqueue: phy0 ieee80211_beacon_connection_loss_work [mac80211]
[ 3212.319736] 0000000000000009 ffff88010bbe7c60 ffffffff816476af 0000000000000000
[ 3212.319738] ffff88010bbe7c98 ffffffff810670dd ffff8801153be000 ffff88010f054000
[ 3212.319739] 0000000000000013 0000000000a02e80 000000000000a5a5 ffff88010bbe7ca8
[ 3212.319741] Call Trace:
[ 3212.319745] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3212.319747] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3212.319748] [<ffffffff810671ba>] warn_slowpath_null+0x1a/0x20
[ 3212.319752] [<ffffffffa03a4373>] iwl_trans_pcie_wait_txq_empty+0x363/0x3d0 [iwlwifi]
[ 3212.319756] [<ffffffffa05c85f0>] iwlagn_mac_flush+0xa0/0x1a0 [iwldvm]
[ 3212.319764] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3212.319771] [<ffffffffa04c34f4>] ieee80211_mgd_probe_ap_send+0xa4/0x140 [mac80211]
[ 3212.319773] [<ffffffff81082170>] ? cancel_work_sync+0x10/0x20
[ 3212.319780] [<ffffffffa04c309a>] ? ieee80211_recalc_ps.part.20+0xba/0x200 [mac80211]
[ 3212.319786] [<ffffffffa04c3689>] ieee80211_mgd_probe_ap.part.21+0xf9/0x150 [mac80211]
[ 3212.319792] [<ffffffffa04c3cd3>] ieee80211_beacon_connection_loss_work+0x53/0x80 [mac80211]
[ 3212.319793] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3212.319795] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3212.319797] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3212.319799] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3212.319800] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3212.319802] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3212.319804] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3212.319805] ---[ end trace 3a840b77ced47a92 ]---
[ 3212.359178] iwlwifi 0000:03:00.0: Q 19 is active and mapped to fifo 2 ra_tid 0xa5a5 [90,1515870810]
[ 3214.355878] iwlwifi 0000:03:00.0: Error sending REPLY_TXFIFO_FLUSH: time out after 2000ms.
[ 3214.355890] iwlwifi 0000:03:00.0: Current CMD queue read_ptr 152 write_ptr 162
[ 3214.355905] iwlwifi 0000:03:00.0: Couldn't flush the AGG queue
[ 3216.392296] iwlwifi 0000:03:00.0: Error sending REPLY_ADD_STA: time out after 2000ms.
[ 3216.392303] iwlwifi 0000:03:00.0: Current CMD queue read_ptr 152 write_ptr 165
[ 3216.392310] wlan0: HW problem - can not stop rx aggregation for 50:a7:33:27:30:78 tid 0
[ 3218.389675] iwlwifi 0000:03:00.0: Error sending REPLY_ADD_STA: time out after 2000ms.
[ 3218.389683] iwlwifi 0000:03:00.0: Current CMD queue read_ptr 152 write_ptr 168
[ 3218.389689] wlan0: HW problem - can not stop rx aggregation for 50:a7:33:27:30:78 tid 1
[ 3220.387166] iwlwifi 0000:03:00.0: Error sending REPLY_ADD_STA: time out after 2000ms.
[ 3220.387175] iwlwifi 0000:03:00.0: Current CMD queue read_ptr 152 write_ptr 171
[ 3220.387182] wlan0: HW problem - can not stop rx aggregation for 50:a7:33:27:30:78 tid 5
[ 3222.384559] iwlwifi 0000:03:00.0: Error sending REPLY_ADD_STA: time out after 2000ms.
[ 3222.384571] iwlwifi 0000:03:00.0: Current CMD queue read_ptr 152 write_ptr 174
[ 3222.384587] wlan0: HW problem - can not stop rx aggregation for 50:a7:33:27:30:78 tid 6
[ 3224.381976] iwlwifi 0000:03:00.0: Error sending REPLY_QOS_PARAM: time out after 2000ms.
[ 3224.381984] iwlwifi 0000:03:00.0: Current CMD queue read_ptr 152 write_ptr 177
[ 3224.381989] iwlwifi 0000:03:00.0: Failed to update QoS
[ 3226.379406] iwlwifi 0000:03:00.0: Error sending REPLY_RXON: time out after 2000ms.
[ 3226.379413] iwlwifi 0000:03:00.0: Current CMD queue read_ptr 152 write_ptr 180
[ 3226.379418] iwlwifi 0000:03:00.0: Error clearing ASSOC_MSK on BSS (-110)
[ 3226.583195] iwlwifi 0000:03:00.0: No space in command queue
[ 3226.583217] iwlwifi 0000:03:00.0: Restarting adapter queue is full
[ 3226.583232] iwlwifi 0000:03:00.0: Error sending REPLY_LEDS_CMD: enqueue_hcmd failed: -28
[ 3228.376842] iwlwifi 0000:03:00.0: Error sending REPLY_RXON: time out after 2000ms.
[ 3228.376858] iwlwifi 0000:03:00.0: Current CMD queue read_ptr 152 write_ptr 181
[ 3228.376862] iwlwifi 0000:03:00.0: Error clearing ASSOC_MSK on BSS (-110)
[ 3230.434995] iwlwifi 0000:03:00.0: Failing on timeout while stopping DMA channel 0 [0x5a5a5a5a]
[ 3232.515821] iwlwifi 0000:03:00.0: Failing on timeout while stopping DMA channel 2 [0x5a5a5a5a]
[ 3234.633748] iwlwifi 0000:03:00.0: Failing on timeout while stopping DMA channel 5 [0x5a5a5a5a]
[ 3236.712722] iwlwifi 0000:03:00.0: Failing on timeout while stopping DMA channel 7 [0x5a5a5a5a]
[ 3238.715467] ieee80211 phy0: Hardware restart was requested
[ 3238.715486] ------------[ cut here ]------------
[ 3238.715499] WARNING: CPU: 2 PID: 3090 at drivers/net/wireless/iwlwifi/dvm/../iwl-trans.h:692 iwlagn_mac_flush+0x18b/0x1a0 [iwldvm]()
[ 3238.715501] iwl_trans_wait_tx_queue_empty bad state = 0
[ 3238.715501] Modules linked in:
[ 3238.715502] tcp_lp usb_storage fuse tun rfcomm bnep btusb bluetooth ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack ip6table_filter ipt_MASQUERADE ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack snd_hda_codec_hdmi snd_hda_codec_conexant iTCO_wdt iTCO_vendor_support snd_hda_intel snd_hda_codec snd_hwdep snd_seq snd_seq_device arc4 snd_pcm x86_pkg_temp_thermal coretemp kvm_intel iwldvm mac80211 kvm sdhci_pci sdhci iwlwifi microcode joydev mmc_core serio_raw i2c_i801 cfg80211 e1000e lpc_ich mfd_core snd_page_alloc snd_timer shpchp mei_me ptp mei pps_core wmi thinkpad_acpi snd soundcore rfkill tpm_tis tpm tpm_bios mperf nfsd auth_rpcgss uinput binfmt_misc nfs_acl lockd sunrpc dm_crypt crc32_pclmul crc32c_intel i915 i2c_algo_bit drm_kms_helper ghash_clmulni_intel
[ 3238.715552] drm i2c_core video
[ 3238.715556] CPU: 2 PID: 3090 Comm: kworker/u16:65 Tainted: G W 3.11.1-200.fc19.x86_64 #1
[ 3238.715557] Hardware name: LENOVO 4286CTO/4286CTO, BIOS 8DET49WW (1.19 ) 07/01/2011
[ 3238.715574] Workqueue: phy0 ieee80211_iface_work [mac80211]
[ 3238.715576] 0000000000000009 ffff88010bbe7ae8 ffffffff816476af ffff88010bbe7b30
[ 3238.715578] ffff88010bbe7b20 ffffffff810670dd ffff88010f289760 ffff88010f2897a8
[ 3238.715581] ffff88010f054000 ffff88010f289770 ffff88011538a6f0 ffff88010bbe7b80
[ 3238.715583] Call Trace:
[ 3238.715589] [<ffffffff816476af>] dump_stack+0x45/0x56
[ 3238.715594] [<ffffffff810670dd>] warn_slowpath_common+0x7d/0xa0
[ 3238.715596] [<ffffffff8106714c>] warn_slowpath_fmt+0x4c/0x50
[ 3238.715602] [<ffffffffa05c86db>] iwlagn_mac_flush+0x18b/0x1a0 [iwldvm]
[ 3238.715613] [<ffffffffa04af54d>] ieee80211_flush_queues+0xbd/0x140 [mac80211]
[ 3238.715621] [<ffffffffa0497bd1>] __ieee80211_recalc_idle+0xb1/0x100 [mac80211]
[ 3238.715629] [<ffffffffa04992c4>] ieee80211_recalc_idle+0x14/0x30 [mac80211]
[ 3238.715637] [<ffffffffa04b2ad7>] ieee80211_free_chanctx+0xc7/0x1d0 [mac80211]
[ 3238.715647] [<ffffffffa04b346b>] __ieee80211_vif_release_channel+0x14b/0x1f0 [mac80211]
[ 3238.715656] [<ffffffffa04b3bcd>] ieee80211_vif_release_channel+0x4d/0x70 [mac80211]
[ 3238.715666] [<ffffffffa04c39d7>] ieee80211_set_disassoc+0x267/0x3d0 [mac80211]
[ 3238.715674] [<ffffffffa04c3b75>] ieee80211_sta_connection_lost.isra.22+0x35/0x70 [mac80211]
[ 3238.715683] [<ffffffffa04c5bc3>] ieee80211_sta_work+0x1d3/0xec0 [mac80211]
[ 3238.715687] [<ffffffff810115ce>] ? __switch_to+0x13e/0x4b0
[ 3238.715695] [<ffffffffa04987e9>] ieee80211_iface_work+0x2c9/0x360 [mac80211]
[ 3238.715699] [<ffffffff8107f119>] ? pwq_activate_delayed_work+0x39/0x80
[ 3238.715701] [<ffffffff81081055>] process_one_work+0x175/0x430
[ 3238.715704] [<ffffffff81081c7b>] worker_thread+0x11b/0x3a0
[ 3238.715706] [<ffffffff81081b60>] ? rescuer_thread+0x340/0x340
[ 3238.715708] [<ffffffff810885c0>] kthread+0xc0/0xd0
[ 3238.715709] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3238.715712] [<ffffffff816567ac>] ret_from_fork+0x7c/0xb0
[ 3238.715714] [<ffffffff81088500>] ? insert_kthread_work+0x40/0x40
[ 3238.715715] ---[ end trace 3a840b77ced47a93 ]---
[ 3238.715800] iwlwifi 0000:03:00.0: L1 Disabled; Enabling L0S
[ 3238.774516] iwlwifi 0000:03:00.0: Radio type=0x0-0x3-0x1
[ 3244.536067] iwlwifi 0000:03:00.0: Failed to load firmware chunk!
[ 3244.536127] iwlwifi 0000:03:00.0: Could not load the [0] uCode section
[ 3244.536171] iwlwifi 0000:03:00.0: Failed to start RT ucode: -110
[ 3246.565043] iwlwifi 0000:03:00.0: Failing on timeout while stopping DMA channel 0 [0x5a5a5a5a]
[ 3248.568979] iwlwifi 0000:03:00.0: Failing on timeout while stopping DMA channel 2 [0x5a5a5a5a]
[ 3250.657730] iwlwifi 0000:03:00.0: Failing on timeout while stopping DMA channel 5 [0x5a5a5a5a]
[ 3252.702681] iwlwifi 0000:03:00.0: Failing on timeout while stopping DMA channel 7 [0x5a5a5a5a]
[ 3252.702846] psmouse serio1: TouchPad at isa0060/serio1/input0 lost synchronization, throwing 2 bytes away.
[ 3252.743010] psmouse serio1: resync failed, issuing reconnect request
[ 3254.686025] iwlwifi 0000:03:00.0: Unable to initialize device.
[ 3254.686755] cfg80211: Calling CRDA to update world regulatory domain
[ 3254.686955] [sched_delayed] sched: RT throttling activated
[ 3254.687243] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3254.688233] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3254.693027] cfg80211: World regulatory domain updated:
[ 3254.693030] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[ 3254.693031] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[ 3254.693032] cfg80211: (2457000 KHz - 2482000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[ 3254.693033] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[ 3254.693034] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[ 3254.693035] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[ 3254.693161] cfg80211: Calling CRDA for country: IE
[ 3254.694959] cfg80211: Regulatory domain changed to country: IE
[ 3254.694962] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[ 3254.694963] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[ 3254.694964] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[ 3254.694965] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[ 3254.694966] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm)
[ 3254.694967] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
[ 3255.687277] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3256.687363] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3257.687485] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3258.687615] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3259.687794] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3260.687842] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3261.687899] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3262.688057] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3263.688139] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3264.687300] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3265.687446] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3266.687458] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3267.687495] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3268.687672] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3269.687964] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3270.036780] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3270.687724] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3271.687838] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3272.688054] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3273.688141] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3274.687234] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3275.687423] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3276.687713] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3277.687946] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3278.688223] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3279.688451] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3280.688622] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3281.688407] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3282.688539] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3283.688884] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3284.688018] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3285.688198] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3286.688438] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3287.688681] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3288.688909] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3289.689243] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3290.689549] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3291.689732] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3292.689178] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3293.688982] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3294.688181] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3294.795259] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3297.809634] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3298.809739] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3299.809928] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3300.809184] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3301.809515] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3302.809838] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3303.809965] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3304.809424] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3305.809668] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3306.809932] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3307.810392] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3308.810541] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3309.810733] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3310.811033] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3311.811400] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3312.811571] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3313.811661] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3314.810983] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3315.811007] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3316.811118] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3317.811221] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3318.811342] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3319.811594] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3320.811769] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3321.811982] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3322.760877] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3325.775035] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3326.775088] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3327.775618] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3328.775760] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3329.775922] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3330.776077] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3331.776168] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3332.776188] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3333.776244] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3334.775493] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3335.775631] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3336.775806] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3337.775995] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3338.776116] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3339.776157] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3340.776302] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3341.776493] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3342.776718] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3343.776869] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3344.776214] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3345.776462] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3346.777148] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3347.777398] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3348.777658] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3349.777864] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3350.724579] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3353.720334] iwlwifi 0000:03:00.0: Request scan called when driver not ready.
[ 3364.153748] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEBUG enabled
[ 3364.153753] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEBUGFS enabled
[ 3364.153755] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_DEVICE_TRACING disabled
[ 3364.153757] iwlwifi 0000:03:00.0: CONFIG_IWLWIFI_P2P disabled
[ 3364.153760] iwlwifi 0000:03:00.0: Detected Intel(R) Centrino(R) Ultimate-N 6300 AGN, REV=0x74
[ 3364.153811] iwlwifi 0000:03:00.0: L1 Disabled; Enabling L0S
[ 3364.193549] iwlwifi 0000:03:00.0: bad EEPROM/OTP signature, type=OTP, EEPROM_GP=0x00000007
[ 3364.193555] iwlwifi 0000:03:00.0: EEPROM not found, EEPROM_GP=0xffffffff
[ 3364.193566] iwlwifi 0000:03:00.0: Unable to init EEPROM
^ permalink raw reply
* Re: [PATCH 37/51] DMA-API: usb: use new dma_coerce_mask_and_coherent()
From: Nicolas Ferre @ 2013-09-23 12:34 UTC (permalink / raw)
To: Russell King, alsa-devel, b43-dev, devel, devicetree, dri-devel,
e1000-devel, linux-arm-kernel, linux-crypto, linux-doc,
linux-fbdev, linux-ide, linux-media, linux-mmc, linux-nvme,
linux-omap, linuxppc-dev, linux-samsung-soc, linux-scsi,
linux-tegra, linux-usb, linux-wireless, netdev,
Solarflare linux maintainers, uclinux-dist-devel
Cc: Alexander Shishkin, Greg Kroah-Hartman, Felipe Balbi, Kukjin Kim,
Alan Stern, Tony Prisk, Stephen Warren
In-Reply-To: <E1VMmIV-0007jw-Gq@rmk-PC.arm.linux.org.uk>
On 20/09/2013 00:02, Russell King :
> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
> ---
> drivers/usb/chipidea/ci_hdrc_imx.c | 4 +---
> drivers/usb/dwc3/dwc3-exynos.c | 4 +---
> drivers/usb/host/ehci-atmel.c | 4 +---
For Atmel driver:
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
[..]
> diff --git a/drivers/usb/host/ehci-atmel.c b/drivers/usb/host/ehci-atmel.c
> index 5831a88..8e7323e 100644
> --- a/drivers/usb/host/ehci-atmel.c
> +++ b/drivers/usb/host/ehci-atmel.c
> @@ -90,9 +90,7 @@ static int ehci_atmel_drv_probe(struct platform_device *pdev)
> * Since shared usb code relies on it, set it here for now.
> * Once we have dma capability bindings this can go away.
> */
> - if (!pdev->dev.dma_mask)
> - pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask;
> - retval = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
> + retval = dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
> if (retval)
> goto fail_create_hcd;
>
[..]
Thanks Russell,
--
Nicolas Ferre
^ permalink raw reply
* Re: [PATCH 36/51] DMA-API: usb: use dma_set_coherent_mask()
From: Nicolas Ferre @ 2013-09-23 12:30 UTC (permalink / raw)
To: Russell King, alsa-devel, b43-dev, devel, devicetree, dri-devel,
e1000-devel, linux-arm-kernel, linux-crypto, linux-doc,
linux-fbdev, linux-ide, linux-media, linux-mmc, linux-nvme,
linux-omap, linuxppc-dev, linux-samsung-soc, linux-scsi,
linux-tegra, linux-usb, linux-wireless, netdev,
Solarflare linux maintainers, uclinux-dist-devel
Cc: Kukjin Kim, Stephen Warren, Alexander Shishkin,
Greg Kroah-Hartman, Felipe Balbi, Alan Stern
In-Reply-To: <E1VMmHX-0007jq-Cj@rmk-PC.arm.linux.org.uk>
On 20/09/2013 00:01, Russell King :
> The correct way for a driver to specify the coherent DMA mask is
> not to directly access the field in the struct device, but to use
> dma_set_coherent_mask(). Only arch and bus code should access this
> member directly.
>
> Convert all direct write accesses to using the correct API.
>
> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
> ---
> drivers/usb/chipidea/ci_hdrc_imx.c | 5 +++--
> drivers/usb/dwc3/dwc3-exynos.c | 5 +++--
> drivers/usb/gadget/lpc32xx_udc.c | 4 +++-
> drivers/usb/host/ehci-atmel.c | 5 +++--
For Atmel driver:
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
[..]
> diff --git a/drivers/usb/host/ehci-atmel.c b/drivers/usb/host/ehci-atmel.c
> index 3b645ff..5831a88 100644
> --- a/drivers/usb/host/ehci-atmel.c
> +++ b/drivers/usb/host/ehci-atmel.c
> @@ -92,8 +92,9 @@ static int ehci_atmel_drv_probe(struct platform_device *pdev)
> */
> if (!pdev->dev.dma_mask)
> pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask;
> - if (!pdev->dev.coherent_dma_mask)
> - pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
> + retval = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
> + if (retval)
> + goto fail_create_hcd;
>
> hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev));
> if (!hcd) {
[..]
Thanks,
--
Nicolas Ferre
^ permalink raw reply
* Re: [brcmfmac] BUG: unable to handle kernel paging request at ffffffff82196446
From: Fengguang Wu @ 2013-09-23 12:14 UTC (permalink / raw)
To: Arend van Spriel
Cc: Hante Meuleman, John W. Linville, linux-kernel, linux-wireless,
brcm80211-dev-list
In-Reply-To: <5236CC49.7000206@broadcom.com>
On Mon, Sep 16, 2013 at 11:15:53AM +0200, Arend van Spriel wrote:
> On 09/02/2013 12:23 PM, Fengguang Wu wrote:
> >Greetings,
> >
> >I got the below dmesg and the first bad commit is
>
> Hi Fengguang,
>
> I could not reproduce this issue. Could you retest with the attached
> patch file applied and let me know if that fixes the problem?
Yeah it fixed the problem: no more oops in 1000 kernel boot tests. Thank you!
Cheers,
Fengguang
^ permalink raw reply
* wireless-testing rebased, John still traveling
From: John W. Linville @ 2013-09-23 12:09 UTC (permalink / raw)
To: linux-wireless
All,
The wireless testing tree has been rebased. The base
commit is a post-rc1 pull by Linus from Dave, commit
b75ff5e84bb6c2d43a8ec39b240c80f0543821f0. The wireless and
wireless-next trees are all based from the same point as well.
I'm still taking advantage of the opportunity to visit some friends
in Louisiana. I hope to be back into the merging business by the
end of the week -- FYI!
Thanks,
John
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply
* Re: [alsa-devel] [PATCH 43/51] DMA-API: dma: edma.c: no need to explicitly initialize DMA masks
From: Russell King - ARM Linux @ 2013-09-23 11:37 UTC (permalink / raw)
To: Vinod Koul
Cc: alsa-devel, b43-dev, devel, devicetree, dri-devel, e1000-devel,
linux-arm-kernel, linux-crypto, linux-doc, linux-fbdev, linux-ide,
linux-media, linux-mmc, linux-nvme, linux-omap, linuxppc-dev,
linux-samsung-soc, linux-scsi, linux-tegra, linux-usb,
linux-wireless, netdev, Solarflare linux maintainers,
uclinux-dist-devel, Dan Williams
In-Reply-To: <20130923102533.GI17188@intel.com>
On Mon, Sep 23, 2013 at 03:55:33PM +0530, Vinod Koul wrote:
> On Fri, Sep 20, 2013 at 12:15:39AM +0100, Russell King wrote:
> > register_platform_device_full() can setup the DMA mask provided the
> > appropriate member is set in struct platform_device_info. So lets
> > make that be the case. This avoids a direct reference to the DMA
> > masks by this driver.
> >
> > Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
> Acked-by: Vinod Koul <vinod.koul@intel.com>
>
> This also brings me question that should we force the driver to use the
> dma_set_mask_and_coherent() API or they have below flexiblity too?
There's two issues here:
1. dma_set_mask_and_coherent() will only work if dev->dma_mask points at
some storage for the mask. This needs to have .dma_mask in the
platform_device_info initialised.
2. Yes, this driver should also be calling the appropriate DMA mask setting
functions in addition to having the mask initialized at device creation
time.
Here's a replacement patch, though maybe it would be better to roll all
the additions of dma_set_mask_and_coherent() in drivers/dma into one
patch? In other words, combine the addition of this with these two
patches:
dma: pl330: add dma_set_mask_and_coherent() call
dma: pl08x: add dma_set_mask_and_coherent() call
8<=====
From: Russell King <rmk+kernel@arm.linux.org.uk>
Subject: [PATCH] DMA-API: dma: edma.c: no need to explicitly initialize DMA
masks
register_platform_device_full() can setup the DMA mask provided the
appropriate member is set in struct platform_device_info. So lets
make that be the case. This avoids a direct reference to the DMA
masks by this driver.
While here, add the dma_set_mask_and_coherent() call which the DMA API
requires DMA-using drivers to call.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
---
drivers/dma/edma.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c
index ff50ff4..fd5e48c 100644
--- a/drivers/dma/edma.c
+++ b/drivers/dma/edma.c
@@ -631,6 +631,10 @@ static int edma_probe(struct platform_device *pdev)
struct edma_cc *ecc;
int ret;
+ ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
+ if (ret)
+ return ret;
+
ecc = devm_kzalloc(&pdev->dev, sizeof(*ecc), GFP_KERNEL);
if (!ecc) {
dev_err(&pdev->dev, "Can't allocate controller\n");
@@ -702,11 +706,13 @@ static struct platform_device *pdev0, *pdev1;
static const struct platform_device_info edma_dev_info0 = {
.name = "edma-dma-engine",
.id = 0,
+ .dma_mask = DMA_BIT_MASK(32),
};
static const struct platform_device_info edma_dev_info1 = {
.name = "edma-dma-engine",
.id = 1,
+ .dma_mask = DMA_BIT_MASK(32),
};
static int edma_init(void)
@@ -720,8 +726,6 @@ static int edma_init(void)
ret = PTR_ERR(pdev0);
goto out;
}
- pdev0->dev.dma_mask = &pdev0->dev.coherent_dma_mask;
- pdev0->dev.coherent_dma_mask = DMA_BIT_MASK(32);
}
if (EDMA_CTLRS == 2) {
@@ -731,8 +735,6 @@ static int edma_init(void)
platform_device_unregister(pdev0);
ret = PTR_ERR(pdev1);
}
- pdev1->dev.dma_mask = &pdev1->dev.coherent_dma_mask;
- pdev1->dev.coherent_dma_mask = DMA_BIT_MASK(32);
}
out:
--
1.7.4.4
^ permalink raw reply related
* Re: [alsa-devel] [PATCH 24/51] DMA-API: dma: pl330: add dma_set_mask_and_coherent() call
From: Vinod Koul @ 2013-09-23 10:43 UTC (permalink / raw)
To: Russell King - ARM Linux
Cc: Heiko Stübner, alsa-devel, linux-doc, linux-mmc, linux-fbdev,
linux-nvme, linux-ide, devel, linux-samsung-soc, linux-scsi,
e1000-devel, b43-dev, linux-media, devicetree, dri-devel,
linux-tegra, Dan Williams, linux-omap, linux-arm-kernel,
Solarflare linux maintainers, netdev, linux-usb, linux-wireless,
linux-crypto, uclinux-dist-devel, linuxppc-dev
In-Reply-To: <20130921200000.GS25647@n2100.arm.linux.org.uk>
On Sat, Sep 21, 2013 at 09:00:00PM +0100, Russell King - ARM Linux wrote:
> On Fri, Sep 20, 2013 at 07:26:27PM +0200, Heiko Stübner wrote:
> > Am Donnerstag, 19. September 2013, 23:49:01 schrieb Russell King:
> > > The DMA API requires drivers to call the appropriate dma_set_mask()
> > > functions before doing any DMA mapping. Add this required call to
> > > the AMBA PL08x driver.
> > ^--- copy and paste error - should of course be PL330
>
> Fixed, thanks.
with fixed changelog...
Acked-by: Vinod Koul <vinod.koul@intel.com>
~Vinod
--
^ permalink raw reply
* Re: [alsa-devel] [PATCH 43/51] DMA-API: dma: edma.c: no need to explicitly initialize DMA masks
From: Vinod Koul @ 2013-09-23 10:25 UTC (permalink / raw)
To: Russell King
Cc: alsa-devel, b43-dev, devel, devicetree, dri-devel, e1000-devel,
linux-arm-kernel, linux-crypto, linux-doc, linux-fbdev, linux-ide,
linux-media, linux-mmc, linux-nvme, linux-omap, linuxppc-dev,
linux-samsung-soc, linux-scsi, linux-tegra, linux-usb,
linux-wireless, netdev, Solarflare linux maintainers,
uclinux-dist-devel, Dan Williams
In-Reply-To: <E1VMnRj-0007sg-1Z@rmk-PC.arm.linux.org.uk>
On Fri, Sep 20, 2013 at 12:15:39AM +0100, Russell King wrote:
> register_platform_device_full() can setup the DMA mask provided the
> appropriate member is set in struct platform_device_info. So lets
> make that be the case. This avoids a direct reference to the DMA
> masks by this driver.
>
> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Acked-by: Vinod Koul <vinod.koul@intel.com>
This also brings me question that should we force the driver to use the
dma_set_mask_and_coherent() API or they have below flexiblity too?
~Vinod
> ---
> drivers/dma/edma.c | 6 ++----
> 1 files changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c
> index ff50ff4..7f9fe30 100644
> --- a/drivers/dma/edma.c
> +++ b/drivers/dma/edma.c
> @@ -702,11 +702,13 @@ static struct platform_device *pdev0, *pdev1;
> static const struct platform_device_info edma_dev_info0 = {
> .name = "edma-dma-engine",
> .id = 0,
> + .dma_mask = DMA_BIT_MASK(32),
> };
>
> static const struct platform_device_info edma_dev_info1 = {
> .name = "edma-dma-engine",
> .id = 1,
> + .dma_mask = DMA_BIT_MASK(32),
> };
>
> static int edma_init(void)
> @@ -720,8 +722,6 @@ static int edma_init(void)
> ret = PTR_ERR(pdev0);
> goto out;
> }
> - pdev0->dev.dma_mask = &pdev0->dev.coherent_dma_mask;
> - pdev0->dev.coherent_dma_mask = DMA_BIT_MASK(32);
> }
>
> if (EDMA_CTLRS == 2) {
> @@ -731,8 +731,6 @@ static int edma_init(void)
> platform_device_unregister(pdev0);
> ret = PTR_ERR(pdev1);
> }
> - pdev1->dev.dma_mask = &pdev1->dev.coherent_dma_mask;
> - pdev1->dev.coherent_dma_mask = DMA_BIT_MASK(32);
> }
>
> out:
> --
> 1.7.4.4
>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
--
^ permalink raw reply
* Re: [alsa-devel] [PATCH 23/51] DMA-API: dma: pl08x: add dma_set_mask_and_coherent() call
From: Vinod Koul @ 2013-09-23 10:12 UTC (permalink / raw)
To: Russell King
Cc: alsa-devel, b43-dev, devel, devicetree, dri-devel, e1000-devel,
linux-arm-kernel, linux-crypto, linux-doc, linux-fbdev, linux-ide,
linux-media, linux-mmc, linux-nvme, linux-omap, linuxppc-dev,
linux-samsung-soc, linux-scsi, linux-tegra, linux-usb,
linux-wireless, netdev, Solarflare linux maintainers,
uclinux-dist-devel, Dan Williams
In-Reply-To: <E1VMm4v-0007hz-RC@rmk-PC.arm.linux.org.uk>
On Thu, Sep 19, 2013 at 10:48:01PM +0100, Russell King wrote:
> The DMA API requires drivers to call the appropriate dma_set_mask()
> functions before doing any DMA mapping. Add this required call to
> the AMBA PL08x driver.
>
> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Acked-by: Vinod Koul <vinod.koul@intel.com>
~Vinod
> ---
> drivers/dma/amba-pl08x.c | 5 +++++
> 1 files changed, 5 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/dma/amba-pl08x.c b/drivers/dma/amba-pl08x.c
> index fce46c5..e51a983 100644
> --- a/drivers/dma/amba-pl08x.c
> +++ b/drivers/dma/amba-pl08x.c
> @@ -2055,6 +2055,11 @@ static int pl08x_probe(struct amba_device *adev, const struct amba_id *id)
> if (ret)
> return ret;
>
> + /* Ensure that we can do DMA */
> + ret = dma_set_mask_and_coherent(&adev->dev, DMA_BIT_MASK(32));
> + if (ret)
> + goto out_no_pl08x;
> +
> /* Create the driver state holder */
> pl08x = kzalloc(sizeof(*pl08x), GFP_KERNEL);
> if (!pl08x) {
> --
> 1.7.4.4
>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
--
^ permalink raw reply
* [PATCH] NFC: nfcsim: fix the error handle in nfcsim_init()
From: Wei Yongjun @ 2013-09-23 9:56 UTC (permalink / raw)
To: lauro.venancio, aloisio.almeida, sameo
Cc: yongjun_wei, linux-wireless, linux-nfc
From: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
Add the missing unregister/free NFC device and destroy_workqueue()
before return in the error handling case.
Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
---
drivers/nfc/nfcsim.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/drivers/nfc/nfcsim.c b/drivers/nfc/nfcsim.c
index 9a53f13..a4a2286 100644
--- a/drivers/nfc/nfcsim.c
+++ b/drivers/nfc/nfcsim.c
@@ -497,15 +497,13 @@ static int __init nfcsim_init(void)
dev0 = nfcsim_init_dev();
if (IS_ERR(dev0)) {
rc = PTR_ERR(dev0);
- goto exit;
+ goto exit_init_dev0;
}
dev1 = nfcsim_init_dev();
if (IS_ERR(dev1)) {
- kfree(dev0);
-
rc = PTR_ERR(dev1);
- goto exit;
+ goto exit_init_dev1;
}
dev0->peer_dev = dev1;
@@ -513,11 +511,14 @@ static int __init nfcsim_init(void)
pr_debug("NFCsim " NFCSIM_VERSION " initialized\n");
- rc = 0;
+ return 0;
+
+exit_init_dev1:
+ nfcsim_free_device(dev0);
+exit_init_dev0:
+ destroy_workqueue(wq);
exit:
- if (rc)
- pr_err("Failed to initialize nfcsim driver (%d)\n",
- rc);
+ pr_err("Failed to initialize nfcsim driver (%d)\n", rc);
return rc;
}
^ permalink raw reply related
* [PATCH 3.12] Revert "rt2x00pci: Use PCI MSIs whenever possible"
From: Stanislaw Gruszka @ 2013-09-23 2:08 UTC (permalink / raw)
To: linux-wireless; +Cc: users, Jakub Kicinski, moorray
This reverts commit 9483f40d8d01918b399b4e24d0c1111db0afffeb.
Some devices stop to connect with above commit, see:
https://bugzilla.kernel.org/show_bug.cgi?id=61621
Since there is no clear benefit of having MSI enabled, just revert
change to fix the problem.
Cc: stable@vger.kernel.org # 3.11+
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
drivers/net/wireless/rt2x00/rt2x00pci.c | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.c b/drivers/net/wireless/rt2x00/rt2x00pci.c
index 76d95de..dc49e52 100644
--- a/drivers/net/wireless/rt2x00/rt2x00pci.c
+++ b/drivers/net/wireless/rt2x00/rt2x00pci.c
@@ -105,13 +105,11 @@ int rt2x00pci_probe(struct pci_dev *pci_dev, const struct rt2x00_ops *ops)
goto exit_release_regions;
}
- pci_enable_msi(pci_dev);
-
hw = ieee80211_alloc_hw(sizeof(struct rt2x00_dev), ops->hw);
if (!hw) {
rt2x00_probe_err("Failed to allocate hardware\n");
retval = -ENOMEM;
- goto exit_disable_msi;
+ goto exit_release_regions;
}
pci_set_drvdata(pci_dev, hw);
@@ -152,9 +150,6 @@ exit_free_reg:
exit_free_device:
ieee80211_free_hw(hw);
-exit_disable_msi:
- pci_disable_msi(pci_dev);
-
exit_release_regions:
pci_release_regions(pci_dev);
@@ -179,8 +174,6 @@ void rt2x00pci_remove(struct pci_dev *pci_dev)
rt2x00pci_free_reg(rt2x00dev);
ieee80211_free_hw(hw);
- pci_disable_msi(pci_dev);
-
/*
* Free the PCI device data.
*/
--
1.8.3.1
^ permalink raw reply related
* Re: brcmsmac causes soft lockup in 3.12-rc1
From: Arend van Spriel @ 2013-09-23 8:13 UTC (permalink / raw)
To: Michael Stolovitzsky, linux-wireless, brcm80211-dev-list
In-Reply-To: <20130921223440.GA5297@mail.catnarok.net>
On 09/22/2013 12:34 AM, Michael Stolovitzsky wrote:
> Hi,
>
> On 3.12-rc1, modprobe brcmsmac causes a soft lockup (trace #1), effectively killing the box. This is a Lenovo S206
> with BCM4313 (14e4:4727), which I believe is a bluetooth combo board. After a while,
> RCU scheduler code detects a lockup (trace #2).
>
> This did not happen in 3.11.1, although brcmsmac hasn't worked on this machine
> as far as I remember. In the previous kernels (~3.2.0+), it loads, but the
> reception is extremely weak - you must be within few meters to the AP, and the card would
> die after several minutes. The proprietary wl.ko driver works fine.
>
> I've attached the dmesg output, the kernel configuration and the output of lspci -vnn.
> I'm comfortable with experimenting; please let me know how I can help here.
A fix for this problem has been submitted to John. I think it is in
transit to mainline so probably will be in 3.12-rc2.
Here the URL of the patch:
https://git.kernel.org/cgit/linux/kernel/git/linville/wireless.git/patch/?id=aaa2ced15ad8dca8048666c9f70736424d696a6b
Regards,
Arend
^ permalink raw reply
* Re: [PATCH] wcn36xx: mac80211 driver for Qualcomm WCN3660/WCN3680 hardware
From: Eugene Krasnikov @ 2013-09-22 22:47 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless, wcn36xx
In-Reply-To: <CAFSJ42YUgJ-Bnx_DW_oJn6bk4BRVtyeD=b+G5oenefb3S7ZLNQ@mail.gmail.com>
Hi John,
While waiting for the merge window to be opened a lot of changes were
added to wcn36xx. I sent wcn36xx for review again and as soon as it's
done will resend you the patch again. Hopefully review will go
smoothly so the plan is to resend a patch to you this week.
2013/9/2 Eugene Krasnikov <k.eugene.e@gmail.com>:
> Will check with legal department if licenses are compliant and come back to you.
> But I guess for driver contribution it's not mandatory.
>
> 2013/9/2 Hauke Mehrtens <hauke@hauke-m.de>:
>> On 09/02/2013 12:38 PM, Eugene Krasnikov wrote:
>>> This is a mac80211 driver for Qualcomm WCN3660/WCN3680 devices. So
>>> far WCN3660/WCN3680 is available only on MSM platform.
>>>
>>> Firmware can be found here:
>>> https://github.com/AOKP/vendor_sony/find/jb-mr1
>>
>> Will you send the firmware for inclusion to linux-fimware?
>> I am also missing the firmware for ath10k there.
>>
>>> Wiki page is available here:
>>> http://wireless.kernel.org/en/users/Drivers/wcn36xx
>>>
>>
>> Hauke
>>
>
>
>
> --
> Best regards,
> Eugene
--
Best regards,
Eugene
^ permalink raw reply
* [PATCH v4 16/16] wcn36xx: add wcn36xx to ath Makefile and Kconfig
From: Eugene Krasnikov @ 2013-09-22 22:42 UTC (permalink / raw)
To: linux-wireless; +Cc: wcn36xx, Eugene Krasnikov
In-Reply-To: <1379889733-6215-1-git-send-email-k.eugene.e@gmail.com>
Now wcn36xx is part of ath family.
Signed-off-by: Eugene Krasnikov <k.eugene.e@gmail.com>
---
drivers/net/wireless/ath/Kconfig | 1 +
drivers/net/wireless/ath/Makefile | 1 +
2 files changed, 2 insertions(+)
diff --git a/drivers/net/wireless/ath/Kconfig b/drivers/net/wireless/ath/Kconfig
index 1abf1d4..ba81d62 100644
--- a/drivers/net/wireless/ath/Kconfig
+++ b/drivers/net/wireless/ath/Kconfig
@@ -32,5 +32,6 @@ source "drivers/net/wireless/ath/ath6kl/Kconfig"
source "drivers/net/wireless/ath/ar5523/Kconfig"
source "drivers/net/wireless/ath/wil6210/Kconfig"
source "drivers/net/wireless/ath/ath10k/Kconfig"
+source "drivers/net/wireless/ath/wcn36xx/Kconfig"
endif
diff --git a/drivers/net/wireless/ath/Makefile b/drivers/net/wireless/ath/Makefile
index fb05cfd..363b056 100644
--- a/drivers/net/wireless/ath/Makefile
+++ b/drivers/net/wireless/ath/Makefile
@@ -5,6 +5,7 @@ obj-$(CONFIG_ATH6KL) += ath6kl/
obj-$(CONFIG_AR5523) += ar5523/
obj-$(CONFIG_WIL6210) += wil6210/
obj-$(CONFIG_ATH10K) += ath10k/
+obj-$(CONFIG_WCN36XX) += wcn36xx/
obj-$(CONFIG_ATH_COMMON) += ath.o
--
1.8.1.2
^ permalink raw reply related
* [PATCH v4 15/16] wcn36xx: add Makefile
From: Eugene Krasnikov @ 2013-09-22 22:42 UTC (permalink / raw)
To: linux-wireless; +Cc: wcn36xx, Eugene Krasnikov
In-Reply-To: <1379889733-6215-1-git-send-email-k.eugene.e@gmail.com>
adding Makefile
Signed-off-by: Eugene Krasnikov <k.eugene.e@gmail.com>
---
drivers/net/wireless/ath/wcn36xx/Makefile | 7 +++++++
1 file changed, 7 insertions(+)
create mode 100644 drivers/net/wireless/ath/wcn36xx/Makefile
diff --git a/drivers/net/wireless/ath/wcn36xx/Makefile b/drivers/net/wireless/ath/wcn36xx/Makefile
new file mode 100644
index 0000000..50c43b4
--- /dev/null
+++ b/drivers/net/wireless/ath/wcn36xx/Makefile
@@ -0,0 +1,7 @@
+obj-$(CONFIG_WCN36XX) := wcn36xx.o
+wcn36xx-y += main.o \
+ dxe.o \
+ txrx.o \
+ smd.o \
+ pmc.o \
+ debug.o
--
1.8.1.2
^ permalink raw reply related
* [PATCH v4 14/16] wcn36xx: add Kconfig
From: Eugene Krasnikov @ 2013-09-22 22:42 UTC (permalink / raw)
To: linux-wireless; +Cc: wcn36xx, Eugene Krasnikov
In-Reply-To: <1379889733-6215-1-git-send-email-k.eugene.e@gmail.com>
adding Kconfig
Signed-off-by: Eugene Krasnikov <k.eugene.e@gmail.com>
---
drivers/net/wireless/ath/wcn36xx/Kconfig | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
create mode 100644 drivers/net/wireless/ath/wcn36xx/Kconfig
diff --git a/drivers/net/wireless/ath/wcn36xx/Kconfig b/drivers/net/wireless/ath/wcn36xx/Kconfig
new file mode 100644
index 0000000..591ebae
--- /dev/null
+++ b/drivers/net/wireless/ath/wcn36xx/Kconfig
@@ -0,0 +1,16 @@
+config WCN36XX
+ tristate "Qualcomm Atheros WCN3660/3680 support"
+ depends on MAC80211 && HAS_DMA
+ ---help---
+ This module adds support for wireless adapters based on
+ Qualcomm Atheros WCN3660 and WCN3680 mobile chipsets.
+
+ If you choose to build a module, it'll be called wcn36xx.
+
+config WCN36XX_DEBUGFS
+ bool "WCN36XX debugfs support"
+ depends on WCN36XX
+ ---help---
+ Enabled debugfs support
+
+ If unsure, say Y to make it easier to debug problems.
--
1.8.1.2
^ permalink raw reply related
* [PATCH v4 13/16] wcn36xx: add txrx.c
From: Eugene Krasnikov @ 2013-09-22 22:42 UTC (permalink / raw)
To: linux-wireless; +Cc: wcn36xx, Eugene Krasnikov
In-Reply-To: <1379889733-6215-1-git-send-email-k.eugene.e@gmail.com>
adding txrx.c
Signed-off-by: Eugene Krasnikov <k.eugene.e@gmail.com>
---
drivers/net/wireless/ath/wcn36xx/txrx.c | 284 ++++++++++++++++++++++++++++++++
1 file changed, 284 insertions(+)
create mode 100644 drivers/net/wireless/ath/wcn36xx/txrx.c
diff --git a/drivers/net/wireless/ath/wcn36xx/txrx.c b/drivers/net/wireless/ath/wcn36xx/txrx.c
new file mode 100644
index 0000000..b2b60e3
--- /dev/null
+++ b/drivers/net/wireless/ath/wcn36xx/txrx.c
@@ -0,0 +1,284 @@
+/*
+ * Copyright (c) 2013 Eugene Krasnikov <k.eugene.e@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include "txrx.h"
+
+static inline int get_rssi0(struct wcn36xx_rx_bd *bd)
+{
+ return 100 - ((bd->phy_stat0 >> 24) & 0xff);
+}
+
+int wcn36xx_rx_skb(struct wcn36xx *wcn, struct sk_buff *skb)
+{
+ struct ieee80211_rx_status status;
+ struct ieee80211_hdr *hdr;
+ struct wcn36xx_rx_bd *bd;
+ u16 fc, sn;
+
+ /*
+ * All fields must be 0, otherwise it can lead to
+ * unexpected consequences.
+ */
+ memset(&status, 0, sizeof(status));
+
+ bd = (struct wcn36xx_rx_bd *)skb->data;
+ buff_to_be((u32 *)bd, sizeof(*bd)/sizeof(u32));
+ wcn36xx_dbg_dump(WCN36XX_DBG_RX_DUMP,
+ "BD <<< ", (char *)bd,
+ sizeof(struct wcn36xx_rx_bd));
+
+ skb_put(skb, bd->pdu.mpdu_header_off + bd->pdu.mpdu_len);
+ skb_pull(skb, bd->pdu.mpdu_header_off);
+
+ status.mactime = 10;
+ status.freq = WCN36XX_CENTER_FREQ(wcn);
+ status.band = WCN36XX_BAND(wcn);
+ status.signal = -get_rssi0(bd);
+ status.antenna = 1;
+ status.rate_idx = 1;
+ status.flag = 0;
+ status.rx_flags = 0;
+ status.flag |= RX_FLAG_IV_STRIPPED |
+ RX_FLAG_MMIC_STRIPPED |
+ RX_FLAG_DECRYPTED;
+
+ wcn36xx_dbg(WCN36XX_DBG_RX, "status.flags=%x status->vendor_radiotap_len=%x\n",
+ status.flag, status.vendor_radiotap_len);
+
+ memcpy(IEEE80211_SKB_RXCB(skb), &status, sizeof(status));
+
+ hdr = (struct ieee80211_hdr *) skb->data;
+ fc = __le16_to_cpu(hdr->frame_control);
+ sn = IEEE80211_SEQ_TO_SN(__le16_to_cpu(hdr->seq_ctrl));
+
+ if (ieee80211_is_beacon(hdr->frame_control)) {
+ wcn36xx_dbg(WCN36XX_DBG_BEACON, "beacon skb %p len %d fc %04x sn %d\n",
+ skb, skb->len, fc, sn);
+ wcn36xx_dbg_dump(WCN36XX_DBG_BEACON_DUMP, "SKB <<< ",
+ (char *)skb->data, skb->len);
+ } else {
+ wcn36xx_dbg(WCN36XX_DBG_RX, "rx skb %p len %d fc %04x sn %d\n",
+ skb, skb->len, fc, sn);
+ wcn36xx_dbg_dump(WCN36XX_DBG_RX_DUMP, "SKB <<< ",
+ (char *)skb->data, skb->len);
+ }
+
+ ieee80211_rx_irqsafe(wcn->hw, skb);
+
+ return 0;
+}
+
+static void wcn36xx_set_tx_pdu(struct wcn36xx_tx_bd *bd,
+ u32 mpdu_header_len,
+ u32 len,
+ u16 tid)
+{
+ bd->pdu.mpdu_header_len = mpdu_header_len;
+ bd->pdu.mpdu_header_off = sizeof(*bd);
+ bd->pdu.mpdu_data_off = bd->pdu.mpdu_header_len +
+ bd->pdu.mpdu_header_off;
+ bd->pdu.mpdu_len = len;
+ bd->pdu.tid = tid;
+}
+
+static inline struct wcn36xx_vif *get_vif_by_addr(struct wcn36xx *wcn,
+ u8 *addr)
+{
+ struct wcn36xx_vif *vif_priv = NULL;
+ struct ieee80211_vif *vif = NULL;
+ list_for_each_entry(vif_priv, &wcn->vif_list, list) {
+ vif = container_of((void *)vif_priv,
+ struct ieee80211_vif,
+ drv_priv);
+ if (memcmp(vif->addr, addr, ETH_ALEN) == 0)
+ return vif_priv;
+ }
+ wcn36xx_warn("vif %pM not found\n", addr);
+ return NULL;
+}
+static void wcn36xx_set_tx_data(struct wcn36xx_tx_bd *bd,
+ struct wcn36xx *wcn,
+ struct wcn36xx_vif **vif_priv,
+ struct wcn36xx_sta *sta_priv,
+ struct ieee80211_hdr *hdr,
+ bool bcast)
+{
+ struct ieee80211_vif *vif = NULL;
+ struct wcn36xx_vif *__vif_priv = NULL;
+ bd->bd_rate = WCN36XX_BD_RATE_DATA;
+
+ /*
+ * For not unicast frames mac80211 will not set sta pointer so use
+ * self_sta_index instead.
+ */
+ if (sta_priv) {
+ __vif_priv = sta_priv->vif;
+ vif = container_of((void *)__vif_priv,
+ struct ieee80211_vif,
+ drv_priv);
+
+ if (vif->type == NL80211_IFTYPE_STATION) {
+ bd->sta_index = sta_priv->bss_sta_index;
+ bd->dpu_desc_idx = sta_priv->bss_dpu_desc_index;
+ } else if (vif->type == NL80211_IFTYPE_AP ||
+ vif->type == NL80211_IFTYPE_ADHOC ||
+ vif->type == NL80211_IFTYPE_MESH_POINT) {
+ bd->sta_index = sta_priv->sta_index;
+ bd->dpu_desc_idx = sta_priv->dpu_desc_index;
+ }
+ } else {
+ __vif_priv = get_vif_by_addr(wcn, hdr->addr2);
+ bd->sta_index = __vif_priv->self_sta_index;
+ bd->dpu_desc_idx = __vif_priv->self_dpu_desc_index;
+ }
+
+ bd->dpu_sign = __vif_priv->ucast_dpu_signature;
+
+ if (ieee80211_is_nullfunc(hdr->frame_control) ||
+ (sta_priv && !sta_priv->is_data_encrypted))
+ bd->dpu_ne = 1;
+
+ if (bcast) {
+ bd->ub = 1;
+ bd->ack_policy = 1;
+ }
+ *vif_priv = __vif_priv;
+}
+
+static void wcn36xx_set_tx_mgmt(struct wcn36xx_tx_bd *bd,
+ struct wcn36xx *wcn,
+ struct wcn36xx_vif **vif_priv,
+ struct ieee80211_hdr *hdr,
+ bool bcast)
+{
+ struct wcn36xx_vif *__vif_priv =
+ get_vif_by_addr(wcn, hdr->addr2);
+ bd->sta_index = __vif_priv->self_sta_index;
+ bd->dpu_desc_idx = __vif_priv->self_dpu_desc_index;
+ bd->dpu_ne = 1;
+
+ /* default rate for unicast */
+ if (ieee80211_is_mgmt(hdr->frame_control))
+ bd->bd_rate = (WCN36XX_BAND(wcn) == IEEE80211_BAND_5GHZ) ?
+ WCN36XX_BD_RATE_CTRL :
+ WCN36XX_BD_RATE_MGMT;
+ else if (ieee80211_is_ctl(hdr->frame_control))
+ bd->bd_rate = WCN36XX_BD_RATE_CTRL;
+ else
+ wcn36xx_warn("frame control type unknown\n");
+
+ /*
+ * In joining state trick hardware that probe is sent as
+ * unicast even if address is broadcast.
+ */
+ if (__vif_priv->is_joining &&
+ ieee80211_is_probe_req(hdr->frame_control))
+ bcast = false;
+
+ if (bcast) {
+ /* broadcast */
+ bd->ub = 1;
+ /* No ack needed not unicast */
+ bd->ack_policy = 1;
+ bd->queue_id = WCN36XX_TX_B_WQ_ID;
+ } else
+ bd->queue_id = WCN36XX_TX_U_WQ_ID;
+ *vif_priv = __vif_priv;
+}
+
+int wcn36xx_start_tx(struct wcn36xx *wcn,
+ struct wcn36xx_sta *sta_priv,
+ struct sk_buff *skb)
+{
+ struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
+ struct wcn36xx_vif *vif_priv = NULL;
+ struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
+ unsigned long flags;
+ bool is_low = ieee80211_is_data(hdr->frame_control);
+ bool bcast = is_broadcast_ether_addr(hdr->addr1) ||
+ is_multicast_ether_addr(hdr->addr1);
+ struct wcn36xx_tx_bd *bd = wcn36xx_dxe_get_next_bd(wcn, is_low);
+
+ if (!bd) {
+ /*
+ * TX DXE are used in pairs. One for the BD and one for the
+ * actual frame. The BD DXE's has a preallocated buffer while
+ * the skb ones does not. If this isn't true something is really
+ * wierd. TODO: Recover from this situation
+ */
+
+ wcn36xx_err("bd address may not be NULL for BD DXE\n");
+ return -EINVAL;
+ }
+
+ memset(bd, 0, sizeof(*bd));
+
+ wcn36xx_dbg(WCN36XX_DBG_TX,
+ "tx skb %p len %d fc %04x sn %d %s %s\n",
+ skb, skb->len, __le16_to_cpu(hdr->frame_control),
+ IEEE80211_SEQ_TO_SN(__le16_to_cpu(hdr->seq_ctrl)),
+ is_low ? "low" : "high", bcast ? "bcast" : "ucast");
+
+ wcn36xx_dbg_dump(WCN36XX_DBG_TX_DUMP, "", skb->data, skb->len);
+
+ bd->dpu_rf = WCN36XX_BMU_WQ_TX;
+
+ bd->tx_comp = info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS;
+ if (bd->tx_comp) {
+ wcn36xx_dbg(WCN36XX_DBG_DXE, "TX_ACK status requested\n");
+ spin_lock_irqsave(&wcn->dxe_lock, flags);
+ if (wcn->tx_ack_skb) {
+ spin_unlock_irqrestore(&wcn->dxe_lock, flags);
+ wcn36xx_warn("tx_ack_skb already set\n");
+ return -EINVAL;
+ }
+
+ wcn->tx_ack_skb = skb;
+ spin_unlock_irqrestore(&wcn->dxe_lock, flags);
+
+ /* Only one at a time is supported by fw. Stop the TX queues
+ * until the ack status gets back.
+ *
+ * TODO: Add watchdog in case FW does not answer
+ */
+ ieee80211_stop_queues(wcn->hw);
+ }
+
+ /* Data frames served first*/
+ if (is_low) {
+ wcn36xx_set_tx_data(bd, wcn, &vif_priv, sta_priv, hdr, bcast);
+ wcn36xx_set_tx_pdu(bd,
+ ieee80211_is_data_qos(hdr->frame_control) ?
+ sizeof(struct ieee80211_qos_hdr) :
+ sizeof(struct ieee80211_hdr_3addr),
+ skb->len, sta_priv ? sta_priv->tid : 0);
+ } else {
+ /* MGMT and CTRL frames are handeld here*/
+ wcn36xx_set_tx_mgmt(bd, wcn, &vif_priv, hdr, bcast);
+ wcn36xx_set_tx_pdu(bd,
+ ieee80211_is_data_qos(hdr->frame_control) ?
+ sizeof(struct ieee80211_qos_hdr) :
+ sizeof(struct ieee80211_hdr_3addr),
+ skb->len, WCN36XX_TID);
+ }
+
+ buff_to_be((u32 *)bd, sizeof(*bd)/sizeof(u32));
+ bd->tx_bd_sign = 0xbdbdbdbd;
+
+ return wcn36xx_dxe_tx_frame(wcn, vif_priv, skb, is_low);
+}
--
1.8.1.2
^ permalink raw reply related
* [PATCH v4 12/16] wcn36xx: add txrx.h
From: Eugene Krasnikov @ 2013-09-22 22:42 UTC (permalink / raw)
To: linux-wireless; +Cc: wcn36xx, Eugene Krasnikov
In-Reply-To: <1379889733-6215-1-git-send-email-k.eugene.e@gmail.com>
adding txrx.h
Signed-off-by: Eugene Krasnikov <k.eugene.e@gmail.com>
---
drivers/net/wireless/ath/wcn36xx/txrx.h | 160 ++++++++++++++++++++++++++++++++
1 file changed, 160 insertions(+)
create mode 100644 drivers/net/wireless/ath/wcn36xx/txrx.h
diff --git a/drivers/net/wireless/ath/wcn36xx/txrx.h b/drivers/net/wireless/ath/wcn36xx/txrx.h
new file mode 100644
index 0000000..bbfbcf8
--- /dev/null
+++ b/drivers/net/wireless/ath/wcn36xx/txrx.h
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) 2013 Eugene Krasnikov <k.eugene.e@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _TXRX_H_
+#define _TXRX_H_
+
+#include <linux/etherdevice.h>
+#include "wcn36xx.h"
+
+/* TODO describe all properties */
+#define WCN36XX_802_11_HEADER_LEN 24
+#define WCN36XX_BMU_WQ_TX 25
+#define WCN36XX_TID 7
+/* broadcast wq ID */
+#define WCN36XX_TX_B_WQ_ID 0xA
+#define WCN36XX_TX_U_WQ_ID 0x9
+/* bd_rate */
+#define WCN36XX_BD_RATE_DATA 0
+#define WCN36XX_BD_RATE_MGMT 2
+#define WCN36XX_BD_RATE_CTRL 3
+
+struct wcn36xx_pdu {
+ u32 dpu_fb:8;
+ u32 adu_fb:8;
+ u32 pdu_id:16;
+
+ /* 0x04*/
+ u32 tail_pdu_idx:16;
+ u32 head_pdu_idx:16;
+
+ /* 0x08*/
+ u32 pdu_count:7;
+ u32 mpdu_data_off:9;
+ u32 mpdu_header_off:8;
+ u32 mpdu_header_len:8;
+
+ /* 0x0c*/
+ u32 reserved4:8;
+ u32 tid:4;
+ u32 reserved3:4;
+ u32 mpdu_len:16;
+};
+
+struct wcn36xx_rx_bd {
+ u32 bdt:2;
+ u32 ft:1;
+ u32 dpu_ne:1;
+ u32 rx_key_id:3;
+ u32 ub:1;
+ u32 rmf:1;
+ u32 uma_bypass:1;
+ u32 csr11:1;
+ u32 reserved0:1;
+ u32 scan_learn:1;
+ u32 rx_ch:4;
+ u32 rtsf:1;
+ u32 bsf:1;
+ u32 a2hf:1;
+ u32 st_auf:1;
+ u32 dpu_sign:3;
+ u32 dpu_rf:8;
+
+ struct wcn36xx_pdu pdu;
+
+ /* 0x14*/
+ u32 addr3:8;
+ u32 addr2:8;
+ u32 addr1:8;
+ u32 dpu_desc_idx:8;
+
+ /* 0x18*/
+ u32 rxp_flags:23;
+ u32 rate_id:9;
+
+ u32 phy_stat0;
+ u32 phy_stat1;
+
+ /* 0x24 */
+ u32 rx_times;
+
+ u32 pmi_cmd[6];
+
+ /* 0x40 */
+ u32 reserved7:4;
+ u32 reorder_slot_id:6;
+ u32 reorder_fwd_id:6;
+ u32 reserved6:12;
+ u32 reorder_code:4;
+
+ /* 0x44 */
+ u32 exp_seq_num:12;
+ u32 cur_seq_num:12;
+ u32 fr_type_subtype:8;
+
+ /* 0x48 */
+ u32 msdu_size:16;
+ u32 sub_fr_id:4;
+ u32 proc_order:4;
+ u32 reserved9:4;
+ u32 aef:1;
+ u32 lsf:1;
+ u32 esf:1;
+ u32 asf:1;
+};
+
+struct wcn36xx_tx_bd {
+ u32 bdt:2;
+ u32 ft:1;
+ u32 dpu_ne:1;
+ u32 fw_tx_comp:1;
+ u32 tx_comp:1;
+ u32 reserved1:1;
+ u32 ub:1;
+ u32 rmf:1;
+ u32 reserved0:12;
+ u32 dpu_sign:3;
+ u32 dpu_rf:8;
+
+ struct wcn36xx_pdu pdu;
+
+ /* 0x14*/
+ u32 reserved5:7;
+ u32 queue_id:5;
+ u32 bd_rate:2;
+ u32 ack_policy:2;
+ u32 sta_index:8;
+ u32 dpu_desc_idx:8;
+
+ u32 tx_bd_sign;
+ u32 reserved6;
+ u32 dxe_start_time;
+ u32 dxe_end_time;
+
+ /*u32 tcp_udp_start_off:10;
+ u32 header_cks:16;
+ u32 reserved7:6;*/
+};
+
+struct wcn36xx_sta;
+struct wcn36xx;
+
+int wcn36xx_rx_skb(struct wcn36xx *wcn, struct sk_buff *skb);
+int wcn36xx_start_tx(struct wcn36xx *wcn,
+ struct wcn36xx_sta *sta_priv,
+ struct sk_buff *skb);
+
+#endif /* _TXRX_H_ */
--
1.8.1.2
^ permalink raw reply related
* [PATCH v4 11/16] wcn36xx: add smd.h
From: Eugene Krasnikov @ 2013-09-22 22:42 UTC (permalink / raw)
To: linux-wireless; +Cc: wcn36xx, Eugene Krasnikov
In-Reply-To: <1379889733-6215-1-git-send-email-k.eugene.e@gmail.com>
adding smd.h
Signed-off-by: Eugene Krasnikov <k.eugene.e@gmail.com>
---
drivers/net/wireless/ath/wcn36xx/smd.h | 127 +++++++++++++++++++++++++++++++++
1 file changed, 127 insertions(+)
create mode 100644 drivers/net/wireless/ath/wcn36xx/smd.h
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.h b/drivers/net/wireless/ath/wcn36xx/smd.h
new file mode 100644
index 0000000..e7c3901
--- /dev/null
+++ b/drivers/net/wireless/ath/wcn36xx/smd.h
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2013 Eugene Krasnikov <k.eugene.e@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _SMD_H_
+#define _SMD_H_
+
+#include "wcn36xx.h"
+
+/* Max shared size is 4k but we take less.*/
+#define WCN36XX_NV_FRAGMENT_SIZE 3072
+
+#define WCN36XX_HAL_BUF_SIZE 4096
+
+#define HAL_MSG_TIMEOUT 200
+#define WCN36XX_SMSM_WLAN_TX_ENABLE 0x00000400
+#define WCN36XX_SMSM_WLAN_TX_RINGS_EMPTY 0x00000200
+/* The PNO version info be contained in the rsp msg */
+#define WCN36XX_FW_MSG_PNO_VERSION_MASK 0x8000
+
+enum wcn36xx_fw_msg_result {
+ WCN36XX_FW_MSG_RESULT_SUCCESS = 0,
+ WCN36XX_FW_MSG_RESULT_SUCCESS_SYNC = 1,
+
+ WCN36XX_FW_MSG_RESULT_MEM_FAIL = 5,
+};
+
+/******************************/
+/* SMD requests and responses */
+/******************************/
+struct wcn36xx_fw_msg_status_rsp {
+ u32 status;
+} __packed;
+
+struct wcn36xx_hal_ind_msg {
+ struct list_head list;
+ u8 *msg;
+ size_t msg_len;
+};
+
+struct wcn36xx;
+
+int wcn36xx_smd_open(struct wcn36xx *wcn);
+void wcn36xx_smd_close(struct wcn36xx *wcn);
+
+int wcn36xx_smd_load_nv(struct wcn36xx *wcn);
+int wcn36xx_smd_start(struct wcn36xx *wcn);
+int wcn36xx_smd_stop(struct wcn36xx *wcn);
+int wcn36xx_smd_init_scan(struct wcn36xx *wcn, enum wcn36xx_hal_sys_mode mode);
+int wcn36xx_smd_start_scan(struct wcn36xx *wcn);
+int wcn36xx_smd_end_scan(struct wcn36xx *wcn);
+int wcn36xx_smd_finish_scan(struct wcn36xx *wcn,
+ enum wcn36xx_hal_sys_mode mode);
+int wcn36xx_smd_update_scan_params(struct wcn36xx *wcn);
+int wcn36xx_smd_add_sta_self(struct wcn36xx *wcn, struct ieee80211_vif *vif);
+int wcn36xx_smd_delete_sta_self(struct wcn36xx *wcn, u8 *addr);
+int wcn36xx_smd_delete_sta(struct wcn36xx *wcn, u8 sta_index);
+int wcn36xx_smd_join(struct wcn36xx *wcn, const u8 *bssid, u8 *vif, u8 ch);
+int wcn36xx_smd_set_link_st(struct wcn36xx *wcn, const u8 *bssid,
+ const u8 *sta_mac,
+ enum wcn36xx_hal_link_state state);
+int wcn36xx_smd_config_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif,
+ struct ieee80211_sta *sta, const u8 *bssid,
+ bool update);
+int wcn36xx_smd_delete_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif);
+int wcn36xx_smd_config_sta(struct wcn36xx *wcn, struct ieee80211_vif *vif,
+ struct ieee80211_sta *sta);
+int wcn36xx_smd_send_beacon(struct wcn36xx *wcn, struct ieee80211_vif *vif,
+ struct sk_buff *skb_beacon, u16 tim_off,
+ u16 p2p_off);
+int wcn36xx_smd_switch_channel(struct wcn36xx *wcn,
+ struct ieee80211_vif *vif, int ch);
+int wcn36xx_smd_update_proberesp_tmpl(struct wcn36xx *wcn,
+ struct ieee80211_vif *vif,
+ struct sk_buff *skb);
+int wcn36xx_smd_set_stakey(struct wcn36xx *wcn,
+ enum ani_ed_type enc_type,
+ u8 keyidx,
+ u8 keylen,
+ u8 *key,
+ u8 sta_index);
+int wcn36xx_smd_set_bsskey(struct wcn36xx *wcn,
+ enum ani_ed_type enc_type,
+ u8 keyidx,
+ u8 keylen,
+ u8 *key);
+int wcn36xx_smd_remove_stakey(struct wcn36xx *wcn,
+ enum ani_ed_type enc_type,
+ u8 keyidx,
+ u8 sta_index);
+int wcn36xx_smd_remove_bsskey(struct wcn36xx *wcn,
+ enum ani_ed_type enc_type,
+ u8 keyidx);
+int wcn36xx_smd_enter_bmps(struct wcn36xx *wcn, struct ieee80211_vif *vif);
+int wcn36xx_smd_exit_bmps(struct wcn36xx *wcn, struct ieee80211_vif *vif);
+int wcn36xx_smd_set_power_params(struct wcn36xx *wcn, bool ignore_dtim);
+int wcn36xx_smd_keep_alive_req(struct wcn36xx *wcn,
+ struct ieee80211_vif *vif,
+ int packet_type);
+int wcn36xx_smd_dump_cmd_req(struct wcn36xx *wcn, u32 arg1, u32 arg2,
+ u32 arg3, u32 arg4, u32 arg5);
+int wcn36xx_smd_feature_caps_exchange(struct wcn36xx *wcn);
+
+int wcn36xx_smd_add_ba_session(struct wcn36xx *wcn,
+ struct ieee80211_sta *sta,
+ u16 tid,
+ u16 *ssn,
+ u8 direction,
+ u8 sta_index);
+int wcn36xx_smd_add_ba(struct wcn36xx *wcn);
+int wcn36xx_smd_del_ba(struct wcn36xx *wcn, u16 tid, u8 sta_index);
+int wcn36xx_smd_trigger_ba(struct wcn36xx *wcn, u8 sta_index);
+
+int wcn36xx_smd_update_cfg(struct wcn36xx *wcn, u32 cfg_id, u32 value);
+#endif /* _SMD_H_ */
--
1.8.1.2
^ permalink raw reply related
* [PATCH v4 10/16] wcn36xx: add smd.c
From: Eugene Krasnikov @ 2013-09-22 22:42 UTC (permalink / raw)
To: linux-wireless; +Cc: wcn36xx, Eugene Krasnikov
In-Reply-To: <1379889733-6215-1-git-send-email-k.eugene.e@gmail.com>
adding smd.c
Signed-off-by: Eugene Krasnikov <k.eugene.e@gmail.com>
---
drivers/net/wireless/ath/wcn36xx/smd.c | 2121 ++++++++++++++++++++++++++++++++
1 file changed, 2121 insertions(+)
create mode 100644 drivers/net/wireless/ath/wcn36xx/smd.c
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
new file mode 100644
index 0000000..9a71b95
--- /dev/null
+++ b/drivers/net/wireless/ath/wcn36xx/smd.c
@@ -0,0 +1,2121 @@
+/*
+ * Copyright (c) 2013 Eugene Krasnikov <k.eugene.e@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/etherdevice.h>
+#include <linux/firmware.h>
+#include <linux/bitops.h>
+#include "smd.h"
+
+static int put_cfg_tlv_u32(struct wcn36xx *wcn, size_t *len, u32 id, u32 value)
+{
+ struct wcn36xx_hal_cfg *entry;
+ u32 *val;
+
+ if (*len + sizeof(*entry) + sizeof(u32) >= WCN36XX_HAL_BUF_SIZE) {
+ wcn36xx_err("Not enough room for TLV entry\n");
+ return -ENOMEM;
+ }
+
+ entry = (struct wcn36xx_hal_cfg *) (wcn->hal_buf + *len);
+ entry->id = id;
+ entry->len = sizeof(u32);
+ entry->pad_bytes = 0;
+ entry->reserve = 0;
+
+ val = (u32 *) (entry + 1);
+ *val = value;
+
+ *len += sizeof(*entry) + sizeof(u32);
+
+ return 0;
+}
+
+static void wcn36xx_smd_set_bss_nw_type(struct wcn36xx *wcn,
+ struct ieee80211_sta *sta,
+ struct wcn36xx_hal_config_bss_params *bss_params)
+{
+ if (IEEE80211_BAND_5GHZ == WCN36XX_BAND(wcn))
+ bss_params->nw_type = WCN36XX_HAL_11A_NW_TYPE;
+ else if (sta && sta->ht_cap.ht_supported)
+ bss_params->nw_type = WCN36XX_HAL_11N_NW_TYPE;
+ else if (sta && (sta->supp_rates[IEEE80211_BAND_2GHZ] & 0x7f))
+ bss_params->nw_type = WCN36XX_HAL_11G_NW_TYPE;
+ else
+ bss_params->nw_type = WCN36XX_HAL_11B_NW_TYPE;
+}
+
+static void wcn36xx_smd_set_bss_ht_params(struct ieee80211_vif *vif,
+ struct ieee80211_sta *sta,
+ struct wcn36xx_hal_config_bss_params *bss_params)
+{
+ if (sta && sta->ht_cap.ht_supported) {
+ unsigned long caps = sta->ht_cap.cap;
+ bss_params->ht = sta->ht_cap.ht_supported;
+ bss_params->tx_channel_width_set =
+ test_bit(IEEE80211_HT_CAP_SUP_WIDTH_20_40, &caps);
+ bss_params->lsig_tx_op_protection_full_support =
+ test_bit(IEEE80211_HT_CAP_LSIG_TXOP_PROT, &caps);
+
+ bss_params->ht_oper_mode = vif->bss_conf.ht_operation_mode;
+ bss_params->lln_non_gf_coexist =
+ !!(vif->bss_conf.ht_operation_mode &
+ IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT);
+ /* IEEE80211_HT_STBC_PARAM_DUAL_CTS_PROT */
+ bss_params->dual_cts_protection = 0;
+ /* IEEE80211_HT_OP_MODE_PROTECTION_20MHZ */
+ bss_params->ht20_coexist = 0;
+ }
+}
+
+static void wcn36xx_smd_set_sta_ht_params(struct ieee80211_sta *sta,
+ struct wcn36xx_hal_config_sta_params *sta_params)
+{
+ if (sta->ht_cap.ht_supported) {
+ unsigned long caps = sta->ht_cap.cap;
+ sta_params->ht_capable = sta->ht_cap.ht_supported;
+ sta_params->tx_channel_width_set =
+ test_bit(IEEE80211_HT_CAP_SUP_WIDTH_20_40, &caps);
+ sta_params->lsig_txop_protection =
+ test_bit(IEEE80211_HT_CAP_LSIG_TXOP_PROT, &caps);
+
+ sta_params->max_ampdu_size = sta->ht_cap.ampdu_factor;
+ sta_params->max_ampdu_density = sta->ht_cap.ampdu_density;
+ sta_params->max_amsdu_size =
+ test_bit(IEEE80211_HT_CAP_MAX_AMSDU, &caps);
+ sta_params->sgi_20Mhz =
+ test_bit(IEEE80211_HT_CAP_SGI_20, &caps);
+ sta_params->sgi_40mhz =
+ test_bit(IEEE80211_HT_CAP_SGI_40, &caps);
+ sta_params->green_field_capable =
+ test_bit(IEEE80211_HT_CAP_GRN_FLD, &caps);
+ sta_params->delayed_ba_support =
+ test_bit(IEEE80211_HT_CAP_DELAY_BA, &caps);
+ sta_params->dsss_cck_mode_40mhz =
+ test_bit(IEEE80211_HT_CAP_DSSSCCK40, &caps);
+ }
+}
+
+static void wcn36xx_smd_set_sta_params(struct wcn36xx *wcn,
+ struct ieee80211_vif *vif,
+ struct ieee80211_sta *sta,
+ struct wcn36xx_hal_config_sta_params *sta_params)
+{
+ struct wcn36xx_vif *priv_vif = (struct wcn36xx_vif *)vif->drv_priv;
+ struct wcn36xx_sta *priv_sta = NULL;
+ if (vif->type == NL80211_IFTYPE_ADHOC ||
+ vif->type == NL80211_IFTYPE_AP ||
+ vif->type == NL80211_IFTYPE_MESH_POINT) {
+ sta_params->type = 1;
+ sta_params->sta_index = 0xFF;
+ } else {
+ sta_params->type = 0;
+ sta_params->sta_index = 1;
+ }
+
+ sta_params->listen_interval = WCN36XX_LISTEN_INTERVAL(wcn);
+
+ /*
+ * In STA mode ieee80211_sta contains bssid and ieee80211_vif
+ * contains our mac address. In AP mode we are bssid so vif
+ * contains bssid and ieee80211_sta contains mac.
+ */
+ if (NL80211_IFTYPE_STATION == vif->type)
+ memcpy(&sta_params->mac, vif->addr, ETH_ALEN);
+ else
+ memcpy(&sta_params->bssid, vif->addr, ETH_ALEN);
+
+ sta_params->encrypt_type = priv_vif->encrypt_type;
+ sta_params->short_preamble_supported =
+ !(WCN36XX_FLAGS(wcn) &
+ IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE);
+
+ sta_params->rifs_mode = 0;
+ sta_params->rmf = 0;
+ sta_params->action = 0;
+ sta_params->uapsd = 0;
+ sta_params->mimo_ps = WCN36XX_HAL_HT_MIMO_PS_STATIC;
+ sta_params->max_ampdu_duration = 0;
+ sta_params->bssid_index = priv_vif->bss_index;
+ sta_params->p2p = 0;
+
+ if (sta) {
+ priv_sta = (struct wcn36xx_sta *)sta->drv_priv;
+ if (NL80211_IFTYPE_STATION == vif->type)
+ memcpy(&sta_params->bssid, sta->addr, ETH_ALEN);
+ else
+ memcpy(&sta_params->mac, sta->addr, ETH_ALEN);
+ sta_params->wmm_enabled = sta->wme;
+ sta_params->max_sp_len = sta->max_sp;
+ sta_params->aid = priv_sta->aid;
+ wcn36xx_smd_set_sta_ht_params(sta, sta_params);
+ memcpy(&sta_params->supported_rates, &priv_sta->supported_rates,
+ sizeof(priv_sta->supported_rates));
+ } else {
+ wcn36xx_set_default_rates(&sta_params->supported_rates);
+ }
+}
+
+static int wcn36xx_smd_send_and_wait(struct wcn36xx *wcn, size_t len)
+{
+ int ret = 0;
+ wcn36xx_dbg_dump(WCN36XX_DBG_SMD_DUMP, "HAL >>> ", wcn->hal_buf, len);
+
+ init_completion(&wcn->hal_rsp_compl);
+ ret = wcn->ctrl_ops->tx(wcn->hal_buf, len);
+ if (ret) {
+ wcn36xx_err("HAL TX failed\n");
+ goto out;
+ }
+ if (wait_for_completion_timeout(&wcn->hal_rsp_compl,
+ msecs_to_jiffies(HAL_MSG_TIMEOUT)) <= 0) {
+ wcn36xx_err("Timeout while waiting SMD response\n");
+ ret = -ETIME;
+ goto out;
+ }
+out:
+ return ret;
+}
+
+#define INIT_HAL_MSG(msg_body, type) \
+ do { \
+ memset(&msg_body, 0, sizeof(msg_body)); \
+ msg_body.header.msg_type = type; \
+ msg_body.header.msg_version = WCN36XX_HAL_MSG_VERSION0; \
+ msg_body.header.len = sizeof(msg_body); \
+ } while (0) \
+
+#define PREPARE_HAL_BUF(send_buf, msg_body) \
+ do { \
+ memset(send_buf, 0, msg_body.header.len); \
+ memcpy(send_buf, &msg_body, sizeof(msg_body)); \
+ } while (0) \
+
+static int wcn36xx_smd_rsp_status_check(void *buf, size_t len)
+{
+ struct wcn36xx_fw_msg_status_rsp *rsp;
+
+ if (len < sizeof(struct wcn36xx_hal_msg_header) +
+ sizeof(struct wcn36xx_fw_msg_status_rsp))
+ return -EIO;
+
+ rsp = (struct wcn36xx_fw_msg_status_rsp *)
+ (buf + sizeof(struct wcn36xx_hal_msg_header));
+
+ if (WCN36XX_FW_MSG_RESULT_SUCCESS != rsp->status)
+ return rsp->status;
+
+ return 0;
+}
+
+int wcn36xx_smd_load_nv(struct wcn36xx *wcn)
+{
+ const struct firmware *nv;
+ struct nv_data *nv_d;
+ struct wcn36xx_hal_nv_img_download_req_msg msg_body;
+ int fw_bytes_left;
+ int ret;
+ u16 fm_offset = 0;
+
+ ret = request_firmware(&nv, WLAN_NV_FILE, wcn->dev);
+ if (ret) {
+ wcn36xx_err("Failed to load nv file %s: %d\n",
+ WLAN_NV_FILE, ret);
+ goto out_free_nv;
+ }
+
+ nv_d = (struct nv_data *)nv->data;
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_DOWNLOAD_NV_REQ);
+
+ msg_body.header.len += WCN36XX_NV_FRAGMENT_SIZE;
+
+ msg_body.frag_number = 0;
+ /* hal_buf must be protected with mutex */
+ mutex_lock(&wcn->hal_mutex);
+
+ do {
+ fw_bytes_left = nv->size - fm_offset - 4;
+ if (fw_bytes_left > WCN36XX_NV_FRAGMENT_SIZE) {
+ msg_body.last_fragment = 0;
+ msg_body.nv_img_buffer_size = WCN36XX_NV_FRAGMENT_SIZE;
+ } else {
+ msg_body.last_fragment = 1;
+ msg_body.nv_img_buffer_size = fw_bytes_left;
+
+ /* Do not forget update general message len */
+ msg_body.header.len = sizeof(msg_body) + fw_bytes_left;
+
+ }
+
+ /* Add load NV request message header */
+ memcpy(wcn->hal_buf, &msg_body, sizeof(msg_body));
+
+ /* Add NV body itself */
+ memcpy(wcn->hal_buf + sizeof(msg_body),
+ &nv_d->table + fm_offset,
+ msg_body.nv_img_buffer_size);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret)
+ goto out_unlock;
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf,
+ wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_load_nv response failed err=%d\n",
+ ret);
+ goto out_unlock;
+ }
+ msg_body.frag_number++;
+ fm_offset += WCN36XX_NV_FRAGMENT_SIZE;
+
+ } while (msg_body.last_fragment != 1);
+
+out_unlock:
+ mutex_unlock(&wcn->hal_mutex);
+out_free_nv:
+ release_firmware(nv);
+
+ return ret;
+}
+
+static int wcn36xx_smd_start_rsp(struct wcn36xx *wcn, void *buf, size_t len)
+{
+ struct wcn36xx_hal_mac_start_rsp_msg *rsp;
+
+ if (len < sizeof(*rsp))
+ return -EIO;
+
+ rsp = (struct wcn36xx_hal_mac_start_rsp_msg *)buf;
+
+ if (WCN36XX_FW_MSG_RESULT_SUCCESS != rsp->start_rsp_params.status)
+ return -EIO;
+
+ memcpy(wcn->crm_version, rsp->start_rsp_params.crm_version,
+ WCN36XX_HAL_VERSION_LENGTH);
+ memcpy(wcn->wlan_version, rsp->start_rsp_params.wlan_version,
+ WCN36XX_HAL_VERSION_LENGTH);
+
+ /* null terminate the strings, just in case */
+ wcn->crm_version[WCN36XX_HAL_VERSION_LENGTH] = '\0';
+ wcn->wlan_version[WCN36XX_HAL_VERSION_LENGTH] = '\0';
+
+ wcn->fw_revision = rsp->start_rsp_params.version.revision;
+ wcn->fw_version = rsp->start_rsp_params.version.version;
+ wcn->fw_minor = rsp->start_rsp_params.version.minor;
+ wcn->fw_major = rsp->start_rsp_params.version.major;
+
+ wcn36xx_info("firmware WLAN version '%s' and CRM version '%s'\n",
+ wcn->wlan_version, wcn->crm_version);
+
+ wcn36xx_info("firmware API %u.%u.%u.%u, %u stations, %u bssids\n",
+ wcn->fw_major, wcn->fw_minor,
+ wcn->fw_version, wcn->fw_revision,
+ rsp->start_rsp_params.stations,
+ rsp->start_rsp_params.bssids);
+
+ return 0;
+}
+
+int wcn36xx_smd_start(struct wcn36xx *wcn)
+{
+ struct wcn36xx_hal_mac_start_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_START_REQ);
+
+ msg_body.params.type = DRIVER_TYPE_PRODUCTION;
+ msg_body.params.len = 0;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL, "hal start type %d\n",
+ msg_body.params.type);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_start failed\n");
+ goto out;
+ }
+
+ ret = wcn36xx_smd_start_rsp(wcn, wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_start response failed err=%d\n", ret);
+ goto out;
+ }
+
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_stop(struct wcn36xx *wcn)
+{
+ struct wcn36xx_hal_mac_stop_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_STOP_REQ);
+
+ msg_body.stop_req_params.reason = HAL_STOP_TYPE_RF_KILL;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_stop failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_stop response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_init_scan(struct wcn36xx *wcn, enum wcn36xx_hal_sys_mode mode)
+{
+ struct wcn36xx_hal_init_scan_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_INIT_SCAN_REQ);
+
+ msg_body.mode = mode;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL, "hal init scan mode %d\n", msg_body.mode);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_init_scan failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_init_scan response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_start_scan(struct wcn36xx *wcn)
+{
+ struct wcn36xx_hal_start_scan_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_START_SCAN_REQ);
+
+ msg_body.scan_channel = WCN36XX_HW_CHANNEL(wcn);
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL, "hal start scan channel %d\n",
+ msg_body.scan_channel);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_start_scan failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_start_scan response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_end_scan(struct wcn36xx *wcn)
+{
+ struct wcn36xx_hal_end_scan_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_END_SCAN_REQ);
+
+ msg_body.scan_channel = WCN36XX_HW_CHANNEL(wcn);
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL, "hal end scan channel %d\n",
+ msg_body.scan_channel);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_end_scan failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_end_scan response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_finish_scan(struct wcn36xx *wcn,
+ enum wcn36xx_hal_sys_mode mode)
+{
+ struct wcn36xx_hal_finish_scan_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_FINISH_SCAN_REQ);
+
+ msg_body.mode = mode;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL, "hal finish scan mode %d\n",
+ msg_body.mode);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_finish_scan failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_finish_scan response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+static int wcn36xx_smd_switch_channel_rsp(void *buf, size_t len)
+{
+ struct wcn36xx_hal_switch_channel_rsp_msg *rsp;
+ int ret = 0;
+
+ ret = wcn36xx_smd_rsp_status_check(buf, len);
+ if (ret)
+ return ret;
+ rsp = (struct wcn36xx_hal_switch_channel_rsp_msg *)buf;
+ wcn36xx_dbg(WCN36XX_DBG_HAL, "channel switched to: %d, status: %d\n",
+ rsp->channel_number, rsp->status);
+ return ret;
+}
+
+int wcn36xx_smd_switch_channel(struct wcn36xx *wcn,
+ struct ieee80211_vif *vif, int ch)
+{
+ struct wcn36xx_hal_switch_channel_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_CH_SWITCH_REQ);
+
+ msg_body.channel_number = (u8)ch;
+ msg_body.tx_mgmt_power = 0xbf;
+ msg_body.max_tx_power = 0xbf;
+ memcpy(msg_body.self_sta_mac_addr, vif->addr, ETH_ALEN);
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_switch_channel failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_switch_channel_rsp(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_switch_channel response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+static int wcn36xx_smd_update_scan_params_rsp(void *buf, size_t len)
+{
+ struct wcn36xx_hal_update_scan_params_resp *rsp;
+
+ rsp = (struct wcn36xx_hal_update_scan_params_resp *)buf;
+
+ /* Remove the PNO version bit */
+ rsp->status &= (~(WCN36XX_FW_MSG_PNO_VERSION_MASK));
+
+ if (WCN36XX_FW_MSG_RESULT_SUCCESS != rsp->status) {
+ wcn36xx_warn("error response from update scan\n");
+ return rsp->status;
+ }
+
+ return 0;
+}
+
+int wcn36xx_smd_update_scan_params(struct wcn36xx *wcn)
+{
+ struct wcn36xx_hal_update_scan_params_req msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_UPDATE_SCAN_PARAM_REQ);
+
+ msg_body.dot11d_enabled = 0;
+ msg_body.dot11d_resolved = 0;
+ msg_body.channel_count = 26;
+ msg_body.active_min_ch_time = 60;
+ msg_body.active_max_ch_time = 120;
+ msg_body.passive_min_ch_time = 60;
+ msg_body.passive_max_ch_time = 110;
+ msg_body.state = 0;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "hal update scan params channel_count %d\n",
+ msg_body.channel_count);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_update_scan_params failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_update_scan_params_rsp(wcn->hal_buf,
+ wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_update_scan_params response failed err=%d\n",
+ ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+static int wcn36xx_smd_add_sta_self_rsp(struct wcn36xx *wcn,
+ struct ieee80211_vif *vif,
+ void *buf,
+ size_t len)
+{
+ struct wcn36xx_hal_add_sta_self_rsp_msg *rsp;
+ struct wcn36xx_vif *priv_vif = (struct wcn36xx_vif *)vif->drv_priv;
+
+ if (len < sizeof(*rsp))
+ return -EINVAL;
+
+ rsp = (struct wcn36xx_hal_add_sta_self_rsp_msg *)buf;
+
+ if (rsp->status != WCN36XX_FW_MSG_RESULT_SUCCESS) {
+ wcn36xx_warn("hal add sta self failure: %d\n",
+ rsp->status);
+ return rsp->status;
+ }
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "hal add sta self status %d self_sta_index %d dpu_index %d\n",
+ rsp->status, rsp->self_sta_index, rsp->dpu_index);
+
+ priv_vif->self_sta_index = rsp->self_sta_index;
+ priv_vif->self_dpu_desc_index = rsp->dpu_index;
+
+ return 0;
+}
+
+int wcn36xx_smd_add_sta_self(struct wcn36xx *wcn, struct ieee80211_vif *vif)
+{
+ struct wcn36xx_hal_add_sta_self_req msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_ADD_STA_SELF_REQ);
+
+ memcpy(&msg_body.self_addr, vif->addr, ETH_ALEN);
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "hal add sta self self_addr %pM status %d\n",
+ msg_body.self_addr, msg_body.status);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_add_sta_self failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_add_sta_self_rsp(wcn,
+ vif,
+ wcn->hal_buf,
+ wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_add_sta_self response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_delete_sta_self(struct wcn36xx *wcn, u8 *addr)
+{
+ struct wcn36xx_hal_del_sta_self_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_DEL_STA_SELF_REQ);
+
+ memcpy(&msg_body.self_addr, addr, ETH_ALEN);
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_delete_sta_self failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_delete_sta_self response failed err=%d\n",
+ ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_delete_sta(struct wcn36xx *wcn, u8 sta_index)
+{
+ struct wcn36xx_hal_delete_sta_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_DELETE_STA_REQ);
+
+ msg_body.sta_index = sta_index;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "hal delete sta sta_index %d\n",
+ msg_body.sta_index);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_delete_sta failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_delete_sta response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+static int wcn36xx_smd_join_rsp(void *buf, size_t len)
+{
+ struct wcn36xx_hal_join_rsp_msg *rsp;
+
+ if (wcn36xx_smd_rsp_status_check(buf, len))
+ return -EIO;
+
+ rsp = (struct wcn36xx_hal_join_rsp_msg *)buf;
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "hal rsp join status %d tx_mgmt_power %d\n",
+ rsp->status, rsp->tx_mgmt_power);
+
+ return 0;
+}
+
+int wcn36xx_smd_join(struct wcn36xx *wcn, const u8 *bssid, u8 *vif, u8 ch)
+{
+ struct wcn36xx_hal_join_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_JOIN_REQ);
+
+ memcpy(&msg_body.bssid, bssid, ETH_ALEN);
+ memcpy(&msg_body.self_sta_mac_addr, vif, ETH_ALEN);
+ msg_body.channel = ch;
+
+ if (conf_is_ht40_minus(&wcn->hw->conf))
+ msg_body.secondary_channel_offset =
+ PHY_DOUBLE_CHANNEL_HIGH_PRIMARY;
+ else if (conf_is_ht40_plus(&wcn->hw->conf))
+ msg_body.secondary_channel_offset =
+ PHY_DOUBLE_CHANNEL_LOW_PRIMARY;
+ else
+ msg_body.secondary_channel_offset =
+ PHY_SINGLE_CHANNEL_CENTERED;
+
+ msg_body.link_state = WCN36XX_HAL_LINK_PREASSOC_STATE;
+
+ msg_body.max_tx_power = 0xbf;
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "hal join req bssid %pM self_sta_mac_addr %pM channel %d link_state %d\n",
+ msg_body.bssid, msg_body.self_sta_mac_addr,
+ msg_body.channel, msg_body.link_state);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_join failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_join_rsp(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_join response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_set_link_st(struct wcn36xx *wcn, const u8 *bssid,
+ const u8 *sta_mac,
+ enum wcn36xx_hal_link_state state)
+{
+ struct wcn36xx_hal_set_link_state_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_SET_LINK_ST_REQ);
+
+ memcpy(&msg_body.bssid, bssid, ETH_ALEN);
+ memcpy(&msg_body.self_mac_addr, sta_mac, ETH_ALEN);
+ msg_body.state = state;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "hal set link state bssid %pM self_mac_addr %pM state %d\n",
+ msg_body.bssid, msg_body.self_mac_addr, msg_body.state);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_set_link_st failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_set_link_st response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+static void wcn36xx_smd_convert_sta_to_v1(struct wcn36xx *wcn,
+ const struct wcn36xx_hal_config_sta_params *orig,
+ struct wcn36xx_hal_config_sta_params_v1 *v1)
+{
+ /* convert orig to v1 format */
+ memcpy(&v1->bssid, orig->bssid, ETH_ALEN);
+ memcpy(&v1->mac, orig->mac, ETH_ALEN);
+ v1->aid = orig->aid;
+ v1->type = orig->type;
+ v1->listen_interval = orig->listen_interval;
+ v1->ht_capable = orig->ht_capable;
+
+ v1->max_ampdu_size = orig->max_ampdu_size;
+ v1->max_ampdu_density = orig->max_ampdu_density;
+ v1->sgi_40mhz = orig->sgi_40mhz;
+ v1->sgi_20Mhz = orig->sgi_20Mhz;
+
+ memcpy(&v1->supported_rates, &orig->supported_rates,
+ sizeof(orig->supported_rates));
+ v1->sta_index = orig->sta_index;
+}
+
+static int wcn36xx_smd_config_sta_rsp(struct wcn36xx *wcn,
+ struct ieee80211_sta *sta,
+ void *buf,
+ size_t len)
+{
+ struct wcn36xx_hal_config_sta_rsp_msg *rsp;
+ struct config_sta_rsp_params *params;
+ struct wcn36xx_sta *sta_priv = (struct wcn36xx_sta *)sta->drv_priv;
+
+ if (len < sizeof(*rsp))
+ return -EINVAL;
+
+ rsp = (struct wcn36xx_hal_config_sta_rsp_msg *)buf;
+ params = &rsp->params;
+
+ if (params->status != WCN36XX_FW_MSG_RESULT_SUCCESS) {
+ wcn36xx_warn("hal config sta response failure: %d\n",
+ params->status);
+ return -EIO;
+ }
+
+ sta_priv->sta_index = params->sta_index;
+ sta_priv->dpu_desc_index = params->dpu_index;
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "hal config sta rsp status %d sta_index %d bssid_index %d p2p %d\n",
+ params->status, params->sta_index, params->bssid_index,
+ params->p2p);
+
+ return 0;
+}
+
+static int wcn36xx_smd_config_sta_v1(struct wcn36xx *wcn,
+ const struct wcn36xx_hal_config_sta_req_msg *orig)
+{
+ struct wcn36xx_hal_config_sta_req_msg_v1 msg_body;
+ struct wcn36xx_hal_config_sta_params_v1 *sta = &msg_body.sta_params;
+
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_CONFIG_STA_REQ);
+
+ wcn36xx_smd_convert_sta_to_v1(wcn, &orig->sta_params,
+ &msg_body.sta_params);
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "hal config sta v1 action %d sta_index %d bssid_index %d bssid %pM type %d mac %pM aid %d\n",
+ sta->action, sta->sta_index, sta->bssid_index,
+ sta->bssid, sta->type, sta->mac, sta->aid);
+
+ return wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+}
+
+int wcn36xx_smd_config_sta(struct wcn36xx *wcn, struct ieee80211_vif *vif,
+ struct ieee80211_sta *sta)
+{
+ struct wcn36xx_hal_config_sta_req_msg msg;
+ struct wcn36xx_hal_config_sta_params *sta_params;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg, WCN36XX_HAL_CONFIG_STA_REQ);
+
+ sta_params = &msg.sta_params;
+
+ wcn36xx_smd_set_sta_params(wcn, vif, sta, sta_params);
+
+ if (!wcn36xx_is_fw_version(wcn, 1, 2, 2, 24)) {
+ ret = wcn36xx_smd_config_sta_v1(wcn, &msg);
+ } else {
+ PREPARE_HAL_BUF(wcn->hal_buf, msg);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "hal config sta action %d sta_index %d bssid_index %d bssid %pM type %d mac %pM aid %d\n",
+ sta_params->action, sta_params->sta_index,
+ sta_params->bssid_index, sta_params->bssid,
+ sta_params->type, sta_params->mac, sta_params->aid);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg.header.len);
+ }
+ if (ret) {
+ wcn36xx_err("Sending hal_config_sta failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_config_sta_rsp(wcn,
+ sta,
+ wcn->hal_buf,
+ wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_config_sta response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+static int wcn36xx_smd_config_bss_v1(struct wcn36xx *wcn,
+ const struct wcn36xx_hal_config_bss_req_msg *orig)
+{
+ struct wcn36xx_hal_config_bss_req_msg_v1 msg_body;
+ struct wcn36xx_hal_config_bss_params_v1 *bss = &msg_body.bss_params;
+ struct wcn36xx_hal_config_sta_params_v1 *sta = &bss->sta;
+
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_CONFIG_BSS_REQ);
+
+ /* convert orig to v1 */
+ memcpy(&msg_body.bss_params.bssid,
+ &orig->bss_params.bssid, ETH_ALEN);
+ memcpy(&msg_body.bss_params.self_mac_addr,
+ &orig->bss_params.self_mac_addr, ETH_ALEN);
+
+ msg_body.bss_params.bss_type = orig->bss_params.bss_type;
+ msg_body.bss_params.oper_mode = orig->bss_params.oper_mode;
+ msg_body.bss_params.nw_type = orig->bss_params.nw_type;
+
+ msg_body.bss_params.short_slot_time_supported =
+ orig->bss_params.short_slot_time_supported;
+ msg_body.bss_params.lla_coexist = orig->bss_params.lla_coexist;
+ msg_body.bss_params.llb_coexist = orig->bss_params.llb_coexist;
+ msg_body.bss_params.llg_coexist = orig->bss_params.llg_coexist;
+ msg_body.bss_params.ht20_coexist = orig->bss_params.ht20_coexist;
+ msg_body.bss_params.lln_non_gf_coexist =
+ orig->bss_params.lln_non_gf_coexist;
+
+ msg_body.bss_params.lsig_tx_op_protection_full_support =
+ orig->bss_params.lsig_tx_op_protection_full_support;
+ msg_body.bss_params.rifs_mode = orig->bss_params.rifs_mode;
+ msg_body.bss_params.beacon_interval = orig->bss_params.beacon_interval;
+ msg_body.bss_params.dtim_period = orig->bss_params.dtim_period;
+ msg_body.bss_params.tx_channel_width_set =
+ orig->bss_params.tx_channel_width_set;
+ msg_body.bss_params.oper_channel = orig->bss_params.oper_channel;
+ msg_body.bss_params.ext_channel = orig->bss_params.ext_channel;
+
+ msg_body.bss_params.reserved = orig->bss_params.reserved;
+
+ memcpy(&msg_body.bss_params.ssid,
+ &orig->bss_params.ssid,
+ sizeof(orig->bss_params.ssid));
+
+ msg_body.bss_params.action = orig->bss_params.action;
+ msg_body.bss_params.rateset = orig->bss_params.rateset;
+ msg_body.bss_params.ht = orig->bss_params.ht;
+ msg_body.bss_params.obss_prot_enabled =
+ orig->bss_params.obss_prot_enabled;
+ msg_body.bss_params.rmf = orig->bss_params.rmf;
+ msg_body.bss_params.ht_oper_mode = orig->bss_params.ht_oper_mode;
+ msg_body.bss_params.dual_cts_protection =
+ orig->bss_params.dual_cts_protection;
+
+ msg_body.bss_params.max_probe_resp_retry_limit =
+ orig->bss_params.max_probe_resp_retry_limit;
+ msg_body.bss_params.hidden_ssid = orig->bss_params.hidden_ssid;
+ msg_body.bss_params.proxy_probe_resp =
+ orig->bss_params.proxy_probe_resp;
+ msg_body.bss_params.edca_params_valid =
+ orig->bss_params.edca_params_valid;
+
+ memcpy(&msg_body.bss_params.acbe,
+ &orig->bss_params.acbe,
+ sizeof(orig->bss_params.acbe));
+ memcpy(&msg_body.bss_params.acbk,
+ &orig->bss_params.acbk,
+ sizeof(orig->bss_params.acbk));
+ memcpy(&msg_body.bss_params.acvi,
+ &orig->bss_params.acvi,
+ sizeof(orig->bss_params.acvi));
+ memcpy(&msg_body.bss_params.acvo,
+ &orig->bss_params.acvo,
+ sizeof(orig->bss_params.acvo));
+
+ msg_body.bss_params.ext_set_sta_key_param_valid =
+ orig->bss_params.ext_set_sta_key_param_valid;
+
+ memcpy(&msg_body.bss_params.ext_set_sta_key_param,
+ &orig->bss_params.ext_set_sta_key_param,
+ sizeof(orig->bss_params.acvo));
+
+ msg_body.bss_params.wcn36xx_hal_persona =
+ orig->bss_params.wcn36xx_hal_persona;
+ msg_body.bss_params.spectrum_mgt_enable =
+ orig->bss_params.spectrum_mgt_enable;
+ msg_body.bss_params.tx_mgmt_power = orig->bss_params.tx_mgmt_power;
+ msg_body.bss_params.max_tx_power = orig->bss_params.max_tx_power;
+
+ wcn36xx_smd_convert_sta_to_v1(wcn, &orig->bss_params.sta,
+ &msg_body.bss_params.sta);
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "hal config bss v1 bssid %pM self_mac_addr %pM bss_type %d oper_mode %d nw_type %d\n",
+ bss->bssid, bss->self_mac_addr, bss->bss_type,
+ bss->oper_mode, bss->nw_type);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "- sta bssid %pM action %d sta_index %d bssid_index %d aid %d type %d mac %pM\n",
+ sta->bssid, sta->action, sta->sta_index,
+ sta->bssid_index, sta->aid, sta->type, sta->mac);
+
+ return wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+}
+
+
+static int wcn36xx_smd_config_bss_rsp(struct wcn36xx *wcn,
+ struct ieee80211_vif *vif,
+ void *buf,
+ size_t len)
+{
+ struct wcn36xx_hal_config_bss_rsp_msg *rsp;
+ struct wcn36xx_hal_config_bss_rsp_params *params;
+ struct wcn36xx_vif *priv_vif = (struct wcn36xx_vif *)vif->drv_priv;
+
+ if (len < sizeof(*rsp))
+ return -EINVAL;
+
+ rsp = (struct wcn36xx_hal_config_bss_rsp_msg *)buf;
+ params = &rsp->bss_rsp_params;
+
+ if (params->status != WCN36XX_FW_MSG_RESULT_SUCCESS) {
+ wcn36xx_warn("hal config bss response failure: %d\n",
+ params->status);
+ return -EIO;
+ }
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "hal config bss rsp status %d bss_idx %d dpu_desc_index %d"
+ " sta_idx %d self_idx %d bcast_idx %d mac %pM"
+ " power %d ucast_dpu_signature %d\n",
+ params->status, params->bss_index, params->dpu_desc_index,
+ params->bss_sta_index, params->bss_self_sta_index,
+ params->bss_bcast_sta_idx, params->mac,
+ params->tx_mgmt_power, params->ucast_dpu_signature);
+
+ priv_vif->bss_index = params->bss_index;
+
+ if (priv_vif->sta) {
+ priv_vif->sta->bss_sta_index = params->bss_sta_index;
+ priv_vif->sta->bss_dpu_desc_index = params->dpu_desc_index;
+ }
+
+ priv_vif->ucast_dpu_signature = params->ucast_dpu_signature;
+
+ return 0;
+}
+
+int wcn36xx_smd_config_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif,
+ struct ieee80211_sta *sta, const u8 *bssid,
+ bool update)
+{
+ struct wcn36xx_hal_config_bss_req_msg msg;
+ struct wcn36xx_hal_config_bss_params *bss;
+ struct wcn36xx_hal_config_sta_params *sta_params;
+ struct wcn36xx_vif *vif_priv = (struct wcn36xx_vif *)vif->drv_priv;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg, WCN36XX_HAL_CONFIG_BSS_REQ);
+
+ bss = &msg.bss_params;
+ sta_params = &bss->sta;
+
+ WARN_ON(is_zero_ether_addr(bssid));
+
+ memcpy(&bss->bssid, bssid, ETH_ALEN);
+
+ memcpy(bss->self_mac_addr, vif->addr, ETH_ALEN);
+
+ if (vif->type == NL80211_IFTYPE_STATION) {
+ bss->bss_type = WCN36XX_HAL_INFRASTRUCTURE_MODE;
+
+ /* STA */
+ bss->oper_mode = 1;
+ bss->wcn36xx_hal_persona = WCN36XX_HAL_STA_MODE;
+ } else if (vif->type == NL80211_IFTYPE_AP) {
+ bss->bss_type = WCN36XX_HAL_INFRA_AP_MODE;
+
+ /* AP */
+ bss->oper_mode = 0;
+ bss->wcn36xx_hal_persona = WCN36XX_HAL_STA_SAP_MODE;
+ } else if (vif->type == NL80211_IFTYPE_ADHOC ||
+ vif->type == NL80211_IFTYPE_MESH_POINT) {
+ bss->bss_type = WCN36XX_HAL_IBSS_MODE;
+
+ /* STA */
+ bss->oper_mode = 1;
+ } else {
+ wcn36xx_warn("Unknown type for bss config: %d\n", vif->type);
+ }
+
+ if (vif->type == NL80211_IFTYPE_STATION)
+ wcn36xx_smd_set_bss_nw_type(wcn, sta, bss);
+ else
+ bss->nw_type = WCN36XX_HAL_11N_NW_TYPE;
+
+ bss->short_slot_time_supported = vif->bss_conf.use_short_slot;
+ bss->lla_coexist = 0;
+ bss->llb_coexist = 0;
+ bss->llg_coexist = 0;
+ bss->rifs_mode = 0;
+ bss->beacon_interval = vif->bss_conf.beacon_int;
+ bss->dtim_period = vif_priv->dtim_period;
+
+ wcn36xx_smd_set_bss_ht_params(vif, sta, bss);
+
+ bss->oper_channel = WCN36XX_HW_CHANNEL(wcn);
+
+ if (conf_is_ht40_minus(&wcn->hw->conf))
+ bss->ext_channel = IEEE80211_HT_PARAM_CHA_SEC_BELOW;
+ else if (conf_is_ht40_plus(&wcn->hw->conf))
+ bss->ext_channel = IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
+ else
+ bss->ext_channel = IEEE80211_HT_PARAM_CHA_SEC_NONE;
+
+ bss->reserved = 0;
+ wcn36xx_smd_set_sta_params(wcn, vif, sta, sta_params);
+
+ /* wcn->ssid is only valid in AP and IBSS mode */
+ bss->ssid.length = vif_priv->ssid.length;
+ memcpy(bss->ssid.ssid, vif_priv->ssid.ssid, vif_priv->ssid.length);
+
+ bss->obss_prot_enabled = 0;
+ bss->rmf = 0;
+ bss->max_probe_resp_retry_limit = 0;
+ bss->hidden_ssid = vif->bss_conf.hidden_ssid;
+ bss->proxy_probe_resp = 0;
+ bss->edca_params_valid = 0;
+
+ /* FIXME: set acbe, acbk, acvi and acvo */
+
+ bss->ext_set_sta_key_param_valid = 0;
+
+ /* FIXME: set ext_set_sta_key_param */
+
+ bss->spectrum_mgt_enable = 0;
+ bss->tx_mgmt_power = 0;
+ bss->max_tx_power = WCN36XX_MAX_POWER(wcn);
+
+ bss->action = update;
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "hal config bss bssid %pM self_mac_addr %pM bss_type %d oper_mode %d nw_type %d\n",
+ bss->bssid, bss->self_mac_addr, bss->bss_type,
+ bss->oper_mode, bss->nw_type);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "- sta bssid %pM action %d sta_index %d bssid_index %d aid %d type %d mac %pM\n",
+ sta_params->bssid, sta_params->action,
+ sta_params->sta_index, sta_params->bssid_index,
+ sta_params->aid, sta_params->type,
+ sta_params->mac);
+
+ if (!wcn36xx_is_fw_version(wcn, 1, 2, 2, 24)) {
+ ret = wcn36xx_smd_config_bss_v1(wcn, &msg);
+ } else {
+ PREPARE_HAL_BUF(wcn->hal_buf, msg);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg.header.len);
+ }
+ if (ret) {
+ wcn36xx_err("Sending hal_config_bss failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_config_bss_rsp(wcn,
+ vif,
+ wcn->hal_buf,
+ wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_config_bss response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_delete_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif)
+{
+ struct wcn36xx_hal_delete_bss_req_msg msg_body;
+ struct wcn36xx_vif *priv_vif = (struct wcn36xx_vif *)vif->drv_priv;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_DELETE_BSS_REQ);
+
+ msg_body.bss_index = priv_vif->bss_index;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL, "hal delete bss %d\n", msg_body.bss_index);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_delete_bss failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_delete_bss response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_send_beacon(struct wcn36xx *wcn, struct ieee80211_vif *vif,
+ struct sk_buff *skb_beacon, u16 tim_off,
+ u16 p2p_off)
+{
+ struct wcn36xx_hal_send_beacon_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_SEND_BEACON_REQ);
+
+ /* TODO need to find out why this is needed? */
+ msg_body.beacon_length = skb_beacon->len + 6;
+
+ if (BEACON_TEMPLATE_SIZE > msg_body.beacon_length) {
+ memcpy(&msg_body.beacon, &skb_beacon->len, sizeof(u32));
+ memcpy(&(msg_body.beacon[4]), skb_beacon->data,
+ skb_beacon->len);
+ } else {
+ wcn36xx_err("Beacon is to big: beacon size=%d\n",
+ msg_body.beacon_length);
+ return -ENOMEM;
+ }
+ memcpy(msg_body.bssid, vif->addr, ETH_ALEN);
+
+ /* TODO need to find out why this is needed? */
+ msg_body.tim_ie_offset = tim_off+4;
+ msg_body.p2p_ie_offset = p2p_off;
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "hal send beacon beacon_length %d\n",
+ msg_body.beacon_length);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_send_beacon failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_send_beacon response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_update_proberesp_tmpl(struct wcn36xx *wcn,
+ struct ieee80211_vif *vif,
+ struct sk_buff *skb)
+{
+ struct wcn36xx_hal_send_probe_resp_req_msg msg;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg, WCN36XX_HAL_UPDATE_PROBE_RSP_TEMPLATE_REQ);
+
+ if (skb->len > BEACON_TEMPLATE_SIZE) {
+ wcn36xx_warn("probe response template is too big: %d\n",
+ skb->len);
+ return -E2BIG;
+ }
+
+ msg.probe_resp_template_len = skb->len;
+ memcpy(&msg.probe_resp_template, skb->data, skb->len);
+
+ memcpy(msg.bssid, vif->addr, ETH_ALEN);
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg);
+
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "hal update probe rsp len %d bssid %pM\n",
+ msg.probe_resp_template_len, msg.bssid);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_update_proberesp_tmpl failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_update_proberesp_tmpl response failed err=%d\n",
+ ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_set_stakey(struct wcn36xx *wcn,
+ enum ani_ed_type enc_type,
+ u8 keyidx,
+ u8 keylen,
+ u8 *key,
+ u8 sta_index)
+{
+ struct wcn36xx_hal_set_sta_key_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_SET_STAKEY_REQ);
+
+ msg_body.set_sta_key_params.sta_index = sta_index;
+ msg_body.set_sta_key_params.enc_type = enc_type;
+
+ msg_body.set_sta_key_params.key[0].id = keyidx;
+ msg_body.set_sta_key_params.key[0].unicast = 1;
+ msg_body.set_sta_key_params.key[0].direction = WCN36XX_HAL_TX_RX;
+ msg_body.set_sta_key_params.key[0].pae_role = 0;
+ msg_body.set_sta_key_params.key[0].length = keylen;
+ memcpy(msg_body.set_sta_key_params.key[0].key, key, keylen);
+ msg_body.set_sta_key_params.single_tid_rc = 1;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_set_stakey failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_set_stakey response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_set_bsskey(struct wcn36xx *wcn,
+ enum ani_ed_type enc_type,
+ u8 keyidx,
+ u8 keylen,
+ u8 *key)
+{
+ struct wcn36xx_hal_set_bss_key_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_SET_BSSKEY_REQ);
+ msg_body.bss_idx = 0;
+ msg_body.enc_type = enc_type;
+ msg_body.num_keys = 1;
+ msg_body.keys[0].id = keyidx;
+ msg_body.keys[0].unicast = 0;
+ msg_body.keys[0].direction = WCN36XX_HAL_RX_ONLY;
+ msg_body.keys[0].pae_role = 0;
+ msg_body.keys[0].length = keylen;
+ memcpy(msg_body.keys[0].key, key, keylen);
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_set_bsskey failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_set_bsskey response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_remove_stakey(struct wcn36xx *wcn,
+ enum ani_ed_type enc_type,
+ u8 keyidx,
+ u8 sta_index)
+{
+ struct wcn36xx_hal_remove_sta_key_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_RMV_STAKEY_REQ);
+
+ msg_body.sta_idx = sta_index;
+ msg_body.enc_type = enc_type;
+ msg_body.key_id = keyidx;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_remove_stakey failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_remove_stakey response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_remove_bsskey(struct wcn36xx *wcn,
+ enum ani_ed_type enc_type,
+ u8 keyidx)
+{
+ struct wcn36xx_hal_remove_bss_key_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_RMV_BSSKEY_REQ);
+ msg_body.bss_idx = 0;
+ msg_body.enc_type = enc_type;
+ msg_body.key_id = keyidx;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_remove_bsskey failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_remove_bsskey response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_enter_bmps(struct wcn36xx *wcn, struct ieee80211_vif *vif)
+{
+ struct wcn36xx_hal_enter_bmps_req_msg msg_body;
+ struct wcn36xx_vif *vif_priv = (struct wcn36xx_vif *)vif->drv_priv;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_ENTER_BMPS_REQ);
+
+ msg_body.bss_index = vif_priv->bss_index;
+ msg_body.tbtt = vif->bss_conf.sync_tsf;
+ msg_body.dtim_period = vif_priv->dtim_period;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_enter_bmps failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_enter_bmps response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_exit_bmps(struct wcn36xx *wcn, struct ieee80211_vif *vif)
+{
+ struct wcn36xx_hal_enter_bmps_req_msg msg_body;
+ struct wcn36xx_vif *vif_priv = (struct wcn36xx_vif *)vif->drv_priv;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_EXIT_BMPS_REQ);
+
+ msg_body.bss_index = vif_priv->bss_index;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_exit_bmps failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_exit_bmps response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+int wcn36xx_smd_set_power_params(struct wcn36xx *wcn, bool ignore_dtim)
+{
+ struct wcn36xx_hal_set_power_params_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_SET_POWER_PARAMS_REQ);
+
+ /*
+ * When host is down ignore every second dtim
+ */
+ if (ignore_dtim) {
+ msg_body.ignore_dtim = 1;
+ msg_body.dtim_period = 2;
+ }
+ msg_body.listen_interval = WCN36XX_LISTEN_INTERVAL(wcn);
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_set_power_params failed\n");
+ goto out;
+ }
+
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+/* Notice: This function should be called after associated, or else it
+ * will be invalid
+ */
+int wcn36xx_smd_keep_alive_req(struct wcn36xx *wcn,
+ struct ieee80211_vif *vif,
+ int packet_type)
+{
+ struct wcn36xx_hal_keep_alive_req_msg msg_body;
+ struct wcn36xx_vif *vif_priv = (struct wcn36xx_vif *)vif->drv_priv;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_KEEP_ALIVE_REQ);
+
+ if (packet_type == WCN36XX_HAL_KEEP_ALIVE_NULL_PKT) {
+ msg_body.bss_index = vif_priv->bss_index;
+ msg_body.packet_type = WCN36XX_HAL_KEEP_ALIVE_NULL_PKT;
+ msg_body.time_period = WCN36XX_KEEP_ALIVE_TIME_PERIOD;
+ } else if (packet_type == WCN36XX_HAL_KEEP_ALIVE_UNSOLICIT_ARP_RSP) {
+ /* TODO: it also support ARP response type */
+ } else {
+ wcn36xx_warn("unknow keep alive packet type %d\n", packet_type);
+ return -EINVAL;
+ }
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_exit_bmps failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_exit_bmps response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_dump_cmd_req(struct wcn36xx *wcn, u32 arg1, u32 arg2,
+ u32 arg3, u32 arg4, u32 arg5)
+{
+ struct wcn36xx_hal_dump_cmd_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_DUMP_COMMAND_REQ);
+
+ msg_body.arg1 = arg1;
+ msg_body.arg2 = arg2;
+ msg_body.arg3 = arg3;
+ msg_body.arg4 = arg4;
+ msg_body.arg5 = arg5;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_dump_cmd failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_dump_cmd response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+static inline void set_feat_caps(u32 *bitmap,
+ enum place_holder_in_cap_bitmap cap)
+{
+ int arr_idx, bit_idx;
+
+ if (cap < 0 || cap > 127) {
+ wcn36xx_warn("error cap idx %d\n", cap);
+ return;
+ }
+
+ arr_idx = cap / 32;
+ bit_idx = cap % 32;
+ bitmap[arr_idx] |= (1 << bit_idx);
+}
+
+static inline int get_feat_caps(u32 *bitmap,
+ enum place_holder_in_cap_bitmap cap)
+{
+ int arr_idx, bit_idx;
+ int ret = 0;
+
+ if (cap < 0 || cap > 127) {
+ wcn36xx_warn("error cap idx %d\n", cap);
+ return -EINVAL;
+ }
+
+ arr_idx = cap / 32;
+ bit_idx = cap % 32;
+ ret = (bitmap[arr_idx] & (1 << bit_idx)) ? 1 : 0;
+ return ret;
+}
+
+static inline void clear_feat_caps(u32 *bitmap,
+ enum place_holder_in_cap_bitmap cap)
+{
+ int arr_idx, bit_idx;
+
+ if (cap < 0 || cap > 127) {
+ wcn36xx_warn("error cap idx %d\n", cap);
+ return;
+ }
+
+ arr_idx = cap / 32;
+ bit_idx = cap % 32;
+ bitmap[arr_idx] &= ~(1 << bit_idx);
+}
+
+int wcn36xx_smd_feature_caps_exchange(struct wcn36xx *wcn)
+{
+ struct wcn36xx_hal_feat_caps_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_FEATURE_CAPS_EXCHANGE_REQ);
+
+ set_feat_caps(msg_body.feat_caps, STA_POWERSAVE);
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_feature_caps_exchange failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_feature_caps_exchange response failed err=%d\n",
+ ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_add_ba_session(struct wcn36xx *wcn,
+ struct ieee80211_sta *sta,
+ u16 tid,
+ u16 *ssn,
+ u8 direction,
+ u8 sta_index)
+{
+ struct wcn36xx_hal_add_ba_session_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_ADD_BA_SESSION_REQ);
+
+ msg_body.sta_index = sta_index;
+ memcpy(&msg_body.mac_addr, sta->addr, ETH_ALEN);
+ msg_body.dialog_token = 0x10;
+ msg_body.tid = tid;
+
+ /* Immediate BA because Delayed BA is not supported */
+ msg_body.policy = 1;
+ msg_body.buffer_size = WCN36XX_AGGR_BUFFER_SIZE;
+ msg_body.timeout = 0;
+ if (ssn)
+ msg_body.ssn = *ssn;
+ msg_body.direction = direction;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_add_ba_session failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_add_ba_session response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_add_ba(struct wcn36xx *wcn)
+{
+ struct wcn36xx_hal_add_ba_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_ADD_BA_REQ);
+
+ msg_body.session_id = 0;
+ msg_body.win_size = WCN36XX_AGGR_BUFFER_SIZE;
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_add_ba failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_add_ba response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_del_ba(struct wcn36xx *wcn, u16 tid, u8 sta_index)
+{
+ struct wcn36xx_hal_del_ba_req_msg msg_body;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_DEL_BA_REQ);
+
+ msg_body.sta_index = sta_index;
+ msg_body.tid = tid;
+ msg_body.direction = 0;
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_del_ba failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_del_ba response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+int wcn36xx_smd_trigger_ba(struct wcn36xx *wcn, u8 sta_index)
+{
+ struct wcn36xx_hal_trigger_ba_req_msg msg_body;
+ struct wcn36xx_hal_trigget_ba_req_candidate *candidate;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_TRIGGER_BA_REQ);
+
+ msg_body.session_id = 0;
+ msg_body.candidate_cnt = 1;
+ msg_body.header.len += sizeof(*candidate);
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ candidate = (struct wcn36xx_hal_trigget_ba_req_candidate *)
+ (wcn->hal_buf + sizeof(msg_body));
+ candidate->sta_index = sta_index;
+ candidate->tid_bitmap = 1;
+
+ ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_trigger_ba failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_trigger_ba response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+
+static int wcn36xx_smd_tx_compl_ind(struct wcn36xx *wcn, void *buf, size_t len)
+{
+ struct wcn36xx_hal_tx_compl_ind_msg *rsp = buf;
+
+ if (len != sizeof(*rsp)) {
+ wcn36xx_warn("Bad TX complete indication\n");
+ return -EIO;
+ }
+
+ wcn36xx_dxe_tx_ack_ind(wcn, rsp->status);
+
+ return 0;
+}
+
+static int wcn36xx_smd_missed_beacon_ind(struct wcn36xx *wcn,
+ void *buf,
+ size_t len)
+{
+ struct wcn36xx_hal_missed_beacon_ind_msg *rsp = buf;
+ struct ieee80211_vif *vif = NULL;
+ struct wcn36xx_vif *tmp;
+
+ /* Old FW does not have bss index */
+ if (wcn36xx_is_fw_version(wcn, 1, 2, 2, 24)) {
+ list_for_each_entry(tmp, &wcn->vif_list, list) {
+ wcn36xx_dbg(WCN36XX_DBG_HAL, "beacon missed bss_index %d\n",
+ tmp->bss_index);
+ vif = container_of((void *)tmp,
+ struct ieee80211_vif,
+ drv_priv);
+ ieee80211_connection_loss(vif);
+ return 0;
+ }
+ }
+
+ if (len != sizeof(*rsp)) {
+ wcn36xx_warn("Corrupted missed beacon indication\n");
+ return -EIO;
+ }
+
+ list_for_each_entry(tmp, &wcn->vif_list, list) {
+ if (tmp->bss_index == rsp->bss_index) {
+ wcn36xx_dbg(WCN36XX_DBG_HAL, "beacon missed bss_index %d\n",
+ rsp->bss_index);
+ vif = container_of((void *)tmp,
+ struct ieee80211_vif,
+ drv_priv);
+ ieee80211_connection_loss(vif);
+ return 0;
+ }
+ }
+
+ wcn36xx_warn("BSS index %d not found\n", rsp->bss_index);
+ return -ENOENT;
+}
+
+static int wcn36xx_smd_delete_sta_context_ind(struct wcn36xx *wcn,
+ void *buf,
+ size_t len)
+{
+ struct wcn36xx_hal_delete_sta_context_ind_msg *rsp = buf;
+ struct wcn36xx_vif *tmp;
+ struct ieee80211_sta *sta = NULL;
+
+ if (len != sizeof(*rsp)) {
+ wcn36xx_warn("Corrupted delete sta indication\n");
+ return -EIO;
+ }
+
+ list_for_each_entry(tmp, &wcn->vif_list, list) {
+ if (sta && (tmp->sta->sta_index == rsp->sta_id)) {
+ sta = container_of((void *)tmp->sta,
+ struct ieee80211_sta,
+ drv_priv);
+ wcn36xx_dbg(WCN36XX_DBG_HAL,
+ "delete station indication %pM index %d\n",
+ rsp->addr2,
+ rsp->sta_id);
+ ieee80211_report_low_ack(sta, 0);
+ return 0;
+ }
+ }
+
+ wcn36xx_warn("STA with addr %pM and index %d not found\n",
+ rsp->addr2,
+ rsp->sta_id);
+ return -ENOENT;
+}
+
+int wcn36xx_smd_update_cfg(struct wcn36xx *wcn, u32 cfg_id, u32 value)
+{
+ struct wcn36xx_hal_update_cfg_req_msg msg_body, *body;
+ size_t len;
+ int ret = 0;
+
+ mutex_lock(&wcn->hal_mutex);
+ INIT_HAL_MSG(msg_body, WCN36XX_HAL_UPDATE_CFG_REQ);
+
+ PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+ body = (struct wcn36xx_hal_update_cfg_req_msg *) wcn->hal_buf;
+ len = msg_body.header.len;
+
+ put_cfg_tlv_u32(wcn, &len, cfg_id, value);
+ body->header.len = len;
+ body->len = len - sizeof(*body);
+
+ ret = wcn36xx_smd_send_and_wait(wcn, body->header.len);
+ if (ret) {
+ wcn36xx_err("Sending hal_update_cfg failed\n");
+ goto out;
+ }
+ ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+ if (ret) {
+ wcn36xx_err("hal_update_cfg response failed err=%d\n", ret);
+ goto out;
+ }
+out:
+ mutex_unlock(&wcn->hal_mutex);
+ return ret;
+}
+static void wcn36xx_smd_rsp_process(struct wcn36xx *wcn, void *buf, size_t len)
+{
+ struct wcn36xx_hal_msg_header *msg_header = buf;
+ struct wcn36xx_hal_ind_msg *msg_ind;
+ wcn36xx_dbg_dump(WCN36XX_DBG_SMD_DUMP, "SMD <<< ", buf, len);
+
+ switch (msg_header->msg_type) {
+ case WCN36XX_HAL_START_RSP:
+ case WCN36XX_HAL_CONFIG_STA_RSP:
+ case WCN36XX_HAL_CONFIG_BSS_RSP:
+ case WCN36XX_HAL_ADD_STA_SELF_RSP:
+ case WCN36XX_HAL_STOP_RSP:
+ case WCN36XX_HAL_DEL_STA_SELF_RSP:
+ case WCN36XX_HAL_DELETE_STA_RSP:
+ case WCN36XX_HAL_INIT_SCAN_RSP:
+ case WCN36XX_HAL_START_SCAN_RSP:
+ case WCN36XX_HAL_END_SCAN_RSP:
+ case WCN36XX_HAL_FINISH_SCAN_RSP:
+ case WCN36XX_HAL_DOWNLOAD_NV_RSP:
+ case WCN36XX_HAL_DELETE_BSS_RSP:
+ case WCN36XX_HAL_SEND_BEACON_RSP:
+ case WCN36XX_HAL_SET_LINK_ST_RSP:
+ case WCN36XX_HAL_UPDATE_PROBE_RSP_TEMPLATE_RSP:
+ case WCN36XX_HAL_SET_BSSKEY_RSP:
+ case WCN36XX_HAL_SET_STAKEY_RSP:
+ case WCN36XX_HAL_RMV_STAKEY_RSP:
+ case WCN36XX_HAL_RMV_BSSKEY_RSP:
+ case WCN36XX_HAL_ENTER_BMPS_RSP:
+ case WCN36XX_HAL_SET_POWER_PARAMS_RSP:
+ case WCN36XX_HAL_EXIT_BMPS_RSP:
+ case WCN36XX_HAL_KEEP_ALIVE_RSP:
+ case WCN36XX_HAL_DUMP_COMMAND_RSP:
+ case WCN36XX_HAL_ADD_BA_SESSION_RSP:
+ case WCN36XX_HAL_ADD_BA_RSP:
+ case WCN36XX_HAL_DEL_BA_RSP:
+ case WCN36XX_HAL_TRIGGER_BA_RSP:
+ case WCN36XX_HAL_UPDATE_CFG_RSP:
+ case WCN36XX_HAL_JOIN_RSP:
+ case WCN36XX_HAL_UPDATE_SCAN_PARAM_RSP:
+ case WCN36XX_HAL_CH_SWITCH_RSP:
+ case WCN36XX_HAL_FEATURE_CAPS_EXCHANGE_RSP:
+ memcpy(wcn->hal_buf, buf, len);
+ wcn->hal_rsp_len = len;
+ complete(&wcn->hal_rsp_compl);
+ break;
+
+ case WCN36XX_HAL_OTA_TX_COMPL_IND:
+ case WCN36XX_HAL_MISSED_BEACON_IND:
+ case WCN36XX_HAL_DELETE_STA_CONTEXT_IND:
+ mutex_lock(&wcn->hal_ind_mutex);
+ msg_ind = kmalloc(sizeof(*msg_ind), GFP_KERNEL);
+ msg_ind->msg_len = len;
+ msg_ind->msg = kmalloc(len, GFP_KERNEL);
+ memcpy(msg_ind->msg, buf, len);
+ list_add_tail(&msg_ind->list, &wcn->hal_ind_queue);
+ queue_work(wcn->hal_ind_wq, &wcn->hal_ind_work);
+ wcn36xx_dbg(WCN36XX_DBG_HAL, "indication arrived\n");
+ mutex_unlock(&wcn->hal_ind_mutex);
+ break;
+ default:
+ wcn36xx_err("SMD_EVENT (%d) not supported\n",
+ msg_header->msg_type);
+ }
+}
+static void wcn36xx_ind_smd_work(struct work_struct *work)
+{
+ struct wcn36xx *wcn =
+ container_of(work, struct wcn36xx, hal_ind_work);
+ struct wcn36xx_hal_msg_header *msg_header;
+ struct wcn36xx_hal_ind_msg *hal_ind_msg;
+
+ mutex_lock(&wcn->hal_ind_mutex);
+
+ hal_ind_msg = list_first_entry(&wcn->hal_ind_queue,
+ struct wcn36xx_hal_ind_msg,
+ list);
+
+ msg_header = (struct wcn36xx_hal_msg_header *)hal_ind_msg->msg;
+
+ switch (msg_header->msg_type) {
+ case WCN36XX_HAL_OTA_TX_COMPL_IND:
+ wcn36xx_smd_tx_compl_ind(wcn,
+ hal_ind_msg->msg,
+ hal_ind_msg->msg_len);
+ break;
+ case WCN36XX_HAL_MISSED_BEACON_IND:
+ wcn36xx_smd_missed_beacon_ind(wcn,
+ hal_ind_msg->msg,
+ hal_ind_msg->msg_len);
+ break;
+ case WCN36XX_HAL_DELETE_STA_CONTEXT_IND:
+ wcn36xx_smd_delete_sta_context_ind(wcn,
+ hal_ind_msg->msg,
+ hal_ind_msg->msg_len);
+ break;
+ default:
+ wcn36xx_err("SMD_EVENT (%d) not supported\n",
+ msg_header->msg_type);
+ }
+ list_del(wcn->hal_ind_queue.next);
+ kfree(hal_ind_msg->msg);
+ kfree(hal_ind_msg);
+ mutex_unlock(&wcn->hal_ind_mutex);
+}
+int wcn36xx_smd_open(struct wcn36xx *wcn)
+{
+ int ret = 0;
+ wcn->hal_ind_wq = create_freezable_workqueue("wcn36xx_smd_ind");
+ if (!wcn->hal_ind_wq) {
+ wcn36xx_err("failed to allocate wq\n");
+ ret = -ENOMEM;
+ goto out;
+ }
+ INIT_WORK(&wcn->hal_ind_work, wcn36xx_ind_smd_work);
+ INIT_LIST_HEAD(&wcn->hal_ind_queue);
+ mutex_init(&wcn->hal_ind_mutex);
+
+ ret = wcn->ctrl_ops->open(wcn, wcn36xx_smd_rsp_process);
+ if (ret) {
+ wcn36xx_err("failed to open control channel\n");
+ goto free_wq;
+ }
+
+ return ret;
+
+free_wq:
+ destroy_workqueue(wcn->hal_ind_wq);
+out:
+ return ret;
+}
+
+void wcn36xx_smd_close(struct wcn36xx *wcn)
+{
+ wcn->ctrl_ops->close();
+ destroy_workqueue(wcn->hal_ind_wq);
+ mutex_destroy(&wcn->hal_ind_mutex);
+}
--
1.8.1.2
^ permalink raw reply related
* [PATCH v4 09/16] wcn36xx: add pmc.c
From: Eugene Krasnikov @ 2013-09-22 22:42 UTC (permalink / raw)
To: linux-wireless; +Cc: wcn36xx, Eugene Krasnikov
In-Reply-To: <1379889733-6215-1-git-send-email-k.eugene.e@gmail.com>
adding pmc.c
Signed-off-by: Eugene Krasnikov <k.eugene.e@gmail.com>
---
drivers/net/wireless/ath/wcn36xx/pmc.c | 62 ++++++++++++++++++++++++++++++++++
1 file changed, 62 insertions(+)
create mode 100644 drivers/net/wireless/ath/wcn36xx/pmc.c
diff --git a/drivers/net/wireless/ath/wcn36xx/pmc.c b/drivers/net/wireless/ath/wcn36xx/pmc.c
new file mode 100644
index 0000000..28b515c
--- /dev/null
+++ b/drivers/net/wireless/ath/wcn36xx/pmc.c
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2013 Eugene Krasnikov <k.eugene.e@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include "wcn36xx.h"
+
+int wcn36xx_pmc_enter_bmps_state(struct wcn36xx *wcn,
+ struct ieee80211_vif *vif)
+{
+ int ret = 0;
+ struct wcn36xx_vif *vif_priv = (struct wcn36xx_vif *)vif->drv_priv;
+ /* TODO: Make sure the TX chain clean */
+ ret = wcn36xx_smd_enter_bmps(wcn, vif);
+ if (!ret) {
+ wcn36xx_dbg(WCN36XX_DBG_PMC, "Entered BMPS\n");
+ vif_priv->pw_state = WCN36XX_BMPS;
+ } else {
+ /*
+ * One of the reasons why HW will not enter BMPS is because
+ * driver is trying to enter bmps before first beacon was
+ * received just after auth complete
+ */
+ wcn36xx_err("Can not enter BMPS!\n");
+ }
+ return ret;
+}
+
+int wcn36xx_pmc_exit_bmps_state(struct wcn36xx *wcn,
+ struct ieee80211_vif *vif)
+{
+ struct wcn36xx_vif *vif_priv = (struct wcn36xx_vif *)vif->drv_priv;
+
+ if (WCN36XX_BMPS != vif_priv->pw_state) {
+ wcn36xx_err("Not in BMPS mode, no need to exit from BMPS mode!\n");
+ return -EINVAL;
+ }
+ wcn36xx_smd_exit_bmps(wcn, vif);
+ vif_priv->pw_state = WCN36XX_FULL_POWER;
+ return 0;
+}
+
+int wcn36xx_enable_keep_alive_null_packet(struct wcn36xx *wcn,
+ struct ieee80211_vif *vif)
+{
+ wcn36xx_dbg(WCN36XX_DBG_PMC, "%s\n", __func__);
+ return wcn36xx_smd_keep_alive_req(wcn, vif,
+ WCN36XX_HAL_KEEP_ALIVE_NULL_PKT);
+}
--
1.8.1.2
^ permalink raw reply related
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