/*++ Copyright (C) Microsoft Corporation, 1998 - 1999 Module Name: parport.sys File Name: funcdecl.h Abstract: This file contains the parport function declarations for functions that are called from a translation unit other than the one in which the function is defined. --*/ NTSTATUS P5FdoCreateThread( PFDO_EXTENSION Fdx ); NTSTATUS PptAcquirePortViaIoctl( IN PDEVICE_OBJECT PortDeviceObject, IN PLARGE_INTEGER Timeout OPTIONAL ); VOID P5SetPhase( PPDO_EXTENSION Pdx, P1284_PHASE Phase ); VOID P5BSetPhase( PIEEE_STATE IeeeState, P1284_PHASE Phase ); VOID P5TraceIrpArrival( PDEVICE_OBJECT DevObj, PIRP Irp ); VOID P5TraceIrpCompletion( PIRP Irp ); // irpQueue.c VOID P2InitIrpQueueContext( IN PIRPQUEUE_CONTEXT IrpQueueContext ); VOID P2CancelQueuedIrp( IN PIRPQUEUE_CONTEXT IrpQueueContext, IN PIRP Irp ); NTSTATUS P2QueueIrp( IN PIRP Irp, IN PIRPQUEUE_CONTEXT IrpQueueContext, IN PDRIVER_CANCEL CancelRoutine ); PIRP P2DequeueIrp( IN PIRPQUEUE_CONTEXT IrpQueueContext, IN PDRIVER_CANCEL CancelRoutine ); VOID P2CancelRoutine( IN PDEVICE_OBJECT DevObj, IN PIRP Irp ); // test.c // // ieee1284.c // VOID IeeeTerminate1284Mode( IN PPDO_EXTENSION Extension ); NTSTATUS IeeeEnter1284Mode( IN PPDO_EXTENSION Extension, IN UCHAR Extensibility ); VOID IeeeDetermineSupportedProtocols( IN PPDO_EXTENSION Extension ); NTSTATUS IeeeNegotiateBestMode( IN PPDO_EXTENSION Extension, IN USHORT usReadMask, IN USHORT usWriteMask ); NTSTATUS IeeeNegotiateMode( IN PPDO_EXTENSION Extension, IN USHORT usReadMask, IN USHORT usWriteMask ); // // port.c // VOID ParReleasePortInfoToPortDevice( IN PPDO_EXTENSION Extension ); VOID ParFreePort( IN PPDO_EXTENSION Extension ); NTSTATUS ParAllocPortCompletionRoutine( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ); BOOLEAN ParAllocPort( IN PPDO_EXTENSION Extension ); NTSTATUS PptWmiQueryWmiRegInfo( IN PDEVICE_OBJECT PDevObj, OUT PULONG PRegFlags, OUT PUNICODE_STRING PInstanceName, OUT PUNICODE_STRING *PRegistryPath, OUT PUNICODE_STRING MofResourceName, OUT PDEVICE_OBJECT *Pdo ); NTSTATUS PptWmiQueryWmiDataBlock( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG GuidIndex, IN ULONG InstanceIndex, IN ULONG InstanceCount, IN OUT PULONG InstanceLengthArray, IN ULONG OutBufferSize, OUT PUCHAR Buffer ); NTSTATUS ParGetPortInfoFromPortDevice( IN OUT PPDO_EXTENSION Extension ); VOID ParReleasePortInfoToPortDevice( IN PPDO_EXTENSION Extension ); VOID ParFreePort( IN PPDO_EXTENSION Extension ); NTSTATUS ParAllocPortCompletionRoutine( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ); BOOLEAN ParAllocPort( IN PPDO_EXTENSION Extension ); VOID TstReadDeviceId( PFDO_EXTENSION Ext ); NTSTATUS P4IeeeEnter1284Mode( IN PUCHAR Controller, IN UCHAR Extensibility, IN OUT PIEEE_STATE State ); VOID P4IeeeTerminate1284Mode( IN PUCHAR Controller, IN OUT PIEEE_STATE IeeeState, IN enum XFlagOnEvent24 XFlagOnEvent24 ); NTSTATUS P4NibbleModeRead( IN PUCHAR Controller, IN PVOID Buffer, IN ULONG BufferSize, OUT PULONG BytesTransferred, IN OUT PIEEE_STATE IeeeState ); VOID P4MakeClassNameFromPortLptName( IN PWSTR LptName, IN OUT PUNICODE_STRING ParallelName ); VOID ParMakeClassNameFromNumber( IN ULONG Number, OUT PUNICODE_STRING ClassName ); // NTSTATUS PptFdoUnhandledRequest( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptPdoUnhandledRequest( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptDispatchPnp( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptDispatchPower( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptDispatchCreate( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptDispatchClose( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptDispatchCleanup( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptDispatchRead( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptDispatchWrite( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptDispatchDeviceControl( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptDispatchInternalDeviceControl( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptDispatchQueryInformation( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptDispatchSetInformation( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptDispatchSystemControl( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptFdoPnp( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptFdoPower( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptFdoCreateOpen( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptFdoClose( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptFdoCleanup( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptFdoRead( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptFdoWrite( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptFdoDeviceControl( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptFdoInternalDeviceControl( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptFdoQueryInformation( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptFdoSetInformation( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptFdoSystemControl( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptPdoPnp( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptPdoPower( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptPdoCreate( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptPdoClose( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptPdoCleanup( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptPdoRead( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptPdoWrite( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptPdoDeviceControl( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptPdoInternalDeviceControl( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptPdoQueryInformation( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptPdoSetInformation( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptPdoSystemControl( PDEVICE_OBJECT DevObj, PIRP Irp ); NTSTATUS PptWmiInitWmi(PDEVICE_OBJECT DeviceObject); NTSTATUS PptDispatchSystemControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp); // // pnp.c - dvdf // VOID PptPnpInitDispatchFunctionTable( VOID ); NTSTATUS P5AddDevice( IN PDRIVER_OBJECT pDriverObject, IN PDEVICE_OBJECT pPhysicalDeviceObject ); NTSTATUS PptDispatchPnp ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); // // // NTSTATUS PptFailRequest( IN PIRP Irp, IN NTSTATUS Status ); NTSTATUS PptDispatchPreProcessIrp( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PptDispatchPostProcessIrp(); // // initunld.c // NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ); VOID PptUnload( IN PDRIVER_OBJECT DriverObject ); // // parport.c // NTSTATUS PptSystemControl ( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp ); NTSTATUS PptSynchCompletionRoutine( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PKEVENT Event ); VOID PptLogError( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT DeviceObject OPTIONAL, IN PHYSICAL_ADDRESS P1, IN PHYSICAL_ADDRESS P2, IN ULONG SequenceNumber, IN UCHAR MajorFunctionCode, IN UCHAR RetryCount, IN ULONG UniqueErrorValue, IN NTSTATUS FinalStatus, IN NTSTATUS SpecificIOStatus ); NTSTATUS PptConnectInterrupt( IN PFDO_EXTENSION Extension ); VOID PptDisconnectInterrupt( IN PFDO_EXTENSION Extension ); NTSTATUS PptDispatchCreateOpen( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PptDispatchClose( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); BOOLEAN PptSynchronizedIncrement( IN OUT PVOID SyncContext ); BOOLEAN PptSynchronizedDecrement( IN OUT PVOID SyncContext ); BOOLEAN PptSynchronizedRead( IN OUT PVOID SyncContext ); BOOLEAN PptSynchronizedQueue( IN PVOID Context ); BOOLEAN PptSynchronizedDisconnect( IN PVOID Context ); VOID PptCancelRoutine( IN OUT PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp ); VOID PptFreePortDpc( IN PKDPC Dpc, IN OUT PVOID Extension, IN PVOID SystemArgument1, IN PVOID SystemArgument2 ); BOOLEAN PptTryAllocatePortAtInterruptLevel( IN PVOID Context ); VOID PptFreePortFromInterruptLevel( IN PVOID Context ); BOOLEAN PptInterruptService( IN PKINTERRUPT Interrupt, IN PVOID Extension ); BOOLEAN PptTryAllocatePort( IN PVOID Extension ); BOOLEAN PptTraversePortCheckList( IN PVOID Extension ); VOID PptFreePort( IN PVOID Extension ); ULONG PptQueryNumWaiters( IN PVOID Extension ); NTSTATUS PptDispatchInternalDeviceControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); VOID PptCleanupDevice( IN PFDO_EXTENSION Extension ); NTSTATUS PptDispatchCleanup( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); BOOLEAN PptIsNecR98Machine( void ); VOID PowerStateCallback( IN PVOID CallbackContext, IN PVOID Argument1, IN PVOID Argument2 ); NTSTATUS PptDispatchPower ( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp ); VOID PptRegInitDriverSettings( PUNICODE_STRING RegistryPath ); PWSTR PptGetPortNameFromPhysicalDeviceObject( PDEVICE_OBJECT PhysicalDeviceObject ); PVOID PptSetCancelRoutine( IN PIRP Irp, IN PDRIVER_CANCEL CancelRoutine ); NTSTATUS PptAcquireRemoveLockOrFailIrp( IN PDEVICE_OBJECT DeviceObject, PIRP Irp ); // // debug.c // UCHAR P5ReadPortUchar( PUCHAR Port ); VOID P5ReadPortBufferUchar( PUCHAR Port, PUCHAR Buffer, ULONG Count ); VOID P5WritePortUchar( PUCHAR Port, UCHAR Value ); VOID P5WritePortBufferUchar( PUCHAR Port, PUCHAR Buffer, ULONG Count ); VOID PptFdoDumpPnpIrpInfo( IN PDEVICE_OBJECT Fdo, IN PIRP Irp ); VOID PptPdoDumpPnpIrpInfo( IN PDEVICE_OBJECT Pdo, IN PIRP Irp ); NTSTATUS PptAcquireRemoveLock( IN PIO_REMOVE_LOCK RemoveLock, IN PVOID Tag OPTIONAL ); VOID PptReleaseRemoveLock( IN PIO_REMOVE_LOCK RemoveLock, IN PVOID Tag OPTIONAL ); VOID PptReleaseRemoveLockAndWait( IN PIO_REMOVE_LOCK RemoveLock, IN PVOID Tag ); VOID PptDebugDumpResourceList( PIO_RESOURCE_LIST ResourceList ); VOID PptDebugDumpResourceRequirementsList( PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirementsList ); // // // VOID PptLogError( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT DeviceObject OPTIONAL, IN PHYSICAL_ADDRESS P1, IN PHYSICAL_ADDRESS P2, IN ULONG SequenceNumber, IN UCHAR MajorFunctionCode, IN UCHAR RetryCount, IN ULONG UniqueErrorValue, IN NTSTATUS FinalStatus, IN NTSTATUS SpecificIOStatus ); VOID PptReportResourcesDevice( IN PFDO_EXTENSION Extension, IN BOOLEAN ClaimInterrupt, OUT PBOOLEAN ConflictDetected ); VOID PptUnReportResourcesDevice( IN OUT PFDO_EXTENSION Extension ); NTSTATUS PptConnectInterrupt( IN PFDO_EXTENSION Extension ); VOID PptDisconnectInterrupt( IN PFDO_EXTENSION Extension ); NTSTATUS PptDispatchCreateClose( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); BOOLEAN PptSynchronizedIncrement( IN OUT PVOID SyncContext ); BOOLEAN PptSynchronizedDecrement( IN OUT PVOID SyncContext ); BOOLEAN PptSynchronizedRead( IN OUT PVOID SyncContext ); BOOLEAN PptSynchronizedQueue( IN PVOID Context ); BOOLEAN PptSynchronizedDisconnect( IN PVOID Context ); VOID PptCancelRoutine( IN OUT PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp ); VOID PptFreePortDpc( IN PKDPC Dpc, IN OUT PVOID Extension, IN PVOID SystemArgument1, IN PVOID SystemArgument2 ); BOOLEAN PptTryAllocatePortAtInterruptLevel( IN PVOID Context ); VOID PptFreePortFromInterruptLevel( IN PVOID Context ); BOOLEAN PptInterruptService( IN PKINTERRUPT Interrupt, IN PVOID Extension ); BOOLEAN PptTryAllocatePort( IN PVOID Extension ); BOOLEAN PptTraversePortCheckList( IN PVOID Extension ); VOID PptFreePort( IN PVOID Extension ); ULONG PptQueryNumWaiters( IN PVOID Extension ); NTSTATUS PptDispatchDeviceControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); VOID PptCleanupDevice( IN PFDO_EXTENSION Extension ); NTSTATUS PptDispatchCleanup( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); VOID PptUnload( IN PDRIVER_OBJECT DriverObject ); BOOLEAN PptIsNecR98Machine( void ); // // parmode.c // NTSTATUS PptDetectChipFilter( IN PFDO_EXTENSION Extension ); NTSTATUS PptDetectPortType( IN PFDO_EXTENSION Extension ); NTSTATUS PptSetChipMode ( IN PFDO_EXTENSION Extension, IN UCHAR ChipMode ); NTSTATUS PptClearChipMode ( IN PFDO_EXTENSION Extension, IN UCHAR ChipMode ); // // par12843.c // ULONG PptInitiate1284_3( IN PVOID Extension ); NTSTATUS PptTrySelectDevice( IN PVOID Context, IN PVOID TrySelectCommand ); NTSTATUS PptDeselectDevice( IN PVOID Context, IN PVOID DeselectCommand ); ULONG Ppt1284_3AssignAddress( IN PFDO_EXTENSION DeviceExtension ); BOOLEAN PptSend1284_3Command( IN PUCHAR CurrentPort, IN UCHAR Command ); // // Ppt RemoveLock function declarations // NTSTATUS PptAcquireRemoveLock( IN PIO_REMOVE_LOCK RemoveLock, IN PVOID Tag OPTIONAL ); VOID PptReleaseRemoveLock( IN PIO_REMOVE_LOCK RemoveLock, IN PVOID Tag OPTIONAL ); VOID PptReleaseRemoveLockAndWait( IN PIO_REMOVE_LOCK RemoveLock, IN PVOID Tag ); // // power management function declarations // NTSTATUS PptPowerDispatch ( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp ); // // other function declarations // PWSTR PptGetPortNameFromPhysicalDeviceObject( PDEVICE_OBJECT PhysicalDeviceObject ); NTSTATUS PptSynchCompletionRoutine( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PKEVENT Event ); NTSTATUS PptTrySelectLegacyZip( IN PVOID Context, IN PVOID TrySelectCommand ); NTSTATUS PptDeselectLegacyZip( IN PVOID Context, IN PVOID DeselectCommand ); NTSTATUS PptRegGetDeviceParameterDword( IN PDEVICE_OBJECT Pdo, IN PWSTR ParameterName, IN OUT PULONG ParameterValue ); NTSTATUS PptRegSetDeviceParameterDword( IN PDEVICE_OBJECT Pdo, IN PWSTR ParameterName, IN PULONG ParameterValue ); NTSTATUS PptBuildParallelPortDeviceName( IN ULONG Number, OUT PUNICODE_STRING DeviceName ); NTSTATUS PptInitializeDeviceExtension( IN PDRIVER_OBJECT pDriverObject, IN PDEVICE_OBJECT pPhysicalDeviceObject, IN PDEVICE_OBJECT pDeviceObject, IN PUNICODE_STRING uniNameString, IN PWSTR portName, IN ULONG portNumber ); NTSTATUS PptGetPortNumberFromLptName( IN PWSTR PortName, OUT PULONG PortNumber ); PDEVICE_OBJECT PptBuildFdo( IN PDRIVER_OBJECT pDriverObject, IN PDEVICE_OBJECT pPhysicalDeviceObject ); VOID PptDetectEppPort( IN PFDO_EXTENSION Extension ); // orig pnp.h follows NTSTATUS PptPnpFilterResourceRequirements( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PptPnpQueryDeviceRelations( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PptPnpQueryStopDevice( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PptPnpCancelStopDevice( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PptPnpStopDevice( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PptPnpQueryRemoveDevice( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PptPnpCancelRemoveDevice( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PptPnpRemoveDevice( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PptPnpSurpriseRemoval( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PptPnpUnhandledIrp( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PptPnpStartDevice( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS PptPnpStartValidateResources( IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN FoundPort, IN BOOLEAN FoundIrq, IN BOOLEAN FoundDma ); NTSTATUS PptPnpStartScanCmResourceList( IN PFDO_EXTENSION Extension, IN PIRP Irp, OUT PBOOLEAN FoundPort, OUT PBOOLEAN FoundIrq, OUT PBOOLEAN FoundDma ); NTSTATUS PptPnpPassThroughPnpIrpAndReleaseRemoveLock( IN PFDO_EXTENSION Extension, IN PIRP Irp ); NTSTATUS PptPnpRemoveDevice( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); VOID PptPnpFilterNukeIrqResourceDescriptors( IN OUT PIO_RESOURCE_LIST IoResourceList ); VOID PptPnpFilterNukeIrqResourceDescriptorsFromAllLists( IN OUT PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirementsList ); BOOLEAN PptPnpFilterExistsNonIrqResourceList( IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirementsList ); PVOID PptPnpFilterGetEndOfResourceRequirementsList( IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirementsList ); BOOLEAN PptPnpListContainsIrqResourceDescriptor( IN PIO_RESOURCE_LIST List ); VOID PptPnpFilterRemoveIrqResourceLists( PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirementsList ); NTSTATUS PptPnpBounceAndCatchPnpIrp( IN PFDO_EXTENSION Extension, IN PIRP Irp ); PWSTR P4MakePdoSymLinkName( IN PWSTR LptName, IN enum _PdoType PdoType, IN UCHAR DaisyChainId, // ignored unless PdoType == PdoTypeDaisyChain IN UCHAR RetryNumber ); PWSTR P4MakePdoDeviceName( IN PWSTR LptName, IN enum _PdoType PdoType, IN UCHAR DaisyChainId, // ignored unless PdoType == PdoTypeDaisyChain IN UCHAR RetryNumber // used if we had a name collision on IoCreateDevice ); PDEVICE_OBJECT P4CreatePdo( IN PDEVICE_OBJECT Fdo, IN enum _PdoType PdoType, IN UCHAR DaisyChainId, // ignored unless PdoType == PdoTypeDaisyChain IN PCHAR Ieee1284Id // NULL if device does not report IEEE 1284 Device ID ); VOID P4DestroyPdo( IN PDEVICE_OBJECT Pdo ); NTSTATUS PptFindNatChip( IN PFDO_EXTENSION Extension ); NTSTATUS PptBuildResourceList( IN PFDO_EXTENSION Extension, IN ULONG Partial, IN PUCHAR *Addresses, OUT PCM_RESOURCE_LIST Resources ); // parmode.h NTSTATUS PptDetectChipFilter( IN PFDO_EXTENSION Extension ); NTSTATUS PptDetectPortType( IN PFDO_EXTENSION Extension ); NTSTATUS PptDetectPortCapabilities( IN PFDO_EXTENSION Extension ); VOID PptDetectEcpPort( IN PFDO_EXTENSION Extension ); VOID PptDetectEppPortIfDot3DevicePresent( IN PFDO_EXTENSION Extension ); VOID PptDetectEppPortIfUserRequested( IN PFDO_EXTENSION Extension ); VOID PptDetectBytePort( IN PFDO_EXTENSION Extension ); VOID PptDetermineFifoDepth( IN PFDO_EXTENSION Extension ); VOID PptDetermineFifoWidth( IN PFDO_EXTENSION Extension ); NTSTATUS PptSetChipMode ( IN PFDO_EXTENSION Extension, IN UCHAR ChipMode ); NTSTATUS PptClearChipMode ( IN PFDO_EXTENSION Extension, IN UCHAR ChipMode ); NTSTATUS PptEcrSetMode( IN PFDO_EXTENSION Extension, IN UCHAR ChipMode ); NTSTATUS PptCheckBidiMode( IN PFDO_EXTENSION Extension ); NTSTATUS PptEcrClearMode( IN PFDO_EXTENSION Extension ); NTSTATUS PptSetByteMode( IN PFDO_EXTENSION Extension, IN UCHAR ChipMode ); NTSTATUS PptClearByteMode( IN PFDO_EXTENSION Extension ); NTSTATUS PptCheckByteMode( IN PFDO_EXTENSION Extension ); NTSTATUS P4CompleteRequest( IN PIRP Irp, IN NTSTATUS Status, IN ULONG_PTR Information ); NTSTATUS P4CompleteRequestReleaseRemLock( IN PIRP Irp, IN NTSTATUS Status, IN ULONG_PTR Information, IN PIO_REMOVE_LOCK RemLock ); VOID P4SanitizeId( IN OUT PWSTR DeviceId ); VOID P4AcquireBus( IN PDEVICE_OBJECT Fdo ); // this call will block until bus can be acquired VOID P4ReleaseBus( PDEVICE_OBJECT Fdo ); PCHAR P4ReadRawIeee1284DeviceId( IN PUCHAR Controller ); VOID P4WritePortNameToDevNode( PDEVICE_OBJECT Pdo, PCHAR Location ); NTSTATUS PptPdoCreateOpen( IN PDEVICE_OBJECT Pdo, IN PIRP Irp ); NTSTATUS PptFdoHandleBusRelations( IN PDEVICE_OBJECT Fdo, IN PIRP Irp ); NTSTATUS PptPnpStartScanPciCardCmResourceList( PFDO_EXTENSION Extension, PIRP Irp, PBOOLEAN FoundPort, PBOOLEAN FoundIrq, PBOOLEAN FoundDma ); BOOLEAN PptIsPci( PFDO_EXTENSION Extension, PIRP Irp ); NTSTATUS PptPnpStartScanCmResourceList( PFDO_EXTENSION Extension, PIRP Irp, PBOOLEAN FoundPort, PBOOLEAN FoundIrq, PBOOLEAN FoundDma ); NTSTATUS PptPnpStartValidateResources( PDEVICE_OBJECT DeviceObject, IN BOOLEAN FoundPort, IN BOOLEAN FoundIrq, IN BOOLEAN FoundDma ); BOOLEAN PptPnpFilterExistsNonIrqResourceList( IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirementsList ); VOID PptPnpFilterRemoveIrqResourceLists( PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirementsList ); PVOID PptPnpFilterGetEndOfResourceRequirementsList( IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirementsList ); VOID PptPnpFilterNukeIrqResourceDescriptorsFromAllLists( PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirementsList ); VOID PptPnpFilterNukeIrqResourceDescriptors( PIO_RESOURCE_LIST IoResourceList ); BOOLEAN PptPnpListContainsIrqResourceDescriptor( IN PIO_RESOURCE_LIST List ); NTSTATUS PptPnpBounceAndCatchPnpIrp( PFDO_EXTENSION Extension, PIRP Irp ); NTSTATUS PptPnpPassThroughPnpIrpAndReleaseRemoveLock( IN PFDO_EXTENSION Extension, IN PIRP Irp ); VOID PptPdoGetPortInfoFromFdo( PDEVICE_OBJECT Pdo ); NTSTATUS ParForwardToReverse( IN PPDO_EXTENSION Extension ); BOOLEAN ParHaveReadData( IN PPDO_EXTENSION Extension ); NTSTATUS ParPing( IN PPDO_EXTENSION Extension ); NTSTATUS ParReverseToForward( IN PPDO_EXTENSION Extension ); NTSTATUS ParRead( IN PPDO_EXTENSION Extension, OUT PVOID Buffer, IN ULONG NumBytesToRead, OUT PULONG NumBytesRead ); VOID ParReadIrp( IN PPDO_EXTENSION Extension ); NTSTATUS ParSetFwdAddress( IN PPDO_EXTENSION Extension ); VOID ParTerminate( IN PPDO_EXTENSION Extension ); NTSTATUS ParWrite( IN PPDO_EXTENSION Extension, OUT PVOID Buffer, IN ULONG NumBytesToWrite, OUT PULONG NumBytesWritten ); VOID ParWriteIrp( IN PPDO_EXTENSION Extension ); NTSTATUS ParWmiPdoQueryWmiDataBlock( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG GuidIndex, IN ULONG InstanceIndex, IN ULONG InstanceCount, IN OUT PULONG InstanceLengthArray, IN ULONG OutBufferSize, OUT PUCHAR Buffer ); NTSTATUS ParWmiPdoQueryWmiRegInfo( IN PDEVICE_OBJECT PDevObj, OUT PULONG PRegFlags, OUT PUNICODE_STRING PInstanceName, OUT PUNICODE_STRING *PRegistryPath, OUT PUNICODE_STRING MofResourceName, OUT PDEVICE_OBJECT *Pdo ); NTSTATUS ParEcpEnterReversePhase( IN PPDO_EXTENSION Extension ); NTSTATUS ParEcpExitReversePhase( IN PPDO_EXTENSION Extension ); NTSTATUS ParEcpSetupPhase( IN PPDO_EXTENSION Extension ); VOID ParCleanupHwEcpPort( IN PPDO_EXTENSION Extension ); NTSTATUS ParEcpHwEmptyFIFO( IN PPDO_EXTENSION Extension ); NTSTATUS ParEcpHwHostRecoveryPhase( IN PPDO_EXTENSION Extension ); NTSTATUS ParEcpHwRecoverPort( IN PPDO_EXTENSION Extension, UCHAR bRecoverCode ); NTSTATUS ParEcpHwWaitForEmptyFIFO( IN PPDO_EXTENSION Extension ); //+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1998 - 1999 // // File: pcfuncdecl.h // //-------------------------------------------------------------------------- // // Function declarations for the ParClass (parallel.sys) driver // VOID ParDumpDevExtTable(); NTSTATUS ParWMIRegistrationControl( IN PDEVICE_OBJECT DeviceObject, IN ULONG Action ); BOOLEAN ParIsPodo( IN PDEVICE_OBJECT DevObj ); NTSTATUS ParWmiPdoInitWmi( IN PDEVICE_OBJECT DeviceObject ); NTSTATUS ParWmiPdoSystemControlDispatch( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); PCHAR Par3QueryDeviceId( IN PPDO_EXTENSION Extension, OUT PCHAR DeviceIdBuffer, IN ULONG BufferSize, OUT PULONG DeviceIdSize, IN BOOLEAN bReturnRawString, // TRUE == include the 2 size bytes in the returned string IN BOOLEAN bBuildStlDeviceId ); PDEVICE_OBJECT ParDetectCreatePdo(PDEVICE_OBJECT legacyPodo, UCHAR Dot3Id, BOOLEAN bStlDot3Id); NTSTATUS ParBuildSendInternalIoctl( IN ULONG IoControlCode, IN PDEVICE_OBJECT TargetDeviceObject, IN PVOID InputBuffer OPTIONAL, IN ULONG InputBufferLength, OUT PVOID OutputBuffer OPTIONAL, IN ULONG OutputBufferLength, IN PLARGE_INTEGER Timeout OPTIONAL ); // // initunld.c - driver initialization and unload // NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ); VOID ParUnload( IN PDRIVER_OBJECT DriverObject ); NTSTATUS ParPower( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp ); NTSTATUS ParPdoPower( IN PDEVICE_OBJECT Pdo, IN PIRP pIrp ); NTSTATUS ParFdoPower( IN PPDO_EXTENSION Extension, IN PIRP pIrp ); // parclass.c ? VOID ParLogError( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT DeviceObject OPTIONAL, IN PHYSICAL_ADDRESS P1, IN PHYSICAL_ADDRESS P2, IN ULONG SequenceNumber, IN UCHAR MajorFunctionCode, IN UCHAR RetryCount, IN ULONG UniqueErrorValue, IN NTSTATUS FinalStatus, IN NTSTATUS SpecificIOStatus ); UCHAR ParInitializeDevice( IN PPDO_EXTENSION Extension ); VOID ParNotInitError( IN PPDO_EXTENSION Extension, IN UCHAR DeviceStatus ); VOID PptPdoStartIo( IN PPDO_EXTENSION Extension ); VOID PptPdoThread( IN PVOID Context ); NTSTATUS ParCreateSystemThread( PPDO_EXTENSION Extension ); VOID ParCancelRequest( PDEVICE_OBJECT DeviceObject, PIRP Irp ); // exports.c USHORT ParExportedDetermineIeeeModes( IN PPDO_EXTENSION Extension ); NTSTATUS ParExportedIeeeFwdToRevMode( IN PPDO_EXTENSION Extension ); NTSTATUS ParExportedIeeeRevToFwdMode( IN PPDO_EXTENSION Extension ); NTSTATUS ParExportedNegotiateIeeeMode( IN PPDO_EXTENSION Extension, IN USHORT ModeMaskFwd, IN USHORT ModeMaskRev, IN PARALLEL_SAFETY ModeSafety, IN BOOLEAN IsForward ); NTSTATUS ParExportedTerminateIeeeMode( IN PPDO_EXTENSION Extension ); NTSTATUS ParExportedParallelRead( IN PPDO_EXTENSION Extension, IN PVOID Buffer, IN ULONG NumBytesToRead, OUT PULONG NumBytesRead, IN UCHAR Channel ); NTSTATUS ParExportedParallelWrite( IN PPDO_EXTENSION Extension, OUT PVOID Buffer, IN ULONG NumBytesToWrite, OUT PULONG NumBytesWritten, IN UCHAR Channel ); NTSTATUS ParTerminateParclassMode( IN PPDO_EXTENSION Extension ); VOID ParWriteIo( IN PPDO_EXTENSION Extension ); VOID ParReadIo( IN PPDO_EXTENSION Extension ); VOID ParDeviceIo( IN PPDO_EXTENSION Extension ); // pnp? NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ); NTSTATUS ParPnpAddDevice( IN PDRIVER_OBJECT pDriverObject, IN PDEVICE_OBJECT pPhysicalDeviceObject ); NTSTATUS ParParallelPnp( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp ); NTSTATUS ParPdoParallelPnp( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp ); NTSTATUS ParFdoParallelPnp( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp ); NTSTATUS ParSynchCompletionRoutine( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PKEVENT Event ); PDEVICE_OBJECT ParPnpCreateDevice( IN PDRIVER_OBJECT pDriverObject ); BOOLEAN ParMakeNames( IN ULONG ParallelPortNumber, OUT PUNICODE_STRING ClassName, OUT PUNICODE_STRING LinkName ); VOID ParCheckParameters( IN OUT PPDO_EXTENSION Extension ); VOID ParPnpFindDeviceIdKeys( OUT PCHAR *lppMFG, OUT PCHAR *lppMDL, OUT PCHAR *lppCLS, OUT PCHAR *lppDES, OUT PCHAR *lppAID, OUT PCHAR *lppCID, IN PCHAR lpDeviceID ); VOID ParDot3ParseDevId( PCHAR *lpp_DL, PCHAR *lpp_C, PCHAR *lpp_CMD, PCHAR *lpp_4DL, PCHAR *lpp_M, PCHAR lpDeviceID ); VOID GetCheckSum( IN PCHAR Block, IN USHORT Len, OUT PUSHORT CheckSum ); BOOLEAN String2Num( IN OUT PCHAR *lpp_Str, IN CHAR c, OUT ULONG *num ); UCHAR StringCountValues( IN PCHAR string, IN CHAR delimeter ); PCHAR StringChr( IN PCHAR string, IN CHAR c ); ULONG StringLen( IN PUCHAR string ); VOID StringSubst( IN OUT PCHAR lpS, IN CHAR chTargetChar, IN CHAR chReplacementChar, IN USHORT cbS ); BOOLEAN ParSelectDevice( IN PPDO_EXTENSION Extension, IN BOOLEAN HavePort ); BOOLEAN ParDeselectDevice( IN PPDO_EXTENSION Extension, IN BOOLEAN KeepPort ); NTSTATUS ParAcquireRemoveLock( IN PIO_REMOVE_LOCK RemoveLock, IN PVOID Tag OPTIONAL ); VOID ParReleaseRemoveLock( IN PIO_REMOVE_LOCK RemoveLock, IN PVOID Tag OPTIONAL ); VOID ParReleaseRemoveLockAndWait( IN PIO_REMOVE_LOCK RemoveLock, IN PVOID Tag ); NTSTATUS ParPnpInterfaceChangeNotify( IN PDEVICE_INTERFACE_CHANGE_NOTIFICATION pDeviceInterfaceChangeNotification, IN PVOID pContext ); VOID ParMakeClassNameFromNumber( IN ULONG Number, OUT PUNICODE_STRING ClassName ); VOID ParMakeDotClassNameFromBaseClassName( IN PUNICODE_STRING BaseClassName, IN ULONG Number, OUT PUNICODE_STRING DotClassName ); VOID ParInitCommonDOPre(PDEVICE_OBJECT DevObj, PDEVICE_OBJECT Fdo, PUNICODE_STRING ClassName); VOID ParInitCommonDOPost(PDEVICE_OBJECT DevObj); NTSTATUS ParInitPdo( IN PDEVICE_OBJECT NewPdo, IN PUCHAR DeviceIdString, IN ULONG DeviceIdLength, IN PDEVICE_OBJECT LegacyPodo, IN UCHAR Dot3Id ); NTSTATUS ParInitLegacyPodo(PDEVICE_OBJECT LegacyPodo, PUNICODE_STRING PortSymbolicLinkName); VOID ParAddDevObjToFdoList(PDEVICE_OBJECT DevObj); PDEVICE_OBJECT ParCreateLegacyPodo(PDEVICE_OBJECT Fdo, PUNICODE_STRING PortSymbolicLinkName); VOID ParAcquireListMutexAndKillDeviceObject(PDEVICE_OBJECT Fdo, PDEVICE_OBJECT DevObj); VOID ParKillDeviceObject( PDEVICE_OBJECT DeviceObject ); PWSTR ParCreateWideStringFromUnicodeString( PUNICODE_STRING UnicodeString ); PDEVICE_OBJECT ParDetectCreateEndOfChainPdo(PDEVICE_OBJECT LegacyPodo); VOID ParEnumerate1284_3Devices( IN PDEVICE_OBJECT pFdoDeviceObject, IN PDEVICE_OBJECT pPortDeviceObject, IN PDEVICE_OBJECT EndOfChainDeviceObject ); NTSTATUS ParPnpNotifyTargetDeviceChange( IN PDEVICE_INTERFACE_CHANGE_NOTIFICATION pDeviceInterfaceChangeNotification, IN PDEVICE_OBJECT pFdoDeviceObject ); NTSTATUS ParPnpNotifyInterfaceChange( IN PDEVICE_INTERFACE_CHANGE_NOTIFICATION NotificationStruct, IN PDEVICE_OBJECT Fdo ); NTSTATUS ParPnpGetId( IN PCHAR DeviceIdString, IN ULONG Type, OUT PCHAR resultString, OUT PCHAR descriptionString ); NTSTATUS ParPnpFdoQueryDeviceRelationsBusRelations( IN PDEVICE_OBJECT Fdo, IN PIRP Irp ); // VOID ParAddPodoToDevObjStruct(PPAR_DEVOBJ_STRUCT DevObjStructHead, PDEVICE_OBJECT CurrentDo); // VOID ParAddEndOfChainPdoToDevObjStruct(PPAR_DEVOBJ_STRUCT DevObjStructHead, PDEVICE_OBJECT CurrentDo); // VOID ParAddDot3PdoToDevObjStruct(PPAR_DEVOBJ_STRUCT DevObjStructHead, PDEVICE_OBJECT CurrentDo); // VOID ParAddLegacyZipPdoToDevObjStruct(IN PPAR_DEVOBJ_STRUCT DevObjStructHead, IN PDEVICE_OBJECT CurrentDo); // PPAR_DEVOBJ_STRUCT ParFindCreateDevObjStruct(PPAR_DEVOBJ_STRUCT DevObjStructHead, PUCHAR Controller); // VOID ParDumpDevObjStructList(PPAR_DEVOBJ_STRUCT DevObjStructHead); // PPAR_DEVOBJ_STRUCT ParBuildDevObjStructList(PDEVICE_OBJECT Fdo); // VOID ParDoParallelBusRescan(PPAR_DEVOBJ_STRUCT DevObjStructHead); BOOLEAN ParDeviceExists( PPDO_EXTENSION Extension, IN BOOLEAN HavePortKeepPort ); NTSTATUS ParAllocatePortDevice( IN PDEVICE_OBJECT PortDeviceObject ); NTSTATUS ParAllocatePortDevice( IN PDEVICE_OBJECT PortDeviceObject ); NTSTATUS ParAcquirePort( IN PDEVICE_OBJECT PortDeviceObject, IN PLARGE_INTEGER Timeout OPTIONAL ); NTSTATUS ParReleasePort( IN PDEVICE_OBJECT PortDeviceObject ); VOID ParDetectDot3DataLink( IN PPDO_EXTENSION Extension, IN PCHAR DeviceId ); VOID ParMarkPdoHardwareGone( IN PPDO_EXTENSION Extension ); NTSTATUS ParInit1284_3Bus( IN PDEVICE_OBJECT PortDeviceObject ); UCHAR ParGet1284_3DeviceCount( IN PDEVICE_OBJECT PortDeviceObject ); NTSTATUS ParSelect1284_3Device( IN PDEVICE_OBJECT PortDeviceObject, IN UCHAR Dot3DeviceId ); NTSTATUS ParDeselect1284_3Device( IN PDEVICE_OBJECT PortDeviceObject, IN UCHAR Dot3DeviceId ); PCHAR Par3QueryLegacyZipDeviceId( IN PPDO_EXTENSION Extension, OUT PCHAR CallerDeviceIdBuffer, OPTIONAL IN ULONG CallerBufferSize, OUT PULONG DeviceIdSize, IN BOOLEAN bReturnRawString // TRUE == include the 2 size bytes in the returned string // FALSE == discard the 2 size bytes ); PCHAR ParStlQueryStlDeviceId( IN PPDO_EXTENSION Extension, OUT PCHAR CallerDeviceIdBuffer, IN ULONG CallerBufferSize, OUT PULONG DeviceIdSize, IN BOOLEAN bReturnRawString ) ; BOOLEAN ParStlCheckIfStl( IN PPDO_EXTENSION Extension, IN ULONG ulDaisyIndex ) ; VOID ParCheckEnableLegacyZipFlag(); BOOLEAN P5LegacyZipDetected( IN PUCHAR Controller ); PWSTR ParGetPortLptName( IN PDEVICE_OBJECT PortDeviceObject ); NTSTATUS ParCreateDevice( IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName OPTIONAL, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject ); VOID ParInitializeExtension1284Info( IN PPDO_EXTENSION Extension ); VOID ParGetDriverParameterDword( IN PUNICODE_STRING ServicePath, IN PWSTR ParameterName, IN OUT PULONG ParameterValue ); NTSTATUS PptRegGetDword( IN ULONG RelativeTo, IN PWSTR Path, IN PWSTR ParameterName, IN OUT PULONG ParameterValue ); NTSTATUS PptRegSetDword( IN ULONG RelativeTo, IN PWSTR Path, IN PWSTR ParameterName, IN PULONG ParameterValue ); NTSTATUS PptRegGetSz( IN ULONG RelativeTo, IN PWSTR Path, IN PWSTR ParameterName, IN OUT PUNICODE_STRING ParameterValue ); NTSTATUS PptRegSetSz( IN ULONG RelativeTo, IN PWSTR Path, IN PWSTR ParameterName, IN PWSTR ParameterValue ); VOID ParFixupDeviceId( IN OUT PUCHAR DeviceId ); VOID PptWriteMfgMdlToDevNode( IN PDEVICE_OBJECT Pdo, IN PCHAR Mfg, IN PCHAR Mdl ); VOID P4SanitizeMultiSzId( IN OUT PWSTR WCharBuffer, IN ULONG BufWCharCount ); NTSTATUS ParEnterByteMode( IN PPDO_EXTENSION Extension, IN BOOLEAN DeviceIdRequest ); VOID ParTerminateByteMode( IN PPDO_EXTENSION Extension ); NTSTATUS ParByteModeRead( IN PPDO_EXTENSION Extension, IN PVOID Buffer, IN ULONG BufferSize, OUT PULONG BytesTransferred );