2b11b20a2f
Add #ifdef __redox__ path to drmGetDeviceFromDevId() that mirrors the working drmGetDevice2() Redox implementation. On Redox there is no /dev/dri/ directory — DRM devices are accessed via /scheme/drm/card0. The patch constructs a drmDevice with both PRIMARY and RENDER nodes pointing to /scheme/drm/card0, since the redox-drm scheme serves both roles through a single endpoint. Also fixes drmParseSubsystemType() to return DRM_BUS_PCI on Redox. Fix P3 patch paths (strip local/recipes/libs/libdrm/source/ prefix from diff headers so patches apply correctly during repo fetch).
35 lines
1.1 KiB
Diff
35 lines
1.1 KiB
Diff
diff --git a/xf86drm.c b/xf86drm.c
|
|
index 1b206ccd4..c3904caa3 100644
|
|
--- a/xf86drm.c
|
|
+++ b/xf86drm.c
|
|
@@ -1774,0 +1775,23 @@ drm_public drmVersionPtr drmGetVersion(int fd)
|
|
+
|
|
+ /* The scheme returns a NUL-terminated driver name in version.name.
|
|
+ * KWin drm_gpu.cpp dereferences version->name unconditionally
|
|
+ * (strstr checks for "i915", "amdgpu", "virtio" etc.) so it must
|
|
+ * never be NULL.
|
|
+ */
|
|
+ version.name[sizeof(version.name) - 1] = '\0';
|
|
+ if (version.name[0] != '\0') {
|
|
+ size_t len = strlen(version.name);
|
|
+ retval->name = drmMalloc(len + 1);
|
|
+ if (retval->name) {
|
|
+ memcpy(retval->name, version.name, len + 1);
|
|
+ retval->name_len = len;
|
|
+ }
|
|
+ } else {
|
|
+ const char fallback[] = "redox-drm";
|
|
+ retval->name = drmMalloc(sizeof(fallback));
|
|
+ if (retval->name) {
|
|
+ memcpy(retval->name, fallback, sizeof(fallback));
|
|
+ retval->name_len = sizeof(fallback) - 1;
|
|
+ }
|
|
+ }
|
|
+
|
|
diff --git a/xf86drm_redox.h b/xf86drm_redox.h
|
|
index c1abe8256..7f9d252fa 100644
|
|
--- a/xf86drm_redox.h
|
|
+++ b/xf86drm_redox.h
|
|
@@ -140,0 +141 @@ struct redox_drm_version_wire {
|
|
+ char name[64];
|