Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

245 lines
5.6 KiB

4 years ago
  1. /*++
  2. Copyright (c) 1991 Microsoft Corporation
  3. Module Name:
  4. mca.h
  5. Abstract:
  6. This is the include file for the IBM MCA SCSI adapter drivers.
  7. Author:
  8. Mike Glass (mglass)
  9. Notes:
  10. Revision History:
  11. --*/
  12. #define MAXIMUM_SDL_SIZE 16
  13. //
  14. // Termination Status Block
  15. //
  16. typedef struct _TSB {
  17. USHORT ScbStatus;
  18. USHORT Reserved;
  19. ULONG ResidualByteCount;
  20. PVOID SgDescriptorAddress;
  21. USHORT DeviceStatusLength;
  22. UCHAR DeviceStatus;
  23. UCHAR CommandStatus;
  24. UCHAR DeviceError;
  25. UCHAR CommandError;
  26. ULONG Reserved2;
  27. PVOID ScbAddress;
  28. } TSB, *PTSB;
  29. //
  30. // TSB End Status
  31. //
  32. #define TSB_STATUS_NO_ERROR 0x0000
  33. #define TSB_STATUS_SHORT_RECORD 0x0002
  34. #define TSB_STATUS_INVALID_COMMAND 0x0004
  35. #define TSB_STATUS_SCB_REJECTED 0x0008
  36. #define TSB_STATUS_SCB_SPECIFIC_CHECK 0x0010
  37. #define TSB_STATUS_LONG_RECORD 0x0020
  38. #define TSB_STATUS_SCB_HALTED 0x0040
  39. #define TSB_STATUS_SCB_INTERRUPT_QUEUED 0x0080
  40. #define TSB_STATUS_ADDITIONAL_STATUS 0x0100
  41. #define TSB_STATUS_DEVICE_STATUS 0x0200
  42. #define TSB_STATUS_DEVICE_NOT_INIT 0x0800
  43. #define TSB_STATUS_MAJOR_EXCEPTION 0x1000
  44. //
  45. // TSB Command Error Codes
  46. //
  47. #define TSB_COMMAND_ERROR_DEVICE_NOT_ASSIGNED 0x0A
  48. //
  49. // Scatter/Gather Descriptor and List
  50. //
  51. typedef struct _SG_DESCRIPTOR {
  52. ULONG Address;
  53. ULONG Length;
  54. } SG_DESCRIPTOR, *PSG_DESCRIPTOR;
  55. typedef struct _SDL {
  56. SG_DESCRIPTOR Descriptor[MAXIMUM_SDL_SIZE];
  57. } SDL, *PSDL;
  58. //
  59. // Subsystem Control Block
  60. //
  61. typedef struct _SCB {
  62. USHORT Command;
  63. USHORT EnableFlags;
  64. USHORT CdbSize;
  65. USHORT Reserved;
  66. ULONG BufferAddress;
  67. ULONG BufferLength;
  68. ULONG StatusBlock;
  69. struct _SCB *NextScb;
  70. UCHAR Cdb[12];
  71. TSB Tsb;
  72. SDL Sdl;
  73. PVOID SrbAddress;
  74. } SCB, *PSCB;
  75. //
  76. // SCB Commands
  77. //
  78. #define SCB_COMMAND_ABORT 0x040F
  79. #define SCB_COMMAND_ASSIGN 0x000E
  80. #define SCB_COMMAND_INQUIRY 0x000B
  81. #define SCB_COMMAND_DMA_CONTROL 0x000D
  82. #define SCB_COMMAND_FEATURE_CONTROL 0x040C
  83. #define SCB_COMMAND_FORMAT_PREPARE 0x0017
  84. #define SCB_COMMAND_FORMAT 0x0016
  85. #define SCB_COMMAND_GET_STATUS 0x0007
  86. #define SCB_COMMAND_GET_POS 0x1c0a
  87. #define SCB_COMMAND_READ 0x0001
  88. #define SCB_COMMAND_READ_CAPACITY 0x1c09
  89. #define SCB_COMMAND_READ_VERIFY 0x0003
  90. #define SCB_COMMAND_REASSIGN_BLOCK 0x0018
  91. #define SCB_COMMAND_REQUEST_SENSE 0x0008
  92. #define SCB_COMMAND_RESET 0x0400
  93. #define SCB_COMMAND_SEND_SCSI 0x241F
  94. #define SCB_COMMAND_WRITE 0x0002
  95. #define SCB_COMMAND_WRITE_VERIFY 0x0004
  96. //
  97. // SCB Command Masks
  98. //
  99. #define SCB_NO_DISCONNECT 0x0080
  100. #define SCB_NO_SYNCHRONOUS_TRANSFER 0x0040
  101. //
  102. // SCB Enable Options Masks
  103. //
  104. #define SCB_ENABLE_WRITE 0x0000
  105. #define SCB_ENABLE_READ 0x8000
  106. #define SCB_ENABLE_TSB_ON_ERROR 0x4000
  107. #define SCB_ENABLE_RETRY_ENABLE 0x2000
  108. #define SCB_ENABLE_SG_LIST 0x1000
  109. #define SCB_ENABLE_SHORT_TRANSFER 0x0400
  110. #define SCB_ENABLE_BYPASS_BUFFER 0x0200
  111. #define SCB_ENABLE_CHAINING 0x0100
  112. //
  113. // SCB Command Status
  114. //
  115. #define SCB_STATUS_SUCCESS 0x01
  116. #define SCB_STATUS_SUCCESS_WITH_RETRIES 0x05
  117. #define SCB_STATUS_ADAPTER_FAILED 0x07
  118. #define SCB_STATUS_IMMEDIATE_COMMAND_COMPLETE 0x0A
  119. #define SCB_STATUS_COMMAND_COMPLETE_WITH_FAILURE 0x0C
  120. #define SCB_STATUS_COMMAND_ERROR 0x0E
  121. #define SCB_STATUS_SOFTWARE_SEQUENCING_ERROR 0x0F
  122. //
  123. // SCB Device Status
  124. //
  125. #define SCB_DEV_STATUS_GOOD 0x00
  126. #define SCB_DEV_STATUS_CHECK_CONDITION 0x01
  127. #define SCB_DEV_STATUS_CONDITION_MET 0x02
  128. #define SCB_DEV_STATUS_BUSY 0x04
  129. #define SCB_DEV_STATUS_INTERMEDIATE_GOOD 0x08
  130. #define SCB_DEV_STATUS_INTERMEDIATE_CONDITION_MET 0x0A
  131. #define SCB_DEV_STATUS_RESERVATION_CONFLICT 0x0C
  132. //
  133. // MCA SCSI Adapter Registers
  134. //
  135. typedef struct _MCA_REGISTERS {
  136. ULONG CommandInterface;
  137. UCHAR Attention;
  138. UCHAR BaseControl;
  139. UCHAR InterruptStatus;
  140. UCHAR BasicStatus;
  141. } MCA_REGISTERS, *PMCA_REGISTERS;
  142. //
  143. // Attention Register Request Codes
  144. //
  145. #define IMMEDIATE_COMMAND 0x10
  146. #define START_SCB 0x30
  147. #define START_LONG_SCB 0x40
  148. #define END_OF_INTERRUPT 0xE0
  149. //
  150. // Basic Control Register
  151. //
  152. #define INTERRUPT_ENABLE 0x01
  153. #define DMA_ENABLE 0x02
  154. #define HARDWARE_RESET 0x80
  155. //
  156. // Basic Status Register
  157. //
  158. #define BASIC_STATUS_BUSY 0x01
  159. #define BASIC_STATUS_INTERRUPT 0x02
  160. #define BASIC_STATUS_CI_EMPTY 0x04
  161. #define BASIC_STATUS_CI_FULL 0x08
  162. #define MAXIMUM_DATA_TRANSFER (16 * 1024 * 1024) - 1
  163. //
  164. // Disk Activity Light Macros
  165. //
  166. #define DISK_ACTIVITY_LIGHT_ON() { \
  167. UCHAR portContents; \
  168. portContents = ScsiPortReadPortUchar((PUCHAR)0x92); \
  169. portContents |= 0x40; \
  170. ScsiPortWritePortUchar((PUCHAR)0x92, portContents); \
  171. }
  172. #define DISK_ACTIVITY_LIGHT_OFF() { \
  173. UCHAR portContents; \
  174. portContents = ScsiPortReadPortUchar((PUCHAR)0x92); \
  175. portContents &= ~0x40; \
  176. ScsiPortWritePortUchar((PUCHAR)0x92, portContents); \
  177. }
  178. //
  179. // POS and Adapter Information
  180. //
  181. typedef struct _ADAPTER_INFORMATION {
  182. USHORT AdapterId;
  183. UCHAR PosRegister3;
  184. UCHAR PosRegister2;
  185. UCHAR PosRegister4;
  186. UCHAR InterruptLevel;
  187. USHORT RevisionLevel:12;
  188. USHORT ChannelConnector:4;
  189. UCHAR NumberOfDevicesSupported;
  190. UCHAR NumberOfLogicalUnitsSupported;
  191. UCHAR NumberOfLogicalDevicesSupported;
  192. UCHAR DmaPacingFactor;
  193. UCHAR MaximumAdapterBusyTime;
  194. UCHAR EoiToInterruptOffTime;
  195. USHORT Reserved;
  196. USHORT DisableRetryDeviceBitMap;
  197. } ADAPTER_INFORMATION, *PADAPTER_INFORMATION;