Linux wireless drivers development
 help / color / mirror / Atom feed
* [PATCH 1/4] ath9k_hw: clean up and fix initial noise floor calibration
From: Felix Fietkau @ 2010-07-30 19:02 UTC (permalink / raw)
  To: linux-wireless; +Cc: linville, lrodriguez

On AR9003 the initial noise floor calibration is currently triggered
at the end of the reset without allowing the hardware to update the
baseband settings. This could potentially make scans in noisy
environments a bit more unreliable, so use the same calibration
sequence that is used on AR9002.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
---
 drivers/net/wireless/ath/ath9k/ar9002_calib.c |    5 ++---
 drivers/net/wireless/ath/ath9k/ar9003_calib.c |    4 +++-
 drivers/net/wireless/ath/ath9k/calib.c        |   10 ++++++++--
 drivers/net/wireless/ath/ath9k/calib.h        |    2 +-
 drivers/net/wireless/ath/ath9k/hw.c           |    7 ++-----
 5 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/ar9002_calib.c b/drivers/net/wireless/ath/ath9k/ar9002_calib.c
index dabafb8..2387ad1 100644
--- a/drivers/net/wireless/ath/ath9k/ar9002_calib.c
+++ b/drivers/net/wireless/ath/ath9k/ar9002_calib.c
@@ -721,7 +721,7 @@ static bool ar9002_hw_calibrate(struct ath_hw *ah,
 		 */
 		ath9k_hw_loadnf(ah, ah->curchan);
 
-		ath9k_hw_start_nfcal(ah);
+		ath9k_hw_start_nfcal(ah, false);
 	}
 
 	return iscaldone;
@@ -869,8 +869,7 @@ static bool ar9002_hw_init_cal(struct ath_hw *ah, struct ath9k_channel *chan)
 	ar9002_hw_pa_cal(ah, true);
 
 	/* Do NF Calibration after DC offset and other calibrations */
-	REG_WRITE(ah, AR_PHY_AGC_CONTROL,
-		  REG_READ(ah, AR_PHY_AGC_CONTROL) | AR_PHY_AGC_CONTROL_NF);
+	ath9k_hw_start_nfcal(ah, true);
 
 	ah->cal_list = ah->cal_list_last = ah->cal_list_curr = NULL;
 
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_calib.c b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
index 5a06503..938365e 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
@@ -156,7 +156,7 @@ static bool ar9003_hw_calibrate(struct ath_hw *ah,
 		ath9k_hw_loadnf(ah, ah->curchan);
 
 		/* start NF calibration, without updating BB NF register */
-		ath9k_hw_start_nfcal(ah);
+		ath9k_hw_start_nfcal(ah, false);
 	}
 
 	return iscaldone;
@@ -762,6 +762,8 @@ static bool ar9003_hw_init_cal(struct ath_hw *ah,
 	/* Revert chainmasks to their original values before NF cal */
 	ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask);
 
+	ath9k_hw_start_nfcal(ah, true);
+
 	/* Initialize list pointers */
 	ah->cal_list = ah->cal_list_last = ah->cal_list_curr = NULL;
 
diff --git a/drivers/net/wireless/ath/ath9k/calib.c b/drivers/net/wireless/ath/ath9k/calib.c
index 139289e..294016f 100644
--- a/drivers/net/wireless/ath/ath9k/calib.c
+++ b/drivers/net/wireless/ath/ath9k/calib.c
@@ -158,12 +158,18 @@ bool ath9k_hw_reset_calvalid(struct ath_hw *ah)
 }
 EXPORT_SYMBOL(ath9k_hw_reset_calvalid);
 
-void ath9k_hw_start_nfcal(struct ath_hw *ah)
+void ath9k_hw_start_nfcal(struct ath_hw *ah, bool update)
 {
 	REG_SET_BIT(ah, AR_PHY_AGC_CONTROL,
 		    AR_PHY_AGC_CONTROL_ENABLE_NF);
-	REG_SET_BIT(ah, AR_PHY_AGC_CONTROL,
+
+	if (update)
+		REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
 		    AR_PHY_AGC_CONTROL_NO_UPDATE_NF);
+	else
+		REG_SET_BIT(ah, AR_PHY_AGC_CONTROL,
+		    AR_PHY_AGC_CONTROL_NO_UPDATE_NF);
+
 	REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_NF);
 }
 
diff --git a/drivers/net/wireless/ath/ath9k/calib.h b/drivers/net/wireless/ath/ath9k/calib.h
index cd60d09..bf44742 100644
--- a/drivers/net/wireless/ath/ath9k/calib.h
+++ b/drivers/net/wireless/ath/ath9k/calib.h
@@ -108,7 +108,7 @@ struct ath9k_pacal_info{
 };
 
 bool ath9k_hw_reset_calvalid(struct ath_hw *ah);
-void ath9k_hw_start_nfcal(struct ath_hw *ah);
+void ath9k_hw_start_nfcal(struct ath_hw *ah, bool update);
 void ath9k_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan);
 int16_t ath9k_hw_getnf(struct ath_hw *ah,
 		       struct ath9k_channel *chan);
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index 8d291cc..257b623 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -1256,7 +1256,7 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
 
 		if (ath9k_hw_channel_change(ah, chan)) {
 			ath9k_hw_loadnf(ah, ah->curchan);
-			ath9k_hw_start_nfcal(ah);
+			ath9k_hw_start_nfcal(ah, true);
 			return 0;
 		}
 	}
@@ -1461,11 +1461,8 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
 	if (ah->btcoex_hw.enabled)
 		ath9k_hw_btcoex_enable(ah);
 
-	if (AR_SREV_9300_20_OR_LATER(ah)) {
-		ath9k_hw_loadnf(ah, curchan);
-		ath9k_hw_start_nfcal(ah);
+	if (AR_SREV_9300_20_OR_LATER(ah))
 		ar9003_hw_bb_watchdog_config(ah);
-	}
 
 	return 0;
 }
-- 
1.6.4.2


^ permalink raw reply related

* [PATCH 3/4] ath9k: fix a crash in the PA predistortion apply function
From: Felix Fietkau @ 2010-07-30 19:02 UTC (permalink / raw)
  To: linux-wireless; +Cc: linville, lrodriguez
In-Reply-To: <1280516532-42721-2-git-send-email-nbd@openwrt.org>

When updating the PAPRD table in hardware, PAPRD itself needs to be
disabled first, otherwise the hardware can throw a data bus error,
which upsets at least some platforms.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
---
 drivers/net/wireless/ath/ath9k/main.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 0429dda..6c1d9ef 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -239,6 +239,7 @@ static void ath_paprd_activate(struct ath_softc *sc)
 		return;
 
 	ath9k_ps_wakeup(sc);
+	ar9003_paprd_enable(ah, false);
 	for (chain = 0; chain < AR9300_MAX_CHAINS; chain++) {
 		if (!(ah->caps.tx_chainmask & BIT(chain)))
 			continue;
-- 
1.6.4.2


^ permalink raw reply related

* [PATCH 2/4] ath9k_hw: fix periodic noise floor calibration on AR9003
From: Felix Fietkau @ 2010-07-30 19:02 UTC (permalink / raw)
  To: linux-wireless; +Cc: linville, lrodriguez
In-Reply-To: <1280516532-42721-1-git-send-email-nbd@openwrt.org>

The periodic noise floor calibration is broken on this chip family, because
it keeps triggering a software-filtered noise floor calibration, but never
reads the result before uploading the history buffer value to the hardware.

Fix this with a call to ath9k_hw_getnf(), just like on AR9002.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
---
 drivers/net/wireless/ath/ath9k/ar9003_calib.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/ar9003_calib.c b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
index 938365e..f51ab89 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
@@ -149,6 +149,12 @@ static bool ar9003_hw_calibrate(struct ath_hw *ah,
 	/* Do NF cal only at longer intervals */
 	if (longcal) {
 		/*
+		 * Get the value from the previous NF cal and update
+		 * history buffer.
+		 */
+		ath9k_hw_getnf(ah, chan);
+
+		/*
 		 * Load the NF from history buffer of the current channel.
 		 * NF is slow time-variant, so it is OK to use a historical
 		 * value.
-- 
1.6.4.2


^ permalink raw reply related

* [PATCH 4/4] ath9k_hw: fix analog shift register writes on AR9003
From: Felix Fietkau @ 2010-07-30 19:02 UTC (permalink / raw)
  To: linux-wireless; +Cc: linville, lrodriguez
In-Reply-To: <1280516532-42721-3-git-send-email-nbd@openwrt.org>

Writes to the analog shift registers, which are issues by the initval
programming function, require a 100 usec delay (similar to AR9002,
but in a different register range).

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
---
 drivers/net/wireless/ath/ath9k/ar9003_phy.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
index a753a43..a491854 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
@@ -542,7 +542,11 @@ static void ar9003_hw_prog_ini(struct ath_hw *ah,
 		u32 reg = INI_RA(iniArr, i, 0);
 		u32 val = INI_RA(iniArr, i, column);
 
-		REG_WRITE(ah, reg, val);
+		if (reg >= 0x16000 && reg < 0x17000)
+			ath9k_hw_analog_shift_regwrite(ah, reg, val);
+		else
+			REG_WRITE(ah, reg, val);
+
 		DO_DELAY(regWrites);
 	}
 }
-- 
1.6.4.2


^ permalink raw reply related

* [168/205] libertas/sdio: 8686: set ECSI bit for 1-bit transfers
From: Greg KH @ 2010-07-30 17:53 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: stable-review, torvalds, akpm, alan, Daniel Mack, Alagu Sankar,
	Volker Ernst, Dan Williams, John W. Linville, Holger Schurig,
	Bing Zhao, libertas-dev, linux-wireless, linux-mmc
In-Reply-To: <20100730175238.GA3924@kroah.com>

2.6.34-stable review patch.  If anyone has any objections, please let us know.

------------------

From: Daniel Mack <daniel@caiaq.de>

commit 8a64c0f6b7ec7f758c4ef445e49f479e27fa2236 upstream.

When operating in 1-bit mode, SDAT1 is used as dedicated interrupt line.
However, the 8686 will only drive this line when the ECSI bit is set in
the CCCR_IF register.

Thanks to Alagu Sankar for pointing me in the right direction.

Signed-off-by: Daniel Mack <daniel@caiaq.de>
Cc: Alagu Sankar <alagusankar@embwise.com>
Cc: Volker Ernst <volker.ernst@txtr.com>
Cc: Dan Williams <dcbw@redhat.com>
Cc: John W. Linville <linville@tuxdriver.com>
Cc: Holger Schurig <hs4233@mail.mn-solutions.de>
Cc: Bing Zhao <bzhao@marvell.com>
Cc: libertas-dev@lists.infradead.org
Cc: linux-wireless@vger.kernel.org
Cc: linux-mmc@vger.kernel.org
Acked-by: Dan Williams <dcbw@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/net/wireless/libertas/if_sdio.c |   22 ++++++++++++++++++++++
 include/linux/mmc/sdio.h                |    2 ++
 2 files changed, 24 insertions(+)

--- a/drivers/net/wireless/libertas/if_sdio.c
+++ b/drivers/net/wireless/libertas/if_sdio.c
@@ -35,6 +35,8 @@
 #include <linux/mmc/card.h>
 #include <linux/mmc/sdio_func.h>
 #include <linux/mmc/sdio_ids.h>
+#include <linux/mmc/sdio.h>
+#include <linux/mmc/host.h>
 
 #include "host.h"
 #include "decl.h"
@@ -943,6 +945,7 @@ static int if_sdio_probe(struct sdio_fun
 	int ret, i;
 	unsigned int model;
 	struct if_sdio_packet *packet;
+	struct mmc_host *host = func->card->host;
 
 	lbs_deb_enter(LBS_DEB_SDIO);
 
@@ -1023,6 +1026,25 @@ static int if_sdio_probe(struct sdio_fun
 	if (ret)
 		goto disable;
 
+	/* For 1-bit transfers to the 8686 model, we need to enable the
+	 * interrupt flag in the CCCR register. Set the MMC_QUIRK_LENIENT_FN0
+	 * bit to allow access to non-vendor registers. */
+	if ((card->model == IF_SDIO_MODEL_8686) &&
+	    (host->caps & MMC_CAP_SDIO_IRQ) &&
+	    (host->ios.bus_width == MMC_BUS_WIDTH_1)) {
+		u8 reg;
+
+		func->card->quirks |= MMC_QUIRK_LENIENT_FN0;
+		reg = sdio_f0_readb(func, SDIO_CCCR_IF, &ret);
+		if (ret)
+			goto release_int;
+
+		reg |= SDIO_BUS_ECSI;
+		sdio_f0_writeb(func, reg, SDIO_CCCR_IF, &ret);
+		if (ret)
+			goto release_int;
+	}
+
 	card->ioport = sdio_readb(func, IF_SDIO_IOPORT, &ret);
 	if (ret)
 		goto release_int;
--- a/include/linux/mmc/sdio.h
+++ b/include/linux/mmc/sdio.h
@@ -94,6 +94,8 @@
 
 #define  SDIO_BUS_WIDTH_1BIT	0x00
 #define  SDIO_BUS_WIDTH_4BIT	0x02
+#define  SDIO_BUS_ECSI		0x20	/* Enable continuous SPI interrupt */
+#define  SDIO_BUS_SCSI		0x40	/* Support continuous SPI interrupt */
 
 #define  SDIO_BUS_ASYNC_INT	0x20
 



^ permalink raw reply

* [117/140] libertas/sdio: 8686: set ECSI bit for 1-bit transfers
From: Greg KH @ 2010-07-30 17:31 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: stable-review, torvalds, akpm, alan, Daniel Mack, Alagu Sankar,
	Volker Ernst, Dan Williams, John W. Linville, Holger Schurig,
	Bing Zhao, libertas-dev, linux-wireless, linux-mmc
In-Reply-To: <20100730173205.GA22581@kroah.com>

2.6.33-stable review patch.  If anyone has any objections, please let us know.

------------------

From: Daniel Mack <daniel@caiaq.de>

commit 8a64c0f6b7ec7f758c4ef445e49f479e27fa2236 upstream.

When operating in 1-bit mode, SDAT1 is used as dedicated interrupt line.
However, the 8686 will only drive this line when the ECSI bit is set in
the CCCR_IF register.

Thanks to Alagu Sankar for pointing me in the right direction.

Signed-off-by: Daniel Mack <daniel@caiaq.de>
Cc: Alagu Sankar <alagusankar@embwise.com>
Cc: Volker Ernst <volker.ernst@txtr.com>
Cc: Dan Williams <dcbw@redhat.com>
Cc: John W. Linville <linville@tuxdriver.com>
Cc: Holger Schurig <hs4233@mail.mn-solutions.de>
Cc: Bing Zhao <bzhao@marvell.com>
Cc: libertas-dev@lists.infradead.org
Cc: linux-wireless@vger.kernel.org
Cc: linux-mmc@vger.kernel.org
Acked-by: Dan Williams <dcbw@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/net/wireless/libertas/if_sdio.c |   22 ++++++++++++++++++++++
 include/linux/mmc/sdio.h                |    2 ++
 2 files changed, 24 insertions(+)

--- a/drivers/net/wireless/libertas/if_sdio.c
+++ b/drivers/net/wireless/libertas/if_sdio.c
@@ -34,6 +34,8 @@
 #include <linux/mmc/card.h>
 #include <linux/mmc/sdio_func.h>
 #include <linux/mmc/sdio_ids.h>
+#include <linux/mmc/sdio.h>
+#include <linux/mmc/host.h>
 
 #include "host.h"
 #include "decl.h"
@@ -942,6 +944,7 @@ static int if_sdio_probe(struct sdio_fun
 	int ret, i;
 	unsigned int model;
 	struct if_sdio_packet *packet;
+	struct mmc_host *host = func->card->host;
 
 	lbs_deb_enter(LBS_DEB_SDIO);
 
@@ -1022,6 +1025,25 @@ static int if_sdio_probe(struct sdio_fun
 	if (ret)
 		goto disable;
 
+	/* For 1-bit transfers to the 8686 model, we need to enable the
+	 * interrupt flag in the CCCR register. Set the MMC_QUIRK_LENIENT_FN0
+	 * bit to allow access to non-vendor registers. */
+	if ((card->model == IF_SDIO_MODEL_8686) &&
+	    (host->caps & MMC_CAP_SDIO_IRQ) &&
+	    (host->ios.bus_width == MMC_BUS_WIDTH_1)) {
+		u8 reg;
+
+		func->card->quirks |= MMC_QUIRK_LENIENT_FN0;
+		reg = sdio_f0_readb(func, SDIO_CCCR_IF, &ret);
+		if (ret)
+			goto release_int;
+
+		reg |= SDIO_BUS_ECSI;
+		sdio_f0_writeb(func, reg, SDIO_CCCR_IF, &ret);
+		if (ret)
+			goto release_int;
+	}
+
 	card->ioport = sdio_readb(func, IF_SDIO_IOPORT, &ret);
 	if (ret)
 		goto release_int;
--- a/include/linux/mmc/sdio.h
+++ b/include/linux/mmc/sdio.h
@@ -94,6 +94,8 @@
 
 #define  SDIO_BUS_WIDTH_1BIT	0x00
 #define  SDIO_BUS_WIDTH_4BIT	0x02
+#define  SDIO_BUS_ECSI		0x20	/* Enable continuous SPI interrupt */
+#define  SDIO_BUS_SCSI		0x40	/* Support continuous SPI interrupt */
 
 #define  SDIO_BUS_CD_DISABLE     0x80	/* disable pull-up on DAT3 (pin 1) */
 



^ permalink raw reply

* [142/165] libertas/sdio: 8686: set ECSI bit for 1-bit transfers
From: Greg KH @ 2010-07-30 17:16 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: stable-review, torvalds, akpm, alan, Daniel Mack, Alagu Sankar,
	Volker Ernst, Dan Williams, John W. Linville, Holger Schurig,
	Bing Zhao, libertas-dev, linux-wireless, linux-mmc

2.6.32-stable review patch.  If anyone has any objections, please let us know.

------------------

From: Daniel Mack <daniel@caiaq.de>

commit 8a64c0f6b7ec7f758c4ef445e49f479e27fa2236 upstream.

When operating in 1-bit mode, SDAT1 is used as dedicated interrupt line.
However, the 8686 will only drive this line when the ECSI bit is set in
the CCCR_IF register.

Thanks to Alagu Sankar for pointing me in the right direction.

Signed-off-by: Daniel Mack <daniel@caiaq.de>
Cc: Alagu Sankar <alagusankar@embwise.com>
Cc: Volker Ernst <volker.ernst@txtr.com>
Cc: Dan Williams <dcbw@redhat.com>
Cc: John W. Linville <linville@tuxdriver.com>
Cc: Holger Schurig <hs4233@mail.mn-solutions.de>
Cc: Bing Zhao <bzhao@marvell.com>
Cc: libertas-dev@lists.infradead.org
Cc: linux-wireless@vger.kernel.org
Cc: linux-mmc@vger.kernel.org
Acked-by: Dan Williams <dcbw@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/net/wireless/libertas/if_sdio.c |   22 ++++++++++++++++++++++
 include/linux/mmc/sdio.h                |    2 ++
 2 files changed, 24 insertions(+)

--- a/drivers/net/wireless/libertas/if_sdio.c
+++ b/drivers/net/wireless/libertas/if_sdio.c
@@ -34,6 +34,8 @@
 #include <linux/mmc/card.h>
 #include <linux/mmc/sdio_func.h>
 #include <linux/mmc/sdio_ids.h>
+#include <linux/mmc/sdio.h>
+#include <linux/mmc/host.h>
 
 #include "host.h"
 #include "decl.h"
@@ -883,6 +885,7 @@ static int if_sdio_probe(struct sdio_fun
 	int ret, i;
 	unsigned int model;
 	struct if_sdio_packet *packet;
+	struct mmc_host *host = func->card->host;
 
 	lbs_deb_enter(LBS_DEB_SDIO);
 
@@ -963,6 +966,25 @@ static int if_sdio_probe(struct sdio_fun
 	if (ret)
 		goto disable;
 
+	/* For 1-bit transfers to the 8686 model, we need to enable the
+	 * interrupt flag in the CCCR register. Set the MMC_QUIRK_LENIENT_FN0
+	 * bit to allow access to non-vendor registers. */
+	if ((card->model == IF_SDIO_MODEL_8686) &&
+	    (host->caps & MMC_CAP_SDIO_IRQ) &&
+	    (host->ios.bus_width == MMC_BUS_WIDTH_1)) {
+		u8 reg;
+
+		func->card->quirks |= MMC_QUIRK_LENIENT_FN0;
+		reg = sdio_f0_readb(func, SDIO_CCCR_IF, &ret);
+		if (ret)
+			goto release_int;
+
+		reg |= SDIO_BUS_ECSI;
+		sdio_f0_writeb(func, reg, SDIO_CCCR_IF, &ret);
+		if (ret)
+			goto release_int;
+	}
+
 	card->ioport = sdio_readb(func, IF_SDIO_IOPORT, &ret);
 	if (ret)
 		goto release_int;
--- a/include/linux/mmc/sdio.h
+++ b/include/linux/mmc/sdio.h
@@ -94,6 +94,8 @@
 
 #define  SDIO_BUS_WIDTH_1BIT	0x00
 #define  SDIO_BUS_WIDTH_4BIT	0x02
+#define  SDIO_BUS_ECSI		0x20	/* Enable continuous SPI interrupt */
+#define  SDIO_BUS_SCSI		0x40	/* Support continuous SPI interrupt */
 
 #define  SDIO_BUS_CD_DISABLE     0x80	/* disable pull-up on DAT3 (pin 1) */
 



^ permalink raw reply

* [SOLVED] Re: Bug report: Controller RESET (DMA error) long after connecting
From: Ferdinand Rau @ 2010-07-30 14:53 UTC (permalink / raw)
  To: linux-wireless
In-Reply-To: <20100413131108.GB6331@tuxdriver.com>

Hi,

just for future reference, here is my report:

 > Chances are that your device will work in PIO mode -- you can try
 > building a kernel w/ CONFIG_B43_FORCE_PIO.
I tried that and it solved the original problem. This wasn't very
helpful though, since subsequently I ran into the
"No probe response from AP" bug, probably similar to:
https://lists.berlios.de/pipermail/bcm43xx-dev/2010-January/006762.html

Therefore I finally made the switch to 2.6.34 which solved this issue,
too. Thanks a lot for your advice and keep up the good work!!!

Regards,
Ferdinand


^ permalink raw reply

* Re: [BUG] after starting wimaxd at boot iwlagn module will crash for intel 6250 card
From: Alexey Shvetsov @ 2010-07-30 14:48 UTC (permalink / raw)
  To: Inaky Perez-Gonzalez
  Cc: Dan Williams, linux-wireless@vger.kernel.org,
	wimax@linuxwimax.org
In-Reply-To: <1280348503.26204.357.camel@localhost.localdomain>

[-- Attachment #1: Type: text/plain, Size: 1745 bytes --]

Update with debug info on this bug
Log attached

2010/7/29 Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
>
> On Wed, 2010-07-28 at 14:14 -0700, Dan Williams wrote:
> ...
> > > ...
> > > kernel: iwlagn 0000:02:00.0: RF_KILL bit toggled to enable radio.
> > > NetworkManager: <info>  WiFi now disabled by radio killswitch
> > > kernel: i2400m_usb 2-1.3:1.0: 'RF Control' (0x4602) command failed: -84 - invalid state (3)
> > > NetworkManager: <info>  (wlan0): bringing up device.
> > > kernel: iwlagn 0000:02:00.0: Microcode SW error detected.  Restarting
> > > ...
> > >
> > > I say seemingly because I don't remember NetworkManager actually doing
> > > that on WiMAX devices, but I could be wrong, as they expose an RFKILL
> > > interface.
> >
> > NM doesn't do anything yet with wimax devices, though it'll look for
> > wimax killswitches.  But nothing is done with them yet upstream.
> >
> > So I guess my question here is whether Alexey is using a stock NM or a
> > distro-patched one.  Ubuntu used to patch NM to actually poke the rfkill
> > bits, not sure if they still do that or not.  Fedora does not, and I
> > don't think Novell/SUSE does either.
>
> Thanks for the clarification Dan, that eliminates a variable :)
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



--
Best Regards,
Alexey 'Alexxy' Shvetsov
Petersburg Nuclear Physics Institute, Russia
Department of Molecular and Radiation Biophysics
Gentoo Team Ru
Gentoo Linux Dev
mailto:alexxyum@gmail.com
mailto:alexxy@gentoo.org
mailto:alexxy@omrb.pnpi.spb.ru

[-- Attachment #2: wimax_debug.log --]
[-- Type: text/plain, Size: 69655 bytes --]

In console 

x201 ~ # modprobe i2400m debug='driver:8 control:3'
x201 ~ # modprobe i2400m-usb debug='usb:8' 

x201 ~ # wimaxcu info 
WiMAX Version Information
        HW Model Name:          Intel(R) Centrino(R) Advanced-N + WiMAX 6250
        WMF Compliance Version: 3.5.2
        SW Package Version:     v1.5
x201 ~ # wimaxcu ron 
ERROR: Turning the SW Radio ON unsuccessfull - Device is UnInitialized.
x201 ~ # wimaxcu ron 
ERROR: Turning the SW Radio ON unsuccessfull - Device is UnInitialized.
x201 ~ # wimaxcu ron 
ERROR: Turning the SW Radio ON unsuccessfull - Device is UnInitialized.
x201 ~ # 
x201 ~ # 
x201 ~ # 
x201 ~ # 
x201 ~ # wimaxcu ron 
ERROR: Turning the SW Radio ON unsuccessfull - Device is UnInitialized.
x201 ~ # 
x201 ~ # 
x201 ~ # 
x201 ~ # wimaxcu roff 
ERROR: Turning the SW Radion OFF unsuccessfull - Device is UnInitialized.
x201 ~ # wimaxcu ron 
ERROR: Turning the SW Radio ON unsuccessfull - Device is UnInitialized.
x201 ~ # wimaxcu scan 
ERROR: Device not Initialized


In systemlog

First i started wimaxd
Jul 30 15:53:31 x201 wimaxd: daemon starts
Jul 30 15:53:31 x201 wimaxd: pdifile is created
Jul 30 15:53:31 x201 wimaxd: wimaxd event: AppSrv is ready
Jul 30 15:53:31 x201 kernel: i2400m_usb 2-1.3:1.0: can't send message 0x5205: -108
Jul 30 15:53:32 x201 kernel: i2400m_usb 2-1.3:1.0: can't send message 0x5205: -108
Jul 30 15:53:33 x201 kernel: i2400m_usb 2-1.3:1.0: can't send message 0x5205: -108
Jul 30 15:53:34 x201 kernel: i2400m_usb 2-1.3:1.0: can't send message 0x5205: -108
Jul 30 15:53:35 x201 kernel: i2400m_usb 2-1.3:1.0: can't send message 0x5205: -108
Jul 30 15:53:36 x201 kernel: i2400m_usb 2-1.3:1.0: can't send message 0x5205: -108
Jul 30 15:53:37 x201 kernel: i2400m_usb 2-1.3:1.0: can't send message 0x5205: -108
Jul 30 15:53:38 x201 kernel: i2400m_usb 2-1.3:1.0: can't send message 0x5205: -108
Jul 30 15:53:39 x201 kernel: i2400m_usb 2-1.3:1.0: can't send message 0x5205: -108
Jul 30 15:53:40 x201 wimaxd: Waited too long for device to finish loading firmware (don't return -EL3RST to messages)
Jul 30 15:54:33 x201 wimaxd: daemon starts
Jul 30 15:54:33 x201 wimaxd: daemon is already running
Jul 30 15:55:14 x201 kernel: usbcore: deregistering interface driver i2400m_usb
Jul 30 15:55:14 x201 NetworkManager[4558]: <info> radio killswitch /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/rfkill/rfkill1 disappeared
Jul 30 15:55:15 x201 NetworkManager[4558]: <info> (wmx0): now unmanaged
Jul 30 15:55:15 x201 NetworkManager[4558]: <info> (wmx0): device state change: 2 -> 1 (reason 36)

then i reloaded drivers with debug and restsrted wimaxd

Jul 30 15:57:21 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_setup FNSTART: (i2400m ffff88000046f700)
Jul 30 15:57:21 x201 kernel: i2400m_usb 2-1.3:1.0: i2400mu_bus_reset FNSTART: (i2400m ffff88000046f700 rt 0)
Jul 30 15:57:21 x201 kernel: i2400m_usb 2-1.3:1.0: i2400mu_bus_reset FNEND: (i2400m ffff88000046f700 rt 0) = 0
Jul 30 15:57:21 x201 kernel: i2400m_usb 2-1.3:1.0: WiMAX interface wmx0 (00:1d:e1:2f:e1:78) ready
Jul 30 15:57:21 x201 kernel: i2400m_usb 2-1.3:1.0: __i2400m_dev_start FNSTART: (i2400m ffff88000046f700)
Jul 30 15:57:21 x201 NetworkManager[4558]: <info> found WiMAX radio killswitch rfkill5 (at /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/rfkill/rfkill5) 
(driver i24
00m_usb)
Jul 30 15:57:21 x201 kernel: i2400m_usb 2-1.3:1.0: i2400mu_bus_reset FNSTART: (i2400m ffff88000046f700 rt 0)
Jul 30 15:57:21 x201 kernel: i2400m_usb 2-1.3:1.0: i2400mu_bus_reset FNEND: (i2400m ffff88000046f700 rt 0) = 0
Jul 30 15:57:24 x201 kernel: i2400m_usb 2-1.3:1.0: i2400mu_bus_dev_start FNSTART: (i2400m ffff88000046f700)
Jul 30 15:57:24 x201 kernel: i2400m_usb 2-1.3:1.0: i2400mu_bus_dev_start FNEND: (i2400m ffff88000046f700) = 0
Jul 30 15:57:24 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880090cfe8c0 len 12)
Jul 30 15:57:24 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5201 12 bytes
Jul 30 15:57:24 x201 kernel: i2400m_usb 2-1.3:1.0: 01 52 00 00 00 01 00 00 00 00 00 00
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_hook FNSTART: (i2400m ffff88000046f700 l3l4_hdr ffff8800113ce060 size 36)
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_state_parse_tlv: REPORT STATE: system state TLV found (0x008d), state 0x0000000e
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_tlv_system_state FNSTART: (i2400m ffff88000046f700 ss ffff8800113ce074 [14])
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_tlv_system_state FNEND: (i2400m ffff88000046f700 ss ffff8800113ce074 [14]) = void
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_state_parse_tlv: REPORT STATE: RF status TLV found (0x00a3), sw 0x02 hw 0x01
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_hook FNEND: (i2400m ffff88000046f700 l3l4_hdr ffff8800113ce060 size 36) = void
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880090cfe8c0 len 12) = ffff88008bb9e100
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: firmware interface version 9.3.2
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_check_mac_addr FNSTART: (i2400m ffff88000046f700)
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff8800af3da320 len 12)
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5202 12 bytes
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: 02 52 00 00 00 01 00 00 00 00 00 00
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff8800af3da320 len 12) = ffff88008bb9e100
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_check_mac_addr: GET DEVICE INFO: mac addr 00:1d:e1:2f:e1:78
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_check_mac_addr FNEND: (i2400m ffff88000046f700) = 0
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_dev_initialize FNSTART: (i2400m ffff88000046f700)
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff8800af3da320 len 12)
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 00 01 00 00 00 00 00 00
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff8800af3da320 len 12) = ffff88008bb9e700
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_state_parse_tlv: GET STATE: system state TLV found (0x008d), state 0x0000000e
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_tlv_system_state FNSTART: (i2400m ffff88000046f700 ss ffff88003d484a2c [14])
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_tlv_system_state FNEND: (i2400m ffff88000046f700 ss ffff88003d484a2c [14]) = void
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_state_parse_tlv: GET STATE: RF status TLV found (0x00a3), sw 0x02 hw 0x02
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_dev_initialize FNEND: (i2400m ffff88000046f700) = 0
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: __i2400m_dev_start FNEND: (net_dev ffff88000046f000 [i2400m ffff88000046f700]) = 0
Jul 30 15:57:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_setup FNEND: (i2400m ffff88000046f700) = 0
Jul 30 15:57:25 x201 kernel: usbcore: registered new interface driver i2400m_usb
Jul 30 15:57:25 x201 NetworkManager[4558]: <info> (wmx0): carrier is OFF
Jul 30 15:57:25 x201 NetworkManager[4558]: <info> (wmx0): new Ethernet device (driver: 'i2400m_usb' ifindex: 6)
Jul 30 15:57:25 x201 NetworkManager[4558]: <info> (wmx0): exported as /org/freedesktop/NetworkManager/Devices/4
Jul 30 15:57:25 x201 NetworkManager[4558]: <info> (wmx0): now managed
Jul 30 15:57:25 x201 NetworkManager[4558]: <info> (wmx0): device state change: 1 -> 2 (reason 2)
Jul 30 15:57:25 x201 NetworkManager[4558]: <info> (wmx0): bringing up device.
Jul 30 15:57:25 x201 kernel: ADDRCONF(NETDEV_UP): wmx0: link is not ready
Jul 30 15:57:25 x201 NetworkManager[4558]: <info> (wmx0): preparing device.
Jul 30 15:57:25 x201 NetworkManager[4558]: <info> (wmx0): deactivating device (reason: 2).
Jul 30 15:57:25 x201 NetworkManager[4558]: <info> Added default wired connection 'Auto wmx0' for /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/net/wmx0
Jul 30 15:57:35 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_hook FNSTART: (i2400m ffff88000046f700 l3l4_hdr ffff8800113c8060 size 12)
Jul 30 15:57:35 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_hook: ready for powersave, requesting
Jul 30 15:57:35 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff88007c14ca80 len 20)
Jul 30 15:57:35 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5606 20 bytes
Jul 30 15:57:35 x201 kernel: i2400m_usb 2-1.3:1.0: 06 56 08 00 00 01 00 00 00 00 00 00 90 00 04 00
Jul 30 15:57:35 x201 kernel: i2400m_usb 2-1.3:1.0: 01 00 00 00
Jul 30 15:57:35 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff88007c14ca80 len 20) = ffff880098a10c00
Jul 30 15:57:35 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_cmd_enter_powersave: device ready to power save
Jul 30 15:57:35 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_hook FNEND: (i2400m ffff88000046f700 l3l4_hdr ffff8800113c8060 size 12) = void
Jul 30 15:57:39 x201 /etc/init.d/wimax[23959]: WARNING: wimax has already been started
Jul 30 15:57:43 x201 wimaxd: daemon starts
Jul 30 15:57:43 x201 wimaxd: pdifile is created
Jul 30 15:57:43 x201 wimaxd: wimaxd event: AppSrv is ready
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88003d485620 msg_len 
12 genl_info ffff88008ba31a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff88003d485620 len 12)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 00 01 00 00 00 00 00 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff88003d485620 len 12) = ffff880098a10300
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88003d485620 msg_len 12 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88003d485a20 msg_len 
17 genl_info ffff88008ba31a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff88003d485a20 len 17)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5605 17 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 05 56 05 00 00 01 00 00 00 00 00 00 02 40 01 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 01
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff88003d485a20 len 17) = ffff880098a10600
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88003d485a20 msg_len 17 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484820 msg_len 
12 genl_info ffff88008ba31a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077484820 len 12)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5201 12 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 01 52 00 00 00 01 00 00 00 00 00 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077484820 len 12) = ffff880098a10000
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484820 msg_len 12 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88003d484420 msg_len 
12 genl_info ffff88008ba31a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff88003d484420 len 12)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5201 12 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 01 52 00 00 00 01 00 00 00 00 00 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff88003d484420 len 12) = ffff880098a10200
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88003d484420 msg_len 12 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485820 msg_len 
12 genl_info ffff88008ba31a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077485820 len 12)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077485820 len 12) = ffff880098a10700
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485820 msg_len 12 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88003d484a20 msg_len 
12 genl_info ffff88008ba31a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff88003d484a20 len 12)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5202 12 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 02 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff88003d484a20 len 12) = ffff880098a10b00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88003d484a20 msg_len 12 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88003d484420 msg_len 
12 genl_info ffff88008ba31a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff88003d484420 len 12)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5202 12 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 02 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff88003d484420 len 12) = ffff880098a10900
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88003d484420 msg_len 12 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484420 msg_len 
20 genl_info ffff88008ba31a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077484420 len 20)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5403 20 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 03 54 08 00 42 02 00 00 00 00 d6 f5 a5 00 04 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 02 00 00 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077484420 len 20) = ffff880098a10a00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484420 msg_len 20 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88003d485a20 msg_len 
12 genl_info ffff88008ba31a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff88003d485a20 len 12)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 d6 f5
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff88003d485a20 len 12) = ffff8800a9920b00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88003d485a20 msg_len 12 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88004d050620 msg_len 
12 genl_info ffff88008ba31a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff88004d050620 len 12)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 d6 f5
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff88004d050620 len 12) = ffff8800ad3ff200
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88004d050620 msg_len 12 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800a3733420 msg_len 
100 genl_info ffff88008ba31a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff8800a3733420 len 100)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5404 100 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 04 54 58 00 42 02 00 00 00 00 00 00 63 02 04 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 70 17 00 00 64 02 04 00 00 04 00 00 65 02 04 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 10 27 00 00 5a 02 04 00 20 4e 00 00 5f 02 04 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 01 00 00 00 5c 02 04 00 00 00 00 00 5d 02 04 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 01 00 00 00 5e 02 04 00 01 00 00 00 60 02 04 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 01 00 00 00 66 02 04 00 01 00 00 00 67 02 04 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 01 00 00 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff8800a3733420 len 100) = ffff8800ad3ff900
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800a3733420 msg_len 100 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484220 msg_len 
12 genl_info ffff88008ba31a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077484220 len 12)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5601 12 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 01 56 00 00 42 02 00 00 00 00 00 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077484220 len 12) = ffff8800ad3ffb00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484220 msg_len 12 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88004d050a20 msg_len 
12 genl_info ffff88008ba31a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff88004d050a20 len 12)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff88004d050a20 len 12) = ffff8800b2260200
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88004d050a20 msg_len 12 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_hook FNSTART: (i2400m ffff88000046f700 l3l4_hdr ffff8800113c8060 size 36)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_state_parse_tlv: REPORT STATE: system state TLV found (0x008d), state 0x00000002
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_tlv_system_state FNSTART: (i2400m ffff88000046f700 ss ffff8800113c8074 [2])
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_tlv_system_state FNEND: (i2400m ffff88000046f700 ss ffff8800113c8074 [2]) = void
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_state_parse_tlv: REPORT STATE: RF status TLV found (0x00a3), sw 0x02 hw 0x01
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_hook FNEND: (i2400m ffff88000046f700 l3l4_hdr ffff8800113c8060 size 36) = void
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88004d050620 msg_len 
20 genl_info ffff88008b9e5a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff88004d050620 len 20)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5403 20 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 03 54 08 00 42 02 00 00 00 00 00 00 a5 00 04 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 02 00 00 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff88004d050620 len 20) = ffff8800747c6900
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff88004d050620 msg_len 20 
genl_info ffff88008b9e5a38) = 0
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485420 msg_len 
12 genl_info ffff88008b9e5a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077485420 len 12)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5202 12 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 02 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077485420 len 12) = ffff8800747c6000
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485420 msg_len 12 
genl_info ffff88008b9e5a38) = 0
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800b0d8de20 msg_len 
12 genl_info ffff88008b9e5a38)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff8800b0d8de20 len 12)
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5202 12 bytes
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: 02 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff8800b0d8de20 len 12) = ffff8800ad613800
Jul 30 15:57:43 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800b0d8de20 msg_len 12 
genl_info ffff88008b9e5a38) = 0
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484e20 msg_len 
12 genl_info ffff88008ba31a38)
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077484e20 len 12)
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 d6 f5
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077484e20 len 12) = ffff8800ad613d00
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484e20 msg_len 12 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484820 msg_len 
20 genl_info ffff88008ba31a38)
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077484820 len 20)
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5603 20 bytes
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: 03 56 08 00 ff ff 01 00 00 00 58 00 83 00 04 00
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: 02 00 00 00
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_hook FNSTART: (i2400m ffff88000046f700 l3l4_hdr ffff8800113ce060 size 36)
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_state_parse_tlv: REPORT STATE: system state TLV found (0x008d), state 0x0000000d
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_tlv_system_state FNSTART: (i2400m ffff88000046f700 ss ffff8800113ce074 [13])
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077484820 len 20) = ffff88009d66cb00
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484820 msg_len 20 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_tlv_system_state FNEND: (i2400m ffff88000046f700 ss ffff8800113ce074 [13]) = void
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_state_parse_tlv: REPORT STATE: RF status TLV found (0x00a3), sw 0x02 hw 0x01
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_report_hook FNEND: (i2400m ffff88000046f700 l3l4_hdr ffff8800113ce060 size 36) = void
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 
20 genl_info ffff88008b9e5a38)
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077485c20 len 20)
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5403 20 bytes
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: 03 54 08 00 42 02 00 00 00 00 00 00 a5 00 04 00
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: 02 00 00 00
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077485c20 len 20) = ffff880096166100
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 20 
genl_info ffff88008b9e5a38) = 0
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484820 msg_len 
12 genl_info ffff88008b9e5a38)
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077484820 len 12)
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5202 12 bytes
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: 02 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077484820 len 12) = ffff8800a6fd2a00
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484820 msg_len 12 
genl_info ffff88008b9e5a38) = 0
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 
12 genl_info ffff88008b9e5a38)
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077485c20 len 12)
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5202 12 bytes
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: 02 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077485c20 len 12) = ffff880096166500
Jul 30 15:57:44 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 12 
genl_info ffff88008b9e5a38) = 0
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800b0d97e20 msg_len 
12 genl_info ffff88008ba31a38)
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff8800b0d97e20 len 12)
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff8800b0d97e20 len 12) = ffff88008ab0ee00
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800b0d97e20 msg_len 12 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800b0d96420 msg_len 
12 genl_info ffff88008ba31a38)
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff8800b0d96420 len 12)
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff8800b0d96420 len 12) = ffff88008ab0e400
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800b0d96420 msg_len 12 
genl_info ffff88008ba31a38) = 0
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485820 msg_len 
12 genl_info ffff88008ba31a38)
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077485820 len 12)
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077485820 len 12) = ffff88008ab0ef00
Jul 30 15:57:45 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485820 msg_len 12 
genl_info ffff88008ba31a38) = 0
Jul 30 15:58:00 x201 kernel: i2400m_usb 2-1.3:1.0: i2400mu_suspend FNSTART: (iface ffff8800b1178000 pm_msg 1026)
Jul 30 15:58:00 x201 kernel: i2400m_usb 2-1.3:1.0: i2400mu_suspend: fw up: entering powersave
Jul 30 15:58:00 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff88007c14c140 len 20)
Jul 30 15:58:00 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5606 20 bytes
Jul 30 15:58:00 x201 kernel: i2400m_usb 2-1.3:1.0: 06 56 08 00 00 01 00 00 00 00 00 00 90 00 04 00
Jul 30 15:58:00 x201 kernel: i2400m_usb 2-1.3:1.0: 01 00 00 00
Jul 30 15:58:00 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff88007c14c140 len 20) = ffff8800a6c3d700
Jul 30 15:58:00 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_cmd_enter_powersave: Cannot enter power save mode
Jul 30 15:58:00 x201 kernel: i2400m_usb 2-1.3:1.0: i2400mu_suspend FNEND: (iface ffff8800b1178000 pm_msg 1026) = -13
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484220 msg_len 
12 genl_info ffff880080453a38)
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077484220 len 12)
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077484220 len 12) = ffff88009354dd00
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484220 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 
12 genl_info ffff880080453a38)
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077485c20 len 12)
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077485c20 len 12) = ffff88009354d000
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 
12 genl_info ffff880080453a38)
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077485c20 len 12)
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077485c20 len 12) = ffff88009354db00
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 
12 genl_info ffff880080453a38)
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077485c20 len 12)
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5202 12 bytes
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: 02 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077485c20 len 12) = ffff88009354d600
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484220 msg_len 
12 genl_info ffff880080453a38)
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077484220 len 12)
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5202 12 bytes
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: 02 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077484220 len 12) = ffff8800b12ca200
Jul 30 15:58:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484220 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880031384620 msg_len 
12 genl_info ffff880080453a38)
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880031384620 len 12)
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880031384620 len 12) = ffff8800a0f0ad00
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880031384620 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880031385620 msg_len 
12 genl_info ffff880080453a38)
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880031385620 len 12)
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880031385620 len 12) = ffff8800b351bb00
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880031385620 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484820 msg_len 
12 genl_info ffff880080453a38)
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077484820 len 12)
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077484820 len 12) = ffff8800a9920200
Jul 30 15:58:36 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484820 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 15:59:01 x201 cron[24038]: (root) CMD (rm -f /var/spool/cron/lastrun/cron.hourly)
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880031384a20 msg_len 
12 genl_info ffff880080453a38)
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880031384a20 len 12)
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880031384a20 len 12) = ffff8800731ff900
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880031384a20 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484420 msg_len 
12 genl_info ffff880080453a38)
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077484420 len 12)
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077484420 len 12) = ffff8800a0f0ab00
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484420 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 
12 genl_info ffff880080453a38)
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077485c20 len 12)
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077485c20 len 12) = ffff880098a10c00
Jul 30 15:59:20 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880031384020 msg_len 
12 genl_info ffff880080453a38)
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880031384020 len 12)
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880031384020 len 12) = ffff8800747c6600
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880031384020 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 
12 genl_info ffff880080453a38)
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077485c20 len 12)
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077485c20 len 12) = ffff8800ad613600
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484220 msg_len 
12 genl_info ffff880080453a38)
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077484220 len 12)
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077484220 len 12) = ffff88007545a200
Jul 30 15:59:23 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484220 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 16:00:01 x201 cron[24055]: (root) CMD (test -x /usr/sbin/run-crons && /usr/sbin/run-crons )
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 
12 genl_info ffff880080453a38)
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077485c20 len 12)
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077485c20 len 12) = ffff8800add8bb00
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485c20 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484e20 msg_len 
12 genl_info ffff880080453a38)
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077484e20 len 12)
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077484e20 len 12) = ffff8800add8ba00
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077484e20 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485420 msg_len 
12 genl_info ffff880080453a38)
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880077485420 len 12)
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880077485420 len 12) = ffff8800ad3ffc00
Jul 30 16:00:03 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880077485420 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 16:00:59 x201 su[24086]: Successful su for root by alexxy
Jul 30 16:00:59 x201 su[24086]: + /dev/pts/2 alexxy:root
Jul 30 16:00:59 x201 su[24086]: pam_unix(su:session): session opened for user root by alexxy(uid=1000)
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880073304620 msg_len 
12 genl_info ffff880080453a38)
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880073304620 len 12)
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880073304620 len 12) = ffff88008efe0500
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880073304620 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800a0e8ac20 msg_len 
12 genl_info ffff880080453a38)
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff8800a0e8ac20 len 12)
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff8800a0e8ac20 len 12) = ffff8800a0f0a900
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800a0e8ac20 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800a0e8b620 msg_len 
12 genl_info ffff880080453a38)
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff8800a0e8b620 len 12)
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff8800a0e8b620 len 12) = ffff88008abe8200
Jul 30 16:01:25 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800a0e8b620 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880073304820 msg_len 
12 genl_info ffff880080453a38)
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880073304820 len 12)
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880073304820 len 12) = ffff8800731ff000
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880073304820 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800a0e8b420 msg_len 
12 genl_info ffff880080453a38)
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff8800a0e8b420 len 12)
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff8800a0e8b420 len 12) = ffff88001f6d0a00
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800a0e8b420 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800a0e8b420 msg_len 
12 genl_info ffff880080453a38)
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff8800a0e8b420 len 12)
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff8800a0e8b420 len 12) = ffff8800730a1100
Jul 30 16:01:28 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800a0e8b420 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800502c4020 msg_len 
12 genl_info ffff880080453a38)
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff8800502c4020 len 12)
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff8800502c4020 len 12) = ffff8800a6c3d200
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800502c4020 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800502c4620 msg_len 
12 genl_info ffff880080453a38)
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff8800502c4620 len 12)
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff8800502c4620 len 12) = ffff880046e87e00
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff8800502c4620 msg_len 12 
genl_info ffff880080453a38) = 0
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNSTART: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880073305020 msg_len 
12 genl_info ffff880080453a38)
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff880073305020 len 12)
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x5205 12 bytes
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: 05 52 00 00 42 02 00 00 00 00 00 00
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff880073305020 len 12) = ffff8800a6c3fd00
Jul 30 16:01:34 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_op_msg_from_user FNEND: (wimax_dev ffff88000046f700 [i2400m ffff88000046f700] msg_buf ffff880073305020 msg_len 12 
genl_info ffff880080453a38) = 0


Then i disabled and enabled radio 

Jul 30 16:08:30 x201 kernel: iwlagn 0000:02:00.0: RF_KILL bit toggled to disable radio.
Jul 30 16:08:30 x201 NetworkManager[4558]: <info> WiFi now disabled by radio killswitch
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: RF_KILL bit toggled to enable radio.
Jul 30 16:08:38 x201 NetworkManager[4558]: <info> WiFi now disabled by radio killswitch
Jul 30 16:08:38 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNSTART: (i2400m ffff88000046f700 buf ffff8800113544c0 len 20)
Jul 30 16:08:38 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev: CMD/GET/SET 0x4602 20 bytes
Jul 30 16:08:38 x201 kernel: i2400m_usb 2-1.3:1.0: 02 46 08 00 00 01 00 00 00 00 00 00 a2 00 04 00
Jul 30 16:08:38 x201 kernel: i2400m_usb 2-1.3:1.0: 01 00 00 00
Jul 30 16:08:38 x201 kernel: i2400m_usb 2-1.3:1.0: i2400m_msg_to_dev FNEND: (i2400m ffff88000046f700 buf ffff8800113544c0 len 20) = ffff8800503e1000
Jul 30 16:08:38 x201 kernel: i2400m_usb 2-1.3:1.0: 'RF Control' (0x4602) command failed: -84 - invalid state (3)
Jul 30 16:08:38 x201 NetworkManager[4558]: <info> (wlan0): bringing up device.
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: Microcode SW error detected.  Restarting 0x2000000.
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: Loaded firmware version: 9.201.4.1 build 24255
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: Start IWL Error Log Dump:
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: Status: 0x00020224, count: 5
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: Desc                               Time       data1      data2      line
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: SYSASSERT                    (#05) 0000013122 0x0000008D 0x8000000D 453
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: pc      blink1  blink2  ilink1  ilink2  hcmd
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: 0x1EAB8 0x1EAA6 0x1EAA6 0x009D6 0x00000 0x400005A
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: CSR values:
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: (2nd byte of CSR_INT_COALESCING is CSR_INT_PERIODIC_REG)
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:        CSR_HW_IF_CONFIG_REG: 0X00480303
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:          CSR_INT_COALESCING: 0X0000ff40
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:                     CSR_INT: 0X00000000
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:                CSR_INT_MASK: 0X00000000
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:           CSR_FH_INT_STATUS: 0X00000000
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:                 CSR_GPIO_IN: 0X0000000f
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:                   CSR_RESET: 0X00000000
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:                CSR_GP_CNTRL: 0X080403c5
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:                  CSR_HW_REV: 0X00000084
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:              CSR_EEPROM_REG: 0Xe0a20ffd
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:               CSR_EEPROM_GP: 0X90000801
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:              CSR_OTP_GP_REG: 0X00030001
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:                 CSR_GIO_REG: 0X00080046
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:            CSR_GP_UCODE_REG: 0X00000002
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:           CSR_GP_DRIVER_REG: 0X00000004
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:           CSR_UCODE_DRV_GP1: 0X00000000
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:           CSR_UCODE_DRV_GP2: 0X00000000
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:                 CSR_LED_REG: 0X00000018
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:        CSR_DRAM_INT_TBL_REG: 0X880ffffe
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:        CSR_GIO_CHICKEN_BITS: 0X27800200
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:             CSR_ANA_PLL_CFG: 0X00000000
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:           CSR_HW_REV_WA_REG: 0X0001001a
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:        CSR_DBG_HPET_MEM_REG: 0Xffff0000
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: FH register values:
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:         FH_RSCSR_CHNL0_STTS_WPTR_REG: 0X0ffede00
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:        FH_RSCSR_CHNL0_RBDCB_BASE_REG: 0X00ffedf0
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:                  FH_RSCSR_CHNL0_WPTR: 0X00000000
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:         FH_MEM_RCSR_CHNL0_CONFIG_REG: 0X80819104
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:          FH_MEM_RSSR_SHARED_CTRL_REG: 0X000000fc
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:            FH_MEM_RSSR_RX_STATUS_REG: 0X07030000
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:    FH_MEM_RSSR_RX_ENABLE_ERR_IRQ2DRV: 0X00000000
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:                FH_TSSR_TX_STATUS_REG: 0X07ff0001
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0:                 FH_TSSR_TX_ERROR_REG: 0X00000000
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: Start IWL Event Log Dump: display last 20 entries
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000005632:0x000000ff:1100
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000005633:0x000000ff:1100
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000005634:0x000000ff:1100
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000005635:0x000000ff:1100
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000005636:0x000000ff:1100
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000005637:0x000000ff:1100
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000005638:0x000000ff:1100
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000005638:0x000000ff:1100
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000005639:0x000000ff:1100
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000005640:0x000000ff:1100
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000005640:0x000000ff:1100
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000005651:0x000003b1:0601
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000005651:0x10000000:0600
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000005652:0x000003c1:0660
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000005655:0x00000000:0661
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000013014:0x0400005a:0401
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000013015:0x0400005a:1513
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000013015:0x00000000:1513
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000013017:0x00000001:1523
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: EVT_LOGT:0000013131:0x00000000:0125
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: Command REPLY_PHY_CALIBRATION_CMD failed: FW Error
Jul 30 16:08:38 x201 kernel: iwlagn 0000:02:00.0: Error -5 iteration 0
Jul 30 16:08:38 x201 kernel: usb 1-1.4: new full speed USB device using ehci_hcd and address 8
Jul 30 16:08:39 x201 kernel: iwlagn 0000:02:00.0: Error sending TX_ANT_CONFIGURATION_CMD: time out after 500ms.
Jul 30 16:08:39 x201 bluetoothd[24199]: Bluetooth deamon 4.69
Jul 30 16:08:39 x201 bluetoothd[24200]: Starting SDP server
Jul 30 16:08:39 x201 bluetoothd[24200]: Starting experimental netlink support
Jul 30 16:08:39 x201 bluetoothd[24200]: Failed to find Bluetooth netlink family
Jul 30 16:08:39 x201 bluetoothd[24200]: Failed to init netlink plugin
Jul 30 16:08:39 x201 bluetoothd[24200]: HCI dev 0 registered
Jul 30 16:08:39 x201 bluetoothd[24200]: HCI dev 0 up
Jul 30 16:08:39 x201 bluetoothd[24200]: Starting security manager 0
Jul 30 16:08:39 x201 bluetoothd[24200]: ioctl(HCIUNBLOCKADDR): Invalid argument (22)
Jul 30 16:08:39 x201 bluetoothd[24200]: Adapter /org/bluez/24199/hci0 has been enabled
Jul 30 16:08:39 x201 kernel: iwlagn 0000:02:00.0: Error sending REPLY_BT_CONFIG: time out after 500ms.
Jul 30 16:08:39 x201 kernel: iwlagn 0000:02:00.0: failed to send BT Coex Config
Jul 30 16:08:40 x201 kernel: iwlagn 0000:02:00.0: Error sending REPLY_RXON: time out after 500ms.
Jul 30 16:08:40 x201 kernel: iwlagn 0000:02:00.0: Error setting new RXON (-110)
Jul 30 16:08:40 x201 kernel: iwlagn 0000:02:00.0: Error sending REPLY_CT_KILL_CONFIG_CMD: time out after 500ms.
Jul 30 16:08:40 x201 kernel: iwlagn 0000:02:00.0: REPLY_CT_KILL_CONFIG_CMD failed
Jul 30 16:08:40 x201 kernel: iwlagn 0000:02:00.0: queue 4 stuck 3 time. Fw reload.
Jul 30 16:08:40 x201 kernel: iwlagn 0000:02:00.0: On demand firmware reload
Jul 30 16:08:41 x201 kernel: iwlagn 0000:02:00.0: Error sending POWER_TABLE_CMD: time out after 500ms.
Jul 30 16:08:41 x201 kernel: iwlagn 0000:02:00.0: set power fail, ret = -110
Jul 30 16:08:41 x201 kernel: ------------[ cut here ]------------
Jul 30 16:08:41 x201 kernel: WARNING: at drivers/net/wireless/iwlwifi/iwl-core.c:2068 iwl_mac_add_interface+0x127/0x150 [iwlcore]()
Jul 30 16:08:41 x201 kernel: Hardware name: 3626W6E
Jul 30 16:08:41 x201 kernel: Modules linked in: i2400m_usb i2400m sco bnep btusb ppp_deflate bsd_comp ppp_async ppp_generic slhc ipv6 rfcomm l2cap bluetooth ipt_MASQUERADE 
iptable_nat nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 iptable_filter ipt_addrtype xt_DSCP xt_dscp xt_string xt_NFQUEUE xt_multiport xt_mark xt_hashlimit xt_conntrack 
xt_connmark nf_conntrack ip_tables x_tables tp_smapi hdaps thinkpad_ec iwlagn iwlcore mac80211 option usb_wwan cfg80211 wimax usbserial thinkpad_acpi rfkill joydev uvcvideo 
i2c_i801 led_class nfs lockd sunrpc scsi_wait_scan usb_storage [last unloaded: i2400m]
Jul 30 16:08:41 x201 kernel: Pid: 4558, comm: NetworkManager Not tainted 2.6.35-rc6-tuxonice #2
Jul 30 16:08:41 x201 kernel: Call Trace:
Jul 30 16:08:41 x201 kernel: [<ffffffff8107737a>] warn_slowpath_common+0x7a/0xb0
Jul 30 16:08:41 x201 kernel: [<ffffffff810773c5>] warn_slowpath_null+0x15/0x20
Jul 30 16:08:41 x201 kernel: [<ffffffffa0242077>] iwl_mac_add_interface+0x127/0x150 [iwlcore]
Jul 30 16:08:41 x201 kernel: [<ffffffffa01fe831>] ieee80211_open+0x271/0x840 [mac80211]
Jul 30 16:08:41 x201 kernel: [<ffffffff815660b7>] __dev_open+0x97/0xe0
Jul 30 16:08:41 x201 kernel: [<ffffffff815638cc>] __dev_change_flags+0x9c/0x180
Jul 30 16:08:41 x201 kernel: [<ffffffff81565fd3>] dev_change_flags+0x23/0x70
Jul 30 16:08:41 x201 kernel: [<ffffffff81572974>] do_setlink+0x1e4/0x840
Jul 30 16:08:41 x201 kernel: [<ffffffff8106f7c1>] ? get_parent_ip+0x11/0x50
Jul 30 16:08:41 x201 kernel: [<ffffffff812c0a24>] ? nla_parse+0x34/0x110
Jul 30 16:08:41 x201 kernel: [<ffffffff815730ee>] rtnl_setlink+0x11e/0x170
Jul 30 16:08:41 x201 kernel: [<ffffffff81573a63>] rtnetlink_rcv_msg+0x163/0x270
Jul 30 16:08:41 x201 kernel: [<ffffffff81573900>] ? rtnetlink_rcv_msg+0x0/0x270
Jul 30 16:08:41 x201 kernel: [<ffffffff81585b61>] netlink_rcv_skb+0xa1/0xd0
Jul 30 16:08:41 x201 kernel: [<ffffffff815738f0>] rtnetlink_rcv+0x20/0x30
Jul 30 16:08:41 x201 kernel: [<ffffffff815857a2>] netlink_unicast+0x2b2/0x2f0
Jul 30 16:08:41 x201 kernel: [<ffffffff815860c0>] netlink_sendmsg+0x1e0/0x2e0
Jul 30 16:08:41 x201 kernel: [<ffffffff81552184>] sock_sendmsg+0xe4/0x110
Jul 30 16:08:41 x201 kernel: [<ffffffff81552184>] ? sock_sendmsg+0xe4/0x110
Jul 30 16:08:41 x201 kernel: [<ffffffff812abbea>] ? radix_tree_delete+0x14a/0x2d0
Jul 30 16:08:41 x201 kernel: [<ffffffff8155439d>] ? move_addr_to_kernel+0x5d/0x60
Jul 30 16:08:41 x201 kernel: [<ffffffff8155d77c>] ? verify_iovec+0x6c/0xd0
Jul 30 16:08:41 x201 kernel: [<ffffffff81552710>] sys_sendmsg+0x220/0x380
Jul 30 16:08:41 x201 kernel: [<ffffffff81144d5d>] ? fget_light+0x9d/0xb0
Jul 30 16:08:41 x201 kernel: [<ffffffff81554513>] ? sys_sendto+0x173/0x180
Jul 30 16:08:41 x201 kernel: [<ffffffff81144d5d>] ? fget_light+0x9d/0xb0
Jul 30 16:08:41 x201 kernel: [<ffffffff81553d79>] ? sys_recvmsg+0x69/0x80
Jul 30 16:08:41 x201 kernel: [<ffffffff8102bdab>] system_call_fastpath+0x16/0x1b
Jul 30 16:08:41 x201 kernel: ---[ end trace 8c8da345fd5d319b ]---


^ permalink raw reply

* [PATCH] mac80211: unify scan and work mutexes
From: Johannes Berg @ 2010-07-30 14:46 UTC (permalink / raw)
  To: linux-wireless

From: Johannes Berg <johannes.berg@intel.com>

Having both scan and work mutexes is not just
a bit too fine grained, it also creates issues
when there's code that needs both since they
then need to be acquired in the right order,
which can be hard to do.

Therefore, use just a single mutex for both.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
 net/mac80211/ieee80211_i.h |    4 ++--
 net/mac80211/main.c        |    4 ++--
 net/mac80211/mlme.c        |    8 ++++----
 net/mac80211/scan.c        |   30 +++++++++++++++---------------
 net/mac80211/work.c        |   35 +++++++++++++++--------------------
 5 files changed, 38 insertions(+), 43 deletions(-)

--- wireless-testing.orig/net/mac80211/ieee80211_i.h	2010-07-30 16:28:07.000000000 +0200
+++ wireless-testing/net/mac80211/ieee80211_i.h	2010-07-30 16:39:06.000000000 +0200
@@ -634,7 +634,6 @@ struct ieee80211_local {
 	/*
 	 * work stuff, potentially off-channel (in the future)
 	 */
-	struct mutex work_mtx;
 	struct list_head work_list;
 	struct timer_list work_timer;
 	struct work_struct work_work;
@@ -746,9 +745,10 @@ struct ieee80211_local {
 	 */
 	struct mutex key_mtx;
 
+	/* mutex for scan and work locking */
+	struct mutex mtx;
 
 	/* Scanning and BSS list */
-	struct mutex scan_mtx;
 	unsigned long scanning;
 	struct cfg80211_ssid scan_ssid;
 	struct cfg80211_scan_request *int_scan_req;
--- wireless-testing.orig/net/mac80211/main.c	2010-07-30 16:28:07.000000000 +0200
+++ wireless-testing/net/mac80211/main.c	2010-07-30 16:28:38.000000000 +0200
@@ -455,7 +455,7 @@ struct ieee80211_hw *ieee80211_alloc_hw(
 	__hw_addr_init(&local->mc_list);
 
 	mutex_init(&local->iflist_mtx);
-	mutex_init(&local->scan_mtx);
+	mutex_init(&local->mtx);
 
 	mutex_init(&local->key_mtx);
 	spin_lock_init(&local->filter_lock);
@@ -756,7 +756,7 @@ void ieee80211_free_hw(struct ieee80211_
 	struct ieee80211_local *local = hw_to_local(hw);
 
 	mutex_destroy(&local->iflist_mtx);
-	mutex_destroy(&local->scan_mtx);
+	mutex_destroy(&local->mtx);
 
 	wiphy_free(local->hw.wiphy);
 }
--- wireless-testing.orig/net/mac80211/mlme.c	2010-07-30 16:28:07.000000000 +0200
+++ wireless-testing/net/mac80211/mlme.c	2010-07-30 16:28:38.000000000 +0200
@@ -1751,7 +1751,7 @@ void ieee80211_sta_rx_queued_mgmt(struct
 		struct ieee80211_local *local = sdata->local;
 		struct ieee80211_work *wk;
 
-		mutex_lock(&local->work_mtx);
+		mutex_lock(&local->mtx);
 		list_for_each_entry(wk, &local->work_list, list) {
 			if (wk->sdata != sdata)
 				continue;
@@ -1783,7 +1783,7 @@ void ieee80211_sta_rx_queued_mgmt(struct
 			free_work(wk);
 			break;
 		}
-		mutex_unlock(&local->work_mtx);
+		mutex_unlock(&local->mtx);
 
 		cfg80211_send_deauth(sdata->dev, (u8 *)mgmt, skb->len);
 	}
@@ -2275,7 +2275,7 @@ int ieee80211_mgd_deauth(struct ieee8021
 
 		mutex_unlock(&ifmgd->mtx);
 
-		mutex_lock(&local->work_mtx);
+		mutex_lock(&local->mtx);
 		list_for_each_entry(wk, &local->work_list, list) {
 			if (wk->sdata != sdata)
 				continue;
@@ -2294,7 +2294,7 @@ int ieee80211_mgd_deauth(struct ieee8021
 			free_work(wk);
 			break;
 		}
-		mutex_unlock(&local->work_mtx);
+		mutex_unlock(&local->mtx);
 
 		/*
 		 * If somebody requests authentication and we haven't
--- wireless-testing.orig/net/mac80211/scan.c	2010-07-30 16:28:07.000000000 +0200
+++ wireless-testing/net/mac80211/scan.c	2010-07-30 16:39:06.000000000 +0200
@@ -256,7 +256,7 @@ void ieee80211_scan_completed(struct iee
 
 	trace_api_scan_completed(local, aborted);
 
-	mutex_lock(&local->scan_mtx);
+	mutex_lock(&local->mtx);
 
 	/*
 	 * It's ok to abort a not-yet-running scan (that
@@ -268,7 +268,7 @@ void ieee80211_scan_completed(struct iee
 		aborted = true;
 
 	if (WARN_ON(!local->scan_req)) {
-		mutex_unlock(&local->scan_mtx);
+		mutex_unlock(&local->mtx);
 		return;
 	}
 
@@ -276,7 +276,7 @@ void ieee80211_scan_completed(struct iee
 	if (was_hw_scan && !aborted && ieee80211_prep_hw_scan(local)) {
 		ieee80211_queue_delayed_work(&local->hw,
 					     &local->scan_work, 0);
-		mutex_unlock(&local->scan_mtx);
+		mutex_unlock(&local->mtx);
 		return;
 	}
 
@@ -292,7 +292,7 @@ void ieee80211_scan_completed(struct iee
 	local->scan_channel = NULL;
 
 	/* we only have to protect scan_req and hw/sw scan */
-	mutex_unlock(&local->scan_mtx);
+	mutex_unlock(&local->mtx);
 
 	ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
 	if (was_hw_scan)
@@ -640,15 +640,15 @@ void ieee80211_scan_work(struct work_str
 	struct ieee80211_sub_if_data *sdata = local->scan_sdata;
 	unsigned long next_delay = 0;
 
-	mutex_lock(&local->scan_mtx);
+	mutex_lock(&local->mtx);
 	if (!sdata || !local->scan_req) {
-		mutex_unlock(&local->scan_mtx);
+		mutex_unlock(&local->mtx);
 		return;
 	}
 
 	if (local->hw_scan_req) {
 		int rc = drv_hw_scan(local, sdata, local->hw_scan_req);
-		mutex_unlock(&local->scan_mtx);
+		mutex_unlock(&local->mtx);
 		if (rc)
 			ieee80211_scan_completed(&local->hw, true);
 		return;
@@ -662,14 +662,14 @@ void ieee80211_scan_work(struct work_str
 		local->scan_sdata = NULL;
 
 		rc = __ieee80211_start_scan(sdata, req);
-		mutex_unlock(&local->scan_mtx);
+		mutex_unlock(&local->mtx);
 
 		if (rc)
 			ieee80211_scan_completed(&local->hw, true);
 		return;
 	}
 
-	mutex_unlock(&local->scan_mtx);
+	mutex_unlock(&local->mtx);
 
 	/*
 	 * Avoid re-scheduling when the sdata is going away.
@@ -712,9 +712,9 @@ int ieee80211_request_scan(struct ieee80
 {
 	int res;
 
-	mutex_lock(&sdata->local->scan_mtx);
+	mutex_lock(&sdata->local->mtx);
 	res = __ieee80211_start_scan(sdata, req);
-	mutex_unlock(&sdata->local->scan_mtx);
+	mutex_unlock(&sdata->local->mtx);
 
 	return res;
 }
@@ -727,7 +727,7 @@ int ieee80211_request_internal_scan(stru
 	int ret = -EBUSY;
 	enum ieee80211_band band;
 
-	mutex_lock(&local->scan_mtx);
+	mutex_lock(&local->mtx);
 
 	/* busy scanning */
 	if (local->scan_req)
@@ -762,7 +762,7 @@ int ieee80211_request_internal_scan(stru
 
 	ret = __ieee80211_start_scan(sdata, sdata->local->int_scan_req);
  unlock:
-	mutex_unlock(&local->scan_mtx);
+	mutex_unlock(&local->mtx);
 	return ret;
 }
 
@@ -776,10 +776,10 @@ void ieee80211_scan_cancel(struct ieee80
 	 * Only call this function when a scan can't be
 	 * queued -- mostly at suspend under RTNL.
 	 */
-	mutex_lock(&local->scan_mtx);
+	mutex_lock(&local->mtx);
 	abortscan = test_bit(SCAN_SW_SCANNING, &local->scanning) ||
 		    (!local->scanning && local->scan_req);
-	mutex_unlock(&local->scan_mtx);
+	mutex_unlock(&local->mtx);
 
 	if (abortscan)
 		ieee80211_scan_completed(&local->hw, true);
--- wireless-testing.orig/net/mac80211/work.c	2010-07-30 16:28:07.000000000 +0200
+++ wireless-testing/net/mac80211/work.c	2010-07-30 16:39:06.000000000 +0200
@@ -43,7 +43,7 @@ enum work_action {
 /* utils */
 static inline void ASSERT_WORK_MTX(struct ieee80211_local *local)
 {
-	WARN_ON(!mutex_is_locked(&local->work_mtx));
+	lockdep_assert_held(&local->mtx);
 }
 
 /*
@@ -757,7 +757,7 @@ static void ieee80211_work_rx_queued_mgm
 	mgmt = (struct ieee80211_mgmt *) skb->data;
 	fc = le16_to_cpu(mgmt->frame_control);
 
-	mutex_lock(&local->work_mtx);
+	mutex_lock(&local->mtx);
 
 	list_for_each_entry(wk, &local->work_list, list) {
 		const u8 *bssid = NULL;
@@ -833,7 +833,7 @@ static void ieee80211_work_rx_queued_mgm
 		WARN(1, "unexpected: %d", rma);
 	}
 
-	mutex_unlock(&local->work_mtx);
+	mutex_unlock(&local->mtx);
 
 	if (rma != WORK_ACT_DONE)
 		goto out;
@@ -845,9 +845,9 @@ static void ieee80211_work_rx_queued_mgm
 	case WORK_DONE_REQUEUE:
 		synchronize_rcu();
 		wk->started = false; /* restart */
-		mutex_lock(&local->work_mtx);
+		mutex_lock(&local->mtx);
 		list_add_tail(&wk->list, &local->work_list);
-		mutex_unlock(&local->work_mtx);
+		mutex_unlock(&local->mtx);
 	}
 
  out:
@@ -890,7 +890,7 @@ static void ieee80211_work_work(struct w
 
 	ieee80211_recalc_idle(local);
 
-	mutex_lock(&local->work_mtx);
+	mutex_lock(&local->mtx);
 
 	list_for_each_entry_safe(wk, tmp, &local->work_list, list) {
 		bool started = wk->started;
@@ -995,17 +995,13 @@ static void ieee80211_work_work(struct w
 		run_again(local, jiffies + HZ/2);
 	}
 
-	mutex_lock(&local->scan_mtx);
-
 	if (list_empty(&local->work_list) && local->scan_req &&
 	    !local->scanning)
 		ieee80211_queue_delayed_work(&local->hw,
 					     &local->scan_work,
 					     round_jiffies_relative(0));
 
-	mutex_unlock(&local->scan_mtx);
-
-	mutex_unlock(&local->work_mtx);
+	mutex_unlock(&local->mtx);
 
 	ieee80211_recalc_idle(local);
 
@@ -1035,16 +1031,15 @@ void ieee80211_add_work(struct ieee80211
 	wk->started = false;
 
 	local = wk->sdata->local;
-	mutex_lock(&local->work_mtx);
+	mutex_lock(&local->mtx);
 	list_add_tail(&wk->list, &local->work_list);
-	mutex_unlock(&local->work_mtx);
+	mutex_unlock(&local->mtx);
 
 	ieee80211_queue_work(&local->hw, &local->work_work);
 }
 
 void ieee80211_work_init(struct ieee80211_local *local)
 {
-	mutex_init(&local->work_mtx);
 	INIT_LIST_HEAD(&local->work_list);
 	setup_timer(&local->work_timer, ieee80211_work_timer,
 		    (unsigned long)local);
@@ -1057,7 +1052,7 @@ void ieee80211_work_purge(struct ieee802
 	struct ieee80211_local *local = sdata->local;
 	struct ieee80211_work *wk;
 
-	mutex_lock(&local->work_mtx);
+	mutex_lock(&local->mtx);
 	list_for_each_entry(wk, &local->work_list, list) {
 		if (wk->sdata != sdata)
 			continue;
@@ -1065,19 +1060,19 @@ void ieee80211_work_purge(struct ieee802
 		wk->started = true;
 		wk->timeout = jiffies;
 	}
-	mutex_unlock(&local->work_mtx);
+	mutex_unlock(&local->mtx);
 
 	/* run cleanups etc. */
 	ieee80211_work_work(&local->work_work);
 
-	mutex_lock(&local->work_mtx);
+	mutex_lock(&local->mtx);
 	list_for_each_entry(wk, &local->work_list, list) {
 		if (wk->sdata != sdata)
 			continue;
 		WARN_ON(1);
 		break;
 	}
-	mutex_unlock(&local->work_mtx);
+	mutex_unlock(&local->mtx);
 }
 
 ieee80211_rx_result ieee80211_work_rx_mgmt(struct ieee80211_sub_if_data *sdata,
@@ -1163,7 +1158,7 @@ int ieee80211_wk_cancel_remain_on_channe
 	struct ieee80211_work *wk, *tmp;
 	bool found = false;
 
-	mutex_lock(&local->work_mtx);
+	mutex_lock(&local->mtx);
 	list_for_each_entry_safe(wk, tmp, &local->work_list, list) {
 		if ((unsigned long) wk == cookie) {
 			wk->timeout = jiffies;
@@ -1171,7 +1166,7 @@ int ieee80211_wk_cancel_remain_on_channe
 			break;
 		}
 	}
-	mutex_unlock(&local->work_mtx);
+	mutex_unlock(&local->mtx);
 
 	if (!found)
 		return -ENOENT;



^ permalink raw reply

* [PATCH -next] iwlwifi: make scan workqueue functions static
From: Stanislaw Gruszka @ 2010-07-30 14:41 UTC (permalink / raw)
  To: John W. Linville, Wey-Yi Guy, Reinette Chatre; +Cc: linux-wireless

We do not need export iwl_bg.*scan.*() functions just for initialize
workqueue in other module. Making that functions static helps with
iwl-scan.c code review a bit.

Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
 drivers/net/wireless/iwlwifi/iwl-core.h     |    4 ----
 drivers/net/wireless/iwlwifi/iwl-scan.c     |   12 ++++--------
 drivers/net/wireless/iwlwifi/iwl3945-base.c |    6 ++----
 3 files changed, 6 insertions(+), 16 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
index e9d23f2..fe8f704 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.h
+++ b/drivers/net/wireless/iwlwifi/iwl-core.h
@@ -528,7 +528,6 @@ int iwl_scan_cancel_timeout(struct iwl_priv *priv, unsigned long ms);
 int iwl_mac_hw_scan(struct ieee80211_hw *hw,
 		    struct ieee80211_vif *vif,
 		    struct cfg80211_scan_request *req);
-void iwl_bg_start_internal_scan(struct work_struct *work);
 void iwl_internal_short_hw_scan(struct iwl_priv *priv);
 int iwl_force_reset(struct iwl_priv *priv, int mode, bool external);
 u16 iwl_fill_probe_req(struct iwl_priv *priv, struct ieee80211_mgmt *frame,
@@ -540,9 +539,6 @@ u16 iwl_get_active_dwell_time(struct iwl_priv *priv,
 u16 iwl_get_passive_dwell_time(struct iwl_priv *priv,
 			       enum ieee80211_band band,
 			       struct ieee80211_vif *vif);
-void iwl_bg_scan_check(struct work_struct *data);
-void iwl_bg_abort_scan(struct work_struct *work);
-void iwl_bg_scan_completed(struct work_struct *work);
 void iwl_setup_scan_deferred_work(struct iwl_priv *priv);
 
 /* For faster active scanning, scan will move to the next channel if fewer than
diff --git a/drivers/net/wireless/iwlwifi/iwl-scan.c b/drivers/net/wireless/iwlwifi/iwl-scan.c
index b0c6b04..247e4c3 100644
--- a/drivers/net/wireless/iwlwifi/iwl-scan.c
+++ b/drivers/net/wireless/iwlwifi/iwl-scan.c
@@ -378,7 +378,7 @@ void iwl_internal_short_hw_scan(struct iwl_priv *priv)
 	queue_work(priv->workqueue, &priv->start_internal_scan);
 }
 
-void iwl_bg_start_internal_scan(struct work_struct *work)
+static void iwl_bg_start_internal_scan(struct work_struct *work)
 {
 	struct iwl_priv *priv =
 		container_of(work, struct iwl_priv, start_internal_scan);
@@ -418,9 +418,8 @@ void iwl_bg_start_internal_scan(struct work_struct *work)
  unlock:
 	mutex_unlock(&priv->mutex);
 }
-EXPORT_SYMBOL(iwl_bg_start_internal_scan);
 
-void iwl_bg_scan_check(struct work_struct *data)
+static void iwl_bg_scan_check(struct work_struct *data)
 {
 	struct iwl_priv *priv =
 	    container_of(data, struct iwl_priv, scan_check.work);
@@ -439,7 +438,6 @@ void iwl_bg_scan_check(struct work_struct *data)
 	}
 	mutex_unlock(&priv->mutex);
 }
-EXPORT_SYMBOL(iwl_bg_scan_check);
 
 /**
  * iwl_fill_probe_req - fill in all required fields and IE for probe request
@@ -489,7 +487,7 @@ u16 iwl_fill_probe_req(struct iwl_priv *priv, struct ieee80211_mgmt *frame,
 }
 EXPORT_SYMBOL(iwl_fill_probe_req);
 
-void iwl_bg_abort_scan(struct work_struct *work)
+static void iwl_bg_abort_scan(struct work_struct *work)
 {
 	struct iwl_priv *priv = container_of(work, struct iwl_priv, abort_scan);
 
@@ -504,9 +502,8 @@ void iwl_bg_abort_scan(struct work_struct *work)
 		iwl_send_scan_abort(priv);
 	mutex_unlock(&priv->mutex);
 }
-EXPORT_SYMBOL(iwl_bg_abort_scan);
 
-void iwl_bg_scan_completed(struct work_struct *work)
+static void iwl_bg_scan_completed(struct work_struct *work)
 {
 	struct iwl_priv *priv =
 	    container_of(work, struct iwl_priv, scan_completed);
@@ -555,7 +552,6 @@ void iwl_bg_scan_completed(struct work_struct *work)
 	if (!internal)
 		ieee80211_scan_completed(priv->hw, false);
 }
-EXPORT_SYMBOL(iwl_bg_scan_completed);
 
 void iwl_setup_scan_deferred_work(struct iwl_priv *priv)
 {
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index d24eb47..f590753 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -3739,10 +3739,8 @@ static void iwl3945_setup_deferred_work(struct iwl_priv *priv)
 	INIT_DELAYED_WORK(&priv->init_alive_start, iwl3945_bg_init_alive_start);
 	INIT_DELAYED_WORK(&priv->alive_start, iwl3945_bg_alive_start);
 	INIT_DELAYED_WORK(&priv->_3945.rfkill_poll, iwl3945_rfkill_poll);
-	INIT_WORK(&priv->scan_completed, iwl_bg_scan_completed);
-	INIT_WORK(&priv->abort_scan, iwl_bg_abort_scan);
-	INIT_WORK(&priv->start_internal_scan, iwl_bg_start_internal_scan);
-	INIT_DELAYED_WORK(&priv->scan_check, iwl_bg_scan_check);
+
+	iwl_setup_scan_deferred_work(priv);
 
 	iwl3945_hw_setup_deferred_work(priv);
 
-- 
1.5.5.6


^ permalink raw reply related

* Re: [PATCH 0/2] hw scan fixes
From: Johannes Berg @ 2010-07-30 12:14 UTC (permalink / raw)
  To: John Linville; +Cc: wey-yi.w.guy, linux-wireless
In-Reply-To: <20100730113045.923567583@sipsolutions.net>

On Fri, 2010-07-30 at 13:30 +0200, Johannes Berg wrote:

> Technically these are 2.6.35 regressions, but
> I guess it's a little late?

Wait, no, only the iwlwifi one is a regression.

johannes


^ permalink raw reply

* [PATCH 2/2] mac80211: fix scan locking wrt. hw scan
From: Johannes Berg @ 2010-07-30 11:30 UTC (permalink / raw)
  To: John Linville; +Cc: wey-yi.w.guy, linux-wireless, Johannes Berg
In-Reply-To: <20100730113045.923567583@sipsolutions.net>

From: Johannes Berg <johannes.berg@intel.com>

Releasing the scan mutex while starting scans
can lead to unexpected things happening, so
we shouldn't do that. Fix that and hold the
mutex across the scan triggering.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
 net/mac80211/scan.c |   14 --------------
 1 file changed, 14 deletions(-)

--- wireless-testing.orig/net/mac80211/scan.c	2010-07-30 08:43:30.000000000 +0200
+++ wireless-testing/net/mac80211/scan.c	2010-07-30 08:43:38.000000000 +0200
@@ -401,19 +401,7 @@ static int __ieee80211_start_scan(struct
 	else
 		__set_bit(SCAN_SW_SCANNING, &local->scanning);
 
-	/*
-	 * Kicking off the scan need not be protected,
-	 * only the scan variable stuff, since now
-	 * local->scan_req is assigned and other callers
-	 * will abort their scan attempts.
-	 *
-	 * This avoids too many locking dependencies
-	 * so that the scan completed calls have more
-	 * locking freedom.
-	 */
-
 	ieee80211_recalc_idle(local);
-	mutex_unlock(&local->scan_mtx);
 
 	if (local->ops->hw_scan) {
 		WARN_ON(!ieee80211_prep_hw_scan(local));
@@ -421,8 +409,6 @@ static int __ieee80211_start_scan(struct
 	} else
 		rc = ieee80211_start_sw_scan(local);
 
-	mutex_lock(&local->scan_mtx);
-
 	if (rc) {
 		kfree(local->hw_scan_req);
 		local->hw_scan_req = NULL;



^ permalink raw reply

* [PATCH 0/2] hw scan fixes
From: Johannes Berg @ 2010-07-30 11:30 UTC (permalink / raw)
  To: John Linville; +Cc: wey-yi.w.guy, linux-wireless

I'm rolling these up because without the iwlwifi
fix I'm pretty sure we will also get lockdep
warnings even if the actual deadlock scenario
is rather unlikely to start with.

Technically these are 2.6.35 regressions, but
I guess it's a little late?

johannes


^ permalink raw reply

* [PATCH 1/2] iwlwifi: fix possible recursive locking deadlock
From: Johannes Berg @ 2010-07-30 11:30 UTC (permalink / raw)
  To: John Linville; +Cc: wey-yi.w.guy, linux-wireless, Johannes Berg
In-Reply-To: <20100730113045.923567583@sipsolutions.net>

From: Johannes Berg <johannes.berg@intel.com>

commit f84b29ec0a1ab767679d3f2428877b65f94bc3ff
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Tue May 18 02:29:13 2010 -0700

    iwlwifi: queue user-initiated scan when doing internal scan

introduced a potential deadlock because it calls
ieee80211_scan_completed() with the priv->mutex
held, but mac80211 may call back into iwlwifi
which would lead to recursive locking. Move this
out from under the mutex.

Cc: stable@kernel.org
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-core.c |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

--- wireless-testing.orig/drivers/net/wireless/iwlwifi/iwl-core.c	2010-07-30 13:27:51.000000000 +0200
+++ wireless-testing/drivers/net/wireless/iwlwifi/iwl-core.c	2010-07-30 13:27:53.000000000 +0200
@@ -2000,6 +2000,7 @@ void iwl_mac_remove_interface(struct iee
 			      struct ieee80211_vif *vif)
 {
 	struct iwl_priv *priv = hw->priv;
+	bool scan_completed = false;
 
 	IWL_DEBUG_MAC80211(priv, "enter\n");
 
@@ -2013,7 +2014,7 @@ void iwl_mac_remove_interface(struct iee
 	if (priv->vif == vif) {
 		priv->vif = NULL;
 		if (priv->scan_vif == vif) {
-			ieee80211_scan_completed(priv->hw, true);
+			scan_completed = true;
 			priv->scan_vif = NULL;
 			priv->scan_request = NULL;
 		}
@@ -2021,6 +2022,9 @@ void iwl_mac_remove_interface(struct iee
 	}
 	mutex_unlock(&priv->mutex);
 
+	if (scan_completed)
+		ieee80211_scan_completed(priv->hw, true);
+
 	IWL_DEBUG_MAC80211(priv, "leave\n");
 
 }



^ permalink raw reply

* [PATCH] mac80211: don't check rates on PLCP error frames
From: Johannes Berg @ 2010-07-30 11:23 UTC (permalink / raw)
  To: linux-wireless

From: Johannes Berg <johannes.berg@intel.com>

Frames that failed PLCP error checks are most likely
microwave transmissions (well, maybe not ...) and
don't have a proper rate detected, so ignore it.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
 net/mac80211/rx.c |   49 +++++++++++++++++++++++++++++--------------------
 1 file changed, 29 insertions(+), 20 deletions(-)

--- wireless-testing.orig/net/mac80211/rx.c	2010-07-30 08:42:22.000000000 +0200
+++ wireless-testing/net/mac80211/rx.c	2010-07-30 08:43:38.000000000 +0200
@@ -2615,28 +2615,37 @@ void ieee80211_rx(struct ieee80211_hw *h
 	if (WARN_ON(!local->started))
 		goto drop;
 
-	if (status->flag & RX_FLAG_HT) {
+	if (likely(!(status->flag & RX_FLAG_FAILED_PLCP_CRC))) {
 		/*
-		 * rate_idx is MCS index, which can be [0-76] as documented on:
-		 *
-		 * http://wireless.kernel.org/en/developers/Documentation/ieee80211/802.11n
-		 *
-		 * Anything else would be some sort of driver or hardware error.
-		 * The driver should catch hardware errors.
+		 * Validate the rate, unless a PLCP error means that
+		 * we probably can't have a valid rate here anyway.
 		 */
-		if (WARN((status->rate_idx < 0 ||
-			 status->rate_idx > 76),
-			 "Rate marked as an HT rate but passed "
-			 "status->rate_idx is not "
-			 "an MCS index [0-76]: %d (0x%02x)\n",
-			 status->rate_idx,
-			 status->rate_idx))
-			goto drop;
-	} else {
-		if (WARN_ON(status->rate_idx < 0 ||
-			    status->rate_idx >= sband->n_bitrates))
-			goto drop;
-		rate = &sband->bitrates[status->rate_idx];
+
+		if (status->flag & RX_FLAG_HT) {
+			/*
+			 * rate_idx is MCS index, which can be [0-76]
+			 * as documented on:
+			 *
+			 * http://wireless.kernel.org/en/developers/Documentation/ieee80211/802.11n
+			 *
+			 * Anything else would be some sort of driver or
+			 * hardware error. The driver should catch hardware
+			 * errors.
+			 */
+			if (WARN((status->rate_idx < 0 ||
+				 status->rate_idx > 76),
+				 "Rate marked as an HT rate but passed "
+				 "status->rate_idx is not "
+				 "an MCS index [0-76]: %d (0x%02x)\n",
+				 status->rate_idx,
+				 status->rate_idx))
+				goto drop;
+		} else {
+			if (WARN_ON(status->rate_idx < 0 ||
+				    status->rate_idx >= sband->n_bitrates))
+				goto drop;
+			rate = &sband->bitrates[status->rate_idx];
+		}
 	}
 
 	/*



^ permalink raw reply

* CiscoLinksys AE1000 usb wifi N Dual Band adapter on a KUbuntu 10.4 Howto Thoughts Issues ; jor linux-wireless
From: giovanni_re @ 2010-07-30  9:11 UTC (permalink / raw)
  To: linux-wireless

Today I will be installing a Cisco/Linksys AE1000 usb wifi N Dual Band
adapter on a KUbuntu 10.4 system on an ~ 2004 Compaq laptop.  Then I
will be attempting to see if I can get network access through that hw.
http://homestore.cisco.com/en-us/Adapters/Linksys-AE1000-Wirelessn-connector_stcVVproductId97826164VVcatId551966VVviewprod.htm

Given that KDE doesn't seem to have the network management
comprehensiveness that current GNOME network-manager attempts, & that
the KDE website doesn't seem to have a Network management sw topic, nor
wifi, oriented mailing lists, & that lacking those infrastructures, the
KUbuntu users list is not highly likely to have users highly
knowledgeable about specific wifi client hw & what sw to use to manage
it, 
- where are some better info sources (website, mailing list) for how one
would best manage wifi networking with eht AE1000 device under KUbuntu
10.4?


Motivating factor: attempting to use the KUbuntu GNU(Linux) system where
there is a wifi network that a windows computer using Intel wifi HW is
showing a 150Mb/s wifi connection, & observed Cisco wifi AP.


==  KDE wifi info not findable in a reasonable search time, &/or 5 years
out of date:
http://kde.org/applications/internet/kwlan/
Kwlan is an alternative network manager supporting profiles for dial-up,
wired and wireless networks.
(Deprecated by NetworkManager)

"NetworkManager" isn't show under KDE Applications: System, Internet nor
Utilities.

http://kde.org/applications/
http://kde.org/applications/internet/
http://kde.org/applications/system/
http://kde.org/applications/utilities/

http://techbase.kde.org/Development/Tutorials/Solid_Network_Tutorial

Network Configuration
This manual explains how to install and use KNetworkConf,
Revision 1.0 (2005-03-24)
http://docs.kde.org/development/en/kdeadmin/kcontrol/knetworkconf/index.html


==
Is the linux-wireless@vger.kernel.org list the only list where more
knowledgeable info on this topic would be obtained?

==
Is using this under KUbuntu going to require an effort like this:
"get his new Linksys AE1000  working on Fedora 12
2.6.31.9-174.fc12.x86_64, so I thought I'd post my findings, since they
were fairly scarce, and less than straight forward."
http://forums.fedoraforum.org/showthread.php?t=244215


Thanks. :)


=====  References:

1) Great Device

    white Reviewed By: Jeff on 5/9/2010
    Rating + 4 
    Tech Level Tech Level: high - Ownership: 1 day to 1 week

    Pros: * Great speeds.
    * Great cable length.
    * Runs cool.
    Cons: * No official Linux support.
    * Somewhat over priced.
    Other Thoughts: It lost a star because its a Windows only device and
    the price.

    I am using this to stream HD content off a RAID server and I am
    quite pleased. I am seeing speeds between 7-9 MB/s. I should point
    out that I am using this with Linux despite no official support. I
    have tried this device on Windows as well and received similar
    results. If you want to run this on Linux, you'll want to look into
    Ralink's RT3572USB driver.

http://www.newegg.com/Product/Product.aspx?Item=N82E16833124389

http://www.ralinktech.com/support.php?s=2


2) Title: Cisco/Linksys AE1000. Anyway to get this to work with
aircrack?
Quote from: 400 on July 24, 2010, 04:44:27 am
Someone here managed to get it working on Fedora
http://forums.fedoraforum.org/showthread.php?t=244215
it might get you going...

http://www.ralinktech.com/support.php?s=2


3)  http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/

4)  http://www.linuxwireless.org/en/users/Support
Linux wireless mailing list
You can send question to the Linux wireless mailing list, however, you
are highly encouraged to first check on the IRC channel above. 

http://www.linuxwireless.org/en/developers/MailingLists

==  Join in the Global weekly meetings, via VOIP, about all Free SW HW & Culture
http://sites.google.com/site/berkeleytip/


^ permalink raw reply

* Re: [PATCH] ath9k: Remove myself from the MAINTAINERS list
From: Luis R. Rodriguez @ 2010-07-30  8:05 UTC (permalink / raw)
  To: Sujith; +Cc: linville, linux-wireless
In-Reply-To: <AANLkTinoczFv3y8x+eaSOyrXRGHeBOb1XS3ggK+JZtKR@mail.gmail.com>

On Fri, Jul 30, 2010 at 12:56 AM, Luis R. Rodriguez <mcgrof@gmail.com> wrote:
> On Thu, Jul 29, 2010 at 11:31 PM, Sujith <Sujith.Manoharan@atheros.com> wrote:
>> So long.
>
> :(

May the force be with you though, always. Yeah you haven't seen that yet huh.

  Luis

^ permalink raw reply

* Re: [PATCH] ath9k: Remove myself from the MAINTAINERS list
From: Luis R. Rodriguez @ 2010-07-30  7:56 UTC (permalink / raw)
  To: Sujith; +Cc: linville, linux-wireless
In-Reply-To: <19538.29109.343550.81421@gargle.gargle.HOWL>

On Thu, Jul 29, 2010 at 11:31 PM, Sujith <Sujith.Manoharan@atheros.com> wrote:
> So long.

:(

 Luis

^ permalink raw reply

* Re: [wt PATCH 5/5] libertas: scan before assocation if no BSSID was given
From: Johannes Berg @ 2010-07-30  6:37 UTC (permalink / raw)
  To: Dan Williams; +Cc: John W. Linville, linux-wireless
In-Reply-To: <1280470711.14523.16.camel@dcbw.foobar.com>

On Thu, 2010-07-29 at 23:18 -0700, Dan Williams wrote:
> Fix this leftover TODO from the cfg80211 conversion by doing a scan
> if cfg80211 didn't pass in the BSSID for us.  Since the scan code
> uses so much of the cfg80211_scan_request structure to build up the
> firmware command, we just fake one when the scan request is triggered
> internally.  But we need to make sure that internal 'fake' cfg82011
> scan request does get back to cfg82011 via cfg80211_scan_done().

I think you mean "does _not_ get back".

johannes


^ permalink raw reply

* Re: [wt PATCH 0/5] libertas: make association work again
From: Johannes Berg @ 2010-07-30  6:35 UTC (permalink / raw)
  To: Dan Williams; +Cc: John W. Linville, linux-wireless
In-Reply-To: <1280470034.14523.4.camel@dcbw.foobar.com>

On Thu, 2010-07-29 at 23:07 -0700, Dan Williams wrote:
> This series makes libertas actually associate with APs after the
> cfg80211 conversion.  There was a pretty big TODO where if cfg80211
> didn't pass in the BSSID of the AP to associate with, then libertas
> would fail because the firmware really, really, really wants a BSSID.
> So lets do a scan to find that BSSID.  The other notable change is
> a fix to make sure all supported rates are included in the firmware's
> association request, lack of which caused some APs to deny the attempt.

I'm a bit tempted to say we could use the connect logic in cfg80211 to
provide this? cfg80211 _already_ provides this if the hardware wants
auth()/assoc() rather than connect() calls, so it seems fairly simple to
also (optionally) do it here?

johannes


^ permalink raw reply

* [PATCH] ath9k: Remove myself from the MAINTAINERS list
From: Sujith @ 2010-07-30  6:31 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

So long.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
---
 MAINTAINERS |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index aa6545e..2bc8657 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1087,7 +1087,6 @@ F:	drivers/net/wireless/ath/ath5k/
 ATHEROS ATH9K WIRELESS DRIVER
 M:	"Luis R. Rodriguez" <lrodriguez@atheros.com>
 M:	Jouni Malinen <jmalinen@atheros.com>
-M:	Sujith Manoharan <Sujith.Manoharan@atheros.com>
 M:	Vasanthakumar Thiagarajan <vasanth@atheros.com>
 M:	Senthil Balasubramanian <senthilkumar@atheros.com>
 L:	linux-wireless@vger.kernel.org
-- 
1.7.2.1


^ permalink raw reply related

* [PATCH] ath9k_htc: Update firmware
From: Sujith @ 2010-07-30  6:29 UTC (permalink / raw)
  To: David.Woodhouse; +Cc: linux-wireless, Rajkumar.Manoharan

Fix incorrect handling of USB_PORT_FEAT_ENABLE.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
---
 ar9271.fw |  Bin 51280 -> 51312 bytes
 1 files changed, 0 insertions(+), 0 deletions(-)

diff --git a/ar9271.fw b/ar9271.fw
index 0ec953b404c1912dc64fa3b0171cffae82b0f375..f4bcabd925d7e7b2597a9e6ead243d74be44b1c0 100644
GIT binary patch
delta 10073
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

delta 9256
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
aGSy5Z0x_ay1)*p;`RQkT?!WOD*Zm(IJoy*^

-- 
1.7.2.1


^ permalink raw reply

* [PATCH] ath9k_htc: Fix Bulk endpoint issue
From: Sujith @ 2010-07-30  6:28 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Rajkumar.Manoharan

AR9271 devices use four endpoints, of which EP3 and EP4
are used for register read/write. Currently they are misconfigured
as Interrupt endpoints. On downloading the firmware to the
target, the USB descriptors are 'patched' to change the type
of the endpoints to Bulk. To re-read the descriptors, the target
has to be reset, triggering a re-enumeration, and the descriptors
are identified properly.

A firmware fix is also needed here, to handle an invalid way
of handling USB_PORT_FEAT_ENABLE, which is cleared as part of
the reset.

Also, the target has to be rebooted in the suspend() routine.
This is needed because, earlier the target was powered down in
the USB_PORT_FEAT_ENABLE handler routine. Since this is no longer
the case now, an explicit reboot is required.

With this fix, the CPU usage during a scan run comes down to
acceptable levels. The time taken to complete a scan run is also
reasonably fast, since register reads/writes go over Bulk endpoints.

Both AR7010 and AR9271 have this issue, but this patch addresses only
the AR9271 family. Once the FW has been updated for AR7010, the host
driver can be updated.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
---
 drivers/net/wireless/ath/ath9k/hif_usb.c |  111 +++++++++++++++++++++++------
 drivers/net/wireless/ath/ath9k/hif_usb.h |    1 +
 2 files changed, 89 insertions(+), 23 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
index 61c1bee..6efc46f 100644
--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
+++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
@@ -92,10 +92,19 @@ static int hif_usb_send_regout(struct hif_device_usb *hif_dev,
 	cmd->skb = skb;
 	cmd->hif_dev = hif_dev;
 
-	usb_fill_int_urb(urb, hif_dev->udev,
-			 usb_sndintpipe(hif_dev->udev, USB_REG_OUT_PIPE),
-			 skb->data, skb->len,
-			 hif_usb_regout_cb, cmd, 1);
+	if (hif_dev->flags & HIF_USB_AR9271) {
+		usb_fill_bulk_urb(urb, hif_dev->udev,
+				  usb_sndbulkpipe(hif_dev->udev,
+						  USB_REG_OUT_PIPE),
+				  skb->data, skb->len,
+				  hif_usb_regout_cb, cmd);
+	} else {
+		usb_fill_int_urb(urb, hif_dev->udev,
+				 usb_sndintpipe(hif_dev->udev,
+						USB_REG_OUT_PIPE),
+				 skb->data, skb->len,
+				 hif_usb_regout_cb, cmd, 1);
+	}
 
 	usb_anchor_urb(urb, &hif_dev->regout_submitted);
 	ret = usb_submit_urb(urb, GFP_KERNEL);
@@ -540,10 +549,19 @@ static void ath9k_hif_usb_reg_in_cb(struct urb *urb)
 			return;
 		}
 
-		usb_fill_int_urb(urb, hif_dev->udev,
-				 usb_rcvintpipe(hif_dev->udev, USB_REG_IN_PIPE),
-				 nskb->data, MAX_REG_IN_BUF_SIZE,
-				 ath9k_hif_usb_reg_in_cb, nskb, 1);
+		if (hif_dev->flags & HIF_USB_AR9271) {
+			usb_fill_bulk_urb(urb, hif_dev->udev,
+					  usb_rcvbulkpipe(hif_dev->udev,
+							  USB_REG_IN_PIPE),
+					  nskb->data, MAX_REG_IN_BUF_SIZE,
+					  ath9k_hif_usb_reg_in_cb, nskb);
+		} else {
+			usb_fill_int_urb(urb, hif_dev->udev,
+					 usb_rcvintpipe(hif_dev->udev,
+							USB_REG_IN_PIPE),
+					 nskb->data, MAX_REG_IN_BUF_SIZE,
+					 ath9k_hif_usb_reg_in_cb, nskb, 1);
+		}
 
 		ret = usb_submit_urb(urb, GFP_ATOMIC);
 		if (ret) {
@@ -719,10 +737,17 @@ static int ath9k_hif_usb_alloc_reg_in_urb(struct hif_device_usb *hif_dev)
 	if (!skb)
 		goto err;
 
-	usb_fill_int_urb(hif_dev->reg_in_urb, hif_dev->udev,
-			 usb_rcvintpipe(hif_dev->udev, USB_REG_IN_PIPE),
-			 skb->data, MAX_REG_IN_BUF_SIZE,
-			 ath9k_hif_usb_reg_in_cb, skb, 1);
+	if (hif_dev->flags & HIF_USB_AR9271) {
+		usb_fill_bulk_urb(hif_dev->reg_in_urb, hif_dev->udev,
+				  usb_rcvbulkpipe(hif_dev->udev, USB_REG_IN_PIPE),
+				  skb->data, MAX_REG_IN_BUF_SIZE,
+				  ath9k_hif_usb_reg_in_cb, skb);
+	} else {
+		usb_fill_int_urb(hif_dev->reg_in_urb, hif_dev->udev,
+				 usb_rcvintpipe(hif_dev->udev, USB_REG_IN_PIPE),
+				 skb->data, MAX_REG_IN_BUF_SIZE,
+				 ath9k_hif_usb_reg_in_cb, skb, 1);
+	}
 
 	if (usb_submit_urb(hif_dev->reg_in_urb, GFP_KERNEL) != 0)
 		goto err;
@@ -822,7 +847,9 @@ static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev)
 
 static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev)
 {
-	int ret;
+	struct usb_host_interface *iface_desc;
+	struct usb_endpoint_descriptor *endpoint;
+	int i, ret;
 
 	/* Request firmware */
 	ret = request_firmware(&hif_dev->firmware, hif_dev->fw_name,
@@ -833,14 +860,6 @@ static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev)
 		goto err_fw_req;
 	}
 
-	/* Alloc URBs */
-	ret = ath9k_hif_usb_alloc_urbs(hif_dev);
-	if (ret) {
-		dev_err(&hif_dev->udev->dev,
-			"ath9k_htc: Unable to allocate URBs\n");
-		goto err_urb;
-	}
-
 	/* Download firmware */
 	ret = ath9k_hif_usb_download_fw(hif_dev);
 	if (ret) {
@@ -850,11 +869,46 @@ static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev)
 		goto err_fw_download;
 	}
 
+	/*
+	 * If any of the endpoints have been configured as Interrupt,
+	 * reset the device to trigger re-enumeration.
+	 *
+	 * Re-enumeration changes the endpoints from Interrupt to Bulk,
+	 * since the firmware 'patches' the USB descriptors.
+	 *
+	 * For now, do this only for AR9271. AR7010 based devices
+	 * also need this hack, but until the corresponding FW is fixed,
+	 * keep using EP3 and EP4 as Interrupt endpoints for AR7010.
+	 */
+
+	if (hif_dev->flags & HIF_USB_AR9271) {
+		iface_desc = hif_dev->interface->cur_altsetting;
+
+		for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
+			endpoint = &iface_desc->endpoint[i].desc;
+
+			if (usb_endpoint_is_int_in(endpoint) ||
+			    usb_endpoint_is_int_out(endpoint)) {
+				ret = usb_reset_device(hif_dev->udev);
+				if (ret)
+					return ret;
+			}
+		}
+	}
+
+	/* Alloc URBs */
+	ret = ath9k_hif_usb_alloc_urbs(hif_dev);
+	if (ret) {
+		dev_err(&hif_dev->udev->dev,
+			"ath9k_htc: Unable to allocate URBs\n");
+		goto err_urb;
+	}
+
 	return 0;
 
-err_fw_download:
-	ath9k_hif_usb_dealloc_urbs(hif_dev);
 err_urb:
+	ath9k_hif_usb_dealloc_urbs(hif_dev);
+err_fw_download:
 	release_firmware(hif_dev->firmware);
 err_fw_req:
 	hif_dev->firmware = NULL;
@@ -909,6 +963,7 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,
 		break;
 	default:
 		hif_dev->fw_name = FIRMWARE_AR9271;
+		hif_dev->flags |= HIF_USB_AR9271;
 		break;
 	}
 
@@ -995,6 +1050,16 @@ static int ath9k_hif_usb_suspend(struct usb_interface *interface,
 
 	ath9k_hif_usb_dealloc_urbs(hif_dev);
 
+	/*
+	 * Issue a reboot to the target, since it
+	 * has be powered down.
+	 *
+	 * The 0xffffff command is a special case that
+	 * is handled in the firmware.
+	 */
+	if (hif_dev->flags & HIF_USB_AR9271)
+		ath9k_hif_usb_reboot(hif_dev->udev);
+
 	return 0;
 }
 
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.h b/drivers/net/wireless/ath/ath9k/hif_usb.h
index 2daf97b..ced63cb 100644
--- a/drivers/net/wireless/ath/ath9k/hif_usb.h
+++ b/drivers/net/wireless/ath/ath9k/hif_usb.h
@@ -62,6 +62,7 @@ struct tx_buf {
 };
 
 #define HIF_USB_TX_STOP  BIT(0)
+#define HIF_USB_AR9271   BIT(1)
 
 struct hif_usb_tx {
 	u8 flags;
-- 
1.7.2.1


^ permalink raw reply related

* Re: [PATCH 3/3] ath9k: Implement an algorithm for Antenna diversity and combining
From: Vasanthakumar Thiagarajan @ 2010-07-30  5:36 UTC (permalink / raw)
  To: Luis R. Rodriguez
  Cc: Vasanth Thiagarajan, linville@tuxdriver.com,
	linux-wireless@vger.kernel.org
In-Reply-To: <AANLkTimiQZj7Gh5g+W0pcuWYFejt4EGQVCEQQ1aNvsk5@mail.gmail.com>

On Thu, Jul 29, 2010 at 08:09:35PM +0530, Luis R. Rodriguez wrote:
> On Thu, Jul 29, 2010 at 5:56 AM, Vasanthakumar Thiagarajan
> <vasanth@atheros.com> wrote:
> > This algorithm chooses the best main and alt lna out of
> > LNA1, LNA2, LNA1+LNA2 and LNA1-LNA2 to improve rx for single
> > chain chips(AR9285). This would greatly improve rx when there
> > is only one antenna is connected with AR9285.
> >
> > Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
> 
> > diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
> > index 243c177..8b4e4a6 100644
> > --- a/drivers/net/wireless/ath/ath9k/init.c
> > +++ b/drivers/net/wireless/ath/ath9k/init.c
> > @@ -531,6 +531,11 @@ static void ath9k_init_misc(struct ath_softc *sc)
> >                sc->beacon.bslot[i] = NULL;
> >                sc->beacon.bslot_aphy[i] = NULL;
> >        }
> > +
> > +       if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) {
> > +               memset(&sc->ant_comb, 0, sizeof(struct ath_ant_comb));
> 
> I do not believe this memset is required since we kzalloc()'d the ah struct.

that,s true. thanks.

> 
> Wow this routine is pretty large. Could you split this up into a few
> helpers which describe what they do ?

right, this one is pretty large, let me see if I can split things
up.

> Also notice how this ended up calling ath9k_hw_antdiv_comb_conf_get()
> and ath9k_hw_antdiv_comb_conf_set(), the only callers of those
> routines, and this itself is done when:
> 
> > +
> >  int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
> >  {
> >        struct ath_buf *bf;
> > @@ -1210,6 +1738,9 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
> >                                              PS_WAIT_FOR_PSPOLL_DATA))))
> >                        ath_rx_ps(sc, skb);
> >
> > +               if (ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB)
> > +                       ath_ant_comb_scan(sc, &rs);
> > +
> >                ath_rx_send_to_mac80211(hw, sc, skb, rxs);
> >
> >  requeue:
> 
> So the call currently really does not require to be abstracted away
> unless we expect another 1x1 device where it will have its own set of
> calls, eventually.

hm, i actually planned not to abstract, not sure how I ended up
doing this one. I'll send the next version of this series. thanks.

Vasanth

^ permalink raw reply


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