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