[openfirmware] r1636 - cpu/x86/pc/olpc/via dev

svn at openfirmware.info svn at openfirmware.info
Fri Dec 18 20:25:35 CET 2009


Author: wmb
Date: 2009-12-18 20:25:35 +0100 (Fri, 18 Dec 2009)
New Revision: 1636

Added:
   dev/logdev.fth
Modified:
   cpu/x86/pc/olpc/via/fw.bth
Log:
OLPC trac 9903 - Added console logging facility.


Modified: cpu/x86/pc/olpc/via/fw.bth
===================================================================
--- cpu/x86/pc/olpc/via/fw.bth	2009-12-18 16:47:33 UTC (rev 1635)
+++ cpu/x86/pc/olpc/via/fw.bth	2009-12-18 19:25:35 UTC (rev 1636)
@@ -505,6 +505,8 @@
 fload ${BP}/cpu/x86/pc/olpc/via/fsverify.fth
 devalias fsdisk int:0
 
+fload ${BP}/dev/logdev.fth
+
 fload ${BP}/ofw/inet/sntp.fth
 : olpc-ntp-servers  ( -- )
    " DHCP time 172.18.0.1 0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org"
@@ -558,6 +560,7 @@
    install-mux-io
    cursor-off
    true to text-on?
+   start-logging
 
    " //null" open-dev to null-ih  \ For text-off state
 

Added: dev/logdev.fth
===================================================================
--- dev/logdev.fth	                        (rev 0)
+++ dev/logdev.fth	2009-12-18 19:25:35 UTC (rev 1636)
@@ -0,0 +1,145 @@
+\ See license at end of file
+purpose: Device to log console output to memory
+
+dev /
+new-device
+
+" log" device-name
+
+0 value open-count
+0 value log-buf
+0 value log-size
+0 value log-wptr
+0 value log-rptr
+h# 1000 value log-increment
+
+: open  ( -- flag )
+   open-count 0=  if  
+      log-size log-increment + to log-size
+      log-size alloc-mem to log-buf
+      0 to log-wptr
+   then
+   open-count 1+ to open-count
+   true
+;
+: close  ( -- )
+   open-count 1 =  if
+      log-buf log-size free-mem
+      0 to log-size
+      0 to log-buf
+      0 to log-wptr
+   then
+   0 to log-rptr
+   open-count 1- to open-count
+;
+
+: size  ( -- ud )  log-wptr u>d  ;
+: seek  ( ud -- error? )
+   0<>  if  drop true  exit   then             ( low )  \ High word must be 0
+   dup log-size >  if  drop true  exit  then   ( low )
+   to log-rptr
+;
+: write  ( adr len -- actual )
+   dup log-wptr +  log-size -            ( adr len needed )
+   dup 0>  if                            ( adr len needed )
+      log-increment round-up             ( adr len needed' )
+      log-size + dup to log-size         ( adr len new-size )
+      log-buf over resize  if            ( adr len new-size buf-adr )
+         4drop 0 exit                    ( -- 0 )
+      then                               ( adr len new-size buf-adr )
+      to log-buf  to log-size            ( adr len )
+   else                                  ( adr len needed )
+      drop                               ( adr len )
+   then                                  ( adr len )
+   tuck  log-buf log-wptr +  swap  move  ( len )
+   dup log-wptr + to log-wptr            ( len )
+;
+: read  ( adr len -- actual )
+   log-wptr log-rptr -              ( adr len avail )
+   min  tuck                        ( actual adr actual )
+   log-rptr log-buf +  -rot move    ( actual )
+   dup log-rptr + to log-rptr       ( actual )
+;
+: load  ( adr -- len )
+   log-buf  swap  log-wptr move
+   log-wptr
+;
+
+finish-device
+device-end
+
+0 value log-ih
+: start-logging  ( -- )
+   log-ih 0=  if
+      " /log" open-dev to log-ih
+      log-ih add-output
+   then
+;
+: stop-logging  ( -- )
+   log-ih   if
+      log-ih remove-output
+      log-ih close-dev
+      0 to log-ih
+   then
+;
+: save-log  ( "filename" -- )
+   " /log" safe-parse-word $copy1
+;
+: no-esc-list  ( adr len -- )
+   bounds  ?do    ( -- )
+      i c@  bl >=  i c@ h# 9b <>  and  if
+         i c@ emit
+      else
+         i c@  case
+            newline of  newline emit  exit? ?leave  endof
+            carret  of  carret  emit  endof
+            tab     of  tab emit  endof
+\           bs      of  bs  emit  endof
+            h# 9b   of  ." ^["   endof
+            ( default )
+            ." ^"  dup h# 1f and   [char] @ or  emit
+         endcase
+      then
+   loop
+;
+: show-log-no-ctl  ( -- )
+   log-ih remove-output
+   ." <OFW_Console_Log>" cr
+   ['] no-esc-list ['] list ['] more (patch
+   " more /log" evaluate
+   ['] list ['] no-esc-list ['] more (patch
+   ." </OFW_Console_Log>" cr
+   log-ih add-output
+;
+
+: show-log  ( -- )
+   log-ih remove-output
+   ." <OFW_Console_Log>" cr
+   " more /log" evaluate
+   ." </OFW_Console_Log>" cr
+   log-ih add-output
+;
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2009 FirmWorks
+\ 
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\ 
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\ 
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END




More information about the openfirmware mailing list