[OpenBIOS] r542 - dev/olpc/cafenand
svn at openbios.org
svn at openbios.org
Wed Aug 15 05:16:38 CEST 2007
Author: wmb
Date: 2007-08-15 05:16:38 +0200 (Wed, 15 Aug 2007)
New Revision: 542
Modified:
dev/olpc/cafenand/badblock.fth
Log:
CaFe NAND - support for graphical copy-nand progress reports.
Modified: dev/olpc/cafenand/badblock.fth
===================================================================
--- dev/olpc/cafenand/badblock.fth 2007-08-15 03:14:55 UTC (rev 541)
+++ dev/olpc/cafenand/badblock.fth 2007-08-15 03:16:38 UTC (rev 542)
@@ -5,7 +5,10 @@
0 value bbt \ Bad block table address
-: round-up ( n boundary -- n' ) over 1- + over / * ;
+: round-up ( n boundary -- n' )
+ tuck 1- + ( boundary n' )
+ over / *
+;
: /bbt ( -- bytes ) \ Bytes per bad block table
total-pages pages/eblock / 3 + 4 / ( bytes )
@@ -225,8 +228,8 @@
: map-resblock ( page# #pages -- page#' #pages )
swap pages/eblock /mod ( adr #pages offset eblock# )
- resmap swap na+ @ ( adr #pages offset res-page# )
- + swap ( adr page#' #pages )
+ resmap swap na+ @ ( adr #pages offset res-eblock# )
+ + pages/eblock * swap ( adr page#' #pages )
;
external
@@ -292,23 +295,29 @@
make-bbt
;
-\ Clear the device but honor the existing bad block table
-: wipe ( -- )
+: .bn ( -- ) (cr . ;
+
+: (wipe) ( 'show-bad 'show-erased -- )
get-existing-bbt
bbt if
- usable-page-limit 0 ?do
+ usable-page-limit 0 ?do ( 'show-bad 'show-erased )
i block-bad? if
-\ cr ." Skipping bad block" i .page-byte cr
+ i pages/eblock / 2 pick execute
else
- (cr i .
+ i pages/eblock / over execute
i erase-block
then
pages/eblock +loop
exit
- then
+ then ( 'show-bad 'show-erased )
\ If there is no existing bad block table, make one from factory info
make-bbt
+ 2drop
;
+
+\ Clear the device but honor the existing bad block table
+: wipe ( -- ) ['] drop ['] .bn (wipe) ;
+
: show-bbt ( -- )
get-bbt
total-pages 0 ?do
@@ -369,22 +378,28 @@
: start-scan ( -- ) pages/eblock negate to scan-page# ;
\ Must erase all (wipe) first
-: copy-block ( adr -- error? )
- next-page# pages/eblock bounds ?do ( adr )
- dup i write-page if ( adr )
- drop true unloop exit ( true )
- then ( adr )
- /page + ( adr' )
- loop ( adr )
- drop false ( false )
+: copy-block ( adr -- page# error? )
+ next-page# ( adr page# )
+ tuck pages/eblock bounds ?do ( page# adr )
+ dup i write-page if ( page# adr )
+ drop true unloop exit ( page# true )
+ then ( page# adr )
+ /page + ( page# adr' )
+ loop ( page# adr )
+ drop false ( page# false )
;
-: put-cleanmarkers ( -- )
- begin (next-page#) 0= while ( page# )
- " "(85 19 03 20 08 00 00 00 00 00 00 00)" ( page# adr len )
- rot /page /ecc + write-bytes ( )
- repeat ( )
+: put-cleanmarker ( page# -- )
+ " "(85 19 03 20 08 00 00 00 00 00 00 00)" ( page# adr len )
+ rot /page /ecc + write-bytes ( )
;
+: put-cleanmarkers ( show-xt -- )
+ begin (next-page#) 0= while ( show-xt page# )
+ dup put-cleanmarker ( show-xt page# )
+ pages/eblock / over execute ( show-xt )
+ repeat ( show-xt )
+ drop
+;
: read-next-block ( adr -- )
next-page# pages/eblock bounds ?do ( adr )
More information about the OpenBIOS
mailing list