4 * Copyright (C) 2002, 2003, 2004 ReactOS Team
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
16 * You should have received a copy of the GNU Library General Public
17 * License along with this library; see the file COPYING.LIB.
18 * If not, write to the Free Software Foundation,
19 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 /* PRIVATE FUNCTIONS **********************************************************/
29 IntVideoPortInterruptRoutine(
30 IN
struct _KINTERRUPT
*Interrupt
,
31 IN PVOID ServiceContext
)
33 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension
= ServiceContext
;
35 ASSERT(DeviceExtension
->DriverExtension
->InitializationData
.HwInterrupt
!= NULL
);
37 return DeviceExtension
->DriverExtension
->InitializationData
.HwInterrupt(
38 &DeviceExtension
->MiniPortDeviceExtension
);
42 IntVideoPortSetupInterrupt(
43 IN PDEVICE_OBJECT DeviceObject
,
44 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension
,
45 IN PVIDEO_PORT_CONFIG_INFO ConfigInfo
)
48 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension
;
50 DeviceExtension
= (PVIDEO_PORT_DEVICE_EXTENSION
)DeviceObject
->DeviceExtension
;
52 if (ConfigInfo
->BusInterruptVector
== 0)
53 ConfigInfo
->BusInterruptVector
= DeviceExtension
->InterruptVector
;
55 if (ConfigInfo
->BusInterruptLevel
== 0)
56 ConfigInfo
->BusInterruptLevel
= DeviceExtension
->InterruptLevel
;
58 if (DriverExtension
->InitializationData
.HwInterrupt
!= NULL
)
60 ULONG InterruptVector
;
64 InterruptVector
= HalGetInterruptVector(
65 ConfigInfo
->AdapterInterfaceType
,
66 ConfigInfo
->SystemIoBusNumber
,
67 ConfigInfo
->BusInterruptLevel
,
68 ConfigInfo
->BusInterruptVector
,
72 if (InterruptVector
== 0)
74 DPRINT("HalGetInterruptVector failed\n");
78 KeInitializeSpinLock(&DeviceExtension
->InterruptSpinLock
);
79 Status
= IoConnectInterrupt(
80 &DeviceExtension
->InterruptObject
,
81 IntVideoPortInterruptRoutine
,
83 &DeviceExtension
->InterruptSpinLock
,
87 ConfigInfo
->InterruptMode
,
92 if (!NT_SUCCESS(Status
))
94 DPRINT("IoConnectInterrupt failed with status 0x%08x\n", Status
);
102 /* PUBLIC FUNCTIONS ***********************************************************/
109 VideoPortEnableInterrupt(IN PVOID HwDeviceExtension
)
111 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension
;
114 DPRINT("VideoPortEnableInterrupt\n");
116 DeviceExtension
= VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension
);
118 Status
= HalEnableSystemInterrupt(
119 DeviceExtension
->InterruptVector
,
121 DeviceExtension
->InterruptLevel
);
123 return Status
? NO_ERROR
: ERROR_INVALID_ACCESS
;
131 VideoPortDisableInterrupt(IN PVOID HwDeviceExtension
)
133 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension
;
136 DPRINT("VideoPortDisableInterrupt\n");
138 DeviceExtension
= VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension
);
140 Status
= HalDisableSystemInterrupt(
141 DeviceExtension
->InterruptVector
,
144 return Status
? NO_ERROR
: ERROR_INVALID_ACCESS
;