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>
34 #include <ndk/psfuncs.h>
47 #define TAG_VIDEO_PORT 'PDIV'
48 #define TAG_VIDEO_PORT_BUFFER '\0mpV'
49 #define TAG_REQUEST_PACKET 'qRpV'
51 #define GUID_STRING_LENGTH 38 * sizeof(WCHAR)
53 typedef struct _VIDEO_PORT_ADDRESS_MAPPING
58 PHYSICAL_ADDRESS IoAddress
;
59 ULONG SystemIoBusNumber
;
61 } VIDEO_PORT_ADDRESS_MAPPING
, *PVIDEO_PORT_ADDRESS_MAPPING
;
63 struct _VIDEO_PORT_AGP_VIRTUAL_MAPPING
;
65 typedef struct _VIDEO_PORT_AGP_MAPPING
69 PHYSICAL_ADDRESS PhysicalAddress
;
70 } VIDEO_PORT_AGP_MAPPING
, *PVIDEO_PORT_AGP_MAPPING
;
72 typedef struct _VIDEO_PORT_AGP_VIRTUAL_MAPPING
74 PVIDEO_PORT_AGP_MAPPING AgpMapping
;
77 } VIDEO_PORT_AGP_VIRTUAL_MAPPING
, *PVIDEO_PORT_AGP_VIRTUAL_MAPPING
;
79 typedef struct _VIDEO_PORT_DRIVER_EXTENSION
81 VIDEO_HW_INITIALIZATION_DATA InitializationData
;
83 UNICODE_STRING RegistryPath
;
84 } VIDEO_PORT_DRIVER_EXTENSION
, *PVIDEO_PORT_DRIVER_EXTENSION
;
86 typedef struct _VIDEO_PORT_COMMON_EXTENSION
89 } VIDEO_PORT_COMMON_EXTENSION
, *PVIDEO_PORT_COMMON_EXTENSION
;
91 typedef struct _VIDEO_PORT_DEVICE_EXTENSTION
93 VIDEO_PORT_COMMON_EXTENSION Common
;
95 PDRIVER_OBJECT DriverObject
;
96 PDEVICE_OBJECT PhysicalDeviceObject
;
97 PDEVICE_OBJECT FunctionalDeviceObject
;
98 PDEVICE_OBJECT NextDeviceObject
;
99 UNICODE_STRING RegistryPath
;
100 UNICODE_STRING NewRegistryPath
;
101 PKINTERRUPT InterruptObject
;
102 KSPIN_LOCK InterruptSpinLock
;
103 PCM_RESOURCE_LIST AllocatedResources
;
104 ULONG InterruptVector
;
105 ULONG InterruptLevel
;
106 BOOLEAN InterruptShared
;
107 INTERFACE_TYPE AdapterInterfaceType
;
108 ULONG SystemIoBusNumber
;
109 ULONG SystemIoSlotNumber
;
110 LIST_ENTRY AddressMappingListHead
;
112 VIDEO_PORT_DRIVER_EXTENSION
*DriverExtension
;
114 AGP_BUS_INTERFACE_STANDARD AgpInterface
;
116 LIST_ENTRY DmaAdapterList
, ChildDeviceList
;
118 CHAR MiniPortDeviceExtension
[1];
119 } VIDEO_PORT_DEVICE_EXTENSION
, *PVIDEO_PORT_DEVICE_EXTENSION
;
121 typedef struct _VIDEO_PORT_CHILD_EXTENSION
123 VIDEO_PORT_COMMON_EXTENSION Common
;
126 VIDEO_CHILD_TYPE ChildType
;
127 UCHAR ChildDescriptor
[256];
131 PDRIVER_OBJECT DriverObject
;
132 PDEVICE_OBJECT PhysicalDeviceObject
;
134 LIST_ENTRY ListEntry
;
136 CHAR ChildDeviceExtension
[1];
137 } VIDEO_PORT_CHILD_EXTENSION
, *PVIDEO_PORT_CHILD_EXTENSION
;
139 #define VIDEO_PORT_GET_CHILD_EXTENSION(MiniportExtension) \
142 VIDEO_PORT_CHILD_EXTENSION, \
143 ChildDeviceExtension)
145 #define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension) \
148 VIDEO_PORT_DEVICE_EXTENSION, \
149 MiniPortDeviceExtension)
151 typedef struct _VIDEO_PORT_EVENT
154 } VIDEO_PORT_EVENT
, *PVIDEO_PORT_EVENT
;
160 PDEVICE_OBJECT DeviceObject
,
161 PIO_STATUS_BLOCK IoStatusBlock
,
163 PIO_STACK_LOCATION Stack OPTIONAL
);
167 IN PVOID HwDeviceExtension
,
168 IN OUT PINTERFACE Interface
);
173 IntVideoPortDispatchPdoPnp(
174 IN PDEVICE_OBJECT DeviceObject
,
180 IntVideoPortAddDevice(
181 IN PDRIVER_OBJECT DriverObject
,
182 IN PDEVICE_OBJECT PhysicalDeviceObject
);
185 IntVideoPortDispatchOpen(
186 IN PDEVICE_OBJECT DeviceObject
,
190 IntVideoPortDispatchClose(
191 IN PDEVICE_OBJECT DeviceObject
,
195 IntVideoPortDispatchCleanup(
196 IN PDEVICE_OBJECT DeviceObject
,
200 IntVideoPortDispatchDeviceControl(
201 IN PDEVICE_OBJECT DeviceObject
,
205 IntVideoPortDispatchPnp(
206 IN PDEVICE_OBJECT DeviceObject
,
210 IntVideoPortDispatchPower(
211 IN PDEVICE_OBJECT DeviceObject
,
215 IntVideoPortDispatchSystemControl(
216 IN PDEVICE_OBJECT DeviceObject
,
220 IntVideoPortDispatchWrite(
221 IN PDEVICE_OBJECT DeviceObject
,
225 IntVideoPortUnload(PDRIVER_OBJECT DriverObject
);
230 IntVideoPortSetupTimer(
231 IN PDEVICE_OBJECT DeviceObject
,
232 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension
);
237 IntVideoPortSetupInterrupt(
238 IN PDEVICE_OBJECT DeviceObject
,
239 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension
,
240 IN PVIDEO_PORT_CONFIG_INFO ConfigInfo
);
245 IntVideoPortFilterResourceRequirements(
246 IN PDEVICE_OBJECT DeviceObject
,
250 IntVideoPortMapPhysicalMemory(
252 IN PHYSICAL_ADDRESS PhysicalAddress
,
253 IN ULONG SizeInBytes
,
255 IN OUT PVOID
*VirtualAddress OPTIONAL
);
259 extern ULONG CsrssInitialized
;
260 extern PKPROCESS Csrss
;
261 extern ULONG VideoPortDeviceNumber
;
264 IntAttachToCSRSS(PKPROCESS
*CallingProcess
, PKAPC_STATE ApcState
);
267 IntDetachFromCSRSS(PKPROCESS
*CallingProcess
, PKAPC_STATE ApcState
);
270 IntVideoPortCreateAdapterDeviceObject(
271 IN PDRIVER_OBJECT DriverObject
,
272 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension
,
273 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
274 OUT PDEVICE_OBJECT
*DeviceObject OPTIONAL
);
277 IntVideoPortFindAdapter(
278 IN PDRIVER_OBJECT DriverObject
,
279 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension
,
280 IN PDEVICE_OBJECT DeviceObject
);
283 IntVideoPortGetProcAddress(
284 IN PVOID HwDeviceExtension
,
285 IN PUCHAR FunctionName
);
291 IntInitializeVideoAddressSpace(VOID
);
294 IntInt10AllocateBuffer(
298 IN OUT PULONG Length
);
325 IN OUT PINT10_BIOS_ARGUMENTS BiosArguments
);
332 _In_ HANDLE SourceKeyHandle
,
333 _In_ HANDLE DestKeyHandle
);
337 IntCopyRegistryValue(
338 HANDLE SourceKeyHandle
,
339 HANDLE DestKeyHandle
,
344 IntSetupDeviceSettingsKey(
345 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension
);
349 IntCreateNewRegistryPath(
350 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension
);
354 IntCreateRegistryPath(
355 IN PCUNICODE_STRING DriverRegistryPath
,
356 OUT PUNICODE_STRING DeviceRegistryPath
);
359 #endif /* VIDEOPRT_H */