1*57a9c56bSSepherosa Ziehau /*- 2*57a9c56bSSepherosa Ziehau * Copyright (c) 1991 The Regents of the University of California. 3*57a9c56bSSepherosa Ziehau * Copyright (c) 2008 The DragonFly Project. 4*57a9c56bSSepherosa Ziehau * All rights reserved. 5*57a9c56bSSepherosa Ziehau * 6*57a9c56bSSepherosa Ziehau * This code is derived from software contributed to Berkeley by 7*57a9c56bSSepherosa Ziehau * William Jolitz. 8*57a9c56bSSepherosa Ziehau * 9*57a9c56bSSepherosa Ziehau * Redistribution and use in source and binary forms, with or without 10*57a9c56bSSepherosa Ziehau * modification, are permitted provided that the following conditions 11*57a9c56bSSepherosa Ziehau * are met: 12*57a9c56bSSepherosa Ziehau * 1. Redistributions of source code must retain the above copyright 13*57a9c56bSSepherosa Ziehau * notice, this list of conditions and the following disclaimer. 14*57a9c56bSSepherosa Ziehau * 2. Redistributions in binary form must reproduce the above copyright 15*57a9c56bSSepherosa Ziehau * notice, this list of conditions and the following disclaimer in the 16*57a9c56bSSepherosa Ziehau * documentation and/or other materials provided with the distribution. 17*57a9c56bSSepherosa Ziehau * 3. All advertising materials mentioning features or use of this software 18*57a9c56bSSepherosa Ziehau * must display the following acknowledgement: 19*57a9c56bSSepherosa Ziehau * This product includes software developed by the University of 20*57a9c56bSSepherosa Ziehau * California, Berkeley and its contributors. 21*57a9c56bSSepherosa Ziehau * 4. Neither the name of the University nor the names of its contributors 22*57a9c56bSSepherosa Ziehau * may be used to endorse or promote products derived from this software 23*57a9c56bSSepherosa Ziehau * without specific prior written permission. 24*57a9c56bSSepherosa Ziehau * 25*57a9c56bSSepherosa Ziehau * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 26*57a9c56bSSepherosa Ziehau * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 27*57a9c56bSSepherosa Ziehau * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 28*57a9c56bSSepherosa Ziehau * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 29*57a9c56bSSepherosa Ziehau * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 30*57a9c56bSSepherosa Ziehau * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 31*57a9c56bSSepherosa Ziehau * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32*57a9c56bSSepherosa Ziehau * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33*57a9c56bSSepherosa Ziehau * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34*57a9c56bSSepherosa Ziehau * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35*57a9c56bSSepherosa Ziehau * SUCH DAMAGE. 36*57a9c56bSSepherosa Ziehau * 37*57a9c56bSSepherosa Ziehau * from: @(#)isa.c 7.2 (Berkeley) 5/13/91 38*57a9c56bSSepherosa Ziehau * $FreeBSD: src/sys/i386/isa/intr_machdep.c,v 1.29.2.5 2001/10/14 06:54:27 luigi Exp $ 39*57a9c56bSSepherosa Ziehau * $DragonFly: src/sys/platform/pc64/isa/intr_machdep.c,v 1.1 2008/08/29 17:07:19 dillon Exp $ 40*57a9c56bSSepherosa Ziehau */ 41*57a9c56bSSepherosa Ziehau /* 42*57a9c56bSSepherosa Ziehau * This file contains an aggregated module marked: 43*57a9c56bSSepherosa Ziehau * Copyright (c) 1997, Stefan Esser <se@freebsd.org> 44*57a9c56bSSepherosa Ziehau * All rights reserved. 45*57a9c56bSSepherosa Ziehau * See the notice for details. 46*57a9c56bSSepherosa Ziehau */ 47*57a9c56bSSepherosa Ziehau 48*57a9c56bSSepherosa Ziehau #include "use_isa.h" 49*57a9c56bSSepherosa Ziehau 50*57a9c56bSSepherosa Ziehau #include <sys/param.h> 51*57a9c56bSSepherosa Ziehau #include <sys/systm.h> 52*57a9c56bSSepherosa Ziehau #include <sys/syslog.h> 53*57a9c56bSSepherosa Ziehau #include <sys/bus.h> 54*57a9c56bSSepherosa Ziehau #include <bus/isa/isavar.h> 55*57a9c56bSSepherosa Ziehau 56*57a9c56bSSepherosa Ziehau #include <machine_base/icu/icu_var.h> 57*57a9c56bSSepherosa Ziehau #include <machine_base/isa/isa_intr.h> 58*57a9c56bSSepherosa Ziehau 59*57a9c56bSSepherosa Ziehau #define NMI_PARITY (1 << 7) 60*57a9c56bSSepherosa Ziehau #define NMI_IOCHAN (1 << 6) 61*57a9c56bSSepherosa Ziehau #define ENMI_WATCHDOG (1 << 7) 62*57a9c56bSSepherosa Ziehau #define ENMI_BUSTIMER (1 << 6) 63*57a9c56bSSepherosa Ziehau #define ENMI_IOSTATUS (1 << 5) 64*57a9c56bSSepherosa Ziehau 65*57a9c56bSSepherosa Ziehau /* 66*57a9c56bSSepherosa Ziehau * Handle a NMI, possibly a machine check. 67*57a9c56bSSepherosa Ziehau * return true to panic system, false to ignore. 68*57a9c56bSSepherosa Ziehau */ 69*57a9c56bSSepherosa Ziehau int 70*57a9c56bSSepherosa Ziehau isa_nmi(int cd) 71*57a9c56bSSepherosa Ziehau { 72*57a9c56bSSepherosa Ziehau int retval = 0; 73*57a9c56bSSepherosa Ziehau int isa_port = inb(0x61); 74*57a9c56bSSepherosa Ziehau int eisa_port = inb(0x461); 75*57a9c56bSSepherosa Ziehau 76*57a9c56bSSepherosa Ziehau log(LOG_CRIT, "NMI ISA %x, EISA %x\n", isa_port, eisa_port); 77*57a9c56bSSepherosa Ziehau 78*57a9c56bSSepherosa Ziehau if (isa_port & NMI_PARITY) { 79*57a9c56bSSepherosa Ziehau log(LOG_CRIT, "RAM parity error, likely hardware failure."); 80*57a9c56bSSepherosa Ziehau retval = 1; 81*57a9c56bSSepherosa Ziehau } 82*57a9c56bSSepherosa Ziehau 83*57a9c56bSSepherosa Ziehau if (isa_port & NMI_IOCHAN) { 84*57a9c56bSSepherosa Ziehau log(LOG_CRIT, "I/O channel check, likely hardware failure."); 85*57a9c56bSSepherosa Ziehau retval = 1; 86*57a9c56bSSepherosa Ziehau } 87*57a9c56bSSepherosa Ziehau 88*57a9c56bSSepherosa Ziehau /* 89*57a9c56bSSepherosa Ziehau * On a real EISA machine, this will never happen. However it can 90*57a9c56bSSepherosa Ziehau * happen on ISA machines which implement XT style floating point 91*57a9c56bSSepherosa Ziehau * error handling (very rare). Save them from a meaningless panic. 92*57a9c56bSSepherosa Ziehau */ 93*57a9c56bSSepherosa Ziehau if (eisa_port == 0xff) 94*57a9c56bSSepherosa Ziehau return(retval); 95*57a9c56bSSepherosa Ziehau 96*57a9c56bSSepherosa Ziehau if (eisa_port & ENMI_WATCHDOG) { 97*57a9c56bSSepherosa Ziehau log(LOG_CRIT, "EISA watchdog timer expired, likely hardware failure."); 98*57a9c56bSSepherosa Ziehau retval = 1; 99*57a9c56bSSepherosa Ziehau } 100*57a9c56bSSepherosa Ziehau 101*57a9c56bSSepherosa Ziehau if (eisa_port & ENMI_BUSTIMER) { 102*57a9c56bSSepherosa Ziehau log(LOG_CRIT, "EISA bus timeout, likely hardware failure."); 103*57a9c56bSSepherosa Ziehau retval = 1; 104*57a9c56bSSepherosa Ziehau } 105*57a9c56bSSepherosa Ziehau 106*57a9c56bSSepherosa Ziehau if (eisa_port & ENMI_IOSTATUS) { 107*57a9c56bSSepherosa Ziehau log(LOG_CRIT, "EISA I/O port status error."); 108*57a9c56bSSepherosa Ziehau retval = 1; 109*57a9c56bSSepherosa Ziehau } 110*57a9c56bSSepherosa Ziehau return(retval); 111*57a9c56bSSepherosa Ziehau } 112*57a9c56bSSepherosa Ziehau 113*57a9c56bSSepherosa Ziehau /* 114*57a9c56bSSepherosa Ziehau * Fill in default interrupt table (in case of spurious interrupt 115*57a9c56bSSepherosa Ziehau * during configuration of kernel, setup interrupt control unit 116*57a9c56bSSepherosa Ziehau */ 117*57a9c56bSSepherosa Ziehau void 118*57a9c56bSSepherosa Ziehau isa_defaultirq(void) 119*57a9c56bSSepherosa Ziehau { 120*57a9c56bSSepherosa Ziehau icu_definit(); 121*57a9c56bSSepherosa Ziehau } 122*57a9c56bSSepherosa Ziehau 123*57a9c56bSSepherosa Ziehau #if NISA > 0 124*57a9c56bSSepherosa Ziehau 125*57a9c56bSSepherosa Ziehau intrmask_t 126*57a9c56bSSepherosa Ziehau isa_irq_pending(void) 127*57a9c56bSSepherosa Ziehau { 128*57a9c56bSSepherosa Ziehau return icu_irq_pending(); 129*57a9c56bSSepherosa Ziehau } 130*57a9c56bSSepherosa Ziehau 131*57a9c56bSSepherosa Ziehau #endif 132