182 lines
4.6 KiB
Forth
182 lines
4.6 KiB
Forth
\ *****************************************************************************
|
|
\ * Copyright (c) 2004, 2014 IBM Corporation
|
|
\ * All rights reserved.
|
|
\ * This program and the accompanying materials
|
|
\ * are made available under the terms of the BSD License
|
|
\ * which accompanies this distribution, and is available at
|
|
\ * http://www.opensource.org/licenses/bsd-license.php
|
|
\ *
|
|
\ * Contributors:
|
|
\ * IBM Corporation - initial implementation
|
|
\ ****************************************************************************/
|
|
|
|
51 CONSTANT nvram-partition-type-cpulog
|
|
\ types 53-55 are omitted because they have been used for
|
|
\ storing binary tables in the past
|
|
60 CONSTANT nvram-partition-type-sas
|
|
61 CONSTANT nvram-partition-type-sms
|
|
6e CONSTANT nvram-partition-type-debug
|
|
6f CONSTANT nvram-partition-type-history
|
|
70 CONSTANT nvram-partition-type-common
|
|
7f CONSTANT nvram-partition-type-freespace
|
|
a0 CONSTANT nvram-partition-type-linux
|
|
|
|
: rztype ( str len -- ) \ stop at zero byte, read with nvram-c@
|
|
0 DO
|
|
dup i + nvram-c@ ?dup IF ( str char )
|
|
emit
|
|
ELSE ( str )
|
|
drop UNLOOP EXIT
|
|
THEN
|
|
LOOP
|
|
;
|
|
|
|
create tmpStr 500 allot
|
|
: rzcount ( zstr -- str len )
|
|
dup tmpStr >r BEGIN
|
|
dup nvram-c@ dup r> dup 1+ >r c!
|
|
WHILE
|
|
char+
|
|
REPEAT
|
|
r> drop over - swap drop tmpStr swap
|
|
;
|
|
|
|
: calc-header-cksum ( offset -- cksum )
|
|
dup nvram-c@
|
|
10 2 DO
|
|
over I + nvram-c@ +
|
|
LOOP
|
|
wbsplit + nip
|
|
;
|
|
|
|
: bad-header? ( offset -- flag )
|
|
dup 2+ nvram-w@ ( offset length )
|
|
0= IF ( offset )
|
|
drop true EXIT ( )
|
|
THEN
|
|
dup calc-header-cksum ( offset checksum' )
|
|
swap 1+ nvram-c@ ( checksum ' checksum )
|
|
<> ( flag )
|
|
;
|
|
|
|
: .header ( offset -- )
|
|
cr ( offset )
|
|
dup bad-header? IF ( offset )
|
|
." BAD HEADER -- trying to print it anyway" cr
|
|
THEN
|
|
space ( offset )
|
|
\ print type
|
|
dup nvram-c@ 2 0.r ( offset )
|
|
space space ( offset )
|
|
\ print length
|
|
dup 2+ nvram-w@ 10 * 5 .r ( offset )
|
|
space space ( offset )
|
|
\ print name
|
|
4 + 0c rztype ( )
|
|
;
|
|
|
|
: .headers ( -- )
|
|
cr cr ." Type Size Name"
|
|
cr ." ========================"
|
|
0 BEGIN ( offset )
|
|
dup nvram-c@ ( offset type )
|
|
WHILE
|
|
dup .header ( offset )
|
|
dup 2+ nvram-w@ 10 * + ( offset offset' )
|
|
dup nvram-size < IF ( offset )
|
|
ELSE
|
|
drop EXIT ( )
|
|
THEN
|
|
REPEAT
|
|
drop ( )
|
|
cr cr
|
|
;
|
|
|
|
: reset-nvram ( -- )
|
|
internal-reset-nvram
|
|
;
|
|
|
|
: dump-partition ['] nvram-c@ 1 (dump) ;
|
|
|
|
: type-no-zero ( addr len -- )
|
|
0 DO
|
|
dup I + dup nvram-c@ 0= IF drop ELSE nvram-c@ emit THEN
|
|
LOOP
|
|
drop
|
|
;
|
|
|
|
: type-no-zero-part ( from-str cnt-str addr len )
|
|
0 DO
|
|
dup i + dup nvram-c@ 0= IF
|
|
drop
|
|
ELSE
|
|
( from-str cnt-str addr addr+i )
|
|
( from-str==0 AND cnt-str > 0 )
|
|
3 pick 0= 3 pick 0 > AND IF
|
|
dup 1 type-no-zero
|
|
THEN
|
|
|
|
nvram-c@ a = IF
|
|
2 pick 0= IF
|
|
over 1- 0 max
|
|
rot drop swap
|
|
THEN
|
|
2 pick 1- 0 max
|
|
3 roll drop rot rot
|
|
( from-str-- cnt-str-- addr addr+i )
|
|
THEN
|
|
THEN
|
|
LOOP
|
|
drop
|
|
;
|
|
|
|
: (dmesg-prepare) ( base-addr -- base-addr' addr len act-off )
|
|
10 - \ go back to header
|
|
dup 14 + nvram-l@ dup >r
|
|
( base-addr act-off ) ( R: act-off )
|
|
over over over + swap 10 + nvram-w@ + >r
|
|
( base-addr act-off ) ( R: act-off nvram-act-addr )
|
|
over 2 + nvram-w@ 10 * swap - over swap
|
|
( base-addr base-addr start-size ) ( R: act-off nvram-act-addr )
|
|
r> swap rot 10 + nvram-w@ - r>
|
|
;
|
|
|
|
: .dmesg ( base-addr -- )
|
|
(dmesg-prepare) >r
|
|
( base-addr addr len )
|
|
cr type-no-zero
|
|
( base-addr ) ( R: act-off )
|
|
dup 10 + nvram-w@ + r> type-no-zero
|
|
;
|
|
|
|
: .dmesg-part ( from-str cnt-str base-addr -- )
|
|
(dmesg-prepare) >r
|
|
( from-str cnt-str base-addr addr len )
|
|
>r >r -rot r> r>
|
|
( base-addr from-str cnt-str addr len )
|
|
cr type-no-zero-part rot
|
|
( base-addr ) ( R: act-off )
|
|
dup 10 + nvram-w@ + r> type-no-zero-part
|
|
;
|
|
|
|
: dmesg-part ( from-str cnt-str -- left-from-str left-cnt-str )
|
|
2dup
|
|
s" ibm,CPU0log" get-named-nvram-partition IF
|
|
2drop EXIT
|
|
THEN
|
|
drop .dmesg-part nip nip
|
|
;
|
|
|
|
: dmesg2 ( -- )
|
|
s" ibm,CPU1log" get-named-nvram-partition IF
|
|
." No log partition." cr EXIT
|
|
THEN
|
|
drop .dmesg
|
|
;
|
|
|
|
: dmesg ( -- )
|
|
s" ibm,CPU0log" get-named-nvram-partition IF
|
|
." No log partition." cr EXIT
|
|
THEN
|
|
drop .dmesg
|
|
;
|