diff options
Diffstat (limited to 'sound/oss/emu10k1/irqmgr.c')
-rw-r--r-- | sound/oss/emu10k1/irqmgr.c | 113 |
1 files changed, 0 insertions, 113 deletions
diff --git a/sound/oss/emu10k1/irqmgr.c b/sound/oss/emu10k1/irqmgr.c deleted file mode 100644 index fb2ce63..0000000 --- a/sound/oss/emu10k1/irqmgr.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - ********************************************************************** - * irqmgr.c - IRQ manager for emu10k1 driver - * Copyright 1999, 2000 Creative Labs, Inc. - * - ********************************************************************** - * - * Date Author Summary of changes - * ---- ------ ------------------ - * October 20, 1999 Bertrand Lee base code release - * - ********************************************************************** - * - * 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 of - * the License, 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, Inc., 675 Mass Ave, Cambridge, MA 02139, - * USA. - * - ********************************************************************** - */ - -#include "hwaccess.h" -#include "8010.h" -#include "cardmi.h" -#include "cardmo.h" -#include "irqmgr.h" - -/* Interrupt handler */ - -irqreturn_t emu10k1_interrupt(int irq, void *dev_id) -{ - struct emu10k1_card *card = (struct emu10k1_card *) dev_id; - u32 irqstatus, irqstatus_tmp; - int handled = 0; - - DPD(4, "emu10k1_interrupt called, irq = %u\n", irq); - - /* - ** NOTE : - ** We do a 'while loop' here cos on certain machines, with both - ** playback and recording going on at the same time, IRQs will - ** stop coming in after a while. Checking IPND indeed shows that - ** there are interrupts pending but the PIC says no IRQs pending. - ** I suspect that some boards need edge-triggered IRQs but are not - ** getting that condition if we don't completely clear the IPND - ** (make sure no more interrupts are pending). - ** - Eric - */ - - while ((irqstatus = inl(card->iobase + IPR))) { - DPD(4, "irq status %#x\n", irqstatus); - - irqstatus_tmp = irqstatus; - - if (irqstatus & IRQTYPE_TIMER) { - emu10k1_timer_irqhandler(card); - irqstatus &= ~IRQTYPE_TIMER; - } - - if (irqstatus & IRQTYPE_DSP) { - emu10k1_dsp_irqhandler(card); - irqstatus &= ~IRQTYPE_DSP; - } - - if (irqstatus & IRQTYPE_MPUIN) { - emu10k1_mpuin_irqhandler(card); - irqstatus &= ~IRQTYPE_MPUIN; - } - - if (irqstatus & IRQTYPE_MPUOUT) { - emu10k1_mpuout_irqhandler(card); - irqstatus &= ~IRQTYPE_MPUOUT; - } - - if (irqstatus & IPR_MUTE) { - emu10k1_mute_irqhandler(card); - irqstatus &=~IPR_MUTE; - } - - if (irqstatus & IPR_VOLINCR) { - emu10k1_volincr_irqhandler(card); - irqstatus &=~IPR_VOLINCR; - } - - if (irqstatus & IPR_VOLDECR) { - emu10k1_voldecr_irqhandler(card); - irqstatus &=~IPR_VOLDECR; - } - - if (irqstatus){ - printk(KERN_ERR "emu10k1: Warning, unhandled interrupt: %#08x\n", irqstatus); - //make sure any interrupts we don't handle are disabled: - emu10k1_irq_disable(card, ~(INTE_MIDIRXENABLE | INTE_MIDITXENABLE | INTE_INTERVALTIMERENB | - INTE_VOLDECRENABLE | INTE_VOLINCRENABLE | INTE_MUTEENABLE | - INTE_FXDSPENABLE)); - } - - /* acknowledge interrupt */ - outl(irqstatus_tmp, card->iobase + IPR); - handled = 1; - } - return IRQ_RETVAL(handled); -} |