|
From: <bob...@us...> - 2007-07-16 13:08:26
|
Revision: 1161
http://svn.sourceforge.net/hackndev/?rev=1161&view=rev
Author: bobofdoom
Date: 2007-07-16 06:08:24 -0700 (Mon, 16 Jul 2007)
Log Message:
-----------
QEMU: Started cleanup of machine code by moving lots of stuff into a common init function.
Modified Paths:
--------------
qemu/trunk/hw/palm.c
Modified: qemu/trunk/hw/palm.c
===================================================================
--- qemu/trunk/hw/palm.c 2007-07-16 11:51:01 UTC (rev 1160)
+++ qemu/trunk/hw/palm.c 2007-07-16 13:08:24 UTC (rev 1161)
@@ -922,31 +922,35 @@
/* Board init. */
-static void ld_init(int ram_size, int vga_ram_size, int boot_device,
- DisplayState *ds, const char **fd_filename, int snapshot,
- const char *kernel_filename, const char *kernel_cmdline,
- const char *initrd_filename)
+static struct pxa2xx_state_s *palm_common_init(int mach_no, DisplayState *ds,
+ const char *cpu_model, int total_mem_size, int ram_size,
+ int rom_size, const char *kernel_filename,
+ const char *kernel_cmdline, const char *initrd_filename)
{
- uint32_t ld_ram = 0x02000000;
- uint32_t ld_rom = 0x00080000;
- uint32_t ld_ram_int = 0x00040000;
- struct pxa2xx_state_s *cpu;
+ struct pxa2xx_state_s *cpu;
+ int ram_onchip_size;
char *rom_file = getenv("QEMU_ROM");
- cpu = pxa270_init(ram_size, ds, "pxa270-c0");
+ if (!strncmp("pxa270", cpu_model, 6)) {
+ cpu = pxa270_init(ram_size, ds, "pxa270-c0");
+ ram_onchip_size = 0x40000;
+ } else {
+ cpu = pxa255_init(ram_size, ds);
+ ram_onchip_size = 0;
+ }
- /* Setup memory */
- if (ram_size < ld_ram + ld_rom + ld_ram_int) {
+ if (total_mem_size < ram_size + rom_size + ram_onchip_size) {
fprintf(stderr, "This platform requires %i bytes of memory\n",
- ld_ram + ld_rom + ld_ram_int);
- exit(1);
+ ram_size + rom_size + ram_onchip_size);
}
- cpu_register_physical_memory(PXA2XX_SDRAM_BASE, ld_ram, IO_MEM_RAM);
- cpu_register_physical_memory(0, ld_rom, ld_ram | IO_MEM_ROM);
+ /* Setup memory */
+ cpu_register_physical_memory(PXA2XX_SDRAM_BASE, ram_size, IO_MEM_RAM);
+ cpu_register_physical_memory(0, rom_size, ram_size | IO_MEM_ROM);
+ if (ram_onchip_size)
+ cpu_register_physical_memory(0x5c000000, ram_onchip_size,
+ (rom_size + ram_size) | IO_MEM_ROM);
- cpu_register_physical_memory(0x5c000000, 0x40000, (ld_ram + ld_rom) | IO_MEM_RAM);
-
int iomemtype = cpu_register_io_memory(0, ac97_readfn,
ac97_writefn, NULL);
cpu_register_physical_memory(0x40500000, 0x00000fff, iomemtype);
@@ -956,68 +960,61 @@
cpu_register_physical_memory(0x41500000, 0x00000fff, iomemtype);
+ /* Setup peripherals */
ac97_init();
- /* Setup peripherals */
- ld_gpio_setup(cpu);
-
- /* A 4.0 GB microdrive is permanently sitting in CF slot 0 */
- ld_microdrive_attach(cpu);
-
/* Setup initial (reset) machine state */
cpu->env->regs[15] = PXA2XX_SDRAM_BASE;
if (rom_file)
cpu->env->regs[15] = 0;
- memset(phys_ram_base, 0, ld_ram);
- memset(phys_ram_base + ld_ram, 0, ld_rom);
+ memset(phys_ram_base, 0, ram_size);
+ memset(phys_ram_base + ram_size, 0, rom_size);
if (rom_file)
- load_image(rom_file, phys_ram_base + ld_ram);
-
- arm_load_kernel(cpu->env, ld_ram, kernel_filename, kernel_cmdline,
- initrd_filename, 835, PXA2XX_SDRAM_BASE);
+ load_image(rom_file, phys_ram_base + ram_size);
+ else
+ arm_load_kernel(cpu->env, ram_size, kernel_filename, kernel_cmdline,
+ initrd_filename, mach_no, PXA2XX_SDRAM_BASE);
+ return cpu;
}
-static void t650_init(int ram_size, int vga_ram_size, int boot_device,
+
+static void ld_init(int ram_size, int vga_ram_size, int boot_device,
DisplayState *ds, const char **fd_filename, int snapshot,
const char *kernel_filename, const char *kernel_cmdline,
const char *initrd_filename)
{
- uint32_t t650_ram = 0x02000000;
- uint32_t t650_rom = 0x00000000;
- uint32_t t650_ram_int = 0x00040000;
- struct pxa2xx_state_s *cpu;
+ struct pxa2xx_state_s *cpu;
- cpu = pxa270_init(ram_size, ds, "pxa270-c0");
+ cpu = palm_common_init(835, ds, "pxa270-c0", ram_size, 0x02000000,
+ 0x00080000, kernel_filename,
+ kernel_cmdline, initrd_filename);
- /* Setup memory */
- if (ram_size < t650_ram + t650_rom + t650_ram_int) {
- fprintf(stderr, "This platform requires %i bytes of memory\n",
- t650_ram + t650_rom);
- exit(1);
- }
- cpu_register_physical_memory(PXA2XX_SDRAM_BASE, t650_ram, IO_MEM_RAM);
+ /* Setup peripherals */
+ ld_gpio_setup(cpu);
- //cpu_register_physical_memory(0, t650_rom, t650_ram | IO_MEM_ROM);
+ /* A 4.0 GB microdrive is permanently sitting in CF slot 0 */
+ ld_microdrive_attach(cpu);
- cpu_register_physical_memory(0x5c000000, 0x40000, (t650_ram + t650_rom) | IO_MEM_RAM);
+}
+
+static void t650_init(int ram_size, int vga_ram_size, int boot_device,
+ DisplayState *ds, const char **fd_filename, int snapshot,
+ const char *kernel_filename, const char *kernel_cmdline,
+ const char *initrd_filename)
+{
+ struct pxa2xx_state_s *cpu;
+
+ cpu = palm_common_init(909, ds, "pxa270-c0", ram_size, 0x02000000,
+ 0x00080000, kernel_filename, kernel_cmdline,
+ initrd_filename);
+
/* Setup peripherals */
ld_gpio_setup(cpu); // FIXME: write t650 gpio func
- /* Setup initial (reset) machine state */
- //cpu->env->regs[15] = 0;
- cpu->env->regs[15] = PXA2XX_SDRAM_BASE;
-
//mdoc_init();
-
- //memset(phys_ram_base + t650_ram, 0, t650_rom);
- //load_image("palmt650.rom", phys_ram_base + t650_ram);
-
- arm_load_kernel(cpu->env, t650_ram, kernel_filename, kernel_cmdline,
- initrd_filename, 909, PXA2XX_SDRAM_BASE);
-
}
static void t680_init(int ram_size, int vga_ram_size, int boot_device,
@@ -1025,49 +1022,13 @@
const char *kernel_filename, const char *kernel_cmdline,
const char *initrd_filename)
{
- uint32_t t680_ram = 0x02000000;
- uint32_t t680_rom = 0x02000000;
- uint32_t t680_ram_int = 0x00040000;
struct pxa2xx_state_s *cpu;
- cpu = pxa270_init(ram_size, ds, "pxa270-c5");
-
- /* Setup memory */
- if (ram_size < t680_ram + t680_rom + t680_ram_int) {
- fprintf(stderr, "This platform requires %i bytes of memory\n",
- t680_ram + t680_rom);
- exit(1);
- }
-
- cpu_register_physical_memory(PXA2XX_SDRAM_BASE, t680_ram, IO_MEM_RAM);
-
- cpu_register_physical_memory(0, t680_rom, t680_ram | IO_MEM_ROM);
-
- int iomemtype = cpu_register_io_memory(0, ac97_readfn,
- ac97_writefn, NULL);
- cpu_register_physical_memory(0x40500000, 0x00000fff, iomemtype);
-
- iomemtype = cpu_register_io_memory(0, key_readfn,
- key_writefn, cpu);
- cpu_register_physical_memory(0x41500000, 0x00000fff, iomemtype);
-
- ac97_init();
-
+ cpu = palm_common_init(1230, ds, "pxa270-c5", ram_size, 0x02000000,
+ 0x02000000, kernel_filename, kernel_cmdline,
+ initrd_filename);
/* Setup peripherals */
t680_gpio_setup(cpu);
-
- /* Setup initial (reset) machine state */
- //cpu->env->regs[15] = 0;
- cpu->env->regs[15] = PXA2XX_SDRAM_BASE;
-
- //mdoc_init();
-
- memset(phys_ram_base + t680_ram, 0, t680_rom);
- //load_image("../../BOOTROM/palmt680.rom", phys_ram_base + t680_ram);
-
- arm_load_kernel(cpu->env, t680_ram, kernel_filename, kernel_cmdline,
- initrd_filename, 909, PXA2XX_SDRAM_BASE);
-
}
static void tc_init(int ram_size, int vga_ram_size, int boot_device,
@@ -1075,46 +1036,14 @@
const char *kernel_filename, const char *kernel_cmdline,
const char *initrd_filename)
{
- uint32_t tc_ram = 0x04000000;
- uint32_t tc_rom = 0x01000000;
struct pxa2xx_state_s *cpu;
- cpu = pxa255_init(ram_size, ds);
-
- /* Setup memory */
- if (ram_size < tc_ram + tc_rom) {
- fprintf(stderr, "This platform requires %i bytes of memory\n",
- tc_ram + tc_rom);
- exit(1);
- }
- cpu_register_physical_memory(PXA2XX_SDRAM_BASE, tc_ram, IO_MEM_RAM);
-
- cpu_register_physical_memory(0, tc_rom, tc_ram | IO_MEM_ROM);
-
- int iomemtype = cpu_register_io_memory(0, ac97_readfn,
- ac97_writefn, NULL);
- cpu_register_physical_memory(0x40500000, 0x00000fff, iomemtype);
-
- iomemtype = cpu_register_io_memory(0, key_readfn,
- key_writefn, cpu);
- cpu_register_physical_memory(0x41500000, 0x00000fff, iomemtype);
-
- ac97_init();
-
+ cpu = palm_common_init(918, ds, "pxa255", ram_size, 0x04000000,
+ 0x01000000, kernel_filename, kernel_cmdline,
+ initrd_filename);
+
/* Setup peripherals */
tc_gpio_setup(cpu);
-
- /* Setup initial (reset) machine state */
- cpu->env->regs[15] = 0;
- cpu->env->regs[15] = PXA2XX_SDRAM_BASE;
-
- memset(phys_ram_base, 0, tc_ram);
- memset(phys_ram_base + tc_ram, 0, tc_rom);
- //load_image("../../BOOTROM/palmtc.rom", phys_ram_base + tc_ram);
-
- arm_load_kernel(cpu->env, tc_ram, kernel_filename, kernel_cmdline,
- initrd_filename, 918 /* THIS IS ARM_ID!! */ , PXA2XX_SDRAM_BASE);
-
}
static void z72_init(int ram_size, int vga_ram_size, int boot_device,
@@ -1122,50 +1051,14 @@
const char *kernel_filename, const char *kernel_cmdline,
const char *initrd_filename)
{
- uint32_t z72_ram = 0x02000000;
- uint32_t z72_rom = 0x01000000;
- uint32_t z72_ram_int = 0x00040000;
struct pxa2xx_state_s *cpu;
- cpu = pxa270_init(ram_size, ds, "pxa270-c0");
-
- /* Setup memory */
- if (ram_size < z72_ram + z72_rom + z72_ram_int) {
- fprintf(stderr, "This platform requires %i bytes of memory\n",
- z72_ram + z72_rom + z72_ram_int);
- exit(1);
- }
- cpu_register_physical_memory(PXA2XX_SDRAM_BASE, z72_ram, IO_MEM_RAM);
-
- cpu_register_physical_memory(0, z72_rom, z72_ram | IO_MEM_ROM);
-
- cpu_register_physical_memory(0x5c000000, 0x40000, (z72_ram + z72_rom) | IO_MEM_RAM);
-
- int iomemtype = cpu_register_io_memory(0, ac97_readfn,
- ac97_writefn, NULL);
- cpu_register_physical_memory(0x40500000, 0x00000fff, iomemtype);
-
- iomemtype = cpu_register_io_memory(0, key_readfn,
- key_writefn, cpu);
- cpu_register_physical_memory(0x41500000, 0x00000fff, iomemtype);
-
-
- ac97_init();
-
+ cpu = palm_common_init(904, ds, "pxa270-c0", ram_size, 0x02000000,
+ 0x01000000, kernel_filename, kernel_cmdline,
+ initrd_filename);
+
/* Setup peripherals */
z72_gpio_setup(cpu);
-
- /* Setup initial (reset) machine state */
-// cpu->env->regs[15] = 0;
- cpu->env->regs[15] = PXA2XX_SDRAM_BASE;
-
- memset(phys_ram_base, 0, z72_ram);
- memset(phys_ram_base + z72_ram, 0, z72_rom);
-// load_image("../../BOOTROM/palmz72.rom", phys_ram_base + z72_ram);
-
- arm_load_kernel(cpu->env, z72_ram, kernel_filename, kernel_cmdline,
- initrd_filename, 904, PXA2XX_SDRAM_BASE);
-
}
static void tx_init(int ram_size, int vga_ram_size, int boot_device,
@@ -1173,50 +1066,14 @@
const char *kernel_filename, const char *kernel_cmdline,
const char *initrd_filename)
{
- uint32_t tx_ram = 0x02000000;
- uint32_t tx_rom = 0x02000000;
- uint32_t tx_ram_int = 0x00040000;
struct pxa2xx_state_s *cpu;
- cpu = pxa270_init(ram_size, ds, "pxa270-c5");
-
- /* Setup memory */
- if (ram_size < tx_ram + tx_rom + tx_ram_int) {
- fprintf(stderr, "This platform requires %i bytes of memory\n",
- tx_ram + tx_rom + tx_ram_int);
- exit(1);
- }
- cpu_register_physical_memory(PXA2XX_SDRAM_BASE, tx_ram, IO_MEM_RAM);
-
- cpu_register_physical_memory(0, tx_rom, tx_ram | IO_MEM_ROM);
-
- cpu_register_physical_memory(0x5c000000, 0x40000, (tx_ram + tx_rom) | IO_MEM_RAM);
-
- int iomemtype = cpu_register_io_memory(0, ac97_readfn,
- ac97_writefn, NULL);
- cpu_register_physical_memory(0x40500000, 0x00000fff, iomemtype);
-
- iomemtype = cpu_register_io_memory(0, key_readfn,
- key_writefn, cpu);
- cpu_register_physical_memory(0x41500000, 0x00000fff, iomemtype);
-
-
- ac97_init();
-
+ cpu = palm_common_init(885, ds, "pxa270-c5", ram_size, 0x02000000,
+ 0x02000000, kernel_filename, kernel_cmdline,
+ initrd_filename);
+
/* Setup peripherals */
tx_gpio_setup(cpu);
-
- /* Setup initial (reset) machine state */
-// cpu->env->regs[15] = 0;
- cpu->env->regs[15] = PXA2XX_SDRAM_BASE;
-
- memset(phys_ram_base, 0, tx_ram);
- memset(phys_ram_base + tx_ram, 0, tx_rom);
-// load_image("../../BOOTROM/palmtx.rom", phys_ram_base + tx_ram);
-//
- arm_load_kernel(cpu->env, tx_ram, kernel_filename, kernel_cmdline,
- initrd_filename, 885, PXA2XX_SDRAM_BASE);
-
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|