iwn0: iwn_intr: fatal firmware error (10-STABLE + iwn2230)
Oliver Pinter
oliver.pntr at gmail.com
Sun Jan 12 13:27:01 UTC 2014
Hi all!
I got this firmware crash with 10-STABLE + backported iwn patches from CURRENT:
iwn0: device timeout
wlan0: link state changed to UP
wlan0: link state changed to DOWN
wlan0: link state changed to UP
iwn0: device timeout
iwn0: iwn_intr: fatal firmware error
firmware error log:
error type = "UNKNOWN" (0x0000102C)
program counter = 0x0000D978
source line = 0x000006A4
error data = 0x000000FE00000000
branch link = 0x0000D88A0000D88A
interrupt link = 0x0000EC7A00000000
time = 17657601
driver status:
tx ring 0: qid=0 cur=2 queued=2
tx ring 1: qid=1 cur=0 queued=0
tx ring 2: qid=2 cur=0 queued=0
tx ring 3: qid=3 cur=0 queued=0
tx ring 4: qid=4 cur=0 queued=0
tx ring 5: qid=5 cur=0 queued=0
tx ring 6: qid=6 cur=0 queued=0
tx ring 7: qid=7 cur=0 queued=0
tx ring 8: qid=8 cur=0 queued=0
tx ring 9: qid=9 cur=18 queued=0
tx ring 10: qid=10 cur=0 queued=0
tx ring 11: qid=11 cur=0 queued=0
tx ring 12: qid=12 cur=0 queued=0
tx ring 13: qid=13 cur=0 queued=0
tx ring 14: qid=14 cur=0 queued=0
tx ring 15: qid=15 cur=0 queued=0
tx ring 16: qid=16 cur=0 queued=0
tx ring 17: qid=17 cur=0 queued=0
tx ring 18: qid=18 cur=0 queued=0
tx ring 19: qid=19 cur=0 queued=0
rx ring: cur=36
wlan0: link state changed to DOWN
wlan0: link state changed to UP
wlan0: link state changed to DOWN
iwn0: device timeout
The hardware is:
iwn0 at pci0:4:0:0: class=0x028000 card=0x40628086 chip=0x08878086
rev=0xc4 hdr=0x00
vendor = 'Intel Corporation'
device = 'Centrino Wireless-N 2230'
class = network
Attached the patch, that I use to support 2230 in 10-STABLE.
And attached the output of:
git diff op/stable/10/iwn origin/master -- sys/dev/iwn/ as
iwn_-_10_-_current.diff
and
git diff op/stable/10/iwn origin/master -- sys/dev/net80211/ as
net80211_-_10_-_current.diff
The git repo mirrored from FreeBSD's github repo.
-------------- next part --------------
diff --git a/sys/net80211/ieee80211_alq.c b/sys/net80211/ieee80211_alq.c
index e651574..a52103a 100644
--- a/sys/net80211/ieee80211_alq.c
+++ b/sys/net80211/ieee80211_alq.c
@@ -53,10 +53,8 @@ __FBSDID("$FreeBSD$");
#include <net/if.h>
#include <net/if_var.h>
-#include <net/if_dl.h>
-#include <net/if_clone.h>
#include <net/if_media.h>
-#include <net/if_types.h>
+#include <net/ethernet.h>
#include <net80211/ieee80211_var.h>
#include <net80211/ieee80211_freebsd.h>
diff --git a/sys/net80211/ieee80211_amrr.c b/sys/net80211/ieee80211_amrr.c
index c745b05..ab1f033 100644
--- a/sys/net80211/ieee80211_amrr.c
+++ b/sys/net80211/ieee80211_amrr.c
@@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
#include <net/if.h>
#include <net/if_var.h>
#include <net/if_media.h>
+#include <net/ethernet.h>
#ifdef INET
#include <netinet/in.h>
@@ -130,6 +131,12 @@ amrr_deinit(struct ieee80211vap *vap)
free(vap->iv_rs, M_80211_RATECTL);
}
+/*
+ * Return whether 11n rates are possible.
+ *
+ * Some 11n devices may return HT information but no HT rates.
+ * Thus, we shouldn't treat them as an 11n node.
+ */
static int
amrr_node_is_11n(struct ieee80211_node *ni)
{
@@ -138,6 +145,8 @@ amrr_node_is_11n(struct ieee80211_node *ni)
return (0);
if (ni->ni_chan == IEEE80211_CHAN_ANYC)
return (0);
+ if (IEEE80211_IS_CHAN_HT(ni->ni_chan) && ni->ni_htrates.rs_nrates == 0)
+ return (0);
return (IEEE80211_IS_CHAN_HT(ni->ni_chan));
}
@@ -190,13 +199,13 @@ amrr_node_init(struct ieee80211_node *ni)
amn->amn_rix--) {
/* legacy - anything < 36mbit, stop searching */
/* 11n - stop at MCS4 / MCS12 / MCS28 */
- if (amrr_node_is_11n(ni) &&
- (rs->rs_rates[amn->amn_rix] & 0x7) < 4)
- break;
- else if ((rs->rs_rates[amn->amn_rix] & IEEE80211_RATE_VAL) <= 72)
+ if (amrr_node_is_11n(ni)) {
+ if ((rs->rs_rates[amn->amn_rix] & 0x7) < 4)
+ break;
+ } else if ((rs->rs_rates[amn->amn_rix] & IEEE80211_RATE_VAL) <= 72)
break;
- rate = rs->rs_rates[amn->amn_rix] & IEEE80211_RATE_VAL;
}
+ rate = rs->rs_rates[amn->amn_rix] & IEEE80211_RATE_VAL;
/* if the rate is an 11n rate, ensure the MCS bit is set */
if (amrr_node_is_11n(ni))
diff --git a/sys/net80211/ieee80211_dfs.c b/sys/net80211/ieee80211_dfs.c
index af50cb5..5fa9ba4 100644
--- a/sys/net80211/ieee80211_dfs.c
+++ b/sys/net80211/ieee80211_dfs.c
@@ -50,6 +50,7 @@ __FBSDID("$FreeBSD$");
#include <net/if.h>
#include <net/if_var.h>
#include <net/if_media.h>
+#include <net/ethernet.h>
#include <net80211/ieee80211_var.h>
diff --git a/sys/net80211/ieee80211_phy.c b/sys/net80211/ieee80211_phy.c
index 923266c..4242ac0 100644
--- a/sys/net80211/ieee80211_phy.c
+++ b/sys/net80211/ieee80211_phy.c
@@ -35,12 +35,16 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/systm.h>
+#include <sys/malloc.h>
#include <sys/socket.h>
#include <net/if.h>
#include <net/if_media.h>
+#include <net/ethernet.h>
+#include <net/route.h>
+
#include <net80211/ieee80211_var.h>
#include <net80211/ieee80211_phy.h>
diff --git a/sys/net80211/ieee80211_radiotap.c b/sys/net80211/ieee80211_radiotap.c
index 6c73e02..5638f52 100644
--- a/sys/net80211/ieee80211_radiotap.c
+++ b/sys/net80211/ieee80211_radiotap.c
@@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$");
#include <net/if_var.h>
#include <net/if_llc.h>
#include <net/if_media.h>
+#include <net/ethernet.h>
#include <net80211/ieee80211_var.h>
diff --git a/sys/net80211/ieee80211_ratectl.c b/sys/net80211/ieee80211_ratectl.c
index 0ad46bd3..3eff898 100644
--- a/sys/net80211/ieee80211_ratectl.c
+++ b/sys/net80211/ieee80211_ratectl.c
@@ -30,9 +30,12 @@ __FBSDID("$FreeBSD$");
#include <sys/kernel.h>
#include <sys/systm.h>
#include <sys/socket.h>
+#include <sys/malloc.h>
#include <net/if.h>
#include <net/if_media.h>
+#include <net/ethernet.h>
+#include <net/route.h>
#include <net80211/ieee80211_var.h>
#include <net80211/ieee80211_ratectl.h>
diff --git a/sys/net80211/ieee80211_ratectl_none.c b/sys/net80211/ieee80211_ratectl_none.c
index 0edec44..a0056f3 100644
--- a/sys/net80211/ieee80211_ratectl_none.c
+++ b/sys/net80211/ieee80211_ratectl_none.c
@@ -29,13 +29,16 @@ __FBSDID("$FreeBSD$");
#include "opt_wlan.h"
#include <sys/param.h>
+#include <sys/systm.h>
#include <sys/kernel.h>
+#include <sys/malloc.h>
#include <sys/module.h>
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <net/if.h>
#include <net/if_media.h>
+#include <net/ethernet.h>
#ifdef INET
#include <netinet/in.h>
diff --git a/sys/net80211/ieee80211_regdomain.c b/sys/net80211/ieee80211_regdomain.c
index e7efb7e..ed7f422 100644
--- a/sys/net80211/ieee80211_regdomain.c
+++ b/sys/net80211/ieee80211_regdomain.c
@@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
#include <net/if.h>
#include <net/if_var.h>
#include <net/if_media.h>
+#include <net/ethernet.h>
#include <net80211/ieee80211_var.h>
#include <net80211/ieee80211_regdomain.h>
diff --git a/sys/net80211/ieee80211_rssadapt.c b/sys/net80211/ieee80211_rssadapt.c
index aaf4057..f230f60 100644
--- a/sys/net80211/ieee80211_rssadapt.c
+++ b/sys/net80211/ieee80211_rssadapt.c
@@ -33,13 +33,17 @@
#include "opt_wlan.h"
#include <sys/param.h>
+#include <sys/systm.h>
#include <sys/kernel.h>
+#include <sys/malloc.h>
#include <sys/module.h>
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <net/if.h>
+#include <net/if_var.h>
#include <net/if_media.h>
+#include <net/ethernet.h>
#include <net80211/ieee80211_var.h>
#include <net80211/ieee80211_rssadapt.h>
diff --git a/sys/net80211/ieee80211_scan_sta.c b/sys/net80211/ieee80211_scan_sta.c
index 75abb2b..6da06fd 100644
--- a/sys/net80211/ieee80211_scan_sta.c
+++ b/sys/net80211/ieee80211_scan_sta.c
@@ -733,7 +733,7 @@ sta_cancel(struct ieee80211_scan_state *ss, struct ieee80211vap *vap)
return 0;
}
-/* unalligned little endian access */
+/* unaligned little endian access */
#define LE_READ_2(p) \
((uint16_t) \
((((const uint8_t *)(p))[0] ) | \
diff --git a/sys/net80211/ieee80211_superg.c b/sys/net80211/ieee80211_superg.c
index 21f3b99..94af70d 100644
--- a/sys/net80211/ieee80211_superg.c
+++ b/sys/net80211/ieee80211_superg.c
@@ -38,11 +38,12 @@ __FBSDID("$FreeBSD$");
#include <sys/socket.h>
-#include <net/bpf.h>
-#include <net/ethernet.h>
#include <net/if.h>
+#include <net/if_var.h>
#include <net/if_llc.h>
#include <net/if_media.h>
+#include <net/bpf.h>
+#include <net/ethernet.h>
#include <net80211/ieee80211_var.h>
#include <net80211/ieee80211_input.h>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: diff.xz
Type: application/octet-stream
Size: 41060 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-current/attachments/20140112/6e13883f/attachment-0002.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: difflog
Type: application/octet-stream
Size: 4729 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-current/attachments/20140112/6e13883f/attachment-0003.obj>
-------------- next part --------------
diff --git a/sys/dev/iwn/if_iwnreg.h b/sys/dev/iwn/if_iwnreg.h
index b19a8b8..5b611b0 100644
--- a/sys/dev/iwn/if_iwnreg.h
+++ b/sys/dev/iwn/if_iwnreg.h
@@ -200,7 +200,7 @@
#define IWN_RESET_SW (1 << 7)
#define IWN_RESET_MASTER_DISABLED (1 << 8)
#define IWN_RESET_STOP_MASTER (1 << 9)
-#define IWN_RESET_LINK_PWR_MGMT_DIS (1 << 31)
+#define IWN_RESET_LINK_PWR_MGMT_DIS (1U << 31)
/* Possible flags for register IWN_GP_CNTRL. */
#define IWN_GP_CNTRL_MAC_ACCESS_ENA (1 << 0)
@@ -265,7 +265,7 @@ static const struct {
/* Possible flags for register IWN_DRAM_INT_TBL. */
#define IWN_DRAM_INT_TBL_WRAP_CHECK (1 << 27)
-#define IWN_DRAM_INT_TBL_ENABLE (1 << 31)
+#define IWN_DRAM_INT_TBL_ENABLE (1U << 31)
/* Possible values for register IWN_ANA_PLL. */
#define IWN_ANA_PLL_INIT 0x00880300
@@ -275,7 +275,7 @@ static const struct {
/* Possible flags for register IWN_BSM_WR_CTRL. */
#define IWN_BSM_WR_CTRL_START_EN (1 << 30)
-#define IWN_BSM_WR_CTRL_START (1 << 31)
+#define IWN_BSM_WR_CTRL_START (1U << 31)
/* Possible flags for register IWN_INT. */
#define IWN_INT_ALIVE (1 << 0)
@@ -288,7 +288,7 @@ static const struct {
#define IWN_INT_FH_TX (1 << 27)
#define IWN_INT_RX_PERIODIC (1 << 28)
#define IWN_INT_HW_ERR (1 << 29)
-#define IWN_INT_FH_RX (1 << 31)
+#define IWN_INT_FH_RX (1U << 31)
/* Shortcut. */
#define IWN_INT_MASK_DEF \
@@ -308,7 +308,7 @@ static const struct {
/* Possible flags/values for register IWN_FH_TX_CONFIG. */
#define IWN_FH_TX_CONFIG_DMA_PAUSE 0
-#define IWN_FH_TX_CONFIG_DMA_ENA (1 << 31)
+#define IWN_FH_TX_CONFIG_DMA_ENA (1U << 31)
#define IWN_FH_TX_CONFIG_CIRQ_HOST_ENDTFD (1 << 20)
/* Possible flags/values for register IWN_FH_TXBUF_STATUS. */
@@ -323,7 +323,7 @@ static const struct {
#define IWN_FH_TX_STATUS_IDLE(chnl) (1 << ((chnl) + 16))
/* Possible flags for register IWN_FH_RX_CONFIG. */
-#define IWN_FH_RX_CONFIG_ENA (1 << 31)
+#define IWN_FH_RX_CONFIG_ENA (1U << 31)
#define IWN_FH_RX_CONFIG_NRBD(x) ((x) << 20)
#define IWN_FH_RX_CONFIG_RB_SIZE_8K (1 << 16)
#define IWN_FH_RX_CONFIG_SINGLE_FRAME (1 << 15)
@@ -332,7 +332,7 @@ static const struct {
#define IWN_FH_RX_CONFIG_IGN_RXF_EMPTY (1 << 2)
/* Possible flags for register IWN_FH_TX_CONFIG. */
-#define IWN_FH_TX_CONFIG_DMA_ENA (1 << 31)
+#define IWN_FH_TX_CONFIG_DMA_ENA (1U << 31)
#define IWN_FH_TX_CONFIG_DMA_CREDIT_ENA (1 << 3)
/* Possible flags for register IWN_EEPROM. */
@@ -380,7 +380,7 @@ static const struct {
#define IWN_APMG_PCI_STT_L1A_DIS (1 << 11)
/* Possible flags for register IWN_BSM_DRAM_TEXT_SIZE. */
-#define IWN_FW_UPDATED (1 << 31)
+#define IWN_FW_UPDATED (1U << 31)
#define IWN_SCHED_WINSZ 64
#define IWN_SCHED_LIMIT 64
More information about the freebsd-current
mailing list