| 1 | |
| 2 | QEMU Standard VGA |
| 3 | ================= |
| 4 | |
| 5 | Exists in two variants, for isa and pci. |
| 6 | |
| 7 | command line switches: |
| 8 | |
| 9 | ``-vga std`` |
| 10 | picks isa for -M isapc, otherwise pci |
| 11 | ``-device VGA`` |
| 12 | pci variant |
| 13 | ``-device isa-vga`` |
| 14 | isa variant |
| 15 | ``-device secondary-vga`` |
| 16 | legacy-free pci variant |
| 17 | |
| 18 | |
| 19 | PCI spec |
| 20 | -------- |
| 21 | |
| 22 | Applies to the pci variant only for obvious reasons. |
| 23 | |
| 24 | PCI ID |
| 25 | ``1234:1111`` |
| 26 | |
| 27 | PCI Region 0 |
| 28 | Framebuffer memory, 16 MB in size (by default). |
| 29 | Size is tunable via vga_mem_mb property. |
| 30 | |
| 31 | PCI Region 1 |
| 32 | Reserved (so we have the option to make the framebuffer bar 64bit). |
| 33 | |
| 34 | PCI Region 2 |
| 35 | MMIO bar, 4096 bytes in size (QEMU 1.3+) |
| 36 | |
| 37 | PCI ROM Region |
| 38 | Holds the vgabios (QEMU 0.14+). |
| 39 | |
| 40 | |
| 41 | The legacy-free variant has no ROM and has ``PCI_CLASS_DISPLAY_OTHER`` |
| 42 | instead of ``PCI_CLASS_DISPLAY_VGA``. |
| 43 | |
| 44 | |
| 45 | IO ports used |
| 46 | ------------- |
| 47 | |
| 48 | Doesn't apply to the legacy-free pci variant, use the MMIO bar instead. |
| 49 | |
| 50 | ``03c0 - 03df`` |
| 51 | standard vga ports |
| 52 | ``01ce`` |
| 53 | bochs vbe interface index port |
| 54 | ``01cf`` |
| 55 | bochs vbe interface data port (x86 only) |
| 56 | ``01d0`` |
| 57 | bochs vbe interface data port |
| 58 | |
| 59 | |
| 60 | Memory regions used |
| 61 | ------------------- |
| 62 | |
| 63 | ``0xe0000000`` |
| 64 | Framebuffer memory, isa variant only. |
| 65 | |
| 66 | The pci variant used to mirror the framebuffer bar here, QEMU 0.14+ |
| 67 | stops doing that (except when in ``-M pc-$old`` compat mode). |
| 68 | |
| 69 | |
| 70 | MMIO area spec |
| 71 | -------------- |
| 72 | |
| 73 | Likewise applies to the pci variant only for obvious reasons. |
| 74 | |
| 75 | ``0000 - 03ff`` |
| 76 | edid data blob. |
| 77 | ``0400 - 041f`` |
| 78 | vga ioports (``0x3c0`` to ``0x3df``), remapped 1:1. Word access |
| 79 | is supported, bytes are written in little endian order (aka index |
| 80 | port first), so indexed registers can be updated with a single |
| 81 | mmio write (and thus only one vmexit). |
| 82 | ``0500 - 0515`` |
| 83 | bochs dispi interface registers, mapped flat without index/data ports. |
| 84 | Use ``(index << 1)`` as offset for (16bit) register access. |
| 85 | ``0600 - 0607`` |
| 86 | QEMU extended registers. QEMU 2.2+ only. |
| 87 | The pci revision is 2 (or greater) when these registers are present. |
| 88 | The registers are 32bit. |
| 89 | ``0600`` |
| 90 | QEMU extended register region size, in bytes. |
| 91 | ``0604`` |
| 92 | framebuffer endianness register. |
| 93 | - ``0xbebebebe`` indicates big endian. |
| 94 | - ``0x1e1e1e1e`` indicates little endian. |