QEMU Standard VGA ================= Exists in two variants, for isa and pci. command line switches: -vga std [ picks isa for -M isapc, otherwise pci ] -device VGA [ pci variant ] -device isa-vga [ isa variant ] -device secondary-vga [ legacy-free pci variant ] PCI spec -------- Applies to the pci variant only for obvious reasons. PCI ID: 1234:1111 PCI Region 0: Framebuffer memory, 16 MB in size (by default). Size is tunable via vga_mem_mb property. PCI Region 1: Reserved (so we have the option to make the framebuffer bar 64bit). PCI Region 2: MMIO bar, 4096 bytes in size (qemu 1.3+) PCI ROM Region: Holds the vgabios (qemu 0.14+). The legacy-free variant has no ROM and has PCI_CLASS_DISPLAY_OTHER instead of PCI_CLASS_DISPLAY_VGA. IO ports used ------------- Doesn't apply to the legacy-free pci variant, use the MMIO bar instead. 03c0 - 03df : standard vga ports 01ce : bochs vbe interface index port 01cf : bochs vbe interface data port (x86 only) 01d0 : bochs vbe interface data port Memory regions used ------------------- 0xe0000000 : Framebuffer memory, isa variant only. The pci variant used to mirror the framebuffer bar here, qemu 0.14+ stops doing that (except when in -M pc-$old compat mode). MMIO area spec -------------- Likewise applies to the pci variant only for obvious reasons. 0000 - 03ff : edid data blob. 0400 - 041f : vga ioports (0x3c0 -> 0x3df), remapped 1:1. word access is supported, bytes are written in little endia order (aka index port first), so indexed registers can be updated with a single mmio write (and thus only one vmexit). 0500 - 0515 : bochs dispi interface registers, mapped flat without index/data ports. Use (index << 1) as offset for (16bit) register access. 0600 - 0607 : qemu extended registers. qemu 2.2+ only. The pci revision is 2 (or greater) when these registers are present. The registers are 32bit. 0600 : qemu extended register region size, in bytes. 0604 : framebuffer endianness register. - 0xbebebebe indicates big endian. - 0x1e1e1e1e indicates little endian.