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.

433 lines
13 KiB

4 years ago
  1. // #pragma comment(exestr, "@(#) r94adma.h 1.1 95/09/28 15:48:23 nec")
  2. /*++ BUILD Version: 0001 // Increment this if a change has global effects
  3. Copyright (c) 1994 NEC Corporation
  4. Module Name:
  5. r94adma.h
  6. Abstract:
  7. This module is the header file that describes the DMA control register
  8. structure for the R94A system.
  9. Author:
  10. David N. Cutler (davec) 13-Nov-1990
  11. Revision History:
  12. M001 1994.8.24 A. Kuriyama
  13. - Modify for R94A MIPS R4400 (original duodma.h)
  14. H000 Sat Sep 24 21:36:20 JST 1994 kbnes!kishimoto
  15. - Add PCIInterruptStatus register structure definition
  16. M002 Mon Oct 03 19:52:16 JST 1994 kbnes!kuriyama(A)
  17. - Add PCI(HURRICANE) register
  18. - Change InvalidAddress register to DMA_LARGE_REGISTER
  19. - Change RTC_REGISTER structure define.
  20. - add Optional... registers
  21. H001 Fri Dec 9 18:29:10 1994 kbnes!kishimoto
  22. - Modify LEDControl definition (SHORT -> CHAR)
  23. H002 Tue Jan 24 18:24:48 1995 kbnes!kishimoto
  24. - Add PCI interrupt enable bits definitions.
  25. H003 Tue Apr 25 16:38:06 1995 kbnes!kishimoto
  26. - Add MRC registers
  27. H004 Sat Aug 12 16:18:53 1995 kbnes!kishimoto
  28. - rearrange comments.
  29. --*/
  30. #ifndef _R94ADMA_
  31. #define _R94ADMA_
  32. //
  33. // M001
  34. // Define DMA register structures.
  35. //
  36. typedef struct _DMA_REGISTER {
  37. ULONG Long;
  38. ULONG Fill;
  39. } DMA_REGISTER, *PDMA_REGISTER;
  40. typedef struct _DMA_CHAR_REGISTER {
  41. UCHAR Char;
  42. UCHAR Fill;
  43. USHORT Fill2;
  44. } DMA_CHAR_REGISTER, *PDMA_CHAR_REGISTER;
  45. typedef struct _DMA_SHORT_REGISTER {
  46. USHORT Short;
  47. USHORT Fill;
  48. } DMA_SHORT_REGISTER, *PDMA_SHORT_REGISTER;
  49. typedef struct _DMA_LARGE_REGISTER {
  50. union {
  51. LARGE_INTEGER LargeInteger;
  52. double Double;
  53. } u;
  54. } DMA_LARGE_REGISTER, *PDMA_LARGE_REGISTER;
  55. //
  56. // Define DMA channel register structure.
  57. //
  58. typedef struct _DMA_CHANNEL {
  59. DMA_REGISTER Mode;
  60. DMA_REGISTER Enable;
  61. DMA_REGISTER ByteCount;
  62. DMA_REGISTER Address;
  63. } DMA_CHANNEL, *PDMA_CHANNEL;
  64. //
  65. // M002
  66. // Define PCI Address/Mask register structure
  67. //
  68. typedef struct _PCI_ADDRESS_MASK {
  69. ULONG Address;
  70. ULONG Mask;
  71. } PCI_ADDRESS_MASK, *PPCI_ADDRESS_MASK;
  72. //
  73. // Define DMA control register structure.
  74. //
  75. typedef volatile struct _DMA_REGISTERS {
  76. DMA_REGISTER Configuration; // offset 000
  77. DMA_REGISTER RevisionLevel; // offset 008
  78. DMA_REGISTER RemoteFailedAddress; // offset 010
  79. DMA_REGISTER MemoryFailedAddress; // offset 018
  80. DMA_LARGE_REGISTER InvalidAddress; // offset 020 // M002
  81. DMA_REGISTER TranslationBase; // offset 028
  82. DMA_REGISTER TranslationLimit; // offset 030
  83. DMA_REGISTER TranslationInvalidate; // offset 038
  84. DMA_REGISTER ChannelInterruptAcknowledge; // offset 040
  85. DMA_REGISTER LocalInterruptAcknowledge; // offset 048
  86. DMA_REGISTER EisaInterruptAcknowledge; // offset 050
  87. DMA_REGISTER TimerInterruptAcknowledge; // offset 058
  88. DMA_REGISTER IpInterruptAcknowledge; // offset 060
  89. DMA_REGISTER Reserved1; // offset 068
  90. DMA_REGISTER WhoAmI; // offset 070
  91. DMA_REGISTER NmiSource; // offset 078
  92. DMA_REGISTER RemoteSpeed[15]; // offset 080
  93. DMA_REGISTER InterruptEnable; // offset 0f8
  94. DMA_CHANNEL Channel[4]; // offset 100
  95. DMA_REGISTER ArbitrationControl; // offset 180
  96. DMA_REGISTER Errortype; // offset 188
  97. DMA_REGISTER RefreshRate; // offset 190
  98. DMA_REGISTER RefreshCounter; // offset 198
  99. DMA_REGISTER SystemSecurity; // offset 1a0
  100. DMA_REGISTER InterruptInterval; // offset 1a8
  101. DMA_REGISTER IntervalTimer; // offset 1b0
  102. DMA_REGISTER IpInterruptRequest; // offset 1b8
  103. DMA_REGISTER InterruptDiagnostic; // offset 1c0
  104. DMA_LARGE_REGISTER EccDiagnostic; // offset 1c8
  105. DMA_REGISTER MemoryConfig[4]; // offset 1d0
  106. DMA_REGISTER Reserved2;
  107. DMA_REGISTER Reserved3;
  108. DMA_LARGE_REGISTER IoCacheBuffer[64]; // offset 200
  109. DMA_REGISTER IoCachePhysicalTag[8]; // offset 400
  110. DMA_REGISTER IoCacheLogicalTag[8]; // offset 440
  111. DMA_REGISTER IoCacheLowByteMask[8]; // offset 480
  112. DMA_REGISTER IoCacheHighByteMask[8]; // offset ??? wrong?
  113. //
  114. // M001,M002,H001
  115. // new registers of STORM-chipset
  116. //
  117. DMA_REGISTER ProcessorBootModeControl; // offset 500
  118. DMA_REGISTER ClockCounter; // offset 508
  119. DMA_REGISTER MemoryTimingControl; // offset 510
  120. DMA_REGISTER PCIConfigurationAddress; // offset 518
  121. DMA_REGISTER PCIConfigurationData; // offset 520
  122. DMA_REGISTER PCISpecialCycle; // offset 528
  123. DMA_REGISTER PCIInterruptEnable; // offset 530
  124. DMA_REGISTER PCIInterruptStatus; // offset 538
  125. DMA_REGISTER CopyTagConfiguration; // offset 540
  126. DMA_REGISTER CopyTagAddress; // offset 548
  127. DMA_REGISTER CopyTagData; // offset 550
  128. DMA_REGISTER ASIC2Revision; // offset 558
  129. DMA_REGISTER ASIC3Revision; // offset 560
  130. DMA_REGISTER Reserved4; // offset 568
  131. ULONG OptionalRemoteSpeed1; // offset 570
  132. ULONG OptionalRemoteSpeed2; // offset 574
  133. ULONG OptionalRemoteSpeed3; // offset 578
  134. ULONG OptionalRemoteSpeed4; // offset 57c
  135. DMA_REGISTER LocalInterruptAcknowledge2; // offset 580
  136. DMA_REGISTER OptionalIoConfiguration1; // offset 588
  137. DMA_REGISTER OptionalIoConfiguration2; // offset 590
  138. DMA_REGISTER OptionalIoConfiguration3; // offset 598
  139. DMA_REGISTER OptionalIoConfiguration4; // offset 5a0
  140. DMA_SHORT_REGISTER BuzzerCount; // offset 5a8
  141. DMA_CHAR_REGISTER BuzzerControl; // offset 5ac
  142. DMA_SHORT_REGISTER LEDCount; // offset 5b0
  143. DMA_CHAR_REGISTER LEDControl; // offset 5b4
  144. DMA_SHORT_REGISTER NECIoPort; // offset 5b8
  145. ULONG TyphoonErrorStatus; // offset 5bc
  146. DMA_REGISTER AddressConversionRegion; // offset 5c0
  147. DMA_REGISTER AddressConversionMask; // offset 5c8
  148. DMA_REGISTER Reserved12; // offset 5d0
  149. DMA_REGISTER Reserved13; // offset 5d8
  150. DMA_REGISTER Reserved14; // offset 5e0
  151. DMA_REGISTER Reserved15; // offset 5e8
  152. DMA_REGISTER Reserved16; // offset 5f0
  153. DMA_REGISTER Reserved17; // offset 5f8
  154. USHORT PCIVenderID; // offset 600
  155. USHORT PCIDeviceID; // offset 602
  156. USHORT PCICommand; // offset 604
  157. USHORT PCIStatus; // offset 606
  158. UCHAR PCIRevisionID; // offset 608
  159. UCHAR PCIProgIf; // offset 609
  160. UCHAR PCISubClass; // offset 60a
  161. UCHAR PCIBaseClass; // offset 60b
  162. UCHAR PCICacheLineSize; // offset 60c
  163. UCHAR PCILatencyTimer; // offset 60d
  164. UCHAR PCIHeaderType; // offset 60e
  165. UCHAR PCIBIST; // offset 60f
  166. DMA_REGISTER Reserved18; // offset 610
  167. DMA_REGISTER Reserved19; // offset 618
  168. DMA_REGISTER Reserved20; // offset 620
  169. DMA_REGISTER Reserved21; // offset 628
  170. ULONG PCIROMBaseAddress; // offset 630
  171. ULONG Reserved22[2]; // offset 634
  172. UCHAR PCIInterruptLine; // offset 63c
  173. UCHAR PCIInterruptPin; // offset 63d
  174. UCHAR PCIMinimumGrant; // offset 63e
  175. UCHAR PCIMaximumLatency; // offset 63f
  176. PCI_ADDRESS_MASK PCIFastBackToBack[2]; // offset 640
  177. PCI_ADDRESS_MASK PCIBurst[2]; // offset 650
  178. PCI_ADDRESS_MASK PCIMemory; // offset 660
  179. ULONG PCIMasterRetryTimer; // offset 668
  180. } DMA_REGISTERS, *PDMA_REGISTERS;
  181. //
  182. // Configuration Register values.
  183. //
  184. #define LOAD_CLEAN_EXCLUSIVE 0x20
  185. #define DISABLE_EISA_MEMORY 0x10
  186. #define ENABLE_PROCESSOR_B 0x08
  187. #define MAP_PROM 0x04
  188. //
  189. // Interrupt Enable bits.
  190. //
  191. #define ENABLE_CHANNEL_INTERRUPTS (1 << 0)
  192. #define ENABLE_DEVICE_INTERRUPTS (1 << 1)
  193. #define ENABLE_EISA_INTERRUPTS (1 << 2)
  194. #define ENABLE_TIMER_INTERRUPTS (1 << 3)
  195. #define ENABLE_IP_INTERRUPTS (1 << 4)
  196. //
  197. // Eisa Interupt Acknowledge Register values.
  198. //
  199. #define EISA_NMI_VECTOR 0x8000
  200. //
  201. // DMA_NMI_SRC register bit definitions.
  202. //
  203. #define NMI_SRC_MEMORY_ERROR 1
  204. #define NMI_SRC_R4000_ADDRESS_ERROR 2
  205. #define NMI_SRC_IO_CACHE_ERROR 4
  206. #define NMI_SRC_ADR_NMI 8
  207. //
  208. // Define DMA channel mode register structure.
  209. //
  210. typedef struct _DMA_CHANNEL_MODE {
  211. ULONG AccessTime : 3;
  212. ULONG TransferWidth : 2;
  213. ULONG InterruptEnable : 1;
  214. ULONG BurstMode : 1;
  215. ULONG Reserved1 : 25;
  216. } DMA_CHANNEL_MODE, *PDMA_CHANNEL_MODE;
  217. //
  218. // Define access time values.
  219. //
  220. #define ACCESS_40NS 0x0 // 40ns access time
  221. #define ACCESS_80NS 0x1 // 80ns access time
  222. #define ACCESS_120NS 0x2 // 120ns access time
  223. #define ACCESS_160NS 0x3 // 160ns access time
  224. #define ACCESS_200NS 0x4 // 200ns access time
  225. #define ACCESS_240NS 0x5 // 240ns access time
  226. #define ACCESS_280NS 0x6 // 280ns access time
  227. #define ACCESS_320NS 0x7 // 320ns access time
  228. //
  229. // Define transfer width values.
  230. //
  231. #define WIDTH_8BITS 0x1 // 8-bit transfer width
  232. #define WIDTH_16BITS 0x2 // 16-bit transfer width
  233. #define WIDTH_32BITS 0x3 // 32-bit transfer width
  234. //
  235. // M001
  236. // Define DMA channel enable register structure.
  237. //
  238. typedef struct _DMA_CHANNEL_ENABLE {
  239. ULONG ChannelEnable : 1;
  240. ULONG TransferDirection : 1;
  241. ULONG Reserved1 : 6;
  242. ULONG TerminalCount : 1;
  243. ULONG MemoryError : 1;
  244. // ULONG TranslationError : 1;
  245. // ULONG Reserved2 : 21;
  246. ULONG ParityError : 1;
  247. ULONG MasterAbort : 1;
  248. ULONG Reserved2 : 20;
  249. } DMA_CHANNEL_ENABLE, *PDMA_CHANNEL_ENABLE;
  250. //
  251. // M001,M002
  252. // define RTC structure.
  253. //
  254. typedef struct _RTC_REGISTERS {
  255. UCHAR Data;
  256. UCHAR Index;
  257. } RTC_REGISTERS, *PRTC_REGISTERS;
  258. //
  259. // Define transfer direction values.
  260. //
  261. #define DMA_READ_OP 0x0 // read from device
  262. #define DMA_WRITE_OP 0x1 // write to device
  263. //
  264. // Define translation table entry structure.
  265. //
  266. typedef volatile struct _TRANSLATION_ENTRY {
  267. ULONG PageFrame;
  268. ULONG Fill;
  269. } TRANSLATION_ENTRY, *PTRANSLATION_ENTRY;
  270. //
  271. // Error Type Register values
  272. //
  273. #define SONIC_ADDRESS_ERROR 4
  274. #define SONIC_MEMORY_ERROR 0x40
  275. #define EISA_ADDRESS_ERROR 1
  276. #define EISA_MEMORY_ERROR 2
  277. //
  278. // Address Mask definitions.
  279. //
  280. #define LFAR_ADDRESS_MASK 0xfffff000
  281. #define RFAR_ADDRESS_MASK 0x00ffffc0
  282. #define MFAR_ADDRESS_MASK 0x1ffffff0
  283. //
  284. // ECC Register Definitions.
  285. //
  286. #define ECC_SINGLE_BIT_DP0 0x02000000
  287. #define ECC_SINGLE_BIT_DP1 0x20000000
  288. #define ECC_SINGLE_BIT ( ECC_SINGLE_BIT_DP0 | ECC_SINGLE_BIT_DP1 )
  289. #define ECC_DOUBLE_BIT_DP0 0x04000000
  290. #define ECC_DOUBLE_BIT_DP1 0x40000000
  291. #define ECC_DOUBLE_BIT ( ECC_DOUBLE_BIT_DP0 | ECC_DOUBLE_BIT_DP1 )
  292. #define ECC_MULTIPLE_BIT_DP0 0x08000000
  293. #define ECC_MULTIPLE_BIT_DP1 0x80000000
  294. #define ECC_FORCE_DP0 0x010000
  295. #define ECC_FORCE_DP1 0x100000
  296. #define ECC_DISABLE_SINGLE_DP0 0x020000
  297. #define ECC_DISABLE_SINGLE_DP1 0x200000
  298. #define ECC_ENABLE_DP0 0x040000
  299. #define ECC_ENABLE_DP1 0x400000
  300. //
  301. // LED/DIAG Register Definitions.
  302. //
  303. #define DIAG_NMI_SWITCH 2
  304. //
  305. // Common error bit definitions
  306. //
  307. #define SINGLE_ERROR 1
  308. #define MULTIPLE_ERROR 2
  309. #define RFAR_CACHE_FLUSH 4
  310. //
  311. // M001
  312. // Define NMI Status/Control register structure.
  313. //
  314. typedef struct _BUZZER_CONTROL {
  315. UCHAR SpeakerGate : 1;
  316. UCHAR SpeakerData : 1;
  317. UCHAR Reserved1 : 3;
  318. UCHAR SpeakerTimer : 1;
  319. UCHAR Reserved2 : 2;
  320. }BUZZER_CONTROL, *PBUZZER_CONTROL;
  321. //
  322. // H000
  323. // Define PCI Interrupt Status register structure.
  324. //
  325. typedef struct _STORM_PCI_INTRRUPT_STATUS{
  326. ULONG IntD: 1;
  327. ULONG IntC: 1;
  328. ULONG IntB: 1;
  329. ULONG IntA: 1;
  330. ULONG Perr: 1;
  331. ULONG Serr: 1;
  332. ULONG RetryOverflow: 1;
  333. ULONG MasterAbort: 1;
  334. ULONG TargetAbort: 1;
  335. ULONG Reserved: 23;
  336. } STORM_PCI_INTRRUPT_STATUS, *PSTORM_PCI_INTRRUPT_STATUS;
  337. //
  338. // H002
  339. // PCI Interrupt Enable bits.
  340. //
  341. #define ENABLE_TARGET_ABORT_INTERRUPTS (1 << 8)
  342. #define ENABLE_MASTER_ABORT_INTERRUPTS (1 << 7)
  343. #define ENABLE_RETRY_OVERFLOW_EISA_INTERRUPTS (1 << 6)
  344. #define ENABLE_SERR_INTERRUPTS (1 << 5)
  345. #define ENABLE_PERR_INTERRUPTS (1 << 4)
  346. //
  347. // H003
  348. // Define MRC control register structure.
  349. //
  350. typedef volatile struct _MRC_REGISTERS {
  351. UCHAR Reserved1[256]; // offset 000
  352. UCHAR Interrupt; // offset 100
  353. UCHAR Reserved2[7]; // offset 107
  354. UCHAR Mode; // offset 108
  355. UCHAR Reserved3[39]; // offset 109
  356. UCHAR SoftwarePowerOff; // offset 130
  357. UCHAR Reserved4[15]; // offset 131
  358. UCHAR LEDBitControl; // offset 140
  359. UCHAR Reserved5[3]; // offset 141
  360. UCHAR SegmentLEDControl[4]; // offset 144
  361. UCHAR Reserved6[155]; // offset 145
  362. UCHAR TempEnable; // offset 1e0
  363. UCHAR Reserved7[31]; // offset 145
  364. UCHAR TempSensor; // offset 200
  365. UCHAR Reserved8[3583]; // offset 201
  366. } MRC_REGISTERS, *PMRC_REGISTERS;
  367. #endif // _R94ADMA_