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