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 Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 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 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
28 #include <ndk/exfuncs.h>
29 #include <ndk/halfuncs.h>
30 #include <ndk/inbvfuncs.h>
31 #include <ndk/kefuncs.h>
32 #include <ndk/rtlfuncs.h>
33 #include <ndk/obfuncs.h>
46 #define TAG_VIDEO_PORT 'PDIV'
47 #define TAG_VIDEO_PORT_BUFFER '\0mpV'
48 #define TAG_REQUEST_PACKET 'qRpV'
50 #define GUID_STRING_LENGTH 38 * sizeof(WCHAR)
52 typedef struct _VIDEO_PORT_ADDRESS_MAPPING
57 PHYSICAL_ADDRESS IoAddress
;
58 ULONG SystemIoBusNumber
;
60 } VIDEO_PORT_ADDRESS_MAPPING
, *PVIDEO_PORT_ADDRESS_MAPPING
;
62 struct _VIDEO_PORT_AGP_VIRTUAL_MAPPING
;
64 typedef struct _VIDEO_PORT_AGP_MAPPING
68 PHYSICAL_ADDRESS PhysicalAddress
;
69 } VIDEO_PORT_AGP_MAPPING
, *PVIDEO_PORT_AGP_MAPPING
;
71 typedef struct _VIDEO_PORT_AGP_VIRTUAL_MAPPING
73 PVIDEO_PORT_AGP_MAPPING AgpMapping
;
76 } VIDEO_PORT_AGP_VIRTUAL_MAPPING
, *PVIDEO_PORT_AGP_VIRTUAL_MAPPING
;
78 typedef struct _VIDEO_PORT_DRIVER_EXTENSION
80 VIDEO_HW_INITIALIZATION_DATA InitializationData
;
82 UNICODE_STRING RegistryPath
;
83 } VIDEO_PORT_DRIVER_EXTENSION
, *PVIDEO_PORT_DRIVER_EXTENSION
;
85 typedef struct _VIDEO_PORT_COMMON_EXTENSION
88 } VIDEO_PORT_COMMON_EXTENSION
, *PVIDEO_PORT_COMMON_EXTENSION
;
90 typedef struct _VIDEO_PORT_DEVICE_EXTENSTION
92 VIDEO_PORT_COMMON_EXTENSION Common
;
94 PDRIVER_OBJECT DriverObject
;
95 PDEVICE_OBJECT PhysicalDeviceObject
;
96 PDEVICE_OBJECT FunctionalDeviceObject
;
97 PDEVICE_OBJECT NextDeviceObject
;
98 UNICODE_STRING RegistryPath
;
99 UNICODE_STRING NewRegistryPath
;
100 PKINTERRUPT InterruptObject
;
101 KSPIN_LOCK InterruptSpinLock
;
102 PCM_RESOURCE_LIST AllocatedResources
;
103 ULONG InterruptVector
;
104 ULONG InterruptLevel
;
105 BOOLEAN InterruptShared
;
106 INTERFACE_TYPE AdapterInterfaceType
;
107 ULONG SystemIoBusNumber
;
108 ULONG SystemIoSlotNumber
;
109 LIST_ENTRY AddressMappingListHead
;
111 VIDEO_PORT_DRIVER_EXTENSION
*DriverExtension
;
113 AGP_BUS_INTERFACE_STANDARD AgpInterface
;
115 LIST_ENTRY DmaAdapterList
, ChildDeviceList
;
116 CHAR MiniPortDeviceExtension
[1];
117 } VIDEO_PORT_DEVICE_EXTENSION
, *PVIDEO_PORT_DEVICE_EXTENSION
;
119 typedef struct _VIDEO_PORT_CHILD_EXTENSION
121 VIDEO_PORT_COMMON_EXTENSION Common
;
124 VIDEO_CHILD_TYPE ChildType
;
125 UCHAR ChildDescriptor
[256];
129 PDRIVER_OBJECT DriverObject
;
130 PDEVICE_OBJECT PhysicalDeviceObject
;
132 LIST_ENTRY ListEntry
;
134 CHAR ChildDeviceExtension
[1];
135 } VIDEO_PORT_CHILD_EXTENSION
, *PVIDEO_PORT_CHILD_EXTENSION
;
137 #define VIDEO_PORT_GET_CHILD_EXTENSION(MiniportExtension) \
140 VIDEO_PORT_CHILD_EXTENSION, \
141 ChildDeviceExtension)
143 #define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension) \
146 VIDEO_PORT_DEVICE_EXTENSION, \
147 MiniPortDeviceExtension)
149 typedef struct _VIDEO_PORT_EVENT
152 } VIDEO_PORT_EVENT
, *PVIDEO_PORT_EVENT
;
158 PDEVICE_OBJECT DeviceObject
,
159 PIO_STATUS_BLOCK IoStatusBlock
,
161 PIO_STACK_LOCATION Stack OPTIONAL
);
165 IN PVOID HwDeviceExtension
,
166 IN OUT PINTERFACE Interface
);
171 IntVideoPortDispatchPdoPnp(
172 IN PDEVICE_OBJECT DeviceObject
,
178 IntVideoPortAddDevice(
179 IN PDRIVER_OBJECT DriverObject
,
180 IN PDEVICE_OBJECT PhysicalDeviceObject
);
183 IntVideoPortDispatchOpen(
184 IN PDEVICE_OBJECT DeviceObject
,
188 IntVideoPortDispatchClose(
189 IN PDEVICE_OBJECT DeviceObject
,
193 IntVideoPortDispatchCleanup(
194 IN PDEVICE_OBJECT DeviceObject
,
198 IntVideoPortDispatchDeviceControl(
199 IN PDEVICE_OBJECT DeviceObject
,
203 IntVideoPortDispatchPnp(
204 IN PDEVICE_OBJECT DeviceObject
,
208 IntVideoPortDispatchPower(
209 IN PDEVICE_OBJECT DeviceObject
,
213 IntVideoPortDispatchSystemControl(
214 IN PDEVICE_OBJECT DeviceObject
,
218 IntVideoPortDispatchWrite(
219 IN PDEVICE_OBJECT DeviceObject
,
223 IntVideoPortUnload(PDRIVER_OBJECT DriverObject
);
228 IntVideoPortSetupTimer(
229 IN PDEVICE_OBJECT DeviceObject
,
230 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension
);
235 IntVideoPortSetupInterrupt(
236 IN PDEVICE_OBJECT DeviceObject
,
237 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension
,
238 IN PVIDEO_PORT_CONFIG_INFO ConfigInfo
);
243 IntVideoPortFilterResourceRequirements(
244 IN PDEVICE_OBJECT DeviceObject
,
248 IntVideoPortMapPhysicalMemory(
250 IN PHYSICAL_ADDRESS PhysicalAddress
,
251 IN ULONG SizeInBytes
,
253 IN OUT PVOID
*VirtualAddress OPTIONAL
);
257 extern ULONG CsrssInitialized
;
258 extern PKPROCESS Csrss
;
259 extern ULONG VideoPortDeviceNumber
;
262 IntAttachToCSRSS(PKPROCESS
*CallingProcess
, PKAPC_STATE ApcState
);
265 IntDetachFromCSRSS(PKPROCESS
*CallingProcess
, PKAPC_STATE ApcState
);
268 IntVideoPortCreateAdapterDeviceObject(
269 IN PDRIVER_OBJECT DriverObject
,
270 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension
,
271 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
272 OUT PDEVICE_OBJECT
*DeviceObject OPTIONAL
);
275 IntVideoPortFindAdapter(
276 IN PDRIVER_OBJECT DriverObject
,
277 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension
,
278 IN PDEVICE_OBJECT DeviceObject
);
281 IntVideoPortGetProcAddress(
282 IN PVOID HwDeviceExtension
,
283 IN PUCHAR FunctionName
);
289 IntInitializeVideoAddressSpace(VOID
);
292 IntInt10AllocateBuffer(
296 IN OUT PULONG Length
);
323 IN OUT PINT10_BIOS_ARGUMENTS BiosArguments
);
330 _In_ HANDLE SourceKeyHandle
,
331 _In_ HANDLE DestKeyHandle
);
335 IntCopyRegistryValue(
336 HANDLE SourceKeyHandle
,
337 HANDLE DestKeyHandle
,
342 IntSetupDeviceSettingsKey(
343 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension
);
347 IntCreateNewRegistryPath(
348 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension
);
352 IntCreateRegistryPath(
353 IN PCUNICODE_STRING DriverRegistryPath
,
354 OUT PUNICODE_STRING DeviceRegistryPath
);
357 #endif /* VIDEOPRT_H */