From f97e75d972773144610bc779639ee913346e2132 Mon Sep 17 00:00:00 2001 From: HenrykRichter Date: Wed, 20 Mar 2019 09:02:11 +0100 Subject: [PATCH] updated LAN driver --- Driver/baxnet/README.enc | 12 + Driver/baxnet/README.miitool | 9 +- Driver/baxnet/README.vwiznet | 102 ------- Driver/baxnet/bin/enc624j6net.device | Bin 16204 -> 14808 bytes Driver/baxnet/bin/enc624j6net.device.zip | Bin 10031 -> 0 bytes Driver/baxnet/bin/enc624j6net.device_68000 | Bin 12516 -> 14920 bytes Driver/baxnet/bin/miitool | Bin 6376 -> 26672 bytes Driver/baxnet/bin/vwiznet500ex.device | Bin 11624 -> 0 bytes Driver/baxnet/bin/vwiznet600sd.device | Bin 10992 -> 0 bytes Driver/baxnet/source/Common.mk | 65 ++-- Driver/baxnet/source/enc624j6net.device | Bin 14636 -> 0 bytes Driver/baxnet/source/enc624j6net.device_68000 | Bin 17340 -> 0 bytes .../baxnet/source/enc624j6net/enc624j6l.asm | 248 ++++++++-------- Driver/baxnet/source/enc624j6net/hw.c | 6 +- Driver/baxnet/source/kprintf.asm | 7 +- Driver/baxnet/source/miitool.c | 278 +++++++++++++----- Driver/baxnet/source/sana2devqueryext.h | 45 +++ Driver/baxnet/source/server.c | 3 +- Driver/baxnet/source/smakefile.enc | 2 +- Driver/baxnet/source/version.h | 4 +- 20 files changed, 450 insertions(+), 331 deletions(-) delete mode 100644 Driver/baxnet/README.vwiznet delete mode 100644 Driver/baxnet/bin/enc624j6net.device.zip delete mode 100644 Driver/baxnet/bin/vwiznet500ex.device delete mode 100644 Driver/baxnet/bin/vwiznet600sd.device delete mode 100644 Driver/baxnet/source/enc624j6net.device delete mode 100644 Driver/baxnet/source/enc624j6net.device_68000 diff --git a/Driver/baxnet/README.enc b/Driver/baxnet/README.enc index 899d967..4b760d1 100644 --- a/Driver/baxnet/README.enc +++ b/Driver/baxnet/README.enc @@ -64,6 +64,18 @@ PRIORITY=PRI/K/N,BPS/K/N,MTU/K/N,FULLDUPLEX/S,FLOWCONTROL/S,TIMER/K/N,MULTICAST/ Changelog: ---------- +2.2 - some more tuning to RX/TX scheduling + - added optional debug code to lowlevel routines + - removed some obsolete bus transfers + - uses DMACopyFromBuffer for IP-stacks supporting + this capability + - explicit 32 bit alignment for RX/TX to speed up + ZIII transfers + - added experimental support for MII interface to + poll and modify speed and duplex settings on the + fly + - miitool added (see README.miitool) + 2.00 - improved RX speed for buffer wraparound cases - some more safety checks for boards with unresponsive ENC chips (explicit card bus clear before verification of diff --git a/Driver/baxnet/README.miitool b/Driver/baxnet/README.miitool index 8180e6f..bb55bd5 100644 --- a/Driver/baxnet/README.miitool +++ b/Driver/baxnet/README.miitool @@ -18,7 +18,11 @@ combination. Please note that fixed parameters must be set at both ends of the link. Otherwise the link will work slowly or not at all. None of the settings this tool applies is permanent. Changed parameters -are only valid until a reboot of the NIC. +are only valid until the next reset of the NIC. + +This utility is able to detect an active Ethernet interface in case that +the RoadShow TCP/IP stack is active. Otherwise, the device needs to be +passed as commandline option explicitly. Examples for usage are given at the end of this text. @@ -80,6 +84,9 @@ Valid Speed/Duplex combinations (not case sensitive): Examples: +current status (detailed, autodetect) + miitool v + current status (detailed): miitool DEV=enc624j6net.device v diff --git a/Driver/baxnet/README.vwiznet b/Driver/baxnet/README.vwiznet deleted file mode 100644 index 203b4e8..0000000 --- a/Driver/baxnet/README.vwiznet +++ /dev/null @@ -1,102 +0,0 @@ -VWiznet - A SANA-II driver for W5500 10/100 ethernet modules - -Copyright (C) 2018-2019 Henryk Richter - -This driver is supposed to support W5500 modules hooked up to the expansion -port of Vampire 500V2+ cards. - - -Installation: -------------- - -Installation of the driver is straightforward. -Just copy vwiznet500ex.device from the bin subdirectory to devs:networks -and enable the interface in your favorite TCP/IP stack as usual. So far, -successful tests have been done with the free AmiTCP/IP 3.0b2, AmiTCP4.0-4.2, -Genesis, MiamiDX and RoadShow. - -The minimum system requirement is the Gold 2.10 release of Apollo Core -for Vampire 500V2+. - - - -Vampire500 Expansion port Hardware ------------------------------------ - -Please see http://wiki.apollo-accelerators.com/doku.php/expansionport for -guidance on pinout of the expansion port. - -The W5500 can be clocked way higher than the ENC28J60 that was used for -SDNet. As a consequence of clocks beyond 25 MHz, signal integrity is of -some concern. Therefore it is suggested to connect the module is as close -as possible to the expansion port and use an Ethernet expansion cable -in order to reach the edge of the computer case. - -An adapter PCB is in the making. That PCB plugs directly into the Vampire -expansion port, connects readily available W5500 modules on the other -side and contains some components to keep signal integrity in a good shape. - - - -Options -------- - -Below you find the options accepted by the driver. Please note that no special -configuration is necessary for normal operation. What you find documented below -is available for tuning purposes. - -The options template for the config files -ENVARC:SANA2/vwiznet500ex.config - -is as follows: - -PRIORITY=PRI/K/N,BPS/K/N,MTU/K/N,SPISPEED/K/N,TIMER/K/N,NOINTERRUPT/S - - SPISPEED - SPI clock divider (1-10, default 1), controls maximum - clock of SPI bus. Actual I/O clock is Core_Clock/(3+SPISPEED). - - PRIORITY - server task priority (default 1) - - BPS - bit per seconds for statistics purposes - - MTU - maximum transmission unit (default 1500) - - NOINTERRUPT - disable hardware interrupt and use polling instead - (default: interrupt enabled) - - TIMER - when disabling interrupt you also need to specify - a timer interval in microseconds - (default: 0, i.e. no timer) - - - example1 (useful for DSL via PPPoE, - higher priority for server task = more speed with AmiTCP - at the expense of multitasking friendliness): - echo "MTU=1492 SPISPEED=1 PRIORITY=6" >ENVARC:sana2/vwiznet500ex.config - - - -Changelog: ----------- - -1.99 - re-enabled 32 Bit Buffer copies (unless Miami is active) - - default server task priority for AmiTCP=6 (otherwise 0) - - tuned RX/TX balancing to make RoadShow happy - - added Packet Filter hook processing (needs testing) - -1.98 - preparations for V2 of the adapter PCB: hardware based reset - -1.97 - added New style device commands - - implemented SANA-II Device Query Extension - -1.96 - tuned defaults - -1.95 - initial build, aligned with sdnet/v2expeth version - - - -Copyrights / License: ---------------------- - -Copyright (C) 2018-2019 Henryk Richter , all rights reserved. - diff --git a/Driver/baxnet/bin/enc624j6net.device b/Driver/baxnet/bin/enc624j6net.device index c21ffd19116cd62a59cc4cae0a4e9d9a0200f6df..b8bbdc5feac74ab2e960b16ff6c48a0480b2802d 100755 GIT binary patch literal 14808 zcmeHueQ;A(mgjkrkY9u_ilgy3jK^FavQdPPh2!zijMpv6hDgFTMmA|DL%}oHdM037 ztr(j2svMc&D?OPWI_b$~yLVEltyGo{Nyf{hv)L5I2%2H(4CzYPOeV`RK(ch==Bp_t zNoU-SwZHS;lRqHo+S>hdW7oa!zWZ_Rx#ygF&bjA45n2C*j6aL{l!)fNjdCZE^;cX@ zQR|NQ1Zr$Z6M}eboBx=*O0TBKtzIe`O%6u9M=g2Qa%c6j>nb?fc@{Tk9)doUP0d%{fmm;rYzd zSsG33dv}74rEEvDJ+Eh|ah$qS9<%TJOG6aUBBE1+uhD#>rHd-keoEU$M+Pi@ zDZVf1Qu-*+`pV>HJZt#5bT!qfa-lZ9Z@?zzIYTLGzBm|a-O)YpXkh!+&FQZ6cWKAq z*6mvdzdQBb5(~G)0?P?`M`Ih&vlHZuemuXyF9pcgYEUPYuMUwv(MKZjGOetRk@wik zRM$-w;Vt^*o@e%7MS6cvRm(q}3}2<4)ln*}=**DhJk0c^=eNi*xTINzNM1@39p+Me zujUX%yuLr2^zj=>ClZJ0dHFE+(EH2srzFLM{w8U5`6~E*7_+>pM9qk+u0#X zdDBuf-1r6&~60w#$8@`_&S@Pk^SK0BABG@<=`Wr*B&v{|OwTz9ltr`p6FZFfzz zmEF-MPqmddj!%By;P>PZuyaISBqx%ruDD~AeQK2Rj<%wyHaQLmNqglZ%amS#3d53UlP9>i5nvep3QQ-b5rJDQ|M>U3;~;m!+(~D|8U<1%zt+Bu1ZeWSW^e!7hXg$jYy@`JDdD5%lXCj{ z&$#xGSZb})6z-QSmwjY`bh?#LD)j3E*jq>a+bEEhba}#PVbbi2Gr}&`bkQFqpdH+) zJoajth%;=+H)yHJeza0?fJ712cd2u2>yGHh)`r5K3M?Zf4jO0<`8xN@emR5oQbU3Az_08NGBk(es#d*sd37t5wPQco z4slM;axU%DYo6BggL?iwJ>R3}!<<_koLkQ5`Rm_8+19VO_Hr&Y>3M*2Yqy^3Fs(0f z+194l=wqcEm+AYQTT*)dh%F1<@@w>yxzz9*z<5(7+k*JZ)RA-ne=99a*})ru+G0`k z%k07ZSCQV%LTYjbul0To^s^fMtRG=Fz`j6F@0`KyB15L^rwlIt_$`&JN55kI#f z^9&pF%&-<`P;T=b5RXvD(kR&~|3d1bj>;D5;65x{`mC#i_4)jtgs2{ACDMx9=L`7g zC3zY4R)uCum0ZY*WfUFVzr_K1*l8i~wtX4imK$GA56gRBiswch&&^YKZU&y43wSEq ztaSqRGz&dDd6coX90W#ITCA1M#8$qaEO$Y>Co9luLo1|lnnzQuWszmzPucO8vH$d) zZEetD)~9GS)&xH6-xmB=G(_Dq^=+$?d!{BPw0F~W|yY#Lx ztK}n}RXQ~jBFhn0{YK+;=sCNoe-5JNRn)9V*}=7gj6KGE&(lY3tm|3li;{H7=tz(K zk1`Y_7v4(o=2nV+Ir8NGt4L=@Dj&U9&`VT;wgq3>HcF*vt6(T;sWMCp@TTBR)_sl} zR3R|KW{W~-vza*9qq|5FManYru=Xl)b*_b{!;&E}j`Weyk1j<1({wNU6}=bJ*9Q8| zG3ZOj%)UnoJ)w8n0COWC-rn~~v+ur{v=eLI$u*8qPQ-ZRlpkc!>tRT(S93UdFS^Ln zEo1fx;J8`|g|E>MQ?3H7Q!d6whwn4^B(ZcUuxF*P{-?pgg|2p*cI7mp#)X))%{+pxMxV|6Ukll$1(nYck_d6lrTuGSsZ#qxcu z;WYUk-2$t!(Q9&_f0N$&6K)l~)`(gEB-bm^#W9k@zapD*Ao3G3= z%Bx~($$xn(X-i3}Yt}lius7-@lg=HWvt^j{afe`i?dVT*(!@3if3p+1{?(RWlhZ$u zCF|AjcuBy2S}%X%|BbX6e01n>nW6->-Yk z?B~dfLYQ?0;J5itr^uiCW`@eCwR$7P#djFGweIZ++R*rGsxQz0qdGy=Y@nJt;`@^_ zLx}))t~c>knaUxiatB*`$?l5|OKOD@O@*!>FyS0kiu}6wo?n@s|BI2te$fXQa`GJ0 zN6qTv>Z)QGNuECIYG=rkh(8Hg-9{b%`OV}ll>N}}rjM1+K+0@NLOd=Ki%K`;gwPV&A$0Sh0+|A>%IiRPyLv%`;1$uT;-5#whF!1v=O2J~>Oc zOJQBhw$8nnZQbLrb?(X-xtlNgb#IAroKxznrgGpJgQU2{yyPrf_f8I8eZ$oJ%P{|l zRxH*V`^gtY|0_r~_*R3WZw98kroGz6+vIbBQV%UC8GOpGF8Weud# zpv%;ZQeA+lVtQrFldMfa!YD; zftI{0mZ}0g(bFg)$m4L2v>TM-cG z>q(oD5=25;A6(fUZVlH|&y1sN8R$=Lg+h*gOr^e>X`cv z)=f^n2k9c+vLdQLbqXjuy$3uk|Clo^shhRUS6I@ZX-UhlGu*l*jj|5P56+_4N3-E%UVzPzb*MJBN|0+`{HI%Snocf||A;Io9oAerM%1;(fIaC->`!faJ9|FM zk)ocrn=c9-0@9d-a9JUiRXp1016*A{lQ5P|GQ-Sx(t8^$g!s8RC;bXwAdw`4eIym?tFe5sl z@CoQ#fWUhJ-V4}}A^5M)D>B!3Dv9xWh3&V%`U z{=jxy`hZ%Zgq%Nswb?abOYg#N4k<1n0rNU@eeb48X@T^6A=!S`V2BzxG7h4URC6&WRSt9Po2S6xdwDN11qm*W3MsAy;W~1{0Dbh8XehUZ|9mjJR4~C>0P)HQBd0usoklv*>*?Ktu|WXDG6M6w*ZS^#j0PC zT$>A4AeGkUYEg&etGy7uYVC#(vd!AdKFAXIAlBX`F>5dCRXwH%uVr3`n1elki8UyE zx>8>hXE|>GK2>BXyzRrx*WgkrPtQF#qIGb5gPznQ6|bZns3}3&Ys-RTh*Qu}tn__- zuYeuDH6j{kp+k++*U3W5M1!%9#!sU^&R5gArR6Gl|K!=b1ihi>NA>&|??cobHsYyi z#EgDBp~K?R!)ia5l{IP1IoZh=LpJSbNkvM++@S|6BZ!WznHp)va%YUZd)CNBUpdl@^m<6F z;fS$hGvcjYitkR^;(N3~rUs&Lem^C$S~9*{6C&a~1TMp~=yNM=9KC)Jv9>2k8A;g| zg>XLFqcw=8sXjGI+fZJQaU-gCIh(fTM&JcV!akPOOO{LfF7G>oI-jKMH6UO|d#BbW z42-b0hCv!4PpB&41#KSMqgFv4?_q!cco-OBKWvl#I7AkoMV0H0=JSzlWa<3#&fTx> z+45c`Jlk1N7fnOW0BTjp)9zhrKn<2SL;1W`Va5*;Ck1s3D%dcG#b@vQUgy4}fXepSF+#c=Q-cW`Fg1r9^5h#SaHepIo3G6s&?P{_+KS2=^9t}&Y-nRs$z+e zq&vNFwbXS85_cEk5q9=H)Z%nw*VCw(J6i_x@R`{w;nP(VItw-%o`_QC!I{F3xEM55 zCr*iiHI)%FORj*})$?P(-BXuCBtRfq=&I_Y z4tVZmS`ga24E|J<5JXY>H>uLx1} z{fMIPKerb?%ilNh?M-19PDM35+vs6vp&#k{KMwtH%u9XUdX)Pxe2E>Md;;^pHxt5( zbJdIFNfsv#A%5Va=sSm~N_C31sguchXnt?vFrAF}z^4}xJ-O}tTDX&#+=p>RiVb>; z=d>sGrKF?TzT%82bM`V=6BkoaB(Qc5d`-%41ZDlEF3>%q?R>9*hzI-ii|Yas&+dz5 zsO7(Nbgt$C|8wNdD0#p?`5xR-IWi)ZAAKrm$>0vnwTvn}ln$L8IXRM)5oIqu8MdVqmLEr?oKPXpj*S%II>wJgcCh^RTI?FIXy{xux+)TtCl&RRBz zNS0scs4j=LYknFa$_>%VKZcPAPDe<={RTt<^7VlDFd$OCM%Ova@iK$s^Bas?q#wW4 zMW605Zv$OEP@Hx5r_X@?#VlWZ$MWfU$oMB*|5=q@2Qqwmn(Y@Pz)SPfBpnY(+-@CH ziYPovyR)K*LN20^fKNQ6-_T&+dvJ2}!aMO9a+p7`i$FifF-9Is?0KDit()-c%p0@G z6F!XgtU<3jJ^tROc_9E_Iss%#xSmkGH)kWVAx2M~v8s9w7kiVptg-0qe4$a9{Yqn6*DVX5C}rc{Y`Y z_J1vwgN=A0a+r#7rs-9pUG#g7cy_=IZT$js7SB|61bw=VQ$r{G6Ih#-o~Qx$fh*R2 zoUI)=i(F1*5g9xNJ;!{6Zn6$>Zu=g?+E$39j!w<()nYrU@k@4B^rW?cE5 z$b!*oQmWZZbZqS@qAL@2$cm#o+?m~CD>p6#~{lj_B8DZ^ZR1J3ns z&Wp=a64r8=Icz!4x%C=TyFSO9#k$J*9DX}ht9HP;-HiMc`DKiIULW@=-xAFGNY9Tp zUtEEeV7$qpHDk6i-vllJpNsr;7{`4n z$9sX{D=3$n<=0RyGs{PKCez=R11A546wS@NA9?3^wFB`#$idya#3tVRE^w{d`PK3= z{|!UFzN&|Qj=a@H^Pit7hr(+;%kRdj?i>q_u`d&a^}ngpX%AL%S<`Qao!1yIV=XKJ z^UF%VeYo+b`lL1|V?9@a-Rgq899JPF^#;Lkc zV^tlmkgZ3^&c$n^paLOFvyj`l^;rnKbu$#Sc*WwBp zw3NI?-w2D#3tU)9@*P-Df}-P!me)eM5iMY zl_82QIZQ8PnwPvxzDyfp=o|+xP8K7Y?*!e7HQc;7L&Fr`Ki~_G&y6mLQVDip6Q0Ge zwX%DHEJ*j`bh6rW8c|y-bYmxfJER8joxx?Te0nzcgwPz&`8WC8=6FVxxs1}ghUV1o z^xp)(-K@VDmT6fMc;{J5OiP%57Bf;VYqHeSSno5+iIsK!Y2+ zKG#zEvAI5!W~|TDn95Rmv5Q=v01rn&x7}Skd-mq%c=k)T416Z#RpV6r@BRVts?VA) zt}WuW+zAuciRO!q*47=Z-{$wmaj6{f1bp$dI7hUk4Cmy}QRhy1rs~}OA*mEGchlCe zrGcFxdfOKgI6t6tN*`P9AEH~hw;NWLl4@M`e(A-<{_L(O|AzlZXBD39TJ4)3Q> zJ{BIQ6L^19lpXx{kl3;(AG!yc4WsYRj%fC_f8`ST{s?`ZL;sgh{(jnpQVw<`inlE9 z*LkN0yHOr&9Je0`*3)K0Q_in@Gk*hhDr9$MJlj`}SlJLI04Eu&pK}AXb@DgJPJeev zO1|H^Bj_DoP~#o0sPzs<>b%2Ev%lWz*_G<*e{}0W|J3(eH1jX(n(N5VtoXY8H3hz= zz}FP`ngaj7QULb`_#@pi$h3;6<2eV8tgvjkLk=fWUIu9{yi8K~|MHK&rB-u@f24x- z7Fr&9tUp*kkDoVE^{|gCYU)dBmxqT-Q(RXH`&N1+lx#{-cr1jP5S}>-)=vze^*^Ls zJU;!+)GpjVO|mV_WfssVl4f7`^ZXUn$>ZZ8{reIN$MmfB)*YC;EIc-x42lmrYjQJl zzL}V6z4wF83kvuvQkV&kDSyQfPfF1Ro*GD^_K* zbOX;Z)SSR`6we6z2 zIe&{=tBY|)Z1Bg@B<|IUMF`X{&*9V8-C6ZUJd7_(DzsvJmrISm3eo+L9QB4?Q=x?X z8&hP>;iP}mzlm?A!1F}VJ9h$})PfV4IrO(7Ewns5cOqCXQ7)Xs8G>n?Dgk|(R3#-{ zf9OOOvqj`AQFa8ik#q^~3(b=LJ;-ho?)4#Uxbf;t^gP-#D55=G-J&vByM34F=-Rs7 zEVlOS8f@#@vJD-KHm*pZYg4U)Ogx_uOYzt!nQGcNpb)4&1*t7Jj`T zw)Srw6yENh%{w%)dB@i6-S>&j16}EE(be6Z?s@c4QMr8=hIFLi6ZUN#T%GRf>scwj z)3tSQYrl49L)Yek^dPEni~mi+T_g?CP8y~L&5%1I{z@bq{@gH z&mW7Q$UYcukMxzO7UgHkIsUI&fD^$d%Fiyx+QWTm=lU?@8&m;b!jDx%bDi1I3>9zJb!#!S0%-l&6os#K(HAER zT0^}M{kY!6JfJhmU3>zA^o*a(*vS#G)AGpN@ds`Ss&Z)Vsw?@)sw-qcvLiWm7V}RG zhQ68G>$AQ8XV+G>uj=!uma5}b|KoT4EBCH@D}TP~_{Pvjq4rQ8QAxCEMLoVx$EbCu z^W)K`x_V0|pPf!*$f8xH=5!IgvF;!8H&||QLw~Cvt1O>2^<=?{pIsgqrsYk;7W2KL z`J!Ckx+A?1_k=K$a*kw3WCyQ#IFY)yt2f;ZS$;&<4bJ#C=5!<%nDO99KjJ8) zpP!>2KQ`%!A!1;D4?Fn;&czDH>lNHNm?!b0aUazt@jDHCxz~!AdYx*E_~`!Ti;qq6 zshlCe-h3l+FX%Y2?h4f)-Ji;vqhG5G;Z74@BXFd&GEDMx>;f(39A6|+cHx^kU{d%s z$QNnUxwSa%|M9z*{DX^PRI(^e#rWNa1>bde=`P^t!Z)ZA732Qh6&{!HTLaX&(^KEX zU^V>xp1loNapcFqI1h{&PoEF){aD@oS}}UmDy#fk$<5zSprro-YqCL@r7yPQzR3;B zxY)KBtzW39<1ZI&tFxMGb=Dj+n#%K~F%Pxjz zy@qVA0Xfi1wEP*O+9vormytdvsuD=GNNJ=D`oUTtHbL}Z_3OXY(TCci=|NA--d>;{9%Xf&Tk+FR+>mirfXP?!ov{DyI3;UFd22 zx$uh%{@dQVw!LjtV=Uavmc6~Y-QSjotxd!_9{M*ZRIjOS^+(#;^=C`Rdi~iEYgv`h zORLv6H#eJgD0 zn)aw@-;(Ycq=yI6=>gFkZWXbnRiY70pgW^R__nX6&iIX_Xz%Lpip4~Cdh5;}u+or` p!m7X<@*^=_JV*km9EoYvfy93{B*+FmhXfw*545Nr34hjG{~L{8iMId% literal 16204 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 diff --git a/Driver/baxnet/bin/enc624j6net.device_68000 b/Driver/baxnet/bin/enc624j6net.device_68000 index bf5be33825af1c17259a4d36dd03b3b140d4194b..cdd1c3086b2dcbcc00e6537087d73cd4cbabfbb8 100755 GIT binary patch delta 2150 zcmd5-ZA_C_6h8L_N^NO@i3AbLrIb>zqXn^JuEQ2YSqD|IS-QDs-%5Ec1KO3cA!|x! z{9uVuoK z!x?oWO{dK~sPdytoR5%0(UBB6A%oGe)HjsGI5eLTE!#i;SE6BUIV*^neVfxj^4PJY{{0o@A1dNT)IcvvWx_ z(QrXCAye$q;s=Yf%G)7FOyNnNEz+i>&1#z;&>D3CJZ6_wCFC)iQkBdr*Y`rI{bX{0 zsS2&6iMa|Ftd@kxl?05oY#%-WCeJx)08MO%u#=|6b_p3`%s;AW`l`r88FFQY{cs_3vqx>Cd7(rJB= zH`g~C4+;~-Z)GjpU*wc3rs=yVU15)l4sh9nY>!&YWnN}Zs*+JNK-we^nIr6`+N@L@ zvYmjtf@H=&mFbF2s_X-_*P1G7g;=O~H8UtYAIeD<_yd`-H&r}19w?3{n1X}mr~^cU^=I4ST0`durI0hA61 z08^;t_%$!I?fO2_pSy2NELv6&_zc%<*cL&@U&<}?b)d-3&kWwJ?}N!O&^|Hm^eywn zfZw2Xr#=q%QMrozD)Oty@8j=vw9g|SwZ`Er+81cv;8y{t${TuregX)NJ{tL4kgWX^ zpuhAeIv+%*BRJqV@;!kpWHDRB*N9d`?6qPn*or(@AD0Xm&EV!CZ zBAo?77FsPBr_E?in?ThheG??`<1Ny5&E8|wh4ZU)VO6y*TxZgSSK518eccruUUyl5 z4{QZbub=Pg_WHU+X-2`L`SOWm$z@5lu3{N;RcQam$aE)X9+*j33Jm~`BQgLBwmkNo zECZ30Vp%s&0I~kZhgE1*TzU<&Yil^kG#k)*mki?`j2WcXIJZr`#{L6YwBEO%Y60v07#PhF zYo(<>;3xJTKe*!md^@YY>Mtr(D&+Zb^s7-4K8!LczBMT6JfT+qP5|gaK}ju`UqLJc ztG7j56ERi`QHx-yv|`df>n!~(&K6I% zCrBGTd@C(6R(JGL2k-5eqjpbka4o<2BXpR3Ckid-y4KM$r_^l?db)L;{8qQ8Y))!e z@31;%xk3gF_IguQb-SqxgLu2VL8@!@xO)WZ?(ufC_Lot&j}Np`zO^;r>F%Z_9lbcl z5x||?=?$(5@SUFJ^i$p&^mYmVe!;tafgsAzcy9&xApk-61j0~@m10|@Sh1v9C!aDI zDcs)B$6c>G6WTQGOT8XC4mHNLaQj2!%&MmwQVl5v&Oi)cjZZ&%x&F?*&p+Z$Xc~tE zQVv>hEJUiznxD8aek#08LGiRx# zc)MLv&lB%BtTTQtBmr5S1S;#~ahA6vP|i8U`{HZ}I6>=A;{ndByO^91YqrJ{lh5lE zYl|LP@)y@HpS>lfp8fy; delta 1112 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 UYpi|(oRGs9!q7mEU)h)c2lcLDB>(^b diff --git a/Driver/baxnet/bin/vwiznet500ex.device b/Driver/baxnet/bin/vwiznet500ex.device deleted file mode 100644 index 38a80dcab11ff99f8bd9cf8ee311e7d60a12d6e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11624 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 Vv!Osn=qZ%7C<&AX6#Q8~`5zYDZCC&R diff --git a/Driver/baxnet/bin/vwiznet600sd.device b/Driver/baxnet/bin/vwiznet600sd.device deleted file mode 100644 index 1bcbf104b33671d1bed08fc574b3d67c902cc64a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10992 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 R({m``BgIj`bN;E9{}=fHl)C@` diff --git a/Driver/baxnet/source/Common.mk b/Driver/baxnet/source/Common.mk index 32a9a79..8111754 100644 --- a/Driver/baxnet/source/Common.mk +++ b/Driver/baxnet/source/Common.mk @@ -25,11 +25,15 @@ compiler_vcc = 1 ############################################################################### # prefix for system includes (ASM) -# +# native AmigaOS compilation: set PREFX=GG: or PREFX=ADE:, depending on toolchain ############################################################################### -PREFX = c:/Users/Matze/Amiga/development/VBCC/ + +PREFX = /opt/amigaos-68k/ #PREFX = gg: -SYSINC = $(PREFX)NDK39/Include/include_i +#PREFX = c:/Users/Matze/Amiga/development/VBCC/ + +SYSINC = $(PREFX)os-include +#SYSINC = $(PREFX)NDK39/Include/include_i ############################################################################### # @@ -41,6 +45,7 @@ ifeq ($(compiler_vcc),1) # VBCC (use explicit vlink line for LINK= if complaints about R_PC happen) CCX = vc LINK = vlink -bamigahunk -x -s -mrel -Cvbcc -Bstatic -nostdlib #-Rshort +LINKEXE = vlink -bamigahunk -x -s -mrel -Cvbcc -Bstatic #LINK = $(CCX) -nostdlib CFLAGS = -Os -+ -sc -c99 -cpu=$(CPU) CFLAGS2 = -Os -+ -sc -c99 -cpu=$(CPU2) @@ -50,6 +55,7 @@ else # GCC CCX = m68k-amigaos-gcc LINK = $(CCX) -nostartfiles -s +LINKEXE = $(CCX) -s -noixemul CFLAGS = -O3 -s -m$(CPU) -Wall -noixemul -mregparm=4 -fomit-frame-pointer -msoft-float -noixemul CFLAGS2 = -O3 -s -m$(CPU2) -Wall -noixemul -mregparm=4 -fomit-frame-pointer -msoft-float -noixemul @@ -68,7 +74,7 @@ VASMFORMAT2 = -m$(CPU2) -Fhunk -nowarn=2064 -quiet -I$(SYSINC) # ############################################################################### -IPATH = +IPATH = ############################################################################### # @@ -77,29 +83,41 @@ IPATH = ############################################################################### ifeq ($(compiler_vcc),1) # skip quotes with VCC, the AmigaOS native version doesn't like them -DEFINES += -DDEVICEVERSION=$(DEVICEVERSION) -DDEVICEREVISION=$(DEVICEREVISION) -DEFINES += -DDEVICEDATE=$(DEVICEDATE) -DDEVICENAME="$(DEVICEID)" -DEFINES += -DDEVICEEXTRA=$(DEVICEEXTRA) -ASMDEFS += -DDEVICEVERSION=$(DEVICEVERSION) -DDEVICEREVISION=$(DEVICEREVISION) +#DEFINES += -DDEVICEVERSION=$(DEVICEVERSION) -DDEVICEREVISION=$(DEVICEREVISION) +#DEFINES += -DDEVICEDATE=$(DEVICEDATE) +#DEFINES += -DDEVICEEXTRA=$(DEVICEEXTRA) +DEFINES += -DDEVICENAME="$(DEVICEID)" +DEFINES += -DHAVE_VERSION_H=1 +DEFINES += -DNEWSTYLE +#ASMDEFS += -DDEVICEVERSION=$(DEVICEVERSION) -DDEVICEREVISION=$(DEVICEREVISION) #ASMDEFS += -DDEVICEDATE=$(DEVICEDATE) -DDEVICENAME=$(DEVICEID) -DEFINES2 += -DDEVICEVERSION=$(DEVICEVERSION) -DDEVICEREVISION=$(DEVICEREVISION) -DEFINES2 += -DDEVICEDATE=$(DEVICEDATE) -DDEVICENAME="$(DEVICEID2)" -DEFINES2 += -DDEVICEEXTRA=$(DEVICEEXTRA) -ASMDEFS2 += -DDEVICEVERSION=$(DEVICEVERSION) -DDEVICEREVISION=$(DEVICEREVISION) +#DEFINES2 += -DDEVICEVERSION=$(DEVICEVERSION) -DDEVICEREVISION=$(DEVICEREVISION) +#DEFINES2 += -DDEVICEDATE=$(DEVICEDATE) +#DEFINES2 += -DDEVICEEXTRA=$(DEVICEEXTRA) +DEFINES2 += -DDEVICENAME="$(DEVICEID2)" +DEFINES2 += -DHAVE_VERSION_H=1 +DEFINES2 += -DNEWSTYLE +#ASMDEFS2 += -DDEVICEVERSION=$(DEVICEVERSION) -DDEVICEREVISION=$(DEVICEREVISION) else -DEFINES += -D"DEVICEVERSION=$(DEVICEVERSION)" -D"DEVICEREVISION=$(DEVICEREVISION)" -DEFINES += -D"DEVICEDATE=$(DEVICEDATE)" -D"DEVICENAME="$(DEVICEID)"" -DEFINES += -D"DEVICEEXTRA=$(DEVICEEXTRA)" -ASMDEFS += -DDEVICEVERSION=$(DEVICEVERSION) -DDEVICEREVISION=$(DEVICEREVISION) +#DEFINES += -D"DEVICEVERSION=$(DEVICEVERSION)" -D"DEVICEREVISION=$(DEVICEREVISION)" +#DEFINES += -D"DEVICEDATE=$(DEVICEDATE)" +#DEFINES += -D"DEVICEEXTRA=$(DEVICEEXTRA)" +DEFINES += -D"DEVICENAME="$(DEVICEID)"" +DEFINES += -DHAVE_VERSION_H=1 +DEFINES += -DNEWSTYLE +#ASMDEFS += -DDEVICEVERSION=$(DEVICEVERSION) -DDEVICEREVISION=$(DEVICEREVISION) #ASMDEFS += -DDEVICEDATE=$(DEVICEDATE) -DDEVICENAME=$(DEVICEID) -DEFINES2 += -D"DEVICEVERSION=$(DEVICEVERSION)" -D"DEVICEREVISION=$(DEVICEREVISION)" -DEFINES2 += -D"DEVICEDATE=$(DEVICEDATE)" -D"DEVICENAME="$(DEVICEID2)"" -DEFINES2 += -D"DEVICEEXTRA=$(DEVICEEXTRA)" -ASMDEFS2 += -DDEVICEVERSION=$(DEVICEVERSION) -DDEVICEREVISION=$(DEVICEREVISION) +#DEFINES2 += -D"DEVICEVERSION=$(DEVICEVERSION)" -D"DEVICEREVISION=$(DEVICEREVISION)" +#DEFINES2 += -D"DEVICEDATE=$(DEVICEDATE)" -D"DEVICENAME="$(DEVICEID2)"" +#DEFINES2 += -D"DEVICEEXTRA=$(DEVICEEXTRA)" +DEFINES2 += -D"DEVICENAME="$(DEVICEID2)"" +DEFINES2 += -DHAVE_VERSION_H=1 +DEFINES2 += -DNEWSTYLE +#ASMDEFS2 += -DDEVICEVERSION=$(DEVICEVERSION) -DDEVICEREVISION=$(DEVICEREVISION) endif @@ -112,7 +130,8 @@ endif ifeq ($(debug),1) CFLAGS += -DDEBUG -g CFLAGS2 += -DDEBUG -g -LINKLIBS = -L$(PREFX)targets/m68k-amigaos/lib -ldebug +LINKLIBS = -L$(PREFX)/lib -L$(PREFX)targets/m68k-amigaos/lib -ldebug +#LINKLIBS = -L$(PREFX)targets/m68k-amigaos/lib -ldebug endif ############################################################################### @@ -144,11 +163,11 @@ OBJECTS2 = $(patsubst %.o,%.2o,$(OBJECTS)) # ############################################################################### -all: $(DEVICEID) $(DEVICEID2) +all: $(DEVICEID) $(DEVICEID2) $(TESTTOOL) $(TESTTOOL2) clean: rm -f $(OBJECTS) $(OBJECTS2) - rm -f $(DEVICEID) $(DEVICEID2) + rm -f $(DEVICEID) $(DEVICEID2) $(EXTRACLEAN) # not for cross compile :-) install: $(DEVICEID) $(DEVICEID2) diff --git a/Driver/baxnet/source/enc624j6net.device b/Driver/baxnet/source/enc624j6net.device deleted file mode 100644 index 9f25e3a275c991195fa2231845b098cdc2c3be91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14636 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 diff --git a/Driver/baxnet/source/enc624j6net/enc624j6l.asm b/Driver/baxnet/source/enc624j6net/enc624j6l.asm index d8452e5..43ba47c 100755 --- a/Driver/baxnet/source/enc624j6net/enc624j6l.asm +++ b/Driver/baxnet/source/enc624j6net/enc624j6l.asm @@ -1,4 +1,3 @@ -;APS00000000000000000000000000000000000000000000000000000000000000000000000000000000 ; ------------------------------------------------------------------------------ ; | Lowlevel Access to memory mapped ENC624J600 in PSP mode | ; | Henryk Richter | @@ -20,14 +19,14 @@ ; - _enc624j6l_RXReset -> won't recover from totally unresponsive chip (but exits gracefully) ; ; enable debugging code block (comment/uncomment, see below) -;DEBUG EQU 1 +DEBUG EQU 1 +GLOBALINT_BOARD EQU 1 ;if 1, then toggle board interrupt, else ENC624 INTIE incdir src:baxnet/trunk/source/ ;Temp:Amiga/src/Zorro-LAN-IDE.git/Driver/enc624j6net/ include "enc624j6net/registers.i" include "enc624j6net/macros.i" include "debug.i" - include "hw.i" ifnd DEBUG DEBUG EQU 0 @@ -41,7 +40,7 @@ _OPT_LONGRESET EQU 0 ;in testing, don't enable ; ; options for buffer memory configuration, please reserve some space for private variables ; -PSTART_INIT EQU $0BF0 ; 16 Bytes private storage for driver +PSTART_INIT EQU $0BF8 ; 8 Bytes private storage for driver PSTOP_INIT EQU $0BFF ; (see below for definitions) RXSTART_INIT EQU $0C00 ; start of RX buffer, room for 14 packets @@ -57,10 +56,8 @@ MAX_FRAMELEN EQU 1518 ;------------ driver private storage ------------------------------ PNextPacket EQU PSTART_INIT ;2 Bytes - private "next packet" pointer for RX PNextTX EQU PSTART_INIT+2 ;2 Bytes - private "next packet" pointer for TX (init as 0) -PSigBit EQU PSTART_INIT+4 ;2 Bytes interrupt bit -PSigTask EQU PSTART_INIT+6 ;4 Bytes signaled task -PLinkChange EQU PSTART_INIT+10 ;2 Bytes Link Change (copy of PHYDPX,PHYLNK bits) -Punused EQU PSTART_INIT+12 ; +PLinkChange EQU PSTART_INIT+4 ;2 Bytes Link Change (copy of PHYDPX,PHYLNK bits) +Punused EQU PSTART_INIT+6 ; ;------------- TX: double buffering -------------------------------- PSwapTX EQU $600 ;swap between two TX buffers (one active, one activated after last TX done) @@ -560,6 +557,8 @@ _enc624j6l_Init: move.l a0,d0 beq .err + WRITEDEBUG Init_MSG,a0 + READREG ESTAT,a0,d0 and #(ESTAT_CLKRDY|ESTAT_PHYRDY),d0 cmp #(ESTAT_CLKRDY|ESTAT_PHYRDY),d0 @@ -787,20 +786,13 @@ _enc624j6l_EnableInterrupt: move.l a0,d1 beq.s .err - WRITEREG PSigBit,a0,d0 ;save signal bit - - move.l a1,d0 - WRITEREG PSigTask+2,a0,d0 ;lower two bytes - swap d0 ; - WRITEREG PSigTask,a0,d0 ;upper two bytes - ; enable interrupt for incoming packet moveq #-1,d0 ;magic trick: the board enables Interrupts lea $4000(a0),a0 move.w d0,($4000,a0) lea -$4000(a0),a0 - move #EIE_PKTIE|EIE_PCFULIE|EIE_INTIE,d0 + move #EIE_PKTIE|EIE_INTIE|EIE_PCFULIE,d0 SETREG EIE,a0,d0 moveq #1,d0 @@ -823,8 +815,20 @@ _enc624j6l_EnableInterrupt: ; Notes: assumes that init() was called before ; _enc624j6l_EnableGlobalInterrupt: - move #EIE_PKTIE|EIE_PCFULIE|EIE_INTIE,d0 ; move #EIE_INTIE,d0 - SETREG EIE,a0,d0 + ifne GLOBALINT_BOARD + + moveq #-1,d0 ;magic trick: the board enables Interrupts + lea $4000(a0),a0 + move.w d0,($4000,a0) + lea -$4000(a0),a0 + + else ;GLOBALINT_BOARD + + move #EIE_PKTIE|EIE_INTIE|EIE_PCFULIE,d0 + SETREG EIE,a0,d0 + + endc ;GLOBALINT_BOARD + moveq #1,d0 .rts rts @@ -842,8 +846,21 @@ _enc624j6l_EnableGlobalInterrupt: ; Notes: assumes that init() was called before ; _enc624j6l_DisableGlobalInterrupt: - move #EIE_INTIE,d0 - CLRREG EIE,a0,d0 + + ifne GLOBALINT_BOARD + + moveq #0,d0 ;magic trick: the board enables Interrupts + lea $4000(a0),a0 + move.w d0,($4000,a0) + lea -$4000(a0),a0 + + else ;GLOBALINT_BOARD + + move #EIE_INTIE,d0 + CLRREG EIE,a0,d0 + + endc ;GLOBALINT_BOARD + moveq #1,d0 .rts rts @@ -878,10 +895,6 @@ _enc624j6l_DisableInterrupt: move #EIE_INTIE|EIE_PKTIE|EIE_LINKIE|EIE_AESIE|EIE_MODEXIE|EIE_HASHIE|EIE_PRDYIE|EIE_DMAIE|EIE_TXIE|EIE_TXABTIE|EIE_RXABTIE|EIE_PCFULIE,d0 CLRREG EIE,a0,d0 - moveq #0,d0 - WRITEREG PSigTask+2,a0,d0 ;lower two bytes - WRITEREG PSigTask,a0,d0 ;upper two bytes - moveq #1,d0 .err: rts @@ -905,35 +918,50 @@ _enc624j6l_DisableInterrupt: ; ULONG sigbit ; _enc624j6l_IntServer_List: + move.l a6,-(sp) + move.l a1,d0 ;no pointer supplied ? -> return - beq.s .end - movem.l d1/A1/a6,-(sp) - + beq.s .rts move.l a1,a6 + moveq #0,d1 - move.l (A6)+,d0 ;read magic word - cmp.l #HW_MAGIC_WORD,D0 ; are we in the right structure? - bne.s .done - .boardloop: - move.l (A6)+,d0 ;next entry from list + move.l (a1)+,d0 ;next entry from list beq.s .done ; - move.l d0,a1 ;current board + move.l d0,a0 ;current board - READREG EIR,A1,d0 ;get interrupt status reg - and #EIR_PKTIF|EIR_PCFULIF,D0 - beq.s .boardloop ;no interrupt here - or.l d0,D1 ; save if at least one one board has interrupted - move #EIE_INTIE,D0 ;disable board interrupt until someone enables it again - CLRREG EIE,A1,d0 - BRA.s .boardloop + READREG EIR,a0,d0 ;get interrupt status reg + and #EIR_PKTIF|EIR_PCFULIF|EIR_RXABTIF|EIR_PKTIF|EIR_TXABTIF,d0 + + or.l d0,d1 + bra.s .boardloop .done: tst.w d1 beq.s .rts + ; clear EIE_INTIE in all active boards directly from here +.intdis_loop: + move.l (a6)+,d0 + beq.s .boardsdone + move.l d0,a1 + + ifne GLOBALINT_BOARD + + moveq #0,d0 ;magic trick: the board enables Interrupts + lea $4000(a1),a1 + move.w d0,($4000,a1) + + else ;GLOBALINT_BOARD + + move #EIE_INTIE,D0 ;disable board interrupt until someone enables it again + CLRREG EIE,A1,d0 + + endc ;GLOBALINT_BOARD + + bra.s .intdis_loop +.boardsdone: ;faster: get from extended Driver board list instead from ZII/ZIII card - ifne 1 move.l (a6)+,d0 ;SigTask beq.s .rts @@ -941,33 +969,16 @@ _enc624j6l_IntServer_List: move.l (a6)+,d1 ;SigBit move.l d0,a1 ;SigTask - move.l (a6)+,a6 ;ExecBase + move.l (a6)+,a6 ;ExecBase (from FastRAM) + ;move.l 4.w,a6 moveq #0,d0 bset d1,d0 - else - - READREG PSigTask,a0,d0 ;upper two bytes - swap d0 ; - READREG PSigTask+2,a0,d0 ;lower two bytes - tst.l d0 ; no task ? - beq.s .rts - move.l d0,a1 ; signaled task - - moveq #0,d0 - READREG PSigBit,a0,d1 ;get signal bit - bset d1,d0 ;signal mask - - move.l 4.w,a6 - - endc - jsr _LVOSignal(a6) .rts - movem.l (sp)+,D1/A1/A6 -.end + move.l (sp)+,a6 moveq #0,d0 ;set Z flag rts @@ -1071,7 +1082,11 @@ _enc624j6l_CheckLinkChange: ; ifne DEBUG -RXReset_MSG: dc.b "RXReset Head %04lx Tail %04lx NextPacket %04lx ReadPTR %04lx Bytes %04lx",10,0 +RXReset_MSG: dc.b "RXReset Head %04lx Tail %04lx NextPacket %04lx NextReadPTR %04lx Bytes(maybe) %04lx ESTAT %04lx",13,10,0 +Init_MSG: dc.b "ENC624j6net init (debug build) board address %lx",13,10,0 +TXWait_MSG: dc.b "TransmitFrame: waiting",13,10,0 +TXAbort_MSG: dc.b "TransmitFrame: abort",13,10,0 + cnop 0,4 endc _enc624j6l_RXReset: @@ -1084,6 +1099,8 @@ _enc624j6l_RXReset: moveq #0,d1 moveq #0,d2 moveq #0,d3 + moveq #0,d7 + READREG ESTAT,a0,d7 READREG ERXHEAD,A0,d0 READREG ERXTAIL,A0,d1 READREG PNextPacket,a0,d2 @@ -1092,19 +1109,16 @@ _enc624j6l_RXReset: rol.w #8,d3 ;swap pointer to Big Endian endc ;d3=next Packet (from receive status vector) - moveq #2,d5 - add d2,d5 ;increment pointer by one word + moveq #2,d5 + add d2,d5 ;increment pointer by one word WRAPINDEX d5 ;wrap D4 if beyond buffer - READSRAM a0,d5,d4 ;receive byte count + READSRAM a0,d5,d4 ;receive byte count ifeq _OPT_BUFFER_SWAP rol.w #8,d4 ;swap pointer to Big Endian endc - - - - WRITEDEBUG RXReset_MSG,d0,d1,d2,d3,d4 - + WRITEDEBUG RXReset_MSG,d0,d1,d2,d3,d4,d7 + movem.l (sp)+,d2-d7 endc @@ -1194,16 +1208,18 @@ _enc624j6l_HaveRecv: _enc624j6l_RecvFrame: ; movem.l d2-d7/a1-a3,-(sp) move.l a0,d1 - beq .err + beq .err moveq #0,d0 READREG ESTAT,a0,d2 ;number of pending frames move.b d2,d0 ;clear out count (ESTAT_PKTCNT7...ESTAT_PKTCNT0) - beq .rts ;nothing in buffer, return sheer emptiness + beq .rts ;nothing in buffer, return sheer emptiness ;at least one frame in buffer + ifne DEBUG READREG ERXHEAD,A0,d4 READREG ERXTAIL,A0,d5 + endc ;----------- check next packet pointer and verify expected state ----------- READREG PNextPacket,a0,d7 ;get user read pointer from private space @@ -1215,15 +1231,6 @@ _enc624j6l_RecvFrame: ; rol.w #8,d0 ;swap pointer to Big Endian endc -; btst #0,d0 -; beq.s .nozerobit -; nop -;.nozerobit -; btst #0,d7 -; beq.s .nozerobit2 -; nop -;.nozerobit2 - ;verify next packet pointer, re-initialize recv if this is invalid cmp #RXSTOP_INIT,d0 ;bad pointer (<0 or >end of memory) bhi.w .recv_err @@ -1238,55 +1245,40 @@ _enc624j6l_RecvFrame: ; add.w d0,d1 ;next pkt + unwrap distance .ptrcheck: sub.w d7,d1 ;length of pkt - cmp #MAX_FRAMELEN+2+6,d1 ;must be smaller than max framelen + ptr + status vector + cmp #MAX_FRAMELEN+2+6+2,d1 ;must be smaller than max framelen + ptr + status vector + alignment bhi .recv_err ;-> reinit recv (am I paranoid ? -> try ENC28J60, then you know why...) - ;debug: collect packet positions - ;move.l recvptr,a2 - ;move d0,(a2)+ - ;move.l a2,recvptr - ;addq.l #1,recvcount - ;cmp.l #65536,recvcount - ;bgt .recv_err - - WRITEREG PNextPacket,a0,d0 ;write pointer for next packet - ;------------------ check receive status vector ----------------------------- addq.w #2,d7 ;increment pointer WRAPINDEX d7 ;wrap D7 if beyond buffer - ;lea (a0,d7.w),a2 ;read ptr for first control word - ;READREG 0,a2,d0 ;last control word = length (byte count) - READSRAM a0,d7,d0 ;move (a0,d7.w),d0 - ifeq _OPT_BUFFER_SWAP - rol.w #8,d0 ;swap pointer to Big Endian + + ifne 0 + READSRAM a0,d7,d2 ;move (a0,d7.w),d0 + ifeq _OPT_BUFFER_SWAP + rol.w #8,d2 ;swap pointer to Big Endian + endc + and.w #$f800,d2 ;verify (should be all zeros in upper 9 bits) + bne .recv_err ;receive buffer is wrong -> re-initialize endc - - and.w #$f800,d0 ;verify (should be all zeros in upper 9 bits) - bne .recv_err ;receive buffer is wrong -> re-initialize - + addq.w #4,d7 ;increment pointer WRAPINDEX d7 ;wrap D7 if beyond buffer - ;lea (a0,d7.w),a2 ;new read pointer for length - ;READREG 0,a2,d0 ;last control word = length (byte count) - READSRAM a0,d7,d0 ;move (a0,d7.w),d0 - ifeq _OPT_BUFFER_SWAP - rol.w #8,d0 ;swap pointer to Big Endian - endc - ifne 1 + WRITEREG PNextPacket,a0,d0 ;write pointer for next packet + + ifne 0 + ;lea (a0,d7.w),a2 ;new read pointer for length + ;READREG 0,a2,d0 ;last control word = length (byte count) + READSRAM a0,d7,d2 ;move (a0,d7.w),d0 + ifeq _OPT_BUFFER_SWAP + rol.w #8,d2 ;swap pointer to Big Endian + endc ;_OPT_BUFFER_SWAP + endc ;0 + ;D1 is the distance to the next frame = stored length + recv vevtor - sub #6+2,d1 ;STATUS VECTOR, Pointer + subq #6+2,d1 ;STATUS VECTOR, Pointer move d1,d0 ; - else - - cmp #2,d0 - blt .recv_err ;can't be: SRC MAC 6 DST MAC 6 LEN/TYPE 2 CRC 4 (discounting variable data) - cmp #MAX_FRAMELEN,d0 - bgt .recv_err - - endc - subq #4,d0 ;subtract CRC length addq.w #2,d7 ;increment pointer (skip status vector length field) @@ -1365,6 +1357,10 @@ _enc624j6l_RecvFrame: ; bra.s .end_read .nooptrecv: + ;DEBUG ONLY + ;bra.s .emergency_slow + ;DEBUG ONLY + ifeq _OPT_BUFFER_SWAP ;1 ; ;wraparound aware loop for big endian buffer @@ -1462,7 +1458,13 @@ _enc624j6l_RecvFrame: ; rts .err: moveq #-1,d0 ;receive error bra.s .rts + .recv_err: + moveq #0,d0 + READREG ESTAT,a0,d2 ;number of pending frames + move.b d2,d0 ;clear out count (ESTAT_PKTCNT7...ESTAT_PKTCNT0) + beq.s .rts ;nothing in buffer, return sheer emptiness + ;serious problem: we need to re-initialize the recv buffer here bsr _enc624j6l_RXReset @@ -1613,18 +1615,22 @@ _enc624j6l_TransmitFrame: .copydone ;---------------- wait on last frame ---------------------------------- - move #200,d3 + move #600,d3 ; .txwait: READREG ECON1,a0,d1 and.w #ECON1_TXRTS,d1 beq.s .txrdy ;100 MBit/s frame time is max. 0.12 ms (without inter-frame spacing) - ;wait 20 us via CIA - moveq #20,d0 + ;WRITEDEBUG TXWait_MSG + + ;wait 5 us via CIA + moveq #5,d0 bsr _enc624j6l_UMinDelay dbf d3,.txwait ;approx. 4ms max. wait + WRITEDEBUG TXAbort_MSG + ;hmpf. abort last transmission move #ECON1_TXRTS,d1 ; CLRREG ECON1,a0,d1 ; diff --git a/Driver/baxnet/source/enc624j6net/hw.c b/Driver/baxnet/source/enc624j6net/hw.c index 2852f12..d4c7603 100644 --- a/Driver/baxnet/source/enc624j6net/hw.c +++ b/Driver/baxnet/source/enc624j6net/hw.c @@ -460,9 +460,7 @@ void myhw_ControlInterrupts( DEVBASEP ) ObtainSemaphore( &hwd->hwd_Sem ); /* redundant here: server is a single task -> but it looks good :-) */ - hwd->hwd_act_boards[0] = HW_MAGIC_WORD; - - flag = 1; + flag = 0; for( i=0 ; i < db->db_NBoards ; i++ ) { if( db->db_Units[i].duh_online ) @@ -476,7 +474,7 @@ void myhw_ControlInterrupts( DEVBASEP ) hwd->hwd_act_boards[flag+2] = (APTR)hwd->hwd_IntSig; /* append sigbit */ hwd->hwd_act_boards[flag+3] = (APTR)db->db_SysBase; /* append ExecBase *((APTR*)0x4); */ - if( flag>1 ) /* determine on/off switch */ + if( flag ) /* determine on/off switch */ { /* at least 1 board is online */ if( hwd->hwd_Interrupt.is_Data ) diff --git a/Driver/baxnet/source/kprintf.asm b/Driver/baxnet/source/kprintf.asm index 67ef1ec..f47a42f 100644 --- a/Driver/baxnet/source/kprintf.asm +++ b/Driver/baxnet/source/kprintf.asm @@ -1,6 +1,7 @@ incdir include: ifnd _LVOSupervisor - include exec/exec_lib.i + include lvo/exec_lib.i + ;include exec/exec_lib.i endc include exec/execbase.i @@ -18,7 +19,7 @@ _LVORawMayGetChar equ -$1fe ;A0 = format ;A1 = arguments _KPrintF: - ifd DEBUG +; ifd DEBUG movem.l d0-d2/a0-a3/a6,-(sp) @@ -37,7 +38,7 @@ _KPrintF: jsr _LVORawPutChar(a6) ; move.b d0,(a3)+ movem.l (sp)+,d0/d1/a0/a1/a6 - endc ;DEBUG +; endc ;DEBUG rts diff --git a/Driver/baxnet/source/miitool.c b/Driver/baxnet/source/miitool.c index 93cfcfe..5417453 100644 --- a/Driver/baxnet/source/miitool.c +++ b/Driver/baxnet/source/miitool.c @@ -4,7 +4,6 @@ /** SANA-II extension for access to Ethernet PHY registers over MII interface **/ /** **/ /** Copyright (c) 2019, Henryk Richter, Timm S. Müller **/ -/** All rights reserved. **/ /** **/ /** Redistribution and use in source and binary forms, with or without **/ /** modification, are permitted provided that the following conditions are met: **/ @@ -16,9 +15,6 @@ /** 3. All advertising materials mentioning features or use of this software **/ /** must display the following acknowledgement: **/ /** This product includes software developed by Henryk Richter. **/ -/** 4. Neither the name of the Henryk Richter nor the **/ -/** names of its contributors may be used to endorse or promote products **/ -/** derived from this software without specific prior written permission. **/ /** **/ /** THIS SOFTWARE IS PROVIDED BY Henryk Richter ''AS IS'' AND ANY **/ /** EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED **/ @@ -32,15 +28,22 @@ /** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **/ /** **/ /*******************************************************************************************/ +/** Acknowledgements: **/ +/** text and definitions in "media" table and "miitool.h" file originate from mii-tool.c **/ +/** written/copyright 1997-2000 by Donald Becker **/ +/*******************************************************************************************/ /* Notes: - make sure you have an up-to-date devices/sana2devqueryext.h - make sure you have devices/newstyle.h - compilation - sc miitool.c link - + sc miitool.c link INCLUDEDIR=sc:netinclude + gcc miitool.c -Igg:netinclude -o miitool + - if you don`t have the Roadshow SDK installed, just comment "RSHOW" out to build + without auto-detection code */ +#define RSHOW #include #include @@ -49,8 +52,17 @@ #include #include #include "miitool.h" +#ifdef RSHOW +#include +#include +#endif +#ifdef __GNUC__ +struct UtilityBase *UtilityBase; +static USHORT Utility_MY = 0; +#endif + #define OPT_TEMPLATE "DEVICE=DEV/K,UNIT/K/N,VERBOSE=V/S,FORCEMEDIA/K,ADVERTISE/K,RENEG=RESTART/S,RESET/S,VERYVERBOSE=VV/S" const char opt_template[] = OPT_TEMPLATE; struct progopts { @@ -70,12 +82,17 @@ struct prgdata { struct Device *sana2dev; UBYTE devvalid; struct progopts opts; + BYTE *auto_devname; /* device name, if auto-detected */ }; + void end_prog( struct prgdata *prg ) { + if( prg->auto_devname ) + FreeVec( prg->auto_devname ); + if( prg->sana2devio ) { if( prg->devvalid ) @@ -84,6 +101,16 @@ void end_prog( struct prgdata *prg ) } if( prg->sana2devport ) DeleteMsgPort( prg->sana2devport ); + +#ifdef __GNUC__ + if( (UtilityBase) && (Utility_MY) ) + { + CloseLibrary( (struct Library*)UtilityBase ); + Utility_MY = 0; + UtilityBase = NULL; + } +#endif /* __GNUC__ */ + } /* @@ -105,6 +132,13 @@ LONG start_prog( struct prgdata *prg ) if( !prg->sana2devio ) goto err; +#ifdef __GNUC__ + if( !UtilityBase ) + { + UtilityBase = (struct UtilityBase*)OpenLibrary("utility.library",37); + Utility_MY = 1; + } +#endif /* __GNUC__ */ return 1; err: end_prog( prg ); @@ -189,36 +223,37 @@ const struct { BYTE *name; UWORD namelen; UWORD value; -} media[] = { - /* The order through 100baseT4 matches bits in the BMSR */ +} mediatypes[] = { + /* these are kept in this order for the dump loop decision about best mode */ { "10baseT-HD", 10,MII_AN_10BASET_HD }, { "10baseT-FD", 10,MII_AN_10BASET_FD }, { "100baseTx-HD", 12,MII_AN_100BASETX_HD }, { "100baseTx-FD", 12,MII_AN_100BASETX_FD }, { "100baseT4", 9,MII_AN_100BASET4 }, + /* generic mode names where only the speed matters */ { "100baseTx", 9,MII_AN_100BASETX_FD | MII_AN_100BASETX_HD }, { "10baseT", 7,MII_AN_10BASET_FD | MII_AN_10BASET_HD }, { "100bTx", 6,MII_AN_100BASETX_FD | MII_AN_100BASETX_HD }, { "10bT", 4,MII_AN_10BASET_FD | MII_AN_10BASET_HD }, }; -#define NMEDIA (sizeof(media)/sizeof(media[0])) +#define NMEDIA (sizeof(mediatypes)/sizeof(mediatypes[0])) -void dump_mii_media( USHORT par, BOOL bestonly ) + +void dump_mii_media( USHORT parms, BOOL bestonly ) { LONG i; - par >>= 5; /* get upper bits */ - for( i=4 ; i >= 0 ; i-- ) + for( i=9 ; i >= 5 ; i-- ) { - if( par & (1<> 6, 0 ); Printf("\n advertising: "); - dump_mii_media( advert, 0 ); + dump_mii_media( selfad, 0 ); if( curlink & MII_AN_ABILITY_MASK ) { Printf("\n link partner:"); @@ -438,6 +473,111 @@ LONG write_mii( struct prgdata *prg, struct S2DevQueryMIIParam *mii, LONG num ) return parm_mii.Actual; } +#ifdef RSHOW +/* return string length without closing 0 */ +LONG myStrLen( BYTE *str ) +{ + LONG ret = 0; + + if( str ) + { + while( *str++ ) + ret++; + } + + return ret; +} +/* copy string, append 0 */ +void myStrNCpy( BYTE *dst, BYTE*src, LONG bytes ) +{ + if( !dst ) + return; + + if( src ) + { + while( (bytes--) && (*src != 0) ) + { + *dst++ = *src++; + } + } + *dst = 0; + +} + + +/* find active interface and its device in RoadShow (optional) */ +/* "which" index of Ethernet adapter 0,1,2,... */ +/* "unit" is the output unit */ +BYTE *find_active_interface(LONG which, LONG *unit ) +{ + struct Library *SocketBase; + BYTE *ret = NULL; + struct List * interface_list = NULL; + struct Node *n; + BYTE *dev = NULL; + LONG hw = -1; + + SocketBase = OpenLibrary("bsdsocket.library",4); + if( !SocketBase ) + { + Printf("Cannot open bsdsocket.library version 4 for device auto-detection\n"); + return NULL; + } + + do + { + LONG have_iface = 0; + + if( !(SocketBaseTags(SBTM_GETREF(SBTC_HAVE_INTERFACE_API), &have_iface, TAG_DONE) == 0) + ||(!have_iface) ) + { + Printf("RoadShow-style interface API not available in IP stack\n"); + break; + } + + interface_list = ObtainInterfaceList(); + if( !interface_list ) + { + + break; + } + for( n=interface_list->lh_Head ; n->ln_Succ != NULL ; n=n->ln_Succ ) + { + /* Printf("Interface %s\n",n->ln_Name); */ + /* find Ethernet interface */ + if(!QueryInterfaceTags( n->ln_Name, IFQ_HardwareType, &hw, + IFQ_DeviceName, &dev, + IFQ_DeviceUnit, unit ) ) + continue; + + /* Printf("device %s hwtype %ld\n",dev,hw); */ + + if( hw == S2WireType_Ethernet ) + break; + } + + if( hw == S2WireType_Ethernet ) + { + if( dev ) + { + ret = AllocVec( myStrLen( dev ), 0 ); + if( ret ) + myStrNCpy( ret, dev, myStrLen(dev) ); + } + } + } + while(0); + + if( interface_list ) + ReleaseInterfaceList(interface_list); + + CloseLibrary(SocketBase); + + return ret; +} +#endif + + /* 8 basic registers, we poll 16 out of curiosity */ #define MII_REGNUM 16 /* two spare registers for write mode */ @@ -468,17 +608,34 @@ int main(int argc, char **argv) return res; } + unit = (prg->opts.unit) ? *prg->opts.unit : 0; + if( !prg->opts.devname ) { +#ifdef RSHOW + LONG _unit; + prg->auto_devname = find_active_interface( 0, &_unit ); + if( prg->auto_devname ) + { + unit = _unit; + name = prg->auto_devname; + } + else + { + Printf("cannot auto-determine device, please use DEVICE=... as argument\n"); + end_prog(prg); + return res; + } +#else name = "enc624j6net.device"; - Printf("TODO: auto-detect, now trying default %s\n",name); + Printf("device auto-detect not compiled in, now trying default %s\n",name); +#endif /* end_prog(prg); return res; */ } else name = prg->opts.devname; - unit = (prg->opts.unit) ? *prg->opts.unit : 0; if( prg->opts.vverbose ) prg->opts.verbose = 2; else @@ -524,7 +681,7 @@ int main(int argc, char **argv) parm_productname.Data = productname; parm_productname.Length = sizeof(productname); parm_productname.Actual = 0; -#if 1 + tags[i=0].ti_Tag = S2_DevQueryExtVendorName; tags[i++].ti_Data = (ULONG) &parm_vendorname; tags[i ].ti_Tag = S2_DevQueryExtProductName; @@ -542,55 +699,28 @@ int main(int argc, char **argv) parm_mii.Actual = query_mii( prg, mii, 0, 15 ); if( parm_mii.Actual ) { - /* read BMSR twice */ - query_mii( prg, mii+MII_BMSR, MII_BMSR, MII_BMSR ); + /* read BMSR a second time */ + query_mii( prg, mii+MII_BMSR, MII_BMSR, MII_BMSR ); res = RETURN_OK; } else + { + Printf("Sana2DeviceQueryExtension for MII access not present\n"); res = RETURN_WARN; -#else - /* MII specific */ - parm_mii.Data = (APTR)mii; - parm_mii.Length = sizeof(mii); - parm_mii.Actual = 0; - - for( i=0 ; i < 16 ; i++ ) /* MII standard register set: 8 */ - { - mii[i].ID = i; /* mii[i].Content = 0; */ - } - mii[16].ID = MII_BMSR; /* read BMSR twice */ - - tags[i=0].ti_Tag = S2_DevQueryExtVendorName; - tags[i++].ti_Data = (ULONG) &parm_vendorname; - tags[i ].ti_Tag = S2_DevQueryExtProductName; - tags[i++].ti_Data = (ULONG) &parm_productname; - tags[i ].ti_Tag = S2_DevQueryExtGetMII; - tags[i++].ti_Data = (ULONG) &parm_mii; - tags[i ].ti_Tag = TAG_DONE; - - prg->sana2devio->ios2_Req.io_Command = S2_DEVICEQUERYEXT; - prg->sana2devio->ios2_Data = tags; - prg->sana2devio->ios2_DataLength = sizeof tags; - - if( DoIO((struct IORequest *) prg->sana2devio ) != 0 ) - res = RETURN_WARN; - else res = RETURN_OK; - - mii[MII_BMSR].Content = mii[16].Content; /* read BMSR twice */ -#endif + } } - Printf("Device: %s\n",name); + Printf("Device: %s\n",(ULONG)name); /* general info */ if( parm_vendorname.Actual != 0 ) { vendorname[parm_vendorname.Actual-1] = 0; - Printf("Vendor: %s\n",vendorname); + Printf("Vendor: %s\n",(ULONG)vendorname); } if( parm_productname.Actual != 0 ) { productname[parm_productname.Actual-1] = 0; - Printf("Product: %s\n",productname); + Printf("Product: %s\n",(ULONG)productname); } /* after query, see what we've got */ @@ -603,6 +733,7 @@ int main(int argc, char **argv) } else { + /* command or query ? */ if( !(prg->opts.renegotiate) && !(prg->opts.reset) && !(prg->opts.advertise) && !(prg->opts.force) ) @@ -659,3 +790,4 @@ int main(int argc, char **argv) end_prog(prg); return res; } + diff --git a/Driver/baxnet/source/sana2devqueryext.h b/Driver/baxnet/source/sana2devqueryext.h index 437fe11..0adebe5 100644 --- a/Driver/baxnet/source/sana2devqueryext.h +++ b/Driver/baxnet/source/sana2devqueryext.h @@ -66,6 +66,51 @@ struct S2DevQueryExtParam /* Current physical link speed, see definitions below: */ #define S2_DevQueryExtLinkSpeed (S2_DevQueryExtTagBase + 4) +/* proposal added by Henryk Richter: access to MII */ +/* MII is the standardized ethernet interface to the + PHY registers. It allows to read and modify autonegotiation + settings and status, as well as manual reconfiguration of + link parameters. In order to ease the burden on the + SANA-II driver, this interface is transparent in the sense + that no processing of MII registers is necessary. + + Please note that MII read/write is slow. Use with discretion. + + The format of the Data APTR is per entry as follows: + UWORD ID + UWORD Content + + S2_DevQueryExtGetMII + Please pass a writable Data array of Length=2*NumIDs to the call and + initialize the IDs you are interested in. The driver will initialize + the Content of the IDs it knows about. Should a requested ID be + unsupported by the driver or underlying chipset, the driver will + overwrite the respective IDs with S2_DEVQUERYEXT_MII_INVALID and + clear the associated Content field. + In case of fatal error, the "Actual" field of S2DevQueryExtParam + will be 0. Otherwise, the last successfully updated location + 2 + will be returned. + + S2_DevQueryExtSetMII + Please pass a Data array of Length=2*NumIDs to the call and initialize + the IDs to write along with their content. The driver will write the + MII registers corresponding with the IDs in the given order. + In case of fatal error, the "Actual" field of S2DevQueryExtParam + will be 0. Otherwise, the last successfully updated location + 2 + will be returned. + +*/ +#define S2_DevQueryExtGetMII (S2_DevQueryExtTagBase + 0x20) +#define S2_DevQueryExtSetMII (S2_DevQueryExtTagBase + 0x21) + +struct S2DevQueryMIIParam +{ + UWORD ID; + UWORD Content; +}; +#define S2_DEVQUERYEXT_MII_INVALID 0xfe + + #define S2_DEVQUERYEXT_LINK_UNDEFINED 0xffffffff #define S2_DEVQUERYEXT_LINK_DOWN 0 #define S2_DEVQUERYEXT_LINK_UP 1 diff --git a/Driver/baxnet/source/server.c b/Driver/baxnet/source/server.c index 0e877a3..b3637b6 100644 --- a/Driver/baxnet/source/server.c +++ b/Driver/baxnet/source/server.c @@ -37,7 +37,7 @@ static LONG server_queryext( DEVBASEP, ULONG unit, struct IOSana2Req *ioreq ); /* tunables: number of one-call read and write requests */ /* this limits the number of processed write requests per run when enabled */ -#define ONE_WRITE_REQ 2 +#define ONE_WRITE_REQ 1 /* this limits the number of processed read requests per run when enabled */ #define ONE_READ_REQ 2 @@ -1071,6 +1071,7 @@ VOID SAVEDS ServerTask(void) { if( !action ) /* queues quiet ? -> sleep */ { + Disable(); i=0;BOARDLOOP( ( ; i < db->db_NBoards ; i++ ) ) { /* housekeeping -> check for link change on idle, re-enable interrupts etc. */ hw_check_link_change(db,i); diff --git a/Driver/baxnet/source/smakefile.enc b/Driver/baxnet/source/smakefile.enc index 82ae617..d94eef3 100644 --- a/Driver/baxnet/source/smakefile.enc +++ b/Driver/baxnet/source/smakefile.enc @@ -127,7 +127,7 @@ CFLAGS = $(CFLAGS) INCLUDEDIR="" INCLUDEDIR=$(SUBDIR) $(DEFINES) # ASM based alternative to deviceheader.o would be romtag.o OBJECTS = deviceheader.o$(TYPE) deviceinit.o$(TYPE) device.o$(TYPE) \ - server.o$(TYPE) $(SUBDIR)/hw.o$(TYPE) + server.o$(TYPE) $(SUBDIR)/hw.o$(TYPE) kprintf.o$(TYPE) OBJECTS = $(OBJECTS) $(ASMOBJECTS) diff --git a/Driver/baxnet/source/version.h b/Driver/baxnet/source/version.h index 2309618..9a10d60 100644 --- a/Driver/baxnet/source/version.h +++ b/Driver/baxnet/source/version.h @@ -9,9 +9,9 @@ #define _INC_VERSION_H #define DEVICEVERSION 2 -#define DEVICEREVISION 1 +#define DEVICEREVISION 2 #define DEVICEEXTRA /* #define DEVICEEXTRA Beta */ -#define DEVICEDATE 21.02.2019 +#define DEVICEDATE 10.03.2019 #endif