home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 14 / hacker14.iso / programacao / cwin / c.exe / $INSTDIR / include / ddk / srb.h < prev    next >
Encoding:
C/C++ Source or Header  |  2003-12-15  |  17.3 KB  |  755 lines

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