Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / openbios / arch / ppc / qemu / main.c
diff --git a/qemu/roms/openbios/arch/ppc/qemu/main.c b/qemu/roms/openbios/arch/ppc/qemu/main.c
new file mode 100644 (file)
index 0000000..44b1666
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ *   Creation Date: <2002/10/02 22:24:24 samuel>
+ *   Time-stamp: <2004/03/27 01:57:55 samuel>
+ *
+ *     <main.c>
+ *
+ *
+ *
+ *   Copyright (C) 2002, 2003, 2004 Samuel Rydh (samuel@ibrium.se)
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation
+ *
+ */
+
+#include "config.h"
+#include "libopenbios/bindings.h"
+#include "libopenbios/elf_load.h"
+#include "arch/common/nvram.h"
+#include "packages/nvram.h"
+#include "libc/diskio.h"
+#include "libc/vsprintf.h"
+#include "kernel.h"
+#include "drivers/drivers.h"
+#include "libopenbios/ofmem.h"
+#define NO_QEMU_PROTOS
+#include "arch/common/fw_cfg.h"
+
+//#define DEBUG_QEMU
+
+#ifdef DEBUG_QEMU
+#define SUBSYS_DPRINTF(subsys, fmt, args...) \
+    do { printk("%s - %s: " fmt, subsys, __func__ , ##args); } while (0)
+#else
+#define SUBSYS_DPRINTF(subsys, fmt, args...) \
+    do { } while (0)
+#endif
+#define CHRP_DPRINTF(fmt, args...) SUBSYS_DPRINTF("CHRP", fmt, ##args)
+#define ELF_DPRINTF(fmt, args...) SUBSYS_DPRINTF("ELF", fmt, ##args)
+#define NEWWORLD_DPRINTF(fmt, args...) SUBSYS_DPRINTF("NEWWORLD", fmt, ##args)
+
+static void check_preloaded_kernel(void)
+{
+    unsigned long kernel_image, kernel_size;
+    unsigned long initrd_image, initrd_size;
+    const char * kernel_cmdline;
+
+    kernel_size = fw_cfg_read_i32(FW_CFG_KERNEL_SIZE);
+    if (kernel_size) {
+        kernel_image = fw_cfg_read_i32(FW_CFG_KERNEL_ADDR);
+        kernel_cmdline = (const char *)(uintptr_t) fw_cfg_read_i32(FW_CFG_KERNEL_CMDLINE);
+        initrd_image = fw_cfg_read_i32(FW_CFG_INITRD_ADDR);
+        initrd_size = fw_cfg_read_i32(FW_CFG_INITRD_SIZE);
+        printk("[ppc] Kernel already loaded (0x%8.8lx + 0x%8.8lx) "
+               "(initrd 0x%8.8lx + 0x%8.8lx)\n",
+               kernel_image, kernel_size, initrd_image, initrd_size);
+        if (kernel_cmdline) {
+               phandle_t ph;
+              printk("[ppc] Kernel command line: %s\n", kernel_cmdline);
+              ph = find_dev("/chosen");
+               set_property(ph, "bootargs", strdup(kernel_cmdline), strlen(kernel_cmdline) + 1);
+        }
+        call_elf(initrd_image, initrd_size, kernel_image);
+    }
+}
+
+/************************************************************************/
+/*     entry                                                           */
+/************************************************************************/
+
+void
+boot( void )
+{
+        uint16_t boot_device = fw_cfg_read_i16(FW_CFG_BOOT_DEVICE);
+
+       fword("update-chosen");
+       if (boot_device == 'm') {
+               check_preloaded_kernel();
+       }
+
+       if (is_apple()) {
+               update_nvram();
+       }
+}