windows-nt/Source/XPSP1/NT/drivers/storage/ide/pciidex/chanpdo.h
2020-09-26 16:20:57 +08:00

240 lines
4.8 KiB
C

//+-------------------------------------------------------------------------
//
// 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___