xref: /reactos/win32ss/drivers/videoprt/videoprt.h (revision c2c66aff)
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 <ntifs.h>
26 
27 #define __BROKEN__
28 #include <miniport.h>
29 #include <video.h>
30 #include <ntagp.h>
31 #include <dderror.h>
32 #include <windef.h>
33 #include <wdmguid.h>
34 
35 #define TAG_VIDEO_PORT  'PDIV'
36 #define TAG_VIDEO_PORT_BUFFER  '\0mpV'
37 #define TAG_REQUEST_PACKET 'qRpV'
38 
39 #define GUID_STRING_LENGTH 38 * sizeof(WCHAR)
40 
41 typedef struct _VIDEO_PORT_ADDRESS_MAPPING
42 {
43    LIST_ENTRY List;
44    PVOID MappedAddress;
45    ULONG NumberOfUchars;
46    PHYSICAL_ADDRESS IoAddress;
47    ULONG SystemIoBusNumber;
48    UINT MappingCount;
49 } VIDEO_PORT_ADDRESS_MAPPING, *PVIDEO_PORT_ADDRESS_MAPPING;
50 
51 struct _VIDEO_PORT_AGP_VIRTUAL_MAPPING;
52 
53 typedef struct _VIDEO_PORT_AGP_MAPPING
54 {
55    ULONG NumberOfPages;
56    PVOID MapHandle;
57    PHYSICAL_ADDRESS PhysicalAddress;
58 } VIDEO_PORT_AGP_MAPPING, *PVIDEO_PORT_AGP_MAPPING;
59 
60 typedef struct _VIDEO_PORT_AGP_VIRTUAL_MAPPING
61 {
62    PVIDEO_PORT_AGP_MAPPING AgpMapping;
63    HANDLE ProcessHandle;
64    PVOID MappedAddress;
65 } VIDEO_PORT_AGP_VIRTUAL_MAPPING, *PVIDEO_PORT_AGP_VIRTUAL_MAPPING;
66 
67 typedef struct _VIDEO_PORT_DRIVER_EXTENSION
68 {
69    VIDEO_HW_INITIALIZATION_DATA InitializationData;
70    PVOID HwContext;
71    UNICODE_STRING RegistryPath;
72 } VIDEO_PORT_DRIVER_EXTENSION, *PVIDEO_PORT_DRIVER_EXTENSION;
73 
74 typedef struct _VIDEO_PORT_COMMON_EXTENSION
75 {
76     BOOLEAN Fdo;
77 } VIDEO_PORT_COMMON_EXTENSION, *PVIDEO_PORT_COMMON_EXTENSION;
78 
79 typedef struct _VIDEO_PORT_DEVICE_EXTENSTION
80 {
81    VIDEO_PORT_COMMON_EXTENSION Common;
82    ULONG DeviceNumber;
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;
93    ULONG InterruptLevel;
94    BOOLEAN InterruptShared;
95    INTERFACE_TYPE AdapterInterfaceType;
96    ULONG SystemIoBusNumber;
97    ULONG SystemIoSlotNumber;
98    LIST_ENTRY AddressMappingListHead;
99    KDPC DpcObject;
100    VIDEO_PORT_DRIVER_EXTENSION *DriverExtension;
101    ULONG DeviceOpened;
102    AGP_BUS_INTERFACE_STANDARD AgpInterface;
103    KMUTEX DeviceLock;
104    LIST_ENTRY DmaAdapterList, ChildDeviceList;
105    ULONG SessionId;
106    CHAR MiniPortDeviceExtension[1];
107 } VIDEO_PORT_DEVICE_EXTENSION, *PVIDEO_PORT_DEVICE_EXTENSION;
108 
109 typedef struct _VIDEO_PORT_CHILD_EXTENSION
110 {
111     VIDEO_PORT_COMMON_EXTENSION Common;
112 
113     ULONG ChildId;
114     VIDEO_CHILD_TYPE ChildType;
115     UCHAR ChildDescriptor[256];
116 
117     BOOLEAN EdidValid;
118 
119     PDRIVER_OBJECT DriverObject;
120     PDEVICE_OBJECT PhysicalDeviceObject;
121 
122     LIST_ENTRY ListEntry;
123 
124     CHAR ChildDeviceExtension[1];
125 } VIDEO_PORT_CHILD_EXTENSION, *PVIDEO_PORT_CHILD_EXTENSION;
126 
127 #define VIDEO_PORT_GET_CHILD_EXTENSION(MiniportExtension) \
128    CONTAINING_RECORD( \
129        MiniportExtension, \
130        VIDEO_PORT_CHILD_EXTENSION, \
131        ChildDeviceExtension)
132 
133 #define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension) \
134    CONTAINING_RECORD( \
135       MiniportExtension, \
136       VIDEO_PORT_DEVICE_EXTENSION, \
137       MiniPortDeviceExtension)
138 
139 typedef struct _VIDEO_PORT_EVENT
140 {
141     ENG_EVENT;
142 } VIDEO_PORT_EVENT, *PVIDEO_PORT_EVENT;
143 
144 /* agp.c */
145 
146 NTSTATUS
147 IopInitiatePnpIrp(
148   PDEVICE_OBJECT DeviceObject,
149   PIO_STATUS_BLOCK IoStatusBlock,
150   UCHAR MinorFunction,
151   PIO_STACK_LOCATION Stack OPTIONAL);
152 
153 NTSTATUS NTAPI
154 IntAgpGetInterface(
155    IN PVOID HwDeviceExtension,
156    IN OUT PINTERFACE Interface);
157 
158 /* child.c */
159 
160 NTSTATUS NTAPI
161 IntVideoPortDispatchPdoPnp(
162    IN PDEVICE_OBJECT DeviceObject,
163    IN PIRP Irp);
164 
165 /* dispatch.c */
166 
167 NTSTATUS NTAPI
168 IntVideoPortAddDevice(
169    IN PDRIVER_OBJECT DriverObject,
170    IN PDEVICE_OBJECT PhysicalDeviceObject);
171 
172 NTSTATUS NTAPI
173 IntVideoPortDispatchOpen(
174    IN PDEVICE_OBJECT DeviceObject,
175    IN PIRP Irp);
176 
177 NTSTATUS NTAPI
178 IntVideoPortDispatchClose(
179    IN PDEVICE_OBJECT DeviceObject,
180    IN PIRP Irp);
181 
182 NTSTATUS NTAPI
183 IntVideoPortDispatchCleanup(
184    IN PDEVICE_OBJECT DeviceObject,
185    IN PIRP Irp);
186 
187 NTSTATUS NTAPI
188 IntVideoPortDispatchDeviceControl(
189    IN PDEVICE_OBJECT DeviceObject,
190    IN PIRP Irp);
191 
192 NTSTATUS NTAPI
193 IntVideoPortDispatchPnp(
194    IN PDEVICE_OBJECT DeviceObject,
195    IN PIRP Irp);
196 
197 NTSTATUS NTAPI
198 IntVideoPortDispatchPower(
199    IN PDEVICE_OBJECT DeviceObject,
200    IN PIRP Irp);
201 
202 NTSTATUS NTAPI
203 IntVideoPortDispatchSystemControl(
204    IN PDEVICE_OBJECT DeviceObject,
205    IN PIRP Irp);
206 
207 NTSTATUS NTAPI
208 IntVideoPortDispatchWrite(
209    IN PDEVICE_OBJECT DeviceObject,
210    IN PIRP Irp);
211 
212 VOID NTAPI
213 IntVideoPortUnload(PDRIVER_OBJECT DriverObject);
214 
215 /* timer.c */
216 
217 BOOLEAN NTAPI
218 IntVideoPortSetupTimer(
219    IN PDEVICE_OBJECT DeviceObject,
220    IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension);
221 
222 /* interrupt.c */
223 
224 BOOLEAN NTAPI
225 IntVideoPortSetupInterrupt(
226    IN PDEVICE_OBJECT DeviceObject,
227    IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
228    IN PVIDEO_PORT_CONFIG_INFO ConfigInfo);
229 
230 /* resource.c */
231 
232 NTSTATUS NTAPI
233 IntVideoPortFilterResourceRequirements(
234    IN PDEVICE_OBJECT DeviceObject,
235    IN PIRP Irp);
236 
237 NTSTATUS NTAPI
238 IntVideoPortMapPhysicalMemory(
239    IN HANDLE Process,
240    IN PHYSICAL_ADDRESS PhysicalAddress,
241    IN ULONG SizeInBytes,
242    IN ULONG Protect,
243    IN OUT PVOID *VirtualAddress  OPTIONAL);
244 
245 /* videoprt.c */
246 
247 extern ULONG CsrssInitialized;
248 extern PKPROCESS Csrss;
249 extern ULONG VideoPortDeviceNumber;
250 extern KMUTEX VideoPortInt10Mutex;
251 
252 VOID FASTCALL
253 IntAttachToCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState);
254 
255 VOID FASTCALL
256 IntDetachFromCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState);
257 
258 NTSTATUS NTAPI
259 IntVideoPortCreateAdapterDeviceObject(
260    IN PDRIVER_OBJECT DriverObject,
261    IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
262    IN PDEVICE_OBJECT PhysicalDeviceObject  OPTIONAL,
263    OUT PDEVICE_OBJECT *DeviceObject  OPTIONAL);
264 
265 NTSTATUS NTAPI
266 IntVideoPortFindAdapter(
267    IN PDRIVER_OBJECT DriverObject,
268    IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
269    IN PDEVICE_OBJECT DeviceObject);
270 
271 PVOID NTAPI
272 IntVideoPortGetProcAddress(
273    IN PVOID HwDeviceExtension,
274    IN PUCHAR FunctionName);
275 
276 /* int10.c */
277 
278 NTSTATUS
279 NTAPI
280 IntInitializeVideoAddressSpace(VOID);
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 /* registry.c */
317 
318 NTSTATUS
319 NTAPI
320 IntCopyRegistryKey(
321     _In_ HANDLE SourceKeyHandle,
322     _In_ HANDLE DestKeyHandle);
323 
324 NTSTATUS
325 NTAPI
326 IntCopyRegistryValue(
327     HANDLE SourceKeyHandle,
328     HANDLE DestKeyHandle,
329     PWSTR ValueName);
330 
331 NTSTATUS
332 NTAPI
333 IntSetupDeviceSettingsKey(
334     PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension);
335 
336 NTSTATUS
337 NTAPI
338 IntCreateNewRegistryPath(
339     PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension);
340 
341 NTSTATUS
342 NTAPI
343 IntCreateRegistryPath(
344     IN PCUNICODE_STRING DriverRegistryPath,
345     OUT PUNICODE_STRING DeviceRegistryPath);
346 
347 
348 #endif /* VIDEOPRT_H */
349