home *** CD-ROM | disk | FTP | other *** search
/ Beginning C++ Through Gam…rogramming (2nd Edition) / BCGP2E.ISO / bloodshed / devcpp-4.9.9.2_setup.exe / srb.h < prev    next >
C/C++ Source or Header  |  2005-01-29  |  18KB  |  754 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. #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 */
  754.