4 * ParPort driver interface
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
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.
32 #define DD_PARALLEL_PORT_BASE_NAME "ParallelPort"
33 #define DD_PARALLEL_PORT_BASE_NAME_U L"ParallelPort"
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)
63 typedef struct _PARALLEL_1284_COMMAND
{
67 } PARALLEL_1284_COMMAND
, *PPARALLEL_1284_COMMAND
;
69 /* PARALLEL_1284_COMMAND.CommandFlags */
70 #define PAR_END_OF_CHAIN_DEVICE 0x00000001
71 #define PAR_HAVE_PORT_KEEP_PORT 0x00000002
73 typedef struct _MORE_PARALLEL_PORT_INFORMATION
{
74 INTERFACE_TYPE InterfaceType
;
77 ULONG InterruptVector
;
78 KAFFINITY InterruptAffinity
;
79 KINTERRUPT_MODE InterruptMode
;
80 } MORE_PARALLEL_PORT_INFORMATION
, *PMORE_PARALLEL_PORT_INFORMATION
;
83 (NTAPI
*PPARALLEL_SET_CHIP_MODE
)(
84 IN PVOID SetChipContext
,
88 (NTAPI
*PPARALLEL_CLEAR_CHIP_MODE
)(
89 IN PVOID ClearChipContext
,
93 (NTAPI
*PPARCHIP_CLEAR_CHIP_MODE
)(
94 IN PVOID ClearChipContext
,
98 (NTAPI
*PPARALLEL_TRY_SELECT_ROUTINE
)(
99 IN PVOID TrySelectContext
,
100 IN PVOID TrySelectCommand
);
103 (NTAPI
*PPARALLEL_DESELECT_ROUTINE
)(
104 IN PVOID DeselectContext
,
105 IN PVOID DeselectCommand
);
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
116 typedef struct _PARALLEL_PNP_INFORMATION
{
117 PHYSICAL_ADDRESS OriginalEcpController
;
118 PUCHAR EcpController
;
119 ULONG SpanOfEcpController
;
121 ULONG HardwareCapabilities
;
122 PPARALLEL_SET_CHIP_MODE TrySetChipMode
;
123 PPARALLEL_CLEAR_CHIP_MODE ClearChipMode
;
126 PHYSICAL_ADDRESS EppControllerPhysicalAddress
;
127 ULONG SpanOfEppController
;
128 ULONG Ieee1284_3DeviceCount
;
129 PPARALLEL_TRY_SELECT_ROUTINE TrySelectDevice
;
130 PPARALLEL_DESELECT_ROUTINE DeselectDevice
;
134 } PARALLEL_PNP_INFORMATION
, *PPARALLEL_PNP_INFORMATION
;
137 (NTAPI
*PPARALLEL_TRY_ALLOCATE_ROUTINE
)(
138 IN PVOID TryAllocateContext
);
141 (NTAPI
*PPARALLEL_FREE_ROUTINE
)(
142 IN PVOID FreeContext
);
145 (NTAPI
*PPARALLEL_QUERY_WAITERS_ROUTINE
)(
146 IN PVOID QueryAllocsContext
);
148 typedef struct _PARALLEL_PORT_INFORMATION
{
149 PHYSICAL_ADDRESS OriginalController
;
151 ULONG SpanOfController
;
152 PPARALLEL_TRY_ALLOCATE_ROUTINE TryAllocatePort
;
153 PPARALLEL_FREE_ROUTINE FreePort
;
154 PPARALLEL_QUERY_WAITERS_ROUTINE QueryNumWaiters
;
156 } PARALLEL_PORT_INFORMATION
, *PPARALLEL_PORT_INFORMATION
;
158 /* PARALLEL_CHIP_MODE.ModeFlags */
159 #define INITIAL_MODE 0x00
160 #define PARCHIP_ECR_ARBITRATOR 0x01
162 typedef struct _PARALLEL_CHIP_MODE
{
165 } PARALLEL_CHIP_MODE
, *PPARALLEL_CHIP_MODE
;
168 (NTAPI
*PPARALLEL_DEFERRED_ROUTINE
)(
169 IN PVOID DeferredContext
);
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
;
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)
195 (NTAPI
*PDETERMINE_IEEE_MODES
)(
198 typedef enum _PARALLEL_SAFETY
{
204 (NTAPI
*PNEGOTIATE_IEEE_MODE
)(
206 IN USHORT ModeMaskFwd
,
207 IN USHORT ModeMaskRev
,
208 IN PARALLEL_SAFETY ModeSafety
,
209 IN BOOLEAN IsForward
);
212 (NTAPI
*PTERMINATE_IEEE_MODE
)(
216 (NTAPI
*PPARALLEL_IEEE_FWD_TO_REV
)(
220 (NTAPI
*PPARALLEL_IEEE_REV_TO_FWD
)(
224 (NTAPI
*PPARALLEL_READ
)(
227 IN ULONG NumBytesToRead
,
228 OUT PULONG NumBytesRead
,
232 (NTAPI
*PPARALLEL_WRITE
)(
235 IN ULONG NumBytesToWrite
,
236 OUT PULONG NumBytesWritten
,
240 (NTAPI
*PPARALLEL_TRYSELECT_DEVICE
)(
242 IN PARALLEL_1284_COMMAND Command
);
245 (NTAPI
*PPARALLEL_DESELECT_DEVICE
)(
247 IN PARALLEL_1284_COMMAND Command
);
249 typedef struct _PARCLASS_INFORMATION
{
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
;
264 PPARALLEL_TRYSELECT_DEVICE ParallelTryselect
;
265 PPARALLEL_DESELECT_DEVICE ParallelDeSelect
;
266 } PARCLASS_INFORMATION
, *PPARCLASS_INFORMATION
;
272 #endif /* __PARALLEL_H */