From 5d7be80305f7147ec0ba87594b8b69635fa0cabe Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Wed, 2 Jul 2025 17:44:12 +0200 Subject: [PATCH 1/8] minor release 25.0.0.3 minor bugfix release. Signed-off-by: Enrico Weigelt, metux IT consult --- meson.build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index 84a631f39..8131d239d 100644 --- a/meson.build +++ b/meson.build @@ -3,10 +3,10 @@ project('xserver', 'c', 'buildtype=debugoptimized', 'c_std=gnu99', ], - version: '25.0.0.2', + version: '25.0.0.3', meson_version: '>= 0.58.0', ) -release_date = '2025-06-30' +release_date = '2025-07-02' add_project_arguments('-DHAVE_DIX_CONFIG_H', language: ['c', 'objc']) cc = meson.get_compiler('c') From 7c64a06ba4c1d98dac0f18f49b1c2bf923de77c1 Mon Sep 17 00:00:00 2001 From: dasha_uwu Date: Sat, 14 Jun 2025 10:06:20 +0500 Subject: [PATCH 2/8] treewide: remove "lib" prefix in static_library names (meson) this was producing static libraries named "liblibsomething.a" Signed-off-by: dasha_uwu --- Xext/meson.build | 4 ++-- Xext/namespace/meson.build | 2 +- Xi/meson.build | 4 ++-- composite/meson.build | 2 +- config/meson.build | 2 +- damageext/meson.build | 2 +- dbe/meson.build | 2 +- dix/meson.build | 4 ++-- dri3/meson.build | 2 +- exa/meson.build | 2 +- fb/meson.build | 4 ++-- glx/meson.build | 4 ++-- mi/meson.build | 2 +- miext/damage/meson.build | 2 +- miext/rootless/meson.build | 2 +- miext/shadow/meson.build | 2 +- miext/sync/meson.build | 2 +- os/meson.build | 4 ++-- present/meson.build | 2 +- pseudoramiX/meson.build | 2 +- randr/meson.build | 2 +- record/meson.build | 2 +- render/meson.build | 2 +- xfixes/meson.build | 2 +- xkb/meson.build | 4 ++-- 25 files changed, 32 insertions(+), 32 deletions(-) diff --git a/Xext/meson.build b/Xext/meson.build index 9902bf4be..2294902e6 100644 --- a/Xext/meson.build +++ b/Xext/meson.build @@ -58,13 +58,13 @@ if build_xv hdrs_xext += ['xvdix.h', 'xvmcext.h'] endif -libxserver_xext = static_library('libxserver_xext', +libxserver_xext = static_library('xserver_xext', srcs_xext, include_directories: inc, dependencies: common_dep, ) -libxserver_xext_vidmode = static_library('libxserver_xext_vidmode', +libxserver_xext_vidmode = static_library('xserver_xext_vidmode', 'vidmode.c', include_directories: inc, dependencies: common_dep, diff --git a/Xext/namespace/meson.build b/Xext/namespace/meson.build index ad9fb029c..708fd74a2 100644 --- a/Xext/namespace/meson.build +++ b/Xext/namespace/meson.build @@ -1,5 +1,5 @@ libxserver_namespace = static_library( - 'libxserver_namespace', + 'xserver_namespace', [ 'config.c', 'hook-client.c', diff --git a/Xi/meson.build b/Xi/meson.build index 717bb28e1..ec48e3d3b 100644 --- a/Xi/meson.build +++ b/Xi/meson.build @@ -53,14 +53,14 @@ srcs_xi = [ 'xiwarppointer.c', ] -libxserver_xi = static_library('libxserver_xi', +libxserver_xi = static_library('xserver_xi', srcs_xi, include_directories: inc, dependencies: common_dep, ) srcs_xi_stubs = ['stubs.c'] -libxserver_xi_stubs = static_library('libxserver_xi_stubs', +libxserver_xi_stubs = static_library('xserver_xi_stubs', srcs_xi_stubs, include_directories: inc, dependencies: common_dep, diff --git a/composite/meson.build b/composite/meson.build index 4f3303e20..af059714b 100644 --- a/composite/meson.build +++ b/composite/meson.build @@ -10,7 +10,7 @@ hdrs_composite = [ 'compositeext.h', ] -libxserver_composite = static_library('libxserver_composite', +libxserver_composite = static_library('xserver_composite', srcs_composite, include_directories: inc, dependencies: common_dep, diff --git a/config/meson.build b/config/meson.build index db7c49346..15f21a053 100644 --- a/config/meson.build +++ b/config/meson.build @@ -28,7 +28,7 @@ if build_xorg install_dir: join_paths(get_option('datadir'), 'X11/xorg.conf.d')) endif -libxserver_config = static_library('libxserver_config', +libxserver_config = static_library('xserver_config', srcs_config, include_directories: inc, dependencies: config_dep, diff --git a/damageext/meson.build b/damageext/meson.build index 688771d58..b13e0cee7 100644 --- a/damageext/meson.build +++ b/damageext/meson.build @@ -2,7 +2,7 @@ srcs_damageext = [ 'damageext.c', ] -libxserver_damageext = static_library('libxserver_damageext', +libxserver_damageext = static_library('xserver_damageext', srcs_damageext, include_directories: inc, dependencies: common_dep, diff --git a/dbe/meson.build b/dbe/meson.build index e10bde199..80bd4e252 100644 --- a/dbe/meson.build +++ b/dbe/meson.build @@ -3,7 +3,7 @@ srcs_dbe = [ 'midbe.c', ] -libxserver_dbe = static_library('libxserver_dbe', +libxserver_dbe = static_library('xserver_dbe', srcs_dbe, include_directories: inc, dependencies: common_dep, diff --git a/dix/meson.build b/dix/meson.build index 7d02841a7..6281ed956 100644 --- a/dix/meson.build +++ b/dix/meson.build @@ -57,13 +57,13 @@ endif dtrace_dep = declare_dependency(sources: [dtrace_src, dtrace_hdr]) -libxserver_dix = static_library('libxserver_dix', +libxserver_dix = static_library('xserver_dix', [ srcs_dix, builtinatoms_src ], include_directories: inc, dependencies: [ dtrace_dep, common_dep, ] ) -libxserver_main = static_library('libxserver_main', +libxserver_main = static_library('xserver_main', 'stubmain.c', include_directories: inc, dependencies: common_dep, diff --git a/dri3/meson.build b/dri3/meson.build index 91bd68d87..6b959f49f 100644 --- a/dri3/meson.build +++ b/dri3/meson.build @@ -10,7 +10,7 @@ hdrs_dri3 = [ libxserver_dri3 = [] if build_dri3 - libxserver_dri3 = static_library('libxserver_dri3', + libxserver_dri3 = static_library('xserver_dri3', srcs_dri3, include_directories: inc, dependencies: [ common_dep, libdrm_dep ], diff --git a/exa/meson.build b/exa/meson.build index 832363d27..784ecae8d 100644 --- a/exa/meson.build +++ b/exa/meson.build @@ -12,7 +12,7 @@ srcs_exa = [ 'exa_unaccel.c', ] -libxserver_exa = static_library('libxserver_exa', +libxserver_exa = static_library('xserver_exa', srcs_exa, include_directories: inc, dependencies: common_dep, diff --git a/fb/meson.build b/fb/meson.build index e4e311ff4..b31275a24 100644 --- a/fb/meson.build +++ b/fb/meson.build @@ -37,7 +37,7 @@ hdrs_fb = [ 'wfbrename.h' ] -libxserver_fb = static_library('libxserver_fb', +libxserver_fb = static_library('xserver_fb', srcs_fb, include_directories: inc, dependencies: common_dep, @@ -46,7 +46,7 @@ libxserver_fb = static_library('libxserver_fb', wfb_args = '-DFB_ACCESS_WRAPPER' -libxserver_wfb = static_library('libxserver_wfb', +libxserver_wfb = static_library('xserver_wfb', srcs_fb, c_args: wfb_args, include_directories: inc, diff --git a/glx/meson.build b/glx/meson.build index 2ec00ce22..3a14bd27c 100644 --- a/glx/meson.build +++ b/glx/meson.build @@ -32,7 +32,7 @@ srcs_glx = [ libxserver_glx = [] if build_glx - libxserver_glx = static_library('libxserver_glx', + libxserver_glx = static_library('xserver_glx', srcs_glx, include_directories: inc, dependencies: [ @@ -68,7 +68,7 @@ hdrs_vnd = [ libglxvnd = [] if build_glx - libglxvnd = static_library('libglxvnd', + libglxvnd = static_library('glxvnd', srcs_vnd, include_directories: inc, dependencies: [ diff --git a/mi/meson.build b/mi/meson.build index cccdb06eb..cde465a9b 100644 --- a/mi/meson.build +++ b/mi/meson.build @@ -40,7 +40,7 @@ hdrs_mi = [ 'mizerarc.h', ] -libxserver_mi = static_library('libxserver_mi', +libxserver_mi = static_library('xserver_mi', srcs_mi, include_directories: inc, dependencies: [ diff --git a/miext/damage/meson.build b/miext/damage/meson.build index c7ec10938..7daebb675 100644 --- a/miext/damage/meson.build +++ b/miext/damage/meson.build @@ -7,7 +7,7 @@ hdrs_miext_damage = [ 'damagestr.h', ] -libxserver_miext_damage = static_library('libxserver_miext_damage', +libxserver_miext_damage = static_library('xserver_miext_damage', srcs_miext_damage, include_directories: inc, dependencies: common_dep, diff --git a/miext/rootless/meson.build b/miext/rootless/meson.build index 66b9f06cf..f37aa1320 100644 --- a/miext/rootless/meson.build +++ b/miext/rootless/meson.build @@ -6,7 +6,7 @@ srcs_miext_rootless = [ 'rootlessWindow.c', ] -libxserver_miext_rootless = static_library('libxserver_miext_rootless', +libxserver_miext_rootless = static_library('xserver_miext_rootless', srcs_miext_rootless, include_directories: inc, dependencies: common_dep, diff --git a/miext/shadow/meson.build b/miext/shadow/meson.build index f91accd69..8e2f0a9c1 100644 --- a/miext/shadow/meson.build +++ b/miext/shadow/meson.build @@ -29,7 +29,7 @@ hdrs_miext_shadow = [ 'shadow.h', ] -libxserver_miext_shadow = static_library('libxserver_miext_shadow', +libxserver_miext_shadow = static_library('xserver_miext_shadow', srcs_miext_shadow, include_directories: inc, dependencies: common_dep, diff --git a/miext/sync/meson.build b/miext/sync/meson.build index 78716e441..1c959d60b 100644 --- a/miext/sync/meson.build +++ b/miext/sync/meson.build @@ -14,7 +14,7 @@ if build_dri3 srcs_miext_sync += 'misyncshm.c' endif -libxserver_miext_sync = static_library('libxserver_miext_sync', +libxserver_miext_sync = static_library('xserver_miext_sync', srcs_miext_sync, include_directories: inc, dependencies: [ diff --git a/os/meson.build b/os/meson.build index 9c8412d76..20a411c2b 100644 --- a/os/meson.build +++ b/os/meson.build @@ -79,7 +79,7 @@ endif libxlibc = [] if srcs_libc.length() > 0 - libxlibc = static_library('libxlibc', + libxlibc = static_library('xlibc', srcs_libc, include_directories: inc, dependencies: [ @@ -92,7 +92,7 @@ if enable_input_thread os_dep += cc.find_library('pthread') endif -libxserver_os = static_library('libxserver_os', +libxserver_os = static_library('xserver_os', srcs_os, include_directories: inc, dependencies: [ diff --git a/present/meson.build b/present/meson.build index df8d40b02..3422ef77a 100644 --- a/present/meson.build +++ b/present/meson.build @@ -15,7 +15,7 @@ hdrs_present = [ 'present.h', ] -libxserver_present = static_library('libxserver_present', +libxserver_present = static_library('xserver_present', srcs_present, include_directories: inc, dependencies: [ diff --git a/pseudoramiX/meson.build b/pseudoramiX/meson.build index c3d932529..e131dc213 100644 --- a/pseudoramiX/meson.build +++ b/pseudoramiX/meson.build @@ -1,4 +1,4 @@ -libxserver_pseudoramix = static_library('libxserver_pseudoramiX', +libxserver_pseudoramix = static_library('xserver_pseudoramiX', 'pseudoramiX.c', include_directories: inc, dependencies: common_dep, diff --git a/randr/meson.build b/randr/meson.build index 9bd751bf2..385a7295a 100644 --- a/randr/meson.build +++ b/randr/meson.build @@ -25,7 +25,7 @@ if build_xinerama srcs_randr += 'rrxinerama.c' endif -libxserver_randr = static_library('libxserver_randr', +libxserver_randr = static_library('xserver_randr', srcs_randr, include_directories: inc, dependencies: common_dep, diff --git a/record/meson.build b/record/meson.build index 1c0b5d2ca..06ca2b5ee 100644 --- a/record/meson.build +++ b/record/meson.build @@ -3,7 +3,7 @@ srcs_record = [ 'set.c', ] -libxserver_record = static_library('libxserver_record', +libxserver_record = static_library('xserver_record', srcs_record, include_directories: inc, dependencies: common_dep, diff --git a/render/meson.build b/render/meson.build index b95b082b3..b091d30c6 100644 --- a/render/meson.build +++ b/render/meson.build @@ -19,7 +19,7 @@ hdrs_render = [ 'picturestr.h', ] -libxserver_render = static_library('libxserver_render', +libxserver_render = static_library('xserver_render', srcs_render, include_directories: inc, dependencies: common_dep, diff --git a/xfixes/meson.build b/xfixes/meson.build index 0e97d477b..26a7af0b0 100644 --- a/xfixes/meson.build +++ b/xfixes/meson.build @@ -7,7 +7,7 @@ srcs_xfixes = [ 'xfixes.c', ] -libxserver_xfixes = static_library('libxserver_xfixes', +libxserver_xfixes = static_library('xserver_xfixes', srcs_xfixes, include_directories: inc, dependencies: common_dep, diff --git a/xkb/meson.build b/xkb/meson.build index c21868c2b..918a1be28 100644 --- a/xkb/meson.build +++ b/xkb/meson.build @@ -23,7 +23,7 @@ srcs_xkb = [ 'XKBMAlloc.c', ] -libxserver_xkb = static_library('libxserver_xkb', +libxserver_xkb = static_library('xserver_xkb', srcs_xkb, include_directories: inc, dependencies: common_dep, @@ -35,7 +35,7 @@ srcs_xkb_stubs = [ 'ddxVT.c', ] -libxserver_xkb_stubs = static_library('libxserver_xkb_stubs', +libxserver_xkb_stubs = static_library('xserver_xkb_stubs', srcs_xkb_stubs, include_directories: inc, dependencies: common_dep, From 5b810bac5e2e91f444dddd83214dec363e16261a Mon Sep 17 00:00:00 2001 From: Nathan Kidd Date: Wed, 7 Aug 2024 18:17:32 -0400 Subject: [PATCH 3/8] glx: Fix out-of-bounds reads from negative return The callers of these functions were casting -1 to unsigned and then using 4GB indexes. By returning 0 we match all the other size functions. GLX size functions return -1 to indicate error, but GL size functions return 0. Signed-off-by: Nathan Kidd Part-of: --- glx/singlesize.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glx/singlesize.c b/glx/singlesize.c index 344ffef7f..d2db6945a 100644 --- a/glx/singlesize.c +++ b/glx/singlesize.c @@ -105,7 +105,7 @@ __glGetMap_size(GLenum target, GLenum query) } break; } - return -1; + return 0; } GLint @@ -164,7 +164,7 @@ __glGetPixelMap_size(GLenum map) query = GL_PIXEL_MAP_A_TO_A_SIZE; break; default: - return -1; + return 0; } glGetIntegerv(query, &size); return size; From 7ca8b37ab13ec5698e6cf22ffc6d1374d91b52d6 Mon Sep 17 00:00:00 2001 From: Nathan Kidd Date: Mon, 12 Aug 2024 18:05:58 -0400 Subject: [PATCH 4/8] glx: Don't blindly write 8 bytes in GLX single replies Previously we leaked stack when invalid enum parameters were specified and caused __glGet*_size functions to return a 0 size. Further, we read out-of-bounds (and leaked) when the input data was less than 8 bytes (__glXDispSwap_GetFramebufferAttachmentParameteriv and __glXDisp_GetRenderbufferParameteriv). Now we only write a single element in the reply padding, and only when there is a single element. This is what the Mesa client-side libGL expects, and restores original GLX server behaviour, matching both pre-public (1996) SGI GLX and XFree86 4. The main risk of this change is if we have any error in element count or size; previously it may not have mattered but now it does. There are no piglit result changes from this modification using either mesa libGLX or NVIDIA libGLX. For performance considerations, an extra conditional and variable-length memcpy has no meaningful impact on the indirect rendering pipeline cost. There is still the possiblity to leak if our size checks allow an enum that the GL implemention does not. Guarding against that requires zero-initializing all temp storage, which wants re-evaluation of the blind 200-byte buffers used for many calls and thus is a much bigger change. Signed-off-by: Nathan Kidd Part-of: --- glx/indirect_util.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/glx/indirect_util.c b/glx/indirect_util.c index 83579c529..140b3b21f 100644 --- a/glx/indirect_util.c +++ b/glx/indirect_util.c @@ -128,13 +128,10 @@ __glXSendReply(ClientPtr client, const void *data, size_t elements, .retval = retval, }; - /* It is faster on almost always every architecture to just copy the 8 - * bytes, even when not necessary, than check to see of the value of - * elements requires it. Copying the data when not needed will do no - * harm. - */ - - (void) memcpy(&reply.pad3, data, 8); + /* Single element goes in reply padding; don't leak uninitialized data. */ + if (elements == 1) { + (void) memcpy(&reply.pad3, data, element_size); + } WriteToClient(client, sizeof(xGLXSingleReply), &reply); if (reply_ints != 0) { @@ -176,13 +173,10 @@ __glXSendReplySwap(ClientPtr client, const void *data, size_t elements, .retval = bswap_32(retval), }; - /* It is faster on almost always every architecture to just copy the 8 - * bytes, even when not necessary, than check to see of the value of - * elements requires it. Copying the data when not needed will do no - * harm. - */ - - (void) memcpy(&reply.pad3, data, 8); + /* Single element goes in reply padding; don't leak uninitialized data. */ + if (elements == 1) { + (void) memcpy(&reply.pad3, data, element_size); + } WriteToClient(client, sizeof(xGLXSingleReply), &reply); if (reply_ints != 0) { From 2069db50e7f465b7116602e4e118fcb5863c87be Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Thu, 3 Jul 2025 14:07:30 +0200 Subject: [PATCH 5/8] xfree86: compat: make xf86MsgVerb() a bit less noisier print the driver bug warning only once. Signed-off-by: Enrico Weigelt, metux IT consult --- hw/xfree86/compat/log.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hw/xfree86/compat/log.c b/hw/xfree86/compat/log.c index 64014e205..061821efd 100644 --- a/hw/xfree86/compat/log.c +++ b/hw/xfree86/compat/log.c @@ -39,7 +39,12 @@ _X_EXPORT void xf86MsgVerb(MessageType type, int verb, const char *format, ...) void xf86MsgVerb(MessageType type, int verb, const char *format, ...) { - xf86NVidiaBugInternalFunc("xf86MsgVerb()"); + static char reportxf86MsgVerb = 1; + + if (reportxf86MsgVerb) { + xf86NVidiaBugInternalFunc("xf86MsgVerb()"); + reportxf86MsgVerb = 0; + } va_list ap; va_start(ap, format); From 160ab343eaebd2a42f8f508a39cb5ad97e36204e Mon Sep 17 00:00:00 2001 From: stefan11111 Date: Wed, 2 Jul 2025 21:44:53 +0300 Subject: [PATCH 6/8] mi: move miPointerCloseScreen to hookPostClose Signed-off-by: stefan11111 --- mi/mipointer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mi/mipointer.c b/mi/mipointer.c index 7d51f8659..ff0db9f6b 100644 --- a/mi/mipointer.c +++ b/mi/mipointer.c @@ -141,7 +141,7 @@ miPointerInitialize(ScreenPtr pScreen, pScreenPriv->screenFuncs = screenFuncs; pScreenPriv->waitForUpdate = waitForUpdate; pScreenPriv->showTransparent = FALSE; - dixScreenHookClose(pScreen, miPointerCloseScreen); + dixScreenHookPostClose(pScreen, miPointerCloseScreen); dixSetPrivate(&pScreen->devPrivates, miPointerScreenKey, pScreenPriv); /* * set up screen cursor method table @@ -169,7 +169,7 @@ static void miPointerCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void { SetupScreen(pScreen); - dixScreenUnhookClose(pScreen, miPointerCloseScreen); + dixScreenUnhookPostClose(pScreen, miPointerCloseScreen); free((void *) pScreenPriv); dixSetPrivate(&pScreen->devPrivates, miPointerScreenKey, NULL); FreeEventList(mipointermove_events, GetMaximumEventsNum()); From af30aa851d2281061d8196d3600a03a6a8479272 Mon Sep 17 00:00:00 2001 From: stefan11111 Date: Mon, 30 Jun 2025 13:50:11 +0300 Subject: [PATCH 7/8] kdrive: add KdOsInit Kdrive X servers used to do the OS-speciffic init part using KdOsInit. This was changed in modern Xorg because Xephyr is the only kdrive X server there, so there was no need to keep this generic. Since we want to eventually add Xfbdev, we need to add this back. Signed-off-by: stefan11111 --- hw/kdrive/src/kdrive.c | 21 +++++++++++++++++++++ hw/kdrive/src/kdrive.h | 15 +++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c index 36bda4153..4637bb6be 100644 --- a/hw/kdrive/src/kdrive.c +++ b/hw/kdrive/src/kdrive.c @@ -91,6 +91,14 @@ const char *kdGlobalXkbLayout = NULL; const char *kdGlobalXkbVariant = NULL; const char *kdGlobalXkbOptions = NULL; + +/* + * Carry arguments from InitOutput through driver initialization + * to KdScreenInit + */ + +KdOsFuncs *kdOsFuncs = NULL; + void KdDisableScreen(ScreenPtr pScreen) { @@ -517,6 +525,19 @@ KdProcessArgument(int argc, char **argv, int i) return 0; } +void +KdOsInit(KdOsFuncs * pOsFuncs) +{ + kdOsFuncs = pOsFuncs; + if (pOsFuncs) { + if (serverGeneration == 1) { + KdDoSwitchCmd("start"); + if (pOsFuncs->Init) + (*pOsFuncs->Init) (); + } + } +} + static Bool KdAllocatePrivates(ScreenPtr pScreen) { diff --git a/hw/kdrive/src/kdrive.h b/hw/kdrive/src/kdrive.h index a4b7576d0..7ce181f42 100644 --- a/hw/kdrive/src/kdrive.h +++ b/hw/kdrive/src/kdrive.h @@ -278,6 +278,16 @@ int KdAddConfigKeyboard(char *pointer); int KdAddKeyboard(KdKeyboardInfo * ki); void KdRemoveKeyboard(KdKeyboardInfo * ki); +typedef struct _KdOsFuncs { + int (*Init) (void); /* Only called when the X server is started, when serverGeneration == 1 */ + void (*Enable) (void); + Bool (*SpecialKey) (KeySym); + void (*Disable) (void); + void (*Fini) (void); + void (*pollEvents) (void); + void (*Bell) (int, int, int); +} KdOsFuncs; + typedef struct _KdPointerMatrix { int matrix[2][3]; } KdPointerMatrix; @@ -289,6 +299,8 @@ extern DevPrivateKeyRec kdScreenPrivateKeyRec; extern Bool kdEmulateMiddleButton; extern Bool kdDisableZaphod; +extern KdOsFuncs *kdOsFuncs; + #define KdGetScreenPriv(pScreen) ((KdPrivScreenPtr) \ dixLookupPrivate(&(pScreen)->devPrivates, kdScreenPrivateKey)) #define KdSetScreenPriv(pScreen,v) \ @@ -345,6 +357,9 @@ void int KdProcessArgument(int argc, char **argv, int i); +void + KdOsInit(KdOsFuncs * pOsFuncs); + void KdOsAddInputDrivers(void); From 5727c6ae2f94cbbcb352f9b682f1db2cfb73e413 Mon Sep 17 00:00:00 2001 From: stefan11111 Date: Mon, 30 Jun 2025 14:16:23 +0300 Subject: [PATCH 8/8] kdrive: ephyr: initialize OS specific callback vectors These will be used by subsequent commits for generic Kdrive functions calling back into the OS specific parts Signed-off-by: stefan11111 --- hw/kdrive/ephyr/ephyrinit.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c index fd5e73f82..f65cef052 100644 --- a/hw/kdrive/ephyr/ephyrinit.c +++ b/hw/kdrive/ephyr/ephyrinit.c @@ -370,6 +370,23 @@ ddxProcessArgument(int argc, char **argv, int i) return KdProcessArgument(argc, argv, i); } +static int +EphyrInit(void) +{ + /* + * make sure at least one screen + * has been added to the system. + */ + if (!KdCardInfoLast()) { + processScreenArg("640x480", NULL); + } + return hostx_init(); +} + +KdOsFuncs EphyrOsFuncs = { + .Init = EphyrInit, +}; + void OsVendorInit(void) { @@ -381,12 +398,7 @@ OsVendorInit(void) if (hostx_want_host_cursor()) ephyrFuncs.initCursor = &ephyrCursorInit; - if (serverGeneration == 1) { - if (!KdCardInfoLast()) { - processScreenArg("640x480", NULL); - } - hostx_init(); - } + KdOsInit(&EphyrOsFuncs); } KdCardFuncs ephyrFuncs = {