mirror of https://github.com/UMSKT/xpmgr.git
457 lines
14 KiB
C
457 lines
14 KiB
C
/*++
|
|
|
|
Copyright (c) 2007 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
wheadef.h
|
|
|
|
Abstract:
|
|
|
|
This header file defines structures and identifiers used in software
|
|
interfaces for the windows hardware error reporting system. It includes the
|
|
common platform error record and error source descriptor definitions.
|
|
|
|
--*/
|
|
|
|
#ifndef _WHEADEF_H_
|
|
#define _WHEADEF_H_
|
|
|
|
#include <cper.h>
|
|
|
|
//------------------------------------------------------ WHEA_ERROR_SOURCE_TYPE
|
|
|
|
#define WHEA_PHYSICAL_ADDRESS LARGE_INTEGER
|
|
|
|
//
|
|
// This enumeration defines the various types of error sources that a platform
|
|
// can expose to the operating system.
|
|
//
|
|
|
|
typedef enum _WHEA_ERROR_SOURCE_TYPE {
|
|
WheaErrSrcTypeMCE = 0x00, // Machine Check Exception
|
|
WheaErrSrcTypeCMC = 0x01, // Corrected Machine Check
|
|
WheaErrSrcTypeCPE = 0x02, // Corrected Platform Error
|
|
WheaErrSrcTypeNMI = 0x03, // Non-Maskable Interrupt
|
|
WheaErrSrcTypePCIe = 0x04, // PCI Express Error
|
|
WheaErrSrcTypeGeneric = 0x05, // Other types of error sources
|
|
WheaErrSrcTypeINIT = 0x06, // IA64 INIT Error Source
|
|
WheaErrSrcTypeBOOT = 0x07, // BOOT Error Source
|
|
WheaErrSrcTypeSCIGeneric = 0x08, // SCI-based generic error source
|
|
WheaErrSrcTypeIPFMCA = 0x09, // Itanium Machine Check Abort
|
|
WheaErrSrcTypeIPFCMC = 0x0a, // Itanium Machine check
|
|
WheaErrSrcTypeIPFCPE = 0x0b, // Itanium Corrected Platform Error
|
|
WheaErrSrcTypeMax
|
|
} WHEA_ERROR_SOURCE_TYPE, *PWHEA_ERROR_SOURCE_TYPE;
|
|
|
|
//
|
|
// Error sources have a runtime state associated with them. The following are
|
|
// the valid states for an error source.
|
|
//
|
|
|
|
typedef enum _WHEA_ERROR_SOURCE_STATE {
|
|
WheaErrSrcStateStopped = 0x01,
|
|
WheaErrSrcStateStarted = 0x02
|
|
} WHEA_ERROR_SOURCE_STATE, *PWHEA_ERROR_SOURCE_STATE;
|
|
|
|
#define WHEA_ERROR_SOURCE_DESCRIPTOR_VERSION_10 10
|
|
|
|
#define WHEA_MAX_MC_BANKS 32
|
|
|
|
#define WHEA_ERROR_SOURCE_FLAG_FIRMWAREFIRST 0x00000001
|
|
#define WHEA_ERROR_SOURCE_FLAG_GLOBAL 0x00000002
|
|
#define WHEA_ERROR_SOURCE_FLAG_PREALLOCATE_PER_PROCESSOR 0x00000004
|
|
#define WHEA_ERROR_SOURCE_FLAG_DEFAULTSOURCE 0x80000000
|
|
|
|
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_XPFMCE 0
|
|
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_XPFCMC 1
|
|
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_XPFNMI 2
|
|
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_IPFMCA 3
|
|
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_IPFCMC 4
|
|
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_IPFCPE 5
|
|
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_AERROOTPORT 6
|
|
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_AERENDPOINT 7
|
|
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_AERBRIDGE 8
|
|
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_GENERIC 9
|
|
|
|
#define WHEA_XPF_MC_BANK_STATUSFORMAT_IA32MCA 0
|
|
#define WHEA_XPF_MC_BANK_STATUSFORMAT_Intel64MCA 1
|
|
#define WHEA_XPF_MC_BANK_STATUSFORMAT_AMD64MCA 2
|
|
|
|
#define WHEA_NOTIFICATION_TYPE_POLLED 0
|
|
#define WHEA_NOTIFICATION_TYPE_EXTERNALINTERRUPT 1
|
|
#define WHEA_NOTIFICATION_TYPE_LOCALINTERRUPT 2
|
|
#define WHEA_NOTIFICATION_TYPE_SCI 3
|
|
#define WHEA_NOTIFICATION_TYPE_NMI 4
|
|
|
|
#include <pshpack1.h>
|
|
|
|
//------------------------------------------------ WHEA_ERROR_SOURCE_DESCRIPTOR
|
|
|
|
typedef union _WHEA_NOTIFICATION_FLAGS {
|
|
struct {
|
|
USHORT PollIntervalRW:1;
|
|
USHORT SwitchToPollingThresholdRW:1;
|
|
USHORT SwitchToPollingWindowRW:1;
|
|
USHORT ErrorThresholdRW:1;
|
|
USHORT ErrorThresholdWindowRW:1;
|
|
USHORT Reserved:11;
|
|
} DUMMYSTRUCTNAME;
|
|
USHORT AsUSHORT;
|
|
} WHEA_NOTIFICATION_FLAGS, *PWHEA_NOTIFICATION_FLAGS;
|
|
|
|
typedef union _XPF_MC_BANK_FLAGS {
|
|
struct {
|
|
UCHAR ClearOnInitializationRW:1;
|
|
UCHAR ControlDataRW:1;
|
|
UCHAR Reserved:6;
|
|
} DUMMYSTRUCTNAME;
|
|
UCHAR AsUCHAR;
|
|
} XPF_MC_BANK_FLAGS, *PXPF_MC_BANK_FLAGS;
|
|
|
|
typedef union _XPF_MCE_FLAGS {
|
|
struct {
|
|
ULONG MCG_CapabilityRW:1;
|
|
ULONG MCG_GlobalControlRW:1;
|
|
ULONG Reserved:30;
|
|
} DUMMYSTRUCTNAME;
|
|
ULONG AsULONG;
|
|
} XPF_MCE_FLAGS, *PXPF_MCE_FLAGS;
|
|
|
|
typedef union _AER_ROOTPORT_DESCRIPTOR_FLAGS {
|
|
struct {
|
|
USHORT UncorrectableErrorMaskRW:1;
|
|
USHORT UncorrectableErrorSeverityRW:1;
|
|
USHORT CorrectableErrorMaskRW:1;
|
|
USHORT AdvancedCapsAndControlRW:1;
|
|
USHORT RootErrorCommandRW:1;
|
|
USHORT Reserved:11;
|
|
} DUMMYSTRUCTNAME;
|
|
USHORT AsUSHORT;
|
|
} AER_ROOTPORT_DESCRIPTOR_FLAGS, *PAER_ROOTPORT_DESCRIPTOR_FLAGS;
|
|
|
|
typedef union _AER_ENDPOINT_DESCRIPTOR_FLAGS {
|
|
struct {
|
|
USHORT UncorrectableErrorMaskRW:1;
|
|
USHORT UncorrectableErrorSeverityRW:1;
|
|
USHORT CorrectableErrorMaskRW:1;
|
|
USHORT AdvancedCapsAndControlRW:1;
|
|
USHORT Reserved:12;
|
|
} DUMMYSTRUCTNAME;
|
|
USHORT AsUSHORT;
|
|
} AER_ENDPOINT_DESCRIPTOR_FLAGS, *PAER_ENDPOINT_DESCRIPTOR_FLAGS;
|
|
|
|
typedef union _AER_BRIDGE_DESCRIPTOR_FLAGS {
|
|
struct {
|
|
USHORT UncorrectableErrorMaskRW:1;
|
|
USHORT UncorrectableErrorSeverityRW:1;
|
|
USHORT CorrectableErrorMaskRW:1;
|
|
USHORT AdvancedCapsAndControlRW:1;
|
|
USHORT SecondaryUncorrectableErrorMaskRW:1;
|
|
USHORT SecondaryUncorrectableErrorSevRW:1;
|
|
USHORT SecondaryCapsAndControlRW:1;
|
|
USHORT Reserved:9;
|
|
} DUMMYSTRUCTNAME;
|
|
USHORT AsUSHORT;
|
|
} AER_BRIDGE_DESCRIPTOR_FLAGS, *PAER_BRIDGE_DESCRIPTOR_FLAGS;
|
|
|
|
//
|
|
// The following structure is used to describe how a given error source reports
|
|
// errors to the OS.
|
|
//
|
|
|
|
typedef struct _WHEA_NOTIFICATION_DESCRIPTOR {
|
|
UCHAR Type;
|
|
UCHAR Length;
|
|
WHEA_NOTIFICATION_FLAGS Flags;
|
|
|
|
union {
|
|
struct {
|
|
ULONG PollInterval;
|
|
} Polled;
|
|
|
|
struct {
|
|
ULONG PollInterval;
|
|
ULONG Vector;
|
|
ULONG SwitchToPollingThreshold;
|
|
ULONG SwitchToPollingWindow;
|
|
ULONG ErrorThreshold;
|
|
ULONG ErrorThresholdWindow;
|
|
} Interrupt;
|
|
|
|
struct {
|
|
ULONG PollInterval;
|
|
ULONG Vector;
|
|
ULONG SwitchToPollingThreshold;
|
|
ULONG SwitchToPollingWindow;
|
|
ULONG ErrorThreshold;
|
|
ULONG ErrorThresholdWindow;
|
|
} LocalInterrupt;
|
|
|
|
struct {
|
|
ULONG PollInterval;
|
|
ULONG Vector;
|
|
ULONG SwitchToPollingThreshold;
|
|
ULONG SwitchToPollingWindow;
|
|
ULONG ErrorThreshold;
|
|
ULONG ErrorThresholdWindow;
|
|
} Sci;
|
|
|
|
struct {
|
|
ULONG PollInterval;
|
|
ULONG Vector;
|
|
ULONG SwitchToPollingThreshold;
|
|
ULONG SwitchToPollingWindow;
|
|
ULONG ErrorThreshold;
|
|
ULONG ErrorThresholdWindow;
|
|
} Nmi;
|
|
} u;
|
|
} WHEA_NOTIFICATION_DESCRIPTOR, *PWHEA_NOTIFICATION_DESCRIPTOR;
|
|
|
|
//
|
|
// The following structure describes an XPF machine check bank. It identifies
|
|
// the bank with a BankNumber and it contains information that is used to
|
|
// configure the bank. MCE and CMC error sources make use of this descriptor
|
|
// to describe and configure each bank.
|
|
//
|
|
|
|
typedef struct _WHEA_XPF_MC_BANK_DESCRIPTOR {
|
|
UCHAR BankNumber;
|
|
BOOLEAN ClearOnInitialization;
|
|
UCHAR StatusDataFormat;
|
|
XPF_MC_BANK_FLAGS Flags;
|
|
ULONG ControlMsr;
|
|
ULONG StatusMsr;
|
|
ULONG AddressMsr;
|
|
ULONG MiscMsr;
|
|
ULONGLONG ControlData;
|
|
} WHEA_XPF_MC_BANK_DESCRIPTOR, *PWHEA_XPF_MC_BANK_DESCRIPTOR;
|
|
|
|
//
|
|
// The following structure describes an XPF platform's machine check exception
|
|
// error source mechanism. The information represented in this structure tells
|
|
// the OS how to configure the platform's MCE error source.
|
|
//
|
|
|
|
typedef struct _WHEA_XPF_MCE_DESCRIPTOR {
|
|
USHORT Type;
|
|
UCHAR Enabled;
|
|
UCHAR NumberOfBanks;
|
|
XPF_MCE_FLAGS Flags;
|
|
ULONGLONG MCG_Capability;
|
|
ULONGLONG MCG_GlobalControl;
|
|
WHEA_XPF_MC_BANK_DESCRIPTOR Banks[WHEA_MAX_MC_BANKS];
|
|
} WHEA_XPF_MCE_DESCRIPTOR, *PWHEA_XPF_MCE_DESCRIPTOR;
|
|
|
|
//
|
|
// The following structure describes an XPF platform's corrected machine check
|
|
// error source mechanism. The information represented in this structure tells
|
|
// the OS how to configure the platform's CMC error source.
|
|
//
|
|
|
|
typedef struct _WHEA_XPF_CMC_DESCRIPTOR {
|
|
USHORT Type;
|
|
BOOLEAN Enabled;
|
|
UCHAR NumberOfBanks;
|
|
ULONG Reserved;
|
|
WHEA_NOTIFICATION_DESCRIPTOR Notify;
|
|
WHEA_XPF_MC_BANK_DESCRIPTOR Banks[WHEA_MAX_MC_BANKS];
|
|
} WHEA_XPF_CMC_DESCRIPTOR, *PWHEA_XPF_CMC_DESCRIPTOR;
|
|
|
|
typedef struct _WHEA_PCI_SLOT_NUMBER {
|
|
union {
|
|
struct {
|
|
ULONG DeviceNumber:5;
|
|
ULONG FunctionNumber:3;
|
|
ULONG Reserved:24;
|
|
} bits;
|
|
ULONG AsULONG;
|
|
} u;
|
|
} WHEA_PCI_SLOT_NUMBER, *PWHEA_PCI_SLOT_NUMBER;
|
|
|
|
//
|
|
// The following structure describes an XPF platform's non-maskable interrupt
|
|
// error source mechanism. The information represented in this structure tells
|
|
// the OS how to configure the platform's NMI error source.
|
|
//
|
|
|
|
typedef struct _WHEA_XPF_NMI_DESCRIPTOR {
|
|
USHORT Type;
|
|
BOOLEAN Enabled;
|
|
} WHEA_XPF_NMI_DESCRIPTOR, *PWHEA_XPF_NMI_DESCRIPTOR;
|
|
|
|
//
|
|
// The following structure describes a platform's PCI Express AER root port
|
|
// error source. The information represented in this structure tells the OS how
|
|
// to configure the root port's AER settings.
|
|
//
|
|
|
|
typedef struct _WHEA_AER_ROOTPORT_DESCRIPTOR {
|
|
USHORT Type;
|
|
BOOLEAN Enabled;
|
|
UCHAR Reserved;
|
|
ULONG BusNumber;
|
|
WHEA_PCI_SLOT_NUMBER Slot;
|
|
USHORT DeviceControl;
|
|
AER_ROOTPORT_DESCRIPTOR_FLAGS Flags;
|
|
ULONG UncorrectableErrorMask;
|
|
ULONG UncorrectableErrorSeverity;
|
|
ULONG CorrectableErrorMask;
|
|
ULONG AdvancedCapsAndControl;
|
|
ULONG RootErrorCommand;
|
|
} WHEA_AER_ROOTPORT_DESCRIPTOR, *PWHEA_AER_ROOTPORT_DESCRIPTOR;
|
|
|
|
//
|
|
// The following structure describes a platform's PCI Express AER endpoint
|
|
// error source. The information represented in this structure tells the OS how
|
|
// to configure the device's AER settings.
|
|
//
|
|
|
|
typedef struct _WHEA_AER_ENDPOINT_DESCRIPTOR {
|
|
USHORT Type;
|
|
BOOLEAN Enabled;
|
|
UCHAR Reserved;
|
|
ULONG BusNumber;
|
|
WHEA_PCI_SLOT_NUMBER Slot;
|
|
USHORT DeviceControl;
|
|
AER_ENDPOINT_DESCRIPTOR_FLAGS Flags;
|
|
ULONG UncorrectableErrorMask;
|
|
ULONG UncorrectableErrorSeverity;
|
|
ULONG CorrectableErrorMask;
|
|
ULONG AdvancedCapsAndControl;
|
|
} WHEA_AER_ENDPOINT_DESCRIPTOR, *PWHEA_AER_ENDPOINT_DESCRIPTOR;
|
|
|
|
//
|
|
// The following structure describes a platform's PCI Express AER bridge
|
|
// error source. The information represented in this structure tells the OS how
|
|
// to configure the bridge's AER settings.
|
|
//
|
|
|
|
typedef struct _WHEA_AER_BRIDGE_DESCRIPTOR {
|
|
USHORT Type;
|
|
BOOLEAN Enabled;
|
|
UCHAR Reserved;
|
|
ULONG BusNumber;
|
|
WHEA_PCI_SLOT_NUMBER Slot;
|
|
USHORT DeviceControl;
|
|
AER_BRIDGE_DESCRIPTOR_FLAGS Flags;
|
|
ULONG UncorrectableErrorMask;
|
|
ULONG UncorrectableErrorSeverity;
|
|
ULONG CorrectableErrorMask;
|
|
ULONG AdvancedCapsAndControl;
|
|
ULONG SecondaryUncorrectableErrorMask;
|
|
ULONG SecondaryUncorrectableErrorSev;
|
|
ULONG SecondaryCapsAndControl;
|
|
} WHEA_AER_BRIDGE_DESCRIPTOR, *PWHEA_AER_BRIDGE_DESCRIPTOR;
|
|
|
|
//
|
|
// The following structure describes a generic error source to the OS. Using
|
|
// the information in this structure the OS is able to configure a handler for
|
|
// the generic error source.
|
|
//
|
|
|
|
typedef struct _WHEA_GENERIC_ERROR_DESCRIPTOR {
|
|
|
|
//
|
|
// Type is WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_GENERIC.
|
|
//
|
|
|
|
USHORT Type;
|
|
|
|
//
|
|
// This field is reserved.
|
|
//
|
|
|
|
UCHAR Reserved;
|
|
|
|
//
|
|
// Indicates whether the generic error source is to be enabled.
|
|
//
|
|
|
|
UCHAR Enabled;
|
|
|
|
//
|
|
// Length of the error status block.
|
|
//
|
|
|
|
ULONG ErrStatusBlockLength;
|
|
|
|
//
|
|
// If this generic error source relates back to another error source, keep
|
|
// it's identifier here.
|
|
//
|
|
|
|
ULONG RelatedErrorSourceId;
|
|
|
|
//
|
|
// The following 5 fields have the same layout as a GEN_ADDR structure. They
|
|
// describe the address at which the OS reads error status information
|
|
// from the error source.
|
|
//
|
|
|
|
UCHAR ErrStatusAddressSpaceID;
|
|
UCHAR ErrStatusAddressBitWidth;
|
|
UCHAR ErrStatusAddressBitOffset;
|
|
UCHAR ErrStatusAddressAccessSize;
|
|
WHEA_PHYSICAL_ADDRESS ErrStatusAddress;
|
|
|
|
//
|
|
// Notify describes how the generic error source notifies the OS that error
|
|
// information is available.
|
|
//
|
|
|
|
WHEA_NOTIFICATION_DESCRIPTOR Notify;
|
|
|
|
} WHEA_GENERIC_ERROR_DESCRIPTOR, *PWHEA_GENERIC_ERROR_DESCRIPTOR;
|
|
|
|
typedef struct _WHEA_IPF_MCA_DESCRIPTOR {
|
|
USHORT Type;
|
|
UCHAR Enabled;
|
|
UCHAR Reserved;
|
|
} WHEA_IPF_MCA_DESCRIPTOR, *PWHEA_IPF_MCA_DESCRIPTOR;
|
|
|
|
typedef struct _WHEA_IPF_CMC_DESCRIPTOR {
|
|
USHORT Type;
|
|
UCHAR Enabled;
|
|
UCHAR Reserved;
|
|
} WHEA_IPF_CMC_DESCRIPTOR, *PWHEA_IPF_CMC_DESCRIPTOR;
|
|
|
|
typedef struct _WHEA_IPF_CPE_DESCRIPTOR {
|
|
USHORT Type;
|
|
UCHAR Enabled;
|
|
UCHAR Reserved;
|
|
} WHEA_IPF_CPE_DESCRIPTOR, *PWHEA_IPF_CPE_DESCRIPTOR;
|
|
|
|
typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR {
|
|
ULONG Length; // +00 (0)
|
|
ULONG Version; // +04 (4)
|
|
WHEA_ERROR_SOURCE_TYPE Type; // +08 (8)
|
|
WHEA_ERROR_SOURCE_STATE State; // +0C (12)
|
|
ULONG MaxRawDataLength; // +10 (16)
|
|
ULONG NumRecordsToPreallocate; // +14 (20)
|
|
ULONG MaxSectionsPerRecord; // +18 (24)
|
|
ULONG ErrorSourceId; // +1C (28)
|
|
ULONG PlatformErrorSourceId; // +20 (32)
|
|
ULONG Flags; // +24 (36)
|
|
|
|
union { // +28 (40)
|
|
WHEA_XPF_MCE_DESCRIPTOR XpfMceDescriptor;
|
|
WHEA_XPF_CMC_DESCRIPTOR XpfCmcDescriptor;
|
|
WHEA_XPF_NMI_DESCRIPTOR XpfNmiDescriptor;
|
|
WHEA_IPF_MCA_DESCRIPTOR IpfMcaDescriptor;
|
|
WHEA_IPF_CMC_DESCRIPTOR IpfCmcDescriptor;
|
|
WHEA_IPF_CPE_DESCRIPTOR IpfCpeDescriptor;
|
|
WHEA_AER_ROOTPORT_DESCRIPTOR AerRootportDescriptor;
|
|
WHEA_AER_ENDPOINT_DESCRIPTOR AerEndpointDescriptor;
|
|
WHEA_AER_BRIDGE_DESCRIPTOR AerBridgeDescriptor;
|
|
WHEA_GENERIC_ERROR_DESCRIPTOR GenErrDescriptor;
|
|
} Info;
|
|
|
|
} WHEA_ERROR_SOURCE_DESCRIPTOR, *PWHEA_ERROR_SOURCE_DESCRIPTOR;
|
|
|
|
#include <poppack.h>
|
|
|
|
#endif // #ifndef _WHEADEF_H_
|
|
|
|
|