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