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

📄 toshiba_rbtx4927_irq.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 2 页
字号:
}static void toshiba_rbtx4927_irq_ioc_shutdown(unsigned int irq){	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_IOC_SHUTDOWN,				     "irq=%d\n", irq);	if (irq < TOSHIBA_RBTX4927_IRQ_IOC_BEG	    || irq > TOSHIBA_RBTX4927_IRQ_IOC_END) {		TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_EROR,					     "bad irq=%d\n", irq);		panic("\n");	}	toshiba_rbtx4927_irq_ioc_disable(irq);	return;}static void toshiba_rbtx4927_irq_ioc_enable(unsigned int irq){	unsigned long flags;	volatile unsigned char v;	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_IOC_ENABLE,				     "irq=%d\n", irq);	if (irq < TOSHIBA_RBTX4927_IRQ_IOC_BEG	    || irq > TOSHIBA_RBTX4927_IRQ_IOC_END) {		TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_EROR,					     "bad irq=%d\n", irq);		panic("\n");	}	spin_lock_irqsave(&toshiba_rbtx4927_ioc_lock, flags);	v = TX4927_RD08(TOSHIBA_RBTX4927_IOC_INTR_ENAB);	v |= (1 << (irq - TOSHIBA_RBTX4927_IRQ_IOC_BEG));	TOSHIBA_RBTX4927_WR08(TOSHIBA_RBTX4927_IOC_INTR_ENAB, v);	spin_unlock_irqrestore(&toshiba_rbtx4927_ioc_lock, flags);	return;}static void toshiba_rbtx4927_irq_ioc_disable(unsigned int irq){	unsigned long flags;	volatile unsigned char v;	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_IOC_DISABLE,				     "irq=%d\n", irq);	if (irq < TOSHIBA_RBTX4927_IRQ_IOC_BEG	    || irq > TOSHIBA_RBTX4927_IRQ_IOC_END) {		TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_EROR,					     "bad irq=%d\n", irq);		panic("\n");	}	spin_lock_irqsave(&toshiba_rbtx4927_ioc_lock, flags);	v = TX4927_RD08(TOSHIBA_RBTX4927_IOC_INTR_ENAB);	v &= ~(1 << (irq - TOSHIBA_RBTX4927_IRQ_IOC_BEG));	TOSHIBA_RBTX4927_WR08(TOSHIBA_RBTX4927_IOC_INTR_ENAB, v);	spin_unlock_irqrestore(&toshiba_rbtx4927_ioc_lock, flags);	return;}static void toshiba_rbtx4927_irq_ioc_mask_and_ack(unsigned int irq){	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_IOC_MASK,				     "irq=%d\n", irq);	if (irq < TOSHIBA_RBTX4927_IRQ_IOC_BEG	    || irq > TOSHIBA_RBTX4927_IRQ_IOC_END) {		TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_EROR,					     "bad irq=%d\n", irq);		panic("\n");	}	toshiba_rbtx4927_irq_ioc_disable(irq);	return;}static void toshiba_rbtx4927_irq_ioc_end(unsigned int irq){	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_IOC_ENDIRQ,				     "irq=%d\n", irq);	if (irq < TOSHIBA_RBTX4927_IRQ_IOC_BEG	    || irq > TOSHIBA_RBTX4927_IRQ_IOC_END) {		TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_EROR,					     "bad irq=%d\n", irq);		panic("\n");	}	if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) {		toshiba_rbtx4927_irq_ioc_enable(irq);	}	return;}/**********************************************************************************//* Functions for isa                                                              *//**********************************************************************************/#ifdef CONFIG_TOSHIBA_FPCIB0static void __init toshiba_rbtx4927_irq_isa_init(void){	int i;	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_ISA_INIT,				     "beg=%d end=%d\n",				     TOSHIBA_RBTX4927_IRQ_ISA_BEG,				     TOSHIBA_RBTX4927_IRQ_ISA_END);	for (i = TOSHIBA_RBTX4927_IRQ_ISA_BEG;	     i <= TOSHIBA_RBTX4927_IRQ_ISA_END; i++) {		irq_desc[i].status = IRQ_DISABLED;		irq_desc[i].action = 0;		irq_desc[i].depth =		    ((i < TOSHIBA_RBTX4927_IRQ_ISA_MID) ? (4) : (5));		irq_desc[i].handler = &toshiba_rbtx4927_irq_isa_type;	}	setup_irq(TOSHIBA_RBTX4927_IRQ_NEST_ISA_ON_IOC,		  &toshiba_rbtx4927_irq_isa_master);	setup_irq(TOSHIBA_RBTX4927_IRQ_NEST_ISA_ON_ISA,		  &toshiba_rbtx4927_irq_isa_slave);	/* make sure we are looking at IRR (not ISR) */	outb(0x0A, 0x20);	outb(0x0A, 0xA0);	return;}#endif#ifdef CONFIG_TOSHIBA_FPCIB0static unsigned int toshiba_rbtx4927_irq_isa_startup(unsigned int irq){	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_ISA_STARTUP,				     "irq=%d\n", irq);	if (irq < TOSHIBA_RBTX4927_IRQ_ISA_BEG	    || irq > TOSHIBA_RBTX4927_IRQ_ISA_END) {		TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_EROR,					     "bad irq=%d\n", irq);		panic("\n");	}	toshiba_rbtx4927_irq_isa_enable(irq);	return (0);}#endif#ifdef CONFIG_TOSHIBA_FPCIB0static void toshiba_rbtx4927_irq_isa_shutdown(unsigned int irq){	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_ISA_SHUTDOWN,				     "irq=%d\n", irq);	if (irq < TOSHIBA_RBTX4927_IRQ_ISA_BEG	    || irq > TOSHIBA_RBTX4927_IRQ_ISA_END) {		TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_EROR,					     "bad irq=%d\n", irq);		panic("\n");	}	toshiba_rbtx4927_irq_isa_disable(irq);	return;}#endif#ifdef CONFIG_TOSHIBA_FPCIB0static void toshiba_rbtx4927_irq_isa_enable(unsigned int irq){	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_ISA_ENABLE,				     "irq=%d\n", irq);	if (irq < TOSHIBA_RBTX4927_IRQ_ISA_BEG	    || irq > TOSHIBA_RBTX4927_IRQ_ISA_END) {		TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_EROR,					     "bad irq=%d\n", irq);		panic("\n");	}	enable_8259A_irq(irq);	return;}#endif#ifdef CONFIG_TOSHIBA_FPCIB0static void toshiba_rbtx4927_irq_isa_disable(unsigned int irq){	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_ISA_DISABLE,				     "irq=%d\n", irq);	if (irq < TOSHIBA_RBTX4927_IRQ_ISA_BEG	    || irq > TOSHIBA_RBTX4927_IRQ_ISA_END) {		TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_EROR,					     "bad irq=%d\n", irq);		panic("\n");	}	disable_8259A_irq(irq);	return;}#endif#ifdef CONFIG_TOSHIBA_FPCIB0static void toshiba_rbtx4927_irq_isa_mask_and_ack(unsigned int irq){	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_ISA_MASK,				     "irq=%d\n", irq);	if (irq < TOSHIBA_RBTX4927_IRQ_ISA_BEG	    || irq > TOSHIBA_RBTX4927_IRQ_ISA_END) {		TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_EROR,					     "bad irq=%d\n", irq);		panic("\n");	}	mask_and_ack_8259A(irq);	return;}#endif#ifdef CONFIG_TOSHIBA_FPCIB0static void toshiba_rbtx4927_irq_isa_end(unsigned int irq){	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_ISA_ENDIRQ,				     "irq=%d\n", irq);	if (irq < TOSHIBA_RBTX4927_IRQ_ISA_BEG	    || irq > TOSHIBA_RBTX4927_IRQ_ISA_END) {		TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_EROR,					     "bad irq=%d\n", irq);		panic("\n");	}	if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) {		toshiba_rbtx4927_irq_isa_enable(irq);	}	return;}#endifvoid __init arch_init_irq(void){	extern void tx4927_irq_init(void);	local_irq_disable();	tx4927_irq_init();	toshiba_rbtx4927_irq_ioc_init();#ifdef CONFIG_TOSHIBA_FPCIB0	{		if (tx4927_using_backplane) {			toshiba_rbtx4927_irq_isa_init();		}	}#endif	wbflush();	return;}void toshiba_rbtx4927_irq_dump(char *key){#ifdef TOSHIBA_RBTX4927_IRQ_DEBUG	{		u32 i, j = 0;		for (i = 0; i < NR_IRQS; i++) {			if (strcmp(irq_desc[i].handler->typename, "none")			    == 0)				continue;			if ((i >= 1)			    && (irq_desc[i - 1].handler->typename ==				irq_desc[i].handler->typename)) {				j++;			} else {				j = 0;			}			TOSHIBA_RBTX4927_IRQ_DPRINTK			    (TOSHIBA_RBTX4927_IRQ_INFO,			     "%s irq=0x%02x/%3d s=0x%08x h=0x%08x a=0x%08x ah=0x%08x d=%1d n=%s/%02d\n",			     key, i, i, irq_desc[i].status,			     (u32) irq_desc[i].handler,			     (u32) irq_desc[i].action,			     (u32) (irq_desc[i].action ? irq_desc[i].				    action->handler : 0),			     irq_desc[i].depth,			     irq_desc[i].handler->typename, j);		}	}#endif	return;}void toshiba_rbtx4927_irq_dump_pics(char *s){	u32 level0_m;	u32 level0_s;	u32 level1_m;	u32 level1_s;	u32 level2;	u32 level2_p;	u32 level2_s;	u32 level3_m;	u32 level3_s;	u32 level4_m;	u32 level4_s;	u32 level5_m;	u32 level5_s;	if (s == NULL)		s = "null";	level0_m = (read_c0_status() & 0x0000ff00) >> 8;	level0_s = (read_c0_cause() & 0x0000ff00) >> 8;	level1_m = level0_m;	level1_s = level0_s & 0x87;	level2 = TX4927_RD(0xff1ff6a0);	level2_p = (((level2 & 0x10000)) ? 0 : 1);	level2_s = (((level2 & 0x1f) == 0x1f) ? 0 : (level2 & 0x1f));	level3_m = reg_rd08(TOSHIBA_RBTX4927_IOC_INTR_ENAB) & 0x1f;	level3_s = reg_rd08(TOSHIBA_RBTX4927_IOC_INTR_STAT) & 0x1f;	level4_m = inb(0x21);	outb(0x0A, 0x20);	level4_s = inb(0x20);	level5_m = inb(0xa1);	outb(0x0A, 0xa0);	level5_s = inb(0xa0);	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_INFO,				     "dump_raw_pic() ");	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_INFO,				     "cp0:m=0x%02x/s=0x%02x ", level0_m,				     level0_s);	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_INFO,				     "cp0:m=0x%02x/s=0x%02x ", level1_m,				     level1_s);	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_INFO,				     "pic:e=0x%02x/s=0x%02x ", level2_p,				     level2_s);	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_INFO,				     "ioc:m=0x%02x/s=0x%02x ", level3_m,				     level3_s);	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_INFO,				     "sbm:m=0x%02x/s=0x%02x ", level4_m,				     level4_s);	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_INFO,				     "sbs:m=0x%02x/s=0x%02x ", level5_m,				     level5_s);	TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_INFO, "[%s]\n",				     s);	return;}

⌨️ 快捷键说明

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