[USER32_WSPRINTF]
[reactos.git] / reactos / drivers / video / 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
34 #define __BROKEN__
35 #include <miniport.h>
36 #include <video.h>
37 #include <ntagp.h>
38 #include <dderror.h>
39 #include <windef.h>
40 #include <initguid.h>
41 #include <wdmguid.h>
42
43 #include <debug.h>
44
45 #define TAG_VIDEO_PORT 'PDIV'
46 #define TAG_VIDEO_PORT_BUFFER '\0mpV'
47
48 typedef struct _VIDEO_PORT_ADDRESS_MAPPING
49 {
50 LIST_ENTRY List;
51 PVOID MappedAddress;
52 ULONG NumberOfUchars;
53 PHYSICAL_ADDRESS IoAddress;
54 ULONG SystemIoBusNumber;
55 UINT MappingCount;
56 } VIDEO_PORT_ADDRESS_MAPPING, *PVIDEO_PORT_ADDRESS_MAPPING;
57
58 struct _VIDEO_PORT_AGP_VIRTUAL_MAPPING;
59
60 typedef struct _VIDEO_PORT_AGP_MAPPING
61 {
62 ULONG NumberOfPages;
63 PVOID MapHandle;
64 PHYSICAL_ADDRESS PhysicalAddress;
65 } VIDEO_PORT_AGP_MAPPING, *PVIDEO_PORT_AGP_MAPPING;
66
67 typedef struct _VIDEO_PORT_AGP_VIRTUAL_MAPPING
68 {
69 PVIDEO_PORT_AGP_MAPPING AgpMapping;
70 HANDLE ProcessHandle;
71 PVOID MappedAddress;
72 } VIDEO_PORT_AGP_VIRTUAL_MAPPING, *PVIDEO_PORT_AGP_VIRTUAL_MAPPING;
73
74 typedef struct _VIDEO_PORT_DRIVER_EXTENSION
75 {
76 VIDEO_HW_INITIALIZATION_DATA InitializationData;
77 PVOID HwContext;
78 UNICODE_STRING RegistryPath;
79 } VIDEO_PORT_DRIVER_EXTENSION, *PVIDEO_PORT_DRIVER_EXTENSION;
80
81 typedef struct _VIDEO_PORT_COMMON_EXTENSION
82 {
83 BOOLEAN Fdo;
84 } VIDEO_PORT_COMMON_EXTENSION, *PVIDEO_PORT_COMMON_EXTENSION;
85
86 typedef struct _VIDEO_PORT_DEVICE_EXTENSTION
87 {
88 VIDEO_PORT_COMMON_EXTENSION Common;
89 ULONG DeviceNumber;
90 PDRIVER_OBJECT DriverObject;
91 PDEVICE_OBJECT PhysicalDeviceObject;
92 PDEVICE_OBJECT FunctionalDeviceObject;
93 PDEVICE_OBJECT NextDeviceObject;
94 UNICODE_STRING RegistryPath;
95 PKINTERRUPT InterruptObject;
96 KSPIN_LOCK InterruptSpinLock;
97 PCM_RESOURCE_LIST AllocatedResources;
98 ULONG InterruptVector;
99 ULONG InterruptLevel;
100 BOOLEAN InterruptShared;
101 INTERFACE_TYPE AdapterInterfaceType;
102 ULONG SystemIoBusNumber;
103 ULONG SystemIoSlotNumber;
104 LIST_ENTRY AddressMappingListHead;
105 KDPC DpcObject;
106 VIDEO_PORT_DRIVER_EXTENSION *DriverExtension;
107 ULONG DeviceOpened;
108 AGP_BUS_INTERFACE_STANDARD AgpInterface;
109 KMUTEX DeviceLock;
110 LIST_ENTRY DmaAdapterList, ChildDeviceList;
111 CHAR MiniPortDeviceExtension[1];
112 } VIDEO_PORT_DEVICE_EXTENSION, *PVIDEO_PORT_DEVICE_EXTENSION;
113
114 typedef struct _VIDEO_PORT_CHILD_EXTENSION
115 {
116 VIDEO_PORT_COMMON_EXTENSION Common;
117
118 ULONG ChildId;
119 VIDEO_CHILD_TYPE ChildType;
120 UCHAR ChildDescriptor[256];
121
122 BOOLEAN EdidValid;
123
124 PDRIVER_OBJECT DriverObject;
125 PDEVICE_OBJECT PhysicalDeviceObject;
126
127 LIST_ENTRY ListEntry;
128
129 CHAR ChildDeviceExtension[1];
130 } VIDEO_PORT_CHILD_EXTENSION, *PVIDEO_PORT_CHILD_EXTENSION;
131
132 #define VIDEO_PORT_GET_CHILD_EXTENSION(MiniportExtension) \
133 CONTAINING_RECORD( \
134 MiniportExtension, \
135 VIDEO_PORT_CHILD_EXTENSION, \
136 ChildDeviceExtension)
137
138 #define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension) \
139 CONTAINING_RECORD( \
140 MiniportExtension, \
141 VIDEO_PORT_DEVICE_EXTENSION, \
142 MiniPortDeviceExtension)
143
144 typedef struct _VIDEO_PORT_EVENT
145 {
146 ENG_EVENT;
147 } VIDEO_PORT_EVENT, *PVIDEO_PORT_EVENT;
148
149 /* agp.c */
150
151 NTSTATUS
152 IopInitiatePnpIrp(
153 PDEVICE_OBJECT DeviceObject,
154 PIO_STATUS_BLOCK IoStatusBlock,
155 UCHAR MinorFunction,
156 PIO_STACK_LOCATION Stack OPTIONAL);
157
158 NTSTATUS NTAPI
159 IntAgpGetInterface(
160 IN PVOID HwDeviceExtension,
161 IN OUT PINTERFACE Interface);
162
163 /* child.c */
164
165 NTSTATUS NTAPI
166 IntVideoPortDispatchPdoPnp(
167 IN PDEVICE_OBJECT DeviceObject,
168 IN PIRP Irp);
169
170 /* dispatch.c */
171
172 NTSTATUS NTAPI
173 IntVideoPortAddDevice(
174 IN PDRIVER_OBJECT DriverObject,
175 IN PDEVICE_OBJECT PhysicalDeviceObject);
176
177 NTSTATUS NTAPI
178 IntVideoPortDispatchOpen(
179 IN PDEVICE_OBJECT DeviceObject,
180 IN PIRP Irp);
181
182 NTSTATUS NTAPI
183 IntVideoPortDispatchClose(
184 IN PDEVICE_OBJECT DeviceObject,
185 IN PIRP Irp);
186
187 NTSTATUS NTAPI
188 IntVideoPortDispatchCleanup(
189 IN PDEVICE_OBJECT DeviceObject,
190 IN PIRP Irp);
191
192 NTSTATUS NTAPI
193 IntVideoPortDispatchDeviceControl(
194 IN PDEVICE_OBJECT DeviceObject,
195 IN PIRP Irp);
196
197 NTSTATUS NTAPI
198 IntVideoPortDispatchPnp(
199 IN PDEVICE_OBJECT DeviceObject,
200 IN PIRP Irp);
201
202 NTSTATUS NTAPI
203 IntVideoPortDispatchPower(
204 IN PDEVICE_OBJECT DeviceObject,
205 IN PIRP Irp);
206
207 NTSTATUS NTAPI
208 IntVideoPortDispatchSystemControl(
209 IN PDEVICE_OBJECT DeviceObject,
210 IN PIRP Irp);
211
212 NTSTATUS NTAPI
213 IntVideoPortDispatchWrite(
214 IN PDEVICE_OBJECT DeviceObject,
215 IN PIRP Irp);
216
217 VOID NTAPI
218 IntVideoPortUnload(PDRIVER_OBJECT DriverObject);
219
220 /* timer.c */
221
222 BOOLEAN NTAPI
223 IntVideoPortSetupTimer(
224 IN PDEVICE_OBJECT DeviceObject,
225 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension);
226
227 /* interrupt.c */
228
229 BOOLEAN NTAPI
230 IntVideoPortSetupInterrupt(
231 IN PDEVICE_OBJECT DeviceObject,
232 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
233 IN PVIDEO_PORT_CONFIG_INFO ConfigInfo);
234
235 /* resource.c */
236
237 NTSTATUS NTAPI
238 IntVideoPortFilterResourceRequirements(
239 IN PDEVICE_OBJECT DeviceObject,
240 IN PIRP Irp);
241
242 NTSTATUS NTAPI
243 IntVideoPortMapPhysicalMemory(
244 IN HANDLE Process,
245 IN PHYSICAL_ADDRESS PhysicalAddress,
246 IN ULONG SizeInBytes,
247 IN ULONG Protect,
248 IN OUT PVOID *VirtualAddress OPTIONAL);
249
250 /* videoprt.c */
251
252 extern ULONG CsrssInitialized;
253 extern PKPROCESS Csrss;
254 extern ULONG VideoPortDeviceNumber;
255
256 VOID FASTCALL
257 IntAttachToCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState);
258
259 VOID FASTCALL
260 IntDetachFromCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState);
261
262 NTSTATUS NTAPI
263 IntVideoPortCreateAdapterDeviceObject(
264 IN PDRIVER_OBJECT DriverObject,
265 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
266 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
267 OUT PDEVICE_OBJECT *DeviceObject OPTIONAL);
268
269 NTSTATUS NTAPI
270 IntVideoPortFindAdapter(
271 IN PDRIVER_OBJECT DriverObject,
272 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
273 IN PDEVICE_OBJECT DeviceObject);
274
275 PVOID NTAPI
276 IntVideoPortGetProcAddress(
277 IN PVOID HwDeviceExtension,
278 IN PUCHAR FunctionName);
279
280 /* int10.c */
281
282 VP_STATUS NTAPI
283 IntInt10AllocateBuffer(
284 IN PVOID Context,
285 OUT PUSHORT Seg,
286 OUT PUSHORT Off,
287 IN OUT PULONG Length);
288
289 VP_STATUS NTAPI
290 IntInt10FreeBuffer(
291 IN PVOID Context,
292 IN USHORT Seg,
293 IN USHORT Off);
294
295 VP_STATUS NTAPI
296 IntInt10ReadMemory(
297 IN PVOID Context,
298 IN USHORT Seg,
299 IN USHORT Off,
300 OUT PVOID Buffer,
301 IN ULONG Length);
302
303 VP_STATUS NTAPI
304 IntInt10WriteMemory(
305 IN PVOID Context,
306 IN USHORT Seg,
307 IN USHORT Off,
308 IN PVOID Buffer,
309 IN ULONG Length);
310
311 VP_STATUS NTAPI
312 IntInt10CallBios(
313 IN PVOID Context,
314 IN OUT PINT10_BIOS_ARGUMENTS BiosArguments);
315
316 #endif /* VIDEOPRT_H */