亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? malta_int.c

?? 根據添加了fs2410平臺的arch目錄
?? C
字號:
/* * Carsten Langgaard, carstenl@mips.com * Copyright (C) 2000 MIPS Technologies, Inc.  All rights reserved. * * ######################################################################## * *  This program is free software; you can distribute it and/or modify it *  under the terms of the GNU General Public License (Version 2) as *  published by the Free Software Foundation. * *  This program is distributed in the hope it will be useful, but WITHOUT *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *  for more details. * *  You should have received a copy of the GNU General Public License along *  with this program; if not, write to the Free Software Foundation, Inc., *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA. * * ######################################################################## * * Routines for generic manipulation of the interrupts found on the MIPS  * Malta board. * The interrupt controller is located in the South Bridge a PIIX4 device  * with two internal 82C95 interrupt controllers. * */#include <linux/config.h>#include <linux/init.h>#include <linux/sched.h>#include <linux/slab.h>#include <linux/interrupt.h>#include <linux/kernel_stat.h>#include <linux/random.h>#include <asm/irq.h>#include <asm/io.h>#include <asm/mips-boards/malta.h>#include <asm/mips-boards/maltaint.h>#include <asm/mips-boards/piix4.h>#include <asm/mips-boards/gt64120.h>#include <asm/mips-boards/generic.h>extern asmlinkage void mipsIRQ(void);unsigned int local_bh_count[NR_CPUS];unsigned int local_irq_count[NR_CPUS];unsigned long spurious_count = 0;static struct irqaction *hw0_irq_action[MALTAINT_END] = {	NULL, NULL, NULL, NULL,	NULL, NULL, NULL, NULL,	NULL, NULL, NULL, NULL,	NULL, NULL, NULL, NULL};static struct irqaction r4ktimer_action = {	NULL, 0, 0, "R4000 timer/counter", NULL, NULL,};static struct irqaction *irq_action[8] = {	NULL, NULL, NULL, NULL,	NULL, NULL, NULL, &r4ktimer_action};#if 0#define DEBUG_INT(x...) printk(x)#else#define DEBUG_INT(x...)#endif/* * This contains the interrupt mask for both 82C59 interrupt controllers. */static unsigned int cached_int_mask = 0xffff;void disable_irq(unsigned int irq_nr){        unsigned long flags;	if(irq_nr >= MALTAINT_END) {		printk("whee, invalid irq_nr %d\n", irq_nr);		panic("IRQ, you lose...");	}	save_and_cli(flags);	cached_int_mask |= (1 << irq_nr);	if (irq_nr & 8) {	        outb((cached_int_mask >> 8) & 0xff, PIIX4_ICTLR2_OCW1);	} else {		outb(cached_int_mask & 0xff, PIIX4_ICTLR1_OCW1);	}	restore_flags(flags);}void enable_irq(unsigned int irq_nr){        unsigned long flags;	if(irq_nr >= MALTAINT_END) {		printk("whee, invalid irq_nr %d\n", irq_nr);		panic("IRQ, you lose...");	}	save_and_cli(flags);	cached_int_mask &= ~(1 << irq_nr);	if (irq_nr & 8) {		outb((cached_int_mask >> 8) & 0xff, PIIX4_ICTLR2_OCW1);		/* Enable irq 2 (cascade interrupt). */	        cached_int_mask &= ~(1 << 2); 		outb(cached_int_mask & 0xff, PIIX4_ICTLR1_OCW1);	} else {		outb(cached_int_mask & 0xff, PIIX4_ICTLR1_OCW1);	}		restore_flags(flags);}int get_irq_list(char *buf){	int i, len = 0;	int num = 0;	struct irqaction *action;	for (i = 0; i < 8; i++, num++) {		action = irq_action[i];		if (!action) 			continue;		len += sprintf(buf+len, "%2d: %8d %c %s",			num, kstat.irqs[0][num],			(action->flags & SA_INTERRUPT) ? '+' : ' ',			action->name);		for (action=action->next; action; action = action->next) {			len += sprintf(buf+len, ",%s %s",				(action->flags & SA_INTERRUPT) ? " +" : "",				action->name);		}		len += sprintf(buf+len, " [on-chip]\n");	}	for (i = 0; i < MALTAINT_END; i++, num++) {		action = hw0_irq_action[i];		if (!action) 			continue;		len += sprintf(buf+len, "%2d: %8d %c %s",			num, kstat.irqs[0][num],			(action->flags & SA_INTERRUPT) ? '+' : ' ',			action->name);		for (action=action->next; action; action = action->next) {			len += sprintf(buf+len, ",%s %s",				(action->flags & SA_INTERRUPT) ? " +" : "",				action->name);		}		len += sprintf(buf+len, " [hw0]\n");	}	return len;}int request_irq(unsigned int irq, 		void (*handler)(int, void *, struct pt_regs *),		unsigned long irqflags, 		const char * devname,		void *dev_id){          struct irqaction *action;	int retval;	DEBUG_INT("request_irq: irq=%d, devname = %s\n", irq, devname);        if (irq >= MALTAINT_END)	        return -EINVAL;	if (!handler)	        return -EINVAL;	action = (struct irqaction *)kmalloc(sizeof(struct irqaction), GFP_KERNEL);	if(!action)	        return -ENOMEM;	action->handler = handler;	action->flags = irqflags;	action->mask = 0;	action->name = devname;	action->dev_id = dev_id;	action->next = 0;	retval = setup_irq(irq, action);	if (retval)		kfree(action);	return retval;	}void free_irq(unsigned int irq, void *dev_id){	struct irqaction *action, **p;	if (irq >= MALTAINT_END) {		printk("Trying to free IRQ%d\n",irq);		return;	}		for (p = &hw0_irq_action[irq]; (action = *p) != NULL; 	     p = &action->next) 	{		if (action->dev_id != dev_id)			continue;		/* Found it - now free it */		*p = action->next;		kfree(action);		if (!hw0_irq_action[irq])			disable_irq(irq);		return;	}	printk("Trying to free IRQ%d\n",irq);}void __init init_IRQ(void){	irq_setup();}static int setup_irq(unsigned int irq, struct irqaction * new){	int shared = 0;	struct irqaction *old, **p;	p = &hw0_irq_action[irq];	if ((old = *p) != NULL) {		/* Can't share interrupts unless both agree to */		if (!(old->flags & new->flags & SA_SHIRQ))			return -EBUSY;		/* Can't share interrupts unless both are same type */		if ((old->flags ^ new->flags) & SA_INTERRUPT)			return -EBUSY;		/* add new interrupt at end of irq queue */		do {			p = &old->next;			old = *p;		} while (old);		shared = 1;	}	if (new->flags & SA_SAMPLE_RANDOM)		rand_initialize_irq(irq);	*p = new;	if (!shared)		enable_irq(irq);	return 0;}static inline int get_int(int *irq){	/*  	 * Determine highest priority pending interrupt by performing         * a PCI Interrupt Acknowledge cycle.	 */	GT_READ(GT_PCI0_IACK_OFS, *irq);	*irq &= 0xFF;	/*  	 * IRQ7 is used to detect spurious interrupts.	 * The interrupt acknowledge cycle returns IRQ7, if no 	 * interrupts is requested.	 * We can differentiate between this situation and a	 * "Normal" IRQ7 by reading the ISR.	 */	if (*irq == 7) 	{		outb(PIIX4_OCW3_SEL | PIIX4_OCW3_ISR, PIIX4_ICTLR1_OCW3);		if (!(inb(PIIX4_ICTLR1_OCW3) & (1 << 7)))		        return -1;    /* Spurious interrupt. */	}	return 0;}static inline void ack_int(int irq){	if (irq & 8) {	        /* Specific EOI to cascade */		outb(PIIX4_OCW2_SEL | PIIX4_OCW2_NSEOI | PIIX4_OCW2_ILS_2, 		     PIIX4_ICTLR1_OCW2);	        /* Non specific EOI to cascade */		outb(PIIX4_OCW2_SEL | PIIX4_OCW2_NSEOI, PIIX4_ICTLR2_OCW2);	} else {	        /* Non specific EOI to cascade */		outb(PIIX4_OCW2_SEL | PIIX4_OCW2_NSEOI, PIIX4_ICTLR1_OCW2);	}}void malta_hw0_irqdispatch(struct pt_regs *regs){        struct irqaction *action;	int irq=0, cpu = smp_processor_id();	DEBUG_INT("malta_hw0_irqdispatch\n");		if (get_int(&irq))	        return;  /* interrupt has already been cleared */	disable_irq(irq);	ack_int(irq);	DEBUG_INT("malta_hw0_irqdispatch: irq=%d\n", irq);	action = hw0_irq_action[irq];	/* 	 * if action == NULL, then we don't have a handler 	 * for the irq 	 */	if ( action == NULL )		return;	irq_enter(cpu, irq);	kstat.irqs[0][irq + 8]++;	do {	        action->handler(irq, action->dev_id, regs);		action = action->next;	} while (action);	enable_irq(irq);	irq_exit(cpu, irq);}unsigned long probe_irq_on (void){	unsigned int i, irqs = 0;	unsigned long delay;	/* first, enable any unassigned irqs */	for (i = MALTAINT_END-1; i > 0; i--) {		if (!hw0_irq_action[i]) {			enable_irq(i);			irqs |= (1 << i);		}	}	/* wait for spurious interrupts to mask themselves out again */	for (delay = jiffies + HZ/10; time_before(jiffies, delay); )		/* about 100ms delay */;	/* now filter out any obviously spurious interrupts */	return irqs & ~cached_int_mask;}int probe_irq_off (unsigned long irqs){	unsigned int i;	irqs &= cached_int_mask;	if (!irqs)		return 0;	i = ffz(~irqs);	if (irqs != (irqs & (1 << i)))		i = -i;	return i;}void __init maltaint_init(void){        /* 	 * Mask out all interrupt by writing "1" to all bit position in 	 * the IMR register. 	 */	outb(cached_int_mask & 0xff, PIIX4_ICTLR1_OCW1);	outb((cached_int_mask >> 8) & 0xff, PIIX4_ICTLR2_OCW1);	/* Now safe to set the exception vector. */	set_except_vector(0, mipsIRQ);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区三区精华液| 精品第一国产综合精品aⅴ| 美国一区二区三区在线播放| 亚洲精品欧美在线| 亚洲裸体在线观看| 中文字幕亚洲在| 亚洲男人天堂一区| 午夜精品一区二区三区电影天堂| 日本成人在线网站| 三级欧美韩日大片在线看| 视频一区视频二区在线观看| 日韩—二三区免费观看av| 日韩二区在线观看| 韩国欧美一区二区| 99久久久久免费精品国产| 日本丶国产丶欧美色综合| 欧美日韩精品欧美日韩精品一 | www.激情成人| youjizz久久| 欧美色老头old∨ideo| 7777精品伊人久久久大香线蕉经典版下载 | 国产女人18水真多18精品一级做| 亚洲精品一区二区在线观看| 久久久亚洲精品石原莉奈| 国产三级三级三级精品8ⅰ区| 国产欧美日韩在线看| 亚洲视频在线一区观看| 亚洲成av人片在线观看无码| 美国毛片一区二区| 成人免费毛片片v| 欧美写真视频网站| 久久美女艺术照精彩视频福利播放| 国产精品你懂的在线欣赏| 亚洲国产日韩精品| 国产尤物一区二区| 欧洲一区二区三区在线| 精品粉嫩aⅴ一区二区三区四区| 国产精品女同互慰在线看| 婷婷中文字幕一区三区| 国产成人综合网站| 欧美欧美欧美欧美首页| 亚洲国产成人在线| 日韩黄色免费电影| 成人黄色av电影| 日韩精品一区二区三区中文不卡 | 色哟哟亚洲精品| 日韩欧美一区二区免费| 国产精品久久久久一区二区三区共 | 亚洲欧洲日韩在线| 免费在线欧美视频| 色一区在线观看| 国产色综合一区| 蜜桃视频第一区免费观看| 一本久久精品一区二区| 国产香蕉久久精品综合网| 日韩国产欧美在线观看| 色狠狠av一区二区三区| 国产精品丝袜一区| 国产成人小视频| 久久这里都是精品| 蜜桃视频第一区免费观看| 欧美影院精品一区| 亚洲精品久久嫩草网站秘色| 国产米奇在线777精品观看| 91精品国产综合久久福利软件 | 精品国产一区二区国模嫣然| 天天亚洲美女在线视频| 欧美日韩综合在线免费观看| 日本伊人精品一区二区三区观看方式| 91麻豆福利精品推荐| 久久精品亚洲精品国产欧美| 精品综合久久久久久8888| 日韩一区二区三区四区| 日韩黄色免费电影| 91精品麻豆日日躁夜夜躁| 日韩精品电影在线| 欧美一区二区网站| 久久精品免费观看| 2017欧美狠狠色| 国产麻豆精品95视频| 久久久亚洲综合| 不卡欧美aaaaa| 亚洲精品乱码久久久久| 欧美日韩激情一区| 日本成人在线看| 久久久综合网站| 成人黄色小视频在线观看| 亚洲欧美日韩系列| 欧美情侣在线播放| 国产真实乱对白精彩久久| 久久精品视频一区二区| 99麻豆久久久国产精品免费| 亚洲人成网站色在线观看| 欧美在线观看一二区| 蜜臀av一级做a爰片久久| 久久久一区二区| 91美女视频网站| 视频一区免费在线观看| 国产三级精品在线| 欧美午夜寂寞影院| 国产在线一区观看| 亚洲精品国产精品乱码不99| 欧美久久久一区| 国产盗摄女厕一区二区三区| 亚洲人成小说网站色在线 | 91亚洲精品一区二区乱码| 亚洲欧美国产高清| 精品国产一区二区三区不卡 | 一区二区三区在线观看欧美| 欧美一级夜夜爽| 成人激情综合网站| 日韩国产在线一| 中文字幕免费不卡在线| 88在线观看91蜜桃国自产| 国产精品77777竹菊影视小说| 亚洲精品中文字幕乱码三区| 精品剧情v国产在线观看在线| 91小视频在线免费看| 一本久道中文字幕精品亚洲嫩| 日韩二区三区在线观看| 亚洲欧洲一区二区在线播放| 精品免费一区二区三区| 欧美自拍偷拍一区| 国产成人av在线影院| 免费不卡在线视频| 有码一区二区三区| 国产欧美日韩激情| 精品久久久久久亚洲综合网| 欧美性极品少妇| 99久久久国产精品| 国产成a人无v码亚洲福利| 秋霞国产午夜精品免费视频| 亚洲人吸女人奶水| 国产精品美女一区二区三区| 日韩欧美一区二区不卡| 3atv一区二区三区| 欧美性受xxxx黑人xyx性爽| caoporn国产精品| 国产成人a级片| 国产一区二区精品在线观看| 美女视频黄 久久| 亚洲午夜精品在线| 亚洲欧洲国产日韩| 国产精品伦理一区二区| 久久这里只有精品首页| 欧美电视剧免费全集观看| 欧美天天综合网| 在线视频欧美精品| 欧美性xxxxxx少妇| 欧美日韩在线播| 欧美性感一区二区三区| 欧美日韩国产一区二区三区地区| 欧美日韩日日摸| 欧美精品免费视频| 欧美精品乱人伦久久久久久| 欧美伦理电影网| 欧美疯狂性受xxxxx喷水图片| 欧美午夜一区二区| 666欧美在线视频| 欧美一级理论片| www精品美女久久久tv| 国产午夜精品久久| 中文字幕日韩精品一区| 亚洲三级在线看| 亚洲国产美女搞黄色| 亚洲444eee在线观看| 日本欧美加勒比视频| 久99久精品视频免费观看| 国内不卡的二区三区中文字幕 | 日韩不卡一区二区三区| 天堂久久久久va久久久久| 日韩主播视频在线| 精品一区二区三区在线视频| 国产在线视频一区二区三区| 成人av电影在线| 91成人网在线| 精品少妇一区二区三区视频免付费 | 国产一区中文字幕| 成人毛片视频在线观看| 欧洲在线/亚洲| 精品久久久久久久一区二区蜜臀| 国产精品欧美极品| 亚洲mv在线观看| 国产乱码精品1区2区3区| 色视频一区二区| 日韩欧美在线网站| 亚洲日本va午夜在线影院| 日本aⅴ免费视频一区二区三区| 福利一区在线观看| 在线综合视频播放| 中文一区二区完整视频在线观看| 亚洲一区二区视频在线| 国产一区二区三区| 欧美精品一二三| 最近中文字幕一区二区三区| 日本不卡一区二区三区高清视频| 国产成人av电影在线观看| 欧美视频一区在线| 国产精品无码永久免费888| 免费在线观看日韩欧美|