- Move atsmedia.h to PSDK, introduce pragma once and remove the comments block and...
[reactos.git] / include / ddk / parallel.h
1 /*
2 * parallel.h
3 *
4 * ParPort driver interface
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
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 #ifndef __PARALLEL_H
24 #define __PARALLEL_H
25
26 #include "ntddpar.h"
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 #define DD_PARALLEL_PORT_BASE_NAME "ParallelPort"
33 #define DD_PARALLEL_PORT_BASE_NAME_U L"ParallelPort"
34
35 #define IOCTL_INTERNAL_DESELECT_DEVICE \
36 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
37 #define IOCTL_INTERNAL_GET_MORE_PARALLEL_PORT_INFO \
38 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 17, METHOD_BUFFERED, FILE_ANY_ACCESS)
39 #define IOCTL_INTERNAL_GET_PARALLEL_PNP_INFO \
40 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
41 #define IOCTL_INTERNAL_GET_PARALLEL_PORT_INFO \
42 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
43 #define IOCTL_INTERNAL_INIT_1284_3_BUS \
44 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
45 #define IOCTL_INTERNAL_PARALLEL_CLEAR_CHIP_MODE \
46 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
47 #define IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT \
48 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
49 #define IOCTL_INTERNAL_PARALLEL_DISCONNECT_INTERRUPT \
50 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
51 #define IOCTL_INTERNAL_PARALLEL_PORT_ALLOCATE \
52 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
53 #define IOCTL_INTERNAL_PARALLEL_PORT_FREE \
54 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 40, METHOD_BUFFERED, FILE_ANY_ACCESS)
55 #define IOCTL_INTERNAL_PARALLEL_SET_CHIP_MODE \
56 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 19, METHOD_BUFFERED, FILE_ANY_ACCESS)
57 #define IOCTL_INTERNAL_RELEASE_PARALLEL_PORT_INFO \
58 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
59 #define IOCTL_INTERNAL_SELECT_DEVICE \
60 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
61
62
63 typedef struct _PARALLEL_1284_COMMAND {
64 UCHAR ID;
65 UCHAR Port;
66 ULONG CommandFlags;
67 } PARALLEL_1284_COMMAND, *PPARALLEL_1284_COMMAND;
68
69 /* PARALLEL_1284_COMMAND.CommandFlags */
70 #define PAR_END_OF_CHAIN_DEVICE 0x00000001
71 #define PAR_HAVE_PORT_KEEP_PORT 0x00000002
72
73 typedef struct _MORE_PARALLEL_PORT_INFORMATION {
74 INTERFACE_TYPE InterfaceType;
75 ULONG BusNumber;
76 ULONG InterruptLevel;
77 ULONG InterruptVector;
78 KAFFINITY InterruptAffinity;
79 KINTERRUPT_MODE InterruptMode;
80 } MORE_PARALLEL_PORT_INFORMATION, *PMORE_PARALLEL_PORT_INFORMATION;
81
82 typedef NTSTATUS
83 (NTAPI *PPARALLEL_SET_CHIP_MODE)(
84 IN PVOID SetChipContext,
85 IN UCHAR ChipMode);
86
87 typedef NTSTATUS
88 (NTAPI *PPARALLEL_CLEAR_CHIP_MODE)(
89 IN PVOID ClearChipContext,
90 IN UCHAR ChipMode);
91
92 typedef NTSTATUS
93 (NTAPI *PPARCHIP_CLEAR_CHIP_MODE)(
94 IN PVOID ClearChipContext,
95 IN UCHAR ChipMode);
96
97 typedef NTSTATUS
98 (NTAPI *PPARALLEL_TRY_SELECT_ROUTINE)(
99 IN PVOID TrySelectContext,
100 IN PVOID TrySelectCommand);
101
102 typedef NTSTATUS
103 (NTAPI *PPARALLEL_DESELECT_ROUTINE)(
104 IN PVOID DeselectContext,
105 IN PVOID DeselectCommand);
106
107 /* PARALLEL_PNP_INFORMATION.HardwareCapabilities */
108 #define PPT_NO_HARDWARE_PRESENT 0x00000000
109 #define PPT_ECP_PRESENT 0x00000001
110 #define PPT_EPP_PRESENT 0x00000002
111 #define PPT_EPP_32_PRESENT 0x00000004
112 #define PPT_BYTE_PRESENT 0x00000008
113 #define PPT_BIDI_PRESENT 0x00000008
114 #define PPT_1284_3_PRESENT 0x00000010
115
116 typedef struct _PARALLEL_PNP_INFORMATION {
117 PHYSICAL_ADDRESS OriginalEcpController;
118 PUCHAR EcpController;
119 ULONG SpanOfEcpController;
120 ULONG PortNumber;
121 ULONG HardwareCapabilities;
122 PPARALLEL_SET_CHIP_MODE TrySetChipMode;
123 PPARALLEL_CLEAR_CHIP_MODE ClearChipMode;
124 ULONG FifoDepth;
125 ULONG FifoWidth;
126 PHYSICAL_ADDRESS EppControllerPhysicalAddress;
127 ULONG SpanOfEppController;
128 ULONG Ieee1284_3DeviceCount;
129 PPARALLEL_TRY_SELECT_ROUTINE TrySelectDevice;
130 PPARALLEL_DESELECT_ROUTINE DeselectDevice;
131 PVOID Context;
132 ULONG CurrentMode;
133 PWSTR PortName;
134 } PARALLEL_PNP_INFORMATION, *PPARALLEL_PNP_INFORMATION;
135
136 typedef BOOLEAN
137 (NTAPI *PPARALLEL_TRY_ALLOCATE_ROUTINE)(
138 IN PVOID TryAllocateContext);
139
140 typedef VOID
141 (NTAPI *PPARALLEL_FREE_ROUTINE)(
142 IN PVOID FreeContext);
143
144 typedef ULONG
145 (NTAPI *PPARALLEL_QUERY_WAITERS_ROUTINE)(
146 IN PVOID QueryAllocsContext);
147
148 typedef struct _PARALLEL_PORT_INFORMATION {
149 PHYSICAL_ADDRESS OriginalController;
150 PUCHAR Controller;
151 ULONG SpanOfController;
152 PPARALLEL_TRY_ALLOCATE_ROUTINE TryAllocatePort;
153 PPARALLEL_FREE_ROUTINE FreePort;
154 PPARALLEL_QUERY_WAITERS_ROUTINE QueryNumWaiters;
155 PVOID Context;
156 } PARALLEL_PORT_INFORMATION, *PPARALLEL_PORT_INFORMATION;
157
158 /* PARALLEL_CHIP_MODE.ModeFlags */
159 #define INITIAL_MODE 0x00
160 #define PARCHIP_ECR_ARBITRATOR 0x01
161
162 typedef struct _PARALLEL_CHIP_MODE {
163 UCHAR ModeFlags;
164 BOOLEAN success;
165 } PARALLEL_CHIP_MODE, *PPARALLEL_CHIP_MODE;
166
167 typedef VOID
168 (NTAPI *PPARALLEL_DEFERRED_ROUTINE)(
169 IN PVOID DeferredContext);
170
171 typedef struct _PARALLEL_INTERRUPT_SERVICE_ROUTINE {
172 PKSERVICE_ROUTINE InterruptServiceRoutine;
173 PVOID InterruptServiceContext;
174 PPARALLEL_DEFERRED_ROUTINE DeferredPortCheckRoutine;
175 PVOID DeferredPortCheckContext;
176 } PARALLEL_INTERRUPT_SERVICE_ROUTINE, *PPARALLEL_INTERRUPT_SERVICE_ROUTINE;
177
178
179 #define IOCTL_INTERNAL_DISCONNECT_IDLE \
180 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 32, METHOD_BUFFERED, FILE_ANY_ACCESS)
181 #define IOCTL_INTERNAL_LOCK_PORT \
182 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 37, METHOD_BUFFERED, FILE_ANY_ACCESS)
183 #define IOCTL_INTERNAL_LOCK_PORT_NO_SELECT \
184 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 52, METHOD_BUFFERED, FILE_ANY_ACCESS)
185 #define IOCTL_INTERNAL_PARCLASS_CONNECT \
186 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
187 #define IOCTL_INTERNAL_PARCLASS_DISCONNECT \
188 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
189 #define IOCTL_INTERNAL_UNLOCK_PORT \
190 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 38, METHOD_BUFFERED, FILE_ANY_ACCESS)
191 #define IOCTL_INTERNAL_UNLOCK_PORT_NO_DESELECT \
192 CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
193
194 typedef USHORT
195 (NTAPI *PDETERMINE_IEEE_MODES)(
196 IN PVOID Context);
197
198 typedef enum _PARALLEL_SAFETY {
199 SAFE_MODE,
200 UNSAFE_MODE
201 } PARALLEL_SAFETY;
202
203 typedef NTSTATUS
204 (NTAPI *PNEGOTIATE_IEEE_MODE)(
205 IN PVOID Context,
206 IN USHORT ModeMaskFwd,
207 IN USHORT ModeMaskRev,
208 IN PARALLEL_SAFETY ModeSafety,
209 IN BOOLEAN IsForward);
210
211 typedef NTSTATUS
212 (NTAPI *PTERMINATE_IEEE_MODE)(
213 IN PVOID Context);
214
215 typedef NTSTATUS
216 (NTAPI *PPARALLEL_IEEE_FWD_TO_REV)(
217 IN PVOID Context);
218
219 typedef NTSTATUS
220 (NTAPI *PPARALLEL_IEEE_REV_TO_FWD)(
221 IN PVOID Context);
222
223 typedef NTSTATUS
224 (NTAPI *PPARALLEL_READ)(
225 IN PVOID Context,
226 OUT PVOID Buffer,
227 IN ULONG NumBytesToRead,
228 OUT PULONG NumBytesRead,
229 IN UCHAR Channel);
230
231 typedef NTSTATUS
232 (NTAPI *PPARALLEL_WRITE)(
233 IN PVOID Context,
234 OUT PVOID Buffer,
235 IN ULONG NumBytesToWrite,
236 OUT PULONG NumBytesWritten,
237 IN UCHAR Channel);
238
239 typedef NTSTATUS
240 (NTAPI *PPARALLEL_TRYSELECT_DEVICE)(
241 IN PVOID Context,
242 IN PARALLEL_1284_COMMAND Command);
243
244 typedef NTSTATUS
245 (NTAPI *PPARALLEL_DESELECT_DEVICE)(
246 IN PVOID Context,
247 IN PARALLEL_1284_COMMAND Command);
248
249 typedef struct _PARCLASS_INFORMATION {
250 PUCHAR Controller;
251 PUCHAR EcrController;
252 ULONG SpanOfController;
253 PDETERMINE_IEEE_MODES DetermineIeeeModes;
254 PNEGOTIATE_IEEE_MODE NegotiateIeeeMode;
255 PTERMINATE_IEEE_MODE TerminateIeeeMode;
256 PPARALLEL_IEEE_FWD_TO_REV IeeeFwdToRevMode;
257 PPARALLEL_IEEE_REV_TO_FWD IeeeRevToFwdMode;
258 PPARALLEL_READ ParallelRead;
259 PPARALLEL_WRITE ParallelWrite;
260 PVOID ParclassContext;
261 ULONG HardwareCapabilities;
262 ULONG FifoDepth;
263 ULONG FifoWidth;
264 PPARALLEL_TRYSELECT_DEVICE ParallelTryselect;
265 PPARALLEL_DESELECT_DEVICE ParallelDeSelect;
266 } PARCLASS_INFORMATION, *PPARCLASS_INFORMATION;
267
268 #ifdef __cplusplus
269 }
270 #endif
271
272 #endif /* __PARALLEL_H */