mirror of https://github.com/xqemu/xqemu.git
Add -option-rom option to allow loading of PCI option ROMs, by Anthony Liguori.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2292 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
a0ae05aa63
commit
9ae0255520
19
hw/pc.c
19
hw/pc.c
|
@ -451,7 +451,7 @@ static void pc_init1(int ram_size, int vga_ram_size, int boot_device,
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
int ret, linux_boot, initrd_size, i;
|
int ret, linux_boot, initrd_size, i;
|
||||||
unsigned long bios_offset, vga_bios_offset;
|
unsigned long bios_offset, vga_bios_offset, option_rom_offset;
|
||||||
int bios_size, isa_bios_size;
|
int bios_size, isa_bios_size;
|
||||||
PCIBus *pci_bus;
|
PCIBus *pci_bus;
|
||||||
int piix3_devfn = -1;
|
int piix3_devfn = -1;
|
||||||
|
@ -518,6 +518,23 @@ static void pc_init1(int ram_size, int vga_ram_size, int boot_device,
|
||||||
cpu_register_physical_memory(0x100000 - isa_bios_size,
|
cpu_register_physical_memory(0x100000 - isa_bios_size,
|
||||||
isa_bios_size,
|
isa_bios_size,
|
||||||
(bios_offset + bios_size - isa_bios_size) | IO_MEM_ROM);
|
(bios_offset + bios_size - isa_bios_size) | IO_MEM_ROM);
|
||||||
|
|
||||||
|
option_rom_offset = 0;
|
||||||
|
for (i = 0; i < nb_option_roms; i++) {
|
||||||
|
int offset = bios_offset + bios_size + option_rom_offset;
|
||||||
|
int size;
|
||||||
|
|
||||||
|
size = load_image(option_rom[i], phys_ram_base + offset);
|
||||||
|
if ((size + option_rom_offset) > 0x10000) {
|
||||||
|
fprintf(stderr, "Too many option ROMS\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
cpu_register_physical_memory(0xd0000 + option_rom_offset,
|
||||||
|
size, offset | IO_MEM_ROM);
|
||||||
|
option_rom_offset += size + 2047;
|
||||||
|
option_rom_offset -= (option_rom_offset % 2048);
|
||||||
|
}
|
||||||
|
|
||||||
/* map all the bios at the top of memory */
|
/* map all the bios at the top of memory */
|
||||||
cpu_register_physical_memory((uint32_t)(-bios_size),
|
cpu_register_physical_memory((uint32_t)(-bios_size),
|
||||||
bios_size, bios_offset | IO_MEM_ROM);
|
bios_size, bios_offset | IO_MEM_ROM);
|
||||||
|
|
|
@ -326,6 +326,10 @@ Use it when installing Windows 2000 to avoid a disk full bug. After
|
||||||
Windows 2000 is installed, you no longer need this option (this option
|
Windows 2000 is installed, you no longer need this option (this option
|
||||||
slows down the IDE transfers).
|
slows down the IDE transfers).
|
||||||
|
|
||||||
|
@item -option-rom file
|
||||||
|
Load the contents of file as an option ROM. This option is useful to load
|
||||||
|
things like EtherBoot.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
USB options:
|
USB options:
|
||||||
|
|
22
vl.c
22
vl.c
|
@ -174,6 +174,8 @@ int acpi_enabled = 1;
|
||||||
int fd_bootchk = 1;
|
int fd_bootchk = 1;
|
||||||
int no_reboot = 0;
|
int no_reboot = 0;
|
||||||
int daemonize = 0;
|
int daemonize = 0;
|
||||||
|
const char *option_rom[MAX_OPTION_ROMS];
|
||||||
|
int nb_option_roms;
|
||||||
|
|
||||||
/***********************************************************/
|
/***********************************************************/
|
||||||
/* x86 ISA bus support */
|
/* x86 ISA bus support */
|
||||||
|
@ -6336,6 +6338,7 @@ void help(void)
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
"-daemonize daemonize QEMU after initializing\n"
|
"-daemonize daemonize QEMU after initializing\n"
|
||||||
#endif
|
#endif
|
||||||
|
"-option-rom rom load a file, rom, into the option ROM space\n"
|
||||||
"\n"
|
"\n"
|
||||||
"During emulation, the following keys are useful:\n"
|
"During emulation, the following keys are useful:\n"
|
||||||
"ctrl-alt-f toggle full screen\n"
|
"ctrl-alt-f toggle full screen\n"
|
||||||
|
@ -6418,6 +6421,7 @@ enum {
|
||||||
QEMU_OPTION_no_reboot,
|
QEMU_OPTION_no_reboot,
|
||||||
QEMU_OPTION_daemonize,
|
QEMU_OPTION_daemonize,
|
||||||
QEMU_OPTION_disk,
|
QEMU_OPTION_disk,
|
||||||
|
QEMU_OPTION_option_rom,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct QEMUOption {
|
typedef struct QEMUOption {
|
||||||
|
@ -6500,6 +6504,7 @@ const QEMUOption qemu_options[] = {
|
||||||
{ "no-acpi", 0, QEMU_OPTION_no_acpi },
|
{ "no-acpi", 0, QEMU_OPTION_no_acpi },
|
||||||
{ "no-reboot", 0, QEMU_OPTION_no_reboot },
|
{ "no-reboot", 0, QEMU_OPTION_no_reboot },
|
||||||
{ "daemonize", 0, QEMU_OPTION_daemonize },
|
{ "daemonize", 0, QEMU_OPTION_daemonize },
|
||||||
|
{ "option-rom", HAS_ARG, QEMU_OPTION_option_rom },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -7276,6 +7281,14 @@ int main(int argc, char **argv)
|
||||||
case QEMU_OPTION_daemonize:
|
case QEMU_OPTION_daemonize:
|
||||||
daemonize = 1;
|
daemonize = 1;
|
||||||
break;
|
break;
|
||||||
|
case QEMU_OPTION_option_rom:
|
||||||
|
if (nb_option_roms >= MAX_OPTION_ROMS) {
|
||||||
|
fprintf(stderr, "Too many option ROMs\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
option_rom[nb_option_roms] = optarg;
|
||||||
|
nb_option_roms++;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7368,6 +7381,15 @@ int main(int argc, char **argv)
|
||||||
/* init the memory */
|
/* init the memory */
|
||||||
phys_ram_size = ram_size + vga_ram_size + bios_size;
|
phys_ram_size = ram_size + vga_ram_size + bios_size;
|
||||||
|
|
||||||
|
for (i = 0; i < nb_option_roms; i++) {
|
||||||
|
int ret = get_image_size(option_rom[i]);
|
||||||
|
if (ret == -1) {
|
||||||
|
fprintf(stderr, "Could not load option rom '%s'\n", option_rom[i]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
phys_ram_size += ret;
|
||||||
|
}
|
||||||
|
|
||||||
phys_ram_base = qemu_vmalloc(phys_ram_size);
|
phys_ram_base = qemu_vmalloc(phys_ram_size);
|
||||||
if (!phys_ram_base) {
|
if (!phys_ram_base) {
|
||||||
fprintf(stderr, "Could not allocate physical memory\n");
|
fprintf(stderr, "Could not allocate physical memory\n");
|
||||||
|
|
4
vl.h
4
vl.h
|
@ -154,6 +154,10 @@ extern int usb_enabled;
|
||||||
extern int smp_cpus;
|
extern int smp_cpus;
|
||||||
extern int no_quit;
|
extern int no_quit;
|
||||||
|
|
||||||
|
#define MAX_OPTION_ROMS 16
|
||||||
|
extern const char *option_rom[MAX_OPTION_ROMS];
|
||||||
|
extern int nb_option_roms;
|
||||||
|
|
||||||
/* XXX: make it dynamic */
|
/* XXX: make it dynamic */
|
||||||
#if defined (TARGET_PPC) || defined (TARGET_SPARC64)
|
#if defined (TARGET_PPC) || defined (TARGET_SPARC64)
|
||||||
#define BIOS_SIZE ((512 + 32) * 1024)
|
#define BIOS_SIZE ((512 + 32) * 1024)
|
||||||
|
|
Loading…
Reference in New Issue