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:
(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.