#ifndef _HPFUNC_H #define _HPFUNC_H // // Shared function declarations // // // dispatch.c // // all other dispatch.c function declarations are in dispatch.c // since functions are private to that file NTSTATUS HpsPassIrp( IN PIRP Irp, IN PHPS_COMMON_EXTENSION Common, IN PIO_STACK_LOCATION IrpStack ); NTSTATUS HpsSendPnpIrp( IN PDEVICE_OBJECT DeviceObject, IN PIO_STACK_LOCATION Location, OUT PULONG_PTR Information OPTIONAL ); NTSTATUS HpsDeferProcessing( IN PHPS_COMMON_EXTENSION DeviceExtension, IN PIRP Irp ); NTSTATUS HpsRemoveCommon( IN PIRP Irp, IN PHPS_COMMON_EXTENSION Common, IN PIO_STACK_LOCATION IrpStack ); NTSTATUS HpsCompletionRoutine( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ); // // lower.c // NTSTATUS HpsStartLower( IN PIRP Irp, IN PHPS_DEVICE_EXTENSION Extension, IN PIO_STACK_LOCATION IrpStack ); NTSTATUS HpsRemoveLower( IN PIRP Irp, IN PHPS_DEVICE_EXTENSION Extension, IN PIO_STACK_LOCATION IrpStack ); NTSTATUS HpsStopLower( IN PIRP Irp, IN PHPS_DEVICE_EXTENSION Extension, IN PIO_STACK_LOCATION IrpStack ); NTSTATUS HpsQueryInterfaceLower( IN PIRP Irp, IN PHPS_DEVICE_EXTENSION Extension, IN PIO_STACK_LOCATION IrpStack ); NTSTATUS HpsWriteConfigLower( IN PIRP Irp, IN PHPS_DEVICE_EXTENSION Extension, IN PIO_STACK_LOCATION IrpStack ); NTSTATUS HpsDeviceControlLower( PIRP Irp, PHPS_DEVICE_EXTENSION Common, PIO_STACK_LOCATION IrpStack ); // // intrface.c // NTSTATUS HpsGetBusInterface( PHPS_DEVICE_EXTENSION DeviceExtension ); NTSTATUS HpsTrapBusInterface ( IN PHPS_DEVICE_EXTENSION DeviceExtension, IN OUT PIO_STACK_LOCATION IrpStack ); NTSTATUS HpsGetLowerFilter ( IN PDEVICE_OBJECT DeviceObject, OUT PDEVICE_OBJECT *LowerDeviceObject ); VOID HpsGenericInterfaceReference ( PVOID Context ); VOID HpsGenericInterfaceDereference ( PVOID Context ); VOID HpsBusInterfaceReference ( PVOID Context ); VOID HpsBusInterfaceDereference ( PVOID Context ); // // interrupt.c // VOID HpsInterruptExecution( IN PHPS_DEVICE_EXTENSION Extension ); NTSTATUS HpsConnectInterrupt( IN PVOID Context, IN PKSERVICE_ROUTINE ServiceRoutine, IN PVOID ServiceContext ); VOID HpsDisconnectInterrupt( IN PVOID Context ); BOOLEAN HpsSynchronizeExecution( IN PVOID Context, IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, IN PVOID SynchronizeContext ); // // config.c // NTSTATUS HpsInitConfigSpace( IN OUT PHPS_DEVICE_EXTENSION DeviceExtension ); ULONG HpsHandleDirectReadConfig( IN PVOID Context, IN ULONG DataType, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length ); ULONG HpsHandleDirectWriteConfig( IN PVOID Context, IN ULONG DataType, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length ); VOID HpsResync( IN PHPS_DEVICE_EXTENSION DeviceExtension ); VOID HpsWriteConfig( IN PHPS_DEVICE_EXTENSION DeviceExtension, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length ); NTSTATUS HpsGetCapabilityOffset( PHPS_DEVICE_EXTENSION Extension, UCHAR CapabilityID, PUCHAR Offset ); NTSTATUS HpsWriteWithMask( OUT PVOID Destination, IN PVOID BitMask, IN PVOID Source, IN ULONG Length ); VOID HpsMaskConfig( OUT PUCHAR Destination, IN PUCHAR Source, IN ULONG InternalOffset, IN ULONG Length ); VOID HpsGetBridgeInfo( PHPS_DEVICE_EXTENSION Extension, PHPTEST_BRIDGE_INFO BridgeInfo ); VOID HpsLockRegisterSet( IN PHPS_DEVICE_EXTENSION Extension, OUT PKIRQL OldIrql ); VOID HpsUnlockRegisterSet( IN PHPS_DEVICE_EXTENSION Extension, IN KIRQL NewIrql ); // // memory.c // NTSTATUS HpsInitHBRB( IN PHPS_DEVICE_EXTENSION Extension ); NTSTATUS HpsGetHBRBHwInit( IN PHPS_DEVICE_EXTENSION Extension ); NTSTATUS HpsSendIoctl( IN PDEVICE_OBJECT Device, IN ULONG IoctlCode, IN PVOID InputBuffer OPTIONAL, IN ULONG InputBufferLength, IN PVOID OutputBuffer OPTIONAL, IN ULONG OutputBufferLength ); VOID HpsMemoryInterfaceReference( IN PVOID Context ); VOID HpsMemoryInterfaceDereference( IN PVOID Context ); VOID HpsReadRegister( IN PUCHAR Register, IN PUCHAR Buffer, IN ULONG Length ); VOID HpsWriteRegister( IN PUCHAR Register, IN PUCHAR Buffer, IN ULONG Length ); PHPS_DEVICE_EXTENSION HpsFindExtensionForHbrb( IN PUCHAR Register, IN ULONG Length ); // // register.c // NTSTATUS HpsInitRegisters( IN OUT PHPS_DEVICE_EXTENSION DeviceExtension ); VOID HpsHandleSlotEvent ( IN OUT PHPS_DEVICE_EXTENSION DeviceExtension, IN PHPS_SLOT_EVENT SlotEvent ); VOID HpsPerformControllerCommand ( IN OUT PHPS_DEVICE_EXTENSION DeviceExtension ); VOID HpsEventDpc( IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2 ); VOID HpsSendEventToWmi( IN PHPS_DEVICE_EXTENSION Extension, IN PHPS_CONTROLLER_EVENT Event ); VOID HpsCommandCompleted( IN OUT PHPS_DEVICE_EXTENSION DeviceExtension ); // // wmi.c // NTSTATUS HpsWmiRegInfo( IN PDEVICE_OBJECT DeviceObject, OUT PULONG RegFlags, OUT PUNICODE_STRING InstanceName, OUT PUNICODE_STRING *RegistryPath, OUT PUNICODE_STRING MofResourceName, OUT PDEVICE_OBJECT *Pdo ); NTSTATUS HpsWmiQueryDataBlock( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG GuidIndex, IN ULONG InstanceIndex, IN ULONG InstanceCount, IN OUT PULONG InstanceLengthArray, IN ULONG BufferAvail, OUT PUCHAR Buffer ); NTSTATUS HpsWmiSetDataBlock( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG GuidIndex, IN ULONG InstanceIndex, IN ULONG BufferSize, IN PUCHAR Buffer ); NTSTATUS HpsWmiExecuteMethod( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG GuidIndex, IN ULONG InstanceIndex, IN ULONG MethodId, IN ULONG InBufferSize, IN ULONG OutBufferSize, IN OUT PUCHAR Buffer ); NTSTATUS HpsWmiFunctionControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG GuidIndex, IN WMIENABLEDISABLECONTROL Function, IN BOOLEAN Enable ); #endif