[openfirmware] r1305 - dev/ide
svn at openfirmware.info
svn at openfirmware.info
Thu Aug 20 08:20:52 CEST 2009
Author: wmb
Date: 2009-08-20 08:20:52 +0200 (Thu, 20 Aug 2009)
New Revision: 1305
Modified:
dev/ide/dmaide.fth
Log:
DMA IDE driver - added a timeout to the completion wait routine
to prevent hangs.
Modified: dev/ide/dmaide.fth
===================================================================
--- dev/ide/dmaide.fth 2009-08-20 06:17:45 UTC (rev 1304)
+++ dev/ide/dmaide.fth 2009-08-20 06:20:52 UTC (rev 1305)
@@ -37,8 +37,14 @@
dma-stat@ dma-stat! \ Clear old errors
;
-: dma-wait ( -- )
- begin 1 ms dma-stat@ dup 1 and 0= swap 2 and or until
+: dma-wait ( ms -- timeout? )
+ 0 do
+ 1 ms
+ dma-stat@ dup 1 and 0= swap 2 and or if
+ false unloop exit
+ then
+ loop
+ true
;
\ Sense and clear errors. The bit masked by 04 is read-clear and means
@@ -56,7 +62,10 @@
dma-cmd@ 1 or dma-cmd! ( adr phys #blks )
;
: dma-end ( adr phys #blks -- actual# )
- dma-wait 0 dma-cmd! ( adr phys #blks )
+ d# 500 dma-wait if ( adr phys #blks )
+ 3drop 0 exit
+ then ( adr phys #blks )
+ 0 dma-cmd! ( adr phys #blks )
dma-interrupt? if ( adr phys #blks )
r-csr@ drop \ Clear interrupt in drive
dma-stat@ h# f0 and 4 or dma-stat! ( adr phys #blks )
More information about the openfirmware
mailing list