symbian-qemu-0.9.1-12/qemu-symbian-svp/hw/dummy_ppc.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 /*
       
     2  * Dummy board with just RAM and CPU for use as an ISS.
       
     3  *
       
     4  * Copyright (c) 2007 CodeSourcery.
       
     5  *
       
     6  * This code is licenced under the GPL
       
     7  */
       
     8 
       
     9 #include "hw.h"
       
    10 #include "sysemu.h"
       
    11 #include "boards.h"
       
    12 #include "ppc.h"
       
    13 
       
    14 /* Board init.  */
       
    15 
       
    16 static void dummy_ppc_init(ram_addr_t ram_size, int vga_ram_size,
       
    17                      const char *boot_device, DisplayState *ds,
       
    18                      const char *kernel_filename, const char *kernel_cmdline,
       
    19                      const char *initrd_filename, const char *cpu_model)
       
    20 {
       
    21     CPUState *env;
       
    22     int kernel_size;
       
    23     uint64_t elf_entry;
       
    24     target_ulong entry;
       
    25 
       
    26     if (!cpu_model)
       
    27         cpu_model = "default";
       
    28     env = cpu_init(cpu_model);
       
    29     if (!env) {
       
    30         fprintf(stderr, "Unable to find ppc CPU definition\n");
       
    31         exit(1);
       
    32     }
       
    33 
       
    34     cpu_ppc_tb_init(env, 100UL * 1000UL * 1000UL);
       
    35     /* RAM at address zero */
       
    36     cpu_register_physical_memory(0x10000000, ram_size,
       
    37         qemu_ram_alloc(ram_size) | IO_MEM_RAM);
       
    38 
       
    39     /* Load kernel.  */
       
    40     if (kernel_filename) {
       
    41         kernel_size = load_elf(kernel_filename, 0, &elf_entry, NULL, NULL);
       
    42         entry = elf_entry;
       
    43         if (kernel_size < 0) {
       
    44             kernel_size = load_uimage(kernel_filename, &entry, NULL, NULL);
       
    45         }
       
    46         if (kernel_size < 0) {
       
    47             kernel_size = load_image(kernel_filename, phys_ram_base);
       
    48             entry = 0;
       
    49         }
       
    50         if (kernel_size < 0) {
       
    51             fprintf(stderr, "qemu: could not load kernel '%s'\n",
       
    52                     kernel_filename);
       
    53             exit(1);
       
    54         }
       
    55     } else {
       
    56         entry = 0;
       
    57     }
       
    58     env->nip = entry;
       
    59     if (semihosting_enabled) {
       
    60         /* Setup initial stack.  */
       
    61         target_ulong *p;
       
    62         p = (target_ulong *)(phys_ram_base + ram_size);
       
    63         *(--p) = 0;
       
    64         *(--p) = 0;
       
    65         env->gpr[1] = 0x10000000 + ram_size - 2 * sizeof(target_ulong);
       
    66         /* Enable FPU.  */
       
    67         env->msr |= (1 << MSR_FP);
       
    68     }
       
    69 }
       
    70 
       
    71 QEMUMachine dummy_ppc_machine = {
       
    72     .name = "dummy",
       
    73     .desc = "Dummy board",
       
    74     .init = dummy_ppc_init,
       
    75     .max_cpus = 1
       
    76 };