[PATCH xf86-video-qxl 3/3] Add support for server managed fds
Hans de Goede
hdegoede at redhat.com
Thu Apr 24 02:27:04 PDT 2014
Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
src/qxl_driver.c | 4 ++++
src/qxl_kms.c | 32 +++++++++++++++++++++++++++-----
2 files changed, 31 insertions(+), 5 deletions(-)
diff --git a/src/qxl_driver.c b/src/qxl_driver.c
index c81b243..b9aa0e9 100644
--- a/src/qxl_driver.c
+++ b/src/qxl_driver.c
@@ -1432,6 +1432,10 @@ qxl_driver_func(ScrnInfoPtr pScrn, xorgDriverFuncOp op, void *data)
*hw_flags = HW_IO | HW_MMIO;
#endif
return TRUE;
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,0)
+ case SUPPORTS_SERVER_FDS:
+ return TRUE;
+#endif
default:
return FALSE;
}
diff --git a/src/qxl_kms.c b/src/qxl_kms.c
index d6dfcee..c31c62d 100644
--- a/src/qxl_kms.c
+++ b/src/qxl_kms.c
@@ -46,6 +46,17 @@ static Bool qxl_open_drm_master(ScrnInfoPtr pScrn)
drmSetVersion sv;
int err;
+#if defined(ODEV_ATTRIB_FD)
+ if (qxl->platform_dev) {
+ qxl->drm_fd = xf86_get_platform_device_int_attrib(qxl->platform_dev,
+ ODEV_ATTRIB_FD, -1);
+ if (qxl->drm_fd != -1) {
+ qxl->drmmode.fd = qxl->drm_fd;
+ return TRUE;
+ }
+ }
+#endif
+
#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,9,99,901,0)
XNFasprintf(&busid, "pci:%04x:%02x:%02x.%d",
dev->domain, dev->bus, dev->dev, dev->func);
@@ -218,11 +229,17 @@ qxl_enter_vt_kms (VT_FUNC_ARGS_DECL)
qxl_screen_t *qxl = pScrn->driverPrivate;
int ret;
- ret = drmSetMaster(qxl->drm_fd);
- if (ret) {
- xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
- "drmSetMaster failed: %s\n",
- strerror(errno));
+#ifdef XF86_PDEV_SERVER_FD
+ if (!(qxl->platform_dev &&
+ (qxl->platform_dev->flags & XF86_PDEV_SERVER_FD)))
+#endif
+ {
+ ret = drmSetMaster(qxl->drm_fd);
+ if (ret) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "drmSetMaster failed: %s\n",
+ strerror(errno));
+ }
}
if (!xf86SetDesiredModes(pScrn))
@@ -241,6 +258,11 @@ qxl_leave_vt_kms (VT_FUNC_ARGS_DECL)
xf86_hide_cursors (pScrn);
// pScrn->EnableDisableFBAccess (XF86_SCRN_ARG (pScrn), FALSE);
+#ifdef XF86_PDEV_SERVER_FD
+ if (qxl->platform_dev && (qxl->platform_dev->flags & XF86_PDEV_SERVER_FD))
+ return;
+#endif
+
ret = drmDropMaster(qxl->drm_fd);
if (ret) {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
--
1.9.0
More information about the xorg-devel
mailing list