Date: Fri, 13 Apr 2007 14:40:07 GMT From: Boris Samorodov <bsam@ipt.ru> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/106488: [patch] [twa] twa driver out of date Message-ID: <200704131440.l3DEe7ci090274@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/106488; it has been noted by GNATS. From: Boris Samorodov <bsam@ipt.ru> To: bug-followup@FreeBSD.org,mandrews@bit0.com Cc: Subject: Re: kern/106488: [patch] [twa] twa driver out of date Date: Fri, 13 Apr 2007 18:39:27 +0400 --=-=-= Well, /sys/modules/twa/Makefile and /sys/conf/files should also be changed, /sys/dev/twa/tw_cl_fwimg.c removed. For those who wish to test (and may be commit), here are instructions and unified diffs between 4.9.1 vendor version and the cvs tree: # cd /usr/src # patch < twa-7.x.diff (note for 6-x use twa-6.x.diff, tested at 6.2-STABLE) and remove /sys/dev/twa/tw_cl_fwimg.c file! Actually, both 7.x and 6.x patches are the same (may be minus lines drift), but the diffs for /sys/conf/files are not the same. ;-) Changes since previous version: . added support for 9000 PCIe series cards; . flashing stuff removed. WBR -- bsam --=-=-= Content-Disposition: attachment; filename=twa-7.x.diff.bz2.uu Content-Description: 7.x patch begin 644 twa-7.x.diff.bz2 M0EIH.3%!629364]E;$0`--E_@'@R$`!__________K____]@1!SJ`H>VV&DN M>HXS14IW;ILV[[Y]WFZ^^3OO-<>]WG6[[MWR7V#UU"KYCW9]MGN^]GWMKJ@; MX%N0AGWWW//KWU]]WUW>>OC[VJO0H.V^P7WGT>VCX;->][OK6VT:TW.QW6E. M%HVZ[D9/KT\KS9/O>]>"DV9J6R\QJ=KWW7IVW;W+4^MWFYJ\[KI5V<3TR]NQ MJ/5>'O<I[>.+7W95QZ:Y&T/JKM<6/9O"*\CO5W40BX)32!``@)D&IIHTTFU, M3)B4_(IY-384WJ:@>4/*!M1H)30(0@)#0`C3*331Z1M30>H:9,3(-!ZAH`-` M)&I(24\C34]*>F%'I&TU`Q/"3U`R!Z@TT:!H&AH-`(4B(FDGJFVFIJGDQ,T) MJ/)&:GJ:&C-3U'I!ZFC0'J&AD`")(@C0$9-4\0E/]3:)E3]4T]3U'M4],TC2 M-ZH]1^DCU'J#U&@&@(DA`@$`TC2>B(]3:A#Q)Z@-``-J:`T``'L@GBP)RJ]J M@2@`(A`P81!?+TIN2BS$,@,@,HJIB"AKWRE+;W%N,;JY8,*$FI1"8V-6Y,P0 M0Q^'`-QH?VJ3X-!HYC[>I/OX&]-&)Q3!*A;+24EC.;,3`J6G!9K-0O+X3,NM MI:4I:&<,UI):'"W"F9SHS,1LM@M$)5AF/F0&PFFR@M&4*>GCC-KM,1E,&C2T MJP5%#Y+T4Z+\7QNO["'`%.0D;&]A'!7M4PL:7/W9Z>S[_P.IO29^)Y@X/?_# MK@#5+6EA[LM"P;=Z(6P;!L:P;:"6=GR:SI0WF$:57)Q:M--2:++DY]E\MUT3 MGB+-.G(LKE:66ABQXX.-M!O&3.\EEFN%5%6VE*62P:5$:-BDL-Z(%MMR=*0P M,5ELHV-C2AQ0PPJU4S)A*9<R&7+,F4IF6H%6%66C8$A"BBJJHR)317./;!4] M_#N-5U')B,QT+L$:[L*',=&@<`F/:?<=/##MODZ?/YM;;U0O:QR<_+;6BS:Q MEMJAZ+,$3YYJ_DTJQ>87LTPZ,]\.7([;`GB"?M_$>ZI4)(MZ.&N=;;0FH^"V M[:C%#VX\6&@9@]`8A&5!D%14$&0854Q$6)F56#7EAHU$1-5$)9C189389&89 M,3[DAXP;@;99A+GEB!OK6%MJ,%!*-J8VI9,*#*4(+((R.,0R$U"?;C)9"8"( MT494886&$$#-'PF80TL1HQ86MK*):`):EMB4$I:@#02E2G;W769&&8S+;0I: M75J4#'L6JLP3<U$P1#UL)XC'&8<BDXZ0AD.[?37[-_M479Q'[RV2_U[JH5,) M%WML#*W_[I>HJ%!V<3P:!`FYW],[OV7_F%>$3"MR$4%K-KO$>2`G\/2KYC0Z M;9H2C.5T"9G$&'=WAX'38(#PEFHHB1E`<C$$_;>VO]I;$:-0;`OR<,8.R+'; MADFM"4=F3I).SDQ,O2BI3BJ?LF)D1YB"%+N[)NO=:B::!,A`A-`X^//C)C%^ MF&S#F@TGMH7>*4:P$,H<D36P[-J'A1#/,FSK-8-UII:9JW'*.3MV#0]NMD]K MEF*'O<M8/R,+C@HE-O"DRA=74MRI4MI5!:,#YN_3OG8/J'>"`D"G^)+2PZQ@ M\;LP50.BA3]A@F[N?7`?0?SI9K9]<")FX2>&^/4CFB0@;/+"D(O1U^J*#`E" M+07#U/"BX4_X,"N$D+S(YID9`?X'OF_&ZX3`A5Y<4L/_[53-2["0\F\577&A M,7]]MGPJ<8.0P)3/9V#'/S^CTQ)1_#A5GN/^_%EZE#F\6@[<Z`LZ^;F.>))A M#)CSA$@WR8N2B[S!%8@0A@?C)=T1B0O1RNHE]YX"_$5U8T]'$@;#<].@5RB7 M"U$/5*4AM^AU/J<.W?L/7*-LM\/.\E"L/OHUH;&ST4(?%R#:C8!JUKQ]+D'= MEO@8W=G*>O,M2,D80?KTY"E,I475%DQ&T2T,Z5_5$(J2(9KA?P0C+!MJ;<MH MVUJ$IS'X(8P$W!O5LX&&UK;546%P(0LX1((=AXT"`B+J6=51(E,VF:/OU$)! M2Z/D)E0_D4(^!0Y5B=@5`.)"22PH3=AY:R0"T%!FVDW"'O?-JM'S<O,]+9:( MBSNWMM-#+DN8H&FE;$WNW.WE-#L0-7;J3=$)JN'>QS$!&;N/:=C;P7P]YY5\ M;/$8+IP<:^/9ZG2\<)-[%;Q[/%W8_)J\R;'=N<2=PY7^$AQ)B0#H=21M\$:F M;MR7'7M5-",?RL>@V)J"WTC'L,D#HIJV80).(0)\[Y<<JK$K=X9TN\#$T89@ M7V'6T;^D3F1UH.7=GWI;2VV'.\[&TIT@F>.C]%IU(;.A3<9%ICBV#)(228Q[ M68+9V^+P0N.A==[X2*^J,$2??5&_@]5K`/0OO^>N-%.D\P\0I$S^,3,HB.GV MI(^A)SEO\LS:'\-O=M=6N68W,<L_A?:"'LGF[H3QOG\_N_,$.8#X9`)U%BBQ M``OA#C>4CJ``VH?*GH]L^L=F!!#C7D(3:DH^OU/<1X>^LJ_']X^@^I<&VY2; M4]D#]WK2.ED$_/X_P?-P./6.<9A6HP?XO8_2Y\D3E\V0NH>L,8A^&]+D0^F( M$JL/M^<MNX<?CS\WP\[D`J-8PS4<&@)NLP=CZ,=G*(7Y%DH^$U7-?9<'(NP_ M%CB?/QJUGO'J/##&&2?:#MI0OJV9`-C8UD(3KIL0*0-B!@X)1:GSL+H@)K14 MJ)JR8QEIX[)P%RF<6L:$$X)`N[O\B5L#H=GQW;5_9[D)6NXP_=-?NB+2A(7Y M=_H\<M47.#FU'W1V2W8(:K;;5E^650VY&';SZ]5U86JS#![+:GR>\NQI[W>> MZ@KG[["!>KDZ0A^/"929;6QU80R3,DC[N%SD)44\\\G2=IZ:#=RVS+5Z&R^! M.O+'9=MNL)YD0LGGF7(0JBENPK@'IKM*&200@37P[[CZ:F^R?8(?9]D7U_?A M8G^Z>]6_Y\V28NYFU5VU+#`3[\$8FVEWC3B4:RJP^LXN3`96'S<X3.D7MZEZ MNZ<$/]#;TNX.1MV(:;=T=A>Y&`[Z_G45T^4]Q/W`GL@GXCAE#Q^/[IK4%.>K M-'*\Q5"%*@D)`%<YX##[_:#%U$>P@CT\=FR;$T,R03&,D%/?Y,I_*=HR"@[# MN'G9@]Z\GJH9,,8L]6IE'A\0B_7XFQ31_\TO4!.8.SMV;">D0^KAU_Q_U&QA MUC?7/55LN'"8,>._\=OE:RS`3M4.F:_V#^8\Q?YGAOIGX+#[;8WO?5#NY`B/ MNXQB#'`^6K;]WQ-+W8,$FF^;&1?]]GWMN`TF,<V;HP95[KM))MDVC;&%O\ST M5AJ-R!$G`H8V:WE@<2#ZN]Z\A6!FPMDX$"5<_-=/5]?L^AL?*-53>'USW5C% MLK8"@T6?/FX:.G&<ZSF(0N;GX\=E@A#)!AX!@]1WLP.P'D1WE8P4K&#"XOL! MBHJ@AJO:R>L^4^?<>G"<WS_9<U$^84)@Y4[("$@AWBA!O+VU=Q+3SWV8IK)C M,\^G&Z&![.-ET)])AKC"7I"0W;(AQ_#LP(8TR-K:=97?L*%*&G/(A9WB=E.@ M3LLTNH(_&H35I2^+8:7^^9/J1O@X8&0+@OI^I>]0BDN:CO<.1'50.06M:32: M/RFEVLIJ/PZ=9!@&LFAI24\6X3`S0H=%U)D@)K`B940;.]+`3KUZ7SA6-P&@ M6LF44%D2T+(,H$(&;%UT#$V'+/E?`AWJ$AFSN?O/I4+.AK_!@>?PQ)NT8!C" M<8H1OC!,C>2OGH[G8>]9SCC>2?UN<[+]JQQN$.V..C.U;DP<;$9FX1].J_KZ M8V4[!FM#]9\\E/9L,?/*U'+[?Z.]9OQ8@]>7Y;7OI"#2'V8[)-O*WA(I-$2I MF#$^T8HP^RD_MV6>+0I-KGQ-D0W8W.JEK6S(3=1$JC:4UI148ZXUJ_*N>5+A M/"[<0QL3U@B`X67XN3H)B$D?V)F#UZ,L5]NST0-Z08,"#--VZQ<;[S\AQ-+\ MN?'UU,1=S$VKA\@5&-.!T:KE>9+4:ML8R6C(9C8AWG!99_S^H&J^"G36S)NL M?':QQM56.-K2](,>218;;["MGW)KQ;ZH0$R&$O#0AM7V3XMG==8YUCCX1A`1 M?A7;U=`K=M6>[9?%I*LBK),P<^I*BL*G>C=:G!T3QH8OE>2]F%:'Z<;+35,Q MCN\WQJV8EARP++#2<-&SD)5+.L;5#66:=9]J0H[(8\7*!U7'MZ51$PQY6SWD M3.47??TQIM?6NVV3LX\598CF>5,8.30F2\B)Q/)C**-VYO".ZR63\)CM$2?X M^B"&\TLXP>X($"C`+G0[R3<(/J29+*<"X1='UD-6+.6'RH;2,'T^F`B<N1[) MA2\Q`G\.I^;'HY7CA-Z^T.QN.H]5-,V0:OE#G1Z(ESILSUZ*@I-T1WQY<ZX, M/K+5M5L_EN'],)F%EF+_T%K*]?\4&6S8>Y'N.6]`I;S;CPYZHPR38]>[>/8W MTH<_H4;C\W>UHWI[\]4L+IU2_C!@JE>0#;HYC*II"VVEUCD^EK7R]0JZFJ&# MKI&$'M4*7,4=XL^\>(,5K88+-<!V0%;$;:Z]?S=#,%M5<V8Z%;F_B^UC&BF( M23K#?IKK)?/J9@3?R\H^&<0]2CT<]55555555556K555JU:M7P[4[QOW>8Z+ MU]WHG@\`]K7K[;/-'PUM[;2O.WHQHKK.G\WILUFH:48UUFZZ[2/?5XW?A\%D MHXY[&]]5O;Y;A9VU5LHZ6ZQU(KF_&=WYSK%/?5'GY=-[[['&>BZ!$3,=U%2. M(ZZ>`EDVOSRQ+Y[N1IM;'Q@H3I.=5/*F[(A+M*]<[7H8FB0`C1:Q%7O]=0QW M?5=Z*'S<P35F;5AORDW./#TW'CYX],>+33?5D\84[AHE_%XT"<N&AH5NVZ*] M6B4[71>[R7.LHAV^XL5GT3NM_M<(#*8[,T:@HB:4B0OV^A@2'M[%X0_=?3[Y M^<#H&.C>/H(./P^!]R3Q.G6,["272:7Q(PU?E^,I55R4CSQF"4>=!N<')-NX MY#NSB8<=$,QH,C1K4'R$4WRQ9BR$L$5#0Y&5F`9?<LIHB29!I!8J%(4/)+]P M^(2!Z)X(V2EH!.^'0MA11@AW=TE:K@31_W&#Y6#V\3-WW&Z`_L]&T&P:YB!^ M/W9U^^^P/O\WP]1K>1IV6:C($M2TQ2##UC',_"ONM\$U6S*H`^J"QD'V8Q_] M-'`MS7&+IDQ(0)\)Q$AAFW:6V!A+>P*?-`=)=J./^!27#+E'T<`K89,%VJCF MOP.1=.-Y0=R0K!G-Q"S!>XX1WAP8Y;0US*[RZT/DA7AE=;2F%0J2D2NPP0H4 M-K`1.+R.OVR<$.F'K0Y_M^6TNU!$H'!=!,)K*S>U`IC$G<@1T\#-E3HF6D@2 M,#VFY6H!WAZ6LG(.)M,2KA@@Q),L3FC&.0>;PMQ@]7G^&36_XTI#JJ(FR%>E MDM/=40:_TN]S[_S'*-J-AR'G0N"63>68_W#E?]LV,>+CB-0\)0`F.T+RSE\. M7Y=0PS9UE;!^&.'P.-66U_VLEF>#\+</;TYK\?KFB3QQ[H_*I4G?WQ6OQZZ5 M$';,AF3+?IGVL\N'`WFP.<@SM0;J.E#\:OC"0&1D^U@UR;%')';]/+;%L*MC M_YPM/?3=J3.QU]K9^Y&HCSS2@:&1Z0E\C3]W94N:3-J:-9T)6EL:=OW?PY== M5FF=]K9^^'MHVUN]WUU0Y^QK+/P'^SM5!6<F<M]%/%0NU>3"O2ZO7%W5O4K/ M3%97K'OT("RNJ<7H(.89=Q?=EC54D>.OEEN(5U:2"O'R6\L*YWY5QR,"LCD[ MF&+T[;;U;2KC15<&9(E(X+*DP>N-TM4X7,6)-W.5R30;GJ'UAQ@)$@1BA(0D MBQ0I#*!!"$E)"+)!%),A23,$0A4DLLS3$HI%!-5$7Z(R(IB(@FH*%@@)I)F: M@B:0K_P@%?P0H!X0AOW\*F9DH"(B(BH(@DHDA+ZU$R4@(A&(E0B!]0)014^Y MH$]MU%;P^P+OB>9T.NKH\8_!=FYX>SOBUZXDD/UQZ7U!TCO_2WU^VSGN?.5) M4LFV6.KG8+V8C9%LLA;.Y39\"NM_&\A#4&R',^SX8",%&_8W\POE5^3C%\;Q MH!?7N#OWC.R67]`B+;K6:@((=1LU0#?Q1QX^8_Z7P_3TG1O^^/4'-XM3'34: M>[F.;/7RXI),MP-S,V(&YJ1-X>H*N=X1*ANH?6$",8FH4XZH?9%YK`I_*GXT MW5>LS:P&S;4W(A\WC9L\C[;\;U&1VZGLI/0HVLKWMMQ/FE"#6;H'/JLH7VU' MDQ,(&,(\ZOPO,_,8JN_H/C\_Z5ZW[0\Q/B\BBJ/65@>B/CG&*^4ZT.\&9A:O M-0L8NGS(P2A@RC.+A@(N9NW5.7C6A\3>M2:NX?5PKUJ'58E0H*=]*HUJ-8A/ MC.96-52M[TTH9D:)J,E5FM8JU&NFFF6*MEG;78W1_`R09SD_&`BI]R1%/TQ: M!"E4&D_1V-#YC@$P":P`N`G!48HK><M9)'O-#XGTB-P8`1:C!@!LD&0884*4 MP#`F'>-&I+-RU5"$H&(0;U@:#9K3I2#1BRAM0R-K$")22EHV]YJE!_2;]O/G MA3($A`3,P1L'[=CFB<=R!\Z&8A\L7M,KAF".CC_:^48^-G@FUF?;?6MU<V[X M6OP?B?/JP^@[#_*&<$IT=I=2C/Y8\8QXJZ7VW4&7Z,TUU?DW@ALZ%*+RGM"8 MUW7V"\289F_4Z?K*'R=ZSQP?-^>>Q*48U$1%5=W=W=.]D7=U=.(]J#XN_L3' MF\YZG?SN5*HBXY6XN7!:MQRX+6-QRVY6S/CKXDTVFA]BBKB_K*4S?4-_O*0H M0L4-E3/KIJ!KX+:[:S!6#8TEMJME"E"J0ZDWK#(P@(2$PJPC>O\CR/O^[X_6 MGX0\`R/R%`(=0X`GNLG4$\:!/!$Y_1/+-JB$,$BB'G%3F_W%;+>=ZX/*))F4 MG9@[7_,1^!&4&XBC!G]9Z_G/+*'R^R^,A*T`<H,@)Y""IO-2ICX`)T6F^,!` MJ)2I'K-E1UZ]NV^A!O_%,U]_>Q=]>N]R"R([@0T*RB6G'EBRI<0F,7R+PY&M MG@,*3XSG_X&:G<DI"SM_O8Q$S%H67WKM\H]9M3G[1TE"FJEHFA[N1BD-YW4! MYSUC`0$6V;U5?M&#[A@P?!@-6Z<X5*DV`JVTG\[Y'2>450B$0BJJJBK_*$S. MT'9Z+G5&.J"3K&6#.W5K*+2/(TM@,&/7-XV.'=F8R&08SVUG@_(:(2(R7X<+ MR7AE9T*,32?@_%^AL58LF4W/>JV=]K]SXFA=?=@VT%7L,8"6[@.>\/',4TFR M+.8/EL2@:0,CAK(=$,TL&@9*Y@Q](N,;_"/AL9&*Y'LO76V..QW4H#N/)Y)[ M;S165!;79@&@[7A8\MEXG?IRHDRYGV;L%8,;F2J)RYET2"0X/.UF7KE<7D6! M,=YCLW=L8I_9WG"[U3U=1O>,>RX1S<1X-V1V8"&`D)4]@IVQ#XD%?:Q/]C;O M-=)-SY5:T*7'5)^#K16)7*;1#>.4PQW&]'I7EAK>Q1;()0?F1%C>3AO-^\CG M!W,](/2='OE<S,-"V!E9D:,"A]CEG%-WGEF:7"C%/%+0,;<Z((P!S[)<#!KA M=!FAF!`P57;K+6V>;[;5JKZ]<XE<SQW.U<.1)_@SQ?88SH?M1RG:,6G':>\8 MXMHLSZ<MX&0&G9N[$`PRFF?JJCOSR]V3WEW9SHNB5=]=<D[UP?<-S&H<.9%) MSD[_R9JZYW$SDVNK+0E#(UE>&\'=2[0H3+N,Q4#0AF(&"%&M<<5%>$$VB^.# M`N.(D>18FZ=W,G0[,5Z>9`W0V5.[+HAB(8788N>Y@].^._F[\=9KOVCB*H>A M/,$/W>-6#%ELCJ$H-)C<3$VMS:CPT3QA5L]V1T9F%QA7F^+W:,3HE\FL<IJX M+,%G@,Q^!OWF;Z1_#S_5<_O@?V8@G!_6H3UHGJ/AYP3N!.CVDKL-7#FV\PQ0 M&("&(DRD"&-WJ7H]:/BOXK[/X:BR6,_HC)`9]?KA@_)Y\=>C]95G#N'UG&#) M]GM+VMX$S<*+*@_-_-C]4)Q<[[>&YZYS/K7CG75>>!]&L6K(N.F9TQ2\=+P; MIXSD9J*V)CQ_VN6-FXVGUOJ6+\>F+7X=%(BSN'=3MAT;2E"UQU#CVP,QHM?` MGGL+@([D:DSHL3-FB7=F6KA+%--%\;X`T4)-@^XAB)FK1KKF1B)6X#Y1E.-% M>R9]-_W1,4V*(;:0WW\8Q;\33E'Y<IF9_&JD.M<Y97W-]`&T!_S3"1DF8/=A MT?E_V-;AG>S2I]$N&BP8#@(,<94N4S)ED,#$(R"LRI;0@'CW2)_E]?[;"#_: M"9`KW:%^AK$!2L`2/;_L**THKFHKK_S0/<?5]J?E7^)K]P62OLCI8Z&S$3\2 M!NU_0?<C_1H"K=$T+FHAKD/Y_T'ZZY+H8&BZ4&%D%N3ZRMW%P"!O47:>QQ!Z MW7MV7':H9@&U0+615H34@C\(H>0QR`_9]J]38]O49QL'W$&F2`5^Q*N/`0]- M1]4I!2F^.P*:#!_0_2YMH,2!B#'[=E_1:RIP9SP)A4#`14$NQ>P@K\T3;04Y M8UP+"A^\LZAS!5WZ'<01)$A``9'`W(8@:$D6M>MG4PF\M09/@7.&>)-6@U0S M;-S6A<X"4E%J$V>1`<(JV+E>WN0HQ@R-'37;@B<N!?@VB.IB+GC.\HV#PU=C M8?RW^I<ULDP#(*Z-5DV5:1$=1-7_EV.SD($F[IA(*O%-=&$./"]Z"NQNV@D[ M:8)0"5$]S#5`S60.S0#8=OVW+X$-91!`,S-WH/$EW#J4?'+:OR#FCGEMVT46 M<B`Y[B8B*'A;>ZC>D$*5\0=R`46-H?J7@1"U9@JW387TA.")25W``&Q;!F!8 ML6'M@1A#`EVPAP!.=G@9,U`(P3Y,:-'E,#R&"`81P<H8?E;%.NR!,DV=&X$W M!S/+MGCS.D1-@?`\AZXP(O1@B#.3`]2&["#X#1B,YU/EH<'JG5&0,G!'5A_I MQ_,U&@#:%E&N,R3`7M.+)#A-CT`MI$D.PKGQ`X!`IPD5&=9ERA8O/C86#R:L M)#Q\P3S[!WP6(/'RT^8T_!WX?4(UHYKO*?(XP0GTZ3I%11%2U4LK!,!($A"0 MD(05^0=:R#30L[H;Q%FQV'KS=V!K-SE0AJ"T<-+N.B&I3E!0)V;!Z'L!*0J/ M]":E?YG%N!I$+HAJ!MG,!('I=?"2)@ET<9JJ@J/$%#P`-<B>?C)`YU6J.LY& M;F^0#,YYB&1&1BP"04+"AOZL!5Z:`JX#4\!<(F9TN\M#-#MVZF:%80"%)5)% ME0(%[\H+W*0313@AQ0-7H>:[U"Z*N@AGH9F-1@*N9J7"R),ZP@_CK0HS`+&9 MH3(26T-D%XEP58AL.U,/Q$C$$\8"7PPS,E;EP](P"EP:"%+QQ*)?30!I@:9M M1]N'`Y(@=2&+%\@JHTHC20.C2;![X3Y#",<J`-!VZ(#\=2(;:E7AJ:'H$%QS M"#Y<8"K7;'M:3B/AD>H)$[1R!#!/,B461`S`-'*X>;0!*N<3$S#M,G'R9C87 M4[TC^-&(H#X<`UW5&)F#&XP$&944B8&+7AQ$%53;F:QCN@28R6+4(`Z``.=K M'"8%1K#F"(B/7571OU[WJB;``(2286&0VSP^N0.$6EB>!?6";_."9%!C<SL` MM0H>?8#P0LE,`1/D-B4YF89G,$V!WD$,G$V$.]!;JY;>1J33:@&!B#L8B&>H M*+PR`R,46$.J9-1HRLBK9;+!;-P>P%Z:%.$F.NK>B'[C!.#&0,+.%!&MI5DS MRE&SEH61(<O(.SX3:*]H0,AU!EPT3AY0@0;B%\@FMLM@D5'3*BQS(]\3>P@H M#!'5.\WGW]QC"KB`JTH4Q$HRTH+!8(N:$&#W]M$.I5*:E*9T!],?4G+G%V$4 M$D59"&.1WE^J\-^^@5.HX<B&2A;71T,=.W-UH@NAE&0/FFB0[&.^QLEN2NT* M@V+`FJ4!@H'4..#->8OWHG;Z2>QK)S7IT;UD0I_I(_+MQB!+<X3()DOWB0-G M4-/"9NS4Z4*XEQ@-$X$NC89DAI"3H1A$21IP9LYQ4=$-**_#L4R@F6-)#D6& M$"J6!42JYO$0Y$#G.M6:HYD?(('LCUY.1E<R+T:*6+V(O_`B!0'F=L'8@O)V M!-\0/@07TR>IF_?;V(<`X%@3S+W"G/,'+Z+*_-(FA20U@>O9VVU.QL00HJU@ M2P)=$+-;UY(+6R*94&"!GS'""++((LE2JT"=79[1+[H>(;SN873J.NF1+`$' M4\(@=18:SVH>T/T_;[X3Z':!`')@Y]7Y/,/C4NX/#=5?52/'34&I'Y$`J3`> MKLF8>057.LV@ZO,-/:Y^!\0XUE=F2B+8MOT2@"Y',=:+S(E);X86SH891:I$ M-$"=H@B!B2AJ&*9"HH:I8B*A(&28D[O6?V0-)X'7'+/V*RY\A;A=MH8+HG8B M.O"CBK[\Y,A32,BI(S?J<5AJ0ES<=C#>3%=]'SCV7T=^=V9(\HO:]'3H%E`T M4P9ZY`^)<X)EBU=P!OY&!BXIQ7K"0K$%7*P)GHX6-"U(@:94"^PU,0R2V)O/ M`VZ\3>*`Y5J<`ZP58'$OS8[!$D)#7=RH=3:$)-L6=Q?(Z&`5:,%WH4+1$X<M MMQS,'*^3-Q-[;`Y:&#BZD0MB1H-9SL#'#$;8W!`D;!N3HN'ASIJ)(;!A=1W\ M6)<N!AP@N&@8-!AC3.PJ/T,C<P9]G76NOE^7YC'QY!V'Q_F(252:X!!^.J_. M;6'[OS8T^Z,9";Q_T0!;[?Y:@MC+>'YS((L6!"0AK@R`,#O3I=7F839_/U'0 MD!P+AW'<&B373MX?9VHFDH9HH)H3N9PS,+,9,,:S-J^?J]Q-=C8`I6`9N.&= M@Y-PCS,TB0=!,\\AV@2G7])RGF(\X,BN%&'"=`-/,!5$`)684KC:BQI23;9N MAL`VQC-B6(C!@]43,V`4)`(\+NG+6F3(3B'+!150X\MJ&JK946D3-T#>&EPX M+\F"H?HA$X.W6PG`C)YZ^7AW]_78Q0S:EG,(PC,),(ASJ'422`)3[04P:!3M M[%(EE>AN[4B0;8#&T`.`F]3,6!;_B[J60PF0AS#!2$(:FX2@F;Y4.GI2%2!9 M#H[C!"M6,&LI;()T)V0&!4M4`BX!B32G>^ILT)%Z'*6`WMQAT@.<7%*YR M$DPUG!HP7E21D_`H><C2:@!)C],;1%M(8)[+]*'3/`S`[D=``HW@3K=X0(P" M)LZI+OG#]\A@[,P3XJ%J,\_SQ3R=.(`1[4V4(O,!.>$/UH=_1]2(>;KJG;^" M=`Z?(P0?$W]2I[[6!/K[?`_*>JZ8@!Y9#1.X#H?.H7`XCN8Y<KC1`K5KF31, M8RH/;"2H$@0B1`-P3E,"J9\`F0?`%P!4I"*4-;=3S'5@Z@^@DDXT+V(7B"2( MM"8FG`W:%SPHT"]XFO;<UVA5;/!-:)7M01^*(=+V_5X4%G4V8S>J<%W&#M+U MG,))%##>8P:"</_F"A,%#AJ`:TT>J;D!S#6?,AI8W&H#!'5W?IH0WD!-;.`L M/=.T];BD$@0]$]!MJ(JJ]X>=L:?H?IUZX_99Q2LL=\TH<?=*-$*A+V2_.'&R M#G!#-]57CBC\$[[B=-XBW,&(M#%!X>=+=$@9JN@ZW<,@20J4,%JVC8T&ZA78 M!C6P^&6\Y/))KSVAH[]M(.#M&$;-G?6)+97N7W)<`@CV1ZAWM,7;`'(*!F"R M`#"ZB.PB/CD%((Y@;CJ_5@N'5@L"2)9B]@SN^JS>;U@CU-XAN4-R^!U+A=1& M@7KX;.5N\C"X8W]8:#1(DD)*CWXU8$Z)R5"/UN?002)D$G(Y"['4;4.9R(UU MXIAN7D80'*7HJ4M1"`L25,RLP_DUAJ-:0R**6T13#098F/1N.07@W40V@WBZ MH2-8ACH*D"[J!4WN\N/B*'N\[":..0)DH2I/5O%+IR%O-UB.V&B:S3E`*/5" M`D@:G!&%)8%I-43%NU&8T-"9+O(\(9QJW%QJ,!SBQIH/^B*(#IQTG9HM6'$. M'&8[5($H-S>0Q=W7DY.O=#W;,#K'`&`'!F"0@$'*4Q]*A&_D'!)01(UXT+J+ MSX!OB\B\60=:K])T0Q(A)"N8G<?G`2.XY?M$A0&R7+@=T2F/4I@OE5!(`MJ3 MEX20)&0C05X;T390]S0JG\P)T4.=C''E<NHCK-D)VP\FVG=!HA*XV"I4`D22 MQ#WSG0CIHZ;WJ+<4AZNAAJ<)#X9-07!7@07(30(%:J*?%/3"+*@V0:C<,#@+ M$?H0T-;$XL+6;N41;`>D+U!TO<H*46D(^:?V5]QL)A)L%X?URA3>:GU;W!0J M&0QH;!MX&Z.[,3L9AT(?4#LZ'C83Q+ZP!V@JF8).<Y%17/,G'TOT1S3MT=LV MXY]O`WWI,*4DR`YJ%J,,SLH4/*:D.1`L0.$#`Y2ZW>3"8?/R@.7,$%`;3R3\ MM%!6;8KDYPP9:,;J@1UV[<NW31G+-P/"ZDG'4K/3K>2TAW;WN,:5Q#,,[IVW M&B(W8V8R\>JPK@1OL(DFT6E=]W+NVU-.*&\*3MG*][DN;/=K6C($C	IH8$ MA@0N7%A`,N2V(&+-3`)&FJXWDK'PCS]>W',Y4445W@G+/5$[XF@KA7`.9L=D M`,@.'"BE2QHA%BA;F_;L4B[1I.A52,`?:9#RW=V9CS[.0:YN,.9>Y*,.Z>FR M,P/4Y0Q;%N[X=/-S!O=$2SQ-.ULUND62]IUV&!\7,7(D`;HZ(T:_A9.S":$. MJ@"$*Y/#6BIU<AH1+HX(.84[9>?3,[--,O2VOJ7]\*^D:0\-WGX1`\8U%0=D MEB*_1&V.5E>+U9C6?5Y1A#+CM?""*=UMYOU0U$KCB&%"R1*^"SNNF[W")[/; MDB`D(*]>NU'IQ;$)"_)Q["_CDH4D)[#Q:>':\5GH>#-S4V`&870L2FH5FC>2 M.Q62?99>/<*8RN"G-4XG<A[3TGTLA(1AS)W1J$C)&2$;%_38U+QU==K*%MFY M1XW'][ED_`H@8A_%I^2IDA0S!Z(R0_\FG1/E\Z146DZ."?4X(G:$]R^ZP1$/ MF0[2ZD3I"20X'Q'@2?#]2>]L^Y;DHXAD;U21LL8#TWKOT9R=`3,S@0WMA0Z; MA#043[=WSJG?K@%\034$VMA(B=J)40/U#4($U$T+Q43<'F"4B)XV(/Q%$UD_ M>P7(R5L<"+23@:Y5TP14)8=@R!S,7T$U"1*!0^+@V(6!.371PT"<[&!/F*). MNA$C*/B)">Q8.1`^E('BK3V:$0#:ZI-]&8(T/<+3$IIBGV-#?IB<TFY&F](. M&%LFW0+QL&J&(1!.:AM1I;9K#YC6U+)5#)0W4[#IVV.OMR$[:NMCAL2$JK!T MLF6[%5)83<\#3@G!KN9[)8O"J6!'H<*5;I=JL"*),3@-:,&V$GNN<!BG4.$- M@8&$59'0=AOTFU0U.R`"=1M700A8=XGIV`)M,"(;`'N/32#14\Y`D*AK:,Q( MU.M.%4L46615UCUM<@ZUQBJ1B)B56!N,$%)]40I.9V63$2.(0.`,`#^.`H0* M0:0H+!7MY=W;J%H<''N1@<V"W1HF'-1F0U";FIZX0Q0HO57IVBH4HW1#<JM' MHW#D>WE19U4X_3+26PG5D>I#2`AE$`J`$BAD'=#\(4E7(0A7'#<KCZ@GXP7Y M/U`)W\DB)(`:1#/44-(;*)\$//L5'LBI9$3ZMR/D/E8%"X)[8H4+VFP=$@J' M/@GF%\`>`8L.)`2ZD3:,"G(W`ZWJQ"*W$/T8(]\U9AXX\\TRRT)K*`3QWR#5 M,GOX>>^L]J/GF2?#>:R#"\F"8J(UEK-`N['1@Z/2MSF!2?!$(/HNO_4]#ZXY MV31$@Y#A@%`P(%B"8&XZ(D-T&0$"LZ(^D4._P']4DBB>/#:U]Z=Q!A"0(!Z] M4\N_9$RZ`61]Z]>T]N3/-IVM5V,6P1-CM>^)Q(871._WUD/,4(ZS$R=71I`- MX643&JB`$\V@W\0830>W9:XPP85TRM^K).<):%;?S?ZVP#A36P@>^XGP01P< M#\3OEO(B4=3:`@=#.,"0D@5#>(7$7NNJ=.^99999=VS2[0&!UTTFJBHI2$@8 M"24JBJIUQH`TEMQZ@3T"'9%59('$#T]Q!/<@H%2(.?0'?#>:H[:!PA?)*M)& M,>]A)U`H*(ADDHAA$9`F)G4[CWHZZ;@Y.V"8R2,A,[G/+M/4=$!T3M."1=P+ MT8(D"`,BE()J<DV.Y-3VOS[WW\_$3&AJO*1/VQ"GF=Z4+$!J4MBBK3M^WD&L MA#6'3)T!KTFHX%@4+*%"5;L'73)N<L$\U$0VJXIPWBG$*HU7("[MI&:5H5G3 MUV0XN*%D#I$ML*8H<K(:H&R2L7`PB7I4J]`)XH`%P:3>60]`$IW(8PB:65.7 MBG8EK,4T=?`#N@B._=(0$T=CFP&14*8`!0A%=NU)V&NTS!."8IR3\^==^Q5/ MGV#[$Q#10W7K%$A6D\W,-PA8ET1P5RRD1+P;B1LGMIB8*"'$R(*F8>7&AA0? M0*U+RUM$K]2P31ZK.%>)'DV;)!,T:T:G09O2`0GYKH6&`;.*\@3U%9;1+:67 M<3"<P3(4M$4F*O.0M\@3``-P,002`&&SL9O`T@DU$2>E.QG>'I)^?YLR=3<( MN84HNCJAUMJ0-P0D%WR%.=FF2,D%(G:41(EDZ9I0ZY(AMO[GA)Z>GB*CGHK9 MLC]I,[?,0'JG8"'6!>L@C-C3X#K:>,">N$)N6%-BA(FM9JB`*I08FS<Z^6O@ M%MUC+6'G'LAO%"`^V!W6I?ZXOC:@2\7VRHV$//C:P3K4/2K:+MI*1&PO1$/# MT)!^=0B;3-5.(B=`\>6X^77B_J.IGA+H#.\I#CKF"4HGTA%9$Z"FO(*:D8D6 M'+P(SL2PH:P.:V$:'AKW!KJ22P<*24F2)DTJ%V`&PB`>[GHX9L[AR$7BVBXA M%#\V*C0M[S1QIWIRS)-0!%XJ$/&E#S"ARH>B(^4*6M8H;LS%>2A-R"L][-A# MXN2!]&#F1L?QC%U=[8=^->\)Q('^Q\`=@=7,Q22A/DOAE50('L@<$^`+^QZ\ M?7[YAM!A$:JG@L3M7=$8IY"2-2$]6"4EC-S_,B>B7P#+Y3Y)ZKA:Q)JQR35Z M+"!DP!A>:$L+"(LB"PN67U02UTG(.P4+ITE7#H_4*&@TTJ;'/DZU*@3(*AJ< MTY'";=6Y@Y+:'J'J_-@1>@(CO&`P"*#.A2?$'J_C#0*&<$E(8>V]"S#*4D\3 MOC*#SJG&(NL,0X26@,\L,H\?1BFB""I0H(U@8<1AR:,=0QCCE<W4,LHV6DU& ME2%BPVN0S2:IE*L:8-XLD$0".H1+6D=6QW[X)PJ<)K,ZA',Q:E<(ZB0('3<' M6X5N29WS#X9J%[GJF;<4.8^'35$WAH'>*'10P$I==<,2*-2B9(81"902!9@$ M.%([:T#KKY"I`2C:9+Z/E@$B(<W`B,$X>65;9F26NW/+5'4A5_PL-1#0D#32 M0.,&3%+*20T$01GM&:(AN=Q'()ZM1BA'!LTD0A&S@T<;#56`1P8&Q'4#`DC* M0B]U6+"$BD"3[(TF,G&U\>(U0?P@F1N@!(!<@0!W!Q\CUG?84B)VAX"+F">> MAC1$ST?D)@MQ0#:T'VFDEB.$OW(C2FR(00@0344(J38?9FH/4M!^.EGN46V$ MV%#;(W?/)#>7<4"!"*E8+):Y"J"AJLS-$31,*&$Q&7=F(/ST_.Q#].XSEGO8 M8QIE>+*JU<5@/YQB#]K31P+G'$R(3".6ZF:BAL5#=L8=]C>(XRXP]O]#,#@X M9Y<M:U:LV?5YO30[&PF>VD=F&@A'"A1G:WWMY7T;;9:.W#,[.:G#^0F8N@Y; MQU'YX[$$G.223DH-:RNJ=0<F8'Y]KCS'.=U$S$15:0$^@$P=EK(W<P'&;3A& M^ZBQ<(8.`\:`-H#KYN+E/JGI/1C65\FC$C1J8C19FA*>4Y4]_=[J^TCVIL-E M,A9"L[&FVL0L8'K*U0!LAH(=^9E;S1D1QBY&%J3Y!\2!4+*:**<KB4!M@WB( M>#F'87,\E"LD3IU2X-^/EDLKT8#9"!\1>D](FTL;"L"2<L/#R05[/"Y^M,7* M@GH\T,`E]G`.430*/R6,Q.N&K'7)H4J@["R-X2(?EU#CT4J;YTE?ODO8,/87 M/2Q;B;E\C)0]EM3@F;H`2`6D*&XM"A9"@B)2,PET%G&`CKKGETSSB>Z!WALZ M`'#[$TTTTTTTTTTTTTTTTTTQ[)I.V#=O1Y>%B_S!P\G[PBWU9)J=>R2H)>\` MAGZ,UU[RF:Q&8QD3'+X02X\(Y"I^*>6Q6(8=-%3BWI[>,B)GE\KS$EM)EM]S M>WY%KFX6B7:EM)P\F2/FSRQ)?"',<55&LL`PHXNV,UCK+`YR,B`('1!T7-"$ M"!"[$S$LY:0/#P)&KDO]&$<W6Z<C.L2U86*\$81"%!'2+))*"_)J9&:$$V3& M8C.P0NIS"V,QOL<U3CM.XA`@@=#]*TN(F?$OWFB-'SY@M$CQ`T)F"!)V;>&( M/CHZ3'FENB[%(LN:=JE(%J$I,.]`W29W46@^"P0LT0WB*ZG<8%ONB^;X_(V[ M%#&MI.SG<=B:&#SY7G3LL:2U@I4*0BA7,A405#K,V$1DA$XP383G2-R!_Y5> M68'10MO#&];T#)W`E93+H84&PBEL6ZR=@H6P^@ABUTN6E@JWTRVLB1!.@#L; M0@+^R>*?K0UH3901,>..54T%!1,6E@4M+XI,3;9DEC9%N8^9<"R"6U90!+'P M9A0="CXXRJ$T89&)#;62C0M"T0"C1>$5%14PM"46D(!06,F`">-@V><-P[SG M/*#C`)$X@GH>G@GG&61$]%W@0BQA)#Y*@>M4^.!^AB9WWJA@GL3TG&8AU(GF MJ(_DG8!@7ZPUWH'EU]#/Q?>HTN?D>6#B/BF.U2!A\&&#NI!.[(*`Y0)(`12> MNP__?_7$W/Q(:K$#Z%"]P_\1+J>B(FNT`KX[,N55<1"]L.E@'"Y459>`N,!. MZ(G`$YF%LAAW5`JBH0Y576@"Q!@HC1@>0>9/R4(*T0J2`5$L"89E)WQD,Q@P M(9G#66[2#C$/7#%#2A-J0X!]9!-^_^%O5`I8$N)QO2A3/L[].%PS1,B"$"(G M-[H3T:AV==]S3GEJ2KNDD`P&CHY0E%[G0]D;8-<U#;0+>Y$..R$)<5\<%'W; M!%R$3$Q0$I$U*'>"`:CMTPOM.D]%0@4(80?8/Z@#!'9)"T/Y(PK,%X)=45^0 1Q'\QK&#_\7<D4X4)!/96Q$`` ` end --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=twa-6.x.diff Content-Description: 6.x patch Index: sys/conf/files =================================================================== RCS file: /home/ncvs/src/sys/conf/files,v retrieving revision 1.1031.2.55 diff -u -r1.1031.2.55 files --- sys/conf/files 10 Apr 2007 21:44:17 -0000 1.1031.2.55 +++ sys/conf/files 13 Apr 2007 12:59:20 -0000 @@ -945,7 +945,6 @@ dev/tdfx/tdfx_linux.c optional tdfx_linux tdfx compat_linux dev/tdfx/tdfx_pci.c optional tdfx pci dev/trm/trm.c optional trm -dev/twa/tw_cl_fwimg.c optional twa dev/twa/tw_cl_init.c optional twa dev/twa/tw_cl_intr.c optional twa dev/twa/tw_cl_io.c optional twa Index: sys/dev/twa/tw_cl.h =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_cl.h,v retrieving revision 1.1.4.1 diff -u -r1.1.4.1 tw_cl.h --- sys/dev/twa/tw_cl.h 7 Dec 2005 18:18:05 -0000 1.1.4.1 +++ sys/dev/twa/tw_cl.h 13 Apr 2007 12:59:20 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ @@ -50,11 +51,6 @@ #define TW_CLI_RESET_TIMEOUT_PERIOD 60 /* seconds */ #define TW_CLI_MAX_RESET_ATTEMPTS 2 -#ifdef TW_OSL_FLASH_FIRMWARE -/* Number of chunks the fw image is broken into, while flashing. */ -#define TW_CLI_NUM_FW_IMAGE_CHUNKS 500 -#endif /* TW_OSL_FLASH_FIRMWARE */ - /* Possible values of ctlr->state. */ /* Initialization done, and controller is active. */ #define TW_CLI_CTLR_STATE_ACTIVE (1<<0) @@ -144,19 +140,6 @@ OSL & CL. */ struct tw_cli_req_context *req_ctxt_buf;/* pointer to the array of CL's internal request context pkts */ - -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - - TW_UINT32 free_req_ids[TW_CL_MAX_SIMULTANEOUS_REQUESTS]; - /* Array of free req_id's */ - struct tw_cli_req_context *busy_reqs[TW_CL_MAX_SIMULTANEOUS_REQUESTS + 1]; - /* Array of busy reqs -- index is req_id */ - TW_UINT32 free_req_head; - TW_UINT32 free_req_tail; - TW_UINT32 num_free_req_ids; - -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - struct tw_cl_command_packet *cmd_pkt_buf;/* ptr to array of cmd pkts */ TW_UINT64 cmd_pkt_phys; /* phys addr of cmd_pkt_buf */ @@ -171,11 +154,6 @@ /* Request queues and arrays. */ struct tw_cl_link req_q_head[TW_CLI_Q_COUNT]; -#ifdef TW_OSL_FLASH_FIRMWARE - TW_VOID *flash_dma_mem; /* mem for flashing fw image */ - TW_UINT64 flash_dma_mem_phys;/* flash_dma_mem phys addr */ -#endif /* TW_OSL_FLASH_FIRMWARE */ - TW_UINT8 *internal_req_data;/* internal req data buf */ TW_UINT64 internal_req_data_phys;/* phys addr of internal req data buf */ @@ -294,13 +272,6 @@ { struct tw_cli_ctlr_context *ctlr = req->ctlr; -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - if ((q_type == TW_CLI_BUSY_Q) || (q_type == TW_CLI_COMPLETE_Q) || - ((q_type == TW_CLI_PENDING_Q) && - (!(req->flags & TW_CLI_REQ_FLAGS_INTERNAL)))) - return; -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ - tw_osl_get_lock(ctlr->ctlr_handle, ctlr->gen_lock); TW_CL_Q_INSERT_HEAD(&(ctlr->req_q_head[q_type]), &(req->link)); TW_CLI_Q_INSERT(ctlr, q_type); @@ -315,45 +286,6 @@ { struct tw_cli_ctlr_context *ctlr = req->ctlr; -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - if ((q_type == TW_CLI_BUSY_Q) || (q_type == TW_CLI_COMPLETE_Q) || - ((q_type == TW_CLI_PENDING_Q) && - (!(req->flags & TW_CLI_REQ_FLAGS_INTERNAL)))) - return; - if ((q_type == TW_CLI_FREE_Q) && - (!(req->flags & TW_CLI_REQ_FLAGS_INTERNAL))) { - TW_SYNC_HANDLE sync_handle; - - tw_osl_get_lock(ctlr->ctlr_handle, ctlr->gen_lock); - if (req->state == TW_CLI_REQ_STATE_COMPLETE) { - if (ctlr->flags & TW_CL_DEFERRED_INTR_USED) - tw_osl_sync_io_block(ctlr->ctlr_handle, - &sync_handle); - } else { - if (!(ctlr->flags & TW_CL_DEFERRED_INTR_USED)) - tw_osl_sync_isr_block(ctlr->ctlr_handle, - &sync_handle); - } - ctlr->free_req_ids[ctlr->free_req_tail] = req->request_id; - ctlr->busy_reqs[req->request_id] = TW_CL_NULL; - ctlr->free_req_tail = (ctlr->free_req_tail + 1) % - (ctlr->max_simult_reqs - 1); - ctlr->num_free_req_ids++; - - if (req->state == TW_CLI_REQ_STATE_COMPLETE) { - if (ctlr->flags & TW_CL_DEFERRED_INTR_USED) - tw_osl_sync_io_unblock(ctlr->ctlr_handle, - &sync_handle); - } else { - if (!(ctlr->flags & TW_CL_DEFERRED_INTR_USED)) - tw_osl_sync_isr_unblock(ctlr->ctlr_handle, - &sync_handle); - } - tw_osl_free_lock(ctlr->ctlr_handle, ctlr->gen_lock); - return; - } -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ - tw_osl_get_lock(ctlr->ctlr_handle, ctlr->gen_lock); TW_CL_Q_INSERT_TAIL(&(ctlr->req_q_head[q_type]), &(req->link)); TW_CLI_Q_INSERT(ctlr, q_type); @@ -369,11 +301,6 @@ struct tw_cli_req_context *req = TW_CL_NULL; struct tw_cl_link *link; -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - if ((q_type == TW_CLI_BUSY_Q) || (q_type == TW_CLI_COMPLETE_Q)) - return(req); -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ - tw_osl_get_lock(ctlr->ctlr_handle, ctlr->gen_lock); if ((link = TW_CL_Q_FIRST_ITEM(&(ctlr->req_q_head[q_type]))) != TW_CL_NULL) { @@ -394,13 +321,6 @@ { struct tw_cli_ctlr_context *ctlr = req->ctlr; -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - if ((q_type == TW_CLI_BUSY_Q) || (q_type == TW_CLI_COMPLETE_Q) || - ((q_type == TW_CLI_PENDING_Q) && - (!(req->flags & TW_CLI_REQ_FLAGS_INTERNAL)))) - return; -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ - tw_osl_get_lock(ctlr->ctlr_handle, ctlr->gen_lock); TW_CL_Q_REMOVE_ITEM(&(ctlr->req_q_head[q_type]), &(req->link)); TW_CLI_Q_REMOVE(ctlr, q_type); Index: sys/dev/twa/tw_cl_externs.h =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_externs.h,v retrieving revision 1.1.4.1 diff -u -r1.1.4.1 tw_cl_externs.h --- sys/dev/twa/tw_cl_externs.h 7 Dec 2005 18:18:05 -0000 1.1.4.1 +++ sys/dev/twa/tw_cl_externs.h 13 Apr 2007 12:59:20 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ @@ -50,18 +51,6 @@ extern TW_INT8 *tw_cli_severity_string_table[]; -#ifdef TW_OSL_FLASH_FIRMWARE - -/* Functions in tw_cl_init.c */ - -/* Flash bundled firmware image onto controller. */ -extern TW_INT32 tw_cli_flash_firmware(struct tw_cli_ctlr_context *ctlr); - -/* Hard reset the controller. */ -extern TW_INT32 tw_cli_hard_reset(struct tw_cli_ctlr_context *ctlr); - -#endif /* TW_OSL_FLASH_FIRMWARE */ - /* Do controller initialization. */ extern TW_INT32 tw_cli_start_ctlr(struct tw_cli_ctlr_context *ctlr); @@ -197,9 +186,6 @@ /* Get a free CL internal request context packet. */ extern struct tw_cli_req_context * tw_cli_get_request(struct tw_cli_ctlr_context *ctlr -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - , struct tw_cl_req_packet *req_pkt -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ ); /* Notify OSL of controller info (fw/BIOS versions, etc.). */ Index: sys/dev/twa/tw_cl_fwif.h =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_fwif.h,v retrieving revision 1.1.4.1 diff -u -r1.1.4.1 tw_cl_fwif.h --- sys/dev/twa/tw_cl_fwif.h 7 Dec 2005 18:18:05 -0000 1.1.4.1 +++ sys/dev/twa/tw_cl_fwif.h 13 Apr 2007 12:59:20 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ @@ -134,7 +135,6 @@ /* Misc defines. */ -#define TWA_BUNDLED_FW_VERSION_STRING "3.02.00.004" #define TWA_SHUTDOWN_MESSAGE_CREDITS 0x001 #define TWA_64BIT_SG_ADDRESSES 0x00000001 #define TWA_EXTENDED_INIT_CONNECT 0x00000002 @@ -152,8 +152,6 @@ #define TWA_ARCH_ID_9K_X 0x6 /* 9000 PCI-X controllers */ #define TWA_CTLR_FW_SAME_OR_NEWER 0x00000001 #define TWA_CTLR_FW_COMPATIBLE 0x00000002 -#define TWA_BUNDLED_FW_SAFE_TO_FLASH 0x00000004 -#define TWA_CTLR_FW_RECOMMENDS_FLASH 0x00000008 #define TWA_SENSE_DATA_LENGTH 18 Index: sys/dev/twa/tw_cl_init.c =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_init.c,v retrieving revision 1.1.4.1 diff -u -r1.1.4.1 tw_cl_init.c --- sys/dev/twa/tw_cl_init.c 7 Dec 2005 18:18:05 -0000 1.1.4.1 +++ sys/dev/twa/tw_cl_init.c 13 Apr 2007 12:59:20 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ @@ -63,7 +64,8 @@ { if ((vendor_id == TW_CL_VENDOR_ID) && ((device_id == TW_CL_DEVICE_ID_9K) || - (device_id == TW_CL_DEVICE_ID_9K_X))) + (device_id == TW_CL_DEVICE_ID_9K_X) || + (device_id == TW_CL_DEVICE_ID_9K_E))) return(TW_CL_TRUE); return(TW_CL_FALSE); } @@ -113,6 +115,7 @@ break; case TW_CL_DEVICE_ID_9K_X: + case TW_CL_DEVICE_ID_9K_E: switch(bar_type) { case TW_CL_BAR_TYPE_IO: *bar_num = 2; @@ -162,8 +165,6 @@ * non_dma_mem_size -- # of bytes of memory needed for * non-DMA purposes * dma_mem_size -- # of bytes of DMA'able memory needed - * flash_dma_mem_size -- # of bytes of DMA'able memory - * needed for firmware flash, if applicable * per_req_dma_mem_size -- # of bytes of DMA'able memory * needed per request, if applicable * per_req_non_dma_mem_size -- # of bytes of memory needed @@ -178,15 +179,6 @@ TW_UINT32 flags, TW_INT32 device_id, TW_INT32 max_simult_reqs, TW_INT32 max_aens, TW_UINT32 *alignment, TW_UINT32 *sg_size_factor, TW_UINT32 *non_dma_mem_size, TW_UINT32 *dma_mem_size -#ifdef TW_OSL_FLASH_FIRMWARE - , TW_UINT32 *flash_dma_mem_size -#endif /* TW_OSL_FLASH_FIRMWARE */ -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - , TW_UINT32 *per_req_dma_mem_size -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - , TW_UINT32 *per_req_non_dma_mem_size -#endif /* TW_OSL_N0N_DMA_MEM_ALLOC_PER_REQUEST */ ) { if (device_id == 0) @@ -211,20 +203,11 @@ * the controller context, request packets (including the 1 needed for * CL internal requests), and event packets. */ -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - - *non_dma_mem_size = sizeof(struct tw_cli_ctlr_context) + - (sizeof(struct tw_cli_req_context)) + - (sizeof(struct tw_cl_event_packet) * max_aens); - *per_req_non_dma_mem_size = sizeof(struct tw_cli_req_context); - -#else /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ *non_dma_mem_size = sizeof(struct tw_cli_ctlr_context) + (sizeof(struct tw_cli_req_context) * (max_simult_reqs + 1)) + (sizeof(struct tw_cl_event_packet) * max_aens); -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ /* * Total DMA'able memory needed is the sum total of memory needed for @@ -232,31 +215,10 @@ * requests), and memory needed to hold the payload for internal * requests. */ -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - - *dma_mem_size = sizeof(struct tw_cl_command_packet) + - TW_CLI_SECTOR_SIZE; - *per_req_dma_mem_size = sizeof(struct tw_cl_command_packet); - -#else /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ *dma_mem_size = (sizeof(struct tw_cl_command_packet) * (max_simult_reqs + 1)) + (TW_CLI_SECTOR_SIZE); -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - - -#ifdef TW_OSL_FLASH_FIRMWARE - - /* Memory needed to hold the firmware image while flashing. */ - *flash_dma_mem_size = - ((tw_cli_fw_img_size / TW_CLI_NUM_FW_IMAGE_CHUNKS) + - 511) & ~511; -/* (TWA_SG_ELEMENT_SIZE_FACTOR(device_id) - 1)) & - ~(TWA_SG_ELEMENT_SIZE_FACTOR(device_id) - 1); */ - -#endif /* TW_OSL_FLASH_FIRMWARE */ - return(0); } @@ -276,9 +238,6 @@ * non_dma_mem -- ptr to allocated non-DMA memory * dma_mem -- ptr to allocated DMA'able memory * dma_mem_phys -- physical address of dma_mem - * flash_dma_mem -- ptr to allocated DMA'able memory - * needed for firmware flash, if applicable - * flash_dma_mem_phys -- physical address of flash_dma_mem * Output: None * Return value: 0 -- success * non-zero-- failure @@ -287,10 +246,6 @@ tw_cl_init_ctlr(struct tw_cl_ctlr_handle *ctlr_handle, TW_UINT32 flags, TW_INT32 device_id, TW_INT32 max_simult_reqs, TW_INT32 max_aens, TW_VOID *non_dma_mem, TW_VOID *dma_mem, TW_UINT64 dma_mem_phys -#ifdef TW_OSL_FLASH_FIRMWARE - , TW_VOID *flash_dma_mem, - TW_UINT64 flash_dma_mem_phys -#endif /* TW_OSL_FLASH_FIRMWARE */ ) { struct tw_cli_ctlr_context *ctlr; @@ -319,10 +274,6 @@ } if ((non_dma_mem == TW_CL_NULL) || (dma_mem == TW_CL_NULL) -#ifdef TW_OSL_FLASH_FIRMWARE - || ((flags & TW_CL_FLASH_FIRMWARE) ? - (flash_dma_mem == TW_CL_NULL) : TW_CL_FALSE) -#endif /* TW_OSL_FLASH_FIRMWARE */ ) { tw_cl_create_event(ctlr_handle, TW_CL_FALSE, TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR, @@ -332,27 +283,14 @@ return(TW_OSL_ENOMEM); } -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - tw_osl_memzero(non_dma_mem, sizeof(struct tw_cli_ctlr_context) + - sizeof(struct tw_cli_req_context) + - (sizeof(struct tw_cl_event_packet) * max_aens)); -#else /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ tw_osl_memzero(non_dma_mem, sizeof(struct tw_cli_ctlr_context) + (sizeof(struct tw_cli_req_context) * (max_simult_reqs + 1)) + (sizeof(struct tw_cl_event_packet) * max_aens)); -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - tw_osl_memzero(dma_mem, - sizeof(struct tw_cl_command_packet) + - TW_CLI_SECTOR_SIZE); -#else /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ tw_osl_memzero(dma_mem, (sizeof(struct tw_cl_command_packet) * (max_simult_reqs + 1)) + TW_CLI_SECTOR_SIZE); -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - free_non_dma_mem = (TW_UINT8 *)non_dma_mem; @@ -369,11 +307,6 @@ ctlr->max_simult_reqs = max_simult_reqs + 1; ctlr->max_aens_supported = max_aens; -#ifdef TW_OSL_FLASH_FIRMWARE - ctlr->flash_dma_mem = flash_dma_mem; - ctlr->flash_dma_mem_phys = flash_dma_mem_phys; -#endif /* TW_OSL_FLASH_FIRMWARE */ - /* Initialize queues of CL internal request context packets. */ tw_cli_req_q_init(ctlr, TW_CLI_FREE_Q); tw_cli_req_q_init(ctlr, TW_CLI_BUSY_Q); @@ -397,7 +330,9 @@ * with command register writes. */ if ((ctlr->flags & TW_CL_64BIT_ADDRESSES) && - (ctlr->device_id == TW_CL_DEVICE_ID_9K)) { + ((ctlr->device_id == TW_CL_DEVICE_ID_9K) || + (ctlr->device_id == TW_CL_DEVICE_ID_9K_X) || + (ctlr->device_id == TW_CL_DEVICE_ID_9K_E))) { ctlr->state |= TW_CLI_CTLR_STATE_G66_WORKAROUND_NEEDED; ctlr->intr_lock = ctlr->io_lock; } else { @@ -410,9 +345,7 @@ ctlr->req_ctxt_buf = (struct tw_cli_req_context *)free_non_dma_mem; free_non_dma_mem += (sizeof(struct tw_cli_req_context) * ( -#ifndef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST max_simult_reqs + -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ 1)); ctlr->cmd_pkt_buf = (struct tw_cl_command_packet *)dma_mem; @@ -421,59 +354,31 @@ ctlr->internal_req_data = (TW_UINT8 *) (ctlr->cmd_pkt_buf + ( -#ifndef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST max_simult_reqs + -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ 1)); ctlr->internal_req_data_phys = ctlr->cmd_pkt_phys + (sizeof(struct tw_cl_command_packet) * ( -#ifndef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST max_simult_reqs + -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ 1)); for (i = 0; i < ( -#ifndef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST max_simult_reqs + -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ 1); i++) { req = &(ctlr->req_ctxt_buf[i]); -#ifndef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - req->cmd_pkt = &(ctlr->cmd_pkt_buf[i]); req->cmd_pkt_phys = ctlr->cmd_pkt_phys + (i * sizeof(struct tw_cl_command_packet)); -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - req->request_id = i; req->ctlr = ctlr; -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - req->flags |= TW_CLI_REQ_FLAGS_INTERNAL; -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ - /* Insert request into the free queue. */ tw_cli_req_q_insert_tail(req, TW_CLI_FREE_Q); } - -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - - ctlr->free_req_head = i - 1; - ctlr->free_req_tail = i - 1; - - for (; i < (max_simult_reqs + 1); i++) - ctlr->free_req_ids[i - 1] = i; - - ctlr->num_free_req_ids = max_simult_reqs; - -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ - - /* Initialize the AEN queue. */ ctlr->aen_queue = (struct tw_cl_event_packet *)free_non_dma_mem; @@ -517,317 +422,12 @@ return(error); } - - -#ifdef TW_OSL_FLASH_FIRMWARE -/* - * Function name: tw_cli_flash_firmware - * Description: Flashes bundled firmware image onto controller. - * - * Input: ctlr -- ptr to per ctlr structure - * Output: None - * Return value: 0 -- success - * non-zero-- failure - */ -TW_INT32 -tw_cli_flash_firmware(struct tw_cli_ctlr_context *ctlr) -{ - struct tw_cli_req_context *req; - struct tw_cl_command_header *cmd_hdr; - struct tw_cl_command_download_firmware *cmd; - TW_UINT32 fw_img_chunk_size; - TW_UINT32 num_chunks; - TW_UINT32 this_chunk_size = 0; - TW_INT32 remaining_img_size = 0; - TW_INT32 hard_reset_needed = TW_CL_FALSE; - TW_INT32 error = TW_OSL_EGENFAILURE; - TW_UINT32 i; - - tw_cli_dbg_printf(3, ctlr->ctlr_handle, tw_osl_cur_func(), "entered"); - if ((req = tw_cli_get_request(ctlr -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - , TW_CL_NULL -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ - )) == TW_CL_NULL) { - /* No free request packets available. Can't proceed. */ - error = TW_OSL_EBUSY; - goto out; - } - -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - - req->cmd_pkt = ctlr->cmd_pkt_buf; - req->cmd_pkt_phys = ctlr->cmd_pkt_phys; - tw_osl_memzero(req->cmd_pkt, - sizeof(struct tw_cl_command_header) + - 28 /* max bytes before sglist */); - -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - - req->flags |= TW_CLI_REQ_FLAGS_INTERNAL; - - /* - * Determine amount of memory needed to hold a chunk of the - * firmware image. As yet, the Download_Firmware command does not - * support SG elements that are ctlr->sg_size_factor multiples. It - * requires them to be 512-byte multiples. - */ - fw_img_chunk_size = ((tw_cli_fw_img_size / TW_CLI_NUM_FW_IMAGE_CHUNKS) + - 511) & ~511; -/* (ctlr->sg_size_factor - 1)) & - ~(ctlr->sg_size_factor - 1); */ - - /* Calculate the actual number of chunks needed. */ - num_chunks = (tw_cli_fw_img_size / fw_img_chunk_size) + - ((tw_cli_fw_img_size % fw_img_chunk_size) ? 1 : 0); - - req->data = ctlr->flash_dma_mem; - req->data_phys = ctlr->flash_dma_mem_phys; - - remaining_img_size = tw_cli_fw_img_size; - - cmd_hdr = &(req->cmd_pkt->cmd_hdr); - cmd = &(req->cmd_pkt->command.cmd_pkt_7k.download_fw); - - for (i = 0; i < num_chunks; i++) { - /* Build a cmd pkt for downloading firmware. */ - tw_osl_memzero(req->cmd_pkt, - sizeof(struct tw_cl_command_packet)); - - cmd_hdr->header_desc.size_header = 128; - - /* sgl_offset (offset in dwords, to sg list) is 2. */ - cmd->sgl_off__opcode = - BUILD_SGL_OFF__OPCODE(2, TWA_FW_CMD_DOWNLOAD_FIRMWARE); - cmd->request_id = (TW_UINT8)(TW_CL_SWAP16(req->request_id)); - cmd->unit = 0; - cmd->status = 0; - cmd->flags = 0; - cmd->param = TW_CL_SWAP16(8); /* prom image */ - - if (i != (num_chunks - 1)) - this_chunk_size = fw_img_chunk_size; - else /* last chunk */ - this_chunk_size = remaining_img_size; - - remaining_img_size -= this_chunk_size; - - tw_osl_memcpy(req->data, tw_cli_fw_img + (i * fw_img_chunk_size), - this_chunk_size); - - /* - * The next line will effect only the last chunk. - */ - req->length = (this_chunk_size + 511) & ~511; -/* (ctlr->sg_size_factor - 1)) & - ~(ctlr->sg_size_factor - 1); */ - - if (ctlr->flags & TW_CL_64BIT_ADDRESSES) { - ((struct tw_cl_sg_desc64 *)(cmd->sgl))[0].address = - TW_CL_SWAP64(req->data_phys); - ((struct tw_cl_sg_desc64 *)(cmd->sgl))[0].length = - TW_CL_SWAP32(req->length); - cmd->size = 2 + 3; - } else { - ((struct tw_cl_sg_desc32 *)(cmd->sgl))[0].address = - TW_CL_SWAP32(req->data_phys); - ((struct tw_cl_sg_desc32 *)(cmd->sgl))[0].length = - TW_CL_SWAP32(req->length); - cmd->size = 2 + 2; - } - - error = tw_cli_submit_and_poll_request(req, - TW_CLI_REQUEST_TIMEOUT_PERIOD); - if (error) { - tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE, - TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR, - 0x1005, 0x1, TW_CL_SEVERITY_ERROR_STRING, - "Firmware flash request could not be posted", - "error = %d\n", error); - if (error == TW_OSL_ETIMEDOUT) - /* clean-up done by tw_cli_submit_and_poll_request */ - return(error); - break; - } - error = cmd->status; - - if (((i == (num_chunks - 1)) && (error)) || - ((i != (num_chunks - 1)) && - ((error = cmd_hdr->status_block.error) != - TWA_ERROR_MORE_DATA))) { - /* - * It's either that download of the last chunk - * failed, or the download of one of the earlier - * chunks failed with an error other than - * TWA_ERROR_MORE_DATA. Report the error. - */ - tw_cli_create_ctlr_event(ctlr, - TW_CL_MESSAGE_SOURCE_CONTROLLER_ERROR, - cmd_hdr); - tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE, - TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR, - 0x1006, 0x1, TW_CL_SEVERITY_ERROR_STRING, - "Firmware flash failed", - "cmd = 0x%x, chunk # %d, cmd status = %d", - GET_OPCODE(cmd->sgl_off__opcode), - i, cmd->status); - /* - * Make a note to hard reset the controller, - * so that it doesn't wait for the remaining - * chunks. Don't call the hard reset function - * right here, since we have committed to having - * only 1 active internal request at a time, and - * this request has not yet been freed. - */ - hard_reset_needed = TW_CL_TRUE; - break; - } - } /* for */ - -out: - if (req) - tw_cli_req_q_insert_tail(req, TW_CLI_FREE_Q); - - if (hard_reset_needed) - tw_cli_hard_reset(ctlr); - - return(error); -} - - - -/* - * Function name: tw_cli_hard_reset - * Description: Hard resets the controller. - * - * Input: ctlr -- ptr to per ctlr structure - * Output: None - * Return value: 0 -- success - * non-zero-- failure - */ -TW_INT32 -tw_cli_hard_reset(struct tw_cli_ctlr_context *ctlr) -{ - struct tw_cli_req_context *req; - struct tw_cl_command_reset_firmware *cmd; - TW_INT32 error; - - tw_cli_dbg_printf(3, ctlr->ctlr_handle, tw_osl_cur_func(), "entered"); - - if ((req = tw_cli_get_request(ctlr -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - , TW_CL_NULL -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ - )) == TW_CL_NULL) - return(TW_OSL_EBUSY); - -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - - req->cmd_pkt = ctlr->cmd_pkt_buf; - req->cmd_pkt_phys = ctlr->cmd_pkt_phys; - tw_osl_memzero(req->cmd_pkt, - sizeof(struct tw_cl_command_header) + - 28 /* max bytes before sglist */); - -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - - req->flags |= TW_CLI_REQ_FLAGS_INTERNAL; - - /* Build a cmd pkt for sending down the hard reset command. */ - req->cmd_pkt->cmd_hdr.header_desc.size_header = 128; - - cmd = &(req->cmd_pkt->command.cmd_pkt_7k.reset_fw); - cmd->res1__opcode = - BUILD_RES__OPCODE(0, TWA_FW_CMD_HARD_RESET_FIRMWARE); - cmd->size = 2; - cmd->request_id = (TW_UINT8)(TW_CL_SWAP16(req->request_id)); - cmd->unit = 0; - cmd->status = 0; - cmd->flags = 0; - cmd->param = 0; /* don't reload FPGA logic */ - - req->data = TW_CL_NULL; - req->length = 0; - - tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE, - TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR, - 0x1017, 0x3, TW_CL_SEVERITY_INFO_STRING, - "Issuing hard (commanded) reset to the controller...", - " "); - - error = tw_cli_submit_and_poll_request(req, - TW_CLI_REQUEST_TIMEOUT_PERIOD); - if (error) { - tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE, - TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR, - 0x1007, 0x1, TW_CL_SEVERITY_ERROR_STRING, - "Hard reset request could not be posted", - "error = %d", error); - if (error == TW_OSL_ETIMEDOUT) - /* clean-up done by tw_cli_submit_and_poll_request */ - return(error); - goto out; - } - if ((error = cmd->status)) { - tw_cli_create_ctlr_event(ctlr, - TW_CL_MESSAGE_SOURCE_CONTROLLER_ERROR, - &(req->cmd_pkt->cmd_hdr)); - tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE, - TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR, - 0x1008, 0x1, TW_CL_SEVERITY_ERROR_STRING, - "Hard reset request failed", - "error = %d", error); - } - - if (ctlr->device_id == TW_CL_DEVICE_ID_9K_X) { - /* - * There's a hardware bug in the G133 ASIC, which can lead to - * PCI parity errors and hangs, if the host accesses any - * registers when the firmware is resetting the hardware, as - * part of a hard/soft reset. The window of time when the - * problem can occur is about 10 ms. Here, we will handshake - * with the firmware to find out when the firmware is pulling - * down the hardware reset pin, and wait for about 500 ms to - * make sure we don't access any hardware registers (for - * polling) during that window. - */ - ctlr->state |= TW_CLI_CTLR_STATE_RESET_PHASE1_IN_PROGRESS; - while (tw_cli_find_response(ctlr, - TWA_RESET_PHASE1_NOTIFICATION_RESPONSE) != TW_OSL_ESUCCESS) - tw_osl_delay(10); - tw_osl_delay(TWA_RESET_PHASE1_WAIT_TIME_MS * 1000); - ctlr->state &= ~TW_CLI_CTLR_STATE_RESET_PHASE1_IN_PROGRESS; - } - - /* Wait for the MC_RDY bit to get set. */ - if ((error = tw_cli_poll_status(ctlr, TWA_STATUS_MICROCONTROLLER_READY, - TW_CLI_RESET_TIMEOUT_PERIOD))) { - tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE, - TW_CL_MESSAGE_SOURCE_COMMON_LAYER_EVENT, - 0x1018, 0x1, TW_CL_SEVERITY_ERROR_STRING, - "Micro-ctlr not ready following hard reset", - "error = %d", error); - } - -out: - if (req) - tw_cli_req_q_insert_tail(req, TW_CLI_FREE_Q); - return(error); -} - -#endif /* TW_OSL_FLASH_FIRMWARE */ - - - /* * Function name: tw_cli_start_ctlr * Description: Establishes a logical connection with the controller. - * If bundled with firmware, determines whether or not - * to flash firmware, based on arch_id, fw SRL (Spec. - * Revision Level), branch & build #'s. Also determines - * whether or not the driver is compatible with the - * firmware on the controller, before proceeding to work - * with it. + * Determines whether or not the driver is compatible + * with the firmware on the controller, before proceeding + * to work with it. * * Input: ctlr -- ptr to per ctlr structure * Output: None @@ -843,10 +443,6 @@ TW_UINT16 fw_on_ctlr_build = 0; TW_UINT32 init_connect_result = 0; TW_INT32 error = TW_OSL_ESUCCESS; -#ifdef TW_OSL_FLASH_FIRMWARE - TW_INT8 fw_flashed = TW_CL_FALSE; - TW_INT8 fw_flash_failed = TW_CL_FALSE; -#endif /* TW_OSL_FLASH_FIRMWARE */ tw_cli_dbg_printf(3, ctlr->ctlr_handle, tw_osl_cur_func(), "entered"); @@ -887,67 +483,9 @@ "error = %d", error); return(error); } - -#ifdef TW_OSL_FLASH_FIRMWARE - - if ((ctlr->flags & TW_CL_FLASH_FIRMWARE) && - (init_connect_result & TWA_BUNDLED_FW_SAFE_TO_FLASH) && - (init_connect_result & TWA_CTLR_FW_RECOMMENDS_FLASH)) { - /* - * The bundled firmware is safe to flash, and the firmware - * on the controller recommends a flash. So, flash! - */ - tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE, - TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR, - 0x100C, 0x3, TW_CL_SEVERITY_INFO_STRING, - "Flashing bundled firmware...", - " "); - if ((error = tw_cli_flash_firmware(ctlr))) { - fw_flash_failed = TW_CL_TRUE; - tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE, - TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR, - 0x100D, 0x2, TW_CL_SEVERITY_WARNING_STRING, - "Unable to flash bundled firmware. " - "Attempting to work with fw on ctlr...", - " "); - } else { - tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE, - TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR, - 0x100E, 0x3, TW_CL_SEVERITY_INFO_STRING, - "Successfully flashed bundled firmware", - " "); - fw_flashed = TW_CL_TRUE; - } - } - - if (fw_flashed) { - /* The firmware was flashed. Have the new image loaded */ - error = tw_cli_hard_reset(ctlr); - if (error) - tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE, - TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR, - 0x100F, 0x1, TW_CL_SEVERITY_ERROR_STRING, - "Could not reset controller after flash!", - " "); - else /* Go through initialization again. */ - error = tw_cli_start_ctlr(ctlr); - /* - * If hard reset of controller failed, we need to return. - * Otherwise, the above recursive call to tw_cli_start_ctlr - * will have completed the rest of the initialization (starting - * from tw_cli_drain_aen_queue below). Don't do it again. - * Just return. - */ - return(error); - } else -#endif /* TW_OSL_FLASH_FIRMWARE */ { - /* - * Either we are not bundled with a firmware image, or - * the bundled firmware is not safe to flash, - * or flash failed for some reason. See if we can at - * least work with the firmware on the controller in the - * current mode. + /* See if we can at least work with the firmware on the + * controller in the current mode. */ if (init_connect_result & TWA_CTLR_FW_COMPATIBLE) { /* Yes, we can. Make note of the operating mode. */ @@ -965,8 +503,7 @@ } else { /* * No, we can't. See if we can at least work with - * it in the base mode. We should never come here - * if firmware has just been flashed. + * it in the base mode. */ tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE, TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR, @@ -999,28 +536,6 @@ * compatible with our base mode. We cannot * work with it. Bail... */ -#ifdef TW_OSL_FLASH_FIRMWARE - if (fw_flash_failed) - tw_cl_create_event(ctlr->ctlr_handle, - TW_CL_FALSE, - TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR, - 0x1012, 0x1, - TW_CL_SEVERITY_ERROR_STRING, - "Incompatible firmware on controller" - "...and could not flash bundled " - "firmware", - " "); - else - tw_cl_create_event(ctlr->ctlr_handle, - TW_CL_FALSE, - TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR, - 0x1013, 0x1, - TW_CL_SEVERITY_ERROR_STRING, - "Incompatible firmware on controller" - "...and bundled firmware not safe to " - "flash", - " "); -#endif /* TW_OSL_FLASH_FIRMWARE */ return(1); } /* @@ -1156,22 +671,9 @@ /* Get a request packet. */ if ((req = tw_cli_get_request(ctlr -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - , TW_CL_NULL -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ )) == TW_CL_NULL) goto out; -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - - req->cmd_pkt = ctlr->cmd_pkt_buf; - req->cmd_pkt_phys = ctlr->cmd_pkt_phys; - tw_osl_memzero(req->cmd_pkt, - sizeof(struct tw_cl_command_header) + - 28 /* max bytes before sglist */); - -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - req->flags |= TW_CLI_REQ_FLAGS_INTERNAL; /* Build the cmd pkt. */ Index: sys/dev/twa/tw_cl_intr.c =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_intr.c,v retrieving revision 1.1.4.1 diff -u -r1.1.4.1 tw_cl_intr.c --- sys/dev/twa/tw_cl_intr.c 7 Dec 2005 18:18:05 -0000 1.1.4.1 +++ sys/dev/twa/tw_cl_intr.c 13 Apr 2007 12:59:20 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ @@ -69,6 +70,10 @@ tw_cli_dbg_printf(10, ctlr_handle, tw_osl_cur_func(), "entered"); + /* If we don't have controller context, bail */ + if (ctlr == NULL) + goto out; + /* * Synchronize access between writes to command and control registers * in 64-bit environments, on G66. @@ -79,7 +84,7 @@ /* Read the status register to determine the type of interrupt. */ status_reg = TW_CLI_READ_STATUS_REGISTER(ctlr_handle); if (tw_cli_check_ctlr_state(ctlr, status_reg)) - goto out; + goto out_unlock; /* Clear the interrupt. */ if (status_reg & TWA_STATUS_HOST_INTERRUPT) { @@ -114,10 +119,10 @@ ctlr->resp_intr_pending = 1; rc |= TW_CL_TRUE; /* request for a deferred isr call */ } -out: +out_unlock: if (ctlr->state & TW_CLI_CTLR_STATE_G66_WORKAROUND_NEEDED) tw_osl_free_lock(ctlr_handle, ctlr->io_lock); - +out: return(rc); } @@ -290,11 +295,6 @@ /* Response queue is not empty. */ resp = TW_CLI_READ_RESPONSE_QUEUE(ctlr->ctlr_handle); -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - if (GET_RESP_ID(resp) >= 1) - req = ctlr->busy_reqs[GET_RESP_ID(resp)]; - else -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ { req = &(ctlr->req_ctxt_buf[GET_RESP_ID(resp)]); } @@ -322,13 +322,6 @@ req->state = TW_CLI_REQ_STATE_COMPLETE; tw_cli_req_q_insert_tail(req, TW_CLI_COMPLETE_Q); -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - tw_osl_free_lock(ctlr->ctlr_handle, ctlr->intr_lock); - /* Call the CL internal callback, if there's one. */ - if (req->tw_cli_callback) - req->tw_cli_callback(req); - tw_osl_get_lock(ctlr->ctlr_handle, ctlr->intr_lock); -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ } /* Unmask the response interrupt. */ @@ -337,10 +330,8 @@ tw_osl_free_lock(ctlr->ctlr_handle, ctlr->intr_lock); -#ifndef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST /* Complete this, and other requests in the complete queue. */ tw_cli_process_complete_queue(ctlr); -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ return(error); } Index: sys/dev/twa/tw_cl_io.c =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_io.c,v retrieving revision 1.1.4.1 diff -u -r1.1.4.1 tw_cl_io.c --- sys/dev/twa/tw_cl_io.c 7 Dec 2005 18:18:05 -0000 1.1.4.1 +++ sys/dev/twa/tw_cl_io.c 13 Apr 2007 12:59:20 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ @@ -96,9 +97,6 @@ } if ((req = tw_cli_get_request(ctlr -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - , req_pkt -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ )) == TW_CL_NULL) { tw_cli_dbg_printf(2, ctlr_handle, tw_osl_cur_func(), "Out of request context packets: returning busy"); @@ -107,17 +105,6 @@ } req_handle->cl_req_ctxt = req; - -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - - req->cmd_pkt = req_pkt->dma_mem; - req->cmd_pkt_phys = req_pkt->dma_mem_phys; - tw_osl_memzero(req->cmd_pkt, - sizeof(struct tw_cl_command_header) + - 28 /* max bytes before sglist */); - -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - req->req_handle = req_handle; req->orig_req = req_pkt; req->tw_cli_callback = tw_cli_complete_io; @@ -184,23 +171,17 @@ TW_UINT32 status_reg; TW_INT32 error; TW_UINT8 notify_osl_of_ctlr_busy = TW_CL_FALSE; -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - TW_SYNC_HANDLE sync_handle; -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ tw_cli_dbg_printf(10, ctlr_handle, tw_osl_cur_func(), "entered"); /* Serialize access to the controller cmd queue. */ tw_osl_get_lock(ctlr_handle, ctlr->io_lock); -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - if (req->flags & TW_CLI_REQ_FLAGS_EXTERNAL) { - if (!(ctlr->flags & TW_CL_DEFERRED_INTR_USED)) - tw_osl_sync_isr_block(ctlr_handle, &sync_handle); - } else { - if (ctlr->flags & TW_CL_DEFERRED_INTR_USED) - tw_osl_sync_io_block(ctlr_handle, &sync_handle); - } -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ + + /* For 9650SE first write low 4 bytes */ + if (ctlr->device_id == TW_CL_DEVICE_ID_9K_E) + tw_osl_write_reg(ctlr_handle, + TWA_COMMAND_QUEUE_OFFSET_LOW, + (TW_UINT32)(req->cmd_pkt_phys + sizeof(struct tw_cl_command_header)), 4); /* Check to see if we can post a command. */ status_reg = TW_CLI_READ_STATUS_REGISTER(ctlr_handle); @@ -215,10 +196,8 @@ "Cmd queue full"); if ((req->flags & TW_CLI_REQ_FLAGS_INTERNAL) -#ifndef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST || ((req_pkt) && (req_pkt->flags & TW_CL_REQ_RETRY_ON_BUSY)) -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ ) { if (req->state != TW_CLI_REQ_STATE_PENDING) { tw_cli_dbg_printf(2, ctlr_handle, @@ -237,28 +216,31 @@ tw_cli_dbg_printf(10, ctlr_handle, tw_osl_cur_func(), "Submitting command"); - /* - * The controller cmd queue is not full. Mark the request as - * currently being processed by the firmware, and move it into - * the busy queue. Then submit the cmd. - */ + /* Insert command into busy queue */ req->state = TW_CLI_REQ_STATE_BUSY; tw_cli_req_q_insert_tail(req, TW_CLI_BUSY_Q); - TW_CLI_WRITE_COMMAND_QUEUE(ctlr_handle, - req->cmd_pkt_phys + - sizeof(struct tw_cl_command_header)); - } -out: -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - if (req->flags & TW_CLI_REQ_FLAGS_EXTERNAL) { - if (!(ctlr->flags & TW_CL_DEFERRED_INTR_USED)) - tw_osl_sync_isr_unblock(ctlr_handle, &sync_handle); - } else { - if (ctlr->flags & TW_CL_DEFERRED_INTR_USED) - tw_osl_sync_io_unblock(ctlr_handle, &sync_handle); + if (ctlr->device_id == TW_CL_DEVICE_ID_9K_E) { + /* Now write the high 4 bytes */ + tw_osl_write_reg(ctlr_handle, + TWA_COMMAND_QUEUE_OFFSET_HIGH, + (TW_UINT32)(((TW_UINT64)(req->cmd_pkt_phys + sizeof(struct tw_cl_command_header)))>>32), 4); + } else { + if (ctlr->flags & TW_CL_64BIT_ADDRESSES) { + /* First write the low 4 bytes, then the high 4. */ + tw_osl_write_reg(ctlr_handle, + TWA_COMMAND_QUEUE_OFFSET_LOW, + (TW_UINT32)(req->cmd_pkt_phys + sizeof(struct tw_cl_command_header)), 4); + tw_osl_write_reg(ctlr_handle, + TWA_COMMAND_QUEUE_OFFSET_HIGH, + (TW_UINT32)(((TW_UINT64)(req->cmd_pkt_phys + sizeof(struct tw_cl_command_header)))>>32), 4); + } else + tw_osl_write_reg(ctlr_handle, + TWA_COMMAND_QUEUE_OFFSET, + (TW_UINT32)(req->cmd_pkt_phys + sizeof(struct tw_cl_command_header)), 4); + } } -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ +out: tw_osl_free_lock(ctlr_handle, ctlr->io_lock); if (status_reg & TWA_STATUS_COMMAND_QUEUE_FULL) { @@ -324,9 +306,6 @@ } if ((req = tw_cli_get_request(ctlr -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - , req_pkt -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ )) == TW_CL_NULL) { tw_cli_dbg_printf(2, ctlr_handle, tw_osl_cur_func(), "Out of request context packets: returning busy"); @@ -335,17 +314,6 @@ } req_handle->cl_req_ctxt = req; - -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - - req->cmd_pkt = req_pkt->dma_mem; - req->cmd_pkt_phys = req_pkt->dma_mem_phys; - tw_osl_memzero(req->cmd_pkt, - sizeof(struct tw_cl_command_header) + - 28 /* max bytes before sglist */); - -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - req->req_handle = req_handle; req->orig_req = req_pkt; req->tw_cli_callback = tw_cli_complete_io; @@ -725,7 +693,7 @@ TWA_CURRENT_FW_BUILD(ctlr->arch_id); comp_pkt.driver_srl_low = TWA_BASE_FW_SRL; comp_pkt.driver_branch_low = TWA_BASE_FW_BRANCH; - comp_pkt.driver_build_high = TWA_BASE_FW_BUILD; + comp_pkt.driver_build_low = TWA_BASE_FW_BUILD; comp_pkt.fw_on_ctlr_srl = ctlr->fw_on_ctlr_srl; comp_pkt.fw_on_ctlr_branch = ctlr->fw_on_ctlr_branch; comp_pkt.fw_on_ctlr_build = ctlr->fw_on_ctlr_build; @@ -781,9 +749,6 @@ /* Get a request packet. */ if ((req = tw_cli_get_request(ctlr -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - , TW_CL_NULL -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ )) == TW_CL_NULL) goto out; @@ -793,17 +758,6 @@ goto out; } ctlr->state |= TW_CLI_CTLR_STATE_INTERNAL_REQ_BUSY; - -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - - req->cmd_pkt = ctlr->cmd_pkt_buf; - req->cmd_pkt_phys = ctlr->cmd_pkt_phys; - tw_osl_memzero(req->cmd_pkt, - sizeof(struct tw_cl_command_header) + - 28 /* max bytes before sglist */); - -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - req->data = ctlr->internal_req_data; req->data_phys = ctlr->internal_req_data_phys; req->length = TW_CLI_SECTOR_SIZE; @@ -914,9 +868,6 @@ /* Get a request packet. */ if ((req = tw_cli_get_request(ctlr -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - , TW_CL_NULL -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ )) == TW_CL_NULL) goto out; @@ -926,17 +877,6 @@ goto out; } ctlr->state |= TW_CLI_CTLR_STATE_INTERNAL_REQ_BUSY; - -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - - req->cmd_pkt = ctlr->cmd_pkt_buf; - req->cmd_pkt_phys = ctlr->cmd_pkt_phys; - tw_osl_memzero(req->cmd_pkt, - sizeof(struct tw_cl_command_header) + - 28 /* max bytes before sglist */); - -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - req->data = ctlr->internal_req_data; req->data_phys = ctlr->internal_req_data_phys; req->length = TW_CLI_SECTOR_SIZE; @@ -1232,7 +1172,8 @@ TW_CLI_SOFT_RESET(ctlr_handle); - if (ctlr->device_id == TW_CL_DEVICE_ID_9K_X) { + if ((ctlr->device_id == TW_CL_DEVICE_ID_9K_X) || + (ctlr->device_id == TW_CL_DEVICE_ID_9K_E)) { /* * There's a hardware bug in the G133 ASIC, which can lead to * PCI parity errors and hangs, if the host accesses any @@ -1406,22 +1347,9 @@ tw_cli_dbg_printf(4, ctlr->ctlr_handle, tw_osl_cur_func(), "entered"); if ((req = tw_cli_get_request(ctlr -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - , TW_CL_NULL -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ )) == TW_CL_NULL) return(TW_OSL_EBUSY); -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - - req->cmd_pkt = ctlr->cmd_pkt_buf; - req->cmd_pkt_phys = ctlr->cmd_pkt_phys; - tw_osl_memzero(req->cmd_pkt, - sizeof(struct tw_cl_command_header) + - 28 /* max bytes before sglist */); - -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - req->flags |= TW_CLI_REQ_FLAGS_INTERNAL; req->flags |= TW_CLI_REQ_FLAGS_9K; req->tw_cli_callback = tw_cli_aen_callback; Index: sys/dev/twa/tw_cl_ioctl.h =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_ioctl.h,v retrieving revision 1.1.4.1 diff -u -r1.1.4.1 tw_cl_ioctl.h --- sys/dev/twa/tw_cl_ioctl.h 7 Dec 2005 18:18:05 -0000 1.1.4.1 +++ sys/dev/twa/tw_cl_ioctl.h 13 Apr 2007 12:59:20 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ Index: sys/dev/twa/tw_cl_misc.c =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_misc.c,v retrieving revision 1.1.4.1 diff -u -r1.1.4.1 tw_cl_misc.c --- sys/dev/twa/tw_cl_misc.c 7 Dec 2005 18:18:05 -0000 1.1.4.1 +++ sys/dev/twa/tw_cl_misc.c 13 Apr 2007 12:59:20 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ @@ -314,24 +315,11 @@ for (;;) { if ((req = tw_cli_get_request(ctlr -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - , TW_CL_NULL -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ )) == TW_CL_NULL) { error = TW_OSL_EBUSY; break; } -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - - req->cmd_pkt = ctlr->cmd_pkt_buf; - req->cmd_pkt_phys = ctlr->cmd_pkt_phys; - tw_osl_memzero(req->cmd_pkt, - sizeof(struct tw_cl_command_header) + - 28 /* max bytes before sglist */); - -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - req->flags |= TW_CLI_REQ_FLAGS_INTERNAL; req->tw_cli_callback = TW_CL_NULL; if ((error = tw_cli_send_scsi_cmd(req, @@ -601,31 +589,12 @@ */ struct tw_cli_req_context * tw_cli_get_request(struct tw_cli_ctlr_context *ctlr -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - , struct tw_cl_req_packet *req_pkt -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ ) { struct tw_cli_req_context *req; tw_cli_dbg_printf(4, ctlr->ctlr_handle, tw_osl_cur_func(), "entered"); -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - - if (req_pkt) { - if (ctlr->num_free_req_ids == 0) - return(TW_CL_NULL); - - ctlr->num_free_req_ids--; - req = (struct tw_cli_req_context *)(req_pkt->non_dma_mem); - req->ctlr = ctlr; - req->request_id = ctlr->free_req_ids[ctlr->free_req_head]; - ctlr->busy_reqs[req->request_id] = req; - ctlr->free_req_head = (ctlr->free_req_head + 1) % - (ctlr->max_simult_reqs - 1); - } else - -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ { /* Get a free request packet. */ req = tw_cli_req_q_remove_head(ctlr, TW_CLI_FREE_Q); @@ -643,8 +612,6 @@ req->orig_req = TW_CL_NULL; req->tw_cli_callback = TW_CL_NULL; -#ifndef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - /* * Look at the status field in the command packet to see how * it completed the last time it was used, and zero out only @@ -659,7 +626,6 @@ tw_osl_memzero(&(req->cmd_pkt->command), 28 /* max bytes before sglist */); -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ } return(req); } @@ -843,13 +809,14 @@ } if (status_reg & TWA_STATUS_QUEUE_ERROR_INTERRUPT) { - tw_cl_create_event(ctlr_handle, TW_CL_TRUE, - TW_CL_MESSAGE_SOURCE_COMMON_LAYER_EVENT, - 0x1305, 0x1, TW_CL_SEVERITY_ERROR_STRING, - "Controller queue error: clearing... ", - "status reg = 0x%x %s", - status_reg, - tw_cli_describe_bits(status_reg, desc)); + if (ctlr->device_id != TW_CL_DEVICE_ID_9K_E) + tw_cl_create_event(ctlr_handle, TW_CL_TRUE, + TW_CL_MESSAGE_SOURCE_COMMON_LAYER_EVENT, + 0x1305, 0x1, TW_CL_SEVERITY_ERROR_STRING, + "Controller queue error: clearing... ", + "status reg = 0x%x %s", + status_reg, + tw_cli_describe_bits(status_reg, desc)); TW_CLI_WRITE_CONTROL_REGISTER(ctlr->ctlr_handle, TWA_CONTROL_CLEAR_QUEUE_ERROR); } Index: sys/dev/twa/tw_cl_share.h =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_share.h,v retrieving revision 1.1.4.1 diff -u -r1.1.4.1 tw_cl_share.h --- sys/dev/twa/tw_cl_share.h 7 Dec 2005 18:18:05 -0000 1.1.4.1 +++ sys/dev/twa/tw_cl_share.h 13 Apr 2007 12:59:21 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ @@ -45,9 +46,6 @@ * and defined by CL. */ - -#define TW_CL_VERSION_STRING "1.00.01.011" - #define TW_CL_NULL ((TW_VOID *)0) #define TW_CL_TRUE 1 #define TW_CL_FALSE 0 @@ -55,6 +53,7 @@ #define TW_CL_VENDOR_ID 0x13C1 /* 3ware vendor id */ #define TW_CL_DEVICE_ID_9K 0x1002 /* 9000 PCI series device id */ #define TW_CL_DEVICE_ID_9K_X 0x1003 /* 9000 PCI-X series device id */ +#define TW_CL_DEVICE_ID_9K_E 0x1004 /* 9000 PCIe series device id */ #define TW_CL_BAR_TYPE_IO 1 /* I/O base address */ #define TW_CL_BAR_TYPE_MEM 2 /* memory base address */ @@ -64,7 +63,7 @@ #define TW_CL_MAX_NUM_UNITS 65 /* max # of units we support -- enclosure target id is 64 */ #else /* TW_OSL_ENCLOSURE_SUPPORT */ -#define TW_CL_MAX_NUM_UNITS 16 /* max # of units we support */ +#define TW_CL_MAX_NUM_UNITS 32 /* max # of units we support */ #endif /* TW_OSL_ENCLOSURE_SUPPORT */ #define TW_CL_MAX_NUM_LUNS 16 /* max # of LUN's we support */ @@ -86,7 +85,6 @@ #define TW_CL_64BIT_SG_LENGTH (1<<1) /* 64 bit SG length */ #define TW_CL_START_CTLR_ONLY (1<<2) /* Start ctlr only */ #define TW_CL_STOP_CTLR_ONLY (1<<3) /* Stop ctlr only */ -#define TW_CL_FLASH_FIRMWARE (1<<4) /* Flash firmware */ #define TW_CL_DEFERRED_INTR_USED (1<<5) /* OS Layer uses deferred intr */ /* Possible error values from the Common Layer. */ @@ -101,9 +99,7 @@ /* Possible values of req_pkt->flags */ -#ifndef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST #define TW_CL_REQ_RETRY_ON_BUSY (1<<0) -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ #define TW_CL_REQ_CALLBACK_FOR_SGLIST (1<<1) @@ -184,19 +180,6 @@ TW_UINT32 *num_sgl_entries); /* OSL callback to get SG list. */ -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - - TW_VOID *dma_mem; - TW_UINT64 dma_mem_phys; - -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - - TW_VOID *non_dma_mem; - -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ - union { struct tw_cl_scsi_req_packet scsi_req; /* SCSI req */ struct tw_cl_passthru_req_packet pt_req;/*Passthru req*/ @@ -496,39 +479,6 @@ extern TW_INT32 tw_osl_strlen(TW_VOID *str); #endif - -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - -#ifndef tw_osl_sync_io_block -/* Block new I/O requests from being sent by the OS Layer. */ -extern TW_VOID tw_osl_sync_io_block(struct tw_cl_ctlr_handle *ctlr_handle, - TW_SYNC_HANDLE *sync_handle); -#endif - - -#ifndef tw_osl_sync_io_unblock -/* Allow new I/O requests from the OS Layer. */ -extern TW_VOID tw_osl_sync_io_unblock(struct tw_cl_ctlr_handle *ctlr_handle, - TW_SYNC_HANDLE *sync_handle); -#endif - - -#ifndef tw_osl_sync_isr_block -/* Block the ISR from being called by the OS Layer. */ -extern TW_VOID tw_osl_sync_isr_block(struct tw_cl_ctlr_handle *ctlr_handle, - TW_SYNC_HANDLE *sync_handle); -#endif - - -#ifndef tw_osl_sync_isr_unblock -/* Allow calls to the ISR from the OS Layer. */ -extern TW_VOID tw_osl_sync_isr_unblock(struct tw_cl_ctlr_handle *ctlr_handle, - TW_SYNC_HANDLE *sync_handle); -#endif - -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */ - - #ifndef tw_osl_vsprintf /* Standard vsprintf. */ extern TW_INT32 tw_osl_vsprintf(TW_INT8 *dest, const TW_INT8 *fmt, va_list ap); @@ -591,15 +541,6 @@ TW_INT32 device_id, TW_INT32 max_simult_reqs, TW_INT32 max_aens, TW_UINT32 *alignment, TW_UINT32 *sg_size_factor, TW_UINT32 *non_dma_mem_size, TW_UINT32 *dma_mem_size -#ifdef TW_OSL_FLASH_FIRMWARE - , TW_UINT32 *flash_dma_mem_size -#endif /* TW_OSL_FLASH_FIRMWARE */ -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - , TW_UINT32 *per_req_dma_mem_size -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST - , TW_UINT32 *per_req_non_dma_mem_size -#endif /* TW_OSL_N0N_DMA_MEM_ALLOC_PER_REQUEST */ ); @@ -613,9 +554,6 @@ TW_UINT32 flags, TW_INT32 device_id, TW_INT32 max_simult_reqs, TW_INT32 max_aens, TW_VOID *non_dma_mem, TW_VOID *dma_mem, TW_UINT64 dma_mem_phys -#ifdef TW_OSL_FLASH_FIRMWARE - , TW_VOID *flash_dma_mem, TW_UINT64 flash_dma_mem_phys -#endif /* TW_OSL_FLASH_FIRMWARE */ ); Index: sys/dev/twa/tw_osl.h =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_osl.h,v retrieving revision 1.1.4.1 diff -u -r1.1.4.1 tw_osl.h --- sys/dev/twa/tw_osl.h 7 Dec 2005 18:18:05 -0000 1.1.4.1 +++ sys/dev/twa/tw_osl.h 13 Apr 2007 12:59:21 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap. * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ @@ -133,11 +134,6 @@ TW_VOID *non_dma_mem; TW_VOID *dma_mem; TW_UINT64 dma_mem_phys; -#ifdef TW_OSL_FLASH_FIRMWARE - TW_VOID *flash_dma_mem; - TW_UINT64 flash_dma_mem_phys; -#endif /* TW_OSL_FLASH_FIRMWARE */ - /* Request queues and arrays. */ struct tw_cl_link req_q_head[TW_OSLI_Q_COUNT]; @@ -164,10 +160,6 @@ bus_dma_tag_t ioctl_tag; /* ioctl data buffer DMA tag */ bus_dmamap_t cmd_map; /* DMA map for CL's DMA'able mem */ bus_dmamap_t ioctl_map; /* DMA map for ioctl data buffers */ -#ifdef TW_OSL_FLASH_FIRMWARE - bus_dma_tag_t flash_tag;/* DMA tag for CL's fw flash mem */ - bus_dmamap_t flash_map;/* DMA map for CL's fw flash mem */ -#endif /* TW_OSL_FLASH_FIRMWARE */ struct resource *irq_res; /* interrupt resource */ TW_INT32 irq_res_id; /* register resource id */ TW_VOID *intr_handle; /* interrupt handle */ Index: sys/dev/twa/tw_osl_cam.c =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_cam.c,v retrieving revision 1.3.2.1 diff -u -r1.3.2.1 tw_osl_cam.c --- sys/dev/twa/tw_osl_cam.c 7 Dec 2005 18:18:05 -0000 1.3.2.1 +++ sys/dev/twa/tw_osl_cam.c 13 Apr 2007 12:59:21 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap. * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ @@ -130,6 +131,7 @@ 0x2102, "Failed to register the bus", ENXIO); + mtx_unlock(&Giant); return(ENXIO); } @@ -147,6 +149,7 @@ 0x2103, "Failed to create path", ENXIO); + mtx_unlock(&Giant); return(ENXIO); } @@ -580,8 +583,11 @@ bzero(ccb, sizeof(union ccb)); mtx_lock(&Giant); if (xpt_create_path(&path, xpt_periph, cam_sim_path(sc->sim), - CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) + CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) { + free(ccb, M_TEMP); + mtx_unlock(&Giant); return(EIO); + } xpt_setup_ccb(&ccb->ccb_h, path, 5); ccb->ccb_h.func_code = XPT_SCAN_BUS; Index: sys/dev/twa/tw_osl_externs.h =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_externs.h,v retrieving revision 1.1 diff -u -r1.1 tw_osl_externs.h --- sys/dev/twa/tw_osl_externs.h 12 Apr 2005 22:07:09 -0000 1.1 +++ sys/dev/twa/tw_osl_externs.h 13 Apr 2007 12:59:21 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap. * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ Index: sys/dev/twa/tw_osl_freebsd.c =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_freebsd.c,v retrieving revision 1.1.4.2 diff -u -r1.1.4.2 tw_osl_freebsd.c --- sys/dev/twa/tw_osl_freebsd.c 14 Dec 2006 02:57:07 -0000 1.1.4.2 +++ sys/dev/twa/tw_osl_freebsd.c 13 Apr 2007 12:59:21 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap. * Copyright (c) 2000 Michael Smith * Copyright (c) 2000 BSDi @@ -33,6 +33,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ @@ -207,7 +208,6 @@ }; DRIVER_MODULE(twa, pci, twa_pci_driver, twa_devclass, 0, 0); - MODULE_DEPEND(twa, pci, 1, 1, 1); MODULE_DEPEND(twa, cam, 1, 1, 1); @@ -393,9 +393,6 @@ TW_OSLI_MAX_NUM_IOS, TW_OSLI_MAX_NUM_AENS, sc->non_dma_mem, sc->dma_mem, sc->dma_mem_phys -#ifdef TW_OSL_FLASH_FIRMWARE - , sc->flash_dma_mem, sc->flash_dma_mem_phys -#endif /* TW_OSL_FLASH_FIRMWARE */ ))) { tw_osli_printf(sc, "error = %d", TW_CL_SEVERITY_ERROR_STRING, @@ -407,23 +404,6 @@ return(error); } -#ifdef TW_OSL_FLASH_FIRMWARE - /* Free any memory allocated for firmware flashing. */ - if (sc->flash_dma_mem) { - bus_dmamap_unload(sc->flash_tag, sc->flash_map); - bus_dmamem_free(sc->flash_tag, sc->flash_dma_mem, - sc->flash_map); - } - if (sc->flash_tag) - bus_dma_tag_destroy(sc->flash_tag); - /* - * Set flash_tag and flash_dma_mem to 0, so we don't try freeing them - * again, later. - */ - sc->flash_tag = 0; - sc->flash_dma_mem = 0; -#endif /* TW_OSL_FLASH_FIRMWARE */ - /* Create the control device. */ sc->ctrl_dev = make_dev(&twa_cdevsw, device_get_unit(sc->bus_dev), UID_ROOT, GID_OPERATOR, S_IRUSR | S_IWUSR, @@ -462,12 +442,6 @@ TW_UINT32 max_sg_elements; TW_UINT32 non_dma_mem_size; TW_UINT32 dma_mem_size; -#ifdef TW_OSL_FLASH_FIRMWARE - TW_UINT32 flash_dma_mem_size; -#endif /* TW_OSL_FLASH_FIRMWARE */ -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - TW_UINT32 per_req_dma_mem_size; -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ TW_INT32 error; TW_INT32 i; @@ -475,9 +449,6 @@ sc->flags |= (sizeof(bus_addr_t) == 8) ? TW_CL_64BIT_ADDRESSES : 0; sc->flags |= (sizeof(bus_size_t) == 8) ? TW_CL_64BIT_SG_LENGTH : 0; -#ifdef TW_OSL_FLASH_FIRMWARE - sc->flags |= TW_CL_FLASH_FIRMWARE; -#endif /* TW_OSL_FLASH_FIRMWARE */ #ifdef TW_OSLI_DEFERRED_INTR_USED sc->flags |= TW_CL_DEFERRED_INTR_USED; #endif /* TW_OSLI_DEFERRED_INTR_USED */ @@ -489,12 +460,6 @@ sc->device_id, TW_OSLI_MAX_NUM_IOS, TW_OSLI_MAX_NUM_AENS, &(sc->alignment), &(sc->sg_size_factor), &non_dma_mem_size, &dma_mem_size -#ifdef TW_OSL_FLASH_FIRMWARE - , &flash_dma_mem_size -#endif /* TW_OSL_FLASH_FIRMWARE */ -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - , &per_req_dma_mem_size -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ ))) { tw_osli_printf(sc, "error = %d", TW_CL_SEVERITY_ERROR_STRING, @@ -546,10 +511,6 @@ BUS_SPACE_MAXADDR, /* lowaddr */ BUS_SPACE_MAXADDR, /* highaddr */ NULL, NULL, /* filter, filterarg */ -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - (TW_OSLI_MAX_NUM_IOS * - per_req_dma_mem_size) + -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ dma_mem_size, /* maxsize */ 1, /* nsegments */ BUS_SPACE_MAXSIZE, /* maxsegsize */ @@ -587,53 +548,6 @@ dma_mem_size, twa_map_load_callback, &sc->dma_mem_phys, 0); - -#ifdef TW_OSL_FLASH_FIRMWARE - /* - * Create a dma tag for Common Layer's DMA'able memory, - * used to flash firmware (flash_dma_mem). - */ - if (bus_dma_tag_create(sc->parent_tag, /* parent */ - sc->alignment, /* alignment */ - 0, /* boundary */ - BUS_SPACE_MAXADDR, /* lowaddr */ - BUS_SPACE_MAXADDR, /* highaddr */ - NULL, NULL, /* filter, filterarg */ - flash_dma_mem_size, /* maxsize */ - 1, /* nsegments */ - flash_dma_mem_size, /* maxsegsize */ - 0, /* flags */ - NULL, /* lockfunc */ - NULL, /* lockfuncarg */ - &sc->flash_tag /* tag */)) { - tw_osli_printf(sc, "error = %d", - TW_CL_SEVERITY_ERROR_STRING, - TW_CL_MESSAGE_SOURCE_FREEBSD_DRIVER, - 0x200D, - "Can't allocate DMA tag for Common Layer's " - "firmware flash memory", - ENOMEM); - return(ENOMEM); - } - - if (bus_dmamem_alloc(sc->flash_tag, &sc->flash_dma_mem, - BUS_DMA_NOWAIT, &sc->flash_map)) { - tw_osli_printf(sc, "error = %d", - TW_CL_SEVERITY_ERROR_STRING, - TW_CL_MESSAGE_SOURCE_FREEBSD_DRIVER, - 0x200E, - "Can't allocate DMA'able memory for Common Layer's " - "firmware flash", - ENOMEM); - return(ENOMEM); - } - - bus_dmamap_load(sc->flash_tag, sc->flash_map, sc->flash_dma_mem, - flash_dma_mem_size, twa_map_load_callback, - &sc->flash_dma_mem_phys, 0); - -#endif /* TW_OSL_FLASH_FIRMWARE */ - /* * Create a dma tag for data buffers; size will be the maximum * possible I/O size (128kB). @@ -730,27 +644,10 @@ return(ENOMEM); } -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - - req->req_pkt.dma_mem = ((TW_INT8 *)(sc->dma_mem)) + - (i * per_req_dma_mem_size); - req->req_pkt.dma_mem_phys = sc->dma_mem_phys + - (i * per_req_dma_mem_size); - -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - /* Insert request into the free queue. */ tw_osli_req_q_insert_tail(req, TW_OSLI_FREE_Q); } -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - - sc->dma_mem = ((TW_INT8 *)(sc->dma_mem)) + - (TW_OSLI_MAX_NUM_IOS * per_req_dma_mem_size); - sc->dma_mem_phys += (TW_OSLI_MAX_NUM_IOS * per_req_dma_mem_size); - -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - return(0); } @@ -806,22 +703,6 @@ tw_osli_dbg_dprintf(1, sc, "dma_tag_destroy(cmd) returned %d", error); - -#ifdef TW_OSL_FLASH_FIRMWARE - - if (sc->flash_dma_mem) { - /* In case this piece of memory has already been freed. */ - bus_dmamap_unload(sc->flash_tag, sc->flash_map); - bus_dmamem_free(sc->flash_tag, sc->flash_dma_mem, - sc->flash_map); - } - if (sc->flash_tag) - if ((error = bus_dma_tag_destroy(sc->flash_tag))) - tw_osli_dbg_dprintf(1, sc, - "dma_tag_destroy(flash) returned %d", error); - -#endif /* TW_OSL_FLASH_FIRMWARE */ - if (sc->dma_tag) if ((error = bus_dma_tag_destroy(sc->dma_tag))) tw_osli_dbg_dprintf(1, sc, @@ -1312,21 +1193,8 @@ req->error_code = 0; req->orig_req = NULL; -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST - - /* Don't zero dma_mem & dma_mem_phys in req_pkt. */ - req->req_pkt.cmd = 0; - req->req_pkt.flags = 0; - req->req_pkt.status = 0; - req->req_pkt.tw_osl_callback = NULL; - bzero(&(req->req_pkt.gen_req_pkt), - sizeof(req->req_pkt.gen_req_pkt)); - -#else /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ - bzero(&(req->req_pkt), sizeof(struct tw_cl_req_packet)); -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */ } return(req); } Index: sys/dev/twa/tw_osl_includes.h =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_includes.h,v retrieving revision 1.1.4.1 diff -u -r1.1.4.1 tw_osl_includes.h --- sys/dev/twa/tw_osl_includes.h 7 Dec 2005 18:18:05 -0000 1.1.4.1 +++ sys/dev/twa/tw_osl_includes.h 13 Apr 2007 12:59:21 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap. * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ Index: sys/dev/twa/tw_osl_inline.h =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_inline.h,v retrieving revision 1.1.2.1 diff -u -r1.1.2.1 tw_osl_inline.h --- sys/dev/twa/tw_osl_inline.h 7 Dec 2005 18:18:05 -0000 1.1.2.1 +++ sys/dev/twa/tw_osl_inline.h 13 Apr 2007 12:59:21 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap. * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ Index: sys/dev/twa/tw_osl_ioctl.h =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_ioctl.h,v retrieving revision 1.1.4.1 diff -u -r1.1.4.1 tw_osl_ioctl.h --- sys/dev/twa/tw_osl_ioctl.h 7 Dec 2005 18:18:05 -0000 1.1.4.1 +++ sys/dev/twa/tw_osl_ioctl.h 13 Apr 2007 12:59:21 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap. * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ Index: sys/dev/twa/tw_osl_share.h =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_share.h,v retrieving revision 1.2.2.1 diff -u -r1.2.2.1 tw_osl_share.h --- sys/dev/twa/tw_osl_share.h 7 Dec 2005 18:18:05 -0000 1.2.2.1 +++ sys/dev/twa/tw_osl_share.h 13 Apr 2007 12:59:21 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap. * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ @@ -70,10 +71,6 @@ #define TW_OSL_DEBUG TWA_DEBUG #endif -#ifdef TWA_FLASH_FIRMWARE -#define TW_OSL_FLASH_FIRMWARE -#endif - #ifdef TWA_ENCLOSURE_SUPPORT #define TW_OSL_ENCLOSURE_SUPPORT #endif @@ -86,7 +83,6 @@ typedef TW_VOID *TW_SLEEP_HANDLE; #endif /* TW_OSL_CAN_SLEEP */ -/*#define TW_OSL_DMA_MEM_ALLOC_PER_REQUEST*/ #define TW_OSL_PCI_CONFIG_ACCESSIBLE #if _BYTE_ORDER == _BIG_ENDIAN Index: sys/dev/twa/tw_osl_types.h =================================================================== RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_types.h,v retrieving revision 1.1 diff -u -r1.1 tw_osl_types.h --- sys/dev/twa/tw_osl_types.h 12 Apr 2005 22:07:09 -0000 1.1 +++ sys/dev/twa/tw_osl_types.h 13 Apr 2007 12:59:21 -0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-05 Applied Micro Circuits Corporation. + * Copyright (c) 2004-07 Applied Micro Circuits Corporation. * Copyright (c) 2004-05 Vinod Kashyap. * All rights reserved. * @@ -31,6 +31,7 @@ * AMCC'S 3ware driver for 9000 series storage controllers. * * Author: Vinod Kashyap + * Modifications by: Adam Radford */ Index: sys/modules/twa/Makefile =================================================================== RCS file: /home/ncvs/src/sys/modules/twa/Makefile,v retrieving revision 1.4.2.1 diff -u -r1.4.2.1 Makefile --- sys/modules/twa/Makefile 7 Dec 2005 18:18:06 -0000 1.4.2.1 +++ sys/modules/twa/Makefile 13 Apr 2007 12:59:21 -0000 @@ -1,6 +1,6 @@ # $FreeBSD: src/sys/modules/twa/Makefile,v 1.4.2.1 2005/12/07 18:18:06 vkashyap Exp $ # -# Copyright (c) 2004 Applied Micro Circuits Corporation. +# Copyright (c) 2004-06 Applied Micro Circuits Corporation. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -29,31 +29,9 @@ # 3ware driver for 9000 series storage controllers. # # Author: Vinod Kashyap +# Modifications by: Adam Radford # - - -# -# In the line following this comment, a value of 0 on the right hand -# side will not cause firmware to be bundled. Change this value to 1 -# to bundle the firmware with the driver, which may be flashed onto -# the controller, if the firmware on the controller is older than the -# one bundled, and needs to be upgraded. The size of the driver will -# increase significantly (to over 500kB) if this option is selected. -# Typically, the firmware image bundled (in tw_cl_fwimg.c) corresponds -# to the latest controller architecture as of the date of the release. -# If the firmware for an earlier controller architecture needs to be -# flashed, the (older) driver with the appropriate firmware image -# bundled can be downloaded from the 3ware website, used to flash the -# firmware, and then the newer driver can be switched to. Alternatively, -# the appropriate firmware image (tw_cl_fwimg.c) from the older driver can -# be used to re-build the newer driver. In this case, the branch -# (TWA_CURRENT_FW_BRANCH_*) and build (TWA_CURRENT_FW_BUILD_*) numbers for -# the bundled firmware need to be appropriately updated in tw_cl_fwif.h -# before building the driver. -# -TWA_FLASH_FIRMWARE?=0 - KMOD = twa .PATH: ${.CURDIR}/../../dev/${KMOD} SRCS= tw_osl_freebsd.c tw_osl_cam.c \ @@ -66,10 +44,6 @@ #CFLAGS+= -DTWA_DEBUG=0 CFLAGS+= -I${.CURDIR}/../../dev/${KMOD} -.if $(TWA_FLASH_FIRMWARE) != 0 -CFLAGS+= -DTWA_FLASH_FIRMWARE -SRCS+= tw_cl_fwimg.c -.endif - .include <bsd.kmod.mk> + --=-=-=--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200704131440.l3DEe7ci090274>