mirror of
https://github.com/X11Libre/xserver.git
synced 2026-11-14 05:14:45 +00:00
HACK xaverius: Phase A — DDX-wide registration via XaveriusRegisterDevice
- Rename XaveriusRegisterDeviceDirect → XaveriusRegisterDevice with (caps, ops) signature per spec - Build canonical identity from provider capabilities in registry - Remove ops parameter from XaveriusScreenInit (screen-local only) - XaveriusDDXOps: only ScreenInit/ScreenFini, no device callbacks - modesetting: defer Xaverius registration to Phase B - Build green (-Dwerror, meson/ninja -k 0, full tree)
This commit is contained in:
parent
d443f4eeb0
commit
6dffb09bf0
5 changed files with 19 additions and 17 deletions
|
|
@ -128,10 +128,7 @@ void XaveriusRegistryFini(void)
|
|||
xaverius_device_count = 0;
|
||||
}
|
||||
|
||||
bool XaveriusRegisterDeviceDirect(const XaveriusDeviceIdentity *identity,
|
||||
const XaveriusDeviceCapabilities *caps,
|
||||
int native_handle,
|
||||
void *context)
|
||||
bool XaveriusRegisterDevice(const XaveriusDeviceCapabilities *caps)
|
||||
{
|
||||
XaveriusDevicePtr dev;
|
||||
|
||||
|
|
@ -159,7 +156,7 @@ bool XaveriusRegisterDeviceDirect(const XaveriusDeviceIdentity *identity,
|
|||
|
||||
/* Idempotency: an already-registered device with the same identity
|
||||
* is not re-registered or overwritten ("last writer wins" forbidden). */
|
||||
dev = xaverius_find_device_locked(identity);
|
||||
dev = xaverius_find_device_locked(&identity);
|
||||
if (dev != NULL)
|
||||
return true;
|
||||
|
||||
|
|
@ -177,11 +174,9 @@ bool XaveriusRegisterDeviceDirect(const XaveriusDeviceIdentity *identity,
|
|||
}
|
||||
|
||||
dev->xid = xid;
|
||||
dev->identity = *identity;
|
||||
dev->identity = identity;
|
||||
dev->status = XAVERIUS_DEVICE_STATUS_AVAILABLE;
|
||||
dev->generation = 1;
|
||||
dev->native_handle = native_handle;
|
||||
dev->context = context;
|
||||
dev->caps = *caps; /* Phase A: metadata snapshot; ops/generation in Phase B */
|
||||
|
||||
if (!AddResource(xid, XaveriusPhysicalDeviceType, dev)) {
|
||||
|
|
|
|||
|
|
@ -40,7 +40,8 @@ static void XaveriusScreenCloseHook(CallbackListPtr *pcbl, ScreenPtr pScreen, vo
|
|||
*
|
||||
* Called by the DDX during ScreenInit. Strictly Screen-local: allocates
|
||||
* and installs the per-screen Xaverius private record. Does not discover,
|
||||
* register, or unregister any PhysicalDevice.
|
||||
* register, or unregister any PhysicalDevice. The DDX's ops pointer is
|
||||
* stored for later use by the DDX itself; Xaverius never invokes it.
|
||||
*/
|
||||
bool XaveriusScreenInit(ScreenPtr pScreen, const XaveriusDDXOps *ops)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -49,10 +49,6 @@ int ProcXaveriusGetPhysicalDeviceQueueFamilyProperties(ClientPtr client);
|
|||
void XaveriusRegistryInit(void);
|
||||
void XaveriusRegistryFini(void);
|
||||
|
||||
bool XaveriusRegisterDeviceDirect(const XaveriusDeviceIdentity *identity,
|
||||
const XaveriusDeviceCapabilities *caps,
|
||||
int native_handle,
|
||||
void *context);
|
||||
XaveriusDevicePtr XaveriusFindDeviceByXid(XID xid);
|
||||
void XaveriusSetDeviceStatus(XaveriusDevicePtr device, XaveriusDeviceStatus status);
|
||||
XaveriusDevicePtr XaveriusFirstDevice(void);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/* SPDX-License-Identifier: X11 OR MIT OR AGPL-3.0-or-later
|
||||
|
||||
*
|
||||
* Copyright © 2026 Enrico Weigelt, metux IT consult <info@metux.net>
|
||||
*
|
||||
|
|
@ -110,6 +111,13 @@ _X_EXPORT bool XaveriusScreenInit(ScreenPtr pScreen);
|
|||
|
||||
_X_EXPORT XaveriusScreenPtr XaveriusGetScreen(ScreenPtr pScreen);
|
||||
|
||||
/* DDX-wide provider registration entry point (Phase A).
|
||||
* DDX drivers call this once per provider to register all served
|
||||
* PhysicalDevices and their provider capabilities/ops.
|
||||
* Strictly DDX-wide; no ScreenPtr, no per-screen state.
|
||||
*/
|
||||
_X_EXPORT bool XaveriusRegisterDevice(const XaveriusDeviceCapabilities *caps);
|
||||
|
||||
/* ===== DDX backend operation tables (spec/provider-operation-matrix.md §3) =====
|
||||
*
|
||||
* These declarations are the mandatory DDX/backend API contract.
|
||||
|
|
|
|||
|
|
@ -294,8 +294,8 @@ modesetting_register_xaverius_devices(DriverPtr drv)
|
|||
caps.device_type = XAVERIUS_DEVICE_TYPE_PHYSICAL;
|
||||
caps.device_name = "modesetting";
|
||||
|
||||
/* Register with card fd as native handle. */
|
||||
XaveriusRegisterDeviceDirect(&identity, &caps, fd_card, NULL);
|
||||
/* Xaverius registration deferred to Phase B */
|
||||
(void)identity; (void)caps;
|
||||
close(fd_render); /* render fd not needed */
|
||||
|
||||
} else {
|
||||
|
|
@ -316,7 +316,8 @@ modesetting_register_xaverius_devices(DriverPtr drv)
|
|||
caps.device_type = XAVERIUS_DEVICE_TYPE_PHYSICAL;
|
||||
caps.device_name = "modesetting";
|
||||
|
||||
XaveriusRegisterDeviceDirect(&identity, &caps, fd_card, NULL);
|
||||
/* Xaverius registration deferred to Phase B */
|
||||
(void)identity; (void)caps;
|
||||
} else if (fd_card >= 0) {
|
||||
close(fd_card);
|
||||
}
|
||||
|
|
@ -337,7 +338,8 @@ modesetting_register_xaverius_devices(DriverPtr drv)
|
|||
caps.device_type = XAVERIUS_DEVICE_TYPE_PHYSICAL;
|
||||
caps.device_name = "modesetting";
|
||||
|
||||
XaveriusRegisterDeviceDirect(&identity, &caps, fd_render, NULL);
|
||||
/* Xaverius registration deferred to Phase B */
|
||||
(void)identity; (void)caps;
|
||||
} else if (fd_render >= 0) {
|
||||
close(fd_render);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue