]> Pileus Git - ~andy/linux/blob - include/asm-x86_64/nmi.h
8f02a2a416e693e424977b4f996932af82aeb44f
[~andy/linux] / include / asm-x86_64 / nmi.h
1 /*
2  *  linux/include/asm-i386/nmi.h
3  */
4 #ifndef ASM_NMI_H
5 #define ASM_NMI_H
6
7 #include <linux/pm.h>
8 #include <asm/io.h>
9  
10 struct pt_regs;
11
12 typedef int (*nmi_callback_t)(struct pt_regs * regs, int cpu);
13
14 /**
15  * set_nmi_callback
16  *
17  * Set a handler for an NMI. Only one handler may be
18  * set. Return 1 if the NMI was handled.
19  */
20 void set_nmi_callback(nmi_callback_t callback);
21
22 /**
23  * unset_nmi_callback
24  *
25  * Remove the handler previously set.
26  */
27 void unset_nmi_callback(void);
28
29 /**
30  * do_nmi_callback
31  *
32  * Check to see if a callback exists and execute it.  Return 1
33  * if the handler exists and was handled successfully.
34  */
35 int do_nmi_callback(struct pt_regs *regs, int cpu);
36
37 #ifdef CONFIG_PM
38  
39 /** Replace the PM callback routine for NMI. */
40 struct pm_dev * set_nmi_pm_callback(pm_callback callback);
41
42 /** Unset the PM callback routine back to the default. */
43 void unset_nmi_pm_callback(struct pm_dev * dev);
44
45 #else
46
47 static inline struct pm_dev * set_nmi_pm_callback(pm_callback callback)
48 {
49         return 0;
50
51  
52 static inline void unset_nmi_pm_callback(struct pm_dev * dev)
53 {
54 }
55
56 #endif /* CONFIG_PM */
57  
58 extern void default_do_nmi(struct pt_regs *);
59 extern void die_nmi(char *str, struct pt_regs *regs);
60
61 #define get_nmi_reason() inb(0x61)
62
63 extern int panic_on_timeout;
64 extern int unknown_nmi_panic;
65
66 extern int check_nmi_watchdog(void);
67 extern int avail_to_resrv_perfctr_nmi_bit(unsigned int);
68 extern int avail_to_resrv_perfctr_nmi(unsigned int);
69 extern int reserve_perfctr_nmi(unsigned int);
70 extern void release_perfctr_nmi(unsigned int);
71 extern int reserve_evntsel_nmi(unsigned int);
72 extern void release_evntsel_nmi(unsigned int);
73
74 extern void setup_apic_nmi_watchdog (void *);
75 extern int reserve_lapic_nmi(void);
76 extern void release_lapic_nmi(void);
77 extern void disable_timer_nmi_watchdog(void);
78 extern void enable_timer_nmi_watchdog(void);
79 extern int nmi_watchdog_tick (struct pt_regs * regs, unsigned reason);
80
81 extern void nmi_watchdog_default(void);
82 extern int setup_nmi_watchdog(char *);
83
84 extern atomic_t nmi_active;
85 extern unsigned int nmi_watchdog;
86 #define NMI_DEFAULT     -1
87 #define NMI_NONE        0
88 #define NMI_IO_APIC     1
89 #define NMI_LOCAL_APIC  2
90 #define NMI_INVALID     3
91
92 #endif /* ASM_NMI_H */