\ ***************************************************************************** \ * Copyright (c) 2004, 2011 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 \ ****************************************************************************/ \ The master file. Everything else is included into here. hex ' ll-cr to cr #include "header.fs" #include "hvterm.fs" #include "base.fs" \ Set default load-base to 0x4000 4000 to default-load-base \ Little-endian accesses. Also known as `wrong-endian'. #include : #join ( lo hi #bits -- x ) lshift or ; : #split ( x #bits -- lo hi ) 2dup rshift dup >r swap lshift xor r> ; : blink ; : reset-dual-emit ; : console-clean-fifo ; : bootmsg-nvupdate ; : asm-cout 2drop drop ; #include "logging.fs" : log-string 2drop ; #include "bootmsg.fs" 000 cp #include "exception.fs" : mm-log-warning 2drop ; : write-mm-log ( data length type -- status ) 3drop 0 ; 100 cp \ Input line editing. #include "accept.fs" 120 cp #include "dump.fs" cistack ciregs >r1 ! \ kernel wants a stack :-) 140 cp #include "romfs.fs" 200 cp #include 201 cp #include : .banner .slof-logo .banner ; 220 cp DEFER find-boot-sector ( -- ) 240 cp \ Timebase frequency, in Hz. Start with a good default \ Use device-tree later to fix it up d# 512000000 VALUE tb-frequency \ default value - needed for "ms" to work -1 VALUE cpu-frequency #include "helper.fs" 260 cp #include 270 cp #include 2e0 cp #include 300 cp #include 320 cp #include 340 cp #include "fdt.fs" 360 cp #include 370 cp \ Grab rtas from qemu #include "rtas.fs" 390 cp #include "virtio.fs" 3f0 cp #include "tree.fs" 800 cp #include "nvram.fs" 880 cp #include "envvar.fs" check-for-nvramrc 890 cp #include "qemu-bootlist.fs" 8a0 cp \ The client interface. #include "client.fs" \ ELF binary file format. #include "elf.fs" #include 8a8 cp : enable-framebuffer-output ( -- ) \ enable output on framebuffer s" screen" find-alias ?dup IF \ we need to open/close the screen device once \ before "ticking" display-emit to emit open-dev close-node s" display-emit" $find IF to emit ELSE 2drop THEN THEN ; enable-framebuffer-output 8b0 cp \ Scan USB devices usb-scan 8c0 cp \ Claim remaining memory that is used by firmware: romfs-base 400000 0 ' claim CATCH IF ." claim failed!" cr 2drop THEN drop 8d0 cp : set-default-console s" linux,stdout-path" get-chosen IF decode-string ." Using default console: " 2dup type cr io 2drop ELSE ." No console specified " " screen" find-alias dup IF nip THEN " keyboard" find-alias dup IF nip THEN AND IF ." using screen & keyboard" cr " screen" output " keyboard" input ELSE " hvterm" find-alias IF drop ." using hvterm" cr " hvterm" io ELSE ." and no default found" cr THEN THEN THEN ; set-default-console 8e0 cp \ Check if we are booting a kernel passed by qemu, in which case \ we skip initializing some devices 0 VALUE direct-ram-boot-base 0 VALUE direct-ram-boot-size CREATE boot-opd 10 ALLOT : (boot-ram) direct-ram-boot-size 0<> IF ." Booting from memory..." cr direct-ram-boot-base boot-opd ! 0 boot-opd 8 + ! s" boot-opd to go-entry" evaluate s" true state-valid ! " evaluate s" disable-watchdog go-64" evaluate THEN ; 8e8 cp : check-boot-from-ram s" qemu,boot-kernel" get-chosen IF decode-int -rot decode-int -rot ( n1 n2 p s ) decode-int -rot decode-int -rot ( n1 n2 n3 n4 p s ) 2drop swap 20 << or to direct-ram-boot-size swap 20 << or to direct-ram-boot-base ." Detected RAM kernel at " direct-ram-boot-base . ." (" direct-ram-boot-size . ." bytes) " \ Override the boot-command word without touching the \ nvram environment s" boot-command" $create " (boot-ram)" env-string THEN ; check-boot-from-ram 8ff cp #include ." " \ Clear last checkpoint #include cr .( Welcome to Open Firmware) cr #include "copyright-oss.fs" cr cr \ this CATCH is to ensure the code bellow always executes: boot may ABORT! ' start-it CATCH drop cr ." Ready!"