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

📄 tx4927_irq.c

📁 linux-2.4.29操作系统的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#endif	if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) {		tx4927_irq_cp0_enable(irq);	}	return;}/* * Functions for pic */u32 tx4927_irq_pic_addr(int irq){	/* MVMCP -- need to formulize this */	irq -= TX4927_IRQ_PIC_BEG;	switch (irq) {	case 17:	case 16:	case 1:	case 0:		return (0xff1ff610);	case 19:	case 18:	case 3:	case 2:		return (0xff1ff614);	case 21:	case 20:	case 5:	case 4:		return (0xff1ff618);	case 23:	case 22:	case 7:	case 6:		return (0xff1ff61c);	case 25:	case 24:	case 9:	case 8:		return (0xff1ff620);	case 27:	case 26:	case 11:	case 10:		return (0xff1ff624);	case 29:	case 28:	case 13:	case 12:		return (0xff1ff628);	case 31:	case 30:	case 15:	case 14:		return (0xff1ff62c);	}	return (0);}u32 tx4927_irq_pic_mask(int irq){	/* MVMCP -- need to formulize this */	irq -= TX4927_IRQ_PIC_BEG;	switch (irq) {	case 31:	case 29:	case 27:	case 25:	case 23:	case 21:	case 19:	case 17:{			return (0x07000000);		}	case 30:	case 28:	case 26:	case 24:	case 22:	case 20:	case 18:	case 16:{			return (0x00070000);		}	case 15:	case 13:	case 11:	case 9:	case 7:	case 5:	case 3:	case 1:{			return (0x00000700);		}	case 14:	case 12:	case 10:	case 8:	case 6:	case 4:	case 2:	case 0:{			return (0x00000007);		}	}	return (0x00000000);}static void tx4927_irq_pic_modify(unsigned pic_reg, unsigned clr_bits,	unsigned set_bits){	unsigned long val = 0;	val = TX4927_RD(pic_reg);	val &= (~clr_bits);	val |= (set_bits);	TX4927_WR(pic_reg, val);	return;}static void __init tx4927_irq_pic_init(void){	unsigned long flags;	int i;	TX4927_IRQ_DPRINTK(TX4927_IRQ_PIC_INIT, "beg=%d end=%d\n",			   TX4927_IRQ_PIC_BEG, TX4927_IRQ_PIC_END);	for (i = TX4927_IRQ_PIC_BEG; i <= TX4927_IRQ_PIC_END; i++) {		irq_desc[i].status = IRQ_DISABLED;		irq_desc[i].action = 0;		irq_desc[i].depth = 2;		irq_desc[i].handler = &tx4927_irq_pic_type;	}	setup_irq(TX4927_IRQ_NEST_PIC_ON_CP0, &tx4927_irq_pic_action);	spin_lock_irqsave(&tx4927_pic_lock, flags);	TX4927_WR(0xff1ff640, 0x6);	/* irq level mask -- only accept hightest */	TX4927_WR(0xff1ff600, TX4927_RD(0xff1ff600) | 0x1);	/* irq enable */	spin_unlock_irqrestore(&tx4927_pic_lock, flags);	return;}static unsigned int tx4927_irq_pic_startup(unsigned int irq){	TX4927_IRQ_DPRINTK(TX4927_IRQ_PIC_STARTUP, "irq=%d\n", irq);#ifdef TX4927_IRQ_CHECK_PIC	{		if (irq < TX4927_IRQ_PIC_BEG || irq > TX4927_IRQ_PIC_END) {			TX4927_IRQ_DPRINTK(TX4927_IRQ_EROR,					   "bad irq=%d \n", irq);			panic("\n");		}	}#endif	tx4927_irq_pic_enable(irq);	return (0);}static void tx4927_irq_pic_shutdown(unsigned int irq){	TX4927_IRQ_DPRINTK(TX4927_IRQ_PIC_SHUTDOWN, "irq=%d\n", irq);#ifdef TX4927_IRQ_CHECK_PIC	{		if (irq < TX4927_IRQ_PIC_BEG || irq > TX4927_IRQ_PIC_END) {			TX4927_IRQ_DPRINTK(TX4927_IRQ_EROR,					   "bad irq=%d \n", irq);			panic("\n");		}	}#endif	tx4927_irq_pic_disable(irq);	return;}static void tx4927_irq_pic_enable(unsigned int irq){	unsigned long flags;	TX4927_IRQ_DPRINTK(TX4927_IRQ_PIC_ENABLE, "irq=%d\n", irq);#ifdef TX4927_IRQ_CHECK_PIC	{		if (irq < TX4927_IRQ_PIC_BEG || irq > TX4927_IRQ_PIC_END) {			TX4927_IRQ_DPRINTK(TX4927_IRQ_EROR,					   "bad irq=%d \n", irq);			panic("\n");		}	}#endif	spin_lock_irqsave(&tx4927_pic_lock, flags);	tx4927_irq_pic_modify(tx4927_irq_pic_addr(irq), 0,			      tx4927_irq_pic_mask(irq));	spin_unlock_irqrestore(&tx4927_pic_lock, flags);	return;}static void tx4927_irq_pic_disable(unsigned int irq){	unsigned long flags;	TX4927_IRQ_DPRINTK(TX4927_IRQ_PIC_DISABLE, "irq=%d\n", irq);#ifdef TX4927_IRQ_CHECK_PIC	{		if (irq < TX4927_IRQ_PIC_BEG || irq > TX4927_IRQ_PIC_END) {			TX4927_IRQ_DPRINTK(TX4927_IRQ_EROR,					   "bad irq=%d \n", irq);			panic("\n");		}	}#endif	spin_lock_irqsave(&tx4927_pic_lock, flags);	tx4927_irq_pic_modify(tx4927_irq_pic_addr(irq),			      tx4927_irq_pic_mask(irq), 0);	spin_unlock_irqrestore(&tx4927_pic_lock, flags);	return;}static void tx4927_irq_pic_mask_and_ack(unsigned int irq){	TX4927_IRQ_DPRINTK(TX4927_IRQ_PIC_MASK, "irq=%d\n", irq);#ifdef TX4927_IRQ_CHECK_PIC	{		if (irq < TX4927_IRQ_PIC_BEG || irq > TX4927_IRQ_PIC_END) {			TX4927_IRQ_DPRINTK(TX4927_IRQ_EROR,					   "bad irq=%d \n", irq);			panic("\n");		}	}#endif	tx4927_irq_pic_disable(irq);	return;}static void tx4927_irq_pic_end(unsigned int irq){	TX4927_IRQ_DPRINTK(TX4927_IRQ_PIC_ENDIRQ, "irq=%d\n", irq);#ifdef TX4927_IRQ_CHECK_PIC	{		if (irq < TX4927_IRQ_PIC_BEG || irq > TX4927_IRQ_PIC_END) {			TX4927_IRQ_DPRINTK(TX4927_IRQ_EROR,					   "bad irq=%d \n", irq);			panic("\n");		}	}#endif	if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) {		tx4927_irq_pic_enable(irq);	}	return;}/* * Main init functions */void __init tx4927_irq_init(void){	extern asmlinkage void tx4927_irq_handler(void);	TX4927_IRQ_DPRINTK(TX4927_IRQ_INIT, "-\n");	TX4927_IRQ_DPRINTK(TX4927_IRQ_INIT, "=Calling tx4927_irq_cp0_init()\n");	tx4927_irq_cp0_init();	TX4927_IRQ_DPRINTK(TX4927_IRQ_INIT, "=Calling tx4927_irq_pic_init()\n");	tx4927_irq_pic_init();	TX4927_IRQ_DPRINTK(TX4927_IRQ_INIT,			   "=Calling set_except_vector(tx4927_irq_handler)\n");	set_except_vector(0, tx4927_irq_handler);	TX4927_IRQ_DPRINTK(TX4927_IRQ_INIT, "+\n");	return;}int tx4927_irq_nested(void){	int sw_irq = 0;	u32 level2;	TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST1, "-\n");	level2 = TX4927_RD(0xff1ff6a0);	TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST2, "=level2a=0x%x\n", level2);	if ((level2 & 0x10000) == 0) {		level2 &= 0x1f;		TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST3, "=level2b=0x%x\n", level2);		sw_irq = TX4927_IRQ_PIC_BEG + level2;		TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST3, "=sw_irq=%d\n", sw_irq);		if (sw_irq == 27) {			TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST4, "=irq-%d\n",					   sw_irq);#ifdef CONFIG_TOSHIBA_RBTX4927			{				extern int toshiba_rbtx4927_irq_nested(int sw_irq);				sw_irq = toshiba_rbtx4927_irq_nested(sw_irq);			}#endif			TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST4, "=irq+%d\n",					   sw_irq);		}	}	TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST2, "=sw_irq=%d\n", sw_irq);	TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST1, "+\n");	return (sw_irq);}

⌨️ 快捷键说明

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