Linux wireless drivers development
 help / color / mirror / Atom feed
* 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


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox