[NTVDM]
[reactos.git] / reactos / include / ddk / nt_vdd.h
1 /*
2 * nt_vdd.h
3 *
4 * Windows NT Device Driver Kit
5 *
6 * This file is part of the ReactOS DDK package.
7 *
8 * Contributors:
9 * Hermes Belusca-Maito (hermes.belusca@sfr.fr)
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #pragma once
24
25 #define _NT_VDD
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31 /*
32 * VDM Control
33 */
34
35 VOID
36 WINAPI
37 VDDSimulate16(VOID);
38
39 VOID
40 WINAPI
41 VDDTerminateVDM(VOID);
42
43
44 /*
45 * IRQ services
46 */
47
48 WORD
49 WINAPI
50 VDDReserveIrqLine
51 (
52 IN HANDLE hVdd,
53 IN WORD IrqLine
54 );
55
56 BOOL
57 WINAPI
58 VDDReleaseIrqLine
59 (
60 IN HANDLE hVdd,
61 IN WORD IrqLine
62 );
63
64
65 /*
66 * I/O Port services
67 */
68
69 typedef VOID (WINAPI *PFNVDD_INB) (WORD iport, PBYTE data);
70 typedef VOID (WINAPI *PFNVDD_INW) (WORD iport, PWORD data);
71 typedef VOID (WINAPI *PFNVDD_INSB) (WORD iport, PBYTE data, WORD count);
72 typedef VOID (WINAPI *PFNVDD_INSW) (WORD iport, PWORD data, WORD count);
73 typedef VOID (WINAPI *PFNVDD_OUTB) (WORD iport, BYTE data);
74 typedef VOID (WINAPI *PFNVDD_OUTW) (WORD iport, WORD data);
75 typedef VOID (WINAPI *PFNVDD_OUTSB) (WORD iport, PBYTE data, WORD count);
76 typedef VOID (WINAPI *PFNVDD_OUTSW) (WORD iport, PWORD data, WORD count);
77
78 typedef struct _VDD_IO_HANDLERS
79 {
80 PFNVDD_INB inb_handler;
81 PFNVDD_INW inw_handler;
82 PFNVDD_INSB insb_handler;
83 PFNVDD_INSW insw_handler;
84 PFNVDD_OUTB outb_handler;
85 PFNVDD_OUTW outw_handler;
86 PFNVDD_OUTSB outsb_handler;
87 PFNVDD_OUTSW outsw_handler;
88 } VDD_IO_HANDLERS, *PVDD_IO_HANDLERS;
89
90 typedef struct _VDD_IO_PORTRANGE
91 {
92 WORD First;
93 WORD Last;
94 } VDD_IO_PORTRANGE, *PVDD_IO_PORTRANGE;
95
96 BOOL
97 WINAPI
98 VDDInstallIOHook
99 (
100 IN HANDLE hVdd,
101 IN WORD cPortRange,
102 IN PVDD_IO_PORTRANGE pPortRange,
103 IN PVDD_IO_HANDLERS IOhandler
104 );
105
106 VOID
107 WINAPI
108 VDDDeInstallIOHook
109 (
110 IN HANDLE hVdd,
111 IN WORD cPortRange,
112 IN PVDD_IO_PORTRANGE pPortRange
113 );
114
115
116 /*
117 * DMA services
118 */
119
120 typedef struct _VDD_DMA_INFO
121 {
122 WORD addr;
123 WORD count;
124 WORD page;
125 BYTE status;
126 BYTE mode;
127 BYTE mask;
128 } VDD_DMA_INFO, *PVDD_DMA_INFO;
129
130 #define VDD_DMA_ADDR 0x01
131 #define VDD_DMA_COUNT 0x02
132 #define VDD_DMA_PAGE 0x04
133 #define VDD_DMA_STATUS 0x08
134 #define VDD_DMA_ALL (VDD_DMA_ADDR | VDD_DMA_COUNT | VDD_DMA_PAGE | VDD_DMA_STATUS)
135
136 DWORD
137 WINAPI
138 VDDRequestDMA
139 (
140 IN HANDLE hVdd,
141 IN WORD iChannel,
142 IN OUT PVOID Buffer,
143 IN DWORD length
144 );
145
146 BOOL
147 WINAPI
148 VDDQueryDMA
149 (
150 IN HANDLE hVdd,
151 IN WORD iChannel,
152 IN PVDD_DMA_INFO pDmaInfo
153 );
154
155 BOOL
156 WINAPI
157 VDDSetDMA
158 (
159 IN HANDLE hVdd,
160 IN WORD iChannel,
161 IN WORD fDMA,
162 IN PVDD_DMA_INFO pDmaInfo
163 );
164
165
166 /*
167 * Memory services
168 */
169
170 typedef enum
171 {
172 VDM_V86,
173 VDM_PM
174 } VDM_MODE;
175
176 #ifndef MSW_PE
177 #define MSW_PE 0x0001
178 #endif
179
180 #define getMODE() ((getMSW() & MSW_PE) ? VDM_PM : VDM_V86)
181
182 typedef VOID
183 (WINAPI *PVDD_MEMORY_HANDLER)
184 (
185 PVOID FaultAddress,
186 ULONG RWMode
187 );
188
189 PBYTE
190 WINAPI
191 Sim32pGetVDMPointer
192 (
193 IN ULONG Address,
194 IN BOOLEAN ProtectedMode
195 );
196
197 PBYTE
198 WINAPI
199 MGetVdmPointer
200 (
201 IN ULONG Address,
202 IN ULONG Size,
203 IN BOOLEAN ProtectedMode
204 );
205
206 PVOID
207 WINAPI
208 VdmMapFlat
209 (
210 IN USHORT Segment,
211 IN ULONG Offset,
212 IN VDM_MODE Mode
213 );
214
215 BOOL
216 WINAPI
217 VdmFlushCache
218 (
219 IN USHORT Segment,
220 IN ULONG Offset,
221 IN ULONG Size,
222 IN VDM_MODE Mode
223 );
224
225 BOOL
226 WINAPI
227 VdmUnmapFlat
228 (
229 IN USHORT Segment,
230 IN ULONG Offset,
231 IN PVOID Buffer,
232 IN VDM_MODE Mode
233 );
234
235 BOOL
236 WINAPI
237 VDDInstallMemoryHook
238 (
239 IN HANDLE hVdd,
240 IN PVOID pStart,
241 IN DWORD dwCount,
242 IN PVDD_MEMORY_HANDLER MemoryHandler
243 );
244
245 BOOL
246 WINAPI
247 VDDDeInstallMemoryHook
248 (
249 IN HANDLE hVdd,
250 IN PVOID pStart,
251 IN DWORD dwCount
252 );
253
254 #ifdef __cplusplus
255 }
256 #endif
257
258 /* EOF */