2 * QEMU PC System Emulator
4 * Copyright (c) 2003-2004 Fabrice Bellard
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
30 #include "audio/audio.h"
36 #include "virtio-blk.h"
37 #include "virtio-balloon.h"
38 #include "virtio-console.h"
39 #include "hpet_emul.h"
40 #include "device-assignment.h"
44 /* output Bochs bios info messages */
47 #define BIOS_FILENAME "bios.bin"
48 #define VGABIOS_FILENAME "vgabios.bin"
49 #define VGABIOS_CIRRUS_FILENAME "vgabios-cirrus.bin"
50 #define EXTBOOT_FILENAME "extboot.bin"
52 #define PC_MAX_BIOS_SIZE (4 * 1024 * 1024)
54 /* Leave a chunk of memory at the top of RAM for the BIOS ACPI tables. */
55 #define ACPI_DATA_SIZE 0x10000
56 #define BIOS_CFG_IOPORT 0x510
57 #define FW_CFG_ACPI_TABLES (FW_CFG_ARCH_LOCAL + 0)
61 static fdctrl_t
*floppy_controller
;
62 static RTCState
*rtc_state
;
64 static IOAPICState
*ioapic
;
65 static PCIDevice
*i440fx_state
;
67 static void ioport80_write(void *opaque
, uint32_t addr
, uint32_t data
)
71 /* MSDOS compatibility mode FPU exception support */
72 static qemu_irq ferr_irq
;
73 /* XXX: add IGNNE support */
74 void cpu_set_ferr(CPUX86State
*s
)
76 qemu_irq_raise(ferr_irq
);
79 static void ioportF0_write(void *opaque
, uint32_t addr
, uint32_t data
)
81 qemu_irq_lower(ferr_irq
);
85 uint64_t cpu_get_tsc(CPUX86State
*env
)
87 /* Note: when using kqemu, it is more logical to return the host TSC
88 because kqemu does not trap the RDTSC instruction for
89 performance reasons */
91 if (env
->kqemu_enabled
) {
92 return cpu_get_real_ticks();
96 return cpu_get_ticks();
101 void cpu_smm_update(CPUState
*env
)
103 if (i440fx_state
&& env
== first_cpu
)
104 i440fx_set_smm(i440fx_state
, (env
->hflags
>> HF_SMM_SHIFT
) & 1);
109 int cpu_get_pic_interrupt(CPUState
*env
)
113 intno
= apic_get_interrupt(env
);
115 /* set irq request if a PIC irq is still pending */
116 /* XXX: improve that */
117 pic_update_irq(isa_pic
);
120 /* read the irq from the PIC */
121 if (!apic_accept_pic_intr(env
))
124 intno
= pic_read_irq(isa_pic
);
128 static void pic_irq_request(void *opaque
, int irq
, int level
)
130 CPUState
*env
= first_cpu
;
132 if (env
->apic_state
) {
134 if (apic_accept_pic_intr(env
))
135 apic_deliver_pic_intr(env
, level
);
140 cpu_interrupt(env
, CPU_INTERRUPT_HARD
);
142 cpu_reset_interrupt(env
, CPU_INTERRUPT_HARD
);
146 /* PC cmos mappings */
148 #define REG_EQUIPMENT_BYTE 0x14
150 static int cmos_get_fd_drive_type(int fd0
)
156 /* 1.44 Mb 3"5 drive */
160 /* 2.88 Mb 3"5 drive */
164 /* 1.2 Mb 5"5 drive */
174 static void cmos_init_hd(int type_ofs
, int info_ofs
, BlockDriverState
*hd
)
176 RTCState
*s
= rtc_state
;
177 int cylinders
, heads
, sectors
;
178 bdrv_get_geometry_hint(hd
, &cylinders
, &heads
, §ors
);
179 rtc_set_memory(s
, type_ofs
, 47);
180 rtc_set_memory(s
, info_ofs
, cylinders
);
181 rtc_set_memory(s
, info_ofs
+ 1, cylinders
>> 8);
182 rtc_set_memory(s
, info_ofs
+ 2, heads
);
183 rtc_set_memory(s
, info_ofs
+ 3, 0xff);
184 rtc_set_memory(s
, info_ofs
+ 4, 0xff);
185 rtc_set_memory(s
, info_ofs
+ 5, 0xc0 | ((heads
> 8) << 3));
186 rtc_set_memory(s
, info_ofs
+ 6, cylinders
);
187 rtc_set_memory(s
, info_ofs
+ 7, cylinders
>> 8);
188 rtc_set_memory(s
, info_ofs
+ 8, sectors
);
191 /* convert boot_device letter to something recognizable by the bios */
192 static int boot_device2nibble(char boot_device
)
194 switch(boot_device
) {
197 return 0x01; /* floppy boot */
199 return 0x02; /* hard drive boot */
201 return 0x03; /* CD-ROM boot */
203 return 0x04; /* Network boot */
208 /* copy/pasted from cmos_init, should be made a general function
209 and used there as well */
210 static int pc_boot_set(void *opaque
, const char *boot_device
)
212 Monitor
*mon
= cur_mon
;
213 #define PC_MAX_BOOT_DEVICES 3
214 RTCState
*s
= (RTCState
*)opaque
;
215 int nbds
, bds
[3] = { 0, };
218 nbds
= strlen(boot_device
);
219 if (nbds
> PC_MAX_BOOT_DEVICES
) {
220 monitor_printf(mon
, "Too many boot devices for PC\n");
223 for (i
= 0; i
< nbds
; i
++) {
224 bds
[i
] = boot_device2nibble(boot_device
[i
]);
226 monitor_printf(mon
, "Invalid boot device for PC: '%c'\n",
231 rtc_set_memory(s
, 0x3d, (bds
[1] << 4) | bds
[0]);
232 rtc_set_memory(s
, 0x38, (bds
[2] << 4));
236 /* hd_table must contain 4 block drivers */
237 static void cmos_init(ram_addr_t ram_size
, ram_addr_t above_4g_mem_size
,
238 const char *boot_device
, BlockDriverState
**hd_table
)
240 RTCState
*s
= rtc_state
;
241 int nbds
, bds
[3] = { 0, };
246 /* various important CMOS locations needed by PC/Bochs bios */
249 val
= 640; /* base memory in K */
250 rtc_set_memory(s
, 0x15, val
);
251 rtc_set_memory(s
, 0x16, val
>> 8);
253 val
= (ram_size
/ 1024) - 1024;
256 rtc_set_memory(s
, 0x17, val
);
257 rtc_set_memory(s
, 0x18, val
>> 8);
258 rtc_set_memory(s
, 0x30, val
);
259 rtc_set_memory(s
, 0x31, val
>> 8);
261 if (above_4g_mem_size
) {
262 rtc_set_memory(s
, 0x5b, (unsigned int)above_4g_mem_size
>> 16);
263 rtc_set_memory(s
, 0x5c, (unsigned int)above_4g_mem_size
>> 24);
264 rtc_set_memory(s
, 0x5d, (uint64_t)above_4g_mem_size
>> 32);
266 rtc_set_memory(s
, 0x5f, smp_cpus
- 1);
268 if (ram_size
> (16 * 1024 * 1024))
269 val
= (ram_size
/ 65536) - ((16 * 1024 * 1024) / 65536);
274 rtc_set_memory(s
, 0x34, val
);
275 rtc_set_memory(s
, 0x35, val
>> 8);
277 /* set the number of CPU */
278 rtc_set_memory(s
, 0x5f, smp_cpus
- 1);
280 /* set boot devices, and disable floppy signature check if requested */
281 #define PC_MAX_BOOT_DEVICES 3
282 nbds
= strlen(boot_device
);
283 if (nbds
> PC_MAX_BOOT_DEVICES
) {
284 fprintf(stderr
, "Too many boot devices for PC\n");
287 for (i
= 0; i
< nbds
; i
++) {
288 bds
[i
] = boot_device2nibble(boot_device
[i
]);
290 fprintf(stderr
, "Invalid boot device for PC: '%c'\n",
295 rtc_set_memory(s
, 0x3d, (bds
[1] << 4) | bds
[0]);
296 rtc_set_memory(s
, 0x38, (bds
[2] << 4) | (fd_bootchk
? 0x0 : 0x1));
300 fd0
= fdctrl_get_drive_type(floppy_controller
, 0);
301 fd1
= fdctrl_get_drive_type(floppy_controller
, 1);
303 val
= (cmos_get_fd_drive_type(fd0
) << 4) | cmos_get_fd_drive_type(fd1
);
304 rtc_set_memory(s
, 0x10, val
);
316 val
|= 0x01; /* 1 drive, ready for boot */
319 val
|= 0x41; /* 2 drives, ready for boot */
322 val
|= 0x02; /* FPU is there */
323 val
|= 0x04; /* PS/2 mouse installed */
324 rtc_set_memory(s
, REG_EQUIPMENT_BYTE
, val
);
328 rtc_set_memory(s
, 0x12, (hd_table
[0] ? 0xf0 : 0) | (hd_table
[1] ? 0x0f : 0));
330 cmos_init_hd(0x19, 0x1b, hd_table
[0]);
332 cmos_init_hd(0x1a, 0x24, hd_table
[1]);
335 for (i
= 0; i
< 4; i
++) {
337 int cylinders
, heads
, sectors
, translation
;
338 /* NOTE: bdrv_get_geometry_hint() returns the physical
339 geometry. It is always such that: 1 <= sects <= 63, 1
340 <= heads <= 16, 1 <= cylinders <= 16383. The BIOS
341 geometry can be different if a translation is done. */
342 translation
= bdrv_get_translation_hint(hd_table
[i
]);
343 if (translation
== BIOS_ATA_TRANSLATION_AUTO
) {
344 bdrv_get_geometry_hint(hd_table
[i
], &cylinders
, &heads
, §ors
);
345 if (cylinders
<= 1024 && heads
<= 16 && sectors
<= 63) {
346 /* No translation. */
349 /* LBA translation. */
355 val
|= translation
<< (i
* 2);
358 rtc_set_memory(s
, 0x39, val
);
361 void ioport_set_a20(int enable
)
363 /* XXX: send to all CPUs ? */
364 cpu_x86_set_a20(first_cpu
, enable
);
367 int ioport_get_a20(void)
369 return ((first_cpu
->a20_mask
>> 20) & 1);
372 static void ioport92_write(void *opaque
, uint32_t addr
, uint32_t val
)
374 ioport_set_a20((val
>> 1) & 1);
375 /* XXX: bit 0 is fast reset */
378 static uint32_t ioport92_read(void *opaque
, uint32_t addr
)
380 return ioport_get_a20() << 1;
383 /***********************************************************/
384 /* Bochs BIOS debug ports */
386 static void bochs_bios_write(void *opaque
, uint32_t addr
, uint32_t val
)
388 static const char shutdown_str
[8] = "Shutdown";
389 static int shutdown_index
= 0;
392 /* Bochs BIOS messages */
395 fprintf(stderr
, "BIOS panic at rombios.c, line %d\n", val
);
400 fprintf(stderr
, "%c", val
);
404 /* same as Bochs power off */
405 if (val
== shutdown_str
[shutdown_index
]) {
407 if (shutdown_index
== 8) {
409 qemu_system_shutdown_request();
416 /* LGPL'ed VGA BIOS messages */
419 fprintf(stderr
, "VGA BIOS panic, line %d\n", val
);
424 fprintf(stderr
, "%c", val
);
430 static void bochs_bios_init(void)
434 register_ioport_write(0x400, 1, 2, bochs_bios_write
, NULL
);
435 register_ioport_write(0x401, 1, 2, bochs_bios_write
, NULL
);
436 register_ioport_write(0x402, 1, 1, bochs_bios_write
, NULL
);
437 register_ioport_write(0x403, 1, 1, bochs_bios_write
, NULL
);
438 register_ioport_write(0x8900, 1, 1, bochs_bios_write
, NULL
);
440 register_ioport_write(0x501, 1, 2, bochs_bios_write
, NULL
);
441 register_ioport_write(0x502, 1, 2, bochs_bios_write
, NULL
);
442 register_ioport_write(0x500, 1, 1, bochs_bios_write
, NULL
);
443 register_ioport_write(0x503, 1, 1, bochs_bios_write
, NULL
);
445 fw_cfg
= fw_cfg_init(BIOS_CFG_IOPORT
, BIOS_CFG_IOPORT
+ 1, 0, 0);
446 fw_cfg_add_i32(fw_cfg
, FW_CFG_ID
, 1);
447 fw_cfg_add_i64(fw_cfg
, FW_CFG_RAM_SIZE
, (uint64_t)ram_size
);
448 fw_cfg_add_bytes(fw_cfg
, FW_CFG_ACPI_TABLES
, (uint8_t *)acpi_tables
,
452 /* Generate an initial boot sector which sets state and jump to
453 a specified vector */
454 static void generate_bootsect(uint8_t *option_rom
,
455 uint32_t gpr
[8], uint16_t segs
[6], uint16_t ip
)
457 uint8_t rom
[512], *p
, *reloc
;
461 memset(rom
, 0, sizeof(rom
));
464 /* Make sure we have an option rom signature */
468 /* ROM size in sectors*/
473 *p
++ = 0x50; /* push ax */
474 *p
++ = 0x1e; /* push ds */
475 *p
++ = 0x31; *p
++ = 0xc0; /* xor ax, ax */
476 *p
++ = 0x8e; *p
++ = 0xd8; /* mov ax, ds */
478 *p
++ = 0xc7; *p
++ = 0x06; /* movvw _start,0x64 */
479 *p
++ = 0x64; *p
++ = 0x00;
481 *p
++ = 0x00; *p
++ = 0x00;
483 *p
++ = 0x8c; *p
++ = 0x0e; /* mov cs,0x66 */
484 *p
++ = 0x66; *p
++ = 0x00;
486 *p
++ = 0x1f; /* pop ds */
487 *p
++ = 0x58; /* pop ax */
488 *p
++ = 0xcb; /* lret */
493 *p
++ = 0xfa; /* CLI */
494 *p
++ = 0xfc; /* CLD */
496 for (i
= 0; i
< 6; i
++) {
497 if (i
== 1) /* Skip CS */
500 *p
++ = 0xb8; /* MOV AX,imm16 */
503 *p
++ = 0x8e; /* MOV <seg>,AX */
504 *p
++ = 0xc0 + (i
<< 3);
507 for (i
= 0; i
< 8; i
++) {
508 *p
++ = 0x66; /* 32-bit operand size */
509 *p
++ = 0xb8 + i
; /* MOV <reg>,imm32 */
516 *p
++ = 0xea; /* JMP FAR */
519 *p
++ = segs
[1]; /* CS */
524 for (i
= 0; i
< (sizeof(rom
) - 1); i
++)
526 rom
[sizeof(rom
) - 1] = -sum
;
528 memcpy(option_rom
, rom
, sizeof(rom
));
531 static long get_file_size(FILE *f
)
535 /* XXX: on Unix systems, using fstat() probably makes more sense */
538 fseek(f
, 0, SEEK_END
);
540 fseek(f
, where
, SEEK_SET
);
545 static void load_linux(uint8_t *option_rom
,
546 const char *kernel_filename
,
547 const char *initrd_filename
,
548 const char *kernel_cmdline
)
554 int setup_size
, kernel_size
, initrd_size
, cmdline_size
;
556 uint8_t header
[1024];
557 target_phys_addr_t real_addr
, prot_addr
, cmdline_addr
, initrd_addr
;
560 /* Align to 16 bytes as a paranoia measure */
561 cmdline_size
= (strlen(kernel_cmdline
)+16) & ~15;
563 /* load the kernel header */
564 f
= fopen(kernel_filename
, "rb");
565 if (!f
|| !(kernel_size
= get_file_size(f
)) ||
566 fread(header
, 1, 1024, f
) != 1024) {
567 fprintf(stderr
, "qemu: could not load kernel '%s'\n",
572 /* kernel protocol version */
574 fprintf(stderr
, "header magic: %#x\n", ldl_p(header
+0x202));
576 if (ldl_p(header
+0x202) == 0x53726448)
577 protocol
= lduw_p(header
+0x206);
581 if (protocol
< 0x200 || !(header
[0x211] & 0x01)) {
584 cmdline_addr
= 0x9a000 - cmdline_size
;
586 } else if (protocol
< 0x202) {
587 /* High but ancient kernel */
589 cmdline_addr
= 0x9a000 - cmdline_size
;
590 prot_addr
= 0x100000;
592 /* High and recent kernel */
594 cmdline_addr
= 0x20000;
595 prot_addr
= 0x100000;
600 "qemu: real_addr = 0x" TARGET_FMT_plx
"\n"
601 "qemu: cmdline_addr = 0x" TARGET_FMT_plx
"\n"
602 "qemu: prot_addr = 0x" TARGET_FMT_plx
"\n",
608 /* highest address for loading the initrd */
609 if (protocol
>= 0x203)
610 initrd_max
= ldl_p(header
+0x22c);
612 initrd_max
= 0x37ffffff;
614 if (initrd_max
>= ram_size
-ACPI_DATA_SIZE
)
615 initrd_max
= ram_size
-ACPI_DATA_SIZE
-1;
617 /* kernel command line */
618 pstrcpy_targphys(cmdline_addr
, 4096, kernel_cmdline
);
620 if (protocol
>= 0x202) {
621 stl_p(header
+0x228, cmdline_addr
);
623 stw_p(header
+0x20, 0xA33F);
624 stw_p(header
+0x22, cmdline_addr
-real_addr
);
628 /* High nybble = B reserved for Qemu; low nybble is revision number.
629 If this code is substantially changed, you may want to consider
630 incrementing the revision. */
631 if (protocol
>= 0x200)
632 header
[0x210] = 0xB0;
635 if (protocol
>= 0x201) {
636 header
[0x211] |= 0x80; /* CAN_USE_HEAP */
637 stw_p(header
+0x224, cmdline_addr
-real_addr
-0x200);
641 if (initrd_filename
) {
642 if (protocol
< 0x200) {
643 fprintf(stderr
, "qemu: linux kernel too old to load a ram disk\n");
647 fi
= fopen(initrd_filename
, "rb");
649 fprintf(stderr
, "qemu: could not load initial ram disk '%s'\n",
654 initrd_size
= get_file_size(fi
);
655 initrd_addr
= (initrd_max
-initrd_size
) & ~4095;
657 fprintf(stderr
, "qemu: loading initrd (%#x bytes) at 0x" TARGET_FMT_plx
658 "\n", initrd_size
, initrd_addr
);
660 if (!fread_targphys_ok(initrd_addr
, initrd_size
, fi
)) {
661 fprintf(stderr
, "qemu: read error on initial ram disk '%s'\n",
667 stl_p(header
+0x218, initrd_addr
);
668 stl_p(header
+0x21c, initrd_size
);
671 /* store the finalized header and load the rest of the kernel */
672 cpu_physical_memory_write(real_addr
, header
, 1024);
674 setup_size
= header
[0x1f1];
678 setup_size
= (setup_size
+1)*512;
679 kernel_size
-= setup_size
; /* Size of protected-mode code */
681 if (!fread_targphys_ok(real_addr
+1024, setup_size
-1024, f
) ||
682 !fread_targphys_ok(prot_addr
, kernel_size
, f
)) {
683 fprintf(stderr
, "qemu: read error on kernel '%s'\n",
689 /* generate bootsector to set up the initial register state */
690 real_seg
= real_addr
>> 4;
691 seg
[0] = seg
[2] = seg
[3] = seg
[4] = seg
[4] = real_seg
;
692 seg
[1] = real_seg
+0x20; /* CS */
693 memset(gpr
, 0, sizeof gpr
);
694 gpr
[4] = cmdline_addr
-real_addr
-16; /* SP (-16 is paranoia) */
696 generate_bootsect(option_rom
, gpr
, seg
, 0);
699 static void main_cpu_reset(void *opaque
)
701 CPUState
*env
= opaque
;
705 static const int ide_iobase
[2] = { 0x1f0, 0x170 };
706 static const int ide_iobase2
[2] = { 0x3f6, 0x376 };
707 static const int ide_irq
[2] = { 14, 15 };
709 #define NE2000_NB_MAX 6
711 static int ne2000_io
[NE2000_NB_MAX
] = { 0x300, 0x320, 0x340, 0x360, 0x280, 0x380 };
712 static int ne2000_irq
[NE2000_NB_MAX
] = { 9, 10, 11, 3, 4, 5 };
714 static int serial_io
[MAX_SERIAL_PORTS
] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8 };
715 static int serial_irq
[MAX_SERIAL_PORTS
] = { 4, 3, 4, 3 };
717 static int parallel_io
[MAX_PARALLEL_PORTS
] = { 0x378, 0x278, 0x3bc };
718 static int parallel_irq
[MAX_PARALLEL_PORTS
] = { 7, 7, 7 };
721 static void audio_init (PCIBus
*pci_bus
, qemu_irq
*pic
)
724 int audio_enabled
= 0;
726 for (c
= soundhw
; !audio_enabled
&& c
->name
; ++c
) {
727 audio_enabled
= c
->enabled
;
735 for (c
= soundhw
; c
->name
; ++c
) {
738 c
->init
.init_isa (s
, pic
);
742 c
->init
.init_pci (pci_bus
, s
);
752 static void pc_init_ne2k_isa(NICInfo
*nd
, qemu_irq
*pic
)
754 static int nb_ne2k
= 0;
756 if (nb_ne2k
== NE2000_NB_MAX
)
758 isa_ne2000_init(ne2000_io
[nb_ne2k
], pic
[ne2000_irq
[nb_ne2k
]], nd
);
762 typedef struct rom_reset_data
{
764 target_phys_addr_t addr
;
768 static void option_rom_reset(void *_rrd
)
770 RomResetData
*rrd
= _rrd
;
772 cpu_physical_memory_write_rom(rrd
->addr
, rrd
->data
, rrd
->size
);
775 static void option_rom_setup_reset(target_phys_addr_t addr
, unsigned size
)
777 RomResetData
*rrd
= qemu_malloc(sizeof *rrd
);
779 rrd
->data
= qemu_malloc(size
);
780 cpu_physical_memory_read(addr
, rrd
->data
, size
);
783 qemu_register_reset(option_rom_reset
, rrd
);
786 CPUState
*pc_new_cpu(int cpu
, const char *cpu_model
, int pci_enabled
)
788 CPUState
*env
= cpu_init(cpu_model
);
790 fprintf(stderr
, "Unable to find x86 CPU definition\n");
796 /* XXX: enable it in all cases */
797 env
->cpuid_features
|= CPUID_APIC
;
799 qemu_register_reset(main_cpu_reset
, env
);
806 /* PC hardware initialisation */
807 static void pc_init1(ram_addr_t ram_size
, int vga_ram_size
,
808 const char *boot_device
,
809 const char *kernel_filename
, const char *kernel_cmdline
,
810 const char *initrd_filename
,
811 int pci_enabled
, const char *cpu_model
)
814 int ret
, linux_boot
, i
;
815 ram_addr_t ram_addr
, vga_ram_addr
, bios_offset
, vga_bios_offset
, option_rom_start
= 0;
816 ram_addr_t below_4g_mem_size
, above_4g_mem_size
= 0;
817 int bios_size
, isa_bios_size
, vga_bios_size
;
818 int pci_option_rom_offset
;
820 int piix3_devfn
= -1;
825 BlockDriverState
*hd
[MAX_IDE_BUS
* MAX_IDE_DEVS
];
826 BlockDriverState
*fd
[MAX_FD
];
827 int using_vga
= cirrus_vga_enabled
|| std_vga_enabled
|| vmsvga_enabled
;
829 if (ram_size
>= 0xe0000000 ) {
830 above_4g_mem_size
= ram_size
- 0xe0000000;
831 below_4g_mem_size
= 0xe0000000;
833 below_4g_mem_size
= ram_size
;
836 linux_boot
= (kernel_filename
!= NULL
);
839 if (cpu_model
== NULL
) {
841 cpu_model
= "qemu64";
843 cpu_model
= "qemu32";
847 for(i
= 0; i
< smp_cpus
; i
++) {
848 env
= pc_new_cpu(i
, cpu_model
, pci_enabled
);
854 ram_addr
= qemu_ram_alloc(0xa0000);
855 cpu_register_physical_memory(0, 0xa0000, ram_addr
);
857 /* Allocate, even though we won't register, so we don't break the
858 * phys_ram_base + PA assumption. This range includes vga (0xa0000 - 0xc0000),
859 * and some bios areas, which will be registered later
861 ram_addr
= qemu_ram_alloc(0x100000 - 0xa0000);
862 ram_addr
= qemu_ram_alloc(below_4g_mem_size
- 0x100000);
863 cpu_register_physical_memory(0x100000,
864 below_4g_mem_size
- 0x100000,
867 /* above 4giga memory allocation */
868 if (above_4g_mem_size
> 0) {
869 ram_addr
= qemu_ram_alloc(above_4g_mem_size
);
871 if (ram_addr
& (hpagesize
-1)) {
872 unsigned long aligned_addr
;
873 aligned_addr
= (ram_addr
+ hpagesize
- 1) & ~(hpagesize
-1);
874 qemu_ram_alloc(aligned_addr
- ram_addr
);
875 ram_addr
= aligned_addr
;
878 cpu_register_physical_memory(0x100000000ULL
,
883 /* allocate VGA RAM */
884 vga_ram_addr
= qemu_ram_alloc(vga_ram_size
);
887 if (bios_name
== NULL
)
888 bios_name
= BIOS_FILENAME
;
889 snprintf(buf
, sizeof(buf
), "%s/%s", bios_dir
, bios_name
);
890 bios_size
= get_image_size(buf
);
891 if (bios_size
<= 0 ||
892 (bios_size
% 65536) != 0) {
895 bios_offset
= qemu_ram_alloc(bios_size
);
896 ret
= load_image(buf
, phys_ram_base
+ bios_offset
);
897 if (ret
!= bios_size
) {
899 fprintf(stderr
, "qemu: could not load PC BIOS '%s'\n", buf
);
905 if (cirrus_vga_enabled
) {
906 snprintf(buf
, sizeof(buf
), "%s/%s", bios_dir
, VGABIOS_CIRRUS_FILENAME
);
908 snprintf(buf
, sizeof(buf
), "%s/%s", bios_dir
, VGABIOS_FILENAME
);
910 vga_bios_size
= get_image_size(buf
);
911 if (vga_bios_size
<= 0 || vga_bios_size
> 65536)
913 vga_bios_offset
= qemu_ram_alloc(65536);
915 ret
= load_image(buf
, phys_ram_base
+ vga_bios_offset
);
916 if (ret
!= vga_bios_size
) {
918 fprintf(stderr
, "qemu: could not load VGA BIOS '%s'\n", buf
);
921 /* Round up vga bios size to the next 2k boundary */
922 vga_bios_size
= (vga_bios_size
+ 2047) & ~2047;
923 option_rom_start
= 0xc0000 + vga_bios_size
;
925 /* setup basic memory access */
926 cpu_register_physical_memory(0xc0000, vga_bios_size
,
927 vga_bios_offset
| IO_MEM_ROM
);
930 /* No point in placing option roms before this address, since bochs bios
931 * will only start looking for it at 0xc8000 */
932 if (option_rom_start
< 0xc8000)
933 option_rom_start
= 0xc8000;
936 /* map the last 128KB of the BIOS in ISA space */
937 isa_bios_size
= bios_size
;
938 if (isa_bios_size
> (128 * 1024))
939 isa_bios_size
= 128 * 1024;
940 cpu_register_physical_memory(0xd0000, (192 * 1024) - isa_bios_size
,
942 /* kvm tpr optimization needs the bios accessible for write, at least to qemu itself */
943 cpu_register_physical_memory(0x100000 - isa_bios_size
,
945 (bios_offset
+ bios_size
- isa_bios_size
) /* | IO_MEM_ROM */);
947 if (extboot_drive
!= -1) {
948 snprintf(buf
, sizeof(buf
), "%s/%s", bios_dir
, EXTBOOT_FILENAME
);
949 option_rom
[nb_option_roms
++] = buf
;
953 ram_addr_t option_rom_offset
;
956 offset
= option_rom_start
;
958 option_rom_offset
= qemu_ram_alloc(TARGET_PAGE_SIZE
);
959 load_linux(phys_ram_base
+ option_rom_offset
,
960 kernel_filename
, initrd_filename
, kernel_cmdline
);
961 cpu_register_physical_memory(option_rom_start
, TARGET_PAGE_SIZE
,
962 option_rom_offset
| IO_MEM_ROM
);
963 offset
+= TARGET_PAGE_SIZE
;
966 for (i
= 0; i
< nb_option_roms
; i
++) {
967 size
= get_image_size(option_rom
[i
]);
969 fprintf(stderr
, "Could not load option rom '%s'\n",
973 if (size
> (0xe0000 - offset
))
974 goto option_rom_error
;
975 option_rom_offset
= qemu_ram_alloc(size
);
976 ret
= load_image(option_rom
[i
], phys_ram_base
+ option_rom_offset
);
979 fprintf(stderr
, "Could not fit %soption roms in available space\n", using_vga
? "VGA bios and " : "");
982 size
= (size
+ 4095) & ~4095;
983 /* XXX: for DDIM support, "ROM space" should be writable during
984 initialization, and (optionally) marked readonly by the BIOS
985 before INT 19h. See the PNPBIOS specification, appendix B.
986 DDIM support is mandatory for proper PCI expansion ROM support. */
987 cpu_register_physical_memory(offset
, size
, option_rom_offset
/* | IO_MEM_ROM */);
988 option_rom_setup_reset(0xd0000 + offset
, size
);
991 pci_option_rom_offset
= offset
;
994 /* map all the bios at the top of memory */
995 cpu_register_physical_memory((uint32_t)(-bios_size
),
996 bios_size
, bios_offset
| IO_MEM_ROM
);
1000 cpu_irq
= qemu_allocate_irqs(pic_irq_request
, NULL
, 1);
1001 i8259
= i8259_init(cpu_irq
[0]);
1002 ferr_irq
= i8259
[13];
1005 pci_bus
= i440fx_init(&i440fx_state
, i8259
);
1006 piix3_devfn
= piix3_init(pci_bus
, -1);
1011 /* init basic PC hardware */
1012 register_ioport_write(0x80, 1, 1, ioport80_write
, NULL
);
1014 register_ioport_write(0xf0, 1, 1, ioportF0_write
, NULL
);
1016 if (cirrus_vga_enabled
) {
1018 pci_cirrus_vga_init(pci_bus
,
1019 phys_ram_base
+ vga_ram_addr
,
1020 vga_ram_addr
, vga_ram_size
);
1022 isa_cirrus_vga_init(phys_ram_base
+ vga_ram_addr
,
1023 vga_ram_addr
, vga_ram_size
);
1025 } else if (vmsvga_enabled
) {
1027 pci_vmsvga_init(pci_bus
, phys_ram_base
+ vga_ram_addr
,
1028 vga_ram_addr
, vga_ram_size
);
1030 fprintf(stderr
, "%s: vmware_vga: no PCI bus\n", __FUNCTION__
);
1031 } else if (std_vga_enabled
) {
1033 pci_vga_init(pci_bus
, phys_ram_base
+ vga_ram_addr
,
1034 vga_ram_addr
, vga_ram_size
, 0, 0);
1036 isa_vga_init(phys_ram_base
+ vga_ram_addr
,
1037 vga_ram_addr
, vga_ram_size
);
1041 rtc_state
= rtc_init(0x70, i8259
[8], 2000);
1043 qemu_register_boot_set(pc_boot_set
, rtc_state
);
1045 register_ioport_read(0x92, 1, 1, ioport92_read
, NULL
);
1046 register_ioport_write(0x92, 1, 1, ioport92_write
, NULL
);
1049 ioapic
= ioapic_init();
1052 if (kvm_enabled() && qemu_kvm_pit_in_kernel())
1053 pit
= kvm_pit_init(0x40, i8259
[0]);
1056 pit
= pit_init(0x40, i8259
[0]);
1062 pic_set_alt_irq_func(isa_pic
, ioapic_set_irq
, ioapic
);
1065 for(i
= 0; i
< MAX_SERIAL_PORTS
; i
++) {
1066 if (serial_hds
[i
]) {
1067 serial_init(serial_io
[i
], i8259
[serial_irq
[i
]], 115200,
1072 for(i
= 0; i
< MAX_PARALLEL_PORTS
; i
++) {
1073 if (parallel_hds
[i
]) {
1074 parallel_init(parallel_io
[i
], i8259
[parallel_irq
[i
]],
1079 for(i
= 0; i
< nb_nics
; i
++) {
1080 NICInfo
*nd
= &nd_table
[i
];
1082 if (!pci_enabled
|| (nd
->model
&& strcmp(nd
->model
, "ne2k_isa") == 0))
1083 pc_init_ne2k_isa(nd
, i8259
);
1085 pci_nic_init(pci_bus
, nd
, -1, "rtl8139");
1088 qemu_system_hot_add_init(cpu_model
);
1090 if (drive_get_max_bus(IF_IDE
) >= MAX_IDE_BUS
) {
1091 fprintf(stderr
, "qemu: too many IDE bus\n");
1095 for(i
= 0; i
< MAX_IDE_BUS
* MAX_IDE_DEVS
; i
++) {
1096 index
= drive_get_index(IF_IDE
, i
/ MAX_IDE_DEVS
, i
% MAX_IDE_DEVS
);
1098 hd
[i
] = drives_table
[index
].bdrv
;
1104 pci_piix3_ide_init(pci_bus
, hd
, piix3_devfn
+ 1, i8259
);
1106 for(i
= 0; i
< MAX_IDE_BUS
; i
++) {
1107 isa_ide_init(ide_iobase
[i
], ide_iobase2
[i
], i8259
[ide_irq
[i
]],
1108 hd
[MAX_IDE_DEVS
* i
], hd
[MAX_IDE_DEVS
* i
+ 1]);
1112 i8042_init(i8259
[1], i8259
[12], 0x60);
1115 audio_init(pci_enabled
? pci_bus
: NULL
, i8259
);
1118 for(i
= 0; i
< MAX_FD
; i
++) {
1119 index
= drive_get_index(IF_FLOPPY
, 0, i
);
1121 fd
[i
] = drives_table
[index
].bdrv
;
1125 floppy_controller
= fdctrl_init(i8259
[6], 2, 0, 0x3f0, fd
);
1127 cmos_init(below_4g_mem_size
, above_4g_mem_size
, boot_device
, hd
);
1129 if (pci_enabled
&& usb_enabled
) {
1130 usb_uhci_piix3_init(pci_bus
, piix3_devfn
+ 2);
1133 if (pci_enabled
&& acpi_enabled
) {
1134 uint8_t *eeprom_buf
= qemu_mallocz(8 * 256); /* XXX: make this persistent */
1137 /* TODO: Populate SPD eeprom data. */
1138 smbus
= piix4_pm_init(pci_bus
, piix3_devfn
+ 3, 0xb100, i8259
[9]);
1139 for (i
= 0; i
< 8; i
++) {
1140 smbus_eeprom_device_init(smbus
, 0x50 + i
, eeprom_buf
+ (i
* 256));
1145 i440fx_init_memory_mappings(i440fx_state
);
1153 max_bus
= drive_get_max_bus(IF_SCSI
);
1155 for (bus
= 0; bus
<= max_bus
; bus
++) {
1156 scsi
= lsi_scsi_init(pci_bus
, -1);
1157 for (unit
= 0; unit
< LSI_MAX_DEVS
; unit
++) {
1158 index
= drive_get_index(IF_SCSI
, bus
, unit
);
1161 lsi_scsi_attach(scsi
, drives_table
[index
].bdrv
, unit
);
1166 /* Add virtio block devices */
1171 while ((index
= drive_get_index(IF_VIRTIO
, 0, unit_id
)) != -1) {
1172 virtio_blk_init(pci_bus
, drives_table
[index
].bdrv
);
1177 if (extboot_drive
!= -1) {
1178 DriveInfo
*info
= &drives_table
[extboot_drive
];
1179 int cyls
, heads
, secs
;
1181 if (info
->type
!= IF_IDE
&& info
->type
!= IF_VIRTIO
) {
1182 bdrv_guess_geometry(info
->bdrv
, &cyls
, &heads
, &secs
);
1183 bdrv_set_geometry_hint(info
->bdrv
, cyls
, heads
, secs
);
1186 extboot_init(info
->bdrv
, 1);
1189 /* Add virtio balloon device */
1191 virtio_balloon_init(pci_bus
);
1193 /* Add virtio console devices */
1195 for(i
= 0; i
< MAX_VIRTIO_CONSOLES
; i
++) {
1197 virtio_console_init(pci_bus
, virtcon_hds
[i
]);
1201 #ifdef USE_KVM_DEVICE_ASSIGNMENT
1202 if (kvm_enabled()) {
1203 add_assigned_devices(pci_bus
, assigned_devices
, assigned_devices_index
);
1204 assigned_dev_load_option_roms(pci_option_rom_offset
);
1206 #endif /* USE_KVM_DEVICE_ASSIGNMENT */
1209 static void pc_init_pci(ram_addr_t ram_size
, int vga_ram_size
,
1210 const char *boot_device
,
1211 const char *kernel_filename
,
1212 const char *kernel_cmdline
,
1213 const char *initrd_filename
,
1214 const char *cpu_model
)
1216 pc_init1(ram_size
, vga_ram_size
, boot_device
,
1217 kernel_filename
, kernel_cmdline
,
1218 initrd_filename
, 1, cpu_model
);
1221 static void pc_init_isa(ram_addr_t ram_size
, int vga_ram_size
,
1222 const char *boot_device
,
1223 const char *kernel_filename
,
1224 const char *kernel_cmdline
,
1225 const char *initrd_filename
,
1226 const char *cpu_model
)
1228 pc_init1(ram_size
, vga_ram_size
, boot_device
,
1229 kernel_filename
, kernel_cmdline
,
1230 initrd_filename
, 0, cpu_model
);
1233 /* set CMOS shutdown status register (index 0xF) as S3_resume(0xFE)
1234 BIOS will read it and start S3 resume at POST Entry */
1235 void cmos_set_s3_resume(void)
1238 rtc_set_memory(rtc_state
, 0xF, 0xFE);
1241 QEMUMachine pc_machine
= {
1243 .desc
= "Standard PC",
1244 .init
= pc_init_pci
,
1245 .ram_require
= VGA_RAM_SIZE
+ PC_MAX_BIOS_SIZE
,
1249 QEMUMachine isapc_machine
= {
1251 .desc
= "ISA-only PC",
1252 .init
= pc_init_isa
,
1253 .ram_require
= VGA_RAM_SIZE
+ PC_MAX_BIOS_SIZE
,