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. |