⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irq.c

📁 linux 内核源代码
💻 C
字号:
/* * linux/arch/mips/tx4938/toshiba_rbtx4938/irq.c * * Toshiba RBTX4938 specific interrupt handlers * Copyright (C) 2000-2001 Toshiba Corporation * * 2003-2005 (c) MontaVista Software, Inc. 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. * * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com) *//*IRQ  Device16   TX4938-CP0/00 Software 017   TX4938-CP0/01 Software 118   TX4938-CP0/02 Cascade TX4938-CP019   TX4938-CP0/03 Multiplexed -- do not use20   TX4938-CP0/04 Multiplexed -- do not use21   TX4938-CP0/05 Multiplexed -- do not use22   TX4938-CP0/06 Multiplexed -- do not use23   TX4938-CP0/07 CPU TIMER24   TX4938-PIC/0025   TX4938-PIC/0126   TX4938-PIC/02 Cascade RBTX4938-IOC27   TX4938-PIC/03 RBTX4938 RTL-8019AS Ethernet28   TX4938-PIC/0429   TX4938-PIC/05 TX4938 ETH130   TX4938-PIC/06 TX4938 ETH031   TX4938-PIC/0732   TX4938-PIC/08 TX4938 SIO 033   TX4938-PIC/09 TX4938 SIO 134   TX4938-PIC/10 TX4938 DMA035   TX4938-PIC/11 TX4938 DMA136   TX4938-PIC/12 TX4938 DMA237   TX4938-PIC/13 TX4938 DMA338   TX4938-PIC/1439   TX4938-PIC/1540   TX4938-PIC/16 TX4938 PCIC41   TX4938-PIC/17 TX4938 TMR042   TX4938-PIC/18 TX4938 TMR143   TX4938-PIC/19 TX4938 TMR244   TX4938-PIC/2045   TX4938-PIC/2146   TX4938-PIC/22 TX4938 PCIERR47   TX4938-PIC/2348   TX4938-PIC/2449   TX4938-PIC/2550   TX4938-PIC/2651   TX4938-PIC/2752   TX4938-PIC/2853   TX4938-PIC/2954   TX4938-PIC/3055   TX4938-PIC/31 TX4938 SPI56 RBTX4938-IOC/00 PCI-D57 RBTX4938-IOC/01 PCI-C58 RBTX4938-IOC/02 PCI-B59 RBTX4938-IOC/03 PCI-A60 RBTX4938-IOC/04 RTC61 RBTX4938-IOC/05 ATA62 RBTX4938-IOC/06 MODEM63 RBTX4938-IOC/07 SWINT*/#include <linux/init.h>#include <linux/kernel.h>#include <linux/types.h>#include <linux/mm.h>#include <linux/swap.h>#include <linux/ioport.h>#include <linux/sched.h>#include <linux/interrupt.h>#include <linux/pci.h>#include <linux/timex.h>#include <asm/bootinfo.h>#include <asm/page.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/processor.h>#include <asm/reboot.h>#include <asm/time.h>#include <asm/wbflush.h>#include <linux/bootmem.h>#include <asm/tx4938/rbtx4938.h>static void toshiba_rbtx4938_irq_ioc_enable(unsigned int irq);static void toshiba_rbtx4938_irq_ioc_disable(unsigned int irq);#define TOSHIBA_RBTX4938_IOC_NAME "RBTX4938-IOC"static struct irq_chip toshiba_rbtx4938_irq_ioc_type = {	.name = TOSHIBA_RBTX4938_IOC_NAME,	.ack = toshiba_rbtx4938_irq_ioc_disable,	.mask = toshiba_rbtx4938_irq_ioc_disable,	.mask_ack = toshiba_rbtx4938_irq_ioc_disable,	.unmask = toshiba_rbtx4938_irq_ioc_enable,};#define TOSHIBA_RBTX4938_IOC_INTR_ENAB 0xb7f02000#define TOSHIBA_RBTX4938_IOC_INTR_STAT 0xb7f0200ainttoshiba_rbtx4938_irq_nested(int sw_irq){	u8 level3;	level3 = reg_rd08(TOSHIBA_RBTX4938_IOC_INTR_STAT) & 0xff;	if (level3) {		/* must use fls so onboard ATA has priority */		sw_irq = TOSHIBA_RBTX4938_IRQ_IOC_BEG + fls(level3) - 1;	}	wbflush();	return sw_irq;}static struct irqaction toshiba_rbtx4938_irq_ioc_action = {	.handler = no_action,	.flags = 0,	.mask = CPU_MASK_NONE,	.name = TOSHIBA_RBTX4938_IOC_NAME,};/**********************************************************************************//* Functions for ioc                                                              *//**********************************************************************************/static void __inittoshiba_rbtx4938_irq_ioc_init(void){	int i;	for (i = TOSHIBA_RBTX4938_IRQ_IOC_BEG;	     i <= TOSHIBA_RBTX4938_IRQ_IOC_END; i++)		set_irq_chip_and_handler(i, &toshiba_rbtx4938_irq_ioc_type,					 handle_level_irq);	setup_irq(RBTX4938_IRQ_IOCINT,		  &toshiba_rbtx4938_irq_ioc_action);}static voidtoshiba_rbtx4938_irq_ioc_enable(unsigned int irq){	volatile unsigned char v;	v = TX4938_RD08(TOSHIBA_RBTX4938_IOC_INTR_ENAB);	v |= (1 << (irq - TOSHIBA_RBTX4938_IRQ_IOC_BEG));	TX4938_WR08(TOSHIBA_RBTX4938_IOC_INTR_ENAB, v);	mmiowb();	TX4938_RD08(TOSHIBA_RBTX4938_IOC_INTR_ENAB);}static voidtoshiba_rbtx4938_irq_ioc_disable(unsigned int irq){	volatile unsigned char v;	v = TX4938_RD08(TOSHIBA_RBTX4938_IOC_INTR_ENAB);	v &= ~(1 << (irq - TOSHIBA_RBTX4938_IRQ_IOC_BEG));	TX4938_WR08(TOSHIBA_RBTX4938_IOC_INTR_ENAB, v);	mmiowb();	TX4938_RD08(TOSHIBA_RBTX4938_IOC_INTR_ENAB);}void __init arch_init_irq(void){	extern void tx4938_irq_init(void);	/* Now, interrupt control disabled, */	/* all IRC interrupts are masked, */	/* all IRC interrupt mode are Low Active. */	/* mask all IOC interrupts */	*rbtx4938_imask_ptr = 0;	/* clear SoftInt interrupts */	*rbtx4938_softint_ptr = 0;	tx4938_irq_init();	toshiba_rbtx4938_irq_ioc_init();	/* Onboard 10M Ether: High Active */	set_irq_type(RBTX4938_IRQ_ETHER, IRQF_TRIGGER_HIGH);	wbflush();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -