|
@@ -301,6 +301,56 @@ struct vfio_region_info_cap_type {
|
|
|
#define VFIO_REGION_SUBTYPE_INTEL_IGD_HOST_CFG (2)
|
|
|
#define VFIO_REGION_SUBTYPE_INTEL_IGD_LPC_CFG (3)
|
|
|
|
|
|
+#define VFIO_REGION_TYPE_GFX (1)
|
|
|
+#define VFIO_REGION_SUBTYPE_GFX_EDID (1)
|
|
|
+
|
|
|
+/**
|
|
|
+ * struct vfio_region_gfx_edid - EDID region layout.
|
|
|
+ *
|
|
|
+ * Set display link state and EDID blob.
|
|
|
+ *
|
|
|
+ * The EDID blob has monitor information such as brand, name, serial
|
|
|
+ * number, physical size, supported video modes and more.
|
|
|
+ *
|
|
|
+ * This special region allows userspace (typically qemu) set a virtual
|
|
|
+ * EDID for the virtual monitor, which allows a flexible display
|
|
|
+ * configuration.
|
|
|
+ *
|
|
|
+ * For the edid blob spec look here:
|
|
|
+ * https://en.wikipedia.org/wiki/Extended_Display_Identification_Data
|
|
|
+ *
|
|
|
+ * On linux systems you can find the EDID blob in sysfs:
|
|
|
+ * /sys/class/drm/${card}/${connector}/edid
|
|
|
+ *
|
|
|
+ * You can use the edid-decode ulility (comes with xorg-x11-utils) to
|
|
|
+ * decode the EDID blob.
|
|
|
+ *
|
|
|
+ * @edid_offset: location of the edid blob, relative to the
|
|
|
+ * start of the region (readonly).
|
|
|
+ * @edid_max_size: max size of the edid blob (readonly).
|
|
|
+ * @edid_size: actual edid size (read/write).
|
|
|
+ * @link_state: display link state (read/write).
|
|
|
+ * VFIO_DEVICE_GFX_LINK_STATE_UP: Monitor is turned on.
|
|
|
+ * VFIO_DEVICE_GFX_LINK_STATE_DOWN: Monitor is turned off.
|
|
|
+ * @max_xres: max display width (0 == no limitation, readonly).
|
|
|
+ * @max_yres: max display height (0 == no limitation, readonly).
|
|
|
+ *
|
|
|
+ * EDID update protocol:
|
|
|
+ * (1) set link-state to down.
|
|
|
+ * (2) update edid blob and size.
|
|
|
+ * (3) set link-state to up.
|
|
|
+ */
|
|
|
+struct vfio_region_gfx_edid {
|
|
|
+ __u32 edid_offset;
|
|
|
+ __u32 edid_max_size;
|
|
|
+ __u32 edid_size;
|
|
|
+ __u32 max_xres;
|
|
|
+ __u32 max_yres;
|
|
|
+ __u32 link_state;
|
|
|
+#define VFIO_DEVICE_GFX_LINK_STATE_UP 1
|
|
|
+#define VFIO_DEVICE_GFX_LINK_STATE_DOWN 2
|
|
|
+};
|
|
|
+
|
|
|
/*
|
|
|
* The MSIX mappable capability informs that MSIX data of a BAR can be mmapped
|
|
|
* which allows direct access to non-MSIX registers which happened to be within
|