entry-macro.s
来自「linux 内核源代码」· S 代码 · 共 128 行
S
128 行
/* * include/asm-arm/arch-pnx4008/entry-macro.S * * Low-level IRQ helper macros for PNX4008-based platforms * * 2005-2006 (c) MontaVista Software, Inc. * Author: Vitaly Wool <vwool@ru.mvista.com> * This file is licensed under the terms of the GNU General Public * License version 2. This program is licensed "as is" without any * warranty of any kind, whether express or implied. */#include "platform.h"#define IO_BASE 0xF0000000#define IO_ADDRESS(x) (((((x) & 0xff000000) >> 4) | ((x) & 0xfffff)) | IO_BASE)#define INTRC_MASK 0x00#define INTRC_RAW_STAT 0x04#define INTRC_STAT 0x08#define INTRC_POLAR 0x0C#define INTRC_ACT_TYPE 0x10#define INTRC_TYPE 0x14#define SIC1_BASE_INT 32#define SIC2_BASE_INT 64 .macro disable_fiq .endm .macro get_irqnr_preamble, base, tmp .endm .macro arch_ret_to_user, tmp1, tmp2 .endm .macro get_irqnr_and_base, irqnr, irqstat, base, tmp/* decode the MIC interrupt numbers */ ldr \base, =IO_ADDRESS(PNX4008_INTCTRLMIC_BASE) ldr \irqstat, [\base, #INTRC_STAT] cmp \irqstat,#1<<16 movhs \irqnr,#16 movlo \irqnr,#0 movhs \irqstat,\irqstat,lsr#16 cmp \irqstat,#1<<8 addhs \irqnr,\irqnr,#8 movhs \irqstat,\irqstat,lsr#8 cmp \irqstat,#1<<4 addhs \irqnr,\irqnr,#4 movhs \irqstat,\irqstat,lsr#4 cmp \irqstat,#1<<2 addhs \irqnr,\irqnr,#2 movhs \irqstat,\irqstat,lsr#2 cmp \irqstat,#1<<1 addhs \irqnr,\irqnr,#1/* was there an interrupt ? if not then drop out with EQ status */ teq \irqstat,#0 beq 1003f/* and now check for extended IRQ reasons */ cmp \irqnr,#1 bls 1003f cmp \irqnr,#30 blo 1002f/* IRQ 31,30 : High priority cascade IRQ handle *//* read the correct SIC *//* decoding status after compare : eq is 30 (SIC1) , ne is 31 (SIC2) *//* set the base IRQ number */ ldreq \base, =IO_ADDRESS(PNX4008_INTCTRLSIC1_BASE) moveq \irqnr,#SIC1_BASE_INT ldrne \base, =IO_ADDRESS(PNX4008_INTCTRLSIC2_BASE) movne \irqnr,#SIC2_BASE_INT ldr \irqstat, [\base, #INTRC_STAT] ldr \tmp, [\base, #INTRC_TYPE]/* and with inverted mask : low priority interrupts */ and \irqstat,\irqstat,\tmp b 1004f1003:/* IRQ 1,0 : Low priority cascade IRQ handle *//* read the correct SIC *//* decoding status after compare : eq is 1 (SIC2) , ne is 0 (SIC1)*//* read the correct SIC *//* set the base IRQ number */ ldrne \base, =IO_ADDRESS(PNX4008_INTCTRLSIC1_BASE) movne \irqnr,#SIC1_BASE_INT ldreq \base, =IO_ADDRESS(PNX4008_INTCTRLSIC2_BASE) moveq \irqnr,#SIC2_BASE_INT ldr \irqstat, [\base, #INTRC_STAT] ldr \tmp, [\base, #INTRC_TYPE]/* and with inverted mask : low priority interrupts */ bic \irqstat,\irqstat,\tmp1004: cmp \irqstat,#1<<16 addhs \irqnr,\irqnr,#16 movhs \irqstat,\irqstat,lsr#16 cmp \irqstat,#1<<8 addhs \irqnr,\irqnr,#8 movhs \irqstat,\irqstat,lsr#8 cmp \irqstat,#1<<4 addhs \irqnr,\irqnr,#4 movhs \irqstat,\irqstat,lsr#4 cmp \irqstat,#1<<2 addhs \irqnr,\irqnr,#2 movhs \irqstat,\irqstat,lsr#2 cmp \irqstat,#1<<1 addhs \irqnr,\irqnr,#1/* is irqstat not zero */1002:/* we assert that irqstat is not equal to zero and return ne status if true*/ teq \irqstat,#01003: .endm .macro irq_prio_table .endm
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?