From b75dfe3d58b78999222e55cda3530798804474d4 Mon Sep 17 00:00:00 2001 From: stefan11111 Date: Sun, 6 Jul 2025 17:16:44 +0300 Subject: [PATCH] kdrive: add OS/platform callback for screen enable/disable New OS/platform callbacks that are called when screens are enabled or disabled. This allows individual Kdrive implementations to take specific action, eg. configure/reset graphics hardware. Signed-off-by: stefan11111 Signed-off-by: Enrico Weigelt, metux IT consult --- hw/kdrive/src/kdrive.c | 6 ++++++ hw/kdrive/src/kdrive.h | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c index 8db7773d2..5dab3aec2 100644 --- a/hw/kdrive/src/kdrive.c +++ b/hw/kdrive/src/kdrive.c @@ -154,6 +154,8 @@ static void KdDisableScreens(void) { KdSuspend(); + if (kdEnabled && (kdOsFuncs->Disable)) + kdOsFuncs->Disable(); kdEnabled = FALSE; } @@ -604,6 +606,8 @@ Bool KdCloseScreen(ScreenPtr pScreen) * Clean up OS when last card is closed */ if (card == kdCardInfo) { + if (kdEnabled && (kdOsFuncs->Disable)) + kdOsFuncs->Disable(); kdEnabled = FALSE; } } @@ -818,6 +822,8 @@ KdScreenInit(ScreenPtr pScreen, int argc, char **argv) /* * Enable the hardware */ + if ((!kdEnabled) && (kdOsFuncs->Enable)) + kdOsFuncs->Enable(); kdEnabled = TRUE; if (screen->mynum == card->selected) { diff --git a/hw/kdrive/src/kdrive.h b/hw/kdrive/src/kdrive.h index 34e87347c..0df049830 100644 --- a/hw/kdrive/src/kdrive.h +++ b/hw/kdrive/src/kdrive.h @@ -280,9 +280,9 @@ void KdRemoveKeyboard(KdKeyboardInfo * ki); typedef struct _KdOsFuncs { int (*Init) (void); /* Only called when the X server is started, when serverGeneration == 1 */ - void (*Enable) (void); + void (*Enable) (void); /* called when screen is enabled */ + void (*Disable) (void); /* called when screen is disabled */ Bool (*SpecialKey) (KeySym); - void (*Disable) (void); void (*Fini) (void); void (*pollEvents) (void); void (*Bell) (int, int, int); /* if not NULL called instead of the keyboard driver's function */