Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 12 Jan 2014 14:27:00 +0100
From:      Oliver Pinter <oliver.pntr@gmail.com>
To:        current@freebsd.org
Subject:   iwn0: iwn_intr: fatal firmware error (10-STABLE + iwn2230)
Message-ID:  <CAPjTQNFRi2S6SpBFaByfFU76tipL8G4Uh2gL7k-KUzTaC67ZBg@mail.gmail.com>

next in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
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@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.

[-- Attachment #2 --]
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>

[-- Attachment #3 --]
7zXZִF!t/"]2I	}P
OG?)d_H0p;Bg Z,z3q8Nm&#vqAȨV^<S6xs,n@%}JeC&*40{(j-hY%BB1-2ݵ_͊QDXcΫ34=pP';I~Q72zݞ71WN>>;o5fboyMXIrr-uwQ
xĬsV灄2-!Dd5jeuF=WE\fOz|UŗC|Og5'7
򵖫1VxiᅇaM{)V~k0!(ր^fwyGdV$k)e^$5|LhQ18#=yֈ}-ճ.GB^KgF7fqwzVw	Jls~P+j<W`n#}hgJv4bPI[ps!l
oDPwm?֥L.JC͏ɢ1%iD}fvEAO¬l6ɓZSW]-Whp=
\߆	eˉcYR'ɡo``g9;΀ yl	o+m#@@Fbъ?`mmx".[-hg	[ȍ'q"*""Kp	 F9QPܝdSTPgNhفᯩ	䓣MHFl3zC]gyBxp}6m2(
<K4LjA0& z%$I}5mԴ( d'?celm+mO˜{bK߸%ij&uxqD3''bʹw-[x7[-LBgPCzhu4#ؼ~SGV	6,d\~r(Klj	.,>:rI{3DE>wd~{zV_IJyۏϩ؞s>1K-9~'LYRUWQK駼VM$B'b.@휴K1){,b۬t%
<O;䕟OG{:@}mxn(/W#C4?PB$*6P.Erw7+tU6>3+9:+.WC?^+87
Vvx#?_.=L1H3h3DYѲ>fqSpw'Ԅ~Vy:>$2cw>	L0ȦVˉ(pf$fA}*u^lyd`GƜ">Lm<_Ƒm*ml-A9L[ڎhސ]ә[ȮEh(!"Uj(7H"+,hV]A])@b۬ĥk8go5M6-$K?H=R}$k	2Pbv㶹wpR'f%<ʘ
b(WY-4ĕ5Lˣ-Ƽ&*ch5zIːu0GR48"rwm;YbT(n"Z*PŃk2btQ&Մd8( &C'cZMIh|Oe_>YPaj1q=`a7Am('>w5bx{ʮm?//P<+Q˖Q0|<F>.V101-a0iʷ~Hԃt
!0-u#pJpyboV);νv.^6}sWcE_~աWtf٦zYXwRRs`\.r1B=gj7iGBW4=TFw|CWx7/^`g"Ck2w00)&2	g[}}Mhmib,+Za+V1Tz^.\:45[a,i!^YI)arR
闊EBZq;
ef,O&W(YjY3=~R#ONMo!`JX2oNёWoh`cT&	i\2 :;6Ox)rA*V
ko(-
+zfJyajۘcinGؗ3Ngx*FЁ0ettfw$TF#M^1K7mX9R:Qz4RD\]Sa7i@	OgUO58KKCLa>y@̩hh00bO+RL6%nt}r"<{N80523LTҍr5+`t-)CȅnmbT*ԏEA/D\-\*NW)*kqۛQc_'W _utʖSugUޙ`]RDl<<V}*u
>Ģ|-Wtr#pbMY=3p+Oʭmq',K)=g8!Y+sv
j<qbtydǚ,G|0%q5y)@'hPœůECpRQ#ssR"ּzF?H }}2U@sz6~>hKYE!t&?ؗ9Q>}Jg1z*O%o5"_=ϰIқGQd!.%n	8z̘4%ɇrD0y€@W7P[B9G6ÅiE&w1ZGpzy;>;A4zvC5|4MD9@t\M}Ƞ6kw8ج̃KcM~.1).i%oqIߟ^2cLLLKAvFWRTasN:ǫe=Z	БCnXcnJ!^Pk[YKA;	^s.p7S0j>SFغ.lZү
8:Q}9ao
g%W<ZvjeU<w졔
C!ukڇ=z{,jx]q9n</UŴBJƚ$Y?"nmK
"k&,՚|3U>e|rt^/@bSWKِZCCw)H>),mV#PJksxLRD!F/EQ.\^3ENvRˏϷ╥pѤO95
n@8ADj׵Qp*?ց|#M%WK~1uVfӽm;};( 8'An}kEG&a#s!ㆼ["fEJaAGii[d!,p^޿iOX8@={iKؐ=W{NLS:ݰ۞qܭ&6"Ԝ8~cr8|NShy|FyE:2*92Y/S,D]F-?=dS\]GxΝErɌnkew
TjNܑu$G=縲>241qGJ>q܇A@v-CF[	f2mr[1kb8i.[bt%9ޯsSH'Ȗise>-A>؟x$IsQifMT@՟Δ甂jm*FռM);$*h3[-ŵh1tN/_i	u+Z\*̔}Xy!q?_`!KQnr_O+qGI30BZi\%Z9tc9<'/.?TQ3>eɩB8k}MIDdiRtMl{kXNa2
)-?GM[yq>ceʜȑӃ
^mŶQV̝t*\B{<aaFEO	lvs>vK$JL^+wGH-ӔA8	u']Ea7W{$^!PM
:D"ԫLUS/XW>"^DV'Kkw2;]!ZP<-O3Lj4@~2jC<F1@sqƍ<@~+Bё(0.a|BQVxA(k$7̹璖Wh14bfoLEc,dfL3ײd\L(dbn[;N@/
,-Dű
<
[胀9J[Li3̃գckOS.X)z.'H=&l~JL^u\0_&d-ЦD\<W㙔bRYᶱa+W1_oN=f>_+TRMz}y沲d7WAA(TxdFI~m?Yػ`#ۀ`@ BN-]
0{ܽ<^'
ީɤoD22?m?$ix_FX=OBYq`{J""1]@[".V>O*2ÚPPntfz7]cw/KޯM{Qɮ
^lSD*ƻ
>ޭvy	ry5%k?$
a9,Ce*TOgB/#k̔@nwnHթ姊Cʎ BЃܬBGpRA^gjε>"j	!-!&+5!J+ֶ⾢\5`II3	Q$F)
~m+}>M}2ۅJf_9A
[]@Qg/nbR}s
0Zc,Rj-3dM(|\J 	ĦΚgC\|ٌR^ȹ
VF3,s} &4p&qЍ?GpYlsa53u
,>N&71"9?-Ѻ;.|<=u{/|ׄ{g1U(ov8MI%GA46
Q!%5[uP'Rdc#=JaʱW!UWK-dXyhB[ퟸQyT0g[hwiKC.XYt(2k
xE8nM$/<
8锔ੲHf}ȬO2(.
'j!_zͮϽ\dOjjzkݟOE5ˇbVFIS("Ub)t!rWcS|%=#<rVpT.B9;)\0_NQ?a/3Nf͟6m;%th2(Ч4Κ~ѕZI*|np%W
wuuPˇ-pq.KY{t+mۋ$7Y[K[	OsP2	wX50gn.E7Ȅ-Ek׻Rꯇ^{C:-4^5Z.3Sb)~50Haʣ w~ӁO*&Myh

K7`drMCӦf]!DF8Ko5?W~}(QentI{g^_itgGx"8SVIQ>(a	[JΏw@4Q`оGؑ
UhQzOL%9fmJQfQzCdL_@tI^~	*Ya-a~u9abz4rkc
bo/SĩImۖ}I#T{](+NS8!Yaq td}Ѽȭ"O=r[.g7uP&%8Ҭ_Etdݶe<IH#Ch1{	T\` tS[KgDQ9jdE'B)zc[`=1KGA98`hB P+3L?bv|+I3ꪴs2~iHɒ3@AŚb4zZ;ۄ`݊b&1<RIZWĕYˆ	{9roŦ-=*%(BVYt,NSď+};o$ag`9f5$$''JLj?k-\
rE)xr)9#E>S#D<αp${2su-4zu\ÅYH Uڐ8e}_=?M|F0+O䈿*مO"t٬|e<%q6E-6;v(2!Iʜ2fh680'K2:uLoB`.B#dSʺ7Yw'^:*EDB9H"Povƽ@ŽUFsp"k
yx/L%(	o
4
(Rpɏ]lQ
\
Hx
0	pTw*zQ"%w{oFp}F&K^
gOʰf
e%}KM1+񺋱@V1?uwyu}Z'aMBU߮E*Aqmss$U[ܱPIⱅbz	+:
[1yBs;w
eT;,R~pqe%e^ݲvha
<X7
tKq_QL<m.Nio7F2}ԩ(D>_D IQ`D4
3}z6oֲ1.n:9EIa®9Rk)Y4ɕy~8aӼ9o%7	P<L;ҋ1N(, GuJZ,{GWys0Y|ScajRDH8oY`ZFD՟WY$<8&ezx#m&lGCfY%Hn:e˝fNd\enTzZ)H~lDrQN\c<p:=ZV1xQ'큭}a$F!{=DyCD96`d0';B׫Rv;GD$,zN%)|"-
:WPq=p7h2xm1Vu[ژqPnԀʏnN<4/7hRW鞮41IʥT TîIBا"z
d}Wx;u_.}X^Cw;:Km?|z_	MswّC`GI垼ӛ;`"HHd09&uރsyOh<c<q'Q8w&h R4MߥQ.O*-.4)ˈ'S5pL,LR3%:o?z9Obx#^mG)E+SJ"A3e._dѶ{w%l.@bd9	nןSrwQWO'c_}49Q;sr݆C늕e;DMNS@No0Gp0(4HZJ/o˥FҞ 6JmҼLgl}!ek	g|G-%ڍbs+޲qn|k
P[bE՛k賬ˆV6,:rF>+z~P	-]J<AMFmՇL<ᧇ,jjF|-\sQäS2AmduS?m|F1Un"SxnS""iV)2
$G+H2o#1GǛ%OA&n	r/}y'8POq'GGGolv/P̠
%r||[U8Cqz`cŕ־":{!Ѳ#kBxh\B'.pDzH
vO]ݛ@gH
)΋hD^!Yۏ=>9/'ob74΅э4x֠5MVx7Ƣ"E-KdLߔ]5+fllxNl!0:Tx	mEH#kLki-+nݦf9϶׷ѓ0HQ4:iݘLopB3/DMЇ_B!Y^
1SyM4ڶAHg
-9iȨ\x
KZE:%?&,֡XnR^:n9!	@;X4{XkG*pr.վVe~wuvI%K,0qti%7ujUGᔐbGiՉDbIppjhمOzve*Ψpp{gcq+H-DIMV)|cK@?7h2[!zkKKLIV=,*"P2 Sw[Mb*:.<$+P
 Kpi<Zr;E@ƘJ Fk*2Vi
Av\M9UDB#Xm/\1ciqft">6nZ^VgZ*\5~,uNk:bC̭*fi{Ҫb8?%ɖIsqV|4JݷC,LjfR$#V3fK5ZNfBg^@U(([ۦ65 F[5V933;?q<:zݹfC6V#ȮO,V捰PF5GQ1X^77>$&|_[!0By>"\Yd^V-/a[4"=<[p7"XbmiZ=^OyM*Kp=ZUD(fpy~;<0"C[g!ֺ@௩Yo!M?U=K/{IZW{{dH@߲?޻<4F}mY4$En!.#?D\մ	kאy6R;0Ƀx]N ^CZưzlЁI)2Gtѡf3IyM_U0y2+>GJOBpIg+<lS+.{m&?'\N,r`vzp-zFɗVF`\"oCc󄘠1#KAA\;rcWƗ&:䆅o.W[,Es4@jfF
g6䏹o4؇s3h+j17c~DН9|#f	:e7a8Vo%J{`* ^e+K0ZĊ(B|qj$*!z
./D(%)9V
k@a/w5:!28-+j&^Sprt,)k"b&hGK{ޒ]5y
6 N*^eo;WM=҆C|  ^MzՇx@(E-={3)VٗO]ԓ}B<e+íq{[BN-x+}<U"uI_){$>d=#L"oiyYKSqz	RWlBl[ՈיLF6xWN$0y}lR5a~K^!SMa#I%߬LUiT1Ihf~ZF,=tpnuᕮ0c]錝x~Ap?L6j
ғ¤l/j>bp͙紬2Gnuc`S3)v<~}s@lm8lέyh7;f@L^Jrij?uG/z#e}i4xZWckí~4Gwx;
uj%ϹEईfYƭ`]\3<3.Ȱz>S'PwT[+^F3WWt-}`2qL&=Xb!¥kȡ5a*utr.#]ʍgFEGO};Ld,[Wv>KMo%ߦi<`7ZQftݔl6Lp(J:#E&#pHf%Qd^mm8%3C\FDMwjرW])RJkAyz!,dBτxļWRAh冇Rƭ=dQ?Q=AgE?:kxPG>ff̫Nh\egTW4R^Jfr{{	X[#קPw=k=K1xgXO>ݢ997~;j֜V^"3X:6Hcαam&JhDH/Ȁ,0V'0P#&l6^
lFHSO:bDkl(<ЦAO[{S;Xc0hVpTq̧so8<hU&,;H88b޴nkȓ% 1@B=m6Y-7GI[	MZ!t3
mɂ3`gBՙx6R̀ڰ{9L~(jM#`s̴o$s#r
K
vePԄw)87Ur)r*9bMO&,K&[Nv{f%%"`ju~EE#;zkHn_69)mIJh	ku*kXplΰ(&My CibGExpQSO#'3QeȘN:h2WT|,"9Bfl}LIPEY<T&P$އd+/l7ia4pgf25,~|OE,(g˹b u!`w1.GztQnLNrkDugd7L+?Bc/rߗ-ok`HϹmynw`XSiGw\
ʑ{$~
PUuG.dBV'iS wP\;OpszT
'VG͛[٧n~#r|5Ae.ѰcۋL@s|'D(hZ&R$q0ϡjvd>]"͢VBC9ӭy+(n
e@oSh}_5ltj9qa[Rb+'><_o'u,=!/zjq‹w].KU)O%'|7!ߨf>')Acޚ<9*
;}c	zGe,qsFv^2d<?t*dvHn{^t8̐je}ХS?\N.)e.6I$
o|〜%JP{c6o*_%fA
,Bۻ۹oS`~2D@;XWyR̰Y_f6~+NUsg +N`X+sogR wfVEsRlq6AvYD)zEIoIǷ29v:}QJ7
nbf15IiNynbx,wĪ;Ph8
P9B>Ůo󦥃lRZY+[@~N*fGBU_6JMjciDG9Qon6
W7cZۆ]D,i=l(˦tB8jIǍh>KK}٤^Kߓ\`e;w&pֱ7a&U	XMtU:f}[x~83Vz~W5`3_wxEEgdr%cݑtnOq.Q_:&?L
5]@!/a`Qw~vhظ-igPa1Rbs?'߀ik3>
ڝ}fc;v5HP*iƞ9_9BZk?M"8ٍߏh&)7wZoLYBLVۦ[JJ0
CZ4+u}
l7MR.ǩ)u5T¡OuHN;>'@%mY<rtrH1N!Ŋw'a-8Ј۵2y.4%qohWD?639~dC&I8$uu,IydDQCJCGtcfDž"^(˻GV0KVȧ61V0	N
5."?#zU._/Mزy$iһT4<㘆X)"zc!Z0hI=Ґ옪uRrr<QeΠpiZzPi-פ~53!^C-^cwerpw`kaUV+ȰUn8VB׋߀}X;-93ԧD|'_>90t.zBca|.!kgCѨV{@yvD9{ćk*!D߆p8?fBs,KGwJnd]q)ȶLޟ団Mٹ9;鑭]J¸iжdPاR,2}Mvhjc JΟmV.cafr7>{'}(nNP#|HIh4CCւA^Nt;ظU€3-l·عI+C!o,"|X~E*h=(-Pt{N	&&͊W7=w0K6.:J[L#RC¢&JF<"%LIS$΅!@Rll5GJ\ö%vwV
NY>x^yDV7醕=FeԊsp7ղPBd-},e\nGCau6.&%)u/v?(}挹5fA>Fnǰ+</hbgxZ:~8co'+yߙ|V*f{
8>O;f2[#_)<˥ R8{C8.Ɛ+df:cu?3NYFFT8"Ho\%xj:i`{$3m->F*>J{m-~?9ht+Ъéy&#&<v>Mg&i@E@5tZrVc7yC:Dʵ3Вbb;U5v)_FAHL,BBHh\Ɗ(zDqfKǹ	>h,2GDۅNMTO36LAZ%:Cw*3/D+l^e{yYe&ȩ‘%u&Q-yd!7s2`Rkۉh1dJnl?weƜ0UB.ѽ#Wۊy'b􁮩x>%(Ch_n\MQET+@.M윻?cܗ|O3Ҙ&Պjx2x1+	m)kl7?]x_BZ?OU11(UP,'ߘXUW-]MT
sٞBWz8Sd$DlgTbkG]P|)y(VumHg*0>@BO@d<YUA@o
X΢/ƴ6zKdYAl;TV e+$Gv9i .MH%y!q-4ZեS?cKbn8{,aJ6(&T_R&v1)8D;<ԯAy{'1jK	:oyKۚB͆$mwᆒB)Bz|!\7屘MLHE|)쬟hb(\<vnNXp<C&sx4k%\l]]<T*s;E*1.s>v3j*ctBrBԋFN?'So1(	f+7IŶP+kݱ
#8ll5^ubߒ|ɳ9a0"<BcMئZ=
1\pg=-A601hH4dczq֒@ɨmCABkJAR:NIDJȏ+e->CZ<#65 e߇[7BiJˀ~(W[0пxp7;4VőFkyve|6mrx<K*sI%Ў`/%Bk<kSνBsEajbS}Fo2h],'TaSuPCNGWXC^0ov*Ϊ6{EƗ"SYnAØoD4߹sڅW`@3_i'AMTl)VBU`I!Jry;XR".=1yq)ewc>I\$:J{	akU9jBE9c\(58kWY%VFm;KiINT4͠d3SUT+=RM5=0mGL_{4d(u('_6bIZчwp׿=1j^}bX!EcLrluͶ򊰗^92G-2#V{t:(2Y'%4\ppE+q~7içRX$	,7+e9zj
W/f8|9k[Aߩ1eY(4GZ hLO<v|B+
.:Μ9S#eojUJN"d-|HG_#INB'}S	+oW$vtːn0q'|zbmHWRFb^
@MnsֆRHܓ甉fg[:>Zԑ\Z:u]cb4g	~Af">SLB,jmG\-j#U!CNoW뗚fu{t^FKjς!uܠ9
X@]Bm'vJaK'|FLTFW$fJVs{STݹRT?QyU2{ls.D>h,Lm1s\0G1U{ꜝ-Y2 -}D@I'f-@v {_,9Y5C?[Vl91849(bh<kήPycr
'f&c<!)

r-FJ4
lg"yrbL:CT;`ܣp(DֹqGa.&%+)VA|AP֞yVtz
d
~InEp/n#c+R0}/y?O_$uR(f.?\
,Jrw/NA,0)/SLmcP+iC|CX/xCjUc,.W&qd0PW?CtM IsAsKqt}Hי矈[XbD)QaIWk偳{L֗ס2_kW5`n0G`<GmB
-JSEh7=ZTH`W$z/ubuB@?Q`u(D#PJēTYKu
|ggX#$!XvD'c
;aĩͬ
m?\qEQ:m&k4D4Lujί#{2lgt=+s`3u9uI^X홬-tnҷ0魽&-G!iJ;{!nq=E]w}u*^Rx#v-P;/]V:
m:SVC[_ڦ	ll<vmSokkh?luDZGu^ƭE<_>ǹ4?JAyHlsm4魻mx<](D)^:-~n(-Fc9Z-}nT6PdWwTHdaGG˒
Aʯh;I<9@<؉1V{6R{
bޯ10$"
g
)òW5ѳ&f'q~./&Ka|JGts
U	ccoԾC%bjXM ֹ:rG!𴉹W//o'G|cی3w3ˊNV.N8K{*t(t0mw0nbG^I~QZsА4,yMfW4/c?#'lt\tìܼ^>m@=dsҷ\rpGVa\pH0dWBwC,dʬRİz
YM'j lO*{)R<@7ޯF-빏z>*DC2U(: *W:p'x5FBU{d&A]c쾩ZR]Frʕx3[Fg$`mޠ?-%YlsVj-w^ßʦ}u$n.q.㓧abkG¤OpV+UߧE0o¤SpXm
`c?e^<TrEnDRyMQ|It~WWHQh5cRόp~3(ߓrְȃ8`6$uIxGkT
M;L3]54;*
mP+W/+DE'Q-nJa!ZmUO=iV \1"0!Q5gAײRGCۀ=39MQ= 1Ue%dMaVbs2Vɇ#pN1Vڎ)JlFGGT<2",/iQjFqԶ.`bn.&+6zG'(XaO]X;EX!b<rJǔȅYDc*oGI
3eo7jC&ƻĂmuXYrpkK ӨXOz]H`.ucyh,R6z$##ʱ
j@)G/~$PAE<dgd~:W\VN|[93FtUj$%)f_\*gŀ	d|o rj$^7nSrǭd*A>֘Ο`չiz>ET	r~@d=r
8;f_uT!:> u$	s
?<e&NcʗtCTނi1u]Ň"S]R?A1!\_1O*˿5X?}xtNK, L("R˿\OɔP{?ZDIaUB "{I&YQB2eX=_XM
V+e퍧ҡoҿ>HnJ%(;>	պEH7[,W
SnR2j2Lm
ъh`tnfEY	Øs5 XET0S
TkUЏ+*˦sGMΉ	uuSlQT
5V/eϒ8'5bь%pmjO8FL՜_~z Nl7aMZ樠iܭ2A-:ڿKlP$G}nc@\
7t\^'RHBr?HGn97Qy4MHclM(x<M,J#%euL
 "@A:tK']unc}ZV
d>`d9tCWINd[ufZD!ڜF~k'ܛ[B+4[_ⵖ|u0Rxt*1,UnZx#ԖCTmqհT<1)<
(^RWk4$o^R?/{V]0"ᙡn[!	aG_
'ou]S?fBc>T-vPm#,~V&==?B+ز}S=N=྽RB*>+5<v.CpFU.|evK	^!-uXv|tAeIAv^UyQd`Jo3hLs7yǃ7,{#Д1OU#sg:O/@F]`#~JJ9Tg@WMp>@quxo~{ᤤbKj-d)_D"
+PCиoB>(n )22WQiQ:I]E2=2&2K|yBM$DkK]ea'e)r>8DSVaKkP#y2P;Y-?ՙ&5oNFdlT@m`<W͚Su܎I+jdi?b
ytn,[xk~lg`^ԐP,h?Nd14hJ<MQߜ*W;K?a-Jen2ABJfl"Q͌umΙƵiH2<,ߺx	l7y,| Y:]{7qz+I/\<y [|$D%zHN)& 8jy86VBսf5q0FZc !Mx$j*f=o^CJ
8{qE[{V@liF"w"5}[-
%$ٔMoXNM[3u3D*9P?UJ>=Ʒ^z:&⽺*VYВ&HΈբavL9%S}OX4{qrzUc<حXmD)Ga9
+>̌"psx<,0t(dbf|<4G
lWE;<EAq8@ j"i^c}qB{U0[1}݅gHsHA@7yѱF'G^|4rVEw!PALj_B{tZk"W\88F!$:4Ȩj(-5<u``7:~~b䚂B8O:y*g;
n0r[~bf)H_h<;hF0pL0
g@Bv(@5=k|GjԆ] 4.zS%Cf힑{@ЮԇZ<|aX,w}mXGIC*:w5Q^:?]=O!7	Q*h+)#("Gqd&S` 
[gƯxtݝ-(@pŰn5/`9Ov}g.Zq:bdZM4@EMh\\XhijԳǠ09*D
vQߘs*B~Ս]|>A46ҟ 'f%{{;\ɂr;:,ЀE_	KyL2gمP_)D
<3[1>oX`rc}hI88i}0OJ,G67
f3ON̸p|a5jQS{[鋻{*K€h㇊uݯ YDrHZ=\YBJ%|A%,EQ1ȶ:b*Sn.HTHs<dU$omPgUr=n@cJ,/Y_nFAO-sqrS噭yQL_
ُXfm9F$c B˷̵1.2	ˮxCZ.(lkL#H"V~43Īܚ,|֟B"k~JAЋ
h@9:1,cT4@?jMsXsn<S59J˔ w_>j;lgH`mZ/=Z>8rL8S<7ȲW\rE
<گ{s|_;Lˌ)ttԴC]ݡ|F;EtTw[IkM3c˾{qw&N:(b­ޑ&ieG<[E@2[1#V Oh	e
+/};hC'4s,aZT?BT
9f#Ŷݦ/beHN(0VMk<@	j"'!FA*֙
4)R7tU=*W9=Ӓ5/Ð\j"RJo*'~=LV{>{/}Size
uw0?aq=TCy}aL:Rw<q_q}lI&\ejrF f
N!2 ]ҧj%&1#ʒ%2/'L:3פ!~QҀ}<ny[geYwp
JSF0WWg")IpʏL&?~KvPCedOi]?wRp)a$m/+Ti]/MiB,ׄX-%wd,OCE6;'A£|\MϛY\%7j9҈Ε/+0 |~9M(tSE|O[>Pi	LA`q쩏ȸ&xŸwem)ph=k"*aȭjQh!XǷ:޶>FD/F6F/RE	}+D{]+FDҝBoQurL~
v96\ŒDImY6w']鏗Ɣ:^Œ%$Ć}Hx5-XI#BnP;QUGM`S(="G#MYz~m+	fJ$ԟ5_k<Ã#WYSZr$LvӸ[cTaF_q
o"CVns($!~UL١
q,
WfOjpUZUk&[8rƖw]1Jy\ƕxXuEpE'(>Ej,Q=2Gj~곽|&Qd]6AJy2MÿOױ̾wugQ<n՛2V$1QպvYT6Ià,Ru2)WzٵeP((B=zh-5[MΩ)ëӃN	&Vl8__FzϤI!Zq$!:3Կ=800ۼ.?}1.J	6'h+8ݨcXgܒ9HjJUV5jG
Gcd
5ܒE^r jѳ05(Vx95+ 0|G_KoQ _MM$(:*Vqj|ѻet K8oHmEiš"Br(Gn	krw1zf}6:sWЈwCZ9ơY&9 {
k|"]'/`ZmW?}YeEWX*ʿM)EtwNn~-F'	~@L!pag/ яdiDm:CFZ9CYh.n88$lY^#)ߔLrvmرW(lRASf5CSC
VƏ:m4H;z~$>!M(uZ'%sS;NL4.&e.ͼ@_Gq+two5W4I|<sv;Osgd?? z_ $Eהz|.u\	s$_w0
i8G]VA>@<Kw8J'U?0n6gv>Fپ
K*KbU6	TBřd!Y&8/-PH^-3rljMoA츟UҤM~^8@$WMX{%	وz/R0jT+s!V'ZZ
RGĘ7`jR_2mX̳B54͇2R}kG'vqմ|Jm[KƢj~Fg,:$9nR*Na=GMr
pjgʋ&UTX%b/K<G0Ñ>s '-qU[?Yc'{@%$1ct%%<6@$7ۧ@&.1jh8pLPҐt(EͺAӴ"|BLT_y!p9p"8Yw>kX$~16OlV<>&}Gz 3N:jFLm̽T%]J:O xYdf%A .Bn6(<г`;bs
}7i~sR.[C{5r(ln;;^ש_T?jd<}"%E|Ud$r"˸j.bLyrATT]ZZ?IjD;\@QpGd@z9!VZ!qzcґU3	m*H&غU3Nf&QVjI9(a%
qNP^49W|ĊQsUYemPXz
!* \
B^lHPuɈ$V	v	9k"ew\ˆZc*<zk&8!單~%$ETMmE?E"hƷYi9׮	rt*(7
=aȒIJR[xAf\n"nݬy$EY㱊xx]u2P	
`<u<U­ct4o9Ngn)ɮ	K&B24#G1"Ve{<bⴝQ67Q m-3[Z#=p2Gh=gs>Ӛ

nr2Rϔ6ak\GaȄA"ҪAK[Hf%O]MC;15BXˎ~e'$$A5KUT2^
a1155*[2{e2*6<B]`$/O.ⶕ\^1W]o<I/_|:xY1{,_1vZw-@Bg>ڛ$Yaϓ[L]ͥK؍bk}>|Ȃ>!6Շ;U*y\"TM9SJ8uq_%Kܴ%.{e
ޤN*Y硒˽w+8(/6=q\y%U
2&ON *$L=(au:]2HA^K{0h!<]~zFnAZNI
=oX먬sdBeVhIT|l+J
rfS.S	{g@T3gIճxjij(pFG}K;Dk|;ž%'RF
,\[yECaw,}>i/r`OUMV_UahZIrTmGw%z)$( 
urKEpw
oPs]i,V#IRcusLFbW⛪LaܩMr[}Ҹ(re'QA8؊Pk&ѡD/l
h+'_˥]2-l(-gYI0y\vG1=~ԛ[24{5}gu\sV\0L@|Tѽ+l^vZ[#3
ǓVcu0W
חkW<9VQ9foN r/~s{D%(Z͜elK)7Ne€?BV\lX'Qg߭y5wpeL}ŏ?P9Aa@a>iP
5Uj{vy$k<ʅZ#R(3ix|īt㨆~XaVa
<r^FQIwv:'g܎Z,
BQpy>OĈP)YD&`4_*Yw\/66#cǴ,YmGMf):ޑPY0B[Vu)Wh'|ݍD"Y,UYA	n[fGo4Ihժz)atBTo
ΛF`N|4q]UAVL3*S>n8}z_shZz!YT
[ZHl
7aHoit?pkmZ1N𴱭"A>[9-,q'@A(r=#[ܭCNEmeߊ߇#j	n6!`'IiVOfNflvT$O:oZ_q+C^94'MVyj<:u,AU
Uq$D\l_l(Sa"cLh}*=7ҚZaQ	sKe="QXW?r/3Ps/H
cUDoX0.:;vN7Q
Vs
&m57St=
"Mτcr#).>xP iDQ2V`>D4=n]΢H@3I8s
}x@wm@8U^/:.
rmDyw(fw4kBw-󠄞	jaK{]zA%nsrbP^*BMM_'n	'c7#PR2m>[hR'B~PJ:ۣUyR?bUj8/\O80->m!^i3!DZ->}pCŘ{$ݿFAyU^F&f=C Qk
nhN@ɍnꮭ4?X@hA3:+xhEXaeV.BwYL7gIͬ!cno
J7ﵚ7ț<={*E671~Yޜ15`7/IhΖ@o7{͈{y+~kC=.V
D5?öDwoYS=Φ-75*b3&|291R26Ǵ9#I\9]fh5V\v.jLc#	b'jbQp]iN,)
E&.抛x5('^zR:dv.1ŲqzL@.pY,<57Z
**IUMFOeHVׁ>˜9'!mi</itYv)/Gqs(Y֛pAXe:?Myp.O~qs˽֊5/uŴV/$?JӤK/2's:H,%$)RdiÐ4)MK}Ŷݞ'Ht{Qj`^3YKXGLZ7 
ϕ`E(׷
AÝ+bfy8CYdHx1_#+cD5>6Hĕ ncWtݻe`PtRIxw<{~r򑽣B9>6)A	se?Zj}#:oGM塰	Eyx߭ɫ\T|YtFIҵ]B+Kw״qjL^|\eήagr6*gӢ1f+y9*y-UVOGr+I3!DƏ8aBH+*80Vu5_zo^QUTUVPO8ċ?f"rk_2WjR̝Ao08ICoa`I1G=h++EvptR9?FqmnyqjNoK2}c=lXQ\eυ;h%0ÈmZIU
/a&#]}]΍ܪ/7wU5(>JΖ`ȧGuj#~ z'WqrnKN%y+o-Փ=A<-P9JIQ}.dzk{e]f>n};Yu?$˹bxSƳLiuǃEk]~q-Mw/aеى>6+;S(v1ER
|Wnl	'zXOrY
ejm-΃=FJ|U>@4~Ň ٻ5Nh<lj'!e܉uNl ;o;Ām׫=ɽ<@1	CҬQ(w
nZ
ֈɕT-ydg3r]f9INMsSFf	y~܊
-[#YJ%zʝ ͇M@^tAel{ugb<:#(X4Fo
RIYX1K%PɊ˵UHUb'deW+1&Br;QbP;ڒrYԵMѓiMvS3\<MNȎt8RA,,2'+SUWg 8g@3vpa<G
,œd
N0}Z4Rnb	0``,lP(J1v*&I/9ATN}O"7k*	P3/qkW{]^UhHSц!O_}gC	c9\y?:-6-J<N׆\2;ۯ=`tx!$VB a/Y6]9*NYW1v9(g{RV2'4y}܊Crˎyy]BU:W)Ê<110m} 2[2%=S
$JN6ʫٿ;QQSUDz+vfZ{2z6b2*(`T*QR
2/mOs (Yj>n?fF_[UA.%ЎOBx2A( K8-$#2Q|@*Vuq0t;X:ݸ6VgIS}qݗcy@wN:	c|Lp%yT/Ǧ#*L\YJoĸdz-FA
<dm7pУG԰I1\UZL%E3-i*aje]!HN>*MΧTVWIq 0>(V[Rd F@U9}C5DE{2?lY9ԯv$?KӍ#Sj&7|J`Gmi,	3?a5{"BX.P!tK©J>V5YnnbdL<3|M%A&eЪ\%m$w<?hC=ݼCh`u?'#֣ͳYo1
mfT<+]o&@,ĉT%YΡ'
J~͙VHZscZ0(̚sIkkU`Xi588Ɂ/ErUG֟|?j%mQ=Ut4,6qFWD>9M{@8FCky:{o4JF!YcͶ+,!PuYC$Fz:JmuvN&cT
m싪TW?;u
o`@1Z};kMv]#[ޫfo->{:[:t\U==a0,l'xg3i6u42ii6 .dR"Zڀ	Ӫ<a44сiPUo@<P<-n
0tһĿ/}VXDnME
̧:Jl:/;4nzT҉E#cP	m_zXν 4}ӋX[JCֆ 0j[7آ8yK=nQ(uiB0};|sTl1y1ĶMQ<A{<@]d[P!x^+vrĠ4:)M{rp/ᆑ#ie$cc-$䵩Αj5Eۜ
n>̕xsEzOS)>U?6Ud9`]aKOR8J+t
K셭\&F6W5Bpc9.h0m4=vOV޼\
mGPZaPoYtWwR 	"_,}3UV*",DwbM(b$aI3õ	P2IVqҖ`vʾtU)5q;X
jKit(
 ɉ`A"/3wFBj
kxJ)R$$9{BrFgEJxfI;҂nM G#?-3h5Pc̞
IcIn[--nl}/$lC=)P|qv~Y&u	e5Bi14ka pQ)%{5SG|XW =s,λܴ=QN#(nO%QoM,ͣ)vlSX.rk؍s,/֍;}kd+_ bLk0<SuO<N	;+
Tp0:wSB:#xڣ"N< /i~y
V2u@T\Aา(GKjEkV>JJDIf2mc!腹JHH
۞_5
"kXW`,R91󑦈D!]8l_Z|zJ@c!ME0S/CMWHX7&2aoKQzM:HJ۸Me֯]RߑqsAw֌	qLn{(VGGot+=bK[RB3k//y(j'z@p2%^hCoN{3QeYa:H\'$(`Eׂuh-Lh	XT
<_5wPM墊tgZ5Љ`S}K0"[+W<'XgO~F|kǚk!1^|Xs1T$t/RC5xOs\TxF̗A:RJ
AAHlOxŸWӓm=Z1{zǤl7Pp[h;yK7	!&Kd	-vQ0IarS}k2Ztr0T7Q
kjy,q|\G6߅{|4ߔ$e=+;zCxs[DRyIc\7TxmΎA,eDy͸Vl5y[je9ݨ?"Yiѹ?78֘a-E0ʟ܅/ǷoTUMcHR8H;Nn
&m oH}!/nBLɘ.VOlxʼ(6+g*ψuġ觑יH3M+m"QoԜ˰&_L 0w2WΔ#`RUwd(-
-5@zH>ħe'bV?aٺ
_|DNoq>LE!tI_S=g0TK1nN*T`D
/-Yr6BB	Q?X>#|{o2!gdZshXK'INx98mCU'N@YR6L"Jb{B~J:0v(3CbXW#fO]|Jk^=zZgq(\om6]
6DoWMjQ/iONƝtS쯫IE.zdkbo?[>9m<ވZ'rj`mNfYQ<g2
.ʒŤZI.fRiA5B]J"'6A5<iH:T|37T>Me%F>^oUt}<.䀖MI-	MrEOHslHջX?\,1-VsW	GMƫ$j<rAHvl
^7?ǜtAM&w(łvM:xĶsJ`

dJq3YuQ`O4!z	G̿`AEql4YDuqŹC6B7-q#,}>pCQ, ӏ6nǴB9.KdbKBL0}kH̘wI`	dx	+h\l\rV87zsķ~ly_h4>
1K%U=#@ݼ
QҎ99!d*
tpYGm-	'Z岰_/&9C_5J:U<w㓤	i5\چL\!Eȍ5NBKG^`y`ڶ_^GXɌX;k'xF\!@k"	B'NVeKpV'Fj]ro'2
͜ۑqP_<f6Rݱ!ldfV߂r"$>xÝ 㖿0Jq=Ľod3c[9Z#"cTA \0]IYrigd\dT9'LO5|e~Rv3lUZ@>(oƃO7ZJx	AtR	 !n->o0
<&YA.V7drX~ڃQ
	&R"O37Q[5	+
R/1uqaVEb(t<6>$LŊ#B<sA
V1LR˗W2^2xf{G
BlPFx%j4^VOw	Ո#AQRtEլ
'ž'1ONMAܫ@)5`~(XqwgO^ߟHJj
-f<R-P{pѥ|\joqtŵBvBޕ#X@/(; %MMշ`gMF<-
DAM_k,JF*&IዟJ܇1O
I5_%
TJNb^߲TG r"N! o
oIY78!?_|7R.ДG;a9Lhwae<g@x疉 
Unob_&TՉx7bTQO蹲;<~W6	tÏ}.)+2SWX}]]GJSwCß'}nn-і9QXQϐNDzqp+azhY6`tmDl4>S	P բ#7vU12E-#Qe:`*k;8ʬúے2E)9[AFWJ(nx%8,"l}XL)[Wjviw{QOF4DFtf8.P-`2ŀV}Z>YC0WO)E#mL9\+k+OK\8WS5Ep܂U7_HU#?sML"fC?3՜hrOzf9S*pڗo^ul2Tƈ0/
2R祍tk2}!!D1ȲayIxf5 )r$PRr.*
	x~8o(+V1<ģ#i$d\1cd2Gd`0a"vR)ƑP:ua yl4@JE?1B=" +/\ЦP4mã5#0dRDhWy:vAxZ>Ycgp%W“"Ybl/%K\䑯'Օ#^¨L_T*y̓nlm1`pcFIx⊊a{}XՒ2H|)[>99N0Vq$zTqɄR	˨	HKWr|Άnz0]Y'u|t䳷b*A$>[م;cu&|E"Cu—
ʴXA
X\%GwX_:IkQ_te!H<@|Zr+!
BV-)TR2Бyޝ	?㉬W29bc"j;۔YvE"*8KyT>ꇘkxD`abj?շOM	uz(~:8(ZrX2[=qy:.~pelvcVZM],p4ja^]߄*.% C#:El+l৫<<Wƚ.`ĸP#j%Z{}4G%\VbIV\|<YqIywXIzE~R{>}ŁMM69S	AS4'.ԗ[I-M@
37wlT7z{sn亹O+q+-aL#.0pt;T8-ݚH(<Qs̈qfi{;_<R
X
]Ջena=5MKJg0o܁]iZ
(
h`,XVum$䊁;aat%		kqe'M+ƽ+:@TSeW5T]U'Ž!rȬ\8abQ$D-BȲ&P[cYd^lKcuNim<c2(z~3,HUo
gN[w/݈u:_W$UmlM54OOMN^ҿ}>Iݬq-fS|Y)ZA\/n`|6ԊZHNWow~դ@mCxPn>Ni
DDbJԺMQ2chWijWeWٮQ&,p
s.X00PV
k:Mji8hޢ;n_)[D&{TcL;cD~brGxߖ3lЧ Qp-ì#Y}ÉBPb
-D
"خrժj^%
<hJ%ctN4\҇XGH
d
FU-q.ôYeI#hw/@U<*yNvL9[{-e%drDcS
PVrڌMw5_e%Y緔O<kuk`Qtli^_4D
n#U+E:9B#RfFrhDoTHr}æYTksӣmV<SHrQ Y95T¸Y<еq#̗jhO:01]{gBb:Y;c:֥|(S^Ce6OUϚ1<'\
"F	t_޷hUC>&Kzڤ8Np)g/f*	%cj4J)QӂZPw.'m:f8Mcv6,7E]9G}!9I5#rd.(Z2{q̓;F
Ke3N]vs$
d6AyCn莆N;)*<DWfF9$m_Ʋ
ݰ?x
gk_=^ˁ|ޚbivDJ4lь7$graN兛eP	wmLf\-LK@M[:,\n-o|2eQq4'[J>b!$K7?*ح*PQzv+HS!AHoA6AwڱUFaOYy|Xtࡪ!vW)*OR!yˊ|؟^E"".JI[sڊdOhp6Go,߅LmH4"%e
Wz—90Go!Fۃ5yǘ>O7
	)]`I?Z?WKgUVixWl"(S%H`5*G964 h|'%v5"`O]y\طdKM%usgC?xM67oy_pgB+ki -6U
xU]NT(<S)z݂(/222V2Q&+t9$UlX7/܌[J.کh>[:) ǽTf/x.x;~TJj'׮U{ʉFC;6	{rzO-&g,dl湽c^4tO^qPl zS-Tؒ%9
eM,z~0)uZB,w?9U ul],ߙbc+!7yp3$͇[Zrѥ9	IZϢ?K[9
)H=1H4WA:v̤HIKYU3Qqkm\ٞ"
:rH!!G>ۊY;peL)˥{Jh|Y@Qw|
|g0F~Y9S{lvɉy~8ѥ\K݆j,X5ڧ^Hb@(Av`쑸!nG?5qk|mDam	TU[<q$Wz˓6?2cvZ%ctc=]2^e)7+QKQ\9-[sDh8p-fJTijòkw")5[9fUFhu{}تP.N|+QK؉0?@x!;8Y3R*&Ԗ(^TOwgUÜMyi`k-%?/M<H,ݎ>C|ʃ6{ё-fE/$an`	{N:i9oIB!OIJMZʻ$\~;"3[dϏcdzn%4,rb)"t3Pvsq}.$/ݱ
=%bD$N7kM3>݁5 +ykz^J4Dzdu`PVҔAxuA^/U
*wk'9zOߓc/O?8DAb7>sv0m4,?N?D2|l1^}m|yt4|45Z
}ľXz5*I/6Tt~	H2nYx1T)jmJ̒"5uRύEM>Fҥ4O5=DmcRGm%n\\w+=4gՎ[kf81տ4cF?
iqk7-
҆-h.[`	
U\_Z{1(_i$gԳ)}
́;
86owݤJs\}gABmd\#+}5vQ4D}a
	ӯf?_'B%cl0'XD(}!aЂ壣׬'''Iq=|<]-ǗO)ilԄH71Fͩ1pnC.;L)v<JneW8;&)U
nӵ JYC%J8H+0l*Ov/֋vӦIZ2Sm?獞]֥+f@&RcaY@uܸs/bi:1p+l2%T$?{,ωKP$~F-?rb.$k82XU]]rDmR1,igJZ]:u|ps.{|;35pc%!<]4nbr
C*n8/C3tTu=A؎uG.
2HQ*4vP3Àڗ
}OT>qDi
U
Y@Wb?¼e_
[1%:l5Ɵ>75W\ i	OyV^F6`Ep
KA>`4Ihbk/C&@]!
4v70ƄI
Χ<mN @xrZu0T(|U1469ܩlD
!~`ơԗa OV[K4KgQR݈
a@Eۓ=P?>ǴᚊnFH6Ae/jk%R?{8}Y2*m\1u|llIAc9G>*q̒^_`'=~*SIwY*25zs[b͂
[B|xz҇$~ptês<ZoClu|iŭ _4GmZd>#oT$Q`/
{YO~:l<6J"ȸh1E+4p}B'%xɋ񓐫3VE[ǂ}!JxӔ3`H)7"jbt>0Pfn7_>i|Z_[4Ԕ%u^-1ݽ5xq>)Q !KqЅ ¿
m9X
j[1V7^ˇ2Nyvt?jywMu취E$/OE.׉dӷO÷N:"Ǻ~-"ȶ&?6o	XFYJd\&잯w`_:
+vM	K:f'>*oIXD.R-RW<</.w'm%$(?Y!z1b
bϰ9NR@6(8Z٥/up-\$<QkDVVᦙDHaɀsff/aFbTH}Z\-bpH5<5qPfo6u";P鮁p@c2r%* FtUk,U&lR+h3I^0JWoTFm][PO]D/<8"W&WD]wVtvtbR2&^Gߠ{)]1lO}y1&rBVR>VCG"$?d-USH?d"(hˬs7ܴ7{6e)_2__"U܊޼>3ua+:]#
qI𜿂'FZoힻ֖nwqBCSh_˃>Vp.',r3%Z,k<k#;[{<"βzOsUF1a7~̑fo.QCc~Ƌa
Qm݊Lٛp9c@3Q&kXSB3,^q羑o@E֖B
Wy*=B,R>-	)_: VIoОXɧy$E~(n4G8b)DZN
pnLq;Luk8!
sx]54;?Ӏ-'W+aGv}E#u?~ 1du9i
8 5 [3dlXNĵtP=˻=g.,3Շ|s}W4ol%Z#suX(.Z/2ȒmSgYZ
[-- Attachment #4 --]
Oliver Pinter (1):
      kernel: update OP kernel config, added iwn2030fw

adrian (44):
      Add #ifdef wrapper around definitions so they aren't included multiple     times.
      Break out the debug code into a new include file in preparation for     some more iwn work.
      Temporarily disable multi-rate retry (link quality) and eliminate rate     index lookups.
      Begin fleshing out a knob to enable/disable bluetooth coexistence.
      add 0x8b, lifted from Linux iwlegacy/commands.h
      Fix the PLCP lookup code in iwn(4) to base the 11n decision on whether     the rate is 11n, rather than whether the channel is 11n.
      Don't base the rate table selection based on the channel mode;     it needs to check whether there are rate entries in there or not.
      Remove trailing whitespace.
      Add device ids for the Centrino 2x00 devices.
      Add Bluetooth/PAN (personal area networking) commands.
      Add some new driver definitions as part of the chip support updates:
      Send EAPOL frames at the management rate, not the data rate.
      Use IWN_NBANDS rather than a hard-coded limit.
      Fix off-by-one. Sorry!
      Replace the hard-coded RX queue value check with IWN_UNSOLICITED_RX_NOTIF.
      If A-MPDU transmission fails entirely, then no BA is received from the     NIC and pushed up to the driver.  Unfortunately this means there's     no rate control notification done.  Thus, if the rate control code     makes a decision that hits a crappy rate that can't succeed, the     rate code would never lower the rate and packet loss would continue.
      Don't default to antennas A+B; some NICs use Antennas B+C to transmit.
      Comment what 'mimo' does in the link quality table.
      Use the negotiated HT rate set when generating the link quality table.
      Grr. For some odd reason, setting this to a single antenna on my 5100     (which is a 1x2 device) panics the firmware.
      Fix up the link quality lookup and re-enable multi-rate retry.
      Commit over some work to prepare the iwn(4) driver for further chipset     support.
      Correctly initialise the 2-chain antenna mask in the link quality table.
      Leave a note that the 5300 is a 3x3 NIC.
      This is "scan_flags" from Linux.
      Fix (I think!) the scan timeouts on the intel NICs.
      Add a new debug section.
      Add definitions for the microcode TLV flags entry (type 18.)
      Use the correct endian-ness accessor for this TLV field.     (It's coming from firmware and thus it's defined as little-endian.)
      Disable this debugging - it's far too verbose when doing TX rate debugging.
      Add some code to double-check whether we're correctly populating the     TX ring according to what the firmware requires.
      Add some sanity checks to the TLV fetch.
      Oops - fix bad indent. Sorry!
      Log the rx ring offset as part of the debug message.
      Overhaul the iwn(4) scan infrastructure to be slightly more "correct"     for these chipsets.
      * Sort the copyright lines by date     * Ok ok, I've touched this enough to claim part of it.
      Add some PLCP thresholds from Linux iwlwifi driver in preparation for     working on some RF tuning issues.
      Begin fleshing out some code to handle tracking PLCP error rates     in preparation for the scan based retune logic.
      Refactor out the scan channel to be assigned early on in iwn_scan()     rather than it all being a mess of 'c' and 'ic->ic_curchan'.
      Add a channel parameter to iwn_scan().
      Refactor out the scan id and scan vap as part of the scan work.
      Add some initial support for the Intel 6235.
      Fix the Intel 6150 support.
      Move the retune notification print to a debug print.

eadler (1):
      Centrino Wireless-N 2200 does not have bluetooth support.

gavin (1):
      Add support for the Intel Centrino Wireless-N 135 chipset.

glebius (1):
      The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare     to this event, adding if_var.h to files that do need it. Also, include     all includes that now are included due to implicit pollution via if_var.h

kevlo (1):
      Rename definition of IEEE80211_FC1_WEP to IEEE80211_FC1_PROTECTED.

marius (2):
      - There's no need to keep track of resource IDs.     - Simplify MSI allocation and release. For a single one, we don't need to       fiddle with the MSI count and pci_release_msi(9) is smart enough to just       do nothing in case of INTx.     - Don't allocate MSI as RF_SHAREABLE.     - Use DEVMETHOD_END.     - Use NULL instead of 0 for pointers.
      - Probe with BUS_PROBE_DEFAULT instead of 0.     - Remove clearing PCIM_CMD_INTxDIS; pci(4) will do that as appropriate since       r189367.


[-- Attachment #5 --]
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

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAPjTQNFRi2S6SpBFaByfFU76tipL8G4Uh2gL7k-KUzTaC67ZBg>