📄 irq.h
字号:
#ifndef __ASM_SH_IRQ_H#define __ASM_SH_IRQ_H/* * * linux/include/asm-sh/irq.h * * Copyright (C) 1999 Niibe Yutaka & Takeshi Yaegashi * Copyright (C) 2000 Kazumoto Kojima * */#include <linux/config.h>#include <asm/machvec.h>#include <asm/ptrace.h> /* for pt_regs */#if defined(__sh3__)#define INTC_IPRA 0xfffffee2UL#define INTC_IPRB 0xfffffee4UL#elif defined(__SH4__)#define INTC_IPRA 0xffd00004UL#define INTC_IPRB 0xffd00008UL#define INTC_IPRC 0xffd0000cUL#endif#define TIMER_IRQ 16#define TIMER_IPR_ADDR INTC_IPRA#define TIMER_IPR_POS 3#define TIMER_PRIORITY 2#define RTC_IRQ 22#define RTC_IPR_ADDR INTC_IPRA#define RTC_IPR_POS 0#define RTC_PRIORITY TIMER_PRIORITY#if defined(__sh3__)#define DMTE0_IRQ 48#define DMTE1_IRQ 49#define DMTE2_IRQ 50#define DMTE3_IRQ 51#define DMA_IPR_ADDR INTC_IPRE#define DMA_IPR_POS 3#define DMA_PRIORITY 7#elif defined(__SH4__)#define DMTE0_IRQ 34#define DMTE1_IRQ 35#define DMTE2_IRQ 36#define DMTE3_IRQ 37#define DMAE_IRQ 38#define DMA_IPR_ADDR INTC_IPRC#define DMA_IPR_POS 2#define DMA_PRIORITY 7#endif#if defined (CONFIG_CPU_SUBTYPE_SH7707) || defined (CONFIG_CPU_SUBTYPE_SH7708) || \ defined (CONFIG_CPU_SUBTYPE_SH7709) || defined (CONFIG_CPU_SUBTYPE_SH7750) || \ defined (CONFIG_CPU_SUBTYPE_SH7751)#define SCI_ERI_IRQ 23#define SCI_RXI_IRQ 24#define SCI_TXI_IRQ 25#define SCI_IPR_ADDR INTC_IPRB#define SCI_IPR_POS 1#define SCI_PRIORITY 3#endif#if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709)#define SCIF_ERI_IRQ 56#define SCIF_RXI_IRQ 57#define SCIF_BRI_IRQ 58#define SCIF_TXI_IRQ 59#define SCIF_IPR_ADDR INTC_IPRE#define SCIF_IPR_POS 1#define SCIF_PRIORITY 3#define IRDA_ERI_IRQ 52#define IRDA_RXI_IRQ 53#define IRDA_BRI_IRQ 54#define IRDA_TXI_IRQ 55#define IRDA_IPR_ADDR INTC_IPRE#define IRDA_IPR_POS 2#define IRDA_PRIORITY 3#elif defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7751) || \ defined(CONFIG_CPU_SUBTYPE_ST40STB1)#define SCIF_ERI_IRQ 40#define SCIF_RXI_IRQ 41#define SCIF_BRI_IRQ 42#define SCIF_TXI_IRQ 43#define SCIF_IPR_ADDR INTC_IPRC#define SCIF_IPR_POS 1#define SCIF_PRIORITY 3#if defined(CONFIG_CPU_SUBTYPE_ST40STB1)#define SCIF1_ERI_IRQ 23#define SCIF1_RXI_IRQ 24#define SCIF1_BRI_IRQ 25#define SCIF1_TXI_IRQ 26#define SCIF1_IPR_ADDR INTC_IPRB#define SCIF1_IPR_POS 1#define SCIF1_PRIORITY 3#endif#endif/* NR_IRQS is made from three components: * 1. ONCHIP_NR_IRQS - number of IRLS + on-chip peripherial modules * 2. PINT_NR_IRQS - number of PINT interrupts * 3. OFFCHIP_NR_IRQS - numbe of IRQs from off-chip peripherial modules *//* 1. ONCHIP_NR_IRQS */#ifdef CONFIG_SH_GENERIC# define ONCHIP_NR_IRQS 144#else# if defined(CONFIG_CPU_SUBTYPE_SH7707)# define ONCHIP_NR_IRQS 64# define PINT_NR_IRQS 16# elif defined(CONFIG_CPU_SUBTYPE_SH7708)# define ONCHIP_NR_IRQS 32# elif defined(CONFIG_CPU_SUBTYPE_SH7709)# define ONCHIP_NR_IRQS 64 // Actually 61# define PINT_NR_IRQS 16# elif defined(CONFIG_CPU_SUBTYPE_SH7750)# define ONCHIP_NR_IRQS 48 // Actually 44# elif defined(CONFIG_CPU_SUBTYPE_SH7751)# define ONCHIP_NR_IRQS 72# elif defined(CONFIG_CPU_SUBTYPE_ST40STB1)# define ONCHIP_NR_IRQS 144# endif#endif/* 2. PINT_NR_IRQS */#ifdef CONFIG_SH_GENERIC# define PINT_NR_IRQS 16#else# ifndef PINT_NR_IRQS# define PINT_NR_IRQS 0# endif#endif#if PINT_NR_IRQS > 0# define PINT_IRQ_BASE ONCHIP_NR_IRQS#endif/* 3. OFFCHIP_NR_IRQS */#ifdef CONFIG_SH_GENERIC# define OFFCHIP_NR_IRQS 16#else# if defined(CONFIG_HD64461)# define OFFCHIP_NR_IRQS 16# elif defined (CONFIG_SH_BIGSUR) /* must be before CONFIG_HD64465 */# define OFFCHIP_NR_IRQS 48# elif defined(CONFIG_HD64465)# define OFFCHIP_NR_IRQS 16# elif defined (CONFIG_SH_EC3104)# define OFFCHIP_NR_IRQS 16# elif defined (CONFIG_SH_DREAMCAST)# define OFFCHIP_NR_IRQS 96# else# define OFFCHIP_NR_IRQS 0# endif#endif#if OFFCHIP_NR_IRQS > 0# define OFFCHIP_IRQ_BASE (ONCHIP_NR_IRQS + PINT_NR_IRQS)#endif/* NR_IRQS. 1+2+3 */#define NR_IRQS (ONCHIP_NR_IRQS + PINT_NR_IRQS + OFFCHIP_NR_IRQS)/* In a generic kernel, NR_IRQS is an upper bound, and we should use * ACTUAL_NR_IRQS (which uses the machine vector) to get the correct value. */#ifdef CONFIG_SH_GENERIC# define ACTUAL_NR_IRQS (sh_mv.mv_nr_irqs)#else# define ACTUAL_NR_IRQS NR_IRQS#endifextern void disable_irq(unsigned int);extern void disable_irq_nosync(unsigned int);extern void enable_irq(unsigned int);/* * Simple Mask Register Support */extern void make_maskreg_irq(unsigned int irq);extern unsigned short *irq_mask_register;/* * Function for "on chip support modules". */extern void make_ipr_irq(unsigned int irq, unsigned int addr, int pos, int priority);extern void make_imask_irq(unsigned int irq);#if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709)#define INTC_IRR0 0xa4000004UL#define INTC_IRR1 0xa4000006UL#define INTC_IRR2 0xa4000008UL#define INTC_ICR0 0xfffffee0UL#define INTC_ICR1 0xa4000010UL#define INTC_ICR2 0xa4000012UL#define INTC_INTER 0xa4000014UL#define INTC_IPRC 0xa4000016UL#define INTC_IPRD 0xa4000018UL#define INTC_IPRE 0xa400001aUL#if defined(CONFIG_CPU_SUBTYPE_SH7707)#define INTC_IPRF 0xa400001cUL#endif#define PORT_PACR 0xa4000100UL#define PORT_PBCR 0xa4000102UL#define PORT_PCCR 0xa4000104UL#define PORT_PFCR 0xa400010aUL#define PORT_PADR 0xa4000120UL#define PORT_PBDR 0xa4000122UL#define PORT_PCDR 0xa4000124UL#define PORT_PFDR 0xa400012aUL#define IRQ0_IRQ 32#define IRQ1_IRQ 33#define IRQ2_IRQ 34#define IRQ3_IRQ 35#define IRQ4_IRQ 36#define IRQ5_IRQ 37#define IRQ0_IPR_ADDR INTC_IPRC#define IRQ1_IPR_ADDR INTC_IPRC#define IRQ2_IPR_ADDR INTC_IPRC#define IRQ3_IPR_ADDR INTC_IPRC#define IRQ4_IPR_ADDR INTC_IPRD#define IRQ5_IPR_ADDR INTC_IPRD#define IRQ0_IPR_POS 0#define IRQ1_IPR_POS 1#define IRQ2_IPR_POS 2#define IRQ3_IPR_POS 3#define IRQ4_IPR_POS 0#define IRQ5_IPR_POS 1#define IRQ0_PRIORITY 1#define IRQ1_PRIORITY 1#define IRQ2_PRIORITY 1#define IRQ3_PRIORITY 1#define IRQ4_PRIORITY 1#define IRQ5_PRIORITY 1#define PINT0_IRQ 40#define PINT8_IRQ 41#define PINT0_IPR_ADDR INTC_IPRD#define PINT8_IPR_ADDR INTC_IPRD#define PINT0_IPR_POS 3#define PINT8_IPR_POS 2#define PINT0_PRIORITY 2#define PINT8_PRIORITY 2extern int ipr_irq_demux(int irq);#define __irq_demux(irq) ipr_irq_demux(irq)#else#define __irq_demux(irq) irq#endif /* CONFIG_CPU_SUBTYPE_SH7707 || CONFIG_CPU_SUBTYPE_SH7709 */#if defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7751) || \ defined(CONFIG_CPU_SUBTYPE_ST40STB1)#define INTC_ICR 0xffd00000#define INTC_ICR_NMIL (1<<15)#define INTC_ICR_MAI (1<<14)#define INTC_ICR_NMIB (1<<9)#define INTC_ICR_NMIE (1<<8)#define INTC_ICR_IRLM (1<<7)#endif#ifdef CONFIG_CPU_SUBTYPE_ST40STB1#define INTC2_FIRST_IRQ 64#define NR_INTC2_IRQS 25 #define INTC2_BASE0 0xfe080000#define INTC2_INTC2MODE (INTC2_BASE0+0x80) #define INTC2_INTPRI_OFFSET 0x00#define INTC2_INTREQ_OFFSET 0x20#define INTC2_INTMSK_OFFSET 0x40#define INTC2_INTMSKCLR_OFFSET 0x60 extern void make_intc2_irq(unsigned int irq,unsigned int addr, unsigned int group,int pos,int priority); #endif #ifdef CONFIG_SH_GENERICstatic __inline__ int irq_demux(int irq){ if (sh_mv.mv_irq_demux) { irq = sh_mv.mv_irq_demux(irq); } return __irq_demux(irq);}#elif defined(CONFIG_SH_BIGSUR)extern int bigsur_irq_demux(int irq);#define irq_demux(irq) bigsur_irq_demux(irq)#elif defined(CONFIG_HD64461)extern int hd64461_irq_demux(int irq);#define irq_demux(irq) hd64461_irq_demux(irq)#elif defined(CONFIG_HD64465)extern int hd64465_irq_demux(int irq);#define irq_demux(irq) hd64465_irq_demux(irq)#elif defined(CONFIG_SH_EC3104)extern int ec3104_irq_demux(int irq);#define irq_demux ec3104_irq_demux#elif defined(CONFIG_SH_CAT68701)extern int cat68701_irq_demux(int irq);#define irq_demux cat68701_irq_demux#elif defined(CONFIG_SH_DREAMCAST)extern int systemasic_irq_demux(int irq);#define irq_demux systemasic_irq_demux#else#define irq_demux(irq) __irq_demux(irq)#endif#endif /* __ASM_SH_IRQ_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -