feat: rewrite libdrm ioctl bridge with VirtGPU support

Wire P1/P2 patches into recipe.toml. Source reflects the full ioctl bridge\nrewrite: VirtGPU NR mappings, EXECBUFFER/GET_CAPS special handlers,\nPCI info bridge for drmGetDevice2, and removal of the old per-ioctl C\nhandler functions in favor of unified redox_drm_simple_ioctl() dispatch.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-05-15 07:24:15 +01:00
parent 6a0659ee04
commit b163f437bf
3 changed files with 203 additions and 879 deletions
+3 -1
View File
@@ -1,7 +1,7 @@
[source]
tar = "https://gitlab.freedesktop.org/mesa/libdrm/-/archive/libdrm-2.4.125/libdrm-libdrm-2.4.125.tar.gz"
blake3 = "33e6448252639f4ff8a8cd30129b335c5d85356c1c93f8d77a79221003b14f66"
patches = ["redox.patch"]
patches = ["redox.patch", "../../../patches/libdrm/P1-drm-ioctl-bridge.patch", "../../../patches/libdrm/P2-drm-get-pci-info.patch"]
[build]
template = "meson"
@@ -11,4 +11,6 @@ mesonflags = [
"-Dnouveau=disabled",
"-Dradeon=disabled",
"-Dvmwgfx=disabled",
"-Dtests=false",
"-Dc_args=-Wno-unused-function",
]
File diff suppressed because it is too large Load Diff
@@ -26,39 +26,21 @@
#define REDOX_DRM_IOCTL_SET_CLIENT_CAP (REDOX_DRM_IOCTL_BASE + 24)
#define REDOX_DRM_IOCTL_VERSION (REDOX_DRM_IOCTL_BASE + 25)
#define REDOX_DRM_IOCTL_GEM_CLOSE (REDOX_DRM_IOCTL_BASE + 27)
#define REDOX_DRM_IOCTL_GEM_FLINK (REDOX_DRM_IOCTL_BASE + 10)
#define REDOX_DRM_IOCTL_GEM_OPEN (REDOX_DRM_IOCTL_BASE + 11)
#define REDOX_DRM_IOCTL_PRIME_HANDLE_TO_FD (REDOX_DRM_IOCTL_BASE + 29)
#define REDOX_DRM_IOCTL_PRIME_FD_TO_HANDLE (REDOX_DRM_IOCTL_BASE + 30)
#define REDOX_DRM_IOCTL_GET_MAGIC (REDOX_DRM_IOCTL_BASE + 33)
#define REDOX_DRM_IOCTL_AUTH_MAGIC (REDOX_DRM_IOCTL_BASE + 34)
#define REDOX_DRM_IOCTL_SET_MASTER (REDOX_DRM_IOCTL_BASE + 35)
#define REDOX_DRM_IOCTL_DROP_MASTER (REDOX_DRM_IOCTL_BASE + 36)
#define REDOX_DRM_IOCTL_MODE_OBJ_GETPROPERTIES (REDOX_DRM_IOCTL_BASE + 0x50)
#define REDOX_DRM_IOCTL_MODE_GETPROPERTY (REDOX_DRM_IOCTL_BASE + 0x51)
#define REDOX_DRM_IOCTL_MODE_GETPROPBLOB (REDOX_DRM_IOCTL_BASE + 0x52)
#define REDOX_DRM_IOCTL_MODE_CREATE_LEASE (REDOX_DRM_IOCTL_BASE + 0x53)
#define REDOX_DRM_IOCTL_MODE_LIST_LESSEES (REDOX_DRM_IOCTL_BASE + 0x54)
#define REDOX_DRM_IOCTL_MODE_OBJ_SETPROPERTY (REDOX_DRM_IOCTL_BASE + 0x55)
#define REDOX_DRM_IOCTL_MODE_GETPLANERESOURCES (REDOX_DRM_IOCTL_BASE + 0x56)
#define REDOX_DRM_IOCTL_MODE_GETPLANE (REDOX_DRM_IOCTL_BASE + 0x57)
#define REDOX_DRM_IOCTL_MODE_SETPLANE (REDOX_DRM_IOCTL_BASE + 0x58)
#define REDOX_DRM_IOCTL_MODE_ADDFB2 (REDOX_DRM_IOCTL_BASE + 0x59)
#define REDOX_DRM_IOCTL_GET_PCI_INFO (REDOX_DRM_IOCTL_BASE + 0x60)
#define REDOX_DRM_IOCTL_VIRTGPU_MAP (REDOX_DRM_IOCTL_BASE + 31)
#define REDOX_DRM_IOCTL_VIRTGPU_EXECBUFFER (REDOX_DRM_IOCTL_BASE + 32)
#define REDOX_DRM_IOCTL_VIRTGPU_GETPARAM (REDOX_DRM_IOCTL_BASE + 33)
#define REDOX_DRM_IOCTL_VIRTGPU_RESOURCE_CREATE (REDOX_DRM_IOCTL_BASE + 34)
#define REDOX_DRM_IOCTL_VIRTGPU_RESOURCE_INFO (REDOX_DRM_IOCTL_BASE + 35)
#define REDOX_DRM_IOCTL_VIRTGPU_TRANSFER_FROM_HOST (REDOX_DRM_IOCTL_BASE + 36)
#define REDOX_DRM_IOCTL_VIRTGPU_TRANSFER_TO_HOST (REDOX_DRM_IOCTL_BASE + 37)
#define REDOX_DRM_IOCTL_VIRTGPU_WAIT (REDOX_DRM_IOCTL_BASE + 38)
#define REDOX_DRM_IOCTL_VIRTGPU_GET_CAPS (REDOX_DRM_IOCTL_BASE + 39)
#define REDOX_DRM_IOCTL_VIRTGPU_RESOURCE_CREATE_BLOB (REDOX_DRM_IOCTL_BASE + 40)
#define REDOX_DRM_IOCTL_VIRTGPU_CONTEXT_INIT (REDOX_DRM_IOCTL_BASE + 41)
struct redox_drm_pci_info_wire {
uint16_t vendor_id;
uint16_t device_id;
uint16_t subvendor_id;
uint16_t subdevice_id;
uint8_t revision_id;
uint8_t pad[3];
uint16_t domain;
uint8_t bus;
uint8_t dev;
uint8_t func;
uint8_t pad2[3];
};
#define REDOX_DRM_IOCTL_GET_PCI_INFO (REDOX_DRM_IOCTL_BASE + 0x60)
struct redox_drm_resources_wire {
uint32_t connector_count;
@@ -156,7 +138,6 @@ struct redox_drm_version_wire {
int32_t major;
int32_t minor;
int32_t patch;
char name[64];
};
struct redox_drm_prime_handle_to_fd_wire {