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`` to ``0x3df``), remapped 1:1. Word access is supported, bytes are written in little endian 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.