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.

223 lines
5.3 KiB

4 years ago
  1. /*++
  2. Copyright (c) 1992 Microsoft Corporation
  3. Module Name:
  4. ultra14f.h
  5. Abstract:
  6. This file contains the structures and definitions that define
  7. the ULTRASTOR 14F ISA SCSI host bus adapter.
  8. Author:
  9. Stephen Fong (SF)
  10. Revision History:
  11. --*/
  12. #include "scsi.h"
  13. //
  14. // SCATTER/GATHER definitions
  15. //
  16. #define MAXIMUM_SG_DESCRIPTORS 16
  17. #define MAXIMUM_TRANSFER_LENGTH 0xFFFFFFFF
  18. typedef struct _SGD {
  19. ULONG Address;
  20. ULONG Length;
  21. } SGD, *PSGD;
  22. typedef struct _SDL {
  23. SGD Descriptor[MAXIMUM_SG_DESCRIPTORS];
  24. } SDL, *PSDL;
  25. //
  26. // MailBox SCSI Command Packet
  27. //
  28. #pragma pack(1)
  29. typedef struct _MSCP {
  30. UCHAR OperationCode:3; // byte 00
  31. UCHAR TransferDirection:2;
  32. UCHAR DisableDisconnect:1;
  33. UCHAR UseCache:1;
  34. UCHAR ScatterGather:1;
  35. UCHAR TargetId:3; // byte 01
  36. UCHAR Channel:2;
  37. UCHAR Lun:3;
  38. ULONG DataPointer; // byte 02
  39. ULONG DataLength; // byte 06
  40. ULONG CommandLink; // byte 0a
  41. UCHAR CommandLinkId; // byte 0e
  42. UCHAR SgDescriptorCount; // byte 0f
  43. UCHAR RequestSenseLength; // byte 10
  44. UCHAR CdbLength; // byte 11
  45. UCHAR Cdb[12]; // byte 12
  46. UCHAR AdapterStatus; // byte 1e
  47. UCHAR TargetStatus; // byte 1f
  48. ULONG RequestSensePointer; // byte 20
  49. PSCSI_REQUEST_BLOCK SrbAddress; // byte 24
  50. PSCSI_REQUEST_BLOCK AbortSrb; // byte 28
  51. SDL Sdl; // byte 2c
  52. } MSCP, *PMSCP;
  53. #pragma pack()
  54. //
  55. // Operation codes
  56. //
  57. #define MSCP_OPERATION_HA_COMMAND 1
  58. #define MSCP_OPERATION_SCSI_COMMAND 2
  59. #define MSCP_OPERATION_DEVICE_RESET 4
  60. //
  61. // Transfer direction
  62. //
  63. #define MSCP_TRANSFER_SCSI 0
  64. #define MSCP_TRANSFER_IN 1
  65. #define MSCP_TRANSFER_OUT 2
  66. #define MSCP_NO_TRANSFER 3
  67. //
  68. // Host Adapter Error Codes
  69. //
  70. #define MSCP_NO_ERROR 0x00
  71. #define MSCP_INVALID_COMMAND 0x01
  72. #define MSCP_INVALID_PARAMETER 0x02
  73. #define MSCP_INVALID_DATA_LIST 0x03
  74. #define MSCP_CPU_DIAG_ERROR 0x30
  75. #define MSCP_BUFFER_RAM_DIAG_ERROR 0x31
  76. #define MSCP_STATIC_RAM_DIAG_FAIL 0x32
  77. #define MSCP_BMIC_CHIP_DIAG_ERROR 0x33
  78. #define MSCP_CACHE_TAG_RAM_FAIL 0x34
  79. #define MSCP_ROM_CHECKSUM_CHECK 0x35
  80. #define MSCP_INVALID_CONFIG_DATA 0x36
  81. #define MSCP_BUFFER_UNDERRUN 0x40
  82. #define MSCP_BUFFER_OVERRUN 0x41
  83. #define MSCP_BUFFER_PARITY_ERROR 0x42
  84. #define MSCP_ISA_BUS_PARITY_ERROR 0x43
  85. #define MSCP_ISA_INTERFACE_ERROR 0x44
  86. #define MSCP_SCSI_BUS_ABORT_ERROR 0x84
  87. #define MSCP_SELECTION_TIMEOUT 0x91
  88. #define MSCP_BUS_UNDER_OVERRUN 0x92
  89. #define MSCP_UNEXPECTED_BUS_FREE 0x93
  90. #define MSCP_INVALID_PHASE_CHANGE 0x94
  91. #define MSCP_ILLEGAL_SCSI_COMMAND 0x96
  92. #define MSCP_AUTO_SENSE_ERROR 0x9B
  93. #define MSCP_UNEXPECTED_COMPLETE 0x9F
  94. #define MSCP_BUS_RESET_ERROR 0xA3
  95. #define MSCP_ABORT_NOT_FOUND 0xAA
  96. #define MSCP_INVALID_SG_LIST 0xFF
  97. //
  98. // ISA Registers definition
  99. //
  100. #pragma pack(1)
  101. typedef struct _U14_BASEIO_ADDRESS {// baseioport offset
  102. UCHAR LocalDoorBellMask; // + 0
  103. UCHAR LocalDoorBellInterrupt; // + 1
  104. UCHAR SystemDoorBellMask; // + 2
  105. UCHAR SystemDoorBellInterrupt; // + 3
  106. UCHAR ProductId1; // + 4
  107. UCHAR ProductId2; // + 5
  108. UCHAR Config1; // + 6
  109. UCHAR Config2; // + 7
  110. ULONG OutGoingMailPointer; // + 8
  111. ULONG InComingMailPointer; // + C
  112. } U14_BASEIO_ADDRESS, *PU14_BASEIO_ADDRESS;
  113. #pragma pack()
  114. //
  115. // UltraStor 14F board id
  116. //
  117. #define ULTRASTOR_14F_ID1 0x56
  118. #define ULTRASTOR_14F_ID2 0x40 // to work with both 14F, 34L and other models
  119. // driver should mask ID2 byte bit0-bit3 to 0
  120. //
  121. // InComing Statuses
  122. //
  123. #define ICM_STATUS_COMPLETE_SUCCESS 0x01
  124. #define ICM_STATUS_COMPLETE_ERROR 0x02
  125. #define ICM_STATUS_ABORT_SUCCESS 0x03
  126. #define ICM_STATUS_ABORT_FAILED 0x04
  127. //
  128. // DMA Channels
  129. //
  130. #define US_DMA_CHANNEL_5 0x00
  131. #define US_DMA_CHANNEL_6 0x40
  132. #define US_DMA_CHANNEL_7 0x80
  133. #define US_DMA_CHANNEL_5_RESERVED 0xC0
  134. //
  135. // Interrupt levels
  136. //
  137. #define US_INTERRUPT_LEVEL_15 0x00
  138. #define US_INTERRUPT_LEVEL_14 0x10
  139. #define US_INTERRUPT_LEVEL_11 0x20
  140. #define US_INTERRUPT_LEVEL_10 0x30
  141. //
  142. // Alternate address selection
  143. //
  144. #define US_ISA_SECONDARY_ADDRESS 0x40
  145. //
  146. // ISA TSR Port enabled
  147. //
  148. #define US_ISA_PRIMARY_ADDRESS 0x00
  149. #define US_ISA_DISABLE 0x80
  150. //
  151. // Local doorbell mask (baseaddr+0)
  152. //
  153. #define US_ENABLE_OGMINT 0x01
  154. #define US_ENABLE_SCSI_BUS_RESET 0x20
  155. #define US_ENABLE_HA_SOFT_RESET 0x40
  156. //
  157. // Local doorbell interrupt/status (baseaddr+1)
  158. //
  159. #define US_OGMINT 0x01
  160. #define US_SCSI_BUS_RESET 0x20
  161. #define US_HA_SOFT_RESET 0x40
  162. //
  163. // System doorbell mask (baseaddr+2)
  164. //
  165. #define US_ENABLE_ICMINT 0x01
  166. #define US_ENABLE_SYSTEM_DOORBELL 0x80
  167. //
  168. // System doorbell interrupt (baseaddr+3)
  169. //
  170. #define US_ICMINT 0x01
  171. #define US_SINT_PENDING 0x80
  172. #define US_RESET_ICMINT 0x01