reactos/drivers/storage/ide/uniata/srb.h
Stanislav Motylkov 6ebe2ed3a1
[UNIATA] Fix packing for port configuration information structures
Now it's consistent with our structure in sdk/include/ddk/srb.h.
Thanks to Hervé Poussineau for help with problem analysis.

Also MSDN doesn't say anything about the structure packing:
https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/srb/ns-srb-_port_configuration_information

CORE-17966
2022-01-04 14:30:27 +03:00

987 lines
25 KiB
C

/*
Module Name:
srb.h
Abstract:
This file defines the interface between SCSI mini-port drivers and the
SCSI port driver. It is also used by SCSI class drivers to talk to the
SCSI port driver.
w2k-related definitions are added by Alter from w2k/xp DDK
*/
#ifndef _NTSRB_
#define _NTSRB_
#pragma pack(push, 8)
// Define SCSI maximum configuration parameters.
#define SCSI_MAXIMUM_LOGICAL_UNITS 8
#define SCSI_MAXIMUM_TARGETS_PER_BUS 128
#define SCSI_MAXIMUM_LUNS_PER_TARGET 255
#define SCSI_MAXIMUM_BUSES 8
#define SCSI_MINIMUM_PHYSICAL_BREAKS 16
#define SCSI_MAXIMUM_PHYSICAL_BREAKS 255
// This constant is for backward compatibility.
// This use to be the maximum number of targets supported.
#define SCSI_MAXIMUM_TARGETS 8
// begin_ntminitape
#define MAXIMUM_CDB_SIZE 12
// end_ntminitape
#ifndef USER_MODE
typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
typedef struct _ACCESS_RANGE {
SCSI_PHYSICAL_ADDRESS RangeStart;
ULONG RangeLength;
BOOLEAN RangeInMemory;
}ACCESS_RANGE, *PACCESS_RANGE;
#ifdef __REACTOS__
#pragma pack(push, 4)
#endif
//
// Configuration information structure. Contains the information necessary
// to initialize the adapter. NOTE: This structure's must be a multiple of
// quadwords.
//
typedef struct _PORT_CONFIGURATION_INFORMATION {
ULONG Length; // Length of port configuation information strucuture.
ULONG SystemIoBusNumber; // IO bus number (0 for machines that have only 1 IO bus
INTERFACE_TYPE AdapterInterfaceType; // EISA, MCA or ISA
ULONG BusInterruptLevel; // Interrupt request level for device
// Bus interrupt vector used with hardware buses which use as vector as
// well as level, such as internal buses.
ULONG BusInterruptVector;
KINTERRUPT_MODE InterruptMode; // Interrupt mode (level-sensitive or edge-triggered)
ULONG MaximumTransferLength; // Max bytes that can be transferred in a single SRB
ULONG NumberOfPhysicalBreaks; // Number of contiguous blocks of physical memory
ULONG DmaChannel; // DMA channel for devices using system DMA
ULONG DmaPort;
DMA_WIDTH DmaWidth;
DMA_SPEED DmaSpeed;
ULONG AlignmentMask; // Alignment masked for the adapter for data transfers.
ULONG NumberOfAccessRanges; // Number of allocated access range elements.
ACCESS_RANGE (*AccessRanges)[]; // Pointer to array of access range elements.
PVOID Reserved;
UCHAR NumberOfBuses; // Number of SCSI buses attached to the adapter.
CCHAR InitiatorBusId[8]; // SCSI bus ID for adapter
BOOLEAN ScatterGather; // Indicates that the adapter does scatter/gather
BOOLEAN Master; // Indicates that the adapter is a bus master
BOOLEAN CachesData; // Host caches data or state.
BOOLEAN AdapterScansDown; // Host adapter scans down for bios devices.
BOOLEAN AtdiskPrimaryClaimed; // Primary at disk address (0x1F0) claimed.
BOOLEAN AtdiskSecondaryClaimed; // Secondary at disk address (0x170) claimed.
BOOLEAN Dma32BitAddresses; // The master uses 32-bit DMA addresses.
BOOLEAN DemandMode; // Use Demand Mode DMA rather than Single Request.
BOOLEAN MapBuffers; // Data buffers must be mapped into virtual address space.
BOOLEAN NeedPhysicalAddresses; // We need to tranlate virtual to physical addresses.
BOOLEAN TaggedQueuing; // Supports tagged queuing
BOOLEAN AutoRequestSense; // Supports auto request sense.
BOOLEAN MultipleRequestPerLu; // Supports multiple requests per logical unit.
BOOLEAN ReceiveEvent; // Support receive event function.
BOOLEAN RealModeInitialized; // Indicates the real-mode driver has initialized the card.
BOOLEAN BufferAccessScsiPortControlled; // Indicate that the miniport will not touch
// the data buffers directly.
UCHAR MaximumNumberOfTargets; // Indicator for wide scsi.
UCHAR ReservedUchars[2]; // Ensure quadword alignment.
ULONG SlotNumber; // Adapter slot number
ULONG BusInterruptLevel2; // Interrupt information for a second IRQ.
ULONG BusInterruptVector2;
KINTERRUPT_MODE InterruptMode2;
ULONG DmaChannel2; // DMA information for a second channel.
ULONG DmaPort2;
DMA_WIDTH DmaWidth2;
DMA_SPEED DmaSpeed2;
} PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
typedef struct _PORT_CONFIGURATION_INFORMATION_NT {
// Fields added to allow for the miniport
// to update these sizes based on requirements
// for large transfers ( > 64K);
ULONG DeviceExtensionSize;
ULONG SpecificLuExtensionSize;
ULONG SrbExtensionSize;
} PORT_CONFIGURATION_INFORMATION_NT, *PPORT_CONFIGURATION_INFORMATION_NT;
typedef struct _PORT_CONFIGURATION_INFORMATION_2K {
// Used to determine whether the system and/or the miniport support
// 64-bit physical addresses. See SCSI_DMA64_* flags below.
UCHAR Dma64BitAddresses;
// Indicates that the miniport can accept a SRB_FUNCTION_RESET_DEVICE
// to clear all requests to a particular LUN.
BOOLEAN ResetTargetSupported;
// Indicates that the miniport can support more than 8 logical units per
// target (maximum LUN number is one less than this field).
UCHAR MaximumNumberOfLogicalUnits;
// Supports WMI?
BOOLEAN WmiDataProvider;
} PORT_CONFIGURATION_INFORMATION_2K, *PPORT_CONFIGURATION_INFORMATION_2K;
#ifdef __REACTOS__
#pragma pack(pop)
#endif
typedef struct _PORT_CONFIGURATION_INFORMATION_COMMON {
PORT_CONFIGURATION_INFORMATION comm;
PORT_CONFIGURATION_INFORMATION_NT nt4;
PORT_CONFIGURATION_INFORMATION_2K w2k;
} PORT_CONFIGURATION_INFORMATION_COMMON, *PPORT_CONFIGURATION_INFORMATION_COMMON;
//
// Version control for ConfigInfo structure.
//
#define CONFIG_INFO_VERSION_2 sizeof(PORT_CONFIGURATION_INFORMATION)
//
// Flags for controlling 64-bit DMA use (PORT_CONFIGURATION_INFORMATION field
// Dma64BitAddresses)
//
//
// Set by scsiport on entering HwFindAdapter if the system can support 64-bit
// physical addresses. The miniport can use this information before calling
// ScsiPortGetUncachedExtension to modify the DeviceExtensionSize,
// SpecificLuExtensionSize & SrbExtensionSize fields to account for the extra
// size of the scatter gather list.
//
#define SCSI_DMA64_SYSTEM_SUPPORTED 0x80
//
// Set by the miniport before calling ScsiPortGetUncachedExtension to indicate
// that scsiport should provide it with 64-bit physical addresses. If the
// system does not support 64-bit PA's then this bit will be ignored.
//
#define SCSI_DMA64_MINIPORT_SUPPORTED 0x01
//
// Command type (and parameter) definition(s) for AdapterControl requests.
//
typedef enum _SCSI_ADAPTER_CONTROL_TYPE {
ScsiQuerySupportedControlTypes = 0,
ScsiStopAdapter,
ScsiRestartAdapter,
ScsiSetBootConfig,
ScsiSetRunningConfig,
ScsiAdapterControlMax,
MakeAdapterControlTypeSizeOfUlong = 0xffffffff
} SCSI_ADAPTER_CONTROL_TYPE, *PSCSI_ADAPTER_CONTROL_TYPE;
//
// Adapter control status values
//
typedef enum _SCSI_ADAPTER_CONTROL_STATUS {
ScsiAdapterControlSuccess = 0,
ScsiAdapterControlUnsuccessful
} SCSI_ADAPTER_CONTROL_STATUS, *PSCSI_ADAPTER_CONTROL_STATUS;
//
// Parameters for Adapter Control Functions:
//
//
// ScsiQuerySupportedControlTypes:
//
#ifdef _MSC_VER
#pragma warning(disable:4200)
#endif
typedef struct _SCSI_SUPPORTED_CONTROL_TYPE_LIST {
//
// Specifies the number of entries in the adapter control type list.
//
IN ULONG MaxControlType;
//
// The miniport will set TRUE for each control type it supports.
// The number of entries in this array is defined by MaxAdapterControlType
// - the miniport must not attempt to set any AC types beyond the maximum
// value specified.
//
OUT BOOLEAN SupportedTypeList[0];
} SCSI_SUPPORTED_CONTROL_TYPE_LIST, *PSCSI_SUPPORTED_CONTROL_TYPE_LIST;
#ifdef _MSC_VER
#pragma warning(disable:4200)
#endif
//
// Uninitialized flag value.
//
#define SP_UNINITIALIZED_VALUE ((ULONG) ~0)
#define SP_UNTAGGED ((UCHAR) ~0)
//
// Set asynchronous events.
//
#define SRBEV_BUS_RESET 0x0001
#define SRBEV_SCSI_ASYNC_NOTIFICATION 0x0002
// begin_ntminitape
//
// SCSI I/O Request Block
//
typedef struct _SCSI_REQUEST_BLOCK {
USHORT Length; // offset 0
UCHAR Function; // offset 2
UCHAR SrbStatus; // offset 3
UCHAR ScsiStatus; // offset 4
UCHAR PathId; // offset 5
UCHAR TargetId; // offset 6
UCHAR Lun; // offset 7
UCHAR QueueTag; // offset 8
UCHAR QueueAction; // offset 9
UCHAR CdbLength; // offset a
UCHAR SenseInfoBufferLength; // offset b
ULONG SrbFlags; // offset c
ULONG DataTransferLength; // offset 10
ULONG TimeOutValue; // offset 14
PVOID DataBuffer; // offset 18
PVOID SenseInfoBuffer; // offset 1c
struct _SCSI_REQUEST_BLOCK *NextSrb; // offset 20
PVOID OriginalRequest; // offset 24
PVOID SrbExtension; // offset 28
union {
ULONG InternalStatus; // offset 2c
ULONG QueueSortKey; // offset 2c
};
#if defined(_WIN64)
// Force PVOID alignment of Cdb
ULONG Reserved;
#endif
UCHAR Cdb[16]; // offset 30
} SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK;
#define SCSI_REQUEST_BLOCK_SIZE sizeof(SCSI_REQUEST_BLOCK)
//
// SCSI I/O Request Block for WMI Requests
//
typedef struct _SCSI_WMI_REQUEST_BLOCK {
USHORT Length;
UCHAR Function; // SRB_FUNCTION_WMI
UCHAR SrbStatus;
UCHAR WMISubFunction;
UCHAR PathId; // If SRB_WMI_FLAGS_ADAPTER_REQUEST is set in
UCHAR TargetId; // WMIFlags then PathId, TargetId and Lun are
UCHAR Lun; // reserved fields.
UCHAR Reserved1;
UCHAR WMIFlags;
UCHAR Reserved2[2];
ULONG SrbFlags;
ULONG DataTransferLength;
ULONG TimeOutValue;
PVOID DataBuffer;
PVOID DataPath;
PVOID Reserved3;
PVOID OriginalRequest;
PVOID SrbExtension;
ULONG Reserved4;
UCHAR Reserved5[16];
} SCSI_WMI_REQUEST_BLOCK, *PSCSI_WMI_REQUEST_BLOCK;
//
// SRB Functions
//
#define SRB_FUNCTION_EXECUTE_SCSI 0x00
#define SRB_FUNCTION_CLAIM_DEVICE 0x01
#define SRB_FUNCTION_IO_CONTROL 0x02
#define SRB_FUNCTION_RECEIVE_EVENT 0x03
#define SRB_FUNCTION_RELEASE_QUEUE 0x04
#define SRB_FUNCTION_ATTACH_DEVICE 0x05
#define SRB_FUNCTION_RELEASE_DEVICE 0x06
#define SRB_FUNCTION_SHUTDOWN 0x07
#define SRB_FUNCTION_FLUSH 0x08
#define SRB_FUNCTION_ABORT_COMMAND 0x10
#define SRB_FUNCTION_RELEASE_RECOVERY 0x11
#define SRB_FUNCTION_RESET_BUS 0x12
#define SRB_FUNCTION_RESET_DEVICE 0x13
#define SRB_FUNCTION_TERMINATE_IO 0x14
#define SRB_FUNCTION_FLUSH_QUEUE 0x15
#define SRB_FUNCTION_REMOVE_DEVICE 0x16
#define SRB_FUNCTION_WMI 0x17
#define SRB_FUNCTION_LOCK_QUEUE 0x18
#define SRB_FUNCTION_UNLOCK_QUEUE 0x19
#define SRB_FUNCTION_RESET_LOGICAL_UNIT 0x20
//
// SRB Status
//
#define SRB_STATUS_PENDING 0x00
#define SRB_STATUS_SUCCESS 0x01
#define SRB_STATUS_ABORTED 0x02
#define SRB_STATUS_ABORT_FAILED 0x03
#define SRB_STATUS_ERROR 0x04
#define SRB_STATUS_BUSY 0x05
#define SRB_STATUS_INVALID_REQUEST 0x06
#define SRB_STATUS_INVALID_PATH_ID 0x07
#define SRB_STATUS_NO_DEVICE 0x08
#define SRB_STATUS_TIMEOUT 0x09
#define SRB_STATUS_SELECTION_TIMEOUT 0x0A
#define SRB_STATUS_COMMAND_TIMEOUT 0x0B
#define SRB_STATUS_MESSAGE_REJECTED 0x0D
#define SRB_STATUS_BUS_RESET 0x0E
#define SRB_STATUS_PARITY_ERROR 0x0F
#define SRB_STATUS_REQUEST_SENSE_FAILED 0x10
#define SRB_STATUS_NO_HBA 0x11
#define SRB_STATUS_DATA_OVERRUN 0x12
#define SRB_STATUS_UNEXPECTED_BUS_FREE 0x13
#define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14
#define SRB_STATUS_BAD_SRB_BLOCK_LENGTH 0x15
#define SRB_STATUS_REQUEST_FLUSHED 0x16
#define SRB_STATUS_INVALID_LUN 0x20
#define SRB_STATUS_INVALID_TARGET_ID 0x21
#define SRB_STATUS_BAD_FUNCTION 0x22
#define SRB_STATUS_ERROR_RECOVERY 0x23
#define SRB_STATUS_NOT_POWERED 0x24
//
// This value is used by the port driver to indicate that a non-scsi-related
// error occured. Miniports must never return this status.
//
#define SRB_STATUS_INTERNAL_ERROR 0x30
//
// Srb status values 0x38 through 0x3f are reserved for internal port driver
// use.
//
//
// SRB Status Masks
//
#define SRB_STATUS_QUEUE_FROZEN 0x40
#define SRB_STATUS_AUTOSENSE_VALID 0x80
#define SRB_STATUS(Status) (Status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
//
// SRB Flag Bits
//
#define SRB_FLAGS_QUEUE_ACTION_ENABLE 0x00000002
#define SRB_FLAGS_DISABLE_DISCONNECT 0x00000004
#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER 0x00000008
#define SRB_FLAGS_BYPASS_FROZEN_QUEUE 0x00000010
#define SRB_FLAGS_DISABLE_AUTOSENSE 0x00000020
#define SRB_FLAGS_DATA_IN 0x00000040
#define SRB_FLAGS_DATA_OUT 0x00000080
#define SRB_FLAGS_NO_DATA_TRANSFER 0x00000000
#define SRB_FLAGS_UNSPECIFIED_DIRECTION (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT)
#define SRB_FLAGS_NO_QUEUE_FREEZE 0x00000100
#define SRB_FLAGS_ADAPTER_CACHE_ENABLE 0x00000200
#define SRB_FLAGS_FREE_SENSE_BUFFER 0x00000400
#define SRB_FLAGS_IS_ACTIVE 0x00010000
#define SRB_FLAGS_ALLOCATED_FROM_ZONE 0x00020000
#define SRB_FLAGS_SGLIST_FROM_POOL 0x00040000
#define SRB_FLAGS_BYPASS_LOCKED_QUEUE 0x00080000
#define SRB_FLAGS_NO_KEEP_AWAKE 0x00100000
#define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE 0x00200000
#define SRB_FLAGS_PORT_DRIVER_SENSEHASPORT 0x00400000
#define SRB_FLAGS_DONT_START_NEXT_PACKET 0x00800000
#define SRB_FLAGS_PORT_DRIVER_RESERVED 0x0F000000
#define SRB_FLAGS_CLASS_DRIVER_RESERVED 0xF0000000
//
// Queue Action
//
#define SRB_SIMPLE_TAG_REQUEST 0x20
#define SRB_HEAD_OF_QUEUE_TAG_REQUEST 0x21
#define SRB_ORDERED_QUEUE_TAG_REQUEST 0x22
#define SRB_WMI_FLAGS_ADAPTER_REQUEST 0x01
// end_ntminitape
//
// SCSI Adapter Dependent Routines
//
typedef
BOOLEAN
(NTAPI *PHW_INITIALIZE) (
IN PVOID DeviceExtension
);
typedef
BOOLEAN
(NTAPI *PHW_STARTIO) (
IN PVOID DeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb
);
typedef
BOOLEAN
(NTAPI *PHW_INTERRUPT) (
IN PVOID DeviceExtension
);
typedef
VOID
(NTAPI *PHW_TIMER) (
IN PVOID DeviceExtension
);
typedef
VOID
(NTAPI *PHW_DMA_STARTED) (
IN PVOID DeviceExtension
);
typedef
ULONG
(NTAPI *PHW_FIND_ADAPTER) (
IN PVOID DeviceExtension,
IN PVOID HwContext,
IN PVOID BusInformation,
IN PCHAR ArgumentString,
IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo,
OUT PBOOLEAN Again
);
typedef
BOOLEAN
(NTAPI *PHW_RESET_BUS) (
IN PVOID DeviceExtension,
IN ULONG PathId
);
typedef
BOOLEAN
(NTAPI *PHW_ADAPTER_STATE) (
IN PVOID DeviceExtension,
IN PVOID Context,
IN BOOLEAN SaveState
);
typedef
SCSI_ADAPTER_CONTROL_STATUS
(NTAPI *PHW_ADAPTER_CONTROL) (
IN PVOID DeviceExtension,
IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
IN PVOID Parameters
);
//
// Port driver error codes
//
#define SP_BUS_PARITY_ERROR 0x0001
#define SP_UNEXPECTED_DISCONNECT 0x0002
#define SP_INVALID_RESELECTION 0x0003
#define SP_BUS_TIME_OUT 0x0004
#define SP_PROTOCOL_ERROR 0x0005
#define SP_INTERNAL_ADAPTER_ERROR 0x0006
#define SP_REQUEST_TIMEOUT 0x0007
#define SP_IRQ_NOT_RESPONDING 0x0008
#define SP_BAD_FW_WARNING 0x0009
#define SP_BAD_FW_ERROR 0x000a
#define SP_LOST_WMI_MINIPORT_REQUEST 0x000b
//
// Return values for SCSI_HW_FIND_ADAPTER.
//
#define SP_RETURN_NOT_FOUND 0
#define SP_RETURN_FOUND 1
#define SP_RETURN_ERROR 2
#define SP_RETURN_BAD_CONFIG 3
//
// Notification Event Types
//
typedef enum _SCSI_NOTIFICATION_TYPE {
RequestComplete,
NextRequest,
NextLuRequest,
ResetDetected,
CallDisableInterrupts,
CallEnableInterrupts,
RequestTimerCall,
BusChangeDetected, /* New */
WMIEvent,
WMIReregister
} SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE;
//
// Structure passed between miniport initialization
// and SCSI port initialization
//
typedef struct _HW_INITIALIZATION_DATA {
ULONG HwInitializationDataSize;
// Adapter interface type:
//
// Internal
// Isa
// Eisa
// MicroChannel
// TurboChannel
// PCIBus
// VMEBus
// NuBus
// PCMCIABus
// CBus
// MPIBus
// MPSABus
INTERFACE_TYPE AdapterInterfaceType;
// Miniport driver routines
PHW_INITIALIZE HwInitialize;
PHW_STARTIO HwStartIo;
PHW_INTERRUPT HwInterrupt;
PHW_FIND_ADAPTER HwFindAdapter;
PHW_RESET_BUS HwResetBus;
PHW_DMA_STARTED HwDmaStarted;
PHW_ADAPTER_STATE HwAdapterState;
ULONG DeviceExtensionSize;
ULONG SpecificLuExtensionSize;
ULONG SrbExtensionSize;
ULONG NumberOfAccessRanges;
PVOID Reserved;
BOOLEAN MapBuffers; // Data buffers must be mapped into virtual address space.
BOOLEAN NeedPhysicalAddresses; // We need to tranlate virtual to physical addresses.
BOOLEAN TaggedQueuing; // Supports tagged queuing
BOOLEAN AutoRequestSense; // Supports auto request sense.
BOOLEAN MultipleRequestPerLu; // Supports multiple requests per logical unit.
BOOLEAN ReceiveEvent; // Support receive event function.
USHORT VendorIdLength; // Vendor identification length
PVOID VendorId; // Vendor identification
USHORT ReservedUshort; // Pad for alignment and future use.
USHORT DeviceIdLength; // Device identification length
PVOID DeviceId; // Device identification
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
typedef struct _HW_INITIALIZATION_DATA_2K {
// Stop adapter routine.
PHW_ADAPTER_CONTROL HwAdapterControl;
} HW_INITIALIZATION_DATA_2K, *PHW_INITIALIZATION_DATA_2K;
typedef struct _HW_INITIALIZATION_DATA_COMMON {
HW_INITIALIZATION_DATA comm;
HW_INITIALIZATION_DATA_2K w2k;
}HW_INITIALIZATION_DATA_COMMON, *PHW_INITIALIZATION_DATA_COMMON;
// begin_ntminitape
#ifndef _NTDDK_
#define SCSIPORT_API DECLSPEC_IMPORT
#else
#define SCSIPORT_API
#endif
// end_ntminitape
//
// Port driver routines called by miniport driver
//
SCSIPORT_API
ULONG NTAPI
ScsiPortInitialize(
IN PVOID Argument1,
IN PVOID Argument2,
IN struct _HW_INITIALIZATION_DATA *HwInitializationData,
IN PVOID HwContext
);
SCSIPORT_API
VOID NTAPI
ScsiPortFreeDeviceBase(
IN PVOID HwDeviceExtension,
IN PVOID MappedAddress
);
SCSIPORT_API
ULONG NTAPI
ScsiPortGetBusData(
IN PVOID DeviceExtension,
IN ULONG BusDataType,
IN ULONG SystemIoBusNumber,
IN ULONG SlotNumber,
IN PVOID Buffer,
IN ULONG Length
);
SCSIPORT_API
ULONG NTAPI
ScsiPortSetBusDataByOffset(
IN PVOID DeviceExtension,
IN ULONG BusDataType,
IN ULONG SystemIoBusNumber,
IN ULONG SlotNumber,
IN PVOID Buffer,
IN ULONG Offset,
IN ULONG Length
);
SCSIPORT_API
PVOID NTAPI
ScsiPortGetDeviceBase(
IN PVOID HwDeviceExtension,
IN INTERFACE_TYPE BusType,
IN ULONG SystemIoBusNumber,
IN SCSI_PHYSICAL_ADDRESS IoAddress,
IN ULONG NumberOfBytes,
IN BOOLEAN InIoSpace
);
SCSIPORT_API
PVOID NTAPI
ScsiPortGetLogicalUnit(
IN PVOID HwDeviceExtension,
IN UCHAR PathId,
IN UCHAR TargetId,
IN UCHAR Lun
);
SCSIPORT_API
PSCSI_REQUEST_BLOCK NTAPI
ScsiPortGetSrb(
IN PVOID DeviceExtension,
IN UCHAR PathId,
IN UCHAR TargetId,
IN UCHAR Lun,
IN LONG QueueTag
);
SCSIPORT_API
SCSI_PHYSICAL_ADDRESS NTAPI
ScsiPortGetPhysicalAddress(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb,
IN PVOID VirtualAddress,
OUT ULONG *Length
);
SCSIPORT_API
PVOID NTAPI
ScsiPortGetVirtualAddress(
IN PVOID HwDeviceExtension,
IN SCSI_PHYSICAL_ADDRESS PhysicalAddress
);
SCSIPORT_API
PVOID NTAPI
ScsiPortGetUncachedExtension(
IN PVOID HwDeviceExtension,
IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
IN ULONG NumberOfBytes
);
SCSIPORT_API
VOID NTAPI
ScsiPortFlushDma(
IN PVOID DeviceExtension
);
SCSIPORT_API
VOID NTAPI
ScsiPortIoMapTransfer(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb,
IN PVOID LogicalAddress,
IN ULONG Length
);
SCSIPORT_API
VOID __cdecl
ScsiPortNotification(
IN SCSI_NOTIFICATION_TYPE NotificationType,
IN PVOID HwDeviceExtension,
...
);
SCSIPORT_API
VOID NTAPI
ScsiPortLogError(
IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
IN UCHAR PathId,
IN UCHAR TargetId,
IN UCHAR Lun,
IN ULONG ErrorCode,
IN ULONG UniqueId
);
SCSIPORT_API
VOID NTAPI
ScsiPortCompleteRequest(
IN PVOID HwDeviceExtension,
IN UCHAR PathId,
IN UCHAR TargetId,
IN UCHAR Lun,
IN UCHAR SrbStatus
);
SCSIPORT_API
VOID NTAPI
ScsiPortMoveMemory(
IN PVOID WriteBuffer,
IN PVOID ReadBuffer,
IN ULONG Length
);
SCSIPORT_API
UCHAR NTAPI
ScsiPortReadPortUchar(
IN PUCHAR Port
);
SCSIPORT_API
USHORT NTAPI
ScsiPortReadPortUshort(
IN PUSHORT Port
);
SCSIPORT_API
ULONG NTAPI
ScsiPortReadPortUlong(
IN PULONG Port
);
SCSIPORT_API
VOID NTAPI
ScsiPortReadPortBufferUchar(
IN PUCHAR Port,
IN PUCHAR Buffer,
IN ULONG Count
);
SCSIPORT_API
VOID NTAPI
ScsiPortReadPortBufferUshort(
IN PUSHORT Port,
IN PUSHORT Buffer,
IN ULONG Count
);
SCSIPORT_API
VOID NTAPI
ScsiPortReadPortBufferUlong(
IN PULONG Port,
IN PULONG Buffer,
IN ULONG Count
);
SCSIPORT_API
UCHAR NTAPI
ScsiPortReadRegisterUchar(
IN PUCHAR Register
);
SCSIPORT_API
USHORT NTAPI
ScsiPortReadRegisterUshort(
IN PUSHORT Register
);
SCSIPORT_API
ULONG NTAPI
ScsiPortReadRegisterUlong(
IN PULONG Register
);
SCSIPORT_API
VOID NTAPI
ScsiPortReadRegisterBufferUchar(
IN PUCHAR Register,
IN PUCHAR Buffer,
IN ULONG Count
);
SCSIPORT_API
VOID NTAPI
ScsiPortReadRegisterBufferUshort(
IN PUSHORT Register,
IN PUSHORT Buffer,
IN ULONG Count
);
SCSIPORT_API
VOID NTAPI
ScsiPortReadRegisterBufferUlong(
IN PULONG Register,
IN PULONG Buffer,
IN ULONG Count
);
SCSIPORT_API
VOID NTAPI
ScsiPortStallExecution(
IN ULONG Delay
);
SCSIPORT_API
VOID NTAPI
ScsiPortWritePortUchar(
IN PUCHAR Port,
IN UCHAR Value
);
SCSIPORT_API
VOID NTAPI
ScsiPortWritePortUshort(
IN PUSHORT Port,
IN USHORT Value
);
SCSIPORT_API
VOID NTAPI
ScsiPortWritePortUlong(
IN PULONG Port,
IN ULONG Value
);
SCSIPORT_API
VOID NTAPI
ScsiPortWritePortBufferUchar(
IN PUCHAR Port,
IN PUCHAR Buffer,
IN ULONG Count
);
SCSIPORT_API
VOID NTAPI
ScsiPortWritePortBufferUshort(
IN PUSHORT Port,
IN PUSHORT Buffer,
IN ULONG Count
);
SCSIPORT_API
VOID NTAPI
ScsiPortWritePortBufferUlong(
IN PULONG Port,
IN PULONG Buffer,
IN ULONG Count
);
SCSIPORT_API
VOID NTAPI
ScsiPortWriteRegisterUchar(
IN PUCHAR Register,
IN UCHAR Value
);
SCSIPORT_API
VOID NTAPI
ScsiPortWriteRegisterUshort(
IN PUSHORT Register,
IN USHORT Value
);
SCSIPORT_API
VOID NTAPI
ScsiPortWriteRegisterUlong(
IN PULONG Register,
IN ULONG Value
);
SCSIPORT_API
VOID NTAPI
ScsiPortWriteRegisterBufferUchar(
IN PUCHAR Register,
IN PUCHAR Buffer,
IN ULONG Count
);
SCSIPORT_API
VOID NTAPI
ScsiPortWriteRegisterBufferUshort(
IN PUSHORT Register,
IN PUSHORT Buffer,
IN ULONG Count
);
SCSIPORT_API
VOID NTAPI
ScsiPortWriteRegisterBufferUlong(
IN PULONG Register,
IN PULONG Buffer,
IN ULONG Count
);
SCSIPORT_API
SCSI_PHYSICAL_ADDRESS NTAPI
ScsiPortConvertUlongToPhysicalAddress(
ULONG UlongAddress
);
SCSIPORT_API
ULONG NTAPI
ScsiPortConvertPhysicalAddressToUlong(
SCSI_PHYSICAL_ADDRESS Address
);
#define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart)
SCSIPORT_API
BOOLEAN NTAPI
ScsiPortValidateRange(
IN PVOID HwDeviceExtension,
IN INTERFACE_TYPE BusType,
IN ULONG SystemIoBusNumber,
IN SCSI_PHYSICAL_ADDRESS IoAddress,
IN ULONG NumberOfBytes,
IN BOOLEAN InIoSpace
);
// begin_ntminitape
SCSIPORT_API
VOID __cdecl
ScsiDebugPrint(
ULONG DebugPrintLevel,
PCCHAR DebugMessage,
...
);
// end_ntminitape
#endif //USER_MODE
#pragma pack(pop)
#endif //