📄 int-handler.s
字号:
/* * FILE NAME * arch/mips/vr41xx/common/int-handler.S * * BRIEF MODULE DESCRIPTION * Interrupt dispatcher for the NEC VR4100 series. * * Author: Yoichi Yuasa * yyuasa@mvista.com or source@mvista.com * * Copyright 2001 MontaVista Software 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 of the License, or (at your * option) any later version. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * 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. *//* * Changes: * MontaVista Software Inc. <yyuasa@mvista.com> or <source@mvista.com> * - New creation, NEC VR4100 series are supported. */#include <asm/asm.h>#include <asm/regdef.h>#include <asm/mipsregs.h>#include <asm/stackframe.h> .text .set noreorder .align 5 NESTED(vr41xx_handle_interrupt, PT_SIZE, ra) .set noat SAVE_ALL CLI .set at .set noreorder /* * Get the pending interrupts */ mfc0 t0, CP0_CAUSE mfc0 t1, CP0_STATUS andi t0, 0xff00 and t0, t0, t1 andi t1, t0, CAUSEF_IP7 # timer interrupt beqz t1, 1f li a0, 7 jal ll_timer_interrupt move a1, sp j ret_from_irq1: andi t1, t0, 0x7800 # check for IP3-6 beqz t1, 2f andi t1, t0, CAUSEF_IP3 # check for IP3 bnez t1, handle_it li a0, 3 andi t1, t0, CAUSEF_IP4 # check for IP4 bnez t1, handle_it li a0, 4 andi t1, t0, CAUSEF_IP5 # check for IP5 bnez t1, handle_it li a0, 5 andi t1, t0, CAUSEF_IP6 # check for IP6 bnez t1, handle_it li a0, 62: andi t1, t0, CAUSEF_IP2 # check for IP2 beqz t1, 3f move a0, sp jal icu_irqdispatch nop j ret_from_irq nop3: andi t1, t0, CAUSEF_IP0 # check for IP0 bnez t1, handle_it li a0, 0 andi t1, t0, CAUSEF_IP1 # check for IP1 bnez t1, handle_it li a0, 1 j spurious_interrupt nophandle_it: jal do_IRQ move a1, sp j ret_from_irq END(vr41xx_handle_interrupt)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -