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.
 
 
 
 
 
 

553 lines
22 KiB

/*++
Copyright (c) 1993 Digital Equipment Corporation
Module Name:
gamma.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:
28-Dec 1994 Steve Brooks
t2.h and rattler.h extracted from this file.
--*/
#ifndef _GAMMAH_
#define _GAMMAH_
#include "sableref.h" // Sable reference IO 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 GAMMA_PCI0_DENSE_BASE_PHYSICAL_SUPERPAGE 0xfffffc83c0000000
#define GAMMA_PCI1_DENSE_BASE_PHYSICAL_SUPERPAGE 0xfffffc8180000000
#define PCI0_DENSE_BASE_PHYSICAL_SUPERPAGE \
(GAMMA_PCI0_DENSE_BASE_PHYSICAL_SUPERPAGE - SABLE_PCI0_DENSE_MEMORY_QVA)
#define PCI1_DENSE_BASE_PHYSICAL_SUPERPAGE \
(GAMMA_PCI1_DENSE_BASE_PHYSICAL_SUPERPAGE - SABLE_PCI1_DENSE_MEMORY_QVA)
#if !defined(_LANGUAGE_ASSEMBLY)
#include "rattler.h" // Rattler chipset definitions
#include "t2.h" // T2 chipset definitions
#include "icic.h" // ICIC definitions
#define GAMMA_QVA_PHYSICAL_BASE ((ULONGLONG)0x8000000000)
//
// 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)-GAMMA_QVA_PHYSICAL_BASE) >> IO_BIT_SHIFT) ) )
//
// Define physical address spaces for GAMMA.
//
// PCI0 - 32bit PCI bus
// PCI1 - 64bit PCI bus
//
#define GAMMA_PCI1_DENSE_MEMORY_PHYSICAL ((ULONGLONG)0x8180000000)
#define GAMMA_PCI1_SPARSE_IO_PHYSICAL ((ULONGLONG)0x81C0000000)
#define GAMMA_PCI0_SPARSE_MEMORY_PHYSICAL ((ULONGLONG)0x8200000000)
#define GAMMA_PCI1_SPARSE_MEMORY_PHYSICAL ((ULONGLONG)0x8300000000)
#define GAMMA_PCI1_SPARSE_ISA_LEGACY_MEMORY_PHYSICAL ((ULONGLONG)0x8302000000)
#define GAMMA_PCI1_SPARSE_ISA_LEGACY_IO_PHYSICAL ((ULONGLONG)0x8200000000)
#define GAMMA_CBUS_CSRS_PHYSICAL ((ULONGLONG)0x8380000000)
#define GAMMA_CPU0_CSRS_PHYSICAL ((ULONGLONG)0x8380000000)
#define GAMMA_CPU1_CSRS_PHYSICAL ((ULONGLONG)0x8381000000)
#define GAMMA_CPU2_CSRS_PHYSICAL ((ULONGLONG)0x8382000000)
#define GAMMA_CPU3_CSRS_PHYSICAL ((ULONGLONG)0x8383000000)
#define GAMMA_CPU0_SICR_PHYSICAL ((ULONGLONG)0x8380000320)
#define GAMMA_CPU1_SICR_PHYSICAL ((ULONGLONG)0x8381000320)
#define GAMMA_CPU2_SICR_PHYSICAL ((ULONGLONG)0x8382000320)
#define GAMMA_CPU3_SICR_PHYSICAL ((ULONGLONG)0x8383000320)
#define GAMMA_MEM0_CSRS_PHYSICAL ((ULONGLONG)0x8388000000)
#define GAMMA_MEM1_CSRS_PHYSICAL ((ULONGLONG)0x8389000000)
#define GAMMA_MEM2_CSRS_PHYSICAL ((ULONGLONG)0x838A000000)
#define GAMMA_MEM3_CSRS_PHYSICAL ((ULONGLONG)0x838B000000)
#define GAMMA_T2_CSRS_PHYSICAL ((ULONGLONG)0x838E000000)
#define GAMMA_T4_CSRS_PHYSICAL ((ULONGLONG)0x838F000000)
#define T2_CSRS_QVA (HAL_MAKE_QVA(GAMMA_T2_CSRS_PHYSICAL))
#define T4_CSRS_QVA (HAL_MAKE_QVA(GAMMA_T4_CSRS_PHYSICAL))
#define GAMMA_PCI0_CONFIGURATION_PHYSICAL ((ULONGLONG)0x8390000000)
#define GAMMA_PCI1_CONFIGURATION_PHYSICAL ((ULONGLONG)0x8398000000)
#define GAMMA_PCI0_SPARSE_IO_PHYSICAL ((ULONGLONG)0x83A0000000)
#define GAMMA_PCI0_DENSE_MEMORY_PHYSICAL ((ULONGLONG)0x83C0000000)
//
// Define the limits of User mode Sparse and dense space:
// A special hack is applied to these values for Gamma, since these addresses
// are 40 bits in length, and are therefore beyond the range of QVAs. Bit 36
// is set in these constants, which will get shifted to bit 31 when a QVA is
// formed. When the physical address is then generated by the access macros,
// the high order bits will get set, forcing bit 39 to be set, causing a
// noncached access to occur
//
#define GAMMA_USER_PCI1_DENSE_MEMORY_PHYSICAL ((ULONGLONG)0x8980000000)
#define GAMMA_USER_PCI1_SPARSE_IO_PHYSICAL ((ULONGLONG)0x89c0000000)
#define GAMMA_USER_PCI0_SPARSE_MEMORY_PHYSICAL ((ULONGLONG)0x8A00000000)
#define GAMMA_USER_PCI0_SPARSE_MEMORY_END_PHYSICAL ((ULONGLONG)0x8b00000000)
#define GAMMA_USER_PCI1_SPARSE_MEMORY_PHYSICAL ((ULONGLONG)0x8b00000000)
#define GAMMA_USER_PCI1_SPARSE_MEMORY_END_PHYSICAL ((ULONGLONG)0x8b80000000)
#define GAMMA_USER_PCI0_SPARSE_IO_PHYSICAL ((ULONGLONG)0x8ba0000000)
#define GAMMA_USER_PCI0_SPARSE_IO_END_PHYSICAL ((ULONGLONG)0x8bc0000000)
#define GAMMA_USER_PCI0_DENSE_MEMORY_PHYSICAL ((ULONGLONG)0x8bc0000000)
#define GAMMA_EDGE_LEVEL_CSRS_PHYSICAL ((ULONGLONG)0x83A00004C0)
#define GAMMA_INTERRUPT_CSRS_PHYSICAL ((ULONGLONG)0x83A000A640)
#define XIO_INTERRUPT_CSRS_PHYSICAL ((ULONGLONG)0x81C000A640)
//
// For compatability, define the SABLE_* constants to refer to the GAMMA_*
// constants. This allows gamma to share sources from the sable tree.
//
#define SABLE_PCI1_DENSE_MEMORY_PHYSICAL GAMMA_PCI1_DENSE_MEMORY_PHYSICAL
#define SABLE_PCI1_SPARSE_IO_PHYSICAL GAMMA_PCI1_SPARSE_IO_PHYSICAL
#define SABLE_PCI0_SPARSE_MEMORY_PHYSICAL GAMMA_PCI0_SPARSE_MEMORY_PHYSICAL
#define SABLE_PCI1_SPARSE_MEMORY_PHYSICAL GAMMA_PCI1_SPARSE_MEMORY_PHYSICAL
#define SABLE_USER_PCI1_DENSE_MEMORY_PHYSICAL GAMMA_USER_PCI1_DENSE_MEMORY_PHYSICAL
#define SABLE_USER_PCI1_SPARSE_IO_PHYSICAL GAMMA_USER_PCI1_SPARSE_IO_PHYSICAL
#define SABLE_USER_PCI0_SPARSE_MEMORY_PHYSICAL GAMMA_USER_PCI0_SPARSE_MEMORY_PHYSICAL
#define SABLE_USER_PCI0_SPARSE_MEMORY_END_PHYSICAL GAMMA_USER_PCI0_SPARSE_MEMORY_END_PHYSICAL
#define SABLE_USER_PCI1_SPARSE_MEMORY_PHYSICAL GAMMA_USER_PCI1_SPARSE_MEMORY_PHYSICAL
#define SABLE_USER_PCI1_SPARSE_MEMORY_END_PHYSICAL GAMMA_USER_PCI1_SPARSE_MEMORY_END_PHYSICAL
#define SABLE_USER_PCI0_SPARSE_IO_PHYSICAL GAMMA_USER_PCI0_SPARSE_IO_PHYSICAL
#define SABLE_USER_PCI0_SPARSE_IO_END_PHYSICAL GAMMA_USER_PCI0_SPARSE_IO_END_PHYSICAL
#define SABLE_USER_PCI0_DENSE_MEMORY_PHYSICAL GAMMA_USER_PCI0_DENSE_MEMORY_PHYSICAL
#define SABLE_CBUS_CSRS_PHYSICAL GAMMA_CBUS_CSRS_PHYSICAL
#define SABLE_CPU0_CSRS_PHYSICAL GAMMA_CPU0_CSRS_PHYSICAL
#define SABLE_CPU1_CSRS_PHYSICAL GAMMA_CPU1_CSRS_PHYSICAL
#define SABLE_CPU2_CSRS_PHYSICAL GAMMA_CPU2_CSRS_PHYSICAL
#define SABLE_CPU3_CSRS_PHYSICAL GAMMA_CPU3_CSRS_PHYSICAL
#define SABLE_CPU0_IPIR_PHYSICAL GAMMA_CPU0_SICR_PHYSICAL
#define SABLE_CPU1_IPIR_PHYSICAL GAMMA_CPU1_SICR_PHYSICAL
#define SABLE_CPU2_IPIR_PHYSICAL GAMMA_CPU2_SICR_PHYSICAL
#define SABLE_CPU3_IPIR_PHYSICAL GAMMA_CPU3_SICR_PHYSICAL
#define SABLE_PCI0_CONFIGURATION_PHYSICAL GAMMA_PCI0_CONFIGURATION_PHYSICAL
#define SABLE_PCI1_CONFIGURATION_PHYSICAL GAMMA_PCI1_CONFIGURATION_PHYSICAL
#define SABLE_PCI0_SPARSE_IO_PHYSICAL GAMMA_PCI0_SPARSE_IO_PHYSICAL
#define SABLE_PCI0_DENSE_MEMORY_PHYSICAL GAMMA_PCI0_DENSE_MEMORY_PHYSICAL
//
// Define Interrupt Controller CSRs.
//
#define SABLE_EDGE_LEVEL_CSRS_QVA (HAL_MAKE_QVA(GAMMA_EDGE_LEVEL_CSRS_PHYSICAL))
#define SABLE_INTERRUPT_CSRS_QVA (HAL_MAKE_QVA(GAMMA_INTERRUPT_CSRS_PHYSICAL))
//
// Define XIO interrupt controller CSRs.
//
#define XIO_INTERRUPT_CSRS_QVA (HAL_MAKE_QVA(XIO_INTERRUPT_CSRS_PHYSICAL))
#define SABLE_PCI_CONFIG_BASE_QVA (HAL_MAKE_QVA(GAMMA_PCI0_CONFIGURATION_PHYSICAL))
//
// Gamma uses the Rattler chipset for the CBUS bridge. Define the Sable
// CPU CSRS to be Rattler CPU Csrs.
//
#define SABLE_CPU_CSRS RATTLER_CPU_CSRS
#define PSABLE_CPU_CSRS PRATTLER_CPU_CSRS
//
// Define CPU CSRs and masks.
//
#define SABLE_CPU0_CSRS_QVA (HAL_MAKE_QVA(GAMMA_CPU0_CSRS_PHYSICAL))
#define SABLE_CPU1_CSRS_QVA (HAL_MAKE_QVA(GAMMA_CPU1_CSRS_PHYSICAL))
#define SABLE_CPU2_CSRS_QVA (HAL_MAKE_QVA(GAMMA_CPU2_CSRS_PHYSICAL))
#define SABLE_CPU3_CSRS_QVA (HAL_MAKE_QVA(GAMMA_CPU3_CSRS_PHYSICAL))
#define GAMMA_MEM0_CSRS_QVA (HAL_MAKE_QVA(GAMMA_MEM0_CSRS_PHYSICAL))
#define GAMMA_MEM1_CSRS_QVA (HAL_MAKE_QVA(GAMMA_MEM1_CSRS_PHYSICAL))
#define GAMMA_MEM2_CSRS_QVA (HAL_MAKE_QVA(GAMMA_MEM2_CSRS_PHYSICAL))
#define GAMMA_MEM3_CSRS_QVA (HAL_MAKE_QVA(GAMMA_MEM3_CSRS_PHYSICAL))
#define GAMMA_PRIMARY_PROCESSOR ((ULONG)0x0)
#define GAMMA_SECONDARY_PROCESSOR ((ULONG)0x1)
#define GAMMA_MAXIMUM_PROCESSOR ((ULONG)0x3)
#define HAL_PRIMARY_PROCESSOR (GAMMA_PRIMARY_PROCESSOR)
#define HAL_MAXIMUM_PROCESSOR (GAMMA_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 memory module CSRs (from chapter 10 of the GAMMA CPU spec)
//
//
// Error Summary register
//
typedef struct _GAMMA_ESREG_CSR1 {
union {
ULONG EVBCorrecectableError0: 3; // 0-2
ULONG Resrved1: 1; // 3
ULONG EVBFatalError0: 4; // 4-7
ULONG DTError0: 2; // 8-9
ULONG DTSummary0: 1; // 10
ULONG Reserved2: 1; // 11
ULONG IBParError0: 1; // 12
ULONG IBErrorInfo0: 2; // 13-14
ULONG IBSummary0: 1; // 15
ULONG CBError0: 8; // 16-23
ULONG CBSummary0: 1; // 24
ULONG CBCommand0: 1; // 25
ULONG Reserved3: 2; // 26-27
ULONG EVNoResponse0: 1; // 28
ULONG Reserved4: 3; // 29-31
ULONG EVBCorrecectableError1: 3; // 32-34
ULONG Resrved5: 1; // 35
ULONG EVBFatalError1: 4; // 36-39
ULONG DTError1: 2; // 40-41
ULONG DTSummary1: 1; // 42
ULONG Reserved6: 1; // 43
ULONG IBParError1: 1; // 44
ULONG IBErrorInfo1: 2; // 45-46
ULONG IBSummary1: 1; // 47
ULONG CBError1: 4; // 48-51
ULONG Reserved7: 4; // 52-55
ULONG CBSummary1: 1; // 56
ULONG CBCommand1: 1; // 57
ULONG Reserved8: 2; // 58-59
ULONG EVNoResponse1: 1; // 60
ULONG Reserved9: 3; // 61-63
};
ULONGLONG all;
} GAMMA_ESREG_CSR1, *PGAMMA_ESREG_CSR1;
typedef struct _GAMMA_EVBCR_CSR2 {
union {
ULONG EnableAddressCommandBusParityCheck0: 1; // 0
ULONG Reserved1: 3; // 1-3
ULONG EnableCorrectionErrorInterrupt0: 1; // 4
ULONG EnableECCCorrection0: 1; // 5
ULONG EnableRattlerECCCheck0: 1; // 6
ULONG Reserved2: 20; // 7-26
ULONG ForceFilledShared: 1; // 27
ULONG RmmStxcFillShared: 1; // 28
ULONG Reserved3: 3; // 29-31
ULONG EnableAddressCommandBusParityCheck1: 1; // 32
ULONG Reserved4: 4; // 33-35
ULONG EnableCorrectionErrorInterrupt1: 1; // 36
ULONG EnableECCCorrection1: 1; // 37
ULONG EnableRattlerECCCheck1: 1; // 38
ULONG DisableEV5ECCChecking1: 1; // 39
ULONG Reserved5: 24; // 40-63
};
ULONGLONG all;
} GAMMA_EVBCR_CSR2, *PGAMMA_EVBCR_CSR2;
typedef struct _GAMMA_EVBVEAR_CSR3 {
union {
ULONG EVBVictimErrorAddress0: 30; // 0-29
ULONG Reserved1: 2; // 30-31
ULONG EVBVictimErrorAddress1: 30; // 32-61
ULONG Reserved2: 2; // 62-63
};
} GAMMA_EVBVEAR_CSR3, *PGAMMA_EVBVEAR_CSR3;
typedef struct _GAMMA_EVBCER_CSR4 {
union {
ULONG CorrectableError0: 2; // 0-1
ULONG ReadDirty0: 1; // 2
ULONG MissedCorrectable0: 1; // 3
ULONG Reserved1: 4; // 4-7
ULONG ECCSyndrome0: 8; // 8-15
ULONG ECCSyndrome2: 8; // 16-23
ULONG Reserved2: 8; // 24-31
ULONG CorrectableError1: 2; // 32-33
ULONG ReadDirty1: 1; // 34
ULONG MissedCorrectable1: 1; // 35
ULONG Reserved3: 4; // 36-39
ULONG ECCSyndrome1: 8; // 40-47
ULONG ECCSyndrome3: 8; // 48-55
ULONG Reserved4: 8; // 56-63
};
ULONGLONG all;
} GAMMA_EVBCER_CSR4, *PGAMMA_EVBCER_CSR4;
typedef struct _GAMMA_EVBCEAR_CSR5 {
union {
ULONG EVBCorrectableErrorAddress0: 32; // 0-31
ULONG EVBCorrectableErrorAddress1: 32; // 32-63
};
ULONGLONG all;
} GAMMA_EVBCEAR_CSR5, *PGAMMA_EVBCEAR_CSR5;
typedef struct _GAMMA_EVBUER_CSR6 {
union {
ULONG UncorrectableError0: 2; // 0-1
ULONG ReadDirty0: 1; // 2
ULONG Reserved1: 1; // 3
ULONG ParityErrorOnAddressCommand0: 1; // 4
ULONG ParityErrorOnVictim0: 1; // 5
ULONG Reserved2: 2; // 6-7
ULONG ECCSyndrome0: 8; // 8-15
ULONG ECCSyndrome2: 8; // 16-23
ULONG Reserved3: 4; // 24-27
ULONG EVBCommand0: 4; // 28-31
ULONG UncorrectableError1: 2; // 32-33
ULONG ReadDirty1: 1; // 34
ULONG Reserved4: 1; // 35
ULONG ParityErrorOnAddressCommand1: 1; // 36
ULONG ParityErrorOnVictim1: 1; // 37
ULONG Reserved5: 2; // 38-39
ULONG ECCSyndrome1: 8; // 40-47
ULONG ECCSyndrome3: 8; // 48-55
ULONG Reserved6: 4; // 56-59
ULONG EVBCommand1: 4; // 60-63
};
ULONGLONG all;
} GAMMA_EVBUER_CSR6, *PGAMMA_EVBUER_CSR6;
typedef struct _GAMMA_EVBUEAR_CSR7 {
union {
ULONG EVBUncorrectableErrorAddress0: 32; // 0-31
ULONG EVBUncorrectableErrorAddress1: 32; // 32-63
};
ULONGLONG all;
} GAMMA_EVBEUAR_CSR7, *PGAMMA_EVBUEAR_CSR7;
typedef struct _GAMMA_CBER_CSR18 {
union {
ULONG UncorrectableReadError0: 1; // 0
ULONG Reserved1: 3; // 1-3
ULONG CAParity0ErrorL: 1; // 4
ULONG CAParity0ErrorH: 1; // 5
ULONG Reserved2: 2; // 6-7
ULONG ParityErrorWriteDataLW0: 1; // 8
ULONG ParityErrorWriteDataLW1: 1; // 9
ULONG ParityErrorWriteDataLW4: 1; // 10
ULONG ParityErrorWriteDataLW5: 1; // 11
ULONG Reserved3: 4; // 12-15
ULONG ParityErrorReadDataLW0: 1; // 16
ULONG ParityErrorReadDataLW1: 1; // 17
ULONG ParityErrorReadDataLW4: 1; // 18
ULONG ParityErrorReadDataLW5: 1; // 19
ULONG UnexpectedSharedResponse: 1; // 20
ULONG Reserved4: 3; // 21-23
ULONG CANotAcked: 1; // 24
ULONG Reserved5: 3; // 25-27
ULONG Data0NotAcked: 1; // 28
ULONG Data1NotAcked: 1; // 29
ULONG Reserved6: 2; // 30-31
ULONG UncorrectableReadError1: 1; // 32
ULONG Reserved7: 3; // 33-35
ULONG CAParity1ErrorL: 1; // 36
ULONG CAParity1ErrorH: 1; // 37
ULONG Reserved8: 2; // 38-39
ULONG ParityErrorWriteDataLW2: 1; // 40
ULONG ParityErrorWriteDataLW3: 1; // 41
ULONG ParityErrorWriteDataLW6: 1; // 42
ULONG ParityErrorWriteDataLW7: 1; // 43
ULONG Reserved9: 4; // 44-47
ULONG ParityErrorReadDataLW2: 1; // 48
ULONG ParityErrorReadDataLW3: 1; // 49
ULONG ParityErrorReadDataLW6: 1; // 50
ULONG ParityErrorReadDataLW7: 1; // 51
ULONG Reserved10: 12; // 52-63
};
ULONGLONG all;
} GAMMA_CBER_CSR18, *PGAMMA_CBER_CSR18;
typedef struct _GAMMA_CBEALR_CSR19 {
union {
ULONG CBusErrorLowAddress0: 32; // 0-31
ULONG CBusErrorLowAddress1: 32; // 32-63
};
ULONGLONG all;
} GAMMA_CBEALR_CSR19, *PGAMMA_CBEALR_CSR19;
typedef struct _GAMMA_CBEAHR_CSR20 {
union {
ULONG CBusErrorHighAddress0: 32; // 0-31
ULONG CBusErrorHighAddress1: 32; // 32-63
};
ULONGLONG all;
} GAMMA_CBEAHR_CSR20, *PGAMMA_CBEAHR_CSR20;
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 per-processor data structures allocated in the PCR
// for each Gamma processor.
//
// NOTE: If the IpirSva field is moved, the change must be reflected in
// the routine HalpGammaIpiInterrupt
//
typedef struct _GAMMA_PCR{
ULONGLONG HalpCycleCount; // 64-bit per-processor cycle count
ULONGLONG IpirSva; // Superpage Va of per-processor IPIR CSR
PVOID CpuCsrsQva; // Qva of per-cpu csrs
EV5ProfileCount ProfileCount; // Profile counter state
} GAMMA_PCR, *PGAMMA_PCR;
#define HAL_PCR ( (PGAMMA_PCR)(&(PCR->HalReserved)) )
//
// Define Miscellaneous Gamma routines.
//
VOID
WRITE_CPU_REGISTER(
PVOID,
ULONGLONG
);
ULONGLONG
READ_CPU_REGISTER(
PVOID
);
ULONGLONG
READ_MEM_REGISTER(
PVOID
);
BOOLEAN
HalpGammaDispatch(
VOID
);
VOID
HalpGammaIpiInterrupt(
VOID
);
#endif //!_LANGUAGE_ASSEMBLY
#endif //_GAMMAH_