NetBSD Problem Report #39395

From www@NetBSD.org  Sat Aug 23 14:43:44 2008
Return-Path: <www@NetBSD.org>
Received: from mail.netbsd.org (mail.netbsd.org [204.152.190.11])
	by narn.NetBSD.org (Postfix) with ESMTP id 2594663B853
	for <gnats-bugs@gnats.netbsd.org>; Sat, 23 Aug 2008 14:43:44 +0000 (UTC)
Message-Id: <20080823144343.BDB1563B11D@narn.NetBSD.org>
Date: Sat, 23 Aug 2008 14:43:43 +0000 (UTC)
From: xtraeme@gmail.com
Reply-To: xtraeme@gmail.com
To: gnats-bugs@NetBSD.org
Subject: ataraid(4): JMicron RAID support
X-Send-Pr-Version: www-1.0

>Number:         39395
>Category:       kern
>Synopsis:       ataraid(4): JMicron RAID support
>Confidential:   no
>Severity:       non-critical
>Priority:       high
>Responsible:    tron
>State:          closed
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Sat Aug 23 14:45:00 +0000 2008
>Closed-Date:    Fri Sep 05 12:41:12 +0000 2008
>Last-Modified:  Fri Sep 05 12:41:12 +0000 2008
>Originator:     Juan RP
>Release:        Latest and greatest
>Organization:
Not NetBSD
>Environment:
NetBSD sasha 4.99.72 NetBSD 4.99.72 (MASTER) #0: Thu Aug 21 15:52:46 CEST 2008  juan@sasha:/home/juan/build/amd64/obj/sys/arch/amd64/compile/MASTER amd64
>Description:
The ataraid(4) driver lacks support for parsing JMicron RAID metadata config blocks as required by the NetBSD driver.

I've adapted the code from FreeBSD and tested it on my system, with the three modes supported: RAID 0, RAID 1 and JBOD.

The code is working fine, but there are more problems in the ataraid(4) driver that will be addressed in the future.
>How-To-Repeat:

>Fix:
Here's the full patch:

begin 644 ataraid_jmicron.diff
M/R!A=&%?<F%I9%]I;G1E;"YC"DEN9&5X.B!A=&%?<F%I9"YC"CT]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T*4D-3(&9I;&4Z("]C=G-R;V]T+W-R8R]S>7,O9&5V
M+V%T82]A=&%?<F%I9"YC+'8*<F5T<FEE=FEN9R!R979I<VEO;B`Q+C,P"F1I
M9F8@+6(@+74@+7`@+7(Q+C,P(&%T85]R86ED+F,*+2TM(&%T85]R86ED+F,)
M,C`@075G(#(P,#@@,34Z,#`Z,S0@+3`P,#`),2XS,`HK*RL@871A7W)A:60N
M8PDR,R!!=6<@,C`P."`Q-#HS,SHU-R`M,#`P,`I`0"`M,3$V+#D@*S$Q-BPQ
M,"!`0"!A=&%?<F%I9%]T>7!E7VYA;64H=5]I;G0@='EP92D*(`D)(D%D87!T
M96,B+`H@"0DB5DE!(%8M4D%)1"(L"B`)"2)N5FED:6$B+`HK"0DB2DUI8W)O
M;B(*(`E].PH@"BT):68@*'1Y<&4@/"!S:7IE;V8H871A7W)A:61?='EP95]N
M86UE<RD@+R!S:7IE;V8H871A7W)A:61?='EP95]N86UE<ULP72DI"BL):68@
M*'1Y<&4@/"!?7V%R<F%Y8V]U;G0H871A7W)A:61?='EP95]N86UE<RDI"B`)
M"7)E='5R;B`H871A7W)A:61?='EP95]N86UE<UMT>7!E72D["B`*(`ER971U
M<FX@*$Y53$PI.PI`0"`M,C0W+#8@*S(T."PX($!`(&%T85]R86ED7V-H96-K
M7V-O;7!O;F5N="AD979I8V5?="!S96QF*0H@"0ER971U<FX["B`):68@*&%T
M85]R86ED7W)E861?8V]N9FEG7VYV:61I82AS8RD@/3T@,"D*(`D)<F5T=7)N
M.PHK"6EF("AA=&%?<F%I9%]R96%D7V-O;F9I9U]J;6EC<F]N*'-C*2`]/2`P
M*0HK"0ER971U<FX["B!]"B`*('-T<G5C="!A=&%R86ED7V%R<F%Y7VEN9F\@
M*@I);F1E>#H@871A7W)A:61?:FUI8W)O;BYC"CT]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T*4D-3(&9I;&4Z(&%T85]R86ED7VIM:6-R;VXN8PID:69F("U.(&%T
M85]R86ED7VIM:6-R;VXN8PHM+2T@+V1E=B]N=6QL"3$@2F%N(#$Y-S`@,#`Z
M,#`Z,#`@+3`P,#`**RLK(&%T85]R86ED7VIM:6-R;VXN8PDR,R!!=6<@,C`P
M."`Q-#HS,SHU-R`M,#`P,`I`0"`M,"PP("LQ+#(U-2!`0`HK+RH))$YE=$)3
M1"0)*B\**PHK+RHM"BL@*B!#;W!Y<FEG:'0@*&,I(#(P,#`M,C`P."!3^')E
M;B!38VAM:61T(#QS;W-`1G)E94)31"YO<F<^"BL@*B!!;&P@<FEG:'1S(')E
M<V5R=F5D+@HK("H**R`J(%)E9&ES=')I8G5T:6]N(&%N9"!U<V4@:6X@<V]U
M<F-E(&%N9"!B:6YA<GD@9F]R;7,L('=I=&@@;W(@=VET:&]U=`HK("H@;6]D
M:69I8V%T:6]N+"!A<F4@<&5R;6ET=&5D('!R;W9I9&5D('1H870@=&AE(&9O
M;&QO=VEN9R!C;VYD:71I;VYS"BL@*B!A<F4@;65T.@HK("H@,2X@4F5D:7-T
M<FEB=71I;VYS(&]F('-O=7)C92!C;V1E(&UU<W0@<F5T86EN('1H92!A8F]V
M92!C;W!Y<FEG:'0**R`J("`@(&YO=&EC92P@=&AI<R!L:7-T(&]F(&-O;F1I
M=&EO;G,@86YD('1H92!F;VQL;W=I;F<@9&ES8VQA:6UE<BP**R`J("`@('=I
M=&AO=70@;6]D:69I8V%T:6]N+"!I;6UE9&EA=&5L>2!A="!T:&4@8F5G:6YN
M:6YG(&]F('1H92!F:6QE+@HK("H@,BX@4F5D:7-T<FEB=71I;VYS(&EN(&)I
M;F%R>2!F;W)M(&UU<W0@<F5P<F]D=6-E('1H92!A8F]V92!C;W!Y<FEG:'0*
M*R`J("`@(&YO=&EC92P@=&AI<R!L:7-T(&]F(&-O;F1I=&EO;G,@86YD('1H
M92!F;VQL;W=I;F<@9&ES8VQA:6UE<B!I;B!T:&4**R`J("`@(&1O8W5M96YT
M871I;VX@86YD+V]R(&]T:&5R(&UA=&5R:6%L<R!P<F]V:61E9"!W:71H('1H
M92!D:7-T<FEB=71I;VXN"BL@*B`S+B!4:&4@;F%M92!O9B!T:&4@875T:&]R
M(&UA>2!N;W0@8F4@=7-E9"!T;R!E;F1O<G-E(&]R('!R;VUO=&4@<')O9'5C
M=',**R`J("`@(&1E<FEV960@9G)O;2!T:&ES('-O9G1W87)E('=I=&AO=70@
M<W!E8VEF:6,@<')I;W(@=W)I='1E;B!P97)M:7-S:6]N+@HK("H**R`J(%1(
M25,@4T]&5%=!4D4@25,@4%)/5DE$140@0ED@5$A%($%55$A/4B!@8$%3($E3
M)R<@04Y$($%.62!%6%!215-3($]2"BL@*B!)35!,245$(%=!4E)!3E1)15,L
M($E.0TQ51$E.1RP@0E54($Y/5"!,24U)5$5$(%1/+"!42$4@24U03$E%1"!7
M05)204Y42453"BL@*B!/1B!-15)#2$%.5$%"24Q)5%D@04Y$($9)5$Y%4U,@
M1D]2($$@4$%25$E#54Q!4B!055)03U-%($%212!$25-#3$%)345$+@HK("H@
M24X@3D\@159%3E0@4TA!3$P@5$A%($%55$A/4B!"12!,24%"3$4@1D]2($%.
M62!$25)%0U0L($E.1$E214-4+`HK("H@24Y#241%3E1!3"P@4U!%0TE!3"P@
M15A%35!,05)9+"!/4B!#3TY315%514Y424%,($1!34%'15,@*$E.0TQ51$E.
M1RP@0E54"BL@*B!.3U0@3$E-251%1"!43RP@4%)/0U5214U%3E0@3T8@4U5"
M4U1)5%5412!'3T]$4R!/4B!315)624-%4SL@3$]34R!/1B!54T4L"BL@*B!$
M051!+"!/4B!04D]&2513.R!/4B!"55-)3D534R!)3E1%4E)54%1)3TXI($A/
M5T5615(@0T%54T5$($%.1"!/3B!!3ED**R`J(%1(14]262!/1B!,24%"24Q)
M5%DL(%=(151(15(@24X@0T].5%)!0U0L(%-44DE#5"!,24%"24Q)5%DL($]2
M(%1/4E0**R`J("A)3D-,541)3D<@3D5'3$E'14Y#12!/4B!/5$A%4E=)4T4I
M($%225-)3D<@24X@04Y9(%=!62!/550@3T8@5$A%(%5312!/1@HK("H@5$A)
M4R!33T945T%212P@159%3B!)1B!!1%9)4T5$($]&(%1(12!03U-324))3$E4
M62!/1B!354-(($1!34%'12X**R`J+PHK"BLO*@HK("H@4W5P<&]R="!F;W(@
M<&%R<VEN9R!*36EC<F]N(%1E8VAN;VQO9WD@4D%)1"!C;VYT<F]L;&5R(&-O
M;F9I9W5R871I;VX@8FQO8VMS+@HK("H**R`J($%D87!T960@=&\@3F5T0E-$
M(&)Y($IU86X@4F]M97)O(%!A<F1I;F5S("AX=')A96UE0&=M86EL+F]R9RDN
M"BL@*B\**PHK(VEN8VQU9&4@/'-Y<R]C9&5F<RYH/@HK7U]+15).14Q?4D-3
M240H,"P@(B1.971"4T0D(BD["BL**R-I;F-L=61E(#QS>7,O<&%R86TN:#X*
M*R-I;F-L=61E(#QS>7,O8G5F+F@^"BLC:6YC;'5D92`\<WES+V)U9G$N:#X*
M*R-I;F-L=61E(#QS>7,O8V]N9BYH/@HK(VEN8VQU9&4@/'-Y<R]D979I8V4N
M:#X**R-I;F-L=61E(#QS>7,O9&ES:RYH/@HK(VEN8VQU9&4@/'-Y<R]D:7-K
M;&%B96PN:#X**R-I;F-L=61E(#QS>7,O9F-N=&PN:#X**R-I;F-L=61E(#QS
M>7,O;6%L;&]C+F@^"BLC:6YC;'5D92`\<WES+W9N;V1E+F@^"BLC:6YC;'5D
M92`\<WES+VMA=71H+F@^"BL**R-I;F-L=61E(#QM:7-C9G,O<W!E8V9S+W-P
M96-D978N:#X**PHK(VEN8VQU9&4@/&1E=B]A=&$O871A<F5G+F@^"BLC:6YC
M;'5D92`\9&5V+V%T82]A=&%V87(N:#X**R-I;F-L=61E(#QD978O871A+W=D
M=F%R+F@^"BL**R-I;F-L=61E(#QD978O871A+V%T85]R86ED<F5G+F@^"BLC
M:6YC;'5D92`\9&5V+V%T82]A=&%?<F%I9'9A<BYH/@HK"BLC:69D968@051!
M7U)!241?1$5"54<**R-D969I;F4)1%!224Y41BAX*0EP<FEN=&8@>`HK(V5L
M<V4**R-D969I;F4)1%!224Y41BAX*0DO*B!N;W1H:6YG("HO"BLC96YD:68*
M*PHK(VEF9&5F($%405]204E$7T1%0E5'"BMS=&%T:6,@8V]N<W0@8VAA<B`J
M"BMA=&%?<F%I9%]J;6EC<F]N7W1Y<&4H:6YT('1Y<&4I"BM["BL)<W1A=&EC
M(&-H87(@8G5F9F5R6S$V73L**PHK"7-W:71C:"`H='EP92D@>PHK"6-A<V4@
M2DU?5%]204E$,#H**PD)<F5T=7)N(")204E$,"(["BL)8V%S92!*35]47U)!
M240Q.@HK"0ER971U<FX@(E)!240Q(CL**PEC87-E($I-7U1?4D%)1#`Q.@HK
M"0ER971U<FX@(E)!240P*S$B.PHK"6-A<V4@2DU?5%]204E$-3H**PD)<F5T
M=7)N(")204E$-2(["BL)8V%S92!*35]47TI"3T0Z"BL)"7)E='5R;B`B2D)/
M1"(["BL)9&5F875L=#H**PD)<W!R:6YT9BAB=69F97(L(")53DM.3U=.(#!X
M)3`R>"(L('1Y<&4I.PHK"0ER971U<FX@8G5F9F5R.PHK"7T**WT**PHK<W1A
M=&EC('9O:60**V%T85]R86ED7VIM:6-R;VY?<')I;G1?:6YF;RAS=')U8W0@
M:FUI8W)O;E]R86ED7V-O;F8@*FEN9F\I"BM["BL):6YT(&D["BL@(`HK"7!R
M:6YT9B@B*BHJ*BHJ($%402!*36EC<F]N(%1E8VAN;VQO9WD@0V]R<"!-971A
M9&%T82`J*BHJ*BI<;B(I.PHK"7!R:6YT9B@B<VEG;F%T=7)E("`@("`@("`@
M("`E+C)S7&XB+`EI;F9O+3YS:6=N871U<F4I.PHK"7!R:6YT9B@B=F5R<VEO
M;B`@("`@("`@("`@("`P>"4P-'A<;B(L"6EN9F\M/G9E<G-I;VXI.PHK"7!R
M:6YT9B@B8VAE8VMS=6T@("`@("`@("`@("`P>"4P-'A<;B(L"6EN9F\M/F-H
M96-K<W5M*3L**PEP<FEN=&8H(F1I<VM?:60@("`@("`@("`@("`@,'@E,#AX
M7&XB+`EI;F9O+3YD:7-K7VED*3L**PEP<FEN=&8H(F]F9G-E="`@("`@("`@
M("`@("`@,'@E,#AX7&XB+`EI;F9O+3YO9F9S970I.PHK"7!R:6YT9B@B9&ES
M:U]S96-T;W)S7VQO=R`@("`P>"4P.'A<;B(L"6EN9F\M/F1I<VM?<V5C=&]R
M<U]L;W<I.PHK"7!R:6YT9B@B9&ES:U]S96-T;W)S7VAI9V@@("`P>"4P.'A<
M;B(L"6EN9F\M/F1I<VM?<V5C=&]R<U]H:6=H*3L**PEP<FEN=&8H(FYA;64@
M("`@("`@("`@("`@("`@)2XQ-G-<;B(L"6EN9F\M/FYA;64I.PHK"7!R:6YT
M9B@B='EP92`@("`@("`@("`@("`@("`E<UQN(BP**PD@("`@871A7W)A:61?
M:FUI8W)O;E]T>7!E*&EN9F\M/G1Y<&4I*3L**PEP<FEN=&8H(G-T<FEP95]S
M:&EF="`@("`@("`@)61<;B(L"6EN9F\M/G-T<FEP95]S:&EF="D["BL)<')I
M;G1F*")F;&%G<R`@("`@("`@("`@("`@(#!X)3`T>%QN(BP):6YF;RT^9FQA
M9W,I.PHK"7!R:6YT9B@B<W!A<F4Z7&XB*3L**PEF;W(@*&D@/2`P.R!I(#P@
M,B`F)B!I;F9O+3YS<&%R95MI73L@:2LK*0HK"0EP<FEN=&8H(B`@("`E9"`@
M("`@("`@("`@("`@("`@(#!X)3`X>%QN(BP@:2P@:6YF;RT^<W!A<F5;:5TI
M.PHK"7!R:6YT9B@B9&ES:W,Z7&XB*3L**PEF;W(@*&D@/2`P.R!I(#P@."`F
M)B!I;F9O+3YD:7-K<UMI73L@:2LK*0HK"0EP<FEN=&8H(B`@("`E9"`@("`@
M("`@("`@("`@("`@(#!X)3`X>%QN(BP@:2P@:6YF;RT^9&ES:W-;:5TI.PHK
M"7!R:6YT9B@B/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/5QN(BD["BM]"BLC96YD:68**PHK:6YT"BMA=&%?<F%I
M9%]R96%D7V-O;F9I9U]J;6EC<F]N*'-T<G5C="!W9%]S;V9T8R`J<V,I"BM[
M"BL)<W1R=6-T(&%T86)U<U]S;V9T8R`J871A8G5S.PHK"7-T<G5C="!J;6EC
M<F]N7W)A:61?8V]N9B`J:6YF;SL**PES=')U8W0@=FYO9&4@*G9P.PHK"7-T
M<G5C="!A=&%R86ED7V%R<F%Y7VEN9F\@*F%A:3L**PES=')U8W0@871A<F%I
M9%]D:7-K7VEN9F\@*F%D:3L**PEU:6YT-C1?="!D:7-K7W-I>F4["BL)=6EN
M=#,R7W0@9')I=F4["BL)=6EN=#$V7W0@8VAE8VMS=6TL("IP='(["BL):6YT
M(&)M86IO<BP@97)R;W(L(&-O=6YT+"!D:7-K+"!T;W1A;%]D:7-K<SL**PED
M979?="!D978["BL**PEI;F9O(#T@;6%L;&]C*'-I>F5O9B@J:6YF;RDL($U?
M1$560E5&+"!-7U=!251/2WQ-7UI%4D\I.PHK"BL)8FUA:F]R(#T@9&5V<W=?
M;F%M93)B;&LH9&5V:6-E7WAN86UE*'-C+3YS8U]D978I+"!.54Q,+"`P*3L*
M*PHK"2\J($=E="!A('9N;V1E(&9O<B!T:&4@<F%W('!A<G1I=&EO;B!O9B!T
M:&ES(&1I<VLN("HO"BL)9&5V(#T@34%+141)4TM$158H8FUA:F]R+"!D979I
M8V5?=6YI="AS8RT^<V-?9&5V*2P@4D%77U!!4E0I.PHK"65R<F]R(#T@8F1E
M=G9P*&1E=BP@)G9P*3L**PEI9B`H97)R;W(I"BL)"6=O=&\@;W5T.PHK"BL)
M97)R;W(@/2!63U!?3U!%3BAV<"P@1E)%040L($Y/0U)%1"D["BL):68@*&5R
M<F]R*2!["BL)"79P=70H=G`I.PHK"0EG;W1O(&]U=#L**PE]"BL**PEE<G)O
M<B`](&%T85]R86ED7V-O;F9I9U]B;&]C:U]R=RAV<"P@2DU)0U)/3E],0D$H
M<V,I+"!I;F9O+`HK"2`@("!S:7IE;V8H*FEN9F\I+"!"7U)%040I.PHK"59/
M4%]#3$]312AV<"P@1E)%040L($Y/0U)%1"D["BL)=G!U="AV<"D["BL):68@
M*&5R<F]R*2!["BL)"4104DE.5$8H*"(E<SH@97)R;W(@)60@<F5A9&EN9R!*
M36EC<F]N(&-O;F9I9R!B;&]C:UQN(BP**PD)("`@(&1E=FEC95]X;F%M92AS
M8RT^<V-?9&5V*2P@97)R;W(I*3L**PD)9V]T;R!O=70["BL)?0HK"BL)+RH@
M0VAE8VL@9F]R($I-:6-R;VX@<VEG;F%T=7)E+B`J+PHK"6EF("AS=')N8VUP
M*&EN9F\M/G-I9VYA='5R92P@2DU)0U)/3E]-04=)0RP@,BDI('L**PD)1%!2
M24Y41B@H(B5S.B!*36EC<F]N(%)!240@<VEG;F%T=7)E(&-H96-K(&9A:6QE
M9%QN(BP**PD)("`@(&1E=FEC95]X;F%M92AS8RT^<V-?9&5V*2DI.PHK"0EE
M<G)O<B`]($534D-(.PHK"0EG;W1O(&]U=#L**PE]"BL**PDO*B!C86QC=6QA
M=&4@8VAE8VMS=6T@86YD(&-O;7!A<F4@9F]R('9A;&ED("HO"BL)9F]R("AC
M:&5C:W-U;2`](#`L('!T<B`]("AU:6YT,39?="`J*6EN9F\L(&-O=6YT(#T@
M,#L**PD@("`@(&-O=6YT(#P@-C0[(&-O=6YT*RLI"BL)"6-H96-K<W5M("L]
M("IP='(K*SL**PEI9B`H8VAE8VMS=6TI('L**PD)1%!224Y41B@H(B5S.B!*
M36EC<F]N(&-H96-K<W5M(&9A:6QE9%QN(BP**PD)("`@(&1E=FEC95]X;F%M
M92AS8RT^<V-?9&5V*2DI.PHK"0EE<G)O<B`]($534D-(.PHK"0EG;W1O(&]U
M=#L**PE]"BL**R-I9F1E9B!!5$%?4D%)1%]$14)51PHK"6%T85]R86ED7VIM
M:6-R;VY?<')I;G1?:6YF;RAI;F9O*3L**R-E;F1I9@HK"BL)+RH**PD@*B!,
M;V]K=7`@;W(@86QL;V-A=&4@82!N97<@87)R87D@:6YF;R!S=')U8W1U<F4@
M9F]R"BL)("H@=&AI<R!A<G)A>2X**PD@*B\**PEA86D@/2!A=&%?<F%I9%]G
M971?87)R87E?:6YF;RA!5$%?4D%)1%]465!%7TI-24-23TXL(#`I.R`**PHK
M"69O<B`H=&]T86Q?9&ES:W,@/2`P+"!D:7-K(#T@,#L@9&ES:R`\($I-7TU!
M6%]$25-+4SL@9&ES:RLK*0HK"0EI9B`H:6YF;RT^9&ES:W-;9&ES:UTI"BL)
M"0ET;W1A;%]D:7-K<RLK.PHK"6EF("AT;W1A;%]D:7-K<R`]/2`P*0HK"0EG
M;W1O(&]U=#L**PHK"6%A:2T^86%I7W-T871U<R`]($%!25]37U)%0419.PHK
M"BL)<W=I=&-H("AI;F9O+3YT>7!E*2!["BL)8V%S92!*35]47U)!240P.@HK
M"0EA86DM/F%A:5]L979E;"`]($%!25],7U)!240P.PHK"0EA86DM/F%A:5]W
M:61T:"`]('1O=&%L7V1I<VMS.PHK"0EB<F5A:SL**PEC87-E($I-7U1?4D%)
M1#$Z"BL)"6%A:2T^86%I7VQE=F5L(#T@04%)7TQ?4D%)1#$["BL)"6%A:2T^
M86%I7W=I9'1H(#T@,3L**PD)8G)E86L["BL)8V%S92!*35]47U)!240P,3H*
M*PD)86%I+3YA86E?;&5V96P@/2!!04E?3%]204E$,"!\($%!25],7U)!240Q
M.PHK"0EA86DM/F%A:5]W:61T:"`]('1O=&%L7V1I<VMS("\@,CL**PD)8G)E
M86L["BL)8V%S92!*35]47TI"3T0Z"BL)"6%A:2T^86%I7VQE=F5L(#T@04%)
M7TQ?4U!!3CL**PD)86%I+3YA86E?=VED=&@@/2!T;W1A;%]D:7-K<SL**PD)
M8G)E86L["BL)9&5F875L=#H**PD)1%!224Y41B@H(B5S.B!U;FMN;W=N($I-
M:6-R;VX@4D%)1"!T>7!E(#!X)3`R>%QN(BP**PD)("`@('-C+3YS8U]D978M
M/F1V7WAN86UE+"!I;F9O+3YT>7!E*2D["BL)"65R<F]R(#T@14E.5D%,.PHK
M"0EG;W1O(&]U=#L**PE]"BL**PED:7-K7W-I>F4@/2`H:6YF;RT^9&ES:U]S
M96-T;W)S7VAI9V@@/#P@,38I("L@:6YF;RT^9&ES:U]S96-T;W)S7VQO=SL*
M*PEA86DM/F%A:5]T>7!E(#T@051!7U)!241?5%E015]*34E#4D]..PHK"6%A
M:2T^86%I7V=E;F5R871I;VX@/2`P.PHK"6%A:2T^86%I7V-A<&%C:71Y(#T@
M9&ES:U]S:7IE("H@86%I+3YA86E?=VED=&@["BL)86%I+3YA86E?:6YT97)L
M96%V92`](#(@/#P@:6YF;RT^<W1R:7!E7W-H:69T.PHK"6%A:2T^86%I7VYD
M:7-K<R`]('1O=&%L7V1I<VMS.PHK"6%A:2T^86%I7VAE861S(#T@,C4U.PHK
M"6%A:2T^86%I7W-E8W1O<G,@/2`V,SL**PEA86DM/F%A:5]C>6QI;F1E<G,@
M/0HK"2`@("!A86DM/F%A:5]C87!A8VET>2`O("AA86DM/F%A:5]H96%D<R`J
M(&%A:2T^86%I7W-E8W1O<G,I.PHK"6%A:2T^86%I7V]F9G-E="`](&EN9F\M
M/F]F9G-E="`J(#$V.PHK"6%A:2T^86%I7W)E<V5R=F5D(#T@,#L**PHK"6%T
M86)U<R`](&1E=FEC95]P<FEV871E*&1E=FEC95]P87)E;G0H<V,M/G-C7V1E
M=BDI.PHK"61R:79E(#T@871A8G5S+3YS8U]C:&%N+3YC:%]C:&%N;F5L.PHK
M"6EF("AD<FEV92`^/2!A86DM/F%A:5]N9&ES:W,I('L**PD)1%!224Y41B@H
M(B5S.B!D<FEV92!N=6UB97(@)60@9&]E<VXG="!M86ME('-E;G-E('=I=&AI
M;B`B"BL)"2`@("`B)60M9&ES:R!A<G)A>5QN(BP@9&5V:6-E7WAN86UE*'-C
M+3YS8U]D978I+`HK"0D@("`@9')I=F4L(&%A:2T^86%I7VYD:7-K<RDI.PHK
M"0EE<G)O<B`]($5)3E9!3#L**PD)9V]T;R!O=70["BL)?0HK"BL):68@*&EN
M9F\M/F1I<VMS6V1R:79E72`]/2!I;F9O+3YD:7-K7VED*2!["BL)"6%D:2`]
M("9A86DM/F%A:5]D:7-K<UMD<FEV95T["BL)"6%D:2T^861I7V1E=B`]('-C
M+3YS8U]D978["BL)"6%D:2T^861I7W-T871U<R`]($%$25]37T].3$E.12!\
M($%$25]37T%34TE'3D5$.PHK"0EA9&DM/F%D:5]S96-T;W)S(#T@86%I+3YA
M86E?8V%P86-I='D["BL)"6%D:2T^861I7V-O;7!S:7IE(#T@9&ES:U]S:7IE
M.PHK"7T**PHK"65R<F]R(#T@,#L**PHK(&]U=#H**PEF<F5E*&EN9F\L($U?
M1$560E5&*3L**PER971U<FX@97)R;W(["BM]"DEN9&5X.B!A=&%?<F%I9')E
M9RYH"CT]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T*4D-3(&9I;&4Z("]C=G-R;V]T
M+W-R8R]S>7,O9&5V+V%T82]A=&%?<F%I9')E9RYH+'8*<F5T<FEE=FEN9R!R
M979I<VEO;B`Q+C8*9&EF9B`M8B`M=2`M<"`M<C$N-B!A=&%?<F%I9')E9RYH
M"BTM+2!A=&%?<F%I9')E9RYH"3(P($%U9R`R,#`X(#$U.C`P.C,T("TP,#`P
M"3$N-@HK*RL@871A7W)A:61R96<N:`DR,R!!=6<@,C`P."`Q-#HS,SHU."`M
M,#`P,`I`0"`M,C4U+#0@*S(U-2PT,B!`0"!S=')U8W0@;G9I9&EA7W)A:61?
M8V]N9B!["B`@("`@=5]I;G0S,E]T("`@("`@("`@("!F:6QL97);.3A=.PH@
M?2!?7W!A8VME9#L*(`HK+RH@2DUI8W)O;B!496-H;F]L;V=Y($-O<G`@365T
M861A=&$@*B\**R-D969I;F4@2DU)0U)/3E],0D$H=V0I(`DH*'=D*2T^<V-?
M8V%P86-I='D@+2`Q*0HK(V1E9FEN92!*35]-05A?1$E32U,@("`@("`@("`@
M("`X"BL**W-T<G5C="!J;6EC<F]N7W)A:61?8V]N9B!["BL)=6EN=#A?="`)
M<VEG;F%T=7)E6S)=.PHK(V1E9FEN92!*34E#4D].7TU!1TE#(`D)(DI-(@HK
M"75I;G0Q-E]T(`EV97)S:6]N.PHK(V1E9FEN92!*34E#4D].7U9%4E-)3TX@
M"3!X,#`P,0HK"75I;G0Q-E]T(`EC:&5C:W-U;3L**PEU:6YT.%]T(`EF:6QL
M97)?,5LQ,%T["BL)=6EN=#,R7W0@"61I<VM?:60["BL)=6EN=#,R7W0@"6]F
M9G-E=#L**PEU:6YT,S)?="`)9&ES:U]S96-T;W)S7VAI9V@["BL)=6EN=#$V
M7W0@"61I<VM?<V5C=&]R<U]L;W<["BL)=6EN=#A?="`)9FEL;&5R7S);,ET[
M"BL)=6EN=#A?="`);F%M95LQ-ET["BL)=6EN=#A?="`)='EP93L**R-D969I
M;F4@2DU?5%]204E$,"`)"3`**R-D969I;F4@2DU?5%]204E$,2`)"3$**R-D
M969I;F4@2DU?5%]204E$,#$@"0DR"BLC9&5F:6YE($I-7U1?2D)/1"`)"3,*
M*R-D969I;F4@2DU?5%]204E$-2`)"34**PEU:6YT.%]T(`ES=')I<&5?<VAI
M9G0["BL)=6EN=#$V7W0@"69L86=S.PHK(V1E9FEN92!*35]&7U)%0419(`D)
M,'@P,#`Q"BLC9&5F:6YE($I-7T9?0D]/5$%"3$4@"0DP>#`P,#(**R-D969I
M;F4@2DU?1E]"040@"0DP>#`P,#0**R-D969I;F4@2DU?1E]!0U1)5D4@"0DP
M>#`P,3`**R-D969I;F4@2DU?1E]53E-93D,@"0DP>#`P,C`**R-D969I;F4@
M2DU?1E].15=%4U0@"0DP>#`P-#`**PEU:6YT.%]T(`EF:6QL97)?,ULT73L*
M*PEU:6YT,S)?="`)<W!A<F5;,ET["BL)=6EN=#,R7W0@"61I<VMS6TI-7TU!
M6%]$25-+4UT["BL)=6EN=#A?="`)9FEL;&5R7S1;,S)=.PHK"75I;G0X7W0@
M"69I;&QE<E\U6S,X-%T["BM].PHK"B`C96YD:68@+RH@7T1%5E]00TE?4$-)
M241%7U!23TU)4T5?4D%)1%](7R`J+PI);F1E>#H@871A7W)A:61V87(N:`H]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]"E)#4R!F:6QE.B`O8W9S<F]O="]S<F,O
M<WES+V1E=B]A=&$O871A7W)A:61V87(N:"QV"G)E=')I979I;F<@<F5V:7-I
M;VX@,2XV"F1I9F8@+6(@+74@+7`@+7(Q+C8@871A7W)A:61V87(N:`HM+2T@
M871A7W)A:61V87(N:`DR,"!!=6<@,C`P."`Q-3HP,#HS-"`M,#`P,`DQ+C8*
M*RLK(&%T85]R86ED=F%R+F@),C,@075G(#(P,#@@,30Z,S,Z-3@@+3`P,#`*
M0$`@+34R+#<@*S4R+#@@0$`*("-D969I;F4)051!7U)!241?5%E015]!1$%0
M5$5#"3$*("-D969I;F4)051!7U)!241?5%E015]624$),@H@(V1E9FEN90E!
M5$%?4D%)1%]465!%7TY6241)00DS"BTC9&5F:6YE"4%405]204E$7U194$5?
M34%8"3,**R-D969I;F4@051!7U)!241?5%E015]*34E#4D]."30**R-D969I
M;F4)051!7U)!241?5%E015]-05@)-`H@"B`O*@H@("H@36%X(",@;V8@9&ES
M:W,@<W5P<&]R=&5D(&)Y(&$@<VEN9VQE(&%R<F%Y+B`@5&AI<R!I<R!L:6UI
M=&5D(&)Y"D!`("TX,BPW("LX,RPW($!`('-T<G5C="!A=&%R86ED7V%R<F%Y
M7VEN9F\@>PH@"75?:6YT"6%A:5]T>7!E.PD)+RH@87)R87D@='EP92`J+PH@
M"75?:6YT"6%A:5]A<G)A>6YO.PD)+RH@87)R87D@;G5M8F5R("HO"B`):6YT
M"6%A:5]L979E;#L)"2\J(%)!240@;&5V96P@*B\*+0EI;G0)86%I7V=E;F5R
M871I;VX["0DO*B!C;VYF:6<@9V5N97)A:6]N(",@*B\**PEI;G0)86%I7V=E
M;F5R871I;VX["0DO*B!C;VYF:6<@9V5N97)A=&EO;B`C("HO"B`):6YT"6%A
M:5]S=&%T=7,["0DO*B!A<G)A>2!S=&%T=7,@*B\*(`H@"2\J($=E;VUE=')Y
M(&EN9F\N("HO"D!`("TQ,S0L-"`K,3,U+#<@0$`@:6YT"6%T85]R86ED7W)E
M861?8V]N9FEG7W9I82AS=')U8W0@=V1?<PH@+RH@;E9I9&EA($UE9&EA4VAI
M96QD('-U<'!O<G0@*B\*(&EN=`EA=&%?<F%I9%]R96%D7V-O;F9I9U]N=FED
M:6$H<W1R=6-T('=D7W-O9G1C("HI.PH@"BLO*B!*36EC<F]N(%)!240@<W5P
M<&]R="`J+PHK:6YT"6%T85]R86ED7W)E861?8V]N9FEG7VIM:6-R;VXH<W1R
M=6-T('=D7W-O9G1C("HI.PHK"B`C96YD:68@+RH@7T1%5E]!5$%?051!7U)!
M241605)?2%\@*B\*26YD97@Z(&9I;&5S+F%T80H]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]"E)#4R!F:6QE.B`O8W9S<F]O="]S<F,O<WES+V1E=B]A=&$O9FEL
M97,N871A+'8*<F5T<FEE=FEN9R!R979I<VEO;B`Q+C$W"F1I9F8@+6(@+74@
M+7`@+7(Q+C$W(&9I;&5S+F%T80HM+2T@9FEL97,N871A"3(P($%U9R`R,#`X
M(#$U.C`P.C,T("TP,#`P"3$N,3<**RLK(&9I;&5S+F%T80DR,R!!=6<@,C`P
M."`Q-#HS,SHU."`M,#`P,`I`0"`M,C(L-B`K,C(L-R!`0"!F:6QE"61E=B]A
M=&$O871A7W)A:61?<')O;6ES92YC"6%T87)A:60*(&9I;&4)9&5V+V%T82]A
M=&%?<F%I9%]A9&%P=&5C+F,)871A<F%I9`H@9FEL90ED978O871A+V%T85]R
M86ED7VYV:61I82YC"6%T87)A:60*(&9I;&4)9&5V+V%T82]A=&%?<F%I9%]V
M:6$N8PD)871A<F%I9`HK9FEL90ED978O871A+V%T85]R86ED7VIM:6-R;VXN
M8PEA=&%R86ED"B`*(&%T=&%C:`EL9"!A="!A=&%R86ED('=I=&@@;&1?871A
M<F%I9`H@9FEL90ED978O871A+VQD7V%T87)A:60N8PD);&1?871A<F%I9`I)
M;F1E>#H@871A<F%I9"XT"CT]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T*4D-3(&9I
M;&4Z("]C=G-R;V]T+W-R8R]S:&%R92]M86XO;6%N-"]A=&%R86ED+C0L=@IR
M971R:65V:6YG(')E=FES:6]N(#$N.`ID:69F("UB("UU("UP("UR,2XX(&%T
M87)A:60N-`HM+2T@871A<F%I9"XT"3(S($%U9R`R,#`X(#`W.C(V.C4U("TP
M,#`P"3$N.`HK*RL@871A<F%I9"XT"3(S($%U9R`R,#`X(#$T.C,W.C0Q("TP
M,#`P"D!`("TU-2PV("LU-2PX($!`($%D87!T96,@2&]S=%)!240@*&9O=6YD
M(&EN($EN=&5L(#8S,#!%4T(*(%9I82!6+5)!240@*&9O=6YD(&EN(&UA;GD@
M5DE!+6)A<V5D(&UO=&AE<F)O87)D<RD*("Y)=`H@;E9I9&EA($UE9&EA4VAI
M96QD"BLN270**TI-:6-R;VX@4D%)1`H@+D5L"B`N4V@@4T5%($%,4T\*("Y8
'<B!L9"`T"G0*
`
end

>Release-Note:

>Audit-Trail:
From: Juan RP <xtraeme@gmail.com>
To: gnats-bugs@NetBSD.org
Cc: 
Subject: Re: kern/39395: ataraid(4): JMicron RAID support
Date: Sun, 24 Aug 2008 02:17:05 +0200

 Previous uuencoded patch was corrupted. Here's the patch again
 and some dmesg spam as well.

 $ dmesg|grep -E '(ataraid|ld0)'
 ataraid0: found 1 RAID volume
 ld0 at ataraid0 vendtype 4 unit 0: JMicron ATA RAID-1 array
 ld0: 233 GB, 30514 cyl, 255 head, 63 sec, 512 bytes/sect x 490209280 sectors
 $


 Index: ata_raid.c
 ===================================================================
 RCS file: /cvsroot/src/sys/dev/ata/ata_raid.c,v
 retrieving revision 1.30
 diff -b -u -p -r1.30 ata_raid.c
 --- ata_raid.c	20 Aug 2008 15:00:34 -0000	1.30
 +++ ata_raid.c	23 Aug 2008 14:33:57 -0000
 @@ -116,9 +116,10 @@ ata_raid_type_name(u_int type)
  		"Adaptec",
  		"VIA V-RAID",
  		"nVidia",
 +		"JMicron"
  	};

 -	if (type < sizeof(ata_raid_type_names) / sizeof(ata_raid_type_names[0]))
 +	if (type < __arraycount(ata_raid_type_names))
  		return (ata_raid_type_names[type]);

  	return (NULL);
 @@ -247,6 +248,8 @@ ata_raid_check_component(device_t self)
  		return;
  	if (ata_raid_read_config_nvidia(sc) == 0)
  		return;
 +	if (ata_raid_read_config_jmicron(sc) == 0)
 +		return;
  }

  struct ataraid_array_info *
 Index: ata_raid_jmicron.c
 ===================================================================
 RCS file: ata_raid_jmicron.c
 diff -N ata_raid_jmicron.c
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ ata_raid_jmicron.c	23 Aug 2008 14:33:57 -0000
 @@ -0,0 +1,255 @@
 +/*	$NetBSD$	*/
 +
 +/*-
 + * Copyright (c) 2000-2008 S_ren Schmidt <sos@FreeBSD.org>
 + * All rights reserved.
 + *
 + * Redistribution and use in source and binary forms, with or without
 + * modification, are permitted provided that the following conditions
 + * are met:
 + * 1. Redistributions of source code must retain the above copyright
 + *    notice, this list of conditions and the following disclaimer,
 + *    without modification, immediately at the beginning of the file.
 + * 2. Redistributions in binary form must reproduce the above copyright
 + *    notice, this list of conditions and the following disclaimer in the
 + *    documentation and/or other materials provided with the distribution.
 + * 3. The name of the author may not be used to endorse or promote products
 + *    derived from this software without specific prior written permission.
 + *
 + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 + */
 +
 +/*
 + * Support for parsing JMicron Technology RAID controller configuration blocks.
 + *
 + * Adapted to NetBSD by Juan Romero Pardines (xtraeme@gmail.org).
 + */
 +
 +#include <sys/cdefs.h>
 +__KERNEL_RCSID(0, "$NetBSD$");
 +
 +#include <sys/param.h>
 +#include <sys/buf.h>
 +#include <sys/bufq.h>
 +#include <sys/conf.h>
 +#include <sys/device.h>
 +#include <sys/disk.h>
 +#include <sys/disklabel.h>
 +#include <sys/fcntl.h>
 +#include <sys/malloc.h>
 +#include <sys/vnode.h>
 +#include <sys/kauth.h>
 +
 +#include <miscfs/specfs/specdev.h>
 +
 +#include <dev/ata/atareg.h>
 +#include <dev/ata/atavar.h>
 +#include <dev/ata/wdvar.h>
 +
 +#include <dev/ata/ata_raidreg.h>
 +#include <dev/ata/ata_raidvar.h>
 +
 +#ifdef ATA_RAID_DEBUG
 +#define	DPRINTF(x)	printf x
 +#else
 +#define	DPRINTF(x)	/* nothing */
 +#endif
 +
 +#ifdef ATA_RAID_DEBUG
 +static const char *
 +ata_raid_jmicron_type(int type)
 +{
 +	static char buffer[16];
 +
 +	switch (type) {
 +	case JM_T_RAID0:
 +		return "RAID0";
 +	case JM_T_RAID1:
 +		return "RAID1";
 +	case JM_T_RAID01:
 +		return "RAID0+1";
 +	case JM_T_RAID5:
 +		return "RAID5";
 +	case JM_T_JBOD:
 +		return "JBOD";
 +	default:
 +		sprintf(buffer, "UNKNOWN 0x%02x", type);
 +		return buffer;
 +	}
 +}
 +
 +static void
 +ata_raid_jmicron_print_info(struct jmicron_raid_conf *info)
 +{
 +	int i;
 +  
 +	printf("****** ATA JMicron Technology Corp Metadata ******\n");
 +	printf("signature           %.2s\n",	info->signature);
 +	printf("version             0x%04x\n",	info->version);
 +	printf("checksum            0x%04x\n",	info->checksum);
 +	printf("disk_id             0x%08x\n",	info->disk_id);
 +	printf("offset              0x%08x\n",	info->offset);
 +	printf("disk_sectors_low    0x%08x\n",	info->disk_sectors_low);
 +	printf("disk_sectors_high   0x%08x\n",	info->disk_sectors_high);
 +	printf("name                %.16s\n",	info->name);
 +	printf("type                %s\n",
 +	    ata_raid_jmicron_type(info->type));
 +	printf("stripe_shift        %d\n",	info->stripe_shift);
 +	printf("flags               0x%04x\n",	info->flags);
 +	printf("spare:\n");
 +	for (i = 0; i < 2 && info->spare[i]; i++)
 +		printf("    %d                  0x%08x\n", i, info->spare[i]);
 +	printf("disks:\n");
 +	for (i = 0; i < 8 && info->disks[i]; i++)
 +		printf("    %d                  0x%08x\n", i, info->disks[i]);
 +	printf("=================================================\n");
 +}
 +#endif
 +
 +int
 +ata_raid_read_config_jmicron(struct wd_softc *sc)
 +{
 +	struct atabus_softc *atabus;
 +	struct jmicron_raid_conf *info;
 +	struct vnode *vp;
 +	struct ataraid_array_info *aai;
 +	struct ataraid_disk_info *adi;
 +	uint64_t disk_size;
 +	uint32_t drive;
 +	uint16_t checksum, *ptr;
 +	int bmajor, error, count, disk, total_disks;
 +	dev_t dev;
 +
 +	info = malloc(sizeof(*info), M_DEVBUF, M_WAITOK|M_ZERO);
 +
 +	bmajor = devsw_name2blk(device_xname(sc->sc_dev), NULL, 0);
 +
 +	/* Get a vnode for the raw partition of this disk. */
 +	dev = MAKEDISKDEV(bmajor, device_unit(sc->sc_dev), RAW_PART);
 +	error = bdevvp(dev, &vp);
 +	if (error)
 +		goto out;
 +
 +	error = VOP_OPEN(vp, FREAD, NOCRED);
 +	if (error) {
 +		vput(vp);
 +		goto out;
 +	}
 +
 +	error = ata_raid_config_block_rw(vp, JMICRON_LBA(sc), info,
 +	    sizeof(*info), B_READ);
 +	VOP_CLOSE(vp, FREAD, NOCRED);
 +	vput(vp);
 +	if (error) {
 +		DPRINTF(("%s: error %d reading JMicron config block\n",
 +		    device_xname(sc->sc_dev), error));
 +		goto out;
 +	}
 +
 +	/* Check for JMicron signature. */
 +	if (strncmp(info->signature, JMICRON_MAGIC, 2)) {
 +		DPRINTF(("%s: JMicron RAID signature check failed\n",
 +		    device_xname(sc->sc_dev)));
 +		error = ESRCH;
 +		goto out;
 +	}
 +
 +	/* calculate checksum and compare for valid */
 +	for (checksum = 0, ptr = (uint16_t *)info, count = 0;
 +	     count < 64; count++)
 +		checksum += *ptr++;
 +	if (checksum) {
 +		DPRINTF(("%s: JMicron checksum failed\n",
 +		    device_xname(sc->sc_dev)));
 +		error = ESRCH;
 +		goto out;
 +	}
 +
 +#ifdef ATA_RAID_DEBUG
 +	ata_raid_jmicron_print_info(info);
 +#endif
 +
 +	/*
 +	 * Lookup or allocate a new array info structure for
 +	 * this array.
 +	 */
 +	aai = ata_raid_get_array_info(ATA_RAID_TYPE_JMICRON, 0); 
 +
 +	for (total_disks = 0, disk = 0; disk < JM_MAX_DISKS; disk++)
 +		if (info->disks[disk])
 +			total_disks++;
 +	if (total_disks == 0)
 +		goto out;
 +
 +	aai->aai_status = AAI_S_READY;
 +
 +	switch (info->type) {
 +	case JM_T_RAID0:
 +		aai->aai_level = AAI_L_RAID0;
 +		aai->aai_width = total_disks;
 +		break;
 +	case JM_T_RAID1:
 +		aai->aai_level = AAI_L_RAID1;
 +		aai->aai_width = 1;
 +		break;
 +	case JM_T_RAID01:
 +		aai->aai_level = AAI_L_RAID0 | AAI_L_RAID1;
 +		aai->aai_width = total_disks / 2;
 +		break;
 +	case JM_T_JBOD:
 +		aai->aai_level = AAI_L_SPAN;
 +		aai->aai_width = total_disks;
 +		break;
 +	default:
 +		DPRINTF(("%s: unknown JMicron RAID type 0x%02x\n",
 +		    sc->sc_dev->dv_xname, info->type));
 +		error = EINVAL;
 +		goto out;
 +	}
 +
 +	disk_size = (info->disk_sectors_high << 16) + info->disk_sectors_low;
 +	aai->aai_type = ATA_RAID_TYPE_JMICRON;
 +	aai->aai_generation = 0;
 +	aai->aai_capacity = disk_size * aai->aai_width;
 +	aai->aai_interleave = 2 << info->stripe_shift;
 +	aai->aai_ndisks = total_disks;
 +	aai->aai_heads = 255;
 +	aai->aai_sectors = 63;
 +	aai->aai_cylinders =
 +	    aai->aai_capacity / (aai->aai_heads * aai->aai_sectors);
 +	aai->aai_offset = info->offset * 16;
 +	aai->aai_reserved = 0;
 +
 +	atabus = device_private(device_parent(sc->sc_dev));
 +	drive = atabus->sc_chan->ch_channel;
 +	if (drive >= aai->aai_ndisks) {
 +		DPRINTF(("%s: drive number %d doesn't make sense within "
 +		    "%d-disk array\n", device_xname(sc->sc_dev),
 +		    drive, aai->aai_ndisks));
 +		error = EINVAL;
 +		goto out;
 +	}
 +
 +	if (info->disks[drive] == info->disk_id) {
 +		adi = &aai->aai_disks[drive];
 +		adi->adi_dev = sc->sc_dev;
 +		adi->adi_status = ADI_S_ONLINE | ADI_S_ASSIGNED;
 +		adi->adi_sectors = aai->aai_capacity;
 +		adi->adi_compsize = disk_size;
 +	}
 +
 +	error = 0;
 +
 + out:
 +	free(info, M_DEVBUF);
 +	return error;
 +}
 Index: ata_raidreg.h
 ===================================================================
 RCS file: /cvsroot/src/sys/dev/ata/ata_raidreg.h,v
 retrieving revision 1.6
 diff -b -u -p -r1.6 ata_raidreg.h
 --- ata_raidreg.h	20 Aug 2008 15:00:34 -0000	1.6
 +++ ata_raidreg.h	23 Aug 2008 14:33:58 -0000
 @@ -255,4 +255,42 @@ struct nvidia_raid_conf {
      u_int32_t           filler[98];
  } __packed;

 +/* JMicron Technology Corp Metadata */
 +#define JMICRON_LBA(wd) 	((wd)->sc_capacity - 1)
 +#define JM_MAX_DISKS            8
 +
 +struct jmicron_raid_conf {
 +	uint8_t 	signature[2];
 +#define JMICRON_MAGIC 		"JM"
 +	uint16_t 	version;
 +#define JMICRON_VERSION 	0x0001
 +	uint16_t 	checksum;
 +	uint8_t 	filler_1[10];
 +	uint32_t 	disk_id;
 +	uint32_t 	offset;
 +	uint32_t 	disk_sectors_high;
 +	uint16_t 	disk_sectors_low;
 +	uint8_t 	filler_2[2];
 +	uint8_t 	name[16];
 +	uint8_t 	type;
 +#define JM_T_RAID0 		0
 +#define JM_T_RAID1 		1
 +#define JM_T_RAID01 		2
 +#define JM_T_JBOD 		3
 +#define JM_T_RAID5 		5
 +	uint8_t 	stripe_shift;
 +	uint16_t 	flags;
 +#define JM_F_READY 		0x0001
 +#define JM_F_BOOTABLE 		0x0002
 +#define JM_F_BAD 		0x0004
 +#define JM_F_ACTIVE 		0x0010
 +#define JM_F_UNSYNC 		0x0020
 +#define JM_F_NEWEST 		0x0040
 +	uint8_t 	filler_3[4];
 +	uint32_t 	spare[2];
 +	uint32_t 	disks[JM_MAX_DISKS];
 +	uint8_t 	filler_4[32];
 +	uint8_t 	filler_5[384];
 +};
 +
  #endif /* _DEV_PCI_PCIIDE_PROMISE_RAID_H_ */
 Index: ata_raidvar.h
 ===================================================================
 RCS file: /cvsroot/src/sys/dev/ata/ata_raidvar.h,v
 retrieving revision 1.6
 diff -b -u -p -r1.6 ata_raidvar.h
 --- ata_raidvar.h	20 Aug 2008 15:00:34 -0000	1.6
 +++ ata_raidvar.h	23 Aug 2008 14:33:58 -0000
 @@ -52,7 +52,8 @@
  #define	ATA_RAID_TYPE_ADAPTEC	1
  #define	ATA_RAID_TYPE_VIA	2
  #define	ATA_RAID_TYPE_NVIDIA	3
 -#define	ATA_RAID_TYPE_MAX	3
 +#define	ATA_RAID_TYPE_JMICRON	4
 +#define	ATA_RAID_TYPE_MAX	4

  /*
   * Max # of disks supported by a single array.  This is limited by
 @@ -82,7 +83,7 @@ struct ataraid_array_info {
  	u_int	aai_type;		/* array type */
  	u_int	aai_arrayno;		/* array number */
  	int	aai_level;		/* RAID level */
 -	int	aai_generation;		/* config generaion # */
 +	int	aai_generation;		/* config generation # */
  	int	aai_status;		/* array status */

  	/* Geometry info. */
 @@ -134,4 +135,7 @@ int	ata_raid_read_config_via(struct wd_s
  /* nVidia MediaShield support */
  int	ata_raid_read_config_nvidia(struct wd_softc *);

 +/* JMicron RAID support */
 +int	ata_raid_read_config_jmicron(struct wd_softc *);
 +
  #endif /* _DEV_ATA_ATA_RAIDVAR_H_ */
 Index: files.ata
 ===================================================================
 RCS file: /cvsroot/src/sys/dev/ata/files.ata,v
 retrieving revision 1.17
 diff -b -u -p -r1.17 files.ata
 --- files.ata	20 Aug 2008 15:00:34 -0000	1.17
 +++ files.ata	23 Aug 2008 14:33:58 -0000
 @@ -22,6 +22,7 @@ file	dev/ata/ata_raid_promise.c	ataraid
  file	dev/ata/ata_raid_adaptec.c	ataraid
  file	dev/ata/ata_raid_nvidia.c	ataraid
  file	dev/ata/ata_raid_via.c		ataraid
 +file	dev/ata/ata_raid_jmicron.c	ataraid

  attach	ld at ataraid with ld_ataraid
  file	dev/ata/ld_ataraid.c		ld_ataraid
 Index: ataraid.4
 ===================================================================
 RCS file: /cvsroot/src/share/man/man4/ataraid.4,v
 retrieving revision 1.8
 diff -b -u -p -r1.8 ataraid.4
 --- ataraid.4	23 Aug 2008 07:26:55 -0000	1.8
 +++ ataraid.4	23 Aug 2008 14:37:41 -0000
 @@ -55,6 +55,8 @@ Adaptec HostRAID (found in Intel 6300ESB
  Via V-RAID (found in many VIA-based motherboards)
  .It
  nVidia MediaShield
 +.It
 +JMicron RAID
  .El
  .Sh SEE ALSO
  .Xr ld 4

Responsible-Changed-From-To: kern-bug-people->tron
Responsible-Changed-By: tron@NetBSD.org
Responsible-Changed-When: Fri, 05 Sep 2008 12:04:33 +0000
Responsible-Changed-Why:
I'll handle this PR.


From: Matthias Scheler <tron@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/39395 CVS commit: src
Date: Fri,  5 Sep 2008 12:37:13 +0000 (UTC)

 Module Name:	src
 Committed By:	tron
 Date:		Fri Sep  5 12:37:13 UTC 2008

 Modified Files:
 	src/share/man/man4: ataraid.4
 	src/sys/dev/ata: ata_raid.c ata_raidreg.h ata_raidvar.h files.ata
 Added Files:
 	src/sys/dev/ata: ata_raid_jmicron.c

 Log Message:
 Add JMicron RAID support to ataraid(4).
 Patch provided by Juan RP in PR kern/39395.


 To generate a diff of this commit:
 cvs rdiff -r1.8 -r1.9 src/share/man/man4/ataraid.4
 cvs rdiff -r1.30 -r1.31 src/sys/dev/ata/ata_raid.c
 cvs rdiff -r0 -r1.1 src/sys/dev/ata/ata_raid_jmicron.c
 cvs rdiff -r1.6 -r1.7 src/sys/dev/ata/ata_raidreg.h \
     src/sys/dev/ata/ata_raidvar.h
 cvs rdiff -r1.17 -r1.18 src/sys/dev/ata/files.ata

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

State-Changed-From-To: open->closed
State-Changed-By: tron@NetBSD.org
State-Changed-When: Fri, 05 Sep 2008 12:41:12 +0000
State-Changed-Why:
I've committed your changes. Thanks a lot for the contribution.


>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.