diff options
Diffstat (limited to 'slof/fs/loaders.fs')
-rw-r--r-- | slof/fs/loaders.fs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/slof/fs/loaders.fs b/slof/fs/loaders.fs new file mode 100644 index 0000000..b799692 --- /dev/null +++ b/slof/fs/loaders.fs @@ -0,0 +1,71 @@ +\ ***************************************************************************** +\ * Copyright (c) 2004, 2007 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 +\ ****************************************************************************/ + + +: start-elf ( arg len entry -- ) + msr@ 7fffffffffffffff and 2000 or ciregs >srr1 ! call-client ; + +: start-elf64 ( arg len entry -- ) + msr@ 2000 or ciregs >srr1 ! + dup 8 + @ ciregs >r2 ! @ call-client ; \ entry point is pointer to .opd + +10000000 VALUE LOAD-BASE +2000000 VALUE FLASH-LOAD-BASE + +: set-bootpath s" disk" find-alias + dup IF ELSE drop s" boot-device" evaluate find-alias THEN + dup IF strdup ELSE 0 THEN + encode-string s" bootpath" set-chosen ; + +: set-netbootpath s" net" find-alias + ?dup IF strdup encode-string s" bootpath" set-chosen THEN ; + +: set-bootargs skipws 0 parse dup 0= IF 2drop s" boot-file" + evaluate THEN encode-string s" bootargs" set-chosen ; + +: .(client-exec) ( arg len -- rc ) + s" snk" romfs-lookup 0<> IF load-elf-file drop start-elf64 client-data + ELSE 2drop false THEN ; +' .(client-exec) to (client-exec) + +: .client-exec ( arg len -- rc ) set-bootargs (client-exec) ; +' .client-exec to client-exec + +: netflash ( -- rc ) s" netflash 2000000 " (parse-line) $cat set-netbootpath + client-exec ; + +: netsave ( "addr len {filename}[,params]" -- rc ) + (parse-line) dup 0> IF + s" netsave " 2swap $cat set-netbootpath client-exec + ELSE + cr + ." Usage: netsave addr len [bootp|dhcp,]filename[,siaddr][,ciaddr][,giaddr][,bootp-retries][,tftp-retries][,use_ci]" + cr 2drop + THEN +; + +: ping ( "{device-path:[device-args,]server-ip,[client-ip],[gateway-ip][,timeout]}" -- ) + my-self >r current-node @ >r \ Save my-self + (parse-line) open-dev dup IF + dup to my-self dup ihandle>phandle set-node + s" ping" rot ['] $call-method CATCH IF + cr + ." Not a pingable device" + cr 3drop + THEN + ELSE + cr + ." Usage: ping device-path:[device-args,]server-ip,[client-ip],[gateway-ip][,timeout]" + cr drop + THEN + r> set-node r> to my-self \ Restore my-self +; |