mirror of
https://gitlab.com/qemu-project/openbios.git
synced 2024-02-13 08:34:06 +08:00
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:
committed by
Mark Cave-Ayland
parent
736d3849ea
commit
8943d89e26
@@ -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
|
||||
;
|
||||
|
||||
@@ -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
|
||||
;
|
||||
|
||||
Reference in New Issue
Block a user