/*++ Copyright (c) 1997-2000 Microsoft Corporation Module Name: local.h Abstract: This header declares the stuctures and function prototypes shared between the various modules. Author: Adam Glass Revision History: --*/ #if !defined(_SPSIM_H_) #define _SPSIM_H_ #include #include #include #include "oprghdlr.h" #include "debug.h" // // --- Constants --- // // // These must be updated if any new PNP or PO irps are added // // XXX fix #define IRP_MN_PNP_MAXIMUM_FUNCTION IRP_MN_SURPRISE_REMOVAL #define IRP_MN_PO_MAXIMUM_FUNCTION IRP_MN_QUERY_POWER // // Device state flags // #define SPSIM_DEVICE_STARTED 0x00000001 #define SPSIM_DEVICE_REMOVED 0x00000002 #define SPSIM_DEVICE_ENUMERATED 0x00000004 #define SPSIM_DEVICE_REMOVE_PENDING 0x00000008 /* DEPRECATED */ #define SPSIM_DEVICE_STOP_PENDING 0x00000010 /* DEPRECATED */ #define SPSIM_DEVICE_DELETED 0x00000080 #define SPSIM_DEVICE_SURPRISE_REMOVED 0x00000100 // // --- Type definitions --- // typedef NTSTATUS (*PSPSIM_DISPATCH)( IN PIRP Irp, IN PVOID Extension, IN PIO_STACK_LOCATION IrpStack ); typedef struct { ULONG Addr; ULONG Length; } MEM_REGION_DESCRIPTOR, *PMEM_REGION_DESCRIPTOR; typedef struct { // // Flags to indicate the device's current state (use SPSIM_DEVICE_*) // ULONG DeviceState; // // The power state of the device // DEVICE_POWER_STATE PowerState; DEVICE_POWER_STATE DeviceStateMapping[PowerSystemMaximum]; // // Backpointer to the device object of whom we are the extension // PDEVICE_OBJECT Self; // // The PDO for the multi-function device // PDEVICE_OBJECT PhysicalDeviceObject; // // The next device in the stack who we should send our IRPs down to // PDEVICE_OBJECT AttachedDevice; PVOID StaOpRegion; ULONG StaCount; ACPI_EVAL_OUTPUT_BUFFER *StaNames; PUCHAR StaOpRegionValues; PVOID MemOpRegion; ULONG MemCount; PMEM_REGION_DESCRIPTOR MemOpRegionValues; UNICODE_STRING SymbolicLinkName; // // Remove lock. Used to prevent the FDO from being removed while // other operations are digging around in the extension. // IO_REMOVE_LOCK RemoveLock; } SPSIM_EXTENSION, *PSPSIM_EXTENSION; // // --- Globals --- // extern PDRIVER_OBJECT SpSimDriverObject; NTSTATUS SpSimCreateFdo( PDEVICE_OBJECT *Fdo ); NTSTATUS SpSimDispatchPnpFdo( IN PDEVICE_OBJECT DeviceObject, IN PSPSIM_EXTENSION Parent, IN PIO_STACK_LOCATION IrpStack, IN OUT PIRP Irp ); NTSTATUS SpSimDispatchPowerFdo( IN PDEVICE_OBJECT DeviceObject, IN PSPSIM_EXTENSION Parent, IN PIO_STACK_LOCATION IrpStack, IN OUT PIRP Irp ); NTSTATUS SpSimAddDevice( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject ); NTSTATUS SpSimDispatchPnp( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS SpSimDispatchPower( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS SpSimDispatchNop( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS SpSimDevControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS SpSimInstallStaOpRegionHandler( IN OUT PSPSIM_EXTENSION SpSim ); NTSTATUS SpSimRemoveStaOpRegionHandler ( IN OUT PSPSIM_EXTENSION SpSim ); NTSTATUS SpSimInstallMemOpRegionHandler( IN OUT PSPSIM_EXTENSION SpSim ); NTSTATUS SpSimRemoveMemOpRegionHandler ( IN OUT PSPSIM_EXTENSION SpSim ); #define SPSIM_STA_NAMES_METHOD (ULONG)'MANS' #define SPSIM_NOTIFY_DEVICE_METHOD (ULONG)'DFON' NTSTATUS SpSimCreateStaOpRegion( IN PSPSIM_EXTENSION SpSim ); VOID SpSimDeleteStaOpRegion( IN PSPSIM_EXTENSION SpSim ); NTSTATUS SpSimCreateMemOpRegion( IN PSPSIM_EXTENSION SpSim ); VOID SpSimDeleteMemOpRegion( IN PSPSIM_EXTENSION SpSim ); NTSTATUS SpSimSendIoctl( IN PDEVICE_OBJECT Device, IN ULONG IoctlCode, IN PVOID InputBuffer OPTIONAL, IN ULONG InputBufferLength, IN PVOID OutputBuffer OPTIONAL, IN ULONG OutputBufferLength ); NTSTATUS EXPORT SpSimStaOpRegionHandler ( ULONG AccessType, PVOID OpRegion, ULONG Address, ULONG Size, PULONG Data, ULONG_PTR Context, PACPI_OPREGION_CALLBACK CompletionHandler, PVOID CompletionContext ); NTSTATUS SpSimOpenClose( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS SpSimGetManagedDevicesIoctl( PSPSIM_EXTENSION SpSim, PIRP Irp, PIO_STACK_LOCATION IrpStack ); NTSTATUS SpSimAccessStaIoctl( PSPSIM_EXTENSION SpSim, PIRP Irp, PIO_STACK_LOCATION IrpStack ); NTSTATUS SpSimGetDeviceName( PSPSIM_EXTENSION SpSim, PIRP Irp, PIO_STACK_LOCATION IrpStack ); NTSTATUS SpSimNotifyDeviceIoctl( PSPSIM_EXTENSION SpSim, PIRP Irp, PIO_STACK_LOCATION IrpStack ); NTSTATUS SpSimPassIrp( IN PIRP Irp, IN PSPSIM_EXTENSION SpSim, IN PIO_STACK_LOCATION IrpStack ); #define STA_OPREGION 0x99 #define MEM_OPREGION 0x9A #define MAX_MEMORY_OBJ 8 #define MAX_MEMORY_DESC_PER_OBJ 1 #define MIN_LARGE_DESC 32*1024*1024 #endif // !defined(_SPSIM_H_)