/* SPDX-License-Identifier: GPL-2.0 */ 
 | 
/* 
 | 
 *  Machine specific NMI handling for generic. 
 | 
 *  Split out from traps.c by Osamu Tomita <tomita@cinet.co.jp> 
 | 
 */ 
 | 
#ifndef _ASM_X86_MACH_DEFAULT_MACH_TRAPS_H 
 | 
#define _ASM_X86_MACH_DEFAULT_MACH_TRAPS_H 
 | 
  
 | 
#include <asm/mc146818rtc.h> 
 | 
  
 | 
#define NMI_REASON_PORT        0x61 
 | 
  
 | 
#define NMI_REASON_SERR        0x80 
 | 
#define NMI_REASON_IOCHK    0x40 
 | 
#define NMI_REASON_MASK        (NMI_REASON_SERR | NMI_REASON_IOCHK) 
 | 
  
 | 
#define NMI_REASON_CLEAR_SERR    0x04 
 | 
#define NMI_REASON_CLEAR_IOCHK    0x08 
 | 
#define NMI_REASON_CLEAR_MASK    0x0f 
 | 
  
 | 
static inline unsigned char default_get_nmi_reason(void) 
 | 
{ 
 | 
    return inb(NMI_REASON_PORT); 
 | 
} 
 | 
  
 | 
static inline void reassert_nmi(void) 
 | 
{ 
 | 
    int old_reg = -1; 
 | 
  
 | 
    if (do_i_have_lock_cmos()) 
 | 
        old_reg = current_lock_cmos_reg(); 
 | 
    else 
 | 
        lock_cmos(0); /* register doesn't matter here */ 
 | 
    outb(0x8f, 0x70); 
 | 
    inb(0x71);        /* dummy */ 
 | 
    outb(0x0f, 0x70); 
 | 
    inb(0x71);        /* dummy */ 
 | 
    if (old_reg >= 0) 
 | 
        outb(old_reg, 0x70); 
 | 
    else 
 | 
        unlock_cmos(); 
 | 
} 
 | 
  
 | 
#endif /* _ASM_X86_MACH_DEFAULT_MACH_TRAPS_H */ 
 |