520 lines
18 KiB
C
520 lines
18 KiB
C
|
/*++
|
|||
|
|
|||
|
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_
|