Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
mach_traps.h
Go to the documentation of this file.
1 /*
2  * Machine specific NMI handling for generic.
3  * Split out from traps.c by Osamu Tomita <[email protected]>
4  */
5 #ifndef _ASM_X86_MACH_DEFAULT_MACH_TRAPS_H
6 #define _ASM_X86_MACH_DEFAULT_MACH_TRAPS_H
7 
8 #include <asm/mc146818rtc.h>
9 
10 #define NMI_REASON_PORT 0x61
11 
12 #define NMI_REASON_SERR 0x80
13 #define NMI_REASON_IOCHK 0x40
14 #define NMI_REASON_MASK (NMI_REASON_SERR | NMI_REASON_IOCHK)
15 
16 #define NMI_REASON_CLEAR_SERR 0x04
17 #define NMI_REASON_CLEAR_IOCHK 0x08
18 #define NMI_REASON_CLEAR_MASK 0x0f
19 
20 static inline unsigned char default_get_nmi_reason(void)
21 {
22  return inb(NMI_REASON_PORT);
23 }
24 
25 static inline void reassert_nmi(void)
26 {
27  int old_reg = -1;
28 
29  if (do_i_have_lock_cmos())
30  old_reg = current_lock_cmos_reg();
31  else
32  lock_cmos(0); /* register doesn't matter here */
33  outb(0x8f, 0x70);
34  inb(0x71); /* dummy */
35  outb(0x0f, 0x70);
36  inb(0x71); /* dummy */
37  if (old_reg >= 0)
38  outb(old_reg, 0x70);
39  else
40  unlock_cmos();
41 }
42 
43 #endif /* _ASM_X86_MACH_DEFAULT_MACH_TRAPS_H */