|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1997 - 1999
//
// File: chanpdo.h
//
//--------------------------------------------------------------------------
#if !defined (___chanpdo_h___)
#define ___chanpdo_h___
typedef enum BMSTATE { BmIdle, BmSet, BmArmed, BmDisarmed, } BMSTATE;
#define PDOS_STARTED (1 << 0)
#define PDOS_DEADMEAT (1 << 1)
#define PDOS_STOPPED (1 << 2)
#define PDOS_REMOVED (1 << 3)
#define PDOS_SURPRISE_REMOVED (1 << 4)
#define PDOS_DISABLED_BY_USER (1 << 5)
typedef struct _PHYSICAL_REGION_DESCRIPTOR * PPHYSICAL_REGION_DESCRIPTOR;
typedef struct _CHANNEL_PDO_EXTENSION {
EXTENSION_COMMON_HEADER;
PCTRLFDO_EXTENSION ParentDeviceExtension;
ULONG ChannelNumber;
KSPIN_LOCK SpinLock; ULONG PdoState;
DMADETECTIONLEVEL DmaDetectionLevel;
ULONG RefCount;
ULONG PnPDeviceState;
//
// Busmaster Properties
//
PIDE_BUS_MASTER_REGISTERS BmRegister; PDMA_ADAPTER DmaAdapterObject; ULONG MaximumPhysicalPages; PPHYSICAL_REGION_DESCRIPTOR RegionDescriptorTable; PHYSICAL_ADDRESS PhysicalRegionDescriptorTable; PVOID DataVirtualAddress; PSCATTER_GATHER_LIST HalScatterGatherList; ULONG TransferLength; PVOID MapRegisterBase; PMDL Mdl; BOOLEAN DataIn; VOID (* BmCallback) (PVOID Context); PVOID BmCallbackContext; BMSTATE BmState;
UCHAR BootBmStatus;
BOOLEAN EmptyChannel; BOOLEAN NeedToCallIoInvalidateDeviceRelations;
} CHANPDO_EXTENSION, *PCHANPDO_EXTENSION;
PCHANPDO_EXTENSION ChannelGetPdoExtension( PDEVICE_OBJECT DeviceObject );
ULONG ChannelUpdatePdoState( PCHANPDO_EXTENSION PdoExtension, ULONG SetFlags, ULONG ClearFlags );
NTSTATUS ChannelStartDevice ( IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp );
NTSTATUS ChannelQueryStopRemoveDevice ( IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp );
NTSTATUS ChannelRemoveDevice ( IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp );
NTSTATUS ChannelStopDevice ( IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp );
NTSTATUS ChannelStopChannel ( PCHANPDO_EXTENSION pdoExtension );
NTSTATUS ChannelQueryId ( IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp );
PWSTR ChannelBuildDeviceId( IN PCHANPDO_EXTENSION pdoExtension );
PWSTR ChannelBuildInstanceId( IN PCHANPDO_EXTENSION pdoExtension );
PWSTR ChannelBuildCompatibleId( IN PCHANPDO_EXTENSION pdoExtension );
PWSTR ChannelBuildHardwareId( IN PCHANPDO_EXTENSION pdoExtension );
NTSTATUS ChannelQueryCapabitilies ( IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp );
NTSTATUS ChannelQueryResources( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp );
NTSTATUS ChannelQueryResourceRequirements( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp );
NTSTATUS ChannelQueryResourceRequirementsCompletionRoutine ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context );
NTSTATUS ChannelInternalDeviceIoControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS ChannelQueryText ( IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp );
NTSTATUS PciIdeChannelQueryInterface ( IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp ); NTSTATUS PciIdeChannelTransferModeInterface ( IN PCHANPDO_EXTENSION PdoExtension, PPCIIDE_XFER_MODE_INTERFACE XferMode );
NTSTATUS PciIdeChannelTransferModeSelect ( IN PCHANPDO_EXTENSION PdoExtension, PPCIIDE_TRANSFER_MODE_SELECT XferMode ); NTSTATUS ChannelQueryDeviceRelations ( IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp ); NTSTATUS ChannelUsageNotification ( IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp ); NTSTATUS ChannelQueryPnPDeviceState ( IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp ); VOID PciIdeChannelRequestProperResources( IN PDEVICE_OBJECT DeviceObject );
NTSTATUS ChannelFilterResourceRequirements ( IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp );
#ifdef ENABLE_NATIVE_MODE
NTSTATUS PciIdeInterruptControl ( IN PVOID Context, IN ULONG DisConnect );
NTSTATUS PciIdeChannelInterruptInterface ( IN PCHANPDO_EXTENSION PdoExtension, PPCIIDE_INTERRUPT_INTERFACE InterruptInterface ); #endif
#endif // ___chanpdo_h___
|