bwilson@portia.Stanford.EDU (Robert Wilson) (10/17/90)
Within the last few weeks, I've noticed several postings related to problems with the xt_wini.c driver in v1.2 and v1.3 when using Western Digital controllers. Some of the symptoms include being able to access only the first 10 MB of 20 MB disks. Trying to access the rest of the disk results in errors from the FS. I've had similar problems with my WD controller and recently discovered the source of the problem. I've mailed the fix to several people, but judging from the other recent postings, it's probably worth posting for everyone. Apparently, most rom-table (non autoconfig) HD controllers use DIP switches to select the drive type. The standard IBM controller has two switches to select from four possible drive types. Some WD controllers also use two switches; others use three. (Glen Overby recently posted a driver that will handle WD controllers with three switches.) Still other WD controllers use jumpers to select the drive type. Mine has four jumper positions for each drive (total of eight). A jumper is placed in one of the four positions to select the drive type. If your controller uses jumpers, the standard xt_wini driver will get confused and use the wrong drive type. In many cases, this means it thinks your drive is only 10 MB when it's really 20 MB. In other cases, it may not work at all. If you think you may be experiencing this problem, look for the DIP switches or jumpers on your controller board. If you have switches, then you're dealing with something else. The fix is fairly simple. I haven't included a patch file, since I no longer have source for v1.3. There's little point in posting a diff against v1.5 since anyone with v1.5 can just use the bios_wini driver. Hopefully, it will not be difficult to determine where to modify the code in xt_wini.c.... First, I defined a new flag, WINI_JUMPERS, in include/minix/config.h. You can just define this in the compile command if you like. Set it to 1 if your controller uses jumpers or 0 otherwise. Next, in xt_wini.c find the code where type_0 and type_1 are set in the initialization routine: type_0 = i & 3; type_1 = (i >> 2) & 3; Replace this with: #if WINI_JUMPERS type_0 = find_type(i & 0x0f); type_1 = find_type((i & 0xf0) >> 4); #else type_0 = i & 3; type_1 = (i >> 2) & 3; #endif Finally, add the following function to xt_wini.c (you'll also need to add a declaration for it e.g. FORWARD int find_type(); ): #if WINI_JUMPERS /*==========================================================================* * find_type * *==========================================================================*/ PRIVATE int find_type(jmpr) unsigned int jmpr; { int i; for (i=0; i < 4; i++) { if (!(jmpr & (1 << i))) return i; } return 0; } #endif Hopefully, this will be included in future versions of xt_wini.c. I don't know anything about the details of disk drivers other than what I've described here, but I'd be glad to help anyone who needs help applying these fixes. Good luck! Bob Wilson (bwilson@shasta.stanford.edu)
bwilson@portia.Stanford.EDU (Robert Wilson) (10/27/90)
I recently posted a fix for xt_wini.c to allow it to work with some Western Digital controllers that use jumpers instead of switches to select the drive type. At Andy's request, here are the patches to 1.5. If you have an XT-type Western Digital controller that does not work with the xt_wini driver, please try this fix and let me know what happens. The two files to be patched are: include/minix/config.h kernel/xt_wini.c (Use uud to decode the file; use sh to unshar it; then use patch to update the source files). Good luck. Bob Wilson (bwilson@shasta.stanford.edu) -------------------------------------------------------------- table !"#$%&'()*+,-./0123456789:;<=>? @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ begin 644 xt_wini.sh M96-H;R!X("T@8V]N9FEG+F-D:68*<V5D("<O7E@O<R\O+R<@/B!C;VYF:6<Nz M8V1I9B \/" G+R<*6"HJ*B!C;VYF:6<N;W)I9PE3=6X@4V5P(#,P(#$U.C0Wy M.C(U(#$Y.3 *6"TM+2!C;VYF:6<N: E4:'4@3V-T(#(U(#$R.C$S.C(U(#$Yx M.3 *6"HJ*BHJ*BHJ*BHJ*BHJ*@I8*BHJ(#0Q+#0V("HJ*BH*6"TM+2 T,2PTw M-R M+2TM"E@@( I8(" O*B!$969I;F5S(&9O<B!K97)N96P@8V]N9FEG=7)Av M=&EO;BX@*B\*6" @(V1E9FEN92!!551/7T))3U,@(" @(" @(" @, DO*B!Xu M=%]W:6YI+F,@+2!U<V4@5V5S=&5R;B=S(&%U=&]C;VYF:6<@0DE/4R J+PI8t M*R C9&5F:6YE(%=)3DE?2E5-4$524R @(" @(" Q"2\J(&IU;7!E<G,@=7-Es M9"!T;R!S96QE8W0@9')I=F4@='EP92 J+PI8(" C9&5F:6YE($-?4E,R,S)?r M24Y47TA!3D1,15)3(# )+RH@<G,R,S(N8R M('5S92!S;&]W97(@0R!I;G0@q M:&%N9&QE<G,@*B\*6" @(V1E9FEN92!$149!54Q47T-,05-3(" @(" @, DOp M*B!F;&]P<'DN8R M(#,@;W(@-2!T;R!G970@;VYL>2!T:&%T('-I>F4@*B\*o M6" @(V1E9FEN92!,24Y%5U)!4" @(" @(" @(" @, DO*B!C;VYS;VQE+F,@n M+2!W<F%P(&QI;F5S(&%T(&-O;'5M;B X," J+PHO"F5C:&\@>" M('AT7W=Im M;FDN8V1I9@IS960@)R]>6"]S+R\O)R ^('AT7W=I;FDN8V1I9B \/" G+R<*l M6"HJ*B!X=%]W:6YI+F]R:6<)4V%T($]C=" @-B Q,3HR,#HR,2 Q.3DP"E@Mk M+2T@>'1?=VEN:2YC"5-A="!/8W0@(#8@,3(Z,C,Z,#(@,3DY, I8*BHJ*BHJj M*BHJ*BHJ*BHJ"E@J*BH@,34R+#$U-R J*BHJ"E@M+2T@,34R+#$U." M+2TMi M"E@@($9/4E=!4D0@=F]I9"!W:6Y?;W5T*"D["E@@($9/4E=!4D0@:6YT('=Ih M;E]S<&5C:69Y*"D["E@@($9/4E=!4D0@:6YT('=I;E]R97-U;'1S*"D["E@Kg M($9/4E=!4D0@:6YT(&9I;F1?='EP92@I.PI8(" *6" @+RH]/3T]/3T]/3T]f M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]e M/3T]/3T]/3T]/3T]/3T]/3T]*@I8(" @*@D)"0D)"0EW:6YC:&5S=&5R7W1Ad M<VL)"0D)"2 )"0D@(" J( I8*BHJ*BHJ*BHJ*BHJ*BHJ"E@J*BH@-S,Q+#<Sc M." J*BHJ"E@@("-E;F1I9@I8(" *6" @(" O*B!#86QC=6QA=&4@=&AE(&1Rb M:79E('1Y<&5S("HO"E@A(" @='EP95\P(#T@:2 F(#,["E@A(" @='EP95\Qa M(#T@*&D@/CX@,BD@)B S.PI8(" *6" @(" O*B!#;W!Y('1H92!P87)A;65Tz M97(@=F5C=&]R(&9R;VT@=&AE('-A=F5D('9E8W1O<B!T86)L92 J+PI8(" @y M(&]F9G-E=" ]('9E8U]T86)L95LR("H@5TE.25\P7U!!4DU?5D5#73L*6"TMx M+2 W,S(L-S0T("TM+2T*6" @(V5N9&EF"E@@( I8(" @("\J($-A;&-U;&%Tw M92!T:&4@9')I=F4@='EP97,@*B\*6"$@(VEF(%=)3DE?2E5-4$524PI8(2 @v M('1Y<&5?," ](&9I;F1?='EP92AI("8@,'@P9BD["E@A(" @='EP95\Q(#T@u M9FEN9%]T>7!E*"AI("8@,'AF,"D@/CX@-"D["E@A("-E;'-E"E@A(" @='EPt M95\P(#T@:2 F(#,["E@A(" @='EP95\Q(#T@*&D@/CX@,BD@)B S.PI8(2 Cs M96YD:68*6" @"E@@(" @+RH@0V]P>2!T:&4@<&%R86UE=&5R('9E8W1O<B!Fr M<F]M('1H92!S879E9"!V96-T;W(@=&%B;&4@*B\*6" @("!O9F9S970@/2!Vq M96-?=&%B;&5;,B J(%=)3DE?,%]005)-7U9%0UT["E@J*BHJ*BHJ*BHJ*BHJp M*BH*6"HJ*B X-S<L.#<Y("HJ*BH*6"TM+2 X.#,L.3 Q("TM+2T*6" @("!Co M:6U?>'1?=VEN:2@I.PI8(" @(')E='5R;BAR*3L*6" @?0I8*R *6"L@(VEFn M(%=)3DE?2E5-4$524PI8*R O*CT]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]m M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]l M/3T]*@I8*R @*@D)"0EF:6YD7W1Y<&4)"0D)(" @("H*6"L@("H]/3T]/3T]k M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]j M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/2HO"E@K(%!2259!5$4@:6YT(&9I;F1?i M='EP92AJ;7!R*0I8*R!U;G-I9VYE9"!I;G0@:FUP<CL*6"L@>PI8*R @(&ENh M="!I.PI8*R *6"L@("!F;W(@*&D],#L@:2 \(#0[(&DK*RD@>PI8*R ):68@g M*"$H:FUP<B F("@Q(#P\(&DI*2D@<F5T=7)N(&D["E@K(" @?0I8*R @(')Ef 9='5R;B P.PI8*R!]"E@K("-E;F1I9@HO"G)Ne d end