[VIDEOPRT]
[reactos.git] / reactos / win32ss / drivers / videoprt / videoprt.h
1 /*
2 * VideoPort driver
3 *
4 * Copyright (C) 2002, 2003, 2004 ReactOS Team
5 *
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.
10 *
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.
15 *
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
19 *
20 */
21
22 #ifndef VIDEOPRT_H
23 #define VIDEOPRT_H
24
25 #include <stdio.h>
26
27 #include <ntifs.h>
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>
35
36 #define __BROKEN__
37 #include <miniport.h>
38 #include <video.h>
39 #include <ntagp.h>
40 #include <dderror.h>
41 #include <windef.h>
42 #include <initguid.h>
43 #include <wdmguid.h>
44
45 #include <debug.h>
46
47 #define TAG_VIDEO_PORT 'PDIV'
48 #define TAG_VIDEO_PORT_BUFFER '\0mpV'
49 #define TAG_REQUEST_PACKET 'qRpV'
50
51 #define GUID_STRING_LENGTH 38 * sizeof(WCHAR)
52
53 typedef struct _VIDEO_PORT_ADDRESS_MAPPING
54 {
55 LIST_ENTRY List;
56 PVOID MappedAddress;
57 ULONG NumberOfUchars;
58 PHYSICAL_ADDRESS IoAddress;
59 ULONG SystemIoBusNumber;
60 UINT MappingCount;
61 } VIDEO_PORT_ADDRESS_MAPPING, *PVIDEO_PORT_ADDRESS_MAPPING;
62
63 struct _VIDEO_PORT_AGP_VIRTUAL_MAPPING;
64
65 typedef struct _VIDEO_PORT_AGP_MAPPING
66 {
67 ULONG NumberOfPages;
68 PVOID MapHandle;
69 PHYSICAL_ADDRESS PhysicalAddress;
70 } VIDEO_PORT_AGP_MAPPING, *PVIDEO_PORT_AGP_MAPPING;
71
72 typedef struct _VIDEO_PORT_AGP_VIRTUAL_MAPPING
73 {
74 PVIDEO_PORT_AGP_MAPPING AgpMapping;
75 HANDLE ProcessHandle;
76 PVOID MappedAddress;
77 } VIDEO_PORT_AGP_VIRTUAL_MAPPING, *PVIDEO_PORT_AGP_VIRTUAL_MAPPING;
78
79 typedef struct _VIDEO_PORT_DRIVER_EXTENSION
80 {
81 VIDEO_HW_INITIALIZATION_DATA InitializationData;
82 PVOID HwContext;
83 UNICODE_STRING RegistryPath;
84 } VIDEO_PORT_DRIVER_EXTENSION, *PVIDEO_PORT_DRIVER_EXTENSION;
85
86 typedef struct _VIDEO_PORT_COMMON_EXTENSION
87 {
88 BOOLEAN Fdo;
89 } VIDEO_PORT_COMMON_EXTENSION, *PVIDEO_PORT_COMMON_EXTENSION;
90
91 typedef struct _VIDEO_PORT_DEVICE_EXTENSTION
92 {
93 VIDEO_PORT_COMMON_EXTENSION Common;
94 ULONG DeviceNumber;
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;
111 KDPC DpcObject;
112 VIDEO_PORT_DRIVER_EXTENSION *DriverExtension;
113 ULONG DeviceOpened;
114 AGP_BUS_INTERFACE_STANDARD AgpInterface;
115 KMUTEX DeviceLock;
116 LIST_ENTRY DmaAdapterList, ChildDeviceList;
117 ULONG SessionId;
118 CHAR MiniPortDeviceExtension[1];
119 } VIDEO_PORT_DEVICE_EXTENSION, *PVIDEO_PORT_DEVICE_EXTENSION;
120
121 typedef struct _VIDEO_PORT_CHILD_EXTENSION
122 {
123 VIDEO_PORT_COMMON_EXTENSION Common;
124
125 ULONG ChildId;
126 VIDEO_CHILD_TYPE ChildType;
127 UCHAR ChildDescriptor[256];
128
129 BOOLEAN EdidValid;
130
131 PDRIVER_OBJECT DriverObject;
132 PDEVICE_OBJECT PhysicalDeviceObject;
133
134 LIST_ENTRY ListEntry;
135
136 CHAR ChildDeviceExtension[1];
137 } VIDEO_PORT_CHILD_EXTENSION, *PVIDEO_PORT_CHILD_EXTENSION;
138
139 #define VIDEO_PORT_GET_CHILD_EXTENSION(MiniportExtension) \
140 CONTAINING_RECORD( \
141 MiniportExtension, \
142 VIDEO_PORT_CHILD_EXTENSION, \
143 ChildDeviceExtension)
144
145 #define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension) \
146 CONTAINING_RECORD( \
147 MiniportExtension, \
148 VIDEO_PORT_DEVICE_EXTENSION, \
149 MiniPortDeviceExtension)
150
151 typedef struct _VIDEO_PORT_EVENT
152 {
153 ENG_EVENT;
154 } VIDEO_PORT_EVENT, *PVIDEO_PORT_EVENT;
155
156 /* agp.c */
157
158 NTSTATUS
159 IopInitiatePnpIrp(
160 PDEVICE_OBJECT DeviceObject,
161 PIO_STATUS_BLOCK IoStatusBlock,
162 UCHAR MinorFunction,
163 PIO_STACK_LOCATION Stack OPTIONAL);
164
165 NTSTATUS NTAPI
166 IntAgpGetInterface(
167 IN PVOID HwDeviceExtension,
168 IN OUT PINTERFACE Interface);
169
170 /* child.c */
171
172 NTSTATUS NTAPI
173 IntVideoPortDispatchPdoPnp(
174 IN PDEVICE_OBJECT DeviceObject,
175 IN PIRP Irp);
176
177 /* dispatch.c */
178
179 NTSTATUS NTAPI
180 IntVideoPortAddDevice(
181 IN PDRIVER_OBJECT DriverObject,
182 IN PDEVICE_OBJECT PhysicalDeviceObject);
183
184 NTSTATUS NTAPI
185 IntVideoPortDispatchOpen(
186 IN PDEVICE_OBJECT DeviceObject,
187 IN PIRP Irp);
188
189 NTSTATUS NTAPI
190 IntVideoPortDispatchClose(
191 IN PDEVICE_OBJECT DeviceObject,
192 IN PIRP Irp);
193
194 NTSTATUS NTAPI
195 IntVideoPortDispatchCleanup(
196 IN PDEVICE_OBJECT DeviceObject,
197 IN PIRP Irp);
198
199 NTSTATUS NTAPI
200 IntVideoPortDispatchDeviceControl(
201 IN PDEVICE_OBJECT DeviceObject,
202 IN PIRP Irp);
203
204 NTSTATUS NTAPI
205 IntVideoPortDispatchPnp(
206 IN PDEVICE_OBJECT DeviceObject,
207 IN PIRP Irp);
208
209 NTSTATUS NTAPI
210 IntVideoPortDispatchPower(
211 IN PDEVICE_OBJECT DeviceObject,
212 IN PIRP Irp);
213
214 NTSTATUS NTAPI
215 IntVideoPortDispatchSystemControl(
216 IN PDEVICE_OBJECT DeviceObject,
217 IN PIRP Irp);
218
219 NTSTATUS NTAPI
220 IntVideoPortDispatchWrite(
221 IN PDEVICE_OBJECT DeviceObject,
222 IN PIRP Irp);
223
224 VOID NTAPI
225 IntVideoPortUnload(PDRIVER_OBJECT DriverObject);
226
227 /* timer.c */
228
229 BOOLEAN NTAPI
230 IntVideoPortSetupTimer(
231 IN PDEVICE_OBJECT DeviceObject,
232 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension);
233
234 /* interrupt.c */
235
236 BOOLEAN NTAPI
237 IntVideoPortSetupInterrupt(
238 IN PDEVICE_OBJECT DeviceObject,
239 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
240 IN PVIDEO_PORT_CONFIG_INFO ConfigInfo);
241
242 /* resource.c */
243
244 NTSTATUS NTAPI
245 IntVideoPortFilterResourceRequirements(
246 IN PDEVICE_OBJECT DeviceObject,
247 IN PIRP Irp);
248
249 NTSTATUS NTAPI
250 IntVideoPortMapPhysicalMemory(
251 IN HANDLE Process,
252 IN PHYSICAL_ADDRESS PhysicalAddress,
253 IN ULONG SizeInBytes,
254 IN ULONG Protect,
255 IN OUT PVOID *VirtualAddress OPTIONAL);
256
257 /* videoprt.c */
258
259 extern ULONG CsrssInitialized;
260 extern PKPROCESS Csrss;
261 extern ULONG VideoPortDeviceNumber;
262
263 VOID FASTCALL
264 IntAttachToCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState);
265
266 VOID FASTCALL
267 IntDetachFromCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState);
268
269 NTSTATUS NTAPI
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);
275
276 NTSTATUS NTAPI
277 IntVideoPortFindAdapter(
278 IN PDRIVER_OBJECT DriverObject,
279 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
280 IN PDEVICE_OBJECT DeviceObject);
281
282 PVOID NTAPI
283 IntVideoPortGetProcAddress(
284 IN PVOID HwDeviceExtension,
285 IN PUCHAR FunctionName);
286
287 /* int10.c */
288
289 NTSTATUS
290 NTAPI
291 IntInitializeVideoAddressSpace(VOID);
292
293 VP_STATUS NTAPI
294 IntInt10AllocateBuffer(
295 IN PVOID Context,
296 OUT PUSHORT Seg,
297 OUT PUSHORT Off,
298 IN OUT PULONG Length);
299
300 VP_STATUS NTAPI
301 IntInt10FreeBuffer(
302 IN PVOID Context,
303 IN USHORT Seg,
304 IN USHORT Off);
305
306 VP_STATUS NTAPI
307 IntInt10ReadMemory(
308 IN PVOID Context,
309 IN USHORT Seg,
310 IN USHORT Off,
311 OUT PVOID Buffer,
312 IN ULONG Length);
313
314 VP_STATUS NTAPI
315 IntInt10WriteMemory(
316 IN PVOID Context,
317 IN USHORT Seg,
318 IN USHORT Off,
319 IN PVOID Buffer,
320 IN ULONG Length);
321
322 VP_STATUS NTAPI
323 IntInt10CallBios(
324 IN PVOID Context,
325 IN OUT PINT10_BIOS_ARGUMENTS BiosArguments);
326
327 /* registry.c */
328
329 NTSTATUS
330 NTAPI
331 IntCopyRegistryKey(
332 _In_ HANDLE SourceKeyHandle,
333 _In_ HANDLE DestKeyHandle);
334
335 NTSTATUS
336 NTAPI
337 IntCopyRegistryValue(
338 HANDLE SourceKeyHandle,
339 HANDLE DestKeyHandle,
340 PWSTR ValueName);
341
342 NTSTATUS
343 NTAPI
344 IntSetupDeviceSettingsKey(
345 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension);
346
347 NTSTATUS
348 NTAPI
349 IntCreateNewRegistryPath(
350 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension);
351
352 NTSTATUS
353 NTAPI
354 IntCreateRegistryPath(
355 IN PCUNICODE_STRING DriverRegistryPath,
356 OUT PUNICODE_STRING DeviceRegistryPath);
357
358
359 #endif /* VIDEOPRT_H */