mce.h revision 571c90a734400801da973f986190fac9fc5efd0d
/*++ BUILD Version: 0011 // Increment this if a change has global effects
Copyright (c) 1991-2001 Microsoft Corporation
Module Name:
Abstract:
This header file defines the Machine Check Errors definitions.
Author:
David N. Cutler (davec)
Revision History:
Creation: 04-Apr-2001
--*/
#ifndef _MCE_
#define _MCE_
//
// HalMcaLogInformation
//
//
// ADDR register for each MCA bank
//
typedef union _MCI_ADDR{
struct {
};
typedef enum {
#if defined(_AMD64_)
//
// STATUS register for each MCA bank.
//
typedef union _MCI_STATS {
struct {
} MciStatus;
} MCI_STATS, *PMCI_STATS;
#endif // _AMD64_
#if defined(_X86_)
//
// STATUS register for each MCA bank.
//
typedef union _MCI_STATS {
struct {
} MciStats;
} MCI_STATS, *PMCI_STATS;
#endif // _X86_
//
// MCA exception log entry
// Defined as a union to contain MCA specific log or Pentium style MCE info.
//
typedef struct _MCA_EXCEPTION {
// Begin Version 1 stuff
union {
struct {
} Mca;
struct {
} Mce;
} u;
// End Version 1 stuff
#if defined(_X86_)
// Begin Version 2 stuff
// End Version 2 stuff
#endif
#if defined(_X86_)
#define MCA_EXCEPTION_V2_SIZE sizeof(struct _MCA_EXCEPTION)
#endif
#endif // _X86_ || _AMD64_
//
// ERRORS: ERROR_SEVERITY definitions
//
// One day the MS compiler will support typed enums with type != int so this
// type of enums (UCHAR, __int64) could be defined...
//
typedef enum _ERROR_SEVERITY_VALUE {
ErrorRecoverable = 0,
ErrorFatal = 1,
ErrorCorrected = 2,
#endif
#if defined(_IA64_)
#if 0
// FIXFIX: This should not be required for IA64.
//
// STATUS register for each MCA bank.
//
typedef union _MCI_STATS {
struct {
} MciStats;
} MCI_STATS, *PMCI_STATS;
#endif // 0
//
// IA64 ERRORS: ERROR_REVISION definitions
//
typedef union _ERROR_REVISION {
struct {
};
// For Info:
#define ERROR_MAJOR_REVISION_SAL_03_00 0
#define ERROR_MINOR_REVISION_SAL_03_00 2
#define ERROR_REVISION_SAL_03_00 { ERROR_MINOR_REVISION_SAL_03_00, \
//
// Section Header revision is fixed at Major == 2 and Minor == 0
//
#define ERROR_FIXED_SECTION_REVISION { 2,\
0 }
//
// IA64 ERRORS: ERROR_TIMESTAMP definitions
//
typedef union _ERROR_TIMESTAMP {
struct {
};
//
// IA64 ERRORS: ERROR_GUID definitions
//
typedef struct _ERROR_GUID {
} ERROR_GUID, *PERROR_GUID;
//
// IA64 ERRORS: ERROR GUIDs definitions
//
typedef ERROR_GUID _ERROR_DEVICE_GUID;
typedef ERROR_GUID _ERROR_PLATFORM_GUID;
//
// IA64 ERRORS: ERROR_RECORD_HEADER definitions
//
typedef union _ERROR_RECORD_VALID {
struct { // Bits
};
typedef struct _ERROR_RECORD_HEADER { // Offsets:
//
// IA64 ERRORS: ERROR_SECTION_HEADER definitions
//
typedef union _ERROR_RECOVERY_INFO {
struct { // Bits:
};
typedef struct _ERROR_SECTION_HEADER {
// including the header.
//
// IA64 Machine Check Error Logs:
// WMI requires processor LID being stored in the Log.
// This LID corresponds to the processor on which the SAL_PROC was executed on.
//
// TEMPTEMP: Implementation is temporary, until we implement HAL SW Error Section.
// Note that the current FW builds do not update the _ERROR_PROCESSOR.CRLid field,
// assuming there is a _ERROR_PROCESSOR section in the record.
//
#if !defined(__midl)
)
{
return( lid );
} // GetFwMceLogProcessorNumber()
#endif // !__midl
//
// IA64 ERRORS: ERROR_PROCESSOR device definitions
//
// The MCA architecture supports five different types of error reporting functional units
// with the associated error records and its error severity.
// in one or more of the following units:
// - Cache Check
// - TLB Check
// - Bus Check
// - Register File
// - Micro Architectural
//
// Terminology:
//
// - Target Address:
// 64-bit integer containing the physical address where the data was to be delivered or
// obtained. This could also be the incoming address for external snoops and TLB shoot-downs.
//
// - Requestor Identifier:
// 64-bit integer specifying the bus agent that generated the transaction responsible for
// the Machine Check event.
//
// - Responder Identifier:
// 64-bit integer specifying the bus agent that responded to a transaction responsible for
// the Machine Check event.
//
// - Precise Instruction Pointer:
// 64-bit integer specifying the virtual address that points to the IA-64 bundle that
// contained the instruction responsible for the Machine Check event.
//
#define ERROR_PROCESSOR_GUID \
{ 0xe429faf1, 0x3cb7, 0x11d4, { 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 }}
typedef union _ERROR_MODINFO_VALID {
struct { // Bits
};
typedef enum _ERROR_CHECK_IS {
isIA64 = 0,
isIA32 = 1,
typedef enum _ERROR_CACHE_CHECK_OPERATION {
CacheUnknownOp = 0,
CacheLoad = 1,
CacheStore = 2,
CacheDataPrefetch = 4,
CacheSnoop = 5,
CacheCastOut = 6,
CacheMoveIn = 7,
typedef enum _ERROR_CACHE_CHECK_MESI {
CacheInvalid = 0,
CacheHeldShared = 1,
CacheHeldExclusive = 2,
CacheModified = 3,
typedef union _ERROR_CACHE_CHECK {
struct
{
};
typedef enum _ERROR_TLB_CHECK_OPERATION {
TlbUnknownOp = 0,
TlbAccessWithLoad = 1,
TlbAccessWithStore = 2,
TlbShootDown = 5,
TlbProbe = 6,
TlbVhptFill = 7,
typedef union _ERROR_TLB_CHECK {
struct
{
};
typedef enum _ERROR_BUS_CHECK_OPERATION {
BusUnknownOp = 0,
BusPartialRead = 1,
BusPartialWrite = 2,
BusFullLineRead = 3,
BusFullLineWrite = 4,
BusWriteBack = 5,
BusSnoopProbe = 6,
BusIncomingPtcG = 7,
BusWriteCoalescing = 8,
typedef union _ERROR_BUS_CHECK {
struct
{
};
typedef enum _ERROR_REGFILE_CHECK_IDENTIFIER {
RegFileUnknownId = 0,
GeneralRegisterBank1 = 1,
GeneralRegisterBank0 = 2,
BranchRegister = 4,
PredicateRegister = 5,
ApplicationRegister = 6,
ControlRegister = 7,
RegionRegister = 8,
DataBreakPointRegister = 10,
typedef enum _ERROR_REGFILE_CHECK_OPERATION {
RegFileUnknownOp = 0,
RegFileRead = 1,
RegFileWrite = 2,
typedef union _ERROR_REGFILE_CHECK {
struct
{
};
typedef enum _ERROR_MS_CHECK_OPERATION {
MsUnknownOp = 0,
MsReadOrLoad = 1,
MsWriteOrStore = 2,
MsOverTemperature = 3,
typedef union _ERROR_MS_CHECK {
struct
{
};
typedef union _ERROR_CHECK_INFO {
// SAL Specs July 2000: The size of _ERROR_MODINFO will always be 48 Bytes.
typedef struct _ERROR_MODINFO {
typedef union _ERROR_PROCESSOR_VALID {
struct { // Bits
};
typedef union _ERROR_PROCESSOR_ERROR_MAP {
struct {
};
typedef union _ERROR_PROCESSOR_STATE_PARAMETER {
struct {
};
typedef union _PROCESSOR_LOCAL_ID {
struct {
};
typedef struct _ERROR_PROCESSOR_MS {
typedef struct _ERROR_PROCESSOR_CPUID_INFO { // Must be 48 bytes.
typedef union _ERROR_PROCESSOR_STATIC_INFO_VALID {
struct { // Bits
// Warning: Match the VALID fields with the _ERROR_PROCESSOR_STATIC_INFO members.
// KD extensions use the field names to access the PSI structure.
};
typedef struct _ERROR_PROCESSOR_STATIC_INFO {
typedef struct _ERROR_PROCESSOR {
#if 0
// The presence of the following data depends on the valid bits
// from ERROR_PROCESSOR.Valid.
//
#endif // 0
//
// IA64 ERROR PROCESSOR State Parameter - GR18 - definitions.
//
#define ERROR_PROCESSOR_STATE_PARAMETER_CACHE_CHECK_MASK 0x1
#define ERROR_PROCESSOR_STATE_PARAMETER_TLB_CHECK_MASK 0x1
#define ERROR_PROCESSOR_STATE_PARAMETER_BUS_CHECK_MASK 0x1
#define ERROR_PROCESSOR_STATE_PARAMETER_REG_CHECK_MASK 0x1
//
// For legacy consumers
//
#define ERROR_PROCESSOR_STATE_PARAMETER_UNKNOWN_CHECK_SHIFT ERROR_PROCESSOR_STATE_PARAMETER_MICROARCH_CHECK_SHIFT
#define ERROR_PROCESSOR_STATE_PARAMETER_UNKNOWN_CHECK_MASK ERROR_PROCESSOR_STATE_PARAMETER_MICROARCH_CHECK_MASK
////////////////////////////////////////////////////////////////////
//
// IA64 PLATFORM ERRORS Definitions
//
// We tried to respect the order in which these error devices are
// presented in the SAL specs.
//
// IA64 ERRORS: _ERR_TYPE definitions
//
// Warning 04/01/01: "ERR_TYPE" or "ERROR_TYPE" are already used in the NT namespace.
//
typedef enum _ERR_TYPES {
// Generic error types:
// Detailed Internal Error Types:
// Detailed Bus Error Types:
} _ERR_TYPE;
//
// IA64 ERRORS: ERROR_STATUS definitions
//
typedef union _ERROR_STATUS {
struct { // Bits:
ULONGLONG Address:1; // 16: Error was detected on address signals or on address portion of transaction
ULONGLONG Control:1; // 17: Error was detected on control signals or in control portion of transaction
ULONGLONG FirstError:1; // 21: If multiple errors, this is the first error of the highest severity that occurred
ULONGLONG Overflow:1; // 22: Additional errors occurred which were not logged because registers overflow
};
//
// IA64 ERRORS: Platform OEM_DATA definitions
//
typedef struct _ERROR_OEM_DATA {
#if 0
#endif // 0
//
// IA64 ERRORS: Platform BUS_SPECIFIC_DATA definitions
//
typedef union _ERROR_BUS_SPECIFIC_DATA {
struct { // Bits :
};
//
// IA64 ERRORS: Platform ERROR_MEMORY device definitions
//
// With reference to the ACPI Memory Device.
//
#define ERROR_MEMORY_GUID \
{ 0xe429faf2, 0x3cb7, 0x11d4, { 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 }}
typedef union _ERROR_MEMORY_VALID {
struct { // Bits
};
typedef struct _ERROR_MEMORY {
ULONGLONG BusSpecificData; // Bus dependent data of the on-board processor. It is a OEM specific field.
//
// IA64 ERRORS: Platform ERROR_PCI_BUS device definitions
//
// With reference to the PCI Specifications.
//
#define ERROR_PCI_BUS_GUID \
{ 0xe429faf4, 0x3cb7, 0x11d4, { 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 }}
typedef union _ERROR_PCI_BUS_VALID {
struct { // Bits
};
typedef struct _ERROR_PCI_BUS_TYPE {
#define PciBusUnknownError ((UCHAR)0)
// PciOtherErrors Reserved
typedef struct _ERROR_PCI_BUS_ID {
typedef struct _ERROR_PCI_BUS {
// the time of the event
//
// IA64 ERRORS: Platform ERROR_PCI_COMPONENT device definitions
//
// With reference to the PCI Specifications.
//
#define ERROR_PCI_COMPONENT_GUID \
{ 0xe429faf6, 0x3cb7, 0x11d4, { 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 }}
typedef union _ERROR_PCI_COMPONENT_VALID {
struct { // Bits:
};
typedef struct _ERROR_PCI_COMPONENT_INFO { // Bytes:
typedef struct _ERROR_PCI_COMPONENT {
#if 0
#endif // 0
//
// IA64 ERRORS: Platform ERROR_SYSTEM_EVENT_LOG device definitions
//
// With reference to the IPMI System Event Log.
//
#define ERROR_SYSTEM_EVENT_LOG_GUID \
{ 0xe429faf3, 0x3cb7, 0x11d4, { 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 }}
typedef union _ERROR_SYSTEM_EVENT_LOG_VALID {
struct { // Bits
};
typedef struct _ERROR_SYSTEM_EVENT_LOG {
// 0x02 - System Event Record
// 0xC0 - 0xDF OEM time stamped, bytes 8-16 OEM defined
// 0xE0 - 0xFF OEM non-time stamped, bytes 4-16 OEM defined
// Byte 1:
// Bit 0 - set to 1 when using system software
// Bit 7:1 - 7-bit system ID
// Byte 2:
// Bit 1:0 - IPMB device LUN if byte 1 holds slave
// address, 0x0 otherwise
// Bit 7:2 - Reserved.
// Bit 7 - 0: asserted, 1: desasserted
// Event Type
// Bit 6:0 - Event Type code
//
// IA64 ERRORS: Platform ERROR_SMBIOS device definitions
//
// With reference to the SMBIOS Specifications.
//
#define ERROR_SMBIOS_GUID \
{ 0xe429faf5, 0x3cb7, 0x11d4, { 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 }}
typedef union _ERROR_SMBIOS_VALID {
struct { // Bits
};
//
// ERROR_SMBIOS.Type definitions
//
// enum values defined in SMBIOS 2.3 - 3.3.16.6.1
typedef struct _ERROR_SMBIOS {
//
// IA64 ERRORS: Platform Specific error device definitions
//
#define ERROR_PLATFORM_SPECIFIC_GUID \
{ 0xe429faf7, 0x3cb7, 0x11d4, { 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 }}
typedef union _ERROR_PLATFORM_SPECIFIC_VALID {
struct { // Bits:
};
typedef struct _ERROR_PLATFORM_SPECIFIC {
#if 0
#endif // 0
//
// IA64 ERRORS: Platform Bus error device definitions
//
#define ERROR_PLATFORM_BUS_GUID \
{ 0xe429faf9, 0x3cb7, 0x11d4, { 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 }}
typedef union _ERROR_PLATFORM_BUS_VALID {
struct { // Bits:
};
typedef struct _ERROR_PLATFORM_BUS {
#if 0
#endif // 0
//
// IA64 ERRORS: Platform Host Controller error device definitions
//
#define ERROR_PLATFORM_HOST_CONTROLLER_GUID \
{ 0xe429faf8, 0x3cb7, 0x11d4, { 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 }}
typedef union _ERROR_PLATFORM_HOST_CONTROLLER_VALID {
struct { // Bits:
};
typedef struct _ERROR_PLATFORM_HOST_CONTROLLER {
#if 0
#endif // 0
//
// IA64 ERROR_LOGRECORDS definitions
//
// MCA_EXCEPTION,
// CMC_EXCEPTION,
// CPE_EXCEPTION.
//
// For compatibility with previous versions of the definitions:
#endif // _IA64_
#endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
#endif // _MCE_