* Sync up to trunk head (r65074).
[reactos.git] / 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 * I/O Port services
46 */
47
48 typedef VOID (WINAPI *PFNVDD_INB) (WORD iport, PBYTE data);
49 typedef VOID (WINAPI *PFNVDD_INW) (WORD iport, PWORD data);
50 typedef VOID (WINAPI *PFNVDD_INSB) (WORD iport, PBYTE data, WORD count);
51 typedef VOID (WINAPI *PFNVDD_INSW) (WORD iport, PWORD data, WORD count);
52 typedef VOID (WINAPI *PFNVDD_OUTB) (WORD iport, BYTE data);
53 typedef VOID (WINAPI *PFNVDD_OUTW) (WORD iport, WORD data);
54 typedef VOID (WINAPI *PFNVDD_OUTSB) (WORD iport, PBYTE data, WORD count);
55 typedef VOID (WINAPI *PFNVDD_OUTSW) (WORD iport, PWORD data, WORD count);
56
57 typedef struct _VDD_IO_HANDLERS
58 {
59 PFNVDD_INB inb_handler;
60 PFNVDD_INW inw_handler;
61 PFNVDD_INSB insb_handler;
62 PFNVDD_INSW insw_handler;
63 PFNVDD_OUTB outb_handler;
64 PFNVDD_OUTW outw_handler;
65 PFNVDD_OUTSB outsb_handler;
66 PFNVDD_OUTSW outsw_handler;
67 } VDD_IO_HANDLERS, *PVDD_IO_HANDLERS;
68
69 typedef struct _VDD_IO_PORTRANGE
70 {
71 WORD First;
72 WORD Last;
73 } VDD_IO_PORTRANGE, *PVDD_IO_PORTRANGE;
74
75 BOOL
76 WINAPI
77 VDDInstallIOHook
78 (
79 HANDLE hVdd,
80 WORD cPortRange,
81 PVDD_IO_PORTRANGE pPortRange,
82 PVDD_IO_HANDLERS IOhandler
83 );
84
85 VOID
86 WINAPI
87 VDDDeInstallIOHook
88 (
89 HANDLE hVdd,
90 WORD cPortRange,
91 PVDD_IO_PORTRANGE pPortRange
92 );
93
94
95 /*
96 * Memory services
97 */
98
99 typedef enum
100 {
101 VDM_V86,
102 VDM_PM
103 } VDM_MODE;
104
105 #ifndef MSW_PE
106 #define MSW_PE 0x0001
107 #endif
108
109 #define getMODE() ((getMSW() & MSW_PE) ? VDM_PM : VDM_V86)
110
111 PBYTE
112 WINAPI
113 Sim32pGetVDMPointer
114 (
115 IN ULONG Address,
116 IN BOOLEAN ProtectedMode
117 );
118
119 PBYTE
120 WINAPI
121 MGetVdmPointer
122 (
123 IN ULONG Address,
124 IN ULONG Size,
125 IN BOOLEAN ProtectedMode
126 );
127
128 PVOID
129 WINAPI
130 VdmMapFlat
131 (
132 IN USHORT Segment,
133 IN ULONG Offset,
134 IN VDM_MODE Mode
135 );
136
137 BOOL
138 WINAPI
139 VdmFlushCache
140 (
141 IN USHORT Segment,
142 IN ULONG Offset,
143 IN ULONG Size,
144 IN VDM_MODE Mode
145 );
146
147 BOOL
148 WINAPI
149 VdmUnmapFlat
150 (
151 IN USHORT Segment,
152 IN ULONG Offset,
153 IN PVOID Buffer,
154 IN VDM_MODE Mode
155 );
156
157 #ifdef __cplusplus
158 }
159 #endif
160
161 /* EOF */