mce.h
001: #ifndef _ASM_X86_MCE_H
002: #define _ASM_X86_MCE_H
003:
004: #include <linux/types.h>
005: #include <asm/ioctls.h>
006:
007:
008:
009:
010:
011:
012: #define MCG_BANKCNT_MASK 0xff
013: #define MCG_CTL_P (1ULL<<8)
014: #define MCG_EXT_P (1ULL<<9)
015: #define MCG_CMCI_P (1ULL<<10)
016: #define MCG_EXT_CNT_MASK 0xff0000
017: #define MCG_EXT_CNT_SHIFT 16
018: #define MCG_EXT_CNT(c) (((c) & MCG_EXT_CNT_MASK) >> MCG_EXT_CNT_SHIFT)
019: #define MCG_SER_P (1ULL<<24)
020:
021:
022: #define MCG_STATUS_RIPV (1ULL<<0)
023: #define MCG_STATUS_EIPV (1ULL<<1)
024: #define MCG_STATUS_MCIP (1ULL<<2)
025:
026:
027: #define MCI_STATUS_VAL (1ULL<<63)
028: #define MCI_STATUS_OVER (1ULL<<62)
029: #define MCI_STATUS_UC (1ULL<<61)
030: #define MCI_STATUS_EN (1ULL<<60)
031: #define MCI_STATUS_MISCV (1ULL<<59)
032: #define MCI_STATUS_ADDRV (1ULL<<58)
033: #define MCI_STATUS_PCC (1ULL<<57)
034: #define MCI_STATUS_S (1ULL<<56)
035: #define MCI_STATUS_AR (1ULL<<55)
036:
037:
038: #define MCI_MISC_ADDR_LSB(m) ((m) & 0x3f)
039: #define MCI_MISC_ADDR_MODE(m) (((m) >> 6) & 7)
040: #define MCI_MISC_ADDR_SEGOFF 0
041: #define MCI_MISC_ADDR_LINEAR 1
042: #define MCI_MISC_ADDR_PHYS 2
043: #define MCI_MISC_ADDR_MEM 3
044: #define MCI_MISC_ADDR_GENERIC 7
045:
046:
047: #define MCI_CTL2_CMCI_EN (1ULL << 30)
048: #define MCI_CTL2_CMCI_THRESHOLD_MASK 0x7fffULL
049:
050: #define MCJ_CTX_MASK 3
051: #define MCJ_CTX(flags) ((flags) & MCJ_CTX_MASK)
052: #define MCJ_CTX_RANDOM 0
053: #define MCJ_CTX_PROCESS 1
054: #define MCJ_CTX_IRQ 2
055: #define MCJ_NMI_BROADCAST 4
056: #define MCJ_EXCEPTION 8
057:
058:
059: struct mce {
060: __u64 status;
061: __u64 misc;
062: __u64 addr;
063: __u64 mcgstatus;
064: __u64 ip;
065: __u64 tsc;
066: __u64 time;
067: __u8 cpuvendor;
068: __u8 inject_flags;
069: __u16 pad;
070: __u32 cpuid;
071: __u8 cs;
072: __u8 bank;
073: __u8 cpu;
074: __u8 finished;
075: __u32 extcpu;
076: __u32 socketid;
077: __u32 apicid;
078: __u64 mcgcap;
079: __u64 aux0;
080: __u64 aux1;
081: };
082:
083:
084:
085:
086:
087:
088:
089:
090: #define MCE_LOG_LEN 32
091:
092: struct mce_log {
093: char signature[12];
094: unsigned len;
095: unsigned next;
096: unsigned flags;
097: unsigned recordlen;
098: struct mce entry[MCE_LOG_LEN];
099: };
100:
101: #define MCE_OVERFLOW 0
102:
103: #define MCE_LOG_SIGNATURE "MACHINECHECK"
104:
105: #define MCE_GET_RECORD_LEN _IOR('M', 1, int)
106: #define MCE_GET_LOG_LEN _IOR('M', 2, int)
107: #define MCE_GETCLEAR_FLAGS _IOR('M', 3, int)
108:
109:
110: #define MCE_EXTENDED_BANK 128
111: #define MCE_THERMAL_BANK MCE_EXTENDED_BANK + 0
112:
113: #define K8_MCE_THRESHOLD_BASE (MCE_EXTENDED_BANK + 1)
114: #define K8_MCE_THRESHOLD_BANK_0 (MCE_THRESHOLD_BASE + 0 * 9)
115: #define K8_MCE_THRESHOLD_BANK_1 (MCE_THRESHOLD_BASE + 1 * 9)
116: #define K8_MCE_THRESHOLD_BANK_2 (MCE_THRESHOLD_BASE + 2 * 9)
117: #define K8_MCE_THRESHOLD_BANK_3 (MCE_THRESHOLD_BASE + 3 * 9)
118: #define K8_MCE_THRESHOLD_BANK_4 (MCE_THRESHOLD_BASE + 4 * 9)
119: #define K8_MCE_THRESHOLD_BANK_5 (MCE_THRESHOLD_BASE + 5 * 9)
120: #define K8_MCE_THRESHOLD_DRAM_ECC (MCE_THRESHOLD_BANK_4 + 0)
121:
122:
123: #endif
124:
© Andrew Scott 2006 -
2025,
All Rights Reserved