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