holdingarea/llvm/llvm-gcc4.2-2.7-x86-mingw32/include/ddk/parallel.h
branchbug235_bringup_0
changeset 20 d2d6724aef32
equal deleted inserted replaced
19:da7c1a80df0d 20:d2d6724aef32
       
     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 */