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