Merge branch 'pm-cpufreq'
[linux-2.6-block.git] / arch / x86 / kernel / cpu / mcheck / mce-internal.h
CommitLineData
8a25a2fd 1#include <linux/device.h>
817f32d0
AK
2#include <asm/mce.h>
3
4enum severity_level {
5 MCE_NO_SEVERITY,
e3480271
CY
6 MCE_DEFERRED_SEVERITY,
7 MCE_UCNA_SEVERITY = MCE_DEFERRED_SEVERITY,
ed7290d0 8 MCE_KEEP_SEVERITY,
817f32d0 9 MCE_SOME_SEVERITY,
ed7290d0 10 MCE_AO_SEVERITY,
817f32d0 11 MCE_UC_SEVERITY,
ed7290d0 12 MCE_AR_SEVERITY,
817f32d0
AK
13 MCE_PANIC_SEVERITY,
14};
15
648ed940
CG
16extern struct atomic_notifier_head x86_mce_decoder_chain;
17
cebe1820 18#define ATTR_LEN 16
3f2f0680 19#define INITIAL_CHECK_INTERVAL 5 * 60 /* 5 minutes */
cebe1820
AK
20
21/* One object for each MCE bank, shared by all CPUs */
22struct mce_bank {
23 u64 ctl; /* subevents to enable */
24 unsigned char init; /* initialise bank? */
8a25a2fd 25 struct device_attribute attr; /* device attribute */
cebe1820
AK
26 char attrname[ATTR_LEN]; /* attribute name */
27};
28
648ed940
CG
29struct mce_evt_llist {
30 struct llist_node llnode;
31 struct mce mce;
32};
33
34void mce_gen_pool_process(void);
35bool mce_gen_pool_empty(void);
36int mce_gen_pool_add(struct mce *mce);
37int mce_gen_pool_init(void);
38
43eaa2a1 39extern int (*mce_severity)(struct mce *a, int tolerant, char **msg, bool is_excp);
5be9ed25 40struct dentry *mce_get_debugfs_dir(void);
ed7290d0 41
cebe1820 42extern struct mce_bank *mce_banks;
c3d1fb56 43extern mce_banks_t mce_banks_ce_disabled;
cebe1820 44
55babd8f 45#ifdef CONFIG_X86_MCE_INTEL
3f2f0680
BP
46unsigned long cmci_intel_adjust_timer(unsigned long interval);
47bool mce_intel_cmci_poll(void);
55babd8f 48void mce_intel_hcpu_update(unsigned long cpu);
c3d1fb56 49void cmci_disable_bank(int bank);
55babd8f 50#else
3f2f0680
BP
51# define cmci_intel_adjust_timer mce_adjust_timer_default
52static inline bool mce_intel_cmci_poll(void) { return false; }
55babd8f 53static inline void mce_intel_hcpu_update(unsigned long cpu) { }
c3d1fb56 54static inline void cmci_disable_bank(int bank) { }
55babd8f
CG
55#endif
56
57void mce_timer_kick(unsigned long interval);
58
482908b4
HY
59#ifdef CONFIG_ACPI_APEI
60int apei_write_mce(struct mce *m);
61ssize_t apei_read_mce(struct mce *m, u64 *record_id);
62int apei_check_mce(void);
63int apei_clear_mce(u64 record_id);
64#else
65static inline int apei_write_mce(struct mce *m)
66{
67 return -EINVAL;
68}
69static inline ssize_t apei_read_mce(struct mce *m, u64 *record_id)
70{
71 return 0;
72}
73static inline int apei_check_mce(void)
74{
75 return 0;
76}
77static inline int apei_clear_mce(u64 record_id)
78{
79 return -EINVAL;
80}
81#endif
a79da384
BP
82
83void mce_inject_log(struct mce *m);