]> git.proxmox.com Git - mirror_edk2.git/commit - OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
OvmfPkg/QemuVideoDxe: Helper functions for unaligned port I/O.
authorPhil Dennis-Jordan <phil@philjordan.eu>
Fri, 7 Apr 2017 06:25:57 +0000 (18:25 +1200)
committerLaszlo Ersek <lersek@redhat.com>
Fri, 7 Apr 2017 10:22:30 +0000 (12:22 +0200)
commit05a5379458725234de8a05780fcb5da2c12680e4
tree1513828a075954852173baa3b3a0d2b8574c02d2
parent9bcca53fe466cdff397578328d9d87d257aba493
OvmfPkg/QemuVideoDxe: Helper functions for unaligned port I/O.

The VMWare SVGA display device implemented by Qemu (-vga vmware) uses
an I/O-type BAR which is laid out such that some register offsets are
not aligned to the read/write width with which they are expected to be
accessed. (The register value port has an offset of 1 and requires
32 bit wide read/write access.)

The EFI_PCI_IO_PROTOCOL's Io.Read/Io.Write functions do not support
such unaligned I/O.

Before a driver for this device can be added to QemuVideoDxe, helper
functions for unaligned I/O are therefore required. This adds the
functions UnalignedIoWrite32 and UnalignedIoRead32, based on IoLib's
IoWrite32 and IoRead32, for the Ia32 and X64 architectures. Port I/O
requires inline assembly, so implementations are provided for the GCC,
ICC, and Microsoft compiler families. Such I/O is not possible on other
architectures, a dummy (ASSERT()ing) implementation is therefore
provided to satisfy the linker.

Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Suggested-by: Jordan Justen <jordan.l.justen@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Phil Dennis-Jordan <phil@philjordan.eu>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
OvmfPkg/QemuVideoDxe/UnalignedIoGcc.c [new file with mode: 0644]
OvmfPkg/QemuVideoDxe/UnalignedIoIcc.c [new file with mode: 0644]
OvmfPkg/QemuVideoDxe/UnalignedIoInternal.h [new file with mode: 0644]
OvmfPkg/QemuVideoDxe/UnalignedIoMsc.c [new file with mode: 0644]
OvmfPkg/QemuVideoDxe/UnalignedIoUnsupported.c [new file with mode: 0644]