]>
Commit | Line | Data |
---|---|---|
1965aae3 PA |
1 | #ifndef _ASM_X86_NMI_H |
2 | #define _ASM_X86_NMI_H | |
6d60cd53 GOC |
3 | |
4 | #include <linux/pm.h> | |
5 | #include <asm/irq.h> | |
6 | #include <asm/io.h> | |
7 | ||
4a7863cc | 8 | #ifdef CONFIG_X86_LOCAL_APIC |
6d60cd53 | 9 | |
6d60cd53 | 10 | extern int avail_to_resrv_perfctr_nmi_bit(unsigned int); |
6d60cd53 GOC |
11 | extern int reserve_perfctr_nmi(unsigned int); |
12 | extern void release_perfctr_nmi(unsigned int); | |
13 | extern int reserve_evntsel_nmi(unsigned int); | |
14 | extern void release_evntsel_nmi(unsigned int); | |
6d60cd53 | 15 | |
6d60cd53 | 16 | struct ctl_table; |
8d65af78 | 17 | extern int proc_nmi_enabled(struct ctl_table *, int , |
6d60cd53 GOC |
18 | void __user *, size_t *, loff_t *); |
19 | extern int unknown_nmi_panic; | |
20 | ||
47cab6a7 IM |
21 | void arch_trigger_all_cpu_backtrace(void); |
22 | #define arch_trigger_all_cpu_backtrace arch_trigger_all_cpu_backtrace | |
6d60cd53 GOC |
23 | #endif |
24 | ||
166d7514 DZ |
25 | /* |
26 | * Define some priorities for the nmi notifier call chain. | |
27 | * | |
28 | * Create a local nmi bit that has a higher priority than | |
29 | * external nmis, because the local ones are more frequent. | |
30 | * | |
31 | * Also setup some default high/normal/low settings for | |
0d2eb44f LDM |
32 | * subsystems to registers with. Using 4 bits to separate |
33 | * the priorities. This can go a lot higher if needed be. | |
166d7514 DZ |
34 | */ |
35 | ||
36 | #define NMI_LOCAL_SHIFT 16 /* randomly picked */ | |
37 | #define NMI_LOCAL_BIT (1ULL << NMI_LOCAL_SHIFT) | |
38 | #define NMI_HIGH_PRIOR (1ULL << 8) | |
39 | #define NMI_NORMAL_PRIOR (1ULL << 4) | |
40 | #define NMI_LOW_PRIOR (1ULL << 0) | |
41 | #define NMI_LOCAL_HIGH_PRIOR (NMI_LOCAL_BIT | NMI_HIGH_PRIOR) | |
42 | #define NMI_LOCAL_NORMAL_PRIOR (NMI_LOCAL_BIT | NMI_NORMAL_PRIOR) | |
43 | #define NMI_LOCAL_LOW_PRIOR (NMI_LOCAL_BIT | NMI_LOW_PRIOR) | |
44 | ||
c9126b2e DZ |
45 | #define NMI_FLAG_FIRST 1 |
46 | ||
47 | enum { | |
48 | NMI_LOCAL=0, | |
49 | NMI_UNKNOWN, | |
50 | NMI_MAX | |
51 | }; | |
52 | ||
53 | #define NMI_DONE 0 | |
54 | #define NMI_HANDLED 1 | |
55 | ||
56 | typedef int (*nmi_handler_t)(unsigned int, struct pt_regs *); | |
57 | ||
58 | int register_nmi_handler(unsigned int, nmi_handler_t, unsigned long, | |
59 | const char *); | |
60 | ||
61 | void unregister_nmi_handler(unsigned int, const char *); | |
62 | ||
6d60cd53 GOC |
63 | void stop_nmi(void); |
64 | void restart_nmi(void); | |
65 | ||
1965aae3 | 66 | #endif /* _ASM_X86_NMI_H */ |