linux/arch/x86/include/asm/mach_traps.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 *  Machine specific NMI handling for generic.
   4 *  Split out from traps.c by Osamu Tomita <tomita@cinet.co.jp>
   5 */
   6#ifndef _ASM_X86_MACH_DEFAULT_MACH_TRAPS_H
   7#define _ASM_X86_MACH_DEFAULT_MACH_TRAPS_H
   8
   9#include <asm/mc146818rtc.h>
  10
  11#define NMI_REASON_PORT         0x61
  12
  13#define NMI_REASON_SERR         0x80
  14#define NMI_REASON_IOCHK        0x40
  15#define NMI_REASON_MASK         (NMI_REASON_SERR | NMI_REASON_IOCHK)
  16
  17#define NMI_REASON_CLEAR_SERR   0x04
  18#define NMI_REASON_CLEAR_IOCHK  0x08
  19#define NMI_REASON_CLEAR_MASK   0x0f
  20
  21static inline unsigned char default_get_nmi_reason(void)
  22{
  23        return inb(NMI_REASON_PORT);
  24}
  25
  26static inline void reassert_nmi(void)
  27{
  28        int old_reg = -1;
  29
  30        if (do_i_have_lock_cmos())
  31                old_reg = current_lock_cmos_reg();
  32        else
  33                lock_cmos(0); /* register doesn't matter here */
  34        outb(0x8f, 0x70);
  35        inb(0x71);              /* dummy */
  36        outb(0x0f, 0x70);
  37        inb(0x71);              /* dummy */
  38        if (old_reg >= 0)
  39                outb(old_reg, 0x70);
  40        else
  41                unlock_cmos();
  42}
  43
  44#endif /* _ASM_X86_MACH_DEFAULT_MACH_TRAPS_H */
  45