| 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 */ |