diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/nthals/halsable/alpha/sable.h | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/ntos/nthals/halsable/alpha/sable.h')
-rw-r--r-- | private/ntos/nthals/halsable/alpha/sable.h | 519 |
1 files changed, 519 insertions, 0 deletions
diff --git a/private/ntos/nthals/halsable/alpha/sable.h b/private/ntos/nthals/halsable/alpha/sable.h new file mode 100644 index 000000000..52989dc94 --- /dev/null +++ b/private/ntos/nthals/halsable/alpha/sable.h @@ -0,0 +1,519 @@ +/*++ + +Copyright (c) 1993 Digital Equipment Corporation + +Module Name: + + sable.h + +Abstract: + + This file defines the structures and definitions common to all + sable-based platforms. + +Author: + + Joe Notarangelo 26-Oct-1993 + Steve Jenness 26-Oct-1993 + +Environment: + + Kernel mode + +Revision History: + + +--*/ + +#ifndef _SABLEH_ +#define _SABLEH_ + + +#include "sableref.h" // Sable reference I/O structure +#include "lynxref.h" // Lynx interrupt structure +#include "xioref.h" // XIO interrupt structure +#if !defined(_LANGUAGE_ASSEMBLY) +#include "errframe.h" +#endif + +// +// Constants used by dense space I/O routines +// + +#define SABLE_PCI0_DENSE_BASE_PHYSICAL_SUPERPAGE 0xfffffc03c0000000 +#define SABLE_PCI1_DENSE_BASE_PHYSICAL_SUPERPAGE 0xfffffc0180000000 + +#define PCI_DENSE_BASE_PHYSICAL_SUPERPAGE \ + (SABLE_PCI0_DENSE_BASE_PHYSICAL_SUPERPAGE - SABLE_PCI0_DENSE_MEMORY_QVA) + +#define PCI1_DENSE_BASE_PHYSICAL_SUPERPAGE \ + (SABLE_PCI1_DENSE_BASE_PHYSICAL_SUPERPAGE - SABLE_PCI1_DENSE_MEMORY_QVA) + +#if !defined(_LANGUAGE_ASSEMBLY) + +#include "t2.h" // T2 chipset definitions +#include "icic.h" // ICIC definitions + +// +// QVA +// HAL_MAKE_QVA( +// ULONGLONG PhysicalAddress +// ) +// +// Routine Description: +// +// This macro returns the Qva for a physical address in system space. +// +// Arguments: +// +// PhysicalAddress - Supplies a 64-bit physical address. +// +// Return Value: +// +// The Qva associated with the physical address. +// + +#define HAL_MAKE_QVA(PA) \ + ( (PVOID)( QVA_ENABLE | (ULONG)(PA >> IO_BIT_SHIFT) ) ) + + + +// +// Define physical address spaces for SABLE. +// +// PCI0 - 32bit PCI bus +// PCI1 - 64bit PCI bus +// + +#define SABLE_PCI1_DENSE_MEMORY_PHYSICAL ((ULONGLONG)0x180000000) +#define SABLE_PCI1_SPARSE_IO_PHYSICAL ((ULONGLONG)0x1C0000000) +#define SABLE_PCI0_SPARSE_MEMORY_PHYSICAL ((ULONGLONG)0x200000000) +#define SABLE_PCI1_SPARSE_MEMORY_PHYSICAL ((ULONGLONG)0x300000000) + +#define SABLE_CBUS_CSRS_PHYSICAL ((ULONGLONG)0x380000000) +#define SABLE_CPU0_CSRS_PHYSICAL ((ULONGLONG)0x380000000) +#define SABLE_CPU1_CSRS_PHYSICAL ((ULONGLONG)0x381000000) +#define SABLE_CPU2_CSRS_PHYSICAL ((ULONGLONG)0x382000000) +#define SABLE_CPU3_CSRS_PHYSICAL ((ULONGLONG)0x383000000) +#define SABLE_CPU0_IPIR_PHYSICAL ((ULONGLONG)0x380000160) +#define SABLE_CPU1_IPIR_PHYSICAL ((ULONGLONG)0x381000160) +#define SABLE_CPU2_IPIR_PHYSICAL ((ULONGLONG)0x382000160) +#define SABLE_CPU3_IPIR_PHYSICAL ((ULONGLONG)0x383000160) +#define SABLE_MEM0_CSRS_PHYSICAL ((ULONGLONG)0x388000000) +#define SABLE_MEM1_CSRS_PHYSICAL ((ULONGLONG)0x389000000) +#define SABLE_MEM2_CSRS_PHYSICAL ((ULONGLONG)0x38A000000) +#define SABLE_MEM3_CSRS_PHYSICAL ((ULONGLONG)0x38B000000) +#define SABLE_T2_CSRS_PHYSICAL ((ULONGLONG)0x38E000000) +#define SABLE_T4_CSRS_PHYSICAL ((ULONGLONG)0x38F000000) +#define T2_CSRS_QVA (HAL_MAKE_QVA(SABLE_T2_CSRS_PHYSICAL)) +#define T4_CSRS_QVA (HAL_MAKE_QVA(SABLE_T4_CSRS_PHYSICAL)) + +#define SABLE_PCI0_CONFIGURATION_PHYSICAL ((ULONGLONG)0x390000000) +#define SABLE_PCI1_CONFIGURATION_PHYSICAL ((ULONGLONG)0x398000000) +#define SABLE_PCI0_SPARSE_IO_PHYSICAL ((ULONGLONG)0x3A0000000) +#define SABLE_PCI0_DENSE_MEMORY_PHYSICAL ((ULONGLONG)0x3C0000000) + +// +// Define the limits of User mode Sparse and Dense space: +// + +#define SABLE_USER_PCI1_DENSE_MEMORY_PHYSICAL (ULONGLONG)0x180000000 +#define SABLE_USER_PCI1_SPARSE_IO_PHYSICAL (ULONGLONG)0x1C0000000 +#define SABLE_USER_PCI1_SPARSE_IO_END_PHYSICAL (ULONGLONG)0x1E0000000 +#define SABLE_USER_PCI0_SPARSE_MEMORY_PHYSICAL (ULONGLONG)0x200000000 +#define SABLE_USER_PCI0_SPARSE_MEMORY_END_PHYSICAL (ULONGLONG)0x300000000 +#define SABLE_USER_PCI1_SPARSE_MEMORY_PHYSICAL (ULONGLONG)0x300000000 +#define SABLE_USER_PCI1_SPARSE_MEMORY_END_PHYSICAL (ULONGLONG)0x380000000 +#define SABLE_USER_PCI0_SPARSE_IO_PHYSICAL (ULONGLONG)0x3A0000000 +#define SABLE_USER_PCI0_SPARSE_IO_END_PHYSICAL (ULONGLONG)0x3C0000000 +#define SABLE_USER_PCI0_DENSE_MEMORY_PHYSICAL (ULONGLONG)0x3C0000000 + +#define SABLE_EDGE_LEVEL_CSRS_PHYSICAL ((ULONGLONG)0x3A00004C0) +#define SABLE_INTERRUPT_CSRS_PHYSICAL ((ULONGLONG)0x3A000A640) +#define XIO_INTERRUPT_CSRS_PHYSICAL ((ULONGLONG)0x1C0000530) +#define XIO_INTERRUPT_CSRS_QVA (HAL_MAKE_QVA(XIO_INTERRUPT_CSRS_PHYSICAL)) + +// +// Define Interrupt Controller CSRs. +// + +#define SABLE_EDGE_LEVEL_CSRS_QVA (HAL_MAKE_QVA(SABLE_EDGE_LEVEL_CSRS_PHYSICAL)) +#define SABLE_INTERRUPT_CSRS_QVA (HAL_MAKE_QVA(SABLE_INTERRUPT_CSRS_PHYSICAL)) + +// +// Define the XIO_VECTOR <CIRQL1> +// + +#define XIO_VECTOR UNUSED_VECTOR + + +// +// Define CPU CSRs and masks. +// + +#define SABLE_CPU0_CSRS_QVA (HAL_MAKE_QVA(SABLE_CPU0_CSRS_PHYSICAL)) +#define SABLE_CPU1_CSRS_QVA (HAL_MAKE_QVA(SABLE_CPU1_CSRS_PHYSICAL)) +#define SABLE_CPU2_CSRS_QVA (HAL_MAKE_QVA(SABLE_CPU2_CSRS_PHYSICAL)) +#define SABLE_CPU3_CSRS_QVA (HAL_MAKE_QVA(SABLE_CPU3_CSRS_PHYSICAL)) +#define SABLE_MEM0_CSRS_QVA (HAL_MAKE_QVA(SABLE_MEM0_CSRS_PHYSICAL)) +#define SABLE_MEM1_CSRS_QVA (HAL_MAKE_QVA(SABLE_MEM1_CSRS_PHYSICAL)) +#define SABLE_MEM2_CSRS_QVA (HAL_MAKE_QVA(SABLE_MEM2_CSRS_PHYSICAL)) +#define SABLE_MEM3_CSRS_QVA (HAL_MAKE_QVA(SABLE_MEM3_CSRS_PHYSICAL)) + +#define SABLE_PRIMARY_PROCESSOR ((ULONG)0x0) +#define SABLE_SECONDARY_PROCESSOR ((ULONG)0x1) +#define SABLE_MAXIMUM_PROCESSOR ((ULONG)0x3) +#define HAL_PRIMARY_PROCESSOR (SABLE_PRIMARY_PROCESSOR) +#define HAL_MAXIMUM_PROCESSOR (SABLE_MAXIMUM_PROCESSOR) + +// +// Define the default processor frequency to be used before the actual +// frequency can be determined. +// + +#define DEFAULT_PROCESSOR_FREQUENCY_MHZ (275) + +enum { + NoError, + UncorrectableError, + CorrectableError +} ErrorType; + +// +// Define the list of CSR's... +// + +typedef struct _SABLE_CPU_CSRS { + UCHAR Bcc; // B-Cache Control Register + UCHAR Bcce; // B-Cache Correctable Error Register + UCHAR Bccea; // B-Cache Correctable Error Address Register + UCHAR Bcue; // B-Cache Uncorrectable Error Register + UCHAR Bcuea; // B-Cache Uncorrectable Error Address Register + UCHAR Dter; // Duplicate Tag Error Register + UCHAR Cbctl; // System Bus Control Register + UCHAR Cb2; // System Bus Error Register + UCHAR Cbeal; // System Bus Error Address Low Register + UCHAR Cbeah; // System Bus Error Address High Register + UCHAR Pmbx; // Processor Mailbox Register + UCHAR Ipir; // Inter-Processor Interrupt Request Register + UCHAR Sic; // System Interrupt Clear Register + UCHAR Adlk; // Address Lock Register + UCHAR Madrl; // Miss Address Register + UCHAR Crrevs; // C4 Revision Register +} SABLE_CPU_CSRS, *PSABLE_CPU_CSRS; + +// +// Define the System Bus Control Register +// + +typedef struct _SABLE_CBCTL_CSR{ + ULONG DataWrongParity: 1; // 0 + ULONG CaWrongParity: 2; // 1 + ULONG EnableParityCheck: 1; // 3 + ULONG ForceShared: 1; // 4 + ULONG CommaderId: 3; // 5 + ULONG Reserved0: 3; // 8 + ULONG EnableCbusErrorInterrupt: 1; // 11 + ULONG Reserved1: 1; // 12 + ULONG SecondQuadwordSelect: 1; // 13 + ULONG SelectDrack: 1; // 14 + ULONG Reserved2: 17; // 15 + + ULONG DataWrongParityHigh: 1; // 32 + ULONG CaWrongParityHigh: 2; // 33 + ULONG EnableParityCheckHigh: 1; // 35 + ULONG ForceSharedHigh: 1; // 36 + ULONG CommanderIdHigh: 3; // 37 + ULONG Reserved3: 3; // 40 + ULONG EnableCbusErrorInterruptHigh: 1; // 43 + ULONG DisableBackToBackArbitration: 1; // 44 + ULONG SecondQuadwordSelectHigh: 1; // 45 + ULONG SelectDrackHigh: 1; // 46 + ULONG Reserved4: 17; // 47 +} SABLE_CBCTL_CSR, *PSABLE_CBCTL_CSR; + +// +// Define all the System Bus (CobraBus or CBus) Control and Error Registers +// listed above: Bcc, Bcce, Bccea, Bcue, Bcuea +// + +typedef struct _SABLE_BCACHE_BCC_CSR0 { + union { + ULONG EnableAllocateL: 1; // 0 + ULONG ForceFillSharedL: 1; // 1 + ULONG EnbTagParCheckL: 1; // 2 + ULONG FillWrongTagParL: 1; // 3 + ULONG FillWrongContolParL: 1; // 4 + ULONG FillWrongDupTagStoreParL: 1; // 5 + ULONG EnableCorrectableErrorInterruptL: 1; // 6 + ULONG EnableEDCCorrectionL: 1; // 7 + ULONG EnableEDCCheckL: 1; // 8 + ULONG EnableBCacheConditionIOUpdatesL: 1; // 9 + ULONG DisableBlockWriteAroundL: 1; // 10 + ULONG EnableBCacheInitL: 1; // 11 + ULONG ForceEDCControlL: 1; // 12 + ULONG SharedDirtyValidL: 3; // 13-15 + ULONG EDCL: 14; // 16-29 + ULONG Reserved1: 1; // 30 + ULONG CacheSizeL: 1; // 31 + + ULONG EnableAllocateH: 1; // 32 + ULONG ForceFillSharedH: 1; // 33 + ULONG EnbTagParCheckH: 1; // 34 + ULONG FillWronTagParH: 1; // 35 + ULONG FillWrongContolParH: 1; // 36 + ULONG FillWrongDupTagStoreParH: 1; // 37 + ULONG EnableCorrectableErrorInterruptH: 1; // 38 + ULONG EnableEDCCorrectionH: 1; // 39 + ULONG EnableEDCCheckH: 1; // 40 + ULONG EnableBCacheConditionIOUpdatesH: 1; // 41 + ULONG DisableBlockWriteAroundH: 1; // 42 + ULONG EnableBCacheInitH: 1; // 43 + ULONG ForceEDCControlH: 1; // 44 + ULONG SharedDirtyValidH: 3; // 45-47 + ULONG EDCH: 14; // 48-61 + ULONG Reserved2: 1; // 62 + ULONG CacheSizeH: 1; // 63 + }; + ULONGLONG all; + +} SABLE_BCACHE_BCC_CSR0, *PSABLE_BCACHE_BCC_CSR0; + +// +// Define the Backup Cache correctable error register +// + +typedef struct _SABLE_BCACHE_BCCE_CSR1 { + union { + ULONG Reserved1: 2; // 0-1 + ULONG MissedCorrectableError: 1; // 2 + ULONG CorrectableError: 1; // 3 + ULONG Reserved2: 4; // 4-7 + ULONG ControlBitParity: 1; // 8 + ULONG Shared: 1; // 9 + ULONG Dirty: 1; // 10 + ULONG Valid: 1; // 11 + ULONG Reserved3: 5; // 12-16 + ULONG EDCError1: 1; // 17 + ULONG EDCSyndrome0: 7; // 18-24 + ULONG EDCSyndrome2: 7; // 25-31 + ULONG Reserved4: 2; // 32-33 + ULONG MissedCorrectableErrorH: 1; // 34 + ULONG CorrectableErrorH: 1; // 35 + ULONG Undefined: 13; // 36-48 + ULONG EDCError2: 1; // 49 + ULONG EDCSyndrome1: 7; // 50-56 + ULONG EDCSyndrome3: 7; // 57-63 + }; + ULONGLONG all; + +} SABLE_BCACHE_BCCE_CSR1, *PSABLE_BCACHE_BCCE_CSR1; + + +// +// Define the Backup Cache correctable error address register +// + +typedef struct _SABLE_BCACHE_BCCEA_CSR2 { + union { + ULONG BcacheMapOffsetL: 17; // 0-16 + ULONG Reserved1: 1; // 17 + ULONG TagParityL: 1; // 18 + ULONG TagValueL: 12; // 19-30 + ULONG Reserved2: 1; // 31 + ULONG BcacheMapOffsetH: 17; // 32-48 + ULONG Reserved3: 1; // 49 + ULONG TagParityH: 1; // 50 + ULONG TagValueH: 12; // 51-62 + ULONG Reserved4: 1; // 63 + }; + ULONGLONG all; + +} SABLE_BCACHE_BCCEA_CSR2, *PSABLE_BCACHE_BCCEA_CSR2; + +// +// Define the Backup Cache uncorrectable error register +// + +typedef struct _SABLE_BCACHE_BCUE_CSR3 { + union { + ULONG MissedParErrorL: 1; // 0 + ULONG ParityErrorL: 1; // 1 + ULONG MissedUncorrectableErrorL: 1; // 2 + ULONG UncorrectableErrorL: 1; // 3 + ULONG Reserved1: 4; // 4-7 + ULONG ControlBitParityL: 1; // 8 + ULONG Shared: 1; // 9 + ULONG Dirty: 1; // 10 + ULONG Valid: 1; // 11 + ULONG Resrved2: 5; // 12-16 + ULONG BCacheEDCError1: 1; // 17 + ULONG EDCSyndrome0: 7; // 18-24 + ULONG EDCSyndrome2: 7; // 25-31 + ULONG MissedParErrorH: 1; // 32 + ULONG ParityErrorH: 1; // 33 + ULONG MissedUncorrectableErrorH: 1; // 34 + ULONG UncorrectableErrorH: 1; // 35 + ULONG Resreved3: 13; // 36-48 + ULONG BCacheEDCError2: 1; // 49 + ULONG EDCSyndrome1: 7; // 50-56 + ULONG EDCSyndrome3: 7; // 57-63 + }; + ULONGLONG all; + +} SABLE_BCACHE_BCUE_CSR3, *PSABLE_BCACHE_BCUE_CSR3; + +// +// Define the Backup Cache uncorrectable error address register +// + +typedef struct _SABLE_BCACHE_BCUEA_CSR4 { + union { + ULONG BCacheMapOffsetL: 17; // 0-16 + ULONG PredictedTagParL: 1; // 17 + ULONG TagParityL: 1; // 18 + ULONG TagValueL: 12; // 19-30 + ULONG Reserved1: 1; // 31 + ULONG BCacheMapOffsetH: 17; // 32-48 + ULONG PredictedTagParH: 1; // 49 + ULONG TagParityJ: 1; // 50 + ULONG TagValueH: 12; // 51-62 + ULONG Reserved2: 1; // 63 + + }; + ULONGLONG all; +} SABLE_BCACHE_BCUEA_CSR4, *PSABLE_BCACHE_BCUEA_CSR4; + +// +// Define the memory module CSRs +// + +typedef struct _SGL_MEM_CSR0 { + union { + ULONG ErrorSummary1: 1; // 0 + ULONG SyncError1: 1; // 1 + ULONG CAParityError1: 1; // 2 + ULONG CAMissedParityError1: 1; // 3 + ULONG WriteParityError1: 1; // 4 + ULONG MissedWriteParityError1: 1; // 5 + ULONG Reserved1: 2; // 6-7 + + ULONG CAParityErrorLW0: 1; // 8 + ULONG CAParityErrorLW2: 1; // 9 + ULONG ParityErrorLW0: 1; // 10 + ULONG ParityErrorLW2: 1; // 11 + ULONG ParityErrorLW4: 1; // 12 + ULONG ParityErrorLW6: 1; // 13 + ULONG Reserved2: 2; // 14-15 + + ULONG EDCUncorrectable1: 1; // 16 + ULONG EDCMissedUncorrectable1: 1; // 17 + ULONG EDCCorrectable1: 1; // 18 + ULONG EDCMissdedCorrectable1: 1; // 19 + ULONG Reserved3: 12; // 20-31 + + ULONG ErrorSummary2: 1; // 32 + ULONG SyncError2: 1; // 33 + ULONG CAParityError2: 1; // 34 + ULONG CAMissedParityError2: 1; // 35 + ULONG WriteParityError2: 1; // 36 + ULONG MissedWriteParityError2: 1; // 37 + ULONG Reserved4: 2; // 38-39 + + ULONG CAParityErrorLW1: 1; // 40 + ULONG CAParityErrorLW3: 1; // 41 + ULONG ParityErrorLW1: 1; // 42 + ULONG ParityErrorLW3: 1; // 43 + ULONG ParityErrorLW5: 1; // 44 + ULONG ParityErrorLW7: 1; // 45 + ULONG Reserved5: 2; // 46-47 + + ULONG EDCUncorrectable2: 1; // 48 + ULONG EDCMissedUncorrectable2: 1; // 49 + ULONG EDCCorrectable2: 1; // 50 + ULONG EDCMissdedCorrectable2: 1; // 51 + ULONG Reserved6: 12; // 52-63 + }; + ULONGLONG all; + +} SGL_MEM_CSR0, *PSGL_MEM_CSR0; + +// +// Define the Interprocessor Interrupt Request Register. +// + +typedef union _SABLE_IPIR_CSR{ + struct{ + ULONG RequestInterrupt: 1; + ULONG Reserved0: 31; + ULONG Undefined: 1; + ULONG Reserved1: 2; + ULONG RequestNodeHaltInterrupt: 1; + ULONG Reserved2: 28; + }; + ULONGLONG all; +} SABLE_IPIR_CSR, *PSABLE_IPIR_CSR; + +// +// Define the System Interrupt Clear Register format. +// + +typedef union _SABLE_SIC_CSR{ + struct{ + ULONG Undefined1: 1; + ULONG Undefined2: 1; + ULONG SystemBusErrorInterruptClear: 1; + ULONG Undefined3: 1; + ULONG Reserved1: 28; + ULONG IntervalTimerInterruptClear: 1; + ULONG SystemEventClear: 1; + ULONG Undefinded4: 1; + ULONG NodeHaltInterruptClear: 1; + ULONG Reserved2: 28; + }; + ULONGLONG all; +} SABLE_SIC_CSR, *PSABLE_SIC_CSR; + +// +// Define the per-processor data structures allocated in the PCR +// for each Sable processor. +// + +typedef struct _SABLE_PCR{ + ULONGLONG HalpCycleCount; // 64-bit per-processor cycle count + EV4ProfileCount ProfileCount; // Profile counter state, do not move + ULONGLONG IpirSva; // Superpage Va of per-processor IPIR CSR + PVOID CpuCsrsQva; // Qva of per-cpu csrs + EV4IrqStatus IrqStatusTable[MaximumIrq]; // Irq status table +} SABLE_PCR, *PSABLE_PCR; + +#define HAL_PCR ( (PSABLE_PCR)(&(PCR->HalReserved)) ) + +// +// Define Miscellaneous Sable routines. +// + +VOID +WRITE_CPU_REGISTER( + PVOID, + ULONGLONG + ); + +ULONGLONG +READ_CPU_REGISTER( + PVOID + ); + +ULONGLONG +READ_MEM_REGISTER( + PVOID + ); + +VOID +HalpSableIpiInterrupt( + VOID + ); + +#endif //!_LANGUAGE_ASSEMBLY + +#endif //_SABLEH_ |