holdingarea/llvm/llvm-gcc4.2-2.7-x86-mingw32/include/ddk/srb.h
branchbug235_bringup_0
changeset 20 d2d6724aef32
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/holdingarea/llvm/llvm-gcc4.2-2.7-x86-mingw32/include/ddk/srb.h	Thu Sep 16 09:43:14 2010 +0100
@@ -0,0 +1,753 @@
+/*
+ * scsi.h
+ *
+ * Interface between SCSI miniport drivers and the SCSI port driver.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __SRB_H
+#define __SRB_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#if defined(_SCSIPORT_)
+  #define SCSIPORTAPI DECLSPEC_EXPORT
+#else
+  #define SCSIPORTAPI DECLSPEC_IMPORT
+#endif
+
+#ifdef DBG
+#define DebugPrint(x) ScsiDebugPrint x
+#else
+#define DebugPrint(x)
+#endif
+
+typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
+
+#define SP_UNINITIALIZED_VALUE            ((ULONG) ~0)
+#define SP_UNTAGGED                       ((UCHAR) ~0)
+
+#define SRB_SIMPLE_TAG_REQUEST            0x20
+#define SRB_HEAD_OF_QUEUE_TAG_REQUEST     0x21
+#define SRB_ORDERED_QUEUE_TAG_REQUEST     0x22
+
+#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))
+
+#define MAXIMUM_CDB_SIZE                  12
+
+#ifdef DBG
+#define SCSI_PORT_SIGNATURE               0x54524f50
+#endif
+
+
+#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
+#define SCSI_MAXIMUM_TARGETS              8
+
+#define SRB_FUNCTION_WMI                  0x17
+
+#define SRB_WMI_FLAGS_ADAPTER_REQUEST     0x0001
+
+#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
+
+/* SCSI_REQUEST_BLOCK.Function constants */
+#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
+
+/* SCSI_REQUEST_BLOCK.SrbStatus constants */
+#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
+#define SRB_STATUS_INTERNAL_ERROR         0x30
+
+/* SCSI_REQUEST_BLOCK.SrbFlags constants */
+#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
+
+typedef struct _SCSI_REQUEST_BLOCK { 
+  USHORT  Length; 
+  UCHAR  Function; 
+  UCHAR  SrbStatus; 
+  UCHAR  ScsiStatus; 
+  UCHAR  PathId; 
+  UCHAR  TargetId; 
+  UCHAR  Lun; 
+  UCHAR  QueueTag; 
+  UCHAR  QueueAction; 
+  UCHAR  CdbLength; 
+  UCHAR  SenseInfoBufferLength; 
+  ULONG  SrbFlags; 
+  ULONG  DataTransferLength; 
+  ULONG  TimeOutValue; 
+  PVOID  DataBuffer; 
+  PVOID  SenseInfoBuffer; 
+  struct _SCSI_REQUEST_BLOCK  *NextSrb; 
+  PVOID  OriginalRequest; 
+  PVOID  SrbExtension; 
+  _ANONYMOUS_UNION union {
+    ULONG  InternalStatus;
+    ULONG  QueueSortKey;
+  } DUMMYUNIONNAME; 
+#if defined(_WIN64)
+  ULONG Reserved;
+#endif
+  UCHAR  Cdb[16]; 
+} SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK; 
+
+#define SCSI_REQUEST_BLOCK_SIZE           sizeof(SCSI_REQUEST_BLOCK)
+
+typedef struct _ACCESS_RANGE { 
+  SCSI_PHYSICAL_ADDRESS  RangeStart; 
+  ULONG  RangeLength; 
+  BOOLEAN  RangeInMemory; 
+} ACCESS_RANGE, *PACCESS_RANGE;
+
+/* PORT_CONFIGURATION_INFORMATION.Dma64BitAddresses constants */
+#define SCSI_DMA64_MINIPORT_SUPPORTED     0x01
+#define SCSI_DMA64_SYSTEM_SUPPORTED       0x80
+
+typedef struct _PORT_CONFIGURATION_INFORMATION {
+  ULONG  Length;
+  ULONG  SystemIoBusNumber;
+  INTERFACE_TYPE  AdapterInterfaceType;
+  ULONG  BusInterruptLevel;
+  ULONG  BusInterruptVector;
+  KINTERRUPT_MODE  InterruptMode;
+  ULONG  MaximumTransferLength;
+  ULONG  NumberOfPhysicalBreaks;
+  ULONG  DmaChannel;
+  ULONG  DmaPort;
+  DMA_WIDTH  DmaWidth;
+  DMA_SPEED  DmaSpeed;
+  ULONG  AlignmentMask;
+  ULONG  NumberOfAccessRanges;
+  ACCESS_RANGE  (*AccessRanges)[];
+  PVOID  Reserved;
+  UCHAR  NumberOfBuses;
+  UCHAR  InitiatorBusId[8];
+  BOOLEAN  ScatterGather;
+  BOOLEAN  Master;
+  BOOLEAN  CachesData;
+  BOOLEAN  AdapterScansDown;
+  BOOLEAN  AtdiskPrimaryClaimed;
+  BOOLEAN  AtdiskSecondaryClaimed;
+  BOOLEAN  Dma32BitAddresses;
+  BOOLEAN  DemandMode;
+  BOOLEAN  MapBuffers;
+  BOOLEAN  NeedPhysicalAddresses;
+  BOOLEAN  TaggedQueuing;
+  BOOLEAN  AutoRequestSense;
+  BOOLEAN  MultipleRequestPerLu;
+  BOOLEAN  ReceiveEvent;
+  BOOLEAN  RealModeInitialized;
+  BOOLEAN  BufferAccessScsiPortControlled;
+  UCHAR  MaximumNumberOfTargets;
+  UCHAR  ReservedUchars[2];
+  ULONG  SlotNumber;
+  ULONG  BusInterruptLevel2;
+  ULONG  BusInterruptVector2;
+  KINTERRUPT_MODE  InterruptMode2;
+  ULONG  DmaChannel2;
+  ULONG  DmaPort2;
+  DMA_WIDTH  DmaWidth2;
+  DMA_SPEED  DmaSpeed2;
+  ULONG  DeviceExtensionSize;
+  ULONG  SpecificLuExtensionSize;
+  ULONG  SrbExtensionSize;
+  UCHAR  Dma64BitAddresses;
+  BOOLEAN  ResetTargetSupported;
+  UCHAR  MaximumNumberOfLogicalUnits;
+  BOOLEAN  WmiDataProvider;
+} PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
+
+#define CONFIG_INFO_VERSION_2             sizeof(PORT_CONFIGURATION_INFORMATION)
+
+typedef enum _SCSI_NOTIFICATION_TYPE {
+	RequestComplete,
+	NextRequest,
+	NextLuRequest,
+	ResetDetected,
+	CallDisableInterrupts,
+	CallEnableInterrupts,
+	RequestTimerCall,
+	BusChangeDetected,
+	WMIEvent,
+	WMIReregister
+} SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE;
+
+#ifdef __GNUC__
+__extension__ /* enums limited to range of integer */
+#endif
+typedef enum _SCSI_ADAPTER_CONTROL_TYPE {
+	ScsiQuerySupportedControlTypes = 0,
+	ScsiStopAdapter,
+	ScsiRestartAdapter,
+	ScsiSetBootConfig,
+	ScsiSetRunningConfig,
+	ScsiAdapterControlMax,
+	MakeAdapterControlTypeSizeOfUlong = 0xffffffff
+} SCSI_ADAPTER_CONTROL_TYPE, *PSCSI_ADAPTER_CONTROL_TYPE;
+
+typedef enum _SCSI_ADAPTER_CONTROL_STATUS {
+	ScsiAdapterControlSuccess = 0,
+	ScsiAdapterControlUnsuccessful
+} SCSI_ADAPTER_CONTROL_STATUS, *PSCSI_ADAPTER_CONTROL_STATUS;
+
+typedef struct _SCSI_SUPPORTED_CONTROL_TYPE_LIST {
+	ULONG MaxControlType;
+	BOOLEAN SupportedTypeList[0];
+} SCSI_SUPPORTED_CONTROL_TYPE_LIST, *PSCSI_SUPPORTED_CONTROL_TYPE_LIST;
+
+typedef SCSI_ADAPTER_CONTROL_STATUS DDKAPI
+(*PHW_ADAPTER_CONTROL)(
+  /*IN*/ PVOID DeviceExtension,
+  /*IN*/ SCSI_ADAPTER_CONTROL_TYPE ControlType,
+  /*IN*/ PVOID Parameters);
+
+typedef BOOLEAN DDKAPI
+(*PHW_ADAPTER_STATE)(
+  /*IN*/ PVOID DeviceExtension,
+  /*IN*/ PVOID Context,
+  /*IN*/ BOOLEAN SaveState);
+
+#define SP_RETURN_NOT_FOUND               0
+#define SP_RETURN_FOUND                   1
+#define SP_RETURN_ERROR                   2
+#define SP_RETURN_BAD_CONFIG              3
+
+typedef ULONG DDKAPI
+(*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 DDKAPI
+(*PHW_INITIALIZE)(
+  /*IN*/ PVOID DeviceExtension);
+
+typedef BOOLEAN DDKAPI
+(*PHW_INTERRUPT)(
+  /*IN*/ PVOID DeviceExtension);
+
+typedef BOOLEAN DDKAPI
+(*PHW_RESET_BUS)(
+  /*IN*/ PVOID DeviceExtension,
+  /*IN*/ ULONG PathId);
+
+typedef VOID DDKAPI
+(*PHW_DMA_STARTED)(
+  /*IN*/ PVOID DeviceExtension);
+
+typedef BOOLEAN DDKAPI
+(*PHW_STARTIO)(
+  /*IN*/ PVOID DeviceExtension,
+  /*IN*/ PSCSI_REQUEST_BLOCK Srb);
+
+typedef VOID DDKAPI
+(*PHW_TIMER)(
+  /*IN*/ PVOID DeviceExtension);
+
+typedef struct _HW_INITIALIZATION_DATA { 
+  ULONG  HwInitializationDataSize; 
+  INTERFACE_TYPE  AdapterInterfaceType; 
+  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; 
+  BOOLEAN  NeedPhysicalAddresses; 
+  BOOLEAN  TaggedQueuing; 
+  BOOLEAN  AutoRequestSense; 
+  BOOLEAN  MultipleRequestPerLu; 
+  BOOLEAN  ReceiveEvent; 
+  USHORT  VendorIdLength; 
+  PVOID  VendorId; 
+  USHORT  ReservedUshort; 
+  USHORT  DeviceIdLength; 
+  PVOID  DeviceId; 
+  PHW_ADAPTER_CONTROL  HwAdapterControl;
+} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA; 
+
+SCSIPORTAPI
+VOID 
+DDKAPI
+ScsiPortCompleteRequest(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ UCHAR  PathId,
+  /*IN*/ UCHAR  TargetId,
+  /*IN*/ UCHAR  Lun,
+  /*IN*/ UCHAR  SrbStatus);
+
+/*
+ * ULONG
+ * ScsiPortConvertPhysicalAddressToUlong(
+ * IN SCSI_PHYSICAL_ADDRESS  Address);
+ */
+#define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart)
+
+SCSIPORTAPI
+SCSI_PHYSICAL_ADDRESS 
+DDKAPI
+ScsiPortConvertUlongToPhysicalAddress(
+  /*IN*/ ULONG  UlongAddress);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortFlushDma(
+  /*IN*/ PVOID  DeviceExtension);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortFreeDeviceBase(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  MappedAddress);
+
+SCSIPORTAPI
+ULONG
+DDKAPI
+ScsiPortGetBusData(
+  /*IN*/ PVOID  DeviceExtension,
+  /*IN*/ ULONG  BusDataType,
+  /*IN*/ ULONG  SystemIoBusNumber,
+  /*IN*/ ULONG  SlotNumber,
+  /*IN*/ PVOID  Buffer,
+  /*IN*/ ULONG  Length);
+
+SCSIPORTAPI
+PVOID
+DDKAPI
+ScsiPortGetDeviceBase(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ INTERFACE_TYPE  BusType,
+  /*IN*/ ULONG  SystemIoBusNumber,
+  /*IN*/ SCSI_PHYSICAL_ADDRESS  IoAddress,
+  /*IN*/ ULONG  NumberOfBytes,
+  /*IN*/ BOOLEAN  InIoSpace);
+
+SCSIPORTAPI
+PVOID
+DDKAPI
+ScsiPortGetLogicalUnit(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ UCHAR  PathId,
+  /*IN*/ UCHAR  TargetId,
+  /*IN*/ UCHAR  Lun);
+
+SCSIPORTAPI
+SCSI_PHYSICAL_ADDRESS
+DDKAPI
+ScsiPortGetPhysicalAddress(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PSCSI_REQUEST_BLOCK  Srb  /*OPTIONAL*/,
+  /*IN*/ PVOID  VirtualAddress,
+  /*OUT*/ ULONG  *Length);
+
+SCSIPORTAPI
+PSCSI_REQUEST_BLOCK
+DDKAPI
+ScsiPortGetSrb(
+  /*IN*/ PVOID  DeviceExtension,
+  /*IN*/ UCHAR  PathId,
+  /*IN*/ UCHAR  TargetId,
+  /*IN*/ UCHAR  Lun,
+  /*IN*/ LONG  QueueTag);
+
+SCSIPORTAPI
+PVOID
+DDKAPI
+ScsiPortGetUncachedExtension(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PPORT_CONFIGURATION_INFORMATION  ConfigInfo,
+  /*IN*/ ULONG  NumberOfBytes);
+
+SCSIPORTAPI
+PVOID
+DDKAPI
+ScsiPortGetVirtualAddress(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ SCSI_PHYSICAL_ADDRESS  PhysicalAddress);
+
+SCSIPORTAPI
+ULONG
+DDKAPI
+ScsiPortInitialize(
+  /*IN*/ PVOID  Argument1,
+  /*IN*/ PVOID  Argument2,
+  /*IN*/ struct _HW_INITIALIZATION_DATA  *HwInitializationData,
+  /*IN*/ PVOID  HwContext  /*OPTIONAL*/);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortIoMapTransfer(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PSCSI_REQUEST_BLOCK  Srb,
+  /*IN*/ ULONG  LogicalAddress,
+  /*IN*/ ULONG  Length);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+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);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortMoveMemory(
+  /*IN*/ PVOID  WriteBuffer,
+  /*IN*/ PVOID  ReadBuffer,
+  /*IN*/ ULONG  Length);
+
+SCSIPORTAPI
+VOID
+DDKCDECLAPI
+ScsiPortNotification(
+  /*IN*/ SCSI_NOTIFICATION_TYPE  NotificationType,
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ ...);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortQuerySystemTime(
+  /*OUT*/ PLARGE_INTEGER  CurrentTime);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortReadPortBufferUchar(
+  /*IN*/ PUCHAR  Port,
+  /*IN*/ PUCHAR  Buffer,
+  /*IN*/ ULONG  Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortReadPortBufferUlong(
+  /*IN*/ PULONG  Port,
+  /*IN*/ PULONG  Buffer,
+  /*IN*/ ULONG  Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortReadPortBufferUshort(
+  /*IN*/ PUSHORT  Port,
+  /*IN*/ PUSHORT  Buffer,
+  /*IN*/ ULONG  Count);
+
+SCSIPORTAPI
+UCHAR
+DDKAPI
+ScsiPortReadPortUchar(
+  /*IN*/ PUCHAR  Port);
+
+SCSIPORTAPI
+ULONG
+DDKAPI
+ScsiPortReadPortUlong(
+  /*IN*/ PULONG  Port);
+
+SCSIPORTAPI
+USHORT
+DDKAPI
+ScsiPortReadPortUshort(
+  /*IN*/ PUSHORT  Port);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortReadRegisterBufferUchar(
+  /*IN*/ PUCHAR  Register,
+  /*IN*/ PUCHAR  Buffer,
+  /*IN*/ ULONG  Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortReadRegisterBufferUlong(
+  /*IN*/ PULONG  Register,
+  /*IN*/ PULONG  Buffer,
+  /*IN*/ ULONG  Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortReadRegisterBufferUshort(
+  /*IN*/ PUSHORT  Register,
+  /*IN*/ PUSHORT  Buffer,
+  /*IN*/ ULONG  Count);
+
+SCSIPORTAPI
+UCHAR
+DDKAPI
+ScsiPortReadRegisterUchar(
+  /*IN*/ PUCHAR  Register);
+
+SCSIPORTAPI
+ULONG
+DDKAPI
+ScsiPortReadRegisterUlong(
+  /*IN*/ PULONG  Register);
+
+SCSIPORTAPI
+USHORT
+DDKAPI
+ScsiPortReadRegisterUshort(
+  /*IN*/ PUSHORT  Register);
+
+SCSIPORTAPI
+ULONG
+DDKAPI
+ScsiPortSetBusDataByOffset(
+  /*IN*/ PVOID  DeviceExtension,
+  /*IN*/ ULONG  BusDataType,
+  /*IN*/ ULONG  SystemIoBusNumber,
+  /*IN*/ ULONG  SlotNumber,
+  /*IN*/ PVOID  Buffer,
+  /*IN*/ ULONG  Offset,
+  /*IN*/ ULONG  Length);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortStallExecution(
+  /*IN*/ ULONG  Delay);
+
+SCSIPORTAPI
+BOOLEAN
+DDKAPI
+ScsiPortValidateRange(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ INTERFACE_TYPE  BusType,
+  /*IN*/ ULONG  SystemIoBusNumber,
+  /*IN*/ SCSI_PHYSICAL_ADDRESS  IoAddress,
+  /*IN*/ ULONG  NumberOfBytes,
+  /*IN*/ BOOLEAN  InIoSpace);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWritePortBufferUchar(
+  /*IN*/ PUCHAR  Port,
+  /*IN*/ PUCHAR  Buffer,
+  /*IN*/ ULONG  Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWritePortBufferUlong(
+  /*IN*/ PULONG  Port,
+  /*IN*/ PULONG  Buffer,
+  /*IN*/ ULONG  Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWritePortBufferUshort(
+  /*IN*/ PUSHORT  Port,
+  /*IN*/ PUSHORT  Buffer,
+  /*IN*/ ULONG  Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWritePortUchar(
+  /*IN*/ PUCHAR  Port,
+  /*IN*/ UCHAR  Value);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWritePortUlong(
+  /*IN*/ PULONG  Port,
+  /*IN*/ ULONG  Value);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWritePortUshort(
+  /*IN*/ PUSHORT  Port,
+  /*IN*/ USHORT  Value);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWriteRegisterBufferUchar(
+  /*IN*/ PUCHAR  Register,
+  /*IN*/ PUCHAR  Buffer,
+  /*IN*/ ULONG  Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWriteRegisterBufferUlong(
+  /*IN*/ PULONG  Register,
+  /*IN*/ PULONG  Buffer,
+  /*IN*/ ULONG  Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWriteRegisterBufferUshort(
+  /*IN*/ PUSHORT  Register,
+  /*IN*/ PUSHORT  Buffer,
+  /*IN*/ ULONG  Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWriteRegisterUchar(
+  /*IN*/ PUCHAR  Register,
+  /*IN*/ ULONG  Value);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWriteRegisterUlong(
+  /*IN*/ PULONG  Register,
+  /*IN*/ ULONG  Value);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWriteRegisterUshort(
+  /*IN*/ PUSHORT  Register,
+  /*IN*/ USHORT  Value);
+
+SCSIPORTAPI
+VOID
+DDKCDECLAPI
+ScsiDebugPrint(
+  /*IN*/ ULONG DebugPrintLevel,
+  /*IN*/ PCCHAR DebugMessage,
+  /*IN*/ ...);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SRB_H */