Modify framebuffer and NGA framebuffer to read screen size from board model dtb file. Optimise memory usuage of frame buffer
Add example minigui application with hooks to profiler (which writes results to S:\). Modified NGA framebuffer to run its own dfc queue at high priority
/*
* Dummy board with just RAM and CPU for use as an ISS.
*
* Copyright (c) 2007 CodeSourcery.
*
* This code is licenced under the GPL
*/
#include "hw.h"
#include "sysemu.h"
#include "boards.h"
#include "ppc.h"
/* Board init. */
static void dummy_ppc_init(ram_addr_t ram_size, int vga_ram_size,
const char *boot_device, DisplayState *ds,
const char *kernel_filename, const char *kernel_cmdline,
const char *initrd_filename, const char *cpu_model)
{
CPUState *env;
int kernel_size;
uint64_t elf_entry;
target_ulong entry;
if (!cpu_model)
cpu_model = "default";
env = cpu_init(cpu_model);
if (!env) {
fprintf(stderr, "Unable to find ppc CPU definition\n");
exit(1);
}
cpu_ppc_tb_init(env, 100UL * 1000UL * 1000UL);
/* RAM at address zero */
cpu_register_physical_memory(0x10000000, ram_size,
qemu_ram_alloc(ram_size) | IO_MEM_RAM);
/* Load kernel. */
if (kernel_filename) {
kernel_size = load_elf(kernel_filename, 0, &elf_entry, NULL, NULL);
entry = elf_entry;
if (kernel_size < 0) {
kernel_size = load_uimage(kernel_filename, &entry, NULL, NULL);
}
if (kernel_size < 0) {
kernel_size = load_image(kernel_filename, phys_ram_base);
entry = 0;
}
if (kernel_size < 0) {
fprintf(stderr, "qemu: could not load kernel '%s'\n",
kernel_filename);
exit(1);
}
} else {
entry = 0;
}
env->nip = entry;
if (semihosting_enabled) {
/* Setup initial stack. */
target_ulong *p;
p = (target_ulong *)(phys_ram_base + ram_size);
*(--p) = 0;
*(--p) = 0;
env->gpr[1] = 0x10000000 + ram_size - 2 * sizeof(target_ulong);
/* Enable FPU. */
env->msr |= (1 << MSR_FP);
}
}
QEMUMachine dummy_ppc_machine = {
.name = "dummy",
.desc = "Dummy board",
.init = dummy_ppc_init,
.max_cpus = 1
};