Blame view
arch/x86/include/asm/mce.h
7.77 KB
1965aae3c x86: Fix ASM_X86_... |
1 2 |
#ifndef _ASM_X86_MCE_H #define _ASM_X86_MCE_H |
e2f430291 x86: unify includ... |
3 |
|
999b697b9 headers_check fix... |
4 |
#include <linux/types.h> |
e2f430291 x86: unify includ... |
5 |
#include <asm/ioctls.h> |
e2f430291 x86: unify includ... |
6 7 8 9 |
/* * Machine Check support for x86 */ |
2b90e77ea x86, mce: Replace... |
10 |
/* MCG_CAP register defines */ |
01c6680a5 x86, mce: Cleanup... |
11 |
#define MCG_BANKCNT_MASK 0xff /* Number of Banks */ |
e48768399 x86, mce: fix typ... |
12 |
#define MCG_CTL_P (1ULL<<8) /* MCG_CTL register available */ |
01c6680a5 x86, mce: Cleanup... |
13 14 15 16 17 |
#define MCG_EXT_P (1ULL<<9) /* Extended registers available */ #define MCG_CMCI_P (1ULL<<10) /* CMCI supported */ #define MCG_EXT_CNT_MASK 0xff0000 /* Number of Extended registers */ #define MCG_EXT_CNT_SHIFT 16 #define MCG_EXT_CNT(c) (((c) & MCG_EXT_CNT_MASK) >> MCG_EXT_CNT_SHIFT) |
ed7290d0e x86, mce: impleme... |
18 |
#define MCG_SER_P (1ULL<<24) /* MCA recovery/new status bits */ |
e2f430291 x86: unify includ... |
19 |
|
2b90e77ea x86, mce: Replace... |
20 |
/* MCG_STATUS register defines */ |
06b851d98 x86, mce: unify, ... |
21 22 23 |
#define MCG_STATUS_RIPV (1ULL<<0) /* restart ip valid */ #define MCG_STATUS_EIPV (1ULL<<1) /* ip points to correct instruction */ #define MCG_STATUS_MCIP (1ULL<<2) /* machine check in progress */ |
e2f430291 x86: unify includ... |
24 |
|
2b90e77ea x86, mce: Replace... |
25 |
/* MCi_STATUS register defines */ |
06b851d98 x86, mce: unify, ... |
26 27 28 29 30 31 32 |
#define MCI_STATUS_VAL (1ULL<<63) /* valid error */ #define MCI_STATUS_OVER (1ULL<<62) /* previous errors lost */ #define MCI_STATUS_UC (1ULL<<61) /* uncorrected error */ #define MCI_STATUS_EN (1ULL<<60) /* error enabled */ #define MCI_STATUS_MISCV (1ULL<<59) /* misc error reg. valid */ #define MCI_STATUS_ADDRV (1ULL<<58) /* addr reg. valid */ #define MCI_STATUS_PCC (1ULL<<57) /* processor context corrupt */ |
ed7290d0e x86, mce: impleme... |
33 34 |
#define MCI_STATUS_S (1ULL<<56) /* Signaled machine check */ #define MCI_STATUS_AR (1ULL<<55) /* Action required */ |
2b90e77ea x86, mce: Replace... |
35 36 37 38 39 40 41 42 |
/* MCi_MISC register defines */ #define MCI_MISC_ADDR_LSB(m) ((m) & 0x3f) #define MCI_MISC_ADDR_MODE(m) (((m) >> 6) & 7) #define MCI_MISC_ADDR_SEGOFF 0 /* segment offset */ #define MCI_MISC_ADDR_LINEAR 1 /* linear address */ #define MCI_MISC_ADDR_PHYS 2 /* physical address */ #define MCI_MISC_ADDR_MEM 3 /* memory address */ #define MCI_MISC_ADDR_GENERIC 7 /* generic */ |
e2f430291 x86: unify includ... |
43 |
|
1f9a0bd49 x86, mce: Rename ... |
44 45 |
/* CTL2 register defines */ #define MCI_CTL2_CMCI_EN (1ULL << 30) |
3c4175886 x86, mce: Fix MSR... |
46 |
#define MCI_CTL2_CMCI_THRESHOLD_MASK 0x7fffULL |
1f9a0bd49 x86, mce: Rename ... |
47 |
|
5b7e88edc x86, mce: Support... |
48 49 50 |
#define MCJ_CTX_MASK 3 #define MCJ_CTX(flags) ((flags) & MCJ_CTX_MASK) #define MCJ_CTX_RANDOM 0 /* inject context: random */ |
2c29d9dd5 x86: add IRQ cont... |
51 52 53 54 55 |
#define MCJ_CTX_PROCESS 0x1 /* inject context: process */ #define MCJ_CTX_IRQ 0x2 /* inject context: IRQ */ #define MCJ_NMI_BROADCAST 0x4 /* do NMI broadcasting */ #define MCJ_EXCEPTION 0x8 /* raise as exception */ #define MCJ_IRQ_BRAODCAST 0x10 /* do IRQ broadcasting */ |
5b7e88edc x86, mce: Support... |
56 |
|
e2f430291 x86: unify includ... |
57 58 59 60 61 62 |
/* Fields are zero when not available */ struct mce { __u64 status; __u64 misc; __u64 addr; __u64 mcgstatus; |
65ea5b034 x86: rename the s... |
63 |
__u64 ip; |
e2f430291 x86: unify includ... |
64 |
__u64 tsc; /* cpu time stamp counter */ |
8ee08347c x86, mce: extend ... |
65 66 |
__u64 time; /* wall time_t when error was detected */ __u8 cpuvendor; /* cpu vendor as encoded in system.h */ |
5b7e88edc x86, mce: Support... |
67 68 |
__u8 inject_flags; /* software inject flags */ __u16 pad; |
8ee08347c x86, mce: extend ... |
69 |
__u32 cpuid; /* CPUID 1 EAX */ |
e2f430291 x86: unify includ... |
70 71 |
__u8 cs; /* code segment */ __u8 bank; /* machine check bank */ |
d620c67fb x86, mce: support... |
72 |
__u8 cpu; /* cpu number; obsolete; use extcpu now */ |
e2f430291 x86: unify includ... |
73 |
__u8 finished; /* entry is valid */ |
d620c67fb x86, mce: support... |
74 |
__u32 extcpu; /* linux cpu number that detected the error */ |
8ee08347c x86, mce: extend ... |
75 76 77 |
__u32 socketid; /* CPU socket ID */ __u32 apicid; /* CPU initial apic ID */ __u64 mcgcap; /* MCGCAP MSR: machine check capabilities of CPU */ |
e2f430291 x86: unify includ... |
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
}; /* * This structure contains all data related to the MCE log. Also * carries a signature to make it easier to find from external * debugging tools. Each entry is only valid when its finished flag * is set. */ #define MCE_LOG_LEN 32 struct mce_log { char signature[12]; /* "MACHINECHECK" */ unsigned len; /* = MCE_LOG_LEN */ unsigned next; unsigned flags; |
f6fb0ac08 x86, mce: store r... |
94 |
unsigned recordlen; /* length of struct mce */ |
e2f430291 x86: unify includ... |
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
struct mce entry[MCE_LOG_LEN]; }; #define MCE_OVERFLOW 0 /* bit 0 in flags means overflow */ #define MCE_LOG_SIGNATURE "MACHINECHECK" #define MCE_GET_RECORD_LEN _IOR('M', 1, int) #define MCE_GET_LOG_LEN _IOR('M', 2, int) #define MCE_GETCLEAR_FLAGS _IOR('M', 3, int) /* Software defined banks */ #define MCE_EXTENDED_BANK 128 #define MCE_THERMAL_BANK MCE_EXTENDED_BANK + 0 #define K8_MCE_THRESHOLD_BASE (MCE_EXTENDED_BANK + 1) /* MCE_AMD */ #define K8_MCE_THRESHOLD_BANK_0 (MCE_THRESHOLD_BASE + 0 * 9) #define K8_MCE_THRESHOLD_BANK_1 (MCE_THRESHOLD_BASE + 1 * 9) #define K8_MCE_THRESHOLD_BANK_2 (MCE_THRESHOLD_BASE + 2 * 9) #define K8_MCE_THRESHOLD_BANK_3 (MCE_THRESHOLD_BASE + 3 * 9) #define K8_MCE_THRESHOLD_BANK_4 (MCE_THRESHOLD_BASE + 4 * 9) #define K8_MCE_THRESHOLD_BANK_5 (MCE_THRESHOLD_BASE + 5 * 9) #define K8_MCE_THRESHOLD_DRAM_ECC (MCE_THRESHOLD_BANK_4 + 0) |
fb2531953 mce, edac: Use an... |
118 |
|
e2f430291 x86: unify includ... |
119 |
#ifdef __KERNEL__ |
3653ada5d x86, mce: Add wra... |
120 121 |
extern void mce_register_decode_chain(struct notifier_block *nb); extern void mce_unregister_decode_chain(struct notifier_block *nb); |
df39a2e48 x86: mce.h: Fix w... |
122 |
|
9e55e44e3 x86, mce: unify m... |
123 124 |
#include <linux/percpu.h> #include <linux/init.h> |
60063497a atomic: use <linu... |
125 |
#include <linux/atomic.h> |
9e55e44e3 x86, mce: unify m... |
126 |
|
e2f430291 x86: unify includ... |
127 |
extern int mce_disabled; |
c69783698 x86, mce: make mc... |
128 |
extern int mce_p5_enabled; |
e2f430291 x86: unify includ... |
129 |
|
58995d2d5 x86, mce: mce.h c... |
130 |
#ifdef CONFIG_X86_MCE |
a2202aa29 x86: Under BIOS c... |
131 |
int mcheck_init(void); |
5e09954a9 x86, mce: Fix up ... |
132 |
void mcheck_cpu_init(struct cpuinfo_x86 *c); |
58995d2d5 x86, mce: mce.h c... |
133 |
#else |
a2202aa29 x86: Under BIOS c... |
134 |
static inline int mcheck_init(void) { return 0; } |
5e09954a9 x86, mce: Fix up ... |
135 |
static inline void mcheck_cpu_init(struct cpuinfo_x86 *c) {} |
58995d2d5 x86, mce: mce.h c... |
136 |
#endif |
9e55e44e3 x86, mce: unify m... |
137 138 139 |
#ifdef CONFIG_X86_ANCIENT_MCE void intel_p5_mcheck_init(struct cpuinfo_x86 *c); void winchip_mcheck_init(struct cpuinfo_x86 *c); |
c69783698 x86, mce: make mc... |
140 |
static inline void enable_p5_mce(void) { mce_p5_enabled = 1; } |
9e55e44e3 x86, mce: unify m... |
141 142 143 |
#else static inline void intel_p5_mcheck_init(struct cpuinfo_x86 *c) {} static inline void winchip_mcheck_init(struct cpuinfo_x86 *c) {} |
c69783698 x86, mce: make mc... |
144 |
static inline void enable_p5_mce(void) {} |
9e55e44e3 x86, mce: unify m... |
145 |
#endif |
b5f2fa4ea x86, mce: factor ... |
146 |
void mce_setup(struct mce *m); |
e2f430291 x86: unify includ... |
147 |
void mce_log(struct mce *m); |
e032d8077 mce: fix warning ... |
148 |
extern struct device *mce_device[CONFIG_NR_CPUS]; |
e2f430291 x86: unify includ... |
149 |
|
41fdff322 x86, mce, cmci: e... |
150 |
/* |
3ccdccfad x86: mce: Lower m... |
151 152 153 |
* Maximum banks number. * This is the limit of the current register layout on * Intel CPUs. |
41fdff322 x86, mce, cmci: e... |
154 |
*/ |
3ccdccfad x86: mce: Lower m... |
155 |
#define MAX_NR_BANKS 32 |
41fdff322 x86, mce, cmci: e... |
156 |
|
e2f430291 x86: unify includ... |
157 |
#ifdef CONFIG_X86_MCE_INTEL |
62fdac591 x86, mce: Add boo... |
158 159 |
extern int mce_cmci_disabled; extern int mce_ignore_ce; |
e2f430291 x86: unify includ... |
160 |
void mce_intel_feature_init(struct cpuinfo_x86 *c); |
88ccbedd9 x86, mce, cmci: a... |
161 162 163 164 |
void cmci_clear(void); void cmci_reenable(void); void cmci_rediscover(int dying); void cmci_recheck(void); |
e2f430291 x86: unify includ... |
165 166 |
#else static inline void mce_intel_feature_init(struct cpuinfo_x86 *c) { } |
88ccbedd9 x86, mce, cmci: a... |
167 168 169 170 |
static inline void cmci_clear(void) {} static inline void cmci_reenable(void) {} static inline void cmci_rediscover(int dying) {} static inline void cmci_recheck(void) {} |
e2f430291 x86: unify includ... |
171 172 173 174 175 176 177 |
#endif #ifdef CONFIG_X86_MCE_AMD void mce_amd_feature_init(struct cpuinfo_x86 *c); #else static inline void mce_amd_feature_init(struct cpuinfo_x86 *c) { } #endif |
38736072d x86, mce: drop "e... |
178 |
int mce_available(struct cpuinfo_x86 *c); |
88ccbedd9 x86, mce, cmci: a... |
179 |
|
01ca79f14 x86, mce: add mac... |
180 |
DECLARE_PER_CPU(unsigned, mce_exception_count); |
ca84f6969 x86, mce: add MCE... |
181 |
DECLARE_PER_CPU(unsigned, mce_poll_count); |
01ca79f14 x86, mce: add mac... |
182 |
|
e2f430291 x86: unify includ... |
183 |
extern atomic_t mce_entry; |
ee031c31d x86, mce, cmci: u... |
184 185 |
typedef DECLARE_BITMAP(mce_banks_t, MAX_NR_BANKS); DECLARE_PER_CPU(mce_banks_t, mce_poll_banks); |
b79109c3b x86, mce: separat... |
186 187 188 |
enum mcp_flags { MCP_TIMESTAMP = (1 << 0), /* log time stamp */ MCP_UC = (1 << 1), /* log uncorrected errors */ |
5679af4c1 x86, mce: fix boo... |
189 |
MCP_DONTLOG = (1 << 2), /* only clear, don't log */ |
b79109c3b x86, mce: separat... |
190 |
}; |
38736072d x86, mce: drop "e... |
191 |
void machine_check_poll(enum mcp_flags flags, mce_banks_t *b); |
b79109c3b x86, mce: separat... |
192 |
|
9ff36ee96 x86, mce: rename ... |
193 |
int mce_notify_irq(void); |
9b1beaf2b x86, mce: support... |
194 |
void mce_notify_process(void); |
e2f430291 x86: unify includ... |
195 |
|
ea149b36c x86, mce: add bas... |
196 |
DECLARE_PER_CPU(struct mce, injectm); |
66f5ddf30 x86/mce: Make mce... |
197 198 199 200 |
extern void register_mce_write_callback(ssize_t (*)(struct file *filp, const char __user *ubuf, size_t usize, loff_t *off)); |
ea149b36c x86, mce: add bas... |
201 |
|
58995d2d5 x86, mce: mce.h c... |
202 203 204 205 206 207 208 209 210 211 212 |
/* * Exception handler */ /* Call the installed machine check handler for this CPU setup. */ extern void (*machine_check_vector)(struct pt_regs *, long error_code); void do_machine_check(struct pt_regs *, long); /* * Threshold handler */ |
e2f430291 x86: unify includ... |
213 |
|
b27626863 x86, mce, cmci: f... |
214 |
extern void (*mce_threshold_vector)(void); |
58995d2d5 x86, mce: mce.h c... |
215 |
extern void (*threshold_cpu_callback)(unsigned long action, unsigned int cpu); |
b27626863 x86, mce, cmci: f... |
216 |
|
e8ce2c5ee x86, mce: unify s... |
217 218 219 |
/* * Thermal handler */ |
e8ce2c5ee x86, mce: unify s... |
220 |
void intel_init_thermal(struct cpuinfo_x86 *c); |
e8ce2c5ee x86, mce: unify s... |
221 |
void mce_log_therm_throt_event(__u64 status); |
a2202aa29 x86: Under BIOS c... |
222 |
|
9e76a97ef x86, hwmon: Add c... |
223 224 |
/* Interrupt Handler for core thermal thresholds */ extern int (*platform_thermal_notify)(__u64 msr_val); |
a2202aa29 x86: Under BIOS c... |
225 226 227 228 229 |
#ifdef CONFIG_X86_THERMAL_VECTOR extern void mcheck_intel_therm_init(void); #else static inline void mcheck_intel_therm_init(void) { } #endif |
d334a4911 ACPI, APEI, Gener... |
230 231 232 233 234 235 236 |
/* * Used by APEI to report memory error via /dev/mcelog */ struct cper_sec_mem_err; extern void apei_mce_report_mem_error(int corrected, struct cper_sec_mem_err *mem_err); |
e2f430291 x86: unify includ... |
237 |
#endif /* __KERNEL__ */ |
1965aae3c x86: Fix ASM_X86_... |
238 |
#endif /* _ASM_X86_MCE_H */ |