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.

210 lines
6.2 KiB

4 years ago
  1. #pragma pack(1)
  2. #define DELLDSA_MAJOR_VERSION 1
  3. #define DELLDSA_MINOR_VERSION 0
  4. #define MAXIMUM_SG_DESCRIPTORS 16
  5. #define MAXIMUM_DDA_SG_DESCRIPTORS 8
  6. #define MAXIMUM_XFER_SIZE 0x8000
  7. #define DDA_ID 0x0040ac10 // Least significant nibble will be masked.
  8. //
  9. // Logical Identify Command
  10. //
  11. typedef struct _DDA_INDENTIFY {
  12. ULONG TotalSectors;
  13. USHORT LogicalNumberOfHeads;
  14. USHORT LogicalSectorsPerTrack;
  15. USHORT TotalLogicalCylinders;
  16. USHORT PhysicalNumberOfHeads;
  17. USHORT PhysicalSectorsPerTrack;
  18. USHORT TotalPhysicalCylinders;
  19. USHORT ReservedCylinders;
  20. UCHAR MaximumTransfer;
  21. UCHAR Multiple;
  22. USHORT DataDriveBitMap;
  23. USHORT ParityDriveBitMap;
  24. UCHAR ConfiguredType;
  25. UCHAR Type;
  26. UCHAR Status;
  27. UCHAR Reserved;
  28. ULONG PatchAddress;
  29. ULONG ErrorLogAddress;
  30. ULONG NumberErrorEventsLogged;
  31. ULONG NumberRemappedStripes;
  32. ULONG ErrorsPerDrive[10];
  33. ULONG FirmWareRevision;
  34. UCHAR EmulationMode;
  35. UCHAR MaximumReadAhead;
  36. UCHAR PostWritesEnabled;
  37. UCHAR CacheEnabled;
  38. ULONG BmicBurstSize;
  39. UCHAR SourceRevision[32];
  40. } DDA_IDENTIFY, *PDDA_IDENTIFY;
  41. //
  42. // DDA BMIC Registers
  43. //
  44. typedef struct _DDA_REGISTERS {
  45. ULONG BoardId; // ?C80
  46. UCHAR Reserved1[5]; // ?C84
  47. UCHAR InterruptControl; // ?C89
  48. UCHAR SubmissionSemaphore; // ?C8A
  49. UCHAR CompletionSemaphore; // ?C8B
  50. UCHAR Reserved2; // ?C8C
  51. UCHAR SubmissionDoorBell; // ?C8D
  52. UCHAR CompletionInterruptMask; // ?C8E
  53. UCHAR CompletionDoorBell; // ?C8F
  54. UCHAR Command; // ?C90
  55. UCHAR DriveNumber; // ?C91
  56. UCHAR TransferCount; // ?C92
  57. UCHAR RequestIdOut; // ?C93
  58. ULONG StartingSector; // ?C94
  59. ULONG DataAddress; // ?C98
  60. UCHAR Status; // ?C9C
  61. UCHAR SectorsRemaining; // ?C9D
  62. UCHAR RequestIdIn; // ?C9E
  63. } DDA_REGISTERS, *PDDA_REGISTERS;
  64. //
  65. // Logical command definitions
  66. //
  67. #define DDA_COMMAND_RECALIBRATE 0x00
  68. #define DDA_COMMAND_READ 0x01
  69. #define DDA_COMMAND_WRITE 0x02
  70. #define DDA_COMMAND_VERIFY 0x03
  71. #define DDA_COMMAND_SEEK 0x04
  72. #define DDA_COMMAND_GUARDED 0x05
  73. #define DDA_COMMAND_IDENTIFY 0x0A
  74. #define DDA_COMMAND_READLOG 0x0D
  75. #define DDA_COMMAND_SG_READ 0x0E
  76. #define DDA_COMMAND_SG_WRITE 0x0F
  77. #define DDA_COMMAND_INITLOG 0x10
  78. #define DDA_COMMAND_REMAP_BLOCK 0x12
  79. #define DDA_COMMAND_SG_READB 0x18
  80. #define DDA_COMMAND_SG_WRITEB 0x19
  81. #define DDA_COMMAND_READPUNLOG 0x1E
  82. #define DDA_COMMAND_INITPUNLOG 0x1F
  83. #define DDA_COMMAND_READCTLRLOG 0x20
  84. #define DDA_COMMAND_INITCTLRLOG 0x21
  85. #define DDA_COMMAND_CONVERTPDEV 0x22
  86. #define DDA_COMMAND_QUIESCEPUN 0x23
  87. #define DDA_COMMAND_SCANDEVICES 0x24
  88. #define DDA_COMMAND_RESERVED1 0x25
  89. //
  90. // Extended command definitiions
  91. //
  92. #define DDA_GET_FIRMWARE_VERSION 0x02
  93. #define DDA_GET_MAXIMUM_COMMANDS 0x03
  94. #define DDA_GET_NUMBER_LOGICAL_DRIVES 0x06
  95. #define DDA_GET_LOGICAL_GEOMETRY 0x07
  96. #define DDA_GET_HARDWARE_CONFIGURATION 0x0F
  97. //
  98. // Status register definitions
  99. //
  100. #define DDA_STATUS_NO_ERROR 0x00
  101. #define DDA_STATUS_TIMEOUT 0x01
  102. #define DDA_STATUS_TRACK0_NOT_FOUND 0x02
  103. #define DDA_STATUS_ABORTED 0x04
  104. #define DDA_STATUS_CORRECTABLE_ERROR 0x08
  105. #define DDA_STATUS_SECTOR_ID_NOT_FOUND 0x10
  106. #define DDA_STATUS_WRITE_ERROR 0x20
  107. #define DDA_STATUS_UNCORRECTABLE_ERROR 0x40
  108. #define DDA_STATUS_BAD_BLOCK_FOUND 0x80
  109. #define DDA_PUP_DEAD 0 // controller died
  110. #define DDA_PUP_OK 1 // normal
  111. #define DDA_PUP_NOTCONFIG 2 // no configuration (virgin)
  112. #define DDA_PUP_BADCONFIG 3 // bad drive configuration
  113. #define DDA_PUP_RECOVER 4 // new drive - recovery possible
  114. #define DDA_PUP_DF_CORR 5 // drive failed - correctable
  115. #define DDA_PUP_DF_UNCORR 6 // drive failed - uncorrectable
  116. #define DDA_PUP_NODRIVES 7 // no drives attached
  117. #define DDA_PUP_DRIVESADDED 8 // more drives than expected
  118. #define DDA_PUP_MAINTAIN 9 // maintain mode
  119. #define DDA_PUP_MANFMODE 10 // manufacturing mode
  120. #define DDA_PUP_NEW 11 // new - needs remap generated
  121. #define DDA_PUP_NONE 14 // no drive configuration
  122. //
  123. // DDA Scatter/Gather Descriptor definitions
  124. //
  125. typedef struct _SG_DESCRIPTOR {
  126. ULONG Address;
  127. ULONG Count;
  128. } SG_DESCRIPTOR, *PSG_DESCRIPTOR;
  129. typedef struct _SG_LIST {
  130. SG_DESCRIPTOR Descriptor[MAXIMUM_SG_DESCRIPTORS];
  131. } SG_LIST, *PSG_LIST;
  132. #define DDA_REQUEST_IRP 0
  133. #define DDA_REQUEST_IOCTL 1
  134. typedef struct _DDA_REQUEST_BLOCK {
  135. SG_LIST SgList;
  136. struct _DDA_REQUEST_BLOCK *Next;
  137. ULONG StartingSector;
  138. ULONG PhysicalAddress;
  139. UCHAR Command;
  140. UCHAR DriveNumber;
  141. UCHAR Size;
  142. UCHAR RequestId;
  143. } DDA_REQUEST_BLOCK, *PDDA_REQUEST_BLOCK;
  144. //
  145. // Emulation mode definitions
  146. //
  147. #define DDA_EMULATION_NONE 0x00
  148. #define DDA_EMULATION_ADAPTEC 0x01
  149. //
  150. // Get Geometry registers
  151. //
  152. typedef struct _DDA_GET_GEOMETRY {
  153. ULONG Reserved[4];
  154. ULONG TotalCapacity;
  155. UCHAR NumberOfHeads;
  156. UCHAR SectorsPerTrack;
  157. USHORT NumberOfCylinders;
  158. USHORT PhysicalSpt;
  159. UCHAR PhysicalHeads;
  160. UCHAR CurrentStatus;
  161. } DDA_GET_GEOMETRY, *PDDA_GET_GEOMETRY;
  162. #pragma pack()
  163. //
  164. // Doorbell definitions
  165. //
  166. #define DDA_DOORBELL_SOFT_RESET 0x08
  167. #define DDA_DOORBELL_LOGICAL_COMMAND 0x10
  168. #define DDA_DOORBELL_PHYSICAL_COMMAND 0x20
  169. #define DDA_DOORBELL_EXTENDED_COMMAND 0x40
  170. #define DDA_DOORBELL_HARD_RESET 0x80
  171. #define DDA_INTERRUPTS (DDA_DOORBELL_LOGICAL_COMMAND|DDA_DOORBELL_EXTENDED_COMMAND)
  172. //
  173. // Interface mode values
  174. //
  175. #define IMODE_RUN 0
  176. #define IMODE_RESET 1
  177. #define IMODE_SUBMIT 2
  178. #define IMODE_EXTENDED 3
  179. #define IMODE_EXTDONE 4