[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 /* Public part */
111 ENG_EVENT;
112
113 /* Private part */
114 KEVENT Event;
115 } VIDEO_PORT_EVENT, *PVIDEO_PORT_EVENT;
116
117 /* agp.c */
118
119 NTSTATUS
120 IopInitiatePnpIrp(
121 PDEVICE_OBJECT DeviceObject,
122 PIO_STATUS_BLOCK IoStatusBlock,
123 ULONG MinorFunction,
124 PIO_STACK_LOCATION Stack OPTIONAL);
125
126 NTSTATUS NTAPI
127 IntAgpGetInterface(
128 IN PVOID HwDeviceExtension,
129 IN OUT PINTERFACE Interface);
130
131 /* dispatch.c */
132
133 NTSTATUS NTAPI
134 IntVideoPortAddDevice(
135 IN PDRIVER_OBJECT DriverObject,
136 IN PDEVICE_OBJECT PhysicalDeviceObject);
137
138 NTSTATUS NTAPI
139 IntVideoPortDispatchOpen(
140 IN PDEVICE_OBJECT DeviceObject,
141 IN PIRP Irp);
142
143 NTSTATUS NTAPI
144 IntVideoPortDispatchClose(
145 IN PDEVICE_OBJECT DeviceObject,
146 IN PIRP Irp);
147
148 NTSTATUS NTAPI
149 IntVideoPortDispatchCleanup(
150 IN PDEVICE_OBJECT DeviceObject,
151 IN PIRP Irp);
152
153 NTSTATUS NTAPI
154 IntVideoPortDispatchDeviceControl(
155 IN PDEVICE_OBJECT DeviceObject,
156 IN PIRP Irp);
157
158 NTSTATUS NTAPI
159 IntVideoPortDispatchPnp(
160 IN PDEVICE_OBJECT DeviceObject,
161 IN PIRP Irp);
162
163 NTSTATUS NTAPI
164 IntVideoPortDispatchPower(
165 IN PDEVICE_OBJECT DeviceObject,
166 IN PIRP Irp);
167
168 NTSTATUS NTAPI
169 IntVideoPortDispatchSystemControl(
170 IN PDEVICE_OBJECT DeviceObject,
171 IN PIRP Irp);
172
173 NTSTATUS NTAPI
174 IntVideoPortDispatchWrite(
175 IN PDEVICE_OBJECT DeviceObject,
176 IN PIRP Irp);
177
178 VOID NTAPI
179 IntVideoPortUnload(PDRIVER_OBJECT DriverObject);
180
181 /* timer.c */
182
183 BOOLEAN NTAPI
184 IntVideoPortSetupTimer(
185 IN PDEVICE_OBJECT DeviceObject,
186 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension);
187
188 /* interrupt.c */
189
190 BOOLEAN NTAPI
191 IntVideoPortSetupInterrupt(
192 IN PDEVICE_OBJECT DeviceObject,
193 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
194 IN PVIDEO_PORT_CONFIG_INFO ConfigInfo);
195
196 /* resource.c */
197
198 NTSTATUS NTAPI
199 IntVideoPortMapPhysicalMemory(
200 IN HANDLE Process,
201 IN PHYSICAL_ADDRESS PhysicalAddress,
202 IN ULONG SizeInBytes,
203 IN ULONG Protect,
204 IN OUT PVOID *VirtualAddress OPTIONAL);
205
206 /* videoprt.c */
207
208 extern ULONG CsrssInitialized;
209 extern PKPROCESS Csrss;
210 extern ULONG VideoPortDeviceNumber;
211
212 VOID FASTCALL
213 IntAttachToCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState);
214
215 VOID FASTCALL
216 IntDetachFromCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState);
217
218 NTSTATUS NTAPI
219 IntVideoPortCreateAdapterDeviceObject(
220 IN PDRIVER_OBJECT DriverObject,
221 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
222 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
223 OUT PDEVICE_OBJECT *DeviceObject OPTIONAL);
224
225 NTSTATUS NTAPI
226 IntVideoPortFindAdapter(
227 IN PDRIVER_OBJECT DriverObject,
228 IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
229 IN PDEVICE_OBJECT DeviceObject);
230
231 PVOID NTAPI
232 IntVideoPortGetProcAddress(
233 IN PVOID HwDeviceExtension,
234 IN PUCHAR FunctionName);
235
236 /* int10.c */
237
238 VP_STATUS NTAPI
239 IntInt10AllocateBuffer(
240 IN PVOID Context,
241 OUT PUSHORT Seg,
242 OUT PUSHORT Off,
243 IN OUT PULONG Length);
244
245 VP_STATUS NTAPI
246 IntInt10FreeBuffer(
247 IN PVOID Context,
248 IN USHORT Seg,
249 IN USHORT Off);
250
251 VP_STATUS NTAPI
252 IntInt10ReadMemory(
253 IN PVOID Context,
254 IN USHORT Seg,
255 IN USHORT Off,
256 OUT PVOID Buffer,
257 IN ULONG Length);
258
259 VP_STATUS NTAPI
260 IntInt10WriteMemory(
261 IN PVOID Context,
262 IN USHORT Seg,
263 IN USHORT Off,
264 IN PVOID Buffer,
265 IN ULONG Length);
266
267 VP_STATUS NTAPI
268 IntInt10CallBios(
269 IN PVOID Context,
270 IN OUT PINT10_BIOS_ARGUMENTS BiosArguments);
271
272 #endif /* VIDEOPRT_H */