Alter (encode-bootpath) so that it processes a string on the stack rather than using the parse buffer directly. This enables us

to ensure that execution of any platform-specific boot code can occur before the main "load & go" boot, even if they invoke 
Forth commands that alter the parse buffer.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@854 f158a5a8-5612-0410-a976-696ce0be7e32
This commit is contained in:
Mark Cave-Ayland
2010-08-21 10:21:01 +00:00
committed by Mark Cave-Ayland
parent 736d3849ea
commit 8943d89e26
2 changed files with 24 additions and 13 deletions

View File

@@ -1,10 +1,22 @@
\ 7.4.3.5 User commands for booting
: boot ( "{param-text}<cr>" -- )
(encode-bootpath) \ Setup bootpath/bootargs
s" platform-boot" $find if
execute \ Execute platform-specific boot code
linefeed parse
\ Copy NVRAM parameters from boot-file to bootargs in case any parameters have
\ been specified for the platform-specific boot code
s" boot-file" $find drop execute
encode-string
" /chosen" (find-dev) if
" bootargs" rot (property)
then
\ Execute platform-specific boot code, e.g. kernel
s" platform-boot" $find if
execute
then
(encode-bootpath) \ Setup bootpath/bootargs
$load \ load and go
go
;

View File

@@ -55,16 +55,19 @@ variable file-size
then
;
: (encode-bootpath) ( "{params}<cr>" -- bootpath-str bootpath-len)
\ Parse the current input buffer of a load/boot command and set both
: (encode-bootpath) ( param-str param-len -- bootpath-str bootpath-len)
\ Parse the <param> string from a load/boot command and set both
\ the bootargs and bootpath properties as appropriate.
cr
\ bootpath
bl parse dup 0= if
bl left-split \ argstr argstr-len bootdevstr bootdevstr-len
dup 0= if
\ None specified. As per IEEE-1275 specification, search through each value
\ in boot-device and use the first that returns a valid ihandle on open.
2drop \ drop the empty device string as we're going to use our own
s" boot-device" $find drop execute
bl left-split
begin
@@ -80,8 +83,6 @@ variable file-size
then
repeat
2drop
else
0 0 2swap \ Fake (empty) parse string
then
\ Set the bootpath property
@@ -91,7 +92,7 @@ variable file-size
then
\ bootargs
linefeed parse dup 0= if
2swap dup 0= if
\ None specified, use default from nvram
2drop s" boot-file" $find drop execute
then
@@ -101,9 +102,6 @@ variable file-size
" /chosen" (find-dev) if
" bootargs" rot (property)
then
\ Remove the remaining string
2swap 2drop
;
: $load ( devstr len )
@@ -121,6 +119,7 @@ variable file-size
;
: load ( "{params}<cr>" -- )
linefeed parse
(encode-bootpath)
$load
;