OSDN Git Service

Insert removed author attribution.
[mingw/mingw-org-wsl.git] / include / ddk / parallel.h
1 /**
2  * @file parallel.h
3  * @copy 2012 MinGW.org project
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  * 
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  * 
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24 /* Created by Casper S. Hornstrup <chorns@users.sourceforge.net> */
25 #ifndef __PARALLEL_H
26 #define __PARALLEL_H
27 #pragma GCC system_header
28 #include <_mingw.h>
29
30 /*
31  * ParPort driver interface
32  */
33
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37
38 #include "ntddk.h"
39 #include "ntddpar.h"
40
41 #define DD_PARALLEL_PORT_BASE_NAME        "ParallelPort"
42 #define DD_PARALLEL_PORT_BASE_NAME_U      L"ParallelPort"
43
44 #define IOCTL_INTERNAL_DESELECT_DEVICE \
45   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 24, METHOD_BUFFERED, FILE_ANY_ACCESS) 
46 #define IOCTL_INTERNAL_GET_MORE_PARALLEL_PORT_INFO \
47   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 17, METHOD_BUFFERED, FILE_ANY_ACCESS)
48 #define IOCTL_INTERNAL_GET_PARALLEL_PNP_INFO \
49   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
50 #define IOCTL_INTERNAL_GET_PARALLEL_PORT_INFO \
51   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
52 #define IOCTL_INTERNAL_INIT_1284_3_BUS \
53   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
54 #define IOCTL_INTERNAL_PARALLEL_CLEAR_CHIP_MODE \
55   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
56 #define IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT \
57   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
58 #define IOCTL_INTERNAL_PARALLEL_DISCONNECT_INTERRUPT \
59   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
60 #define IOCTL_INTERNAL_PARALLEL_PORT_ALLOCATE \
61   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
62 #define IOCTL_INTERNAL_PARALLEL_PORT_FREE \
63   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 40, METHOD_BUFFERED, FILE_ANY_ACCESS)
64 #define IOCTL_INTERNAL_PARALLEL_SET_CHIP_MODE \
65   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 19, METHOD_BUFFERED, FILE_ANY_ACCESS)
66 #define IOCTL_INTERNAL_RELEASE_PARALLEL_PORT_INFO \
67   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
68 #define IOCTL_INTERNAL_SELECT_DEVICE \
69   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
70
71
72 typedef struct _PARALLEL_1284_COMMAND {
73   UCHAR  ID;
74   UCHAR  Port;
75   ULONG  CommandFlags;
76 } PARALLEL_1284_COMMAND, *PPARALLEL_1284_COMMAND;
77
78 /* PARALLEL_1284_COMMAND.CommandFlags */
79 #define PAR_END_OF_CHAIN_DEVICE           0x00000001
80 #define PAR_HAVE_PORT_KEEP_PORT           0x00000002
81
82 typedef struct _MORE_PARALLEL_PORT_INFORMATION {
83   INTERFACE_TYPE  InterfaceType;
84   ULONG  BusNumber;
85   ULONG  InterruptLevel;
86   ULONG  InterruptVector;
87   KAFFINITY  InterruptAffinity;
88   KINTERRUPT_MODE  InterruptMode;
89 } MORE_PARALLEL_PORT_INFORMATION, *PMORE_PARALLEL_PORT_INFORMATION;
90
91 typedef NTSTATUS DDKAPI
92 (*PPARALLEL_SET_CHIP_MODE)(
93   /*IN*/  PVOID  SetChipContext,
94   /*IN*/  UCHAR  ChipMode);
95
96 typedef NTSTATUS DDKAPI
97 (*PPARALLEL_CLEAR_CHIP_MODE)(
98   /*IN*/  PVOID  ClearChipContext,
99   /*IN*/  UCHAR  ChipMode);
100
101 typedef NTSTATUS DDKAPI
102 (*PPARCHIP_CLEAR_CHIP_MODE)(
103   /*IN*/  PVOID  ClearChipContext,
104   /*IN*/  UCHAR  ChipMode);
105
106 typedef NTSTATUS DDKAPI
107 (*PPARALLEL_TRY_SELECT_ROUTINE)(
108   /*IN*/  PVOID  TrySelectContext,
109   /*IN*/  PVOID  TrySelectCommand);
110
111 typedef NTSTATUS DDKAPI
112 (*PPARALLEL_DESELECT_ROUTINE)(
113   /*IN*/ PVOID  DeselectContext,
114   /*IN*/ PVOID  DeselectCommand);
115
116 /* PARALLEL_PNP_INFORMATION.HardwareCapabilities */
117 #define PPT_NO_HARDWARE_PRESENT           0x00000000
118 #define PPT_ECP_PRESENT                   0x00000001
119 #define PPT_EPP_PRESENT                   0x00000002
120 #define PPT_EPP_32_PRESENT                0x00000004
121 #define PPT_BYTE_PRESENT                  0x00000008
122 #define PPT_BIDI_PRESENT                  0x00000008
123 #define PPT_1284_3_PRESENT                0x00000010
124
125 typedef struct _PARALLEL_PNP_INFORMATION {
126   PHYSICAL_ADDRESS  OriginalEcpController;
127   PUCHAR  EcpController;
128   ULONG  SpanOfEcpController;
129   ULONG  PortNumber;
130   ULONG  HardwareCapabilities;
131   PPARALLEL_SET_CHIP_MODE  TrySetChipMode;
132   PPARALLEL_CLEAR_CHIP_MODE  ClearChipMode;
133   ULONG  FifoDepth;
134   ULONG  FifoWidth;
135   PHYSICAL_ADDRESS  EppControllerPhysicalAddress;
136   ULONG  SpanOfEppController;
137   ULONG  Ieee1284_3DeviceCount;
138   PPARALLEL_TRY_SELECT_ROUTINE  TrySelectDevice;
139   PPARALLEL_DESELECT_ROUTINE  DeselectDevice;
140   PVOID  Context;
141   ULONG  CurrentMode;
142   PWSTR  PortName;
143 } PARALLEL_PNP_INFORMATION, *PPARALLEL_PNP_INFORMATION;
144
145 typedef BOOLEAN DDKAPI
146 (*PPARALLEL_TRY_ALLOCATE_ROUTINE)(
147   /*IN*/ PVOID  TryAllocateContext);
148
149 typedef VOID DDKAPI
150 (*PPARALLEL_FREE_ROUTINE)(
151   /*IN*/ PVOID  FreeContext);
152
153 typedef ULONG DDKAPI
154 (*PPARALLEL_QUERY_WAITERS_ROUTINE)(
155   /*IN*/  PVOID  QueryAllocsContext);
156
157 typedef struct _PARALLEL_PORT_INFORMATION {
158   PHYSICAL_ADDRESS  OriginalController;
159   PUCHAR  Controller;
160   ULONG  SpanOfController;
161   PPARALLEL_TRY_ALLOCATE_ROUTINE  TryAllocatePort;
162   PPARALLEL_FREE_ROUTINE  FreePort;
163   PPARALLEL_QUERY_WAITERS_ROUTINE  QueryNumWaiters;
164   PVOID  Context;
165 } PARALLEL_PORT_INFORMATION, *PPARALLEL_PORT_INFORMATION;
166
167 /* PARALLEL_CHIP_MODE.ModeFlags */
168 #define INITIAL_MODE                      0x00
169 #define PARCHIP_ECR_ARBITRATOR            0x01
170
171 typedef struct _PARALLEL_CHIP_MODE {
172   UCHAR  ModeFlags;
173   BOOLEAN  success;
174 } PARALLEL_CHIP_MODE, *PPARALLEL_CHIP_MODE;
175
176 typedef VOID DDKAPI
177 (*PPARALLEL_DEFERRED_ROUTINE)(
178   /*IN*/  PVOID  DeferredContext);
179
180 typedef struct _PARALLEL_INTERRUPT_SERVICE_ROUTINE {
181   PKSERVICE_ROUTINE  InterruptServiceRoutine;
182   PVOID  InterruptServiceContext;
183   PPARALLEL_DEFERRED_ROUTINE  DeferredPortCheckRoutine;
184   PVOID  DeferredPortCheckContext;
185 } PARALLEL_INTERRUPT_SERVICE_ROUTINE, *PPARALLEL_INTERRUPT_SERVICE_ROUTINE;
186
187
188 #define IOCTL_INTERNAL_DISCONNECT_IDLE \
189   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 32, METHOD_BUFFERED, FILE_ANY_ACCESS)
190 #define IOCTL_INTERNAL_LOCK_PORT \
191   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 37, METHOD_BUFFERED, FILE_ANY_ACCESS)
192 #define IOCTL_INTERNAL_LOCK_PORT_NO_SELECT \
193   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 52, METHOD_BUFFERED, FILE_ANY_ACCESS)
194 #define IOCTL_INTERNAL_PARCLASS_CONNECT \
195   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
196 #define IOCTL_INTERNAL_PARCLASS_DISCONNECT \
197   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
198 #define IOCTL_INTERNAL_UNLOCK_PORT \
199   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 38, METHOD_BUFFERED, FILE_ANY_ACCESS)
200 #define IOCTL_INTERNAL_UNLOCK_PORT_NO_DESELECT \
201   CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
202
203 typedef USHORT DDKAPI
204 (*PDETERMINE_IEEE_MODES)(
205   /*IN*/ PVOID  Context);
206
207 typedef enum _PARALLEL_SAFETY {
208         SAFE_MODE,
209         UNSAFE_MODE
210 } PARALLEL_SAFETY;
211
212 typedef NTSTATUS DDKAPI
213 (*PNEGOTIATE_IEEE_MODE)(
214   /*IN*/ PVOID  Context,
215   /*IN*/ USHORT  ModeMaskFwd,
216   /*IN*/ USHORT  ModeMaskRev,
217   /*IN*/ PARALLEL_SAFETY  ModeSafety,
218   /*IN*/ BOOLEAN  IsForward);
219
220 typedef NTSTATUS DDKAPI
221 (*PTERMINATE_IEEE_MODE)(
222   /*IN*/  PVOID  Context);
223         
224 typedef NTSTATUS DDKAPI
225 (*PPARALLEL_IEEE_FWD_TO_REV)(
226   /*IN*/ PVOID  Context);
227
228 typedef NTSTATUS DDKAPI
229 (*PPARALLEL_IEEE_REV_TO_FWD)(
230   /*IN*/ PVOID  Context);
231
232 typedef NTSTATUS DDKAPI
233 (*PPARALLEL_READ)(
234   /*IN*/  PVOID  Context,
235   /*OUT*/ PVOID  Buffer,
236   /*IN*/  ULONG  NumBytesToRead,
237   /*OUT*/ PULONG  NumBytesRead,
238   /*IN*/  UCHAR  Channel);
239         
240 typedef NTSTATUS DDKAPI
241 (*PPARALLEL_WRITE)(
242   /*IN*/  PVOID  Context,
243   /*OUT*/ PVOID  Buffer,
244   /*IN*/  ULONG  NumBytesToWrite,
245   /*OUT*/ PULONG  NumBytesWritten,
246   /*IN*/  UCHAR   Channel);
247
248 typedef NTSTATUS DDKAPI
249 (*PPARALLEL_TRYSELECT_DEVICE)(
250   /*IN*/ PVOID  Context,
251   /*IN*/ PARALLEL_1284_COMMAND  Command);
252
253 typedef NTSTATUS DDKAPI
254 (*PPARALLEL_DESELECT_DEVICE)(
255   /*IN*/ PVOID  Context,
256   /*IN*/ PARALLEL_1284_COMMAND  Command);
257
258 typedef struct _PARCLASS_INFORMATION {
259   PUCHAR  Controller;
260   PUCHAR  EcrController;
261   ULONG  SpanOfController;
262   PDETERMINE_IEEE_MODES  DetermineIeeeModes;
263   PNEGOTIATE_IEEE_MODE  NegotiateIeeeMode;
264   PTERMINATE_IEEE_MODE  TerminateIeeeMode;
265   PPARALLEL_IEEE_FWD_TO_REV  IeeeFwdToRevMode;
266   PPARALLEL_IEEE_REV_TO_FWD  IeeeRevToFwdMode;
267   PPARALLEL_READ  ParallelRead;
268   PPARALLEL_WRITE  ParallelWrite;
269   PVOID  ParclassContext;
270   ULONG  HardwareCapabilities;
271   ULONG  FifoDepth;
272   ULONG  FifoWidth;
273   PPARALLEL_TRYSELECT_DEVICE  ParallelTryselect;
274   PPARALLEL_DESELECT_DEVICE  ParallelDeSelect;
275 } PARCLASS_INFORMATION, *PPARCLASS_INFORMATION;
276
277 #ifdef __cplusplus
278 }
279 #endif
280
281 #endif /* __PARALLEL_H */