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
35 #define TAG_VIDEO_PORT 'PDIV'
36 #define TAG_VIDEO_PORT_BUFFER '\0mpV'
37 #define TAG_REQUEST_PACKET 'qRpV'
39 #define GUID_STRING_LENGTH 38 * sizeof(WCHAR)
41 typedef struct _VIDEO_PORT_ADDRESS_MAPPING
46 PHYSICAL_ADDRESS IoAddress
;
47 ULONG SystemIoBusNumber
;
49 } VIDEO_PORT_ADDRESS_MAPPING
, *PVIDEO_PORT_ADDRESS_MAPPING
;
51 struct _VIDEO_PORT_AGP_VIRTUAL_MAPPING
;
53 typedef struct _VIDEO_PORT_AGP_MAPPING
57 PHYSICAL_ADDRESS PhysicalAddress
;
58 } VIDEO_PORT_AGP_MAPPING
, *PVIDEO_PORT_AGP_MAPPING
;
60 typedef struct _VIDEO_PORT_AGP_VIRTUAL_MAPPING
62 PVIDEO_PORT_AGP_MAPPING AgpMapping
;
65 } VIDEO_PORT_AGP_VIRTUAL_MAPPING
, *PVIDEO_PORT_AGP_VIRTUAL_MAPPING
;
67 typedef struct _VIDEO_PORT_DRIVER_EXTENSION
69 VIDEO_HW_INITIALIZATION_DATA InitializationData
;
71 UNICODE_STRING RegistryPath
;
72 } VIDEO_PORT_DRIVER_EXTENSION
, *PVIDEO_PORT_DRIVER_EXTENSION
;
74 typedef struct _VIDEO_PORT_COMMON_EXTENSION
77 } VIDEO_PORT_COMMON_EXTENSION
, *PVIDEO_PORT_COMMON_EXTENSION
;
79 typedef struct _VIDEO_PORT_DEVICE_EXTENSTION
81 VIDEO_PORT_COMMON_EXTENSION Common
;
83 PDRIVER_OBJECT DriverObject
;
84 PDEVICE_OBJECT PhysicalDeviceObject
;
85 PDEVICE_OBJECT FunctionalDeviceObject
;
86 PDEVICE_OBJECT NextDeviceObject
;
87 UNICODE_STRING RegistryPath
;
88 UNICODE_STRING NewRegistryPath
;
89 PKINTERRUPT InterruptObject
;
90 KSPIN_LOCK InterruptSpinLock
;
91 PCM_RESOURCE_LIST AllocatedResources
;
92 ULONG InterruptVector
;
94 BOOLEAN InterruptShared
;
95 INTERFACE_TYPE AdapterInterfaceType
;
96 ULONG SystemIoBusNumber
;
97 ULONG SystemIoSlotNumber
;
98 LIST_ENTRY AddressMappingListHead
;
100 VIDEO_PORT_DRIVER_EXTENSION
*DriverExtension
;
102 AGP_BUS_INTERFACE_STANDARD AgpInterface
;
104 LIST_ENTRY DmaAdapterList
, ChildDeviceList
;
106 CHAR MiniPortDeviceExtension
[1];
107 } VIDEO_PORT_DEVICE_EXTENSION
, *PVIDEO_PORT_DEVICE_EXTENSION
;
109 typedef struct _VIDEO_PORT_CHILD_EXTENSION
111 VIDEO_PORT_COMMON_EXTENSION Common
;
114 VIDEO_CHILD_TYPE ChildType
;
115 UCHAR ChildDescriptor
[256];
119 PDRIVER_OBJECT DriverObject
;
120 PDEVICE_OBJECT PhysicalDeviceObject
;
122 LIST_ENTRY ListEntry
;
124 CHAR ChildDeviceExtension
[1];
125 } VIDEO_PORT_CHILD_EXTENSION
, *PVIDEO_PORT_CHILD_EXTENSION
;
127 #define VIDEO_PORT_GET_CHILD_EXTENSION(MiniportExtension) \
130 VIDEO_PORT_CHILD_EXTENSION, \
131 ChildDeviceExtension)
133 #define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension) \
136 VIDEO_PORT_DEVICE_EXTENSION, \
137 MiniPortDeviceExtension)
139 typedef struct _VIDEO_PORT_EVENT
142 } VIDEO_PORT_EVENT
, *PVIDEO_PORT_EVENT
;
148 PDEVICE_OBJECT DeviceObject
,
149 PIO_STATUS_BLOCK IoStatusBlock
,
151 PIO_STACK_LOCATION Stack OPTIONAL
);
155 IN PVOID HwDeviceExtension
,
156 IN OUT PINTERFACE Interface
);
161 IntVideoPortDispatchPdoPnp(
162 IN PDEVICE_OBJECT DeviceObject
,
168 IntVideoPortAddDevice(
169 IN PDRIVER_OBJECT DriverObject
,
170 IN PDEVICE_OBJECT PhysicalDeviceObject
);
173 IntVideoPortDispatchOpen(
174 IN PDEVICE_OBJECT DeviceObject
,
178 IntVideoPortDispatchClose(
179 IN PDEVICE_OBJECT DeviceObject
,
183 IntVideoPortDispatchCleanup(
184 IN PDEVICE_OBJECT DeviceObject
,
188 IntVideoPortDispatchDeviceControl(
189 IN PDEVICE_OBJECT DeviceObject
,
193 IntVideoPortDispatchPnp(
194 IN PDEVICE_OBJECT DeviceObject
,
198 IntVideoPortDispatchPower(
199 IN PDEVICE_OBJECT DeviceObject
,
203 IntVideoPortDispatchSystemControl(
204 IN PDEVICE_OBJECT DeviceObject
,
208 IntVideoPortDispatchWrite(
209 IN PDEVICE_OBJECT DeviceObject
,
213 IntVideoPortUnload(PDRIVER_OBJECT DriverObject
);
218 IntVideoPortSetupTimer(
219 IN PDEVICE_OBJECT DeviceObject
,
220 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension
);
225 IntVideoPortSetupInterrupt(
226 IN PDEVICE_OBJECT DeviceObject
,
227 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension
,
228 IN PVIDEO_PORT_CONFIG_INFO ConfigInfo
);
233 IntVideoPortFilterResourceRequirements(
234 IN PDEVICE_OBJECT DeviceObject
,
238 IntVideoPortMapPhysicalMemory(
240 IN PHYSICAL_ADDRESS PhysicalAddress
,
241 IN ULONG SizeInBytes
,
243 IN OUT PVOID
*VirtualAddress OPTIONAL
);
247 extern ULONG CsrssInitialized
;
248 extern PKPROCESS Csrss
;
249 extern ULONG VideoPortDeviceNumber
;
252 IntAttachToCSRSS(PKPROCESS
*CallingProcess
, PKAPC_STATE ApcState
);
255 IntDetachFromCSRSS(PKPROCESS
*CallingProcess
, PKAPC_STATE ApcState
);
258 IntVideoPortCreateAdapterDeviceObject(
259 IN PDRIVER_OBJECT DriverObject
,
260 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension
,
261 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
262 OUT PDEVICE_OBJECT
*DeviceObject OPTIONAL
);
265 IntVideoPortFindAdapter(
266 IN PDRIVER_OBJECT DriverObject
,
267 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension
,
268 IN PDEVICE_OBJECT DeviceObject
);
271 IntVideoPortGetProcAddress(
272 IN PVOID HwDeviceExtension
,
273 IN PUCHAR FunctionName
);
279 IntInitializeVideoAddressSpace(VOID
);
282 IntInt10AllocateBuffer(
286 IN OUT PULONG Length
);
313 IN OUT PINT10_BIOS_ARGUMENTS BiosArguments
);
320 _In_ HANDLE SourceKeyHandle
,
321 _In_ HANDLE DestKeyHandle
);
325 IntCopyRegistryValue(
326 HANDLE SourceKeyHandle
,
327 HANDLE DestKeyHandle
,
332 IntSetupDeviceSettingsKey(
333 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension
);
337 IntCreateNewRegistryPath(
338 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension
);
342 IntCreateRegistryPath(
343 IN PCUNICODE_STRING DriverRegistryPath
,
344 OUT PUNICODE_STRING DeviceRegistryPath
);
347 #endif /* VIDEOPRT_H */