/* * Copyright (C) 1995 Shantanu Goel * Copyright (C) 2020 Free Software Foundation, Inc * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include #include #include #include extern queue_head_t main_intr_queue; static void irq_eoi (struct irqdev *dev, int id) { /* TODO EOI(dev->irq[id]) */ } static unsigned int ndisabled_irq[NINTR]; void __disable_irq (irq_t irq_nr) { assert (irq_nr < NINTR); spl_t s = splhigh(); ndisabled_irq[irq_nr]++; assert (ndisabled_irq[irq_nr] > 0); if (ndisabled_irq[irq_nr] == 1) mask_irq (irq_nr); splx(s); } void __enable_irq (irq_t irq_nr) { assert (irq_nr < NINTR); spl_t s = splhigh(); assert (ndisabled_irq[irq_nr] > 0); ndisabled_irq[irq_nr]--; if (ndisabled_irq[irq_nr] == 0) unmask_irq (irq_nr); splx(s); } struct irqdev irqtab = { "irq", irq_eoi, &main_intr_queue, 0, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, };