holdingarea/llvm/llvm-gcc4.2-2.7-x86-mingw32/include/ddk/srb.h
branchbug235_bringup_0
changeset 20 d2d6724aef32
equal deleted inserted replaced
19:da7c1a80df0d 20:d2d6724aef32
       
     1 /*
       
     2  * scsi.h
       
     3  *
       
     4  * Interface between SCSI miniport drivers and the SCSI port driver.
       
     5  *
       
     6  * This file is part of the w32api package.
       
     7  *
       
     8  * Contributors:
       
     9  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
       
    10  *
       
    11  * THIS SOFTWARE IS NOT COPYRIGHTED
       
    12  *
       
    13  * This source code is offered for use in the public domain. You may
       
    14  * use, modify or distribute it freely.
       
    15  *
       
    16  * This code is distributed in the hope that it will be useful but
       
    17  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
       
    18  * DISCLAIMED. This includes but is not limited to warranties of
       
    19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
       
    20  *
       
    21  */
       
    22 
       
    23 #ifndef __SRB_H
       
    24 #define __SRB_H
       
    25 
       
    26 #if __GNUC__ >=3
       
    27 #pragma GCC system_header
       
    28 #endif
       
    29 
       
    30 #ifdef __cplusplus
       
    31 extern "C" {
       
    32 #endif
       
    33 
       
    34 #include "ntddk.h"
       
    35 
       
    36 #if defined(_SCSIPORT_)
       
    37   #define SCSIPORTAPI DECLSPEC_EXPORT
       
    38 #else
       
    39   #define SCSIPORTAPI DECLSPEC_IMPORT
       
    40 #endif
       
    41 
       
    42 #ifdef DBG
       
    43 #define DebugPrint(x) ScsiDebugPrint x
       
    44 #else
       
    45 #define DebugPrint(x)
       
    46 #endif
       
    47 
       
    48 typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
       
    49 
       
    50 #define SP_UNINITIALIZED_VALUE            ((ULONG) ~0)
       
    51 #define SP_UNTAGGED                       ((UCHAR) ~0)
       
    52 
       
    53 #define SRB_SIMPLE_TAG_REQUEST            0x20
       
    54 #define SRB_HEAD_OF_QUEUE_TAG_REQUEST     0x21
       
    55 #define SRB_ORDERED_QUEUE_TAG_REQUEST     0x22
       
    56 
       
    57 #define SRB_STATUS_QUEUE_FROZEN           0x40
       
    58 #define SRB_STATUS_AUTOSENSE_VALID        0x80
       
    59 
       
    60 #define SRB_STATUS(Status) \
       
    61   (Status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
       
    62 
       
    63 #define MAXIMUM_CDB_SIZE                  12
       
    64 
       
    65 #ifdef DBG
       
    66 #define SCSI_PORT_SIGNATURE               0x54524f50
       
    67 #endif
       
    68 
       
    69 
       
    70 #define SCSI_MAXIMUM_LOGICAL_UNITS        8
       
    71 #define SCSI_MAXIMUM_TARGETS_PER_BUS      128
       
    72 #define SCSI_MAXIMUM_LUNS_PER_TARGET      255
       
    73 #define SCSI_MAXIMUM_BUSES                8
       
    74 #define SCSI_MINIMUM_PHYSICAL_BREAKS      16
       
    75 #define SCSI_MAXIMUM_PHYSICAL_BREAKS      255
       
    76 #define SCSI_MAXIMUM_TARGETS              8
       
    77 
       
    78 #define SRB_FUNCTION_WMI                  0x17
       
    79 
       
    80 #define SRB_WMI_FLAGS_ADAPTER_REQUEST     0x0001
       
    81 
       
    82 #define SP_BUS_PARITY_ERROR               0x0001
       
    83 #define SP_UNEXPECTED_DISCONNECT          0x0002
       
    84 #define SP_INVALID_RESELECTION            0x0003
       
    85 #define SP_BUS_TIME_OUT                   0x0004
       
    86 #define SP_PROTOCOL_ERROR                 0x0005
       
    87 #define SP_INTERNAL_ADAPTER_ERROR         0x0006
       
    88 #define SP_REQUEST_TIMEOUT                0x0007
       
    89 #define SP_IRQ_NOT_RESPONDING             0x0008
       
    90 #define SP_BAD_FW_WARNING                 0x0009
       
    91 #define SP_BAD_FW_ERROR                   0x000a
       
    92 #define SP_LOST_WMI_MINIPORT_REQUEST      0x000b
       
    93 
       
    94 /* SCSI_REQUEST_BLOCK.Function constants */
       
    95 #define SRB_FUNCTION_EXECUTE_SCSI         0x00
       
    96 #define SRB_FUNCTION_CLAIM_DEVICE         0x01
       
    97 #define SRB_FUNCTION_IO_CONTROL           0x02
       
    98 #define SRB_FUNCTION_RECEIVE_EVENT        0x03
       
    99 #define SRB_FUNCTION_RELEASE_QUEUE        0x04
       
   100 #define SRB_FUNCTION_ATTACH_DEVICE        0x05
       
   101 #define SRB_FUNCTION_RELEASE_DEVICE       0x06
       
   102 #define SRB_FUNCTION_SHUTDOWN             0x07
       
   103 #define SRB_FUNCTION_FLUSH                0x08
       
   104 #define SRB_FUNCTION_ABORT_COMMAND        0x10
       
   105 #define SRB_FUNCTION_RELEASE_RECOVERY     0x11
       
   106 #define SRB_FUNCTION_RESET_BUS            0x12
       
   107 #define SRB_FUNCTION_RESET_DEVICE         0x13
       
   108 #define SRB_FUNCTION_TERMINATE_IO         0x14
       
   109 #define SRB_FUNCTION_FLUSH_QUEUE          0x15
       
   110 #define SRB_FUNCTION_REMOVE_DEVICE        0x16
       
   111 #define SRB_FUNCTION_WMI                  0x17
       
   112 #define SRB_FUNCTION_LOCK_QUEUE           0x18
       
   113 #define SRB_FUNCTION_UNLOCK_QUEUE         0x19
       
   114 #define SRB_FUNCTION_RESET_LOGICAL_UNIT   0x20
       
   115 
       
   116 /* SCSI_REQUEST_BLOCK.SrbStatus constants */
       
   117 #define SRB_STATUS_PENDING                0x00
       
   118 #define SRB_STATUS_SUCCESS                0x01
       
   119 #define SRB_STATUS_ABORTED                0x02
       
   120 #define SRB_STATUS_ABORT_FAILED           0x03
       
   121 #define SRB_STATUS_ERROR                  0x04
       
   122 #define SRB_STATUS_BUSY                   0x05
       
   123 #define SRB_STATUS_INVALID_REQUEST        0x06
       
   124 #define SRB_STATUS_INVALID_PATH_ID        0x07
       
   125 #define SRB_STATUS_NO_DEVICE              0x08
       
   126 #define SRB_STATUS_TIMEOUT                0x09
       
   127 #define SRB_STATUS_SELECTION_TIMEOUT      0x0A
       
   128 #define SRB_STATUS_COMMAND_TIMEOUT        0x0B
       
   129 #define SRB_STATUS_MESSAGE_REJECTED       0x0D
       
   130 #define SRB_STATUS_BUS_RESET              0x0E
       
   131 #define SRB_STATUS_PARITY_ERROR           0x0F
       
   132 #define SRB_STATUS_REQUEST_SENSE_FAILED   0x10
       
   133 #define SRB_STATUS_NO_HBA                 0x11
       
   134 #define SRB_STATUS_DATA_OVERRUN           0x12
       
   135 #define SRB_STATUS_UNEXPECTED_BUS_FREE    0x13
       
   136 #define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14
       
   137 #define SRB_STATUS_BAD_SRB_BLOCK_LENGTH   0x15
       
   138 #define SRB_STATUS_REQUEST_FLUSHED        0x16
       
   139 #define SRB_STATUS_INVALID_LUN            0x20
       
   140 #define SRB_STATUS_INVALID_TARGET_ID      0x21
       
   141 #define SRB_STATUS_BAD_FUNCTION           0x22
       
   142 #define SRB_STATUS_ERROR_RECOVERY         0x23
       
   143 #define SRB_STATUS_NOT_POWERED            0x24
       
   144 #define SRB_STATUS_INTERNAL_ERROR         0x30
       
   145 
       
   146 /* SCSI_REQUEST_BLOCK.SrbFlags constants */
       
   147 #define SRB_FLAGS_QUEUE_ACTION_ENABLE       0x00000002
       
   148 #define SRB_FLAGS_DISABLE_DISCONNECT        0x00000004
       
   149 #define SRB_FLAGS_DISABLE_SYNCH_TRANSFER    0x00000008
       
   150 #define SRB_FLAGS_BYPASS_FROZEN_QUEUE       0x00000010
       
   151 #define SRB_FLAGS_DISABLE_AUTOSENSE         0x00000020
       
   152 #define SRB_FLAGS_DATA_IN                   0x00000040
       
   153 #define SRB_FLAGS_DATA_OUT                  0x00000080
       
   154 #define SRB_FLAGS_NO_DATA_TRANSFER          0x00000000
       
   155 #define SRB_FLAGS_UNSPECIFIED_DIRECTION     (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT)
       
   156 #define SRB_FLAGS_NO_QUEUE_FREEZE           0x00000100
       
   157 #define SRB_FLAGS_ADAPTER_CACHE_ENABLE      0x00000200
       
   158 #define SRB_FLAGS_FREE_SENSE_BUFFER         0x00000400
       
   159 #define SRB_FLAGS_IS_ACTIVE                 0x00010000
       
   160 #define SRB_FLAGS_ALLOCATED_FROM_ZONE       0x00020000
       
   161 #define SRB_FLAGS_SGLIST_FROM_POOL          0x00040000
       
   162 #define SRB_FLAGS_BYPASS_LOCKED_QUEUE       0x00080000
       
   163 #define SRB_FLAGS_NO_KEEP_AWAKE             0x00100000
       
   164 #define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE    0x00200000
       
   165 #define SRB_FLAGS_PORT_DRIVER_SENSEHASPORT  0x00400000
       
   166 #define SRB_FLAGS_DONT_START_NEXT_PACKET    0x00800000
       
   167 #define SRB_FLAGS_PORT_DRIVER_RESERVED      0x0F000000
       
   168 #define SRB_FLAGS_CLASS_DRIVER_RESERVED     0xF0000000
       
   169 
       
   170 typedef struct _SCSI_REQUEST_BLOCK { 
       
   171   USHORT  Length; 
       
   172   UCHAR  Function; 
       
   173   UCHAR  SrbStatus; 
       
   174   UCHAR  ScsiStatus; 
       
   175   UCHAR  PathId; 
       
   176   UCHAR  TargetId; 
       
   177   UCHAR  Lun; 
       
   178   UCHAR  QueueTag; 
       
   179   UCHAR  QueueAction; 
       
   180   UCHAR  CdbLength; 
       
   181   UCHAR  SenseInfoBufferLength; 
       
   182   ULONG  SrbFlags; 
       
   183   ULONG  DataTransferLength; 
       
   184   ULONG  TimeOutValue; 
       
   185   PVOID  DataBuffer; 
       
   186   PVOID  SenseInfoBuffer; 
       
   187   struct _SCSI_REQUEST_BLOCK  *NextSrb; 
       
   188   PVOID  OriginalRequest; 
       
   189   PVOID  SrbExtension; 
       
   190   _ANONYMOUS_UNION union {
       
   191     ULONG  InternalStatus;
       
   192     ULONG  QueueSortKey;
       
   193   } DUMMYUNIONNAME; 
       
   194 #if defined(_WIN64)
       
   195   ULONG Reserved;
       
   196 #endif
       
   197   UCHAR  Cdb[16]; 
       
   198 } SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK; 
       
   199 
       
   200 #define SCSI_REQUEST_BLOCK_SIZE           sizeof(SCSI_REQUEST_BLOCK)
       
   201 
       
   202 typedef struct _ACCESS_RANGE { 
       
   203   SCSI_PHYSICAL_ADDRESS  RangeStart; 
       
   204   ULONG  RangeLength; 
       
   205   BOOLEAN  RangeInMemory; 
       
   206 } ACCESS_RANGE, *PACCESS_RANGE;
       
   207 
       
   208 /* PORT_CONFIGURATION_INFORMATION.Dma64BitAddresses constants */
       
   209 #define SCSI_DMA64_MINIPORT_SUPPORTED     0x01
       
   210 #define SCSI_DMA64_SYSTEM_SUPPORTED       0x80
       
   211 
       
   212 typedef struct _PORT_CONFIGURATION_INFORMATION {
       
   213   ULONG  Length;
       
   214   ULONG  SystemIoBusNumber;
       
   215   INTERFACE_TYPE  AdapterInterfaceType;
       
   216   ULONG  BusInterruptLevel;
       
   217   ULONG  BusInterruptVector;
       
   218   KINTERRUPT_MODE  InterruptMode;
       
   219   ULONG  MaximumTransferLength;
       
   220   ULONG  NumberOfPhysicalBreaks;
       
   221   ULONG  DmaChannel;
       
   222   ULONG  DmaPort;
       
   223   DMA_WIDTH  DmaWidth;
       
   224   DMA_SPEED  DmaSpeed;
       
   225   ULONG  AlignmentMask;
       
   226   ULONG  NumberOfAccessRanges;
       
   227   ACCESS_RANGE  (*AccessRanges)[];
       
   228   PVOID  Reserved;
       
   229   UCHAR  NumberOfBuses;
       
   230   UCHAR  InitiatorBusId[8];
       
   231   BOOLEAN  ScatterGather;
       
   232   BOOLEAN  Master;
       
   233   BOOLEAN  CachesData;
       
   234   BOOLEAN  AdapterScansDown;
       
   235   BOOLEAN  AtdiskPrimaryClaimed;
       
   236   BOOLEAN  AtdiskSecondaryClaimed;
       
   237   BOOLEAN  Dma32BitAddresses;
       
   238   BOOLEAN  DemandMode;
       
   239   BOOLEAN  MapBuffers;
       
   240   BOOLEAN  NeedPhysicalAddresses;
       
   241   BOOLEAN  TaggedQueuing;
       
   242   BOOLEAN  AutoRequestSense;
       
   243   BOOLEAN  MultipleRequestPerLu;
       
   244   BOOLEAN  ReceiveEvent;
       
   245   BOOLEAN  RealModeInitialized;
       
   246   BOOLEAN  BufferAccessScsiPortControlled;
       
   247   UCHAR  MaximumNumberOfTargets;
       
   248   UCHAR  ReservedUchars[2];
       
   249   ULONG  SlotNumber;
       
   250   ULONG  BusInterruptLevel2;
       
   251   ULONG  BusInterruptVector2;
       
   252   KINTERRUPT_MODE  InterruptMode2;
       
   253   ULONG  DmaChannel2;
       
   254   ULONG  DmaPort2;
       
   255   DMA_WIDTH  DmaWidth2;
       
   256   DMA_SPEED  DmaSpeed2;
       
   257   ULONG  DeviceExtensionSize;
       
   258   ULONG  SpecificLuExtensionSize;
       
   259   ULONG  SrbExtensionSize;
       
   260   UCHAR  Dma64BitAddresses;
       
   261   BOOLEAN  ResetTargetSupported;
       
   262   UCHAR  MaximumNumberOfLogicalUnits;
       
   263   BOOLEAN  WmiDataProvider;
       
   264 } PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
       
   265 
       
   266 #define CONFIG_INFO_VERSION_2             sizeof(PORT_CONFIGURATION_INFORMATION)
       
   267 
       
   268 typedef enum _SCSI_NOTIFICATION_TYPE {
       
   269 	RequestComplete,
       
   270 	NextRequest,
       
   271 	NextLuRequest,
       
   272 	ResetDetected,
       
   273 	CallDisableInterrupts,
       
   274 	CallEnableInterrupts,
       
   275 	RequestTimerCall,
       
   276 	BusChangeDetected,
       
   277 	WMIEvent,
       
   278 	WMIReregister
       
   279 } SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE;
       
   280 
       
   281 #ifdef __GNUC__
       
   282 __extension__ /* enums limited to range of integer */
       
   283 #endif
       
   284 typedef enum _SCSI_ADAPTER_CONTROL_TYPE {
       
   285 	ScsiQuerySupportedControlTypes = 0,
       
   286 	ScsiStopAdapter,
       
   287 	ScsiRestartAdapter,
       
   288 	ScsiSetBootConfig,
       
   289 	ScsiSetRunningConfig,
       
   290 	ScsiAdapterControlMax,
       
   291 	MakeAdapterControlTypeSizeOfUlong = 0xffffffff
       
   292 } SCSI_ADAPTER_CONTROL_TYPE, *PSCSI_ADAPTER_CONTROL_TYPE;
       
   293 
       
   294 typedef enum _SCSI_ADAPTER_CONTROL_STATUS {
       
   295 	ScsiAdapterControlSuccess = 0,
       
   296 	ScsiAdapterControlUnsuccessful
       
   297 } SCSI_ADAPTER_CONTROL_STATUS, *PSCSI_ADAPTER_CONTROL_STATUS;
       
   298 
       
   299 typedef struct _SCSI_SUPPORTED_CONTROL_TYPE_LIST {
       
   300 	ULONG MaxControlType;
       
   301 	BOOLEAN SupportedTypeList[0];
       
   302 } SCSI_SUPPORTED_CONTROL_TYPE_LIST, *PSCSI_SUPPORTED_CONTROL_TYPE_LIST;
       
   303 
       
   304 typedef SCSI_ADAPTER_CONTROL_STATUS DDKAPI
       
   305 (*PHW_ADAPTER_CONTROL)(
       
   306   /*IN*/ PVOID DeviceExtension,
       
   307   /*IN*/ SCSI_ADAPTER_CONTROL_TYPE ControlType,
       
   308   /*IN*/ PVOID Parameters);
       
   309 
       
   310 typedef BOOLEAN DDKAPI
       
   311 (*PHW_ADAPTER_STATE)(
       
   312   /*IN*/ PVOID DeviceExtension,
       
   313   /*IN*/ PVOID Context,
       
   314   /*IN*/ BOOLEAN SaveState);
       
   315 
       
   316 #define SP_RETURN_NOT_FOUND               0
       
   317 #define SP_RETURN_FOUND                   1
       
   318 #define SP_RETURN_ERROR                   2
       
   319 #define SP_RETURN_BAD_CONFIG              3
       
   320 
       
   321 typedef ULONG DDKAPI
       
   322 (*PHW_FIND_ADAPTER)(
       
   323   /*IN*/ PVOID DeviceExtension,
       
   324   /*IN*/ PVOID HwContext,
       
   325   /*IN*/ PVOID BusInformation,
       
   326   /*IN*/ PCHAR ArgumentString,
       
   327   /*IN OUT*/ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
       
   328   /*OUT*/ PBOOLEAN Again);
       
   329 
       
   330 typedef BOOLEAN DDKAPI
       
   331 (*PHW_INITIALIZE)(
       
   332   /*IN*/ PVOID DeviceExtension);
       
   333 
       
   334 typedef BOOLEAN DDKAPI
       
   335 (*PHW_INTERRUPT)(
       
   336   /*IN*/ PVOID DeviceExtension);
       
   337 
       
   338 typedef BOOLEAN DDKAPI
       
   339 (*PHW_RESET_BUS)(
       
   340   /*IN*/ PVOID DeviceExtension,
       
   341   /*IN*/ ULONG PathId);
       
   342 
       
   343 typedef VOID DDKAPI
       
   344 (*PHW_DMA_STARTED)(
       
   345   /*IN*/ PVOID DeviceExtension);
       
   346 
       
   347 typedef BOOLEAN DDKAPI
       
   348 (*PHW_STARTIO)(
       
   349   /*IN*/ PVOID DeviceExtension,
       
   350   /*IN*/ PSCSI_REQUEST_BLOCK Srb);
       
   351 
       
   352 typedef VOID DDKAPI
       
   353 (*PHW_TIMER)(
       
   354   /*IN*/ PVOID DeviceExtension);
       
   355 
       
   356 typedef struct _HW_INITIALIZATION_DATA { 
       
   357   ULONG  HwInitializationDataSize; 
       
   358   INTERFACE_TYPE  AdapterInterfaceType; 
       
   359   PHW_INITIALIZE  HwInitialize; 
       
   360   PHW_STARTIO  HwStartIo; 
       
   361   PHW_INTERRUPT  HwInterrupt; 
       
   362   PHW_FIND_ADAPTER  HwFindAdapter; 
       
   363   PHW_RESET_BUS  HwResetBus; 
       
   364   PHW_DMA_STARTED  HwDmaStarted; 
       
   365   PHW_ADAPTER_STATE  HwAdapterState; 
       
   366   ULONG  DeviceExtensionSize; 
       
   367   ULONG  SpecificLuExtensionSize; 
       
   368   ULONG  SrbExtensionSize; 
       
   369   ULONG  NumberOfAccessRanges; 
       
   370   PVOID  Reserved; 
       
   371   BOOLEAN  MapBuffers; 
       
   372   BOOLEAN  NeedPhysicalAddresses; 
       
   373   BOOLEAN  TaggedQueuing; 
       
   374   BOOLEAN  AutoRequestSense; 
       
   375   BOOLEAN  MultipleRequestPerLu; 
       
   376   BOOLEAN  ReceiveEvent; 
       
   377   USHORT  VendorIdLength; 
       
   378   PVOID  VendorId; 
       
   379   USHORT  ReservedUshort; 
       
   380   USHORT  DeviceIdLength; 
       
   381   PVOID  DeviceId; 
       
   382   PHW_ADAPTER_CONTROL  HwAdapterControl;
       
   383 } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA; 
       
   384 
       
   385 SCSIPORTAPI
       
   386 VOID 
       
   387 DDKAPI
       
   388 ScsiPortCompleteRequest(
       
   389   /*IN*/ PVOID  HwDeviceExtension,
       
   390   /*IN*/ UCHAR  PathId,
       
   391   /*IN*/ UCHAR  TargetId,
       
   392   /*IN*/ UCHAR  Lun,
       
   393   /*IN*/ UCHAR  SrbStatus);
       
   394 
       
   395 /*
       
   396  * ULONG
       
   397  * ScsiPortConvertPhysicalAddressToUlong(
       
   398  * IN SCSI_PHYSICAL_ADDRESS  Address);
       
   399  */
       
   400 #define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart)
       
   401 
       
   402 SCSIPORTAPI
       
   403 SCSI_PHYSICAL_ADDRESS 
       
   404 DDKAPI
       
   405 ScsiPortConvertUlongToPhysicalAddress(
       
   406   /*IN*/ ULONG  UlongAddress);
       
   407 
       
   408 SCSIPORTAPI
       
   409 VOID
       
   410 DDKAPI
       
   411 ScsiPortFlushDma(
       
   412   /*IN*/ PVOID  DeviceExtension);
       
   413 
       
   414 SCSIPORTAPI
       
   415 VOID
       
   416 DDKAPI
       
   417 ScsiPortFreeDeviceBase(
       
   418   /*IN*/ PVOID  HwDeviceExtension,
       
   419   /*IN*/ PVOID  MappedAddress);
       
   420 
       
   421 SCSIPORTAPI
       
   422 ULONG
       
   423 DDKAPI
       
   424 ScsiPortGetBusData(
       
   425   /*IN*/ PVOID  DeviceExtension,
       
   426   /*IN*/ ULONG  BusDataType,
       
   427   /*IN*/ ULONG  SystemIoBusNumber,
       
   428   /*IN*/ ULONG  SlotNumber,
       
   429   /*IN*/ PVOID  Buffer,
       
   430   /*IN*/ ULONG  Length);
       
   431 
       
   432 SCSIPORTAPI
       
   433 PVOID
       
   434 DDKAPI
       
   435 ScsiPortGetDeviceBase(
       
   436   /*IN*/ PVOID  HwDeviceExtension,
       
   437   /*IN*/ INTERFACE_TYPE  BusType,
       
   438   /*IN*/ ULONG  SystemIoBusNumber,
       
   439   /*IN*/ SCSI_PHYSICAL_ADDRESS  IoAddress,
       
   440   /*IN*/ ULONG  NumberOfBytes,
       
   441   /*IN*/ BOOLEAN  InIoSpace);
       
   442 
       
   443 SCSIPORTAPI
       
   444 PVOID
       
   445 DDKAPI
       
   446 ScsiPortGetLogicalUnit(
       
   447   /*IN*/ PVOID  HwDeviceExtension,
       
   448   /*IN*/ UCHAR  PathId,
       
   449   /*IN*/ UCHAR  TargetId,
       
   450   /*IN*/ UCHAR  Lun);
       
   451 
       
   452 SCSIPORTAPI
       
   453 SCSI_PHYSICAL_ADDRESS
       
   454 DDKAPI
       
   455 ScsiPortGetPhysicalAddress(
       
   456   /*IN*/ PVOID  HwDeviceExtension,
       
   457   /*IN*/ PSCSI_REQUEST_BLOCK  Srb  /*OPTIONAL*/,
       
   458   /*IN*/ PVOID  VirtualAddress,
       
   459   /*OUT*/ ULONG  *Length);
       
   460 
       
   461 SCSIPORTAPI
       
   462 PSCSI_REQUEST_BLOCK
       
   463 DDKAPI
       
   464 ScsiPortGetSrb(
       
   465   /*IN*/ PVOID  DeviceExtension,
       
   466   /*IN*/ UCHAR  PathId,
       
   467   /*IN*/ UCHAR  TargetId,
       
   468   /*IN*/ UCHAR  Lun,
       
   469   /*IN*/ LONG  QueueTag);
       
   470 
       
   471 SCSIPORTAPI
       
   472 PVOID
       
   473 DDKAPI
       
   474 ScsiPortGetUncachedExtension(
       
   475   /*IN*/ PVOID  HwDeviceExtension,
       
   476   /*IN*/ PPORT_CONFIGURATION_INFORMATION  ConfigInfo,
       
   477   /*IN*/ ULONG  NumberOfBytes);
       
   478 
       
   479 SCSIPORTAPI
       
   480 PVOID
       
   481 DDKAPI
       
   482 ScsiPortGetVirtualAddress(
       
   483   /*IN*/ PVOID  HwDeviceExtension,
       
   484   /*IN*/ SCSI_PHYSICAL_ADDRESS  PhysicalAddress);
       
   485 
       
   486 SCSIPORTAPI
       
   487 ULONG
       
   488 DDKAPI
       
   489 ScsiPortInitialize(
       
   490   /*IN*/ PVOID  Argument1,
       
   491   /*IN*/ PVOID  Argument2,
       
   492   /*IN*/ struct _HW_INITIALIZATION_DATA  *HwInitializationData,
       
   493   /*IN*/ PVOID  HwContext  /*OPTIONAL*/);
       
   494 
       
   495 SCSIPORTAPI
       
   496 VOID
       
   497 DDKAPI
       
   498 ScsiPortIoMapTransfer(
       
   499   /*IN*/ PVOID  HwDeviceExtension,
       
   500   /*IN*/ PSCSI_REQUEST_BLOCK  Srb,
       
   501   /*IN*/ ULONG  LogicalAddress,
       
   502   /*IN*/ ULONG  Length);
       
   503 
       
   504 SCSIPORTAPI
       
   505 VOID
       
   506 DDKAPI
       
   507 ScsiPortLogError(
       
   508   /*IN*/ PVOID  HwDeviceExtension,
       
   509   /*IN*/ PSCSI_REQUEST_BLOCK  Srb  /*OPTIONAL*/,
       
   510   /*IN*/ UCHAR  PathId,
       
   511   /*IN*/ UCHAR  TargetId,
       
   512   /*IN*/ UCHAR  Lun,
       
   513   /*IN*/ ULONG  ErrorCode,
       
   514   /*IN*/ ULONG  UniqueId);
       
   515 
       
   516 SCSIPORTAPI
       
   517 VOID
       
   518 DDKAPI
       
   519 ScsiPortMoveMemory(
       
   520   /*IN*/ PVOID  WriteBuffer,
       
   521   /*IN*/ PVOID  ReadBuffer,
       
   522   /*IN*/ ULONG  Length);
       
   523 
       
   524 SCSIPORTAPI
       
   525 VOID
       
   526 DDKCDECLAPI
       
   527 ScsiPortNotification(
       
   528   /*IN*/ SCSI_NOTIFICATION_TYPE  NotificationType,
       
   529   /*IN*/ PVOID  HwDeviceExtension,
       
   530   /*IN*/ ...);
       
   531 
       
   532 SCSIPORTAPI
       
   533 VOID
       
   534 DDKAPI
       
   535 ScsiPortQuerySystemTime(
       
   536   /*OUT*/ PLARGE_INTEGER  CurrentTime);
       
   537 
       
   538 SCSIPORTAPI
       
   539 VOID
       
   540 DDKAPI
       
   541 ScsiPortReadPortBufferUchar(
       
   542   /*IN*/ PUCHAR  Port,
       
   543   /*IN*/ PUCHAR  Buffer,
       
   544   /*IN*/ ULONG  Count);
       
   545 
       
   546 SCSIPORTAPI
       
   547 VOID
       
   548 DDKAPI
       
   549 ScsiPortReadPortBufferUlong(
       
   550   /*IN*/ PULONG  Port,
       
   551   /*IN*/ PULONG  Buffer,
       
   552   /*IN*/ ULONG  Count);
       
   553 
       
   554 SCSIPORTAPI
       
   555 VOID
       
   556 DDKAPI
       
   557 ScsiPortReadPortBufferUshort(
       
   558   /*IN*/ PUSHORT  Port,
       
   559   /*IN*/ PUSHORT  Buffer,
       
   560   /*IN*/ ULONG  Count);
       
   561 
       
   562 SCSIPORTAPI
       
   563 UCHAR
       
   564 DDKAPI
       
   565 ScsiPortReadPortUchar(
       
   566   /*IN*/ PUCHAR  Port);
       
   567 
       
   568 SCSIPORTAPI
       
   569 ULONG
       
   570 DDKAPI
       
   571 ScsiPortReadPortUlong(
       
   572   /*IN*/ PULONG  Port);
       
   573 
       
   574 SCSIPORTAPI
       
   575 USHORT
       
   576 DDKAPI
       
   577 ScsiPortReadPortUshort(
       
   578   /*IN*/ PUSHORT  Port);
       
   579 
       
   580 SCSIPORTAPI
       
   581 VOID
       
   582 DDKAPI
       
   583 ScsiPortReadRegisterBufferUchar(
       
   584   /*IN*/ PUCHAR  Register,
       
   585   /*IN*/ PUCHAR  Buffer,
       
   586   /*IN*/ ULONG  Count);
       
   587 
       
   588 SCSIPORTAPI
       
   589 VOID
       
   590 DDKAPI
       
   591 ScsiPortReadRegisterBufferUlong(
       
   592   /*IN*/ PULONG  Register,
       
   593   /*IN*/ PULONG  Buffer,
       
   594   /*IN*/ ULONG  Count);
       
   595 
       
   596 SCSIPORTAPI
       
   597 VOID
       
   598 DDKAPI
       
   599 ScsiPortReadRegisterBufferUshort(
       
   600   /*IN*/ PUSHORT  Register,
       
   601   /*IN*/ PUSHORT  Buffer,
       
   602   /*IN*/ ULONG  Count);
       
   603 
       
   604 SCSIPORTAPI
       
   605 UCHAR
       
   606 DDKAPI
       
   607 ScsiPortReadRegisterUchar(
       
   608   /*IN*/ PUCHAR  Register);
       
   609 
       
   610 SCSIPORTAPI
       
   611 ULONG
       
   612 DDKAPI
       
   613 ScsiPortReadRegisterUlong(
       
   614   /*IN*/ PULONG  Register);
       
   615 
       
   616 SCSIPORTAPI
       
   617 USHORT
       
   618 DDKAPI
       
   619 ScsiPortReadRegisterUshort(
       
   620   /*IN*/ PUSHORT  Register);
       
   621 
       
   622 SCSIPORTAPI
       
   623 ULONG
       
   624 DDKAPI
       
   625 ScsiPortSetBusDataByOffset(
       
   626   /*IN*/ PVOID  DeviceExtension,
       
   627   /*IN*/ ULONG  BusDataType,
       
   628   /*IN*/ ULONG  SystemIoBusNumber,
       
   629   /*IN*/ ULONG  SlotNumber,
       
   630   /*IN*/ PVOID  Buffer,
       
   631   /*IN*/ ULONG  Offset,
       
   632   /*IN*/ ULONG  Length);
       
   633 
       
   634 SCSIPORTAPI
       
   635 VOID
       
   636 DDKAPI
       
   637 ScsiPortStallExecution(
       
   638   /*IN*/ ULONG  Delay);
       
   639 
       
   640 SCSIPORTAPI
       
   641 BOOLEAN
       
   642 DDKAPI
       
   643 ScsiPortValidateRange(
       
   644   /*IN*/ PVOID  HwDeviceExtension,
       
   645   /*IN*/ INTERFACE_TYPE  BusType,
       
   646   /*IN*/ ULONG  SystemIoBusNumber,
       
   647   /*IN*/ SCSI_PHYSICAL_ADDRESS  IoAddress,
       
   648   /*IN*/ ULONG  NumberOfBytes,
       
   649   /*IN*/ BOOLEAN  InIoSpace);
       
   650 
       
   651 SCSIPORTAPI
       
   652 VOID
       
   653 DDKAPI
       
   654 ScsiPortWritePortBufferUchar(
       
   655   /*IN*/ PUCHAR  Port,
       
   656   /*IN*/ PUCHAR  Buffer,
       
   657   /*IN*/ ULONG  Count);
       
   658 
       
   659 SCSIPORTAPI
       
   660 VOID
       
   661 DDKAPI
       
   662 ScsiPortWritePortBufferUlong(
       
   663   /*IN*/ PULONG  Port,
       
   664   /*IN*/ PULONG  Buffer,
       
   665   /*IN*/ ULONG  Count);
       
   666 
       
   667 SCSIPORTAPI
       
   668 VOID
       
   669 DDKAPI
       
   670 ScsiPortWritePortBufferUshort(
       
   671   /*IN*/ PUSHORT  Port,
       
   672   /*IN*/ PUSHORT  Buffer,
       
   673   /*IN*/ ULONG  Count);
       
   674 
       
   675 SCSIPORTAPI
       
   676 VOID
       
   677 DDKAPI
       
   678 ScsiPortWritePortUchar(
       
   679   /*IN*/ PUCHAR  Port,
       
   680   /*IN*/ UCHAR  Value);
       
   681 
       
   682 SCSIPORTAPI
       
   683 VOID
       
   684 DDKAPI
       
   685 ScsiPortWritePortUlong(
       
   686   /*IN*/ PULONG  Port,
       
   687   /*IN*/ ULONG  Value);
       
   688 
       
   689 SCSIPORTAPI
       
   690 VOID
       
   691 DDKAPI
       
   692 ScsiPortWritePortUshort(
       
   693   /*IN*/ PUSHORT  Port,
       
   694   /*IN*/ USHORT  Value);
       
   695 
       
   696 SCSIPORTAPI
       
   697 VOID
       
   698 DDKAPI
       
   699 ScsiPortWriteRegisterBufferUchar(
       
   700   /*IN*/ PUCHAR  Register,
       
   701   /*IN*/ PUCHAR  Buffer,
       
   702   /*IN*/ ULONG  Count);
       
   703 
       
   704 SCSIPORTAPI
       
   705 VOID
       
   706 DDKAPI
       
   707 ScsiPortWriteRegisterBufferUlong(
       
   708   /*IN*/ PULONG  Register,
       
   709   /*IN*/ PULONG  Buffer,
       
   710   /*IN*/ ULONG  Count);
       
   711 
       
   712 SCSIPORTAPI
       
   713 VOID
       
   714 DDKAPI
       
   715 ScsiPortWriteRegisterBufferUshort(
       
   716   /*IN*/ PUSHORT  Register,
       
   717   /*IN*/ PUSHORT  Buffer,
       
   718   /*IN*/ ULONG  Count);
       
   719 
       
   720 SCSIPORTAPI
       
   721 VOID
       
   722 DDKAPI
       
   723 ScsiPortWriteRegisterUchar(
       
   724   /*IN*/ PUCHAR  Register,
       
   725   /*IN*/ ULONG  Value);
       
   726 
       
   727 SCSIPORTAPI
       
   728 VOID
       
   729 DDKAPI
       
   730 ScsiPortWriteRegisterUlong(
       
   731   /*IN*/ PULONG  Register,
       
   732   /*IN*/ ULONG  Value);
       
   733 
       
   734 SCSIPORTAPI
       
   735 VOID
       
   736 DDKAPI
       
   737 ScsiPortWriteRegisterUshort(
       
   738   /*IN*/ PUSHORT  Register,
       
   739   /*IN*/ USHORT  Value);
       
   740 
       
   741 SCSIPORTAPI
       
   742 VOID
       
   743 DDKCDECLAPI
       
   744 ScsiDebugPrint(
       
   745   /*IN*/ ULONG DebugPrintLevel,
       
   746   /*IN*/ PCCHAR DebugMessage,
       
   747   /*IN*/ ...);
       
   748 
       
   749 #ifdef __cplusplus
       
   750 }
       
   751 #endif
       
   752 
       
   753 #endif /* __SRB_H */