/*++ Copyright (c) 1993 Microsoft Corporation Module Name: parallel.h Abstract: This file defines the services supplied by the parallel port driver. Author: norbertk Revision History: --*/ #ifndef _PARALLEL_ #define _PARALLEL_ #include // // Define the parallel port device name strings. // #define DD_PARALLEL_PORT_BASE_NAME_U L"ParallelPort" // // NtDeviceIoControlFile internal IoControlCode values for parallel device. // #define IOCTL_INTERNAL_PARALLEL_PORT_ALLOCATE CTL_CODE(FILE_DEVICE_PARALLEL_PORT, 11, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_INTERNAL_GET_PARALLEL_PORT_INFO CTL_CODE(FILE_DEVICE_PARALLEL_PORT, 12, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT CTL_CODE(FILE_DEVICE_PARALLEL_PORT, 13, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_INTERNAL_PARALLEL_DISCONNECT_INTERRUPT CTL_CODE(FILE_DEVICE_PARALLEL_PORT, 14, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_INTERNAL_RELEASE_PARALLEL_PORT_INFO CTL_CODE(FILE_DEVICE_PARALLEL_PORT, 15, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_INTERNAL_GET_MORE_PARALLEL_PORT_INFO CTL_CODE(FILE_DEVICE_PARALLEL_PORT, 17, METHOD_BUFFERED, FILE_ANY_ACCESS) typedef BOOLEAN (*PPARALLEL_TRY_ALLOCATE_ROUTINE) ( IN PVOID TryAllocateContext ); typedef VOID (*PPARALLEL_FREE_ROUTINE) ( IN PVOID FreeContext ); typedef ULONG (*PPARALLEL_QUERY_WAITERS_ROUTINE) ( IN PVOID QueryAllocsContext ); typedef struct _PARALLEL_PORT_INFORMATION { PHYSICAL_ADDRESS OriginalController; PUCHAR Controller; ULONG SpanOfController; PPARALLEL_TRY_ALLOCATE_ROUTINE TryAllocatePort; PPARALLEL_FREE_ROUTINE FreePort; PPARALLEL_QUERY_WAITERS_ROUTINE QueryNumWaiters; PVOID Context; } PARALLEL_PORT_INFORMATION, *PPARALLEL_PORT_INFORMATION; // // The following structure is passed in on an // IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT and on an // IOCTL_INTERNAL_PARALLEL_DISCONNECT_INTERRUPT request. // typedef VOID (*PPARALLEL_DEFERRED_ROUTINE) ( IN PVOID DeferredContext ); typedef struct _PARALLEL_INTERRUPT_SERVICE_ROUTINE { PKSERVICE_ROUTINE InterruptServiceRoutine; PVOID InterruptServiceContext; PPARALLEL_DEFERRED_ROUTINE DeferredPortCheckRoutine; /* OPTIONAL */ PVOID DeferredPortCheckContext; /* OPTIONAL */ } PARALLEL_INTERRUPT_SERVICE_ROUTINE, *PPARALLEL_INTERRUPT_SERVICE_ROUTINE; // // The following structure is returned on an // IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT request; // typedef struct _PARALLEL_INTERRUPT_INFORMATION { PKINTERRUPT InterruptObject; PPARALLEL_TRY_ALLOCATE_ROUTINE TryAllocatePortAtInterruptLevel; PPARALLEL_FREE_ROUTINE FreePortFromInterruptLevel; PVOID Context; } PARALLEL_INTERRUPT_INFORMATION, *PPARALLEL_INTERRUPT_INFORMATION; // // The following structure is returned on an // IOCTL_INTERNAL_GET_MORE_PARALLEL_PORT_INFO. // typedef struct _MORE_PARALLEL_PORT_INFORMATION { INTERFACE_TYPE InterfaceType; ULONG BusNumber; ULONG InterruptLevel; ULONG InterruptVector; KAFFINITY InterruptAffinity; KINTERRUPT_MODE InterruptMode; } MORE_PARALLEL_PORT_INFORMATION, *PMORE_PARALLEL_PORT_INFORMATION; #endif // _PARALLEL_