From 809e2841aaa54662a42498aacec558bc813bba1c Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 8 Nov 2006 15:27:58 +0200 Subject: [PATCH] xfree86: add general handler, port ACPI to it (bug #5665) Add 'general' handler registration, which will not trigger DPMS when an event comes in. Make ACPI use this. --- hw/xfree86/common/xf86.h | 4 + hw/xfree86/common/xf86Events.c | 107 +++++++++++++++++++++---- hw/xfree86/os-support/linux/lnx_acpi.c | 4 +- 3 files changed, 96 insertions(+), 19 deletions(-) diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h index 458750007..51125304e 100644 --- a/hw/xfree86/common/xf86.h +++ b/hw/xfree86/common/xf86.h @@ -222,6 +222,10 @@ pointer xf86AddInputHandler(int fd, InputHandlerProc proc, pointer data); int xf86RemoveInputHandler(pointer handler); void xf86DisableInputHandler(pointer handler); void xf86EnableInputHandler(pointer handler); +pointer xf86AddGeneralHandler(int fd, InputHandlerProc proc, pointer data); +int xf86RemoveGeneralHandler(pointer handler); +void xf86DisableGeneralHandler(pointer handler); +void xf86EnableGeneralHandler(pointer handler); void xf86InterceptSignals(int *signo); void xf86InterceptSigIll(void (*sigillhandler)(void)); Bool xf86EnableVTSwitch(Bool new); diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c index 6ce9319c2..905c56ae6 100644 --- a/hw/xfree86/common/xf86Events.c +++ b/hw/xfree86/common/xf86Events.c @@ -1014,8 +1014,8 @@ xf86VTSwitch() /* Input handler registration */ -_X_EXPORT pointer -xf86AddInputHandler(int fd, InputHandlerProc proc, pointer data) +static pointer +addInputHandler(int fd, InputHandlerProc proc, pointer data) { IHPtr ih; @@ -1034,25 +1034,33 @@ xf86AddInputHandler(int fd, InputHandlerProc proc, pointer data) ih->next = InputHandlers; InputHandlers = ih; - AddEnabledDevice(fd); - return ih; } -_X_EXPORT int -xf86RemoveInputHandler(pointer handler) -{ - IHPtr ih, p; - int fd; - - if (!handler) - return -1; +_X_EXPORT pointer +xf86AddInputHandler(int fd, InputHandlerProc proc, pointer data) +{ + IHPtr ih = addInputHandler(fd, proc, data); - ih = handler; - fd = ih->fd; - - if (ih->fd >= 0) - RemoveEnabledDevice(ih->fd); + if (ih) + AddEnabledDevice(fd); + return ih; +} + +_X_EXPORT pointer +xf86AddGeneralHandler(int fd, InputHandlerProc proc, pointer data) +{ + IHPtr ih = addInputHandler(fd, proc, data); + + if (ih) + AddGeneralSocket(fd); + return ih; +} + +static void +removeInputHandler(IHPtr ih) +{ + IHPtr p; if (ih == InputHandlers) InputHandlers = ih->next; @@ -1064,6 +1072,43 @@ xf86RemoveInputHandler(pointer handler) p->next = ih->next; } xfree(ih); +} + +_X_EXPORT int +xf86RemoveInputHandler(pointer handler) +{ + IHPtr ih; + int fd; + + if (!handler) + return -1; + + ih = handler; + fd = ih->fd; + + if (ih->fd >= 0) + RemoveEnabledDevice(ih->fd); + removeInputHandler(ih); + + return fd; +} + +_X_EXPORT int +xf86RemoveGeneralHandler(pointer handler) +{ + IHPtr ih; + int fd; + + if (!handler) + return -1; + + ih = handler; + fd = ih->fd; + + if (ih->fd >= 0) + RemoveGeneralSocket(ih->fd); + removeInputHandler(ih); + return fd; } @@ -1081,6 +1126,20 @@ xf86DisableInputHandler(pointer handler) RemoveEnabledDevice(ih->fd); } +_X_EXPORT void +xf86DisableGeneralHandler(pointer handler) +{ + IHPtr ih; + + if (!handler) + return; + + ih = handler; + ih->enabled = FALSE; + if (ih->fd >= 0) + RemoveGeneralSocket(ih->fd); +} + _X_EXPORT void xf86EnableInputHandler(pointer handler) { @@ -1095,6 +1154,20 @@ xf86EnableInputHandler(pointer handler) AddEnabledDevice(ih->fd); } +_X_EXPORT void +xf86EnableGeneralHandler(pointer handler) +{ + IHPtr ih; + + if (!handler) + return; + + ih = handler; + ih->enabled = TRUE; + if (ih->fd >= 0) + AddGeneralSocket(ih->fd); +} + /* * As used currently by the DRI, the return value is ignored. */ diff --git a/hw/xfree86/os-support/linux/lnx_acpi.c b/hw/xfree86/os-support/linux/lnx_acpi.c index eca76dbf3..aa30e72c2 100644 --- a/hw/xfree86/os-support/linux/lnx_acpi.c +++ b/hw/xfree86/os-support/linux/lnx_acpi.c @@ -163,7 +163,7 @@ lnxACPIOpen(void) xf86PMGetEventFromOs = lnxACPIGetEventFromOs; xf86PMConfirmEventToOs = lnxACPIConfirmEventToOs; - ACPIihPtr = xf86AddInputHandler(fd,xf86HandlePMEvents,NULL); + ACPIihPtr = xf86AddGeneralHandler(fd,xf86HandlePMEvents,NULL); xf86MsgVerb(X_INFO,3,"Open ACPI successful (%s)\n", ACPI_SOCKET); return lnxCloseACPI; @@ -178,7 +178,7 @@ lnxCloseACPI(void) ErrorF("ACPI: Closing device\n"); #endif if (ACPIihPtr) { - fd = xf86RemoveInputHandler(ACPIihPtr); + fd = xf86RemoveGeneralHandler(ACPIihPtr); shutdown(fd, 2); close(fd); ACPIihPtr = NULL;