From 0c19771290db33da0d145ccb51ce30729904840f Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Tue, 10 Nov 2009 23:01:42 +0000 Subject: [PATCH] - Missed in previous commit: Fix VideoPortEnable/DisableInterrupt -- they should only fail if the driver didn't provide an ISR (documented). svn path=/trunk/; revision=44086 --- reactos/drivers/video/videoprt/interrupt.c | 58 ++++++++++++++-------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/reactos/drivers/video/videoprt/interrupt.c b/reactos/drivers/video/videoprt/interrupt.c index 67efe8fe93d..54a5b9566cb 100644 --- a/reactos/drivers/video/videoprt/interrupt.c +++ b/reactos/drivers/video/videoprt/interrupt.c @@ -106,42 +106,56 @@ IntVideoPortSetupInterrupt( /* * @implemented */ - -VP_STATUS NTAPI +VP_STATUS +NTAPI VideoPortEnableInterrupt(IN PVOID HwDeviceExtension) { - PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension; - BOOLEAN Status; + PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension; + BOOLEAN InterruptValid; - TRACE_(VIDEOPRT, "VideoPortEnableInterrupt\n"); + /* Get the device extension */ + DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension); - DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension); + /* Fail if the driver didn't register an ISR */ + if (!DeviceExtension->DriverExtension->InitializationData.HwInterrupt) + { + /* No ISR, no interrupts */ + return ERROR_INVALID_FUNCTION; + } - Status = HalEnableSystemInterrupt( - DeviceExtension->InterruptVector, - 0, - DeviceExtension->InterruptLevel); + /* Re-enable the interrupt and return */ + InterruptValid = HalEnableSystemInterrupt(DeviceExtension->InterruptVector, + 0, + DeviceExtension->InterruptLevel); - return Status ? NO_ERROR : ERROR_INVALID_PARAMETER; + /* Make sure the interrupt was valid */ + ASSERT(InterruptValid == TRUE); + + /* Return to caller */ + return NO_ERROR; } /* * @implemented */ - -VP_STATUS NTAPI +VP_STATUS +NTAPI VideoPortDisableInterrupt(IN PVOID HwDeviceExtension) { - PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension; - BOOLEAN Status; + PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension; - TRACE_(VIDEOPRT, "VideoPortDisableInterrupt\n"); + /* Get the device extension */ + DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension); - DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension); + /* Fail if the driver didn't register an ISR */ + if (!DeviceExtension->DriverExtension->InitializationData.HwInterrupt) + { + /* No ISR, no interrupts */ + return ERROR_INVALID_FUNCTION; + } - Status = HalDisableSystemInterrupt( - DeviceExtension->InterruptVector, - 0); - - return Status ? NO_ERROR : ERROR_INVALID_PARAMETER; + /* Disable the interrupt and return */ + HalDisableSystemInterrupt(DeviceExtension->InterruptVector, + 0); + return NO_ERROR; }