Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers srb.h Source File

srb.h

00001 /*
00002  * scsi.h
00003  *
00004  * Interface between SCSI miniport drivers and the SCSI port driver.
00005  *
00006  * This file is part of the w32api package.
00007  *
00008  * Contributors:
00009  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
00010  *
00011  * THIS SOFTWARE IS NOT COPYRIGHTED
00012  *
00013  * This source code is offered for use in the public domain. You may
00014  * use, modify or distribute it freely.
00015  *
00016  * This code is distributed in the hope that it will be useful but
00017  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00018  * DISCLAIMED. This includes but is not limited to warranties of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020  *
00021  */
00022 
00023 #ifndef __SRB_H
00024 #define __SRB_H
00025 
00026 #if __GNUC__ >=3
00027 #pragma GCC system_header
00028 #endif
00029 
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033 
00034 #include "ntddk.h"
00035 
00036 #if defined(_SCSIPORT_)
00037   #define SCSIPORTAPI DECLSPEC_EXPORT
00038 #else
00039   #define SCSIPORTAPI DECLSPEC_IMPORT
00040 #endif
00041 
00042 #ifdef DBG
00043 #define DebugPrint(x) ScsiDebugPrint x
00044 #else
00045 #define DebugPrint(x)
00046 #endif
00047 
00048 typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
00049 
00050 #define SP_UNINITIALIZED_VALUE            ((ULONG) ~0)
00051 #define SP_UNTAGGED                       ((UCHAR) ~0)
00052 
00053 #define SRB_SIMPLE_TAG_REQUEST            0x20
00054 #define SRB_HEAD_OF_QUEUE_TAG_REQUEST     0x21
00055 #define SRB_ORDERED_QUEUE_TAG_REQUEST     0x22
00056 
00057 #define SRB_STATUS_QUEUE_FROZEN           0x40
00058 #define SRB_STATUS_AUTOSENSE_VALID        0x80
00059 
00060 #define SRB_STATUS(Status) \
00061   (Status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
00062 
00063 #define MAXIMUM_CDB_SIZE                  12
00064 
00065 #ifdef DBG
00066 #define SCSI_PORT_SIGNATURE               0x54524f50
00067 #endif
00068 
00069 
00070 #define SCSI_MAXIMUM_LOGICAL_UNITS        8
00071 #define SCSI_MAXIMUM_TARGETS_PER_BUS      128
00072 #define SCSI_MAXIMUM_LUNS_PER_TARGET      255
00073 #define SCSI_MAXIMUM_BUSES                8
00074 #define SCSI_MINIMUM_PHYSICAL_BREAKS      16
00075 #define SCSI_MAXIMUM_PHYSICAL_BREAKS      255
00076 #define SCSI_MAXIMUM_TARGETS              8
00077 
00078 #define SRB_FUNCTION_WMI                  0x17
00079 
00080 #define SRB_WMI_FLAGS_ADAPTER_REQUEST     0x0001
00081 
00082 #define SP_BUS_PARITY_ERROR               0x0001
00083 #define SP_UNEXPECTED_DISCONNECT          0x0002
00084 #define SP_INVALID_RESELECTION            0x0003
00085 #define SP_BUS_TIME_OUT                   0x0004
00086 #define SP_PROTOCOL_ERROR                 0x0005
00087 #define SP_INTERNAL_ADAPTER_ERROR         0x0006
00088 #define SP_REQUEST_TIMEOUT                0x0007
00089 #define SP_IRQ_NOT_RESPONDING             0x0008
00090 #define SP_BAD_FW_WARNING                 0x0009
00091 #define SP_BAD_FW_ERROR                   0x000a
00092 #define SP_LOST_WMI_MINIPORT_REQUEST      0x000b
00093 
00094 /* SCSI_REQUEST_BLOCK.Function constants */
00095 #define SRB_FUNCTION_EXECUTE_SCSI         0x00
00096 #define SRB_FUNCTION_CLAIM_DEVICE         0x01
00097 #define SRB_FUNCTION_IO_CONTROL           0x02
00098 #define SRB_FUNCTION_RECEIVE_EVENT        0x03
00099 #define SRB_FUNCTION_RELEASE_QUEUE        0x04
00100 #define SRB_FUNCTION_ATTACH_DEVICE        0x05
00101 #define SRB_FUNCTION_RELEASE_DEVICE       0x06
00102 #define SRB_FUNCTION_SHUTDOWN             0x07
00103 #define SRB_FUNCTION_FLUSH                0x08
00104 #define SRB_FUNCTION_ABORT_COMMAND        0x10
00105 #define SRB_FUNCTION_RELEASE_RECOVERY     0x11
00106 #define SRB_FUNCTION_RESET_BUS            0x12
00107 #define SRB_FUNCTION_RESET_DEVICE         0x13
00108 #define SRB_FUNCTION_TERMINATE_IO         0x14
00109 #define SRB_FUNCTION_FLUSH_QUEUE          0x15
00110 #define SRB_FUNCTION_REMOVE_DEVICE        0x16
00111 #define SRB_FUNCTION_WMI                  0x17
00112 #define SRB_FUNCTION_LOCK_QUEUE           0x18
00113 #define SRB_FUNCTION_UNLOCK_QUEUE         0x19
00114 #define SRB_FUNCTION_RESET_LOGICAL_UNIT   0x20
00115 
00116 /* SCSI_REQUEST_BLOCK.SrbStatus constants */
00117 #define SRB_STATUS_PENDING                0x00
00118 #define SRB_STATUS_SUCCESS                0x01
00119 #define SRB_STATUS_ABORTED                0x02
00120 #define SRB_STATUS_ABORT_FAILED           0x03
00121 #define SRB_STATUS_ERROR                  0x04
00122 #define SRB_STATUS_BUSY                   0x05
00123 #define SRB_STATUS_INVALID_REQUEST        0x06
00124 #define SRB_STATUS_INVALID_PATH_ID        0x07
00125 #define SRB_STATUS_NO_DEVICE              0x08
00126 #define SRB_STATUS_TIMEOUT                0x09
00127 #define SRB_STATUS_SELECTION_TIMEOUT      0x0A
00128 #define SRB_STATUS_COMMAND_TIMEOUT        0x0B
00129 #define SRB_STATUS_MESSAGE_REJECTED       0x0D
00130 #define SRB_STATUS_BUS_RESET              0x0E
00131 #define SRB_STATUS_PARITY_ERROR           0x0F
00132 #define SRB_STATUS_REQUEST_SENSE_FAILED   0x10
00133 #define SRB_STATUS_NO_HBA                 0x11
00134 #define SRB_STATUS_DATA_OVERRUN           0x12
00135 #define SRB_STATUS_UNEXPECTED_BUS_FREE    0x13
00136 #define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14
00137 #define SRB_STATUS_BAD_SRB_BLOCK_LENGTH   0x15
00138 #define SRB_STATUS_REQUEST_FLUSHED        0x16
00139 #define SRB_STATUS_INVALID_LUN            0x20
00140 #define SRB_STATUS_INVALID_TARGET_ID      0x21
00141 #define SRB_STATUS_BAD_FUNCTION           0x22
00142 #define SRB_STATUS_ERROR_RECOVERY         0x23
00143 #define SRB_STATUS_NOT_POWERED            0x24
00144 #define SRB_STATUS_INTERNAL_ERROR         0x30
00145 
00146 /* SCSI_REQUEST_BLOCK.SrbFlags constants */
00147 #define SRB_FLAGS_QUEUE_ACTION_ENABLE       0x00000002
00148 #define SRB_FLAGS_DISABLE_DISCONNECT        0x00000004
00149 #define SRB_FLAGS_DISABLE_SYNCH_TRANSFER    0x00000008
00150 #define SRB_FLAGS_BYPASS_FROZEN_QUEUE       0x00000010
00151 #define SRB_FLAGS_DISABLE_AUTOSENSE         0x00000020
00152 #define SRB_FLAGS_DATA_IN                   0x00000040
00153 #define SRB_FLAGS_DATA_OUT                  0x00000080
00154 #define SRB_FLAGS_NO_DATA_TRANSFER          0x00000000
00155 #define SRB_FLAGS_UNSPECIFIED_DIRECTION     (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT)
00156 #define SRB_FLAGS_NO_QUEUE_FREEZE           0x00000100
00157 #define SRB_FLAGS_ADAPTER_CACHE_ENABLE      0x00000200
00158 #define SRB_FLAGS_FREE_SENSE_BUFFER         0x00000400
00159 #define SRB_FLAGS_IS_ACTIVE                 0x00010000
00160 #define SRB_FLAGS_ALLOCATED_FROM_ZONE       0x00020000
00161 #define SRB_FLAGS_SGLIST_FROM_POOL          0x00040000
00162 #define SRB_FLAGS_BYPASS_LOCKED_QUEUE       0x00080000
00163 #define SRB_FLAGS_NO_KEEP_AWAKE             0x00100000
00164 #define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE    0x00200000
00165 #define SRB_FLAGS_PORT_DRIVER_SENSEHASPORT  0x00400000
00166 #define SRB_FLAGS_DONT_START_NEXT_PACKET    0x00800000
00167 #define SRB_FLAGS_PORT_DRIVER_RESERVED      0x0F000000
00168 #define SRB_FLAGS_CLASS_DRIVER_RESERVED     0xF0000000
00169 
00170 typedef struct _SCSI_REQUEST_BLOCK { 
00171   USHORT  Length; 
00172   UCHAR  Function; 
00173   UCHAR  SrbStatus; 
00174   UCHAR  ScsiStatus; 
00175   UCHAR  PathId; 
00176   UCHAR  TargetId; 
00177   UCHAR  Lun; 
00178   UCHAR  QueueTag; 
00179   UCHAR  QueueAction; 
00180   UCHAR  CdbLength; 
00181   UCHAR  SenseInfoBufferLength; 
00182   ULONG  SrbFlags; 
00183   ULONG  DataTransferLength; 
00184   ULONG  TimeOutValue; 
00185   PVOID  DataBuffer; 
00186   PVOID  SenseInfoBuffer; 
00187   struct _SCSI_REQUEST_BLOCK  *NextSrb; 
00188   PVOID  OriginalRequest; 
00189   PVOID  SrbExtension; 
00190   _ANONYMOUS_UNION union {
00191     ULONG  InternalStatus;
00192     ULONG  QueueSortKey;
00193   } DUMMYUNIONNAME; 
00194 #if defined(_WIN64)
00195   ULONG Reserved;
00196 #endif
00197   UCHAR  Cdb[16]; 
00198 } SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK; 
00199 
00200 #define SCSI_REQUEST_BLOCK_SIZE           sizeof(SCSI_REQUEST_BLOCK)
00201 
00202 typedef struct _ACCESS_RANGE { 
00203   SCSI_PHYSICAL_ADDRESS  RangeStart; 
00204   ULONG  RangeLength; 
00205   BOOLEAN  RangeInMemory; 
00206 } ACCESS_RANGE, *PACCESS_RANGE;
00207 
00208 /* PORT_CONFIGURATION_INFORMATION.Dma64BitAddresses constants */
00209 #define SCSI_DMA64_MINIPORT_SUPPORTED     0x01
00210 #define SCSI_DMA64_SYSTEM_SUPPORTED       0x80
00211 
00212 typedef struct _PORT_CONFIGURATION_INFORMATION {
00213   ULONG  Length;
00214   ULONG  SystemIoBusNumber;
00215   INTERFACE_TYPE  AdapterInterfaceType;
00216   ULONG  BusInterruptLevel;
00217   ULONG  BusInterruptVector;
00218   KINTERRUPT_MODE  InterruptMode;
00219   ULONG  MaximumTransferLength;
00220   ULONG  NumberOfPhysicalBreaks;
00221   ULONG  DmaChannel;
00222   ULONG  DmaPort;
00223   DMA_WIDTH  DmaWidth;
00224   DMA_SPEED  DmaSpeed;
00225   ULONG  AlignmentMask;
00226   ULONG  NumberOfAccessRanges;
00227   ACCESS_RANGE  (*AccessRanges)[];
00228   PVOID  Reserved;
00229   UCHAR  NumberOfBuses;
00230   UCHAR  InitiatorBusId[8];
00231   BOOLEAN  ScatterGather;
00232   BOOLEAN  Master;
00233   BOOLEAN  CachesData;
00234   BOOLEAN  AdapterScansDown;
00235   BOOLEAN  AtdiskPrimaryClaimed;
00236   BOOLEAN  AtdiskSecondaryClaimed;
00237   BOOLEAN  Dma32BitAddresses;
00238   BOOLEAN  DemandMode;
00239   BOOLEAN  MapBuffers;
00240   BOOLEAN  NeedPhysicalAddresses;
00241   BOOLEAN  TaggedQueuing;
00242   BOOLEAN  AutoRequestSense;
00243   BOOLEAN  MultipleRequestPerLu;
00244   BOOLEAN  ReceiveEvent;
00245   BOOLEAN  RealModeInitialized;
00246   BOOLEAN  BufferAccessScsiPortControlled;
00247   UCHAR  MaximumNumberOfTargets;
00248   UCHAR  ReservedUchars[2];
00249   ULONG  SlotNumber;
00250   ULONG  BusInterruptLevel2;
00251   ULONG  BusInterruptVector2;
00252   KINTERRUPT_MODE  InterruptMode2;
00253   ULONG  DmaChannel2;
00254   ULONG  DmaPort2;
00255   DMA_WIDTH  DmaWidth2;
00256   DMA_SPEED  DmaSpeed2;
00257   ULONG  DeviceExtensionSize;
00258   ULONG  SpecificLuExtensionSize;
00259   ULONG  SrbExtensionSize;
00260   UCHAR  Dma64BitAddresses;
00261   BOOLEAN  ResetTargetSupported;
00262   UCHAR  MaximumNumberOfLogicalUnits;
00263   BOOLEAN  WmiDataProvider;
00264 } PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
00265 
00266 #define CONFIG_INFO_VERSION_2             sizeof(PORT_CONFIGURATION_INFORMATION)
00267 
00268 typedef enum _SCSI_NOTIFICATION_TYPE {
00269     RequestComplete,
00270     NextRequest,
00271     NextLuRequest,
00272     ResetDetected,
00273     CallDisableInterrupts,
00274     CallEnableInterrupts,
00275     RequestTimerCall,
00276     BusChangeDetected,
00277     WMIEvent,
00278     WMIReregister
00279 } SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE;
00280 
00281 #ifdef __GNUC__
00282 __extension__ /* enums limited to range of integer */
00283 #endif
00284 typedef enum _SCSI_ADAPTER_CONTROL_TYPE {
00285     ScsiQuerySupportedControlTypes = 0,
00286     ScsiStopAdapter,
00287     ScsiRestartAdapter,
00288     ScsiSetBootConfig,
00289     ScsiSetRunningConfig,
00290     ScsiAdapterControlMax,
00291     MakeAdapterControlTypeSizeOfUlong = 0xffffffff
00292 } SCSI_ADAPTER_CONTROL_TYPE, *PSCSI_ADAPTER_CONTROL_TYPE;
00293 
00294 typedef enum _SCSI_ADAPTER_CONTROL_STATUS {
00295     ScsiAdapterControlSuccess = 0,
00296     ScsiAdapterControlUnsuccessful
00297 } SCSI_ADAPTER_CONTROL_STATUS, *PSCSI_ADAPTER_CONTROL_STATUS;
00298 
00299 typedef struct _SCSI_SUPPORTED_CONTROL_TYPE_LIST {
00300     ULONG MaxControlType;
00301     BOOLEAN SupportedTypeList[0];
00302 } SCSI_SUPPORTED_CONTROL_TYPE_LIST, *PSCSI_SUPPORTED_CONTROL_TYPE_LIST;
00303 
00304 typedef SCSI_ADAPTER_CONTROL_STATUS DDKAPI
00305 (*PHW_ADAPTER_CONTROL)(
00306   /*IN*/ PVOID DeviceExtension,
00307   /*IN*/ SCSI_ADAPTER_CONTROL_TYPE ControlType,
00308   /*IN*/ PVOID Parameters);
00309 
00310 typedef BOOLEAN DDKAPI
00311 (*PHW_ADAPTER_STATE)(
00312   /*IN*/ PVOID DeviceExtension,
00313   /*IN*/ PVOID Context,
00314   /*IN*/ BOOLEAN SaveState);
00315 
00316 #define SP_RETURN_NOT_FOUND               0
00317 #define SP_RETURN_FOUND                   1
00318 #define SP_RETURN_ERROR                   2
00319 #define SP_RETURN_BAD_CONFIG              3
00320 
00321 typedef ULONG DDKAPI
00322 (*PHW_FIND_ADAPTER)(
00323   /*IN*/ PVOID DeviceExtension,
00324   /*IN*/ PVOID HwContext,
00325   /*IN*/ PVOID BusInformation,
00326   /*IN*/ PCHAR ArgumentString,
00327   /*IN OUT*/ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
00328   /*OUT*/ PBOOLEAN Again);
00329 
00330 typedef BOOLEAN DDKAPI
00331 (*PHW_INITIALIZE)(
00332   /*IN*/ PVOID DeviceExtension);
00333 
00334 typedef BOOLEAN DDKAPI
00335 (*PHW_INTERRUPT)(
00336   /*IN*/ PVOID DeviceExtension);
00337 
00338 typedef BOOLEAN DDKAPI
00339 (*PHW_RESET_BUS)(
00340   /*IN*/ PVOID DeviceExtension,
00341   /*IN*/ ULONG PathId);
00342 
00343 typedef VOID DDKAPI
00344 (*PHW_DMA_STARTED)(
00345   /*IN*/ PVOID DeviceExtension);
00346 
00347 typedef BOOLEAN DDKAPI
00348 (*PHW_STARTIO)(
00349   /*IN*/ PVOID DeviceExtension,
00350   /*IN*/ PSCSI_REQUEST_BLOCK Srb);
00351 
00352 typedef VOID DDKAPI
00353 (*PHW_TIMER)(
00354   /*IN*/ PVOID DeviceExtension);
00355 
00356 typedef struct _HW_INITIALIZATION_DATA { 
00357   ULONG  HwInitializationDataSize; 
00358   INTERFACE_TYPE  AdapterInterfaceType; 
00359   PHW_INITIALIZE  HwInitialize; 
00360   PHW_STARTIO  HwStartIo; 
00361   PHW_INTERRUPT  HwInterrupt; 
00362   PHW_FIND_ADAPTER  HwFindAdapter; 
00363   PHW_RESET_BUS  HwResetBus; 
00364   PHW_DMA_STARTED  HwDmaStarted; 
00365   PHW_ADAPTER_STATE  HwAdapterState; 
00366   ULONG  DeviceExtensionSize; 
00367   ULONG  SpecificLuExtensionSize; 
00368   ULONG  SrbExtensionSize; 
00369   ULONG  NumberOfAccessRanges; 
00370   PVOID  Reserved; 
00371   BOOLEAN  MapBuffers; 
00372   BOOLEAN  NeedPhysicalAddresses; 
00373   BOOLEAN  TaggedQueuing; 
00374   BOOLEAN  AutoRequestSense; 
00375   BOOLEAN  MultipleRequestPerLu; 
00376   BOOLEAN  ReceiveEvent; 
00377   USHORT  VendorIdLength; 
00378   PVOID  VendorId; 
00379   USHORT  ReservedUshort; 
00380   USHORT  DeviceIdLength; 
00381   PVOID  DeviceId; 
00382   PHW_ADAPTER_CONTROL  HwAdapterControl;
00383 } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA; 
00384 
00385 SCSIPORTAPI
00386 VOID 
00387 DDKAPI
00388 ScsiPortCompleteRequest(
00389   /*IN*/ PVOID  HwDeviceExtension,
00390   /*IN*/ UCHAR  PathId,
00391   /*IN*/ UCHAR  TargetId,
00392   /*IN*/ UCHAR  Lun,
00393   /*IN*/ UCHAR  SrbStatus);
00394 
00395 /*
00396  * ULONG
00397  * ScsiPortConvertPhysicalAddressToUlong(
00398  * IN SCSI_PHYSICAL_ADDRESS  Address);
00399  */
00400 #define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart)
00401 
00402 SCSIPORTAPI
00403 SCSI_PHYSICAL_ADDRESS 
00404 DDKAPI
00405 ScsiPortConvertUlongToPhysicalAddress(
00406   /*IN*/ ULONG  UlongAddress);
00407 
00408 SCSIPORTAPI
00409 VOID
00410 DDKAPI
00411 ScsiPortFlushDma(
00412   /*IN*/ PVOID  DeviceExtension);
00413 
00414 SCSIPORTAPI
00415 VOID
00416 DDKAPI
00417 ScsiPortFreeDeviceBase(
00418   /*IN*/ PVOID  HwDeviceExtension,
00419   /*IN*/ PVOID  MappedAddress);
00420 
00421 SCSIPORTAPI
00422 ULONG
00423 DDKAPI
00424 ScsiPortGetBusData(
00425   /*IN*/ PVOID  DeviceExtension,
00426   /*IN*/ ULONG  BusDataType,
00427   /*IN*/ ULONG  SystemIoBusNumber,
00428   /*IN*/ ULONG  SlotNumber,
00429   /*IN*/ PVOID  Buffer,
00430   /*IN*/ ULONG  Length);
00431 
00432 SCSIPORTAPI
00433 PVOID
00434 DDKAPI
00435 ScsiPortGetDeviceBase(
00436   /*IN*/ PVOID  HwDeviceExtension,
00437   /*IN*/ INTERFACE_TYPE  BusType,
00438   /*IN*/ ULONG  SystemIoBusNumber,
00439   /*IN*/ SCSI_PHYSICAL_ADDRESS  IoAddress,
00440   /*IN*/ ULONG  NumberOfBytes,
00441   /*IN*/ BOOLEAN  InIoSpace);
00442 
00443 SCSIPORTAPI
00444 PVOID
00445 DDKAPI
00446 ScsiPortGetLogicalUnit(
00447   /*IN*/ PVOID  HwDeviceExtension,
00448   /*IN*/ UCHAR  PathId,
00449   /*IN*/ UCHAR  TargetId,
00450   /*IN*/ UCHAR  Lun);
00451 
00452 SCSIPORTAPI
00453 SCSI_PHYSICAL_ADDRESS
00454 DDKAPI
00455 ScsiPortGetPhysicalAddress(
00456   /*IN*/ PVOID  HwDeviceExtension,
00457   /*IN*/ PSCSI_REQUEST_BLOCK  Srb  /*OPTIONAL*/,
00458   /*IN*/ PVOID  VirtualAddress,
00459   /*OUT*/ ULONG  *Length);
00460 
00461 SCSIPORTAPI
00462 PSCSI_REQUEST_BLOCK
00463 DDKAPI
00464 ScsiPortGetSrb(
00465   /*IN*/ PVOID  DeviceExtension,
00466   /*IN*/ UCHAR  PathId,
00467   /*IN*/ UCHAR  TargetId,
00468   /*IN*/ UCHAR  Lun,
00469   /*IN*/ LONG  QueueTag);
00470 
00471 SCSIPORTAPI
00472 PVOID
00473 DDKAPI
00474 ScsiPortGetUncachedExtension(
00475   /*IN*/ PVOID  HwDeviceExtension,
00476   /*IN*/ PPORT_CONFIGURATION_INFORMATION  ConfigInfo,
00477   /*IN*/ ULONG  NumberOfBytes);
00478 
00479 SCSIPORTAPI
00480 PVOID
00481 DDKAPI
00482 ScsiPortGetVirtualAddress(
00483   /*IN*/ PVOID  HwDeviceExtension,
00484   /*IN*/ SCSI_PHYSICAL_ADDRESS  PhysicalAddress);
00485 
00486 SCSIPORTAPI
00487 ULONG
00488 DDKAPI
00489 ScsiPortInitialize(
00490   /*IN*/ PVOID  Argument1,
00491   /*IN*/ PVOID  Argument2,
00492   /*IN*/ struct _HW_INITIALIZATION_DATA  *HwInitializationData,
00493   /*IN*/ PVOID  HwContext  /*OPTIONAL*/);
00494 
00495 SCSIPORTAPI
00496 VOID
00497 DDKAPI
00498 ScsiPortIoMapTransfer(
00499   /*IN*/ PVOID  HwDeviceExtension,
00500   /*IN*/ PSCSI_REQUEST_BLOCK  Srb,
00501   /*IN*/ ULONG  LogicalAddress,
00502   /*IN*/ ULONG  Length);
00503 
00504 SCSIPORTAPI
00505 VOID
00506 DDKAPI
00507 ScsiPortLogError(
00508   /*IN*/ PVOID  HwDeviceExtension,
00509   /*IN*/ PSCSI_REQUEST_BLOCK  Srb  /*OPTIONAL*/,
00510   /*IN*/ UCHAR  PathId,
00511   /*IN*/ UCHAR  TargetId,
00512   /*IN*/ UCHAR  Lun,
00513   /*IN*/ ULONG  ErrorCode,
00514   /*IN*/ ULONG  UniqueId);
00515 
00516 SCSIPORTAPI
00517 VOID
00518 DDKAPI
00519 ScsiPortMoveMemory(
00520   /*IN*/ PVOID  WriteBuffer,
00521   /*IN*/ PVOID  ReadBuffer,
00522   /*IN*/ ULONG  Length);
00523 
00524 SCSIPORTAPI
00525 VOID
00526 DDKCDECLAPI
00527 ScsiPortNotification(
00528   /*IN*/ SCSI_NOTIFICATION_TYPE  NotificationType,
00529   /*IN*/ PVOID  HwDeviceExtension,
00530   /*IN*/ ...);
00531 
00532 SCSIPORTAPI
00533 VOID
00534 DDKAPI
00535 ScsiPortQuerySystemTime(
00536   /*OUT*/ PLARGE_INTEGER  CurrentTime);
00537 
00538 SCSIPORTAPI
00539 VOID
00540 DDKAPI
00541 ScsiPortReadPortBufferUchar(
00542   /*IN*/ PUCHAR  Port,
00543   /*IN*/ PUCHAR  Buffer,
00544   /*IN*/ ULONG  Count);
00545 
00546 SCSIPORTAPI
00547 VOID
00548 DDKAPI
00549 ScsiPortReadPortBufferUlong(
00550   /*IN*/ PULONG  Port,
00551   /*IN*/ PULONG  Buffer,
00552   /*IN*/ ULONG  Count);
00553 
00554 SCSIPORTAPI
00555 VOID
00556 DDKAPI
00557 ScsiPortReadPortBufferUshort(
00558   /*IN*/ PUSHORT  Port,
00559   /*IN*/ PUSHORT  Buffer,
00560   /*IN*/ ULONG  Count);
00561 
00562 SCSIPORTAPI
00563 UCHAR
00564 DDKAPI
00565 ScsiPortReadPortUchar(
00566   /*IN*/ PUCHAR  Port);
00567 
00568 SCSIPORTAPI
00569 ULONG
00570 DDKAPI
00571 ScsiPortReadPortUlong(
00572   /*IN*/ PULONG  Port);
00573 
00574 SCSIPORTAPI
00575 USHORT
00576 DDKAPI
00577 ScsiPortReadPortUshort(
00578   /*IN*/ PUSHORT  Port);
00579 
00580 SCSIPORTAPI
00581 VOID
00582 DDKAPI
00583 ScsiPortReadRegisterBufferUchar(
00584   /*IN*/ PUCHAR  Register,
00585   /*IN*/ PUCHAR  Buffer,
00586   /*IN*/ ULONG  Count);
00587 
00588 SCSIPORTAPI
00589 VOID
00590 DDKAPI
00591 ScsiPortReadRegisterBufferUlong(
00592   /*IN*/ PULONG  Register,
00593   /*IN*/ PULONG  Buffer,
00594   /*IN*/ ULONG  Count);
00595 
00596 SCSIPORTAPI
00597 VOID
00598 DDKAPI
00599 ScsiPortReadRegisterBufferUshort(
00600   /*IN*/ PUSHORT  Register,
00601   /*IN*/ PUSHORT  Buffer,
00602   /*IN*/ ULONG  Count);
00603 
00604 SCSIPORTAPI
00605 UCHAR
00606 DDKAPI
00607 ScsiPortReadRegisterUchar(
00608   /*IN*/ PUCHAR  Register);
00609 
00610 SCSIPORTAPI
00611 ULONG
00612 DDKAPI
00613 ScsiPortReadRegisterUlong(
00614   /*IN*/ PULONG  Register);
00615 
00616 SCSIPORTAPI
00617 USHORT
00618 DDKAPI
00619 ScsiPortReadRegisterUshort(
00620   /*IN*/ PUSHORT  Register);
00621 
00622 SCSIPORTAPI
00623 ULONG
00624 DDKAPI
00625 ScsiPortSetBusDataByOffset(
00626   /*IN*/ PVOID  DeviceExtension,
00627   /*IN*/ ULONG  BusDataType,
00628   /*IN*/ ULONG  SystemIoBusNumber,
00629   /*IN*/ ULONG  SlotNumber,
00630   /*IN*/ PVOID  Buffer,
00631   /*IN*/ ULONG  Offset,
00632   /*IN*/ ULONG  Length);
00633 
00634 SCSIPORTAPI
00635 VOID
00636 DDKAPI
00637 ScsiPortStallExecution(
00638   /*IN*/ ULONG  Delay);
00639 
00640 SCSIPORTAPI
00641 BOOLEAN
00642 DDKAPI
00643 ScsiPortValidateRange(
00644   /*IN*/ PVOID  HwDeviceExtension,
00645   /*IN*/ INTERFACE_TYPE  BusType,
00646   /*IN*/ ULONG  SystemIoBusNumber,
00647   /*IN*/ SCSI_PHYSICAL_ADDRESS  IoAddress,
00648   /*IN*/ ULONG  NumberOfBytes,
00649   /*IN*/ BOOLEAN  InIoSpace);
00650 
00651 SCSIPORTAPI
00652 VOID
00653 DDKAPI
00654 ScsiPortWritePortBufferUchar(
00655   /*IN*/ PUCHAR  Port,
00656   /*IN*/ PUCHAR  Buffer,
00657   /*IN*/ ULONG  Count);
00658 
00659 SCSIPORTAPI
00660 VOID
00661 DDKAPI
00662 ScsiPortWritePortBufferUlong(
00663   /*IN*/ PULONG  Port,
00664   /*IN*/ PULONG  Buffer,
00665   /*IN*/ ULONG  Count);
00666 
00667 SCSIPORTAPI
00668 VOID
00669 DDKAPI
00670 ScsiPortWritePortBufferUshort(
00671   /*IN*/ PUSHORT  Port,
00672   /*IN*/ PUSHORT  Buffer,
00673   /*IN*/ ULONG  Count);
00674 
00675 SCSIPORTAPI
00676 VOID
00677 DDKAPI
00678 ScsiPortWritePortUchar(
00679   /*IN*/ PUCHAR  Port,
00680   /*IN*/ UCHAR  Value);
00681 
00682 SCSIPORTAPI
00683 VOID
00684 DDKAPI
00685 ScsiPortWritePortUlong(
00686   /*IN*/ PULONG  Port,
00687   /*IN*/ ULONG  Value);
00688 
00689 SCSIPORTAPI
00690 VOID
00691 DDKAPI
00692 ScsiPortWritePortUshort(
00693   /*IN*/ PUSHORT  Port,
00694   /*IN*/ USHORT  Value);
00695 
00696 SCSIPORTAPI
00697 VOID
00698 DDKAPI
00699 ScsiPortWriteRegisterBufferUchar(
00700   /*IN*/ PUCHAR  Register,
00701   /*IN*/ PUCHAR  Buffer,
00702   /*IN*/ ULONG  Count);
00703 
00704 SCSIPORTAPI
00705 VOID
00706 DDKAPI
00707 ScsiPortWriteRegisterBufferUlong(
00708   /*IN*/ PULONG  Register,
00709   /*IN*/ PULONG  Buffer,
00710   /*IN*/ ULONG  Count);
00711 
00712 SCSIPORTAPI
00713 VOID
00714 DDKAPI
00715 ScsiPortWriteRegisterBufferUshort(
00716   /*IN*/ PUSHORT  Register,
00717   /*IN*/ PUSHORT  Buffer,
00718   /*IN*/ ULONG  Count);
00719 
00720 SCSIPORTAPI
00721 VOID
00722 DDKAPI
00723 ScsiPortWriteRegisterUchar(
00724   /*IN*/ PUCHAR  Register,
00725   /*IN*/ ULONG  Value);
00726 
00727 SCSIPORTAPI
00728 VOID
00729 DDKAPI
00730 ScsiPortWriteRegisterUlong(
00731   /*IN*/ PULONG  Register,
00732   /*IN*/ ULONG  Value);
00733 
00734 SCSIPORTAPI
00735 VOID
00736 DDKAPI
00737 ScsiPortWriteRegisterUshort(
00738   /*IN*/ PUSHORT  Register,
00739   /*IN*/ USHORT  Value);
00740 
00741 SCSIPORTAPI
00742 VOID
00743 DDKCDECLAPI
00744 ScsiDebugPrint(
00745   /*IN*/ ULONG DebugPrintLevel,
00746   /*IN*/ PCCHAR DebugMessage,
00747   /*IN*/ ...);
00748 
00749 #ifdef __cplusplus
00750 }
00751 #endif
00752 
00753 #endif /* __SRB_H */