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

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

?? oss.c

?? 一個2.4.21版本的嵌入式linux內核
?? C
字號:
/* *	OSS handling *	Written by Joshua M. Thompson (funaho@jurai.org) * * *	This chip is used in the IIfx in place of VIA #2. It acts like a fancy *	VIA chip with prorammable interrupt levels. * * 990502 (jmt) - Major rewrite for new interrupt architecture as well as some *		  recent insights into OSS operational details. * 990610 (jmt) - Now taking fulll advantage of the OSS. Interrupts are mapped *		  to mostly match the A/UX interrupt scheme supported on the *		  VIA side. Also added support for enabling the ISM irq again *		  since we now have a functional IOP manager. */#include <linux/types.h>#include <linux/kernel.h>#include <linux/mm.h>#include <linux/delay.h>#include <linux/init.h>#include <asm/bootinfo.h> #include <asm/machw.h> #include <asm/macintosh.h> #include <asm/macints.h>#include <asm/mac_via.h>#include <asm/mac_oss.h>int oss_present;volatile struct mac_oss *oss;void oss_irq(int, void *, struct pt_regs *);void oss_nubus_irq(int, void *, struct pt_regs *);extern void via1_irq(int, void *, struct pt_regs *);extern void mac_scc_dispatch(int, void *, struct pt_regs *);/* * Initialize the OSS * * The OSS "detection" code is actually in via_init() which is always called * before us. Thus we can count on oss_present being valid on entry. */void __init oss_init(void){	int i;	if (!oss_present) return;	oss = (struct mac_oss *) OSS_BASE;	/* Disable all interrupts. Unlike a VIA it looks like we    */	/* do this by setting the source's interrupt level to zero. */	for (i = 0; i <= OSS_NUM_SOURCES; i++) {		oss->irq_level[i] = OSS_IRQLEV_DISABLED;	}	/* If we disable VIA1 here, we never really handle it... */	oss->irq_level[OSS_VIA1] = OSS_IRQLEV_VIA1;}/* * Register the OSS and NuBus interrupt dispatchers. */void __init oss_register_interrupts(void){	sys_request_irq(OSS_IRQLEV_SCSI, oss_irq, IRQ_FLG_LOCK,			"scsi", (void *) oss);	sys_request_irq(OSS_IRQLEV_IOPSCC, mac_scc_dispatch, IRQ_FLG_LOCK,			"scc", mac_scc_dispatch);	sys_request_irq(OSS_IRQLEV_NUBUS, oss_nubus_irq, IRQ_FLG_LOCK,			"nubus", (void *) oss);	sys_request_irq(OSS_IRQLEV_SOUND, oss_irq, IRQ_FLG_LOCK,			"sound", (void *) oss);	sys_request_irq(OSS_IRQLEV_VIA1, via1_irq, IRQ_FLG_LOCK,			"via1", (void *) via1);}/* * Initialize OSS for Nubus access */void __init oss_nubus_init(void){}/* * Handle miscellaneous OSS interrupts. Right now that's just sound * and SCSI; everything else is routed to its own autovector IRQ. */ void oss_irq(int irq, void *dev_id, struct pt_regs *regs){	int events;	events = oss->irq_pending & (OSS_IP_SOUND|OSS_IP_SCSI);	if (!events) return;#ifdef DEBUG_IRQS		if ((console_loglevel == 10) && !(events & OSS_IP_SCSI)) {		printk("oss_irq: irq %d events = 0x%04X\n", irq,			(int) oss->irq_pending);	}#endif	/* FIXME: how do you clear a pending IRQ?    */	if (events & OSS_IP_SOUND) {		/* FIXME: call sound handler */		oss->irq_pending &= ~OSS_IP_SOUND;	} else if (events & OSS_IP_SCSI) {		oss->irq_level[OSS_SCSI] = OSS_IRQLEV_DISABLED;		mac_do_irq_list(IRQ_MAC_SCSI, regs);		oss->irq_pending &= ~OSS_IP_SCSI;		oss->irq_level[OSS_SCSI] = OSS_IRQLEV_SCSI;	} else {		/* FIXME: error check here? */	}}/* * Nubus IRQ handler, OSS style * * Unlike the VIA/RBV this is on its own autovector interrupt level. */void oss_nubus_irq(int irq, void *dev_id, struct pt_regs *regs){	int events, irq_bit, i;	events = oss->irq_pending & OSS_IP_NUBUS;	if (!events) return;#ifdef DEBUG_NUBUS_INT	if (console_loglevel > 7) {		printk("oss_nubus_irq: events = 0x%04X\n", events);	}#endif	/* There are only six slots on the OSS, not seven */	for (i = 0, irq_bit = 1 ; i < 6 ; i++, irq_bit <<= 1) {		if (events & irq_bit) {			oss->irq_level[i] = OSS_IRQLEV_DISABLED;			mac_do_irq_list(NUBUS_SOURCE_BASE + i, regs);			oss->irq_pending &= ~irq_bit;			oss->irq_level[i] = OSS_IRQLEV_NUBUS;		}	}}/* * Enable an OSS interrupt * * It looks messy but it's rather straightforward. The switch() statement * just maps the machspec interrupt numbers to the right OSS interrupt * source (if the OSS handles that interrupt) and then sets the interrupt * level for that source to nonzero, thus enabling the interrupt. */void oss_irq_enable(int irq) {#ifdef DEBUG_IRQUSE	printk("oss_irq_enable(%d)\n", irq);#endif	switch(irq) {		case IRQ_SCC:		case IRQ_SCCA:		case IRQ_SCCB:			oss->irq_level[OSS_IOPSCC] = OSS_IRQLEV_IOPSCC;			break;		case IRQ_MAC_ADB:			oss->irq_level[OSS_IOPISM] = OSS_IRQLEV_IOPISM;			break;		case IRQ_MAC_SCSI:			oss->irq_level[OSS_SCSI] = OSS_IRQLEV_SCSI;			break;		case IRQ_NUBUS_9:		case IRQ_NUBUS_A:		case IRQ_NUBUS_B:		case IRQ_NUBUS_C:		case IRQ_NUBUS_D:		case IRQ_NUBUS_E:			irq -= NUBUS_SOURCE_BASE;			oss->irq_level[irq] = OSS_IRQLEV_NUBUS;			break;#ifdef DEBUG_IRQUSE		default:			printk("%s unknown irq %d\n",__FUNCTION__, irq);			break;#endif	}}/* * Disable an OSS interrupt * * Same as above except we set the source's interrupt level to zero, * to disable the interrupt. */void oss_irq_disable(int irq) {#ifdef DEBUG_IRQUSE	printk("oss_irq_disable(%d)\n", irq);#endif	switch(irq) {		case IRQ_SCC:		case IRQ_SCCA:		case IRQ_SCCB:			oss->irq_level[OSS_IOPSCC] = OSS_IRQLEV_DISABLED;			break;		case IRQ_MAC_ADB:			oss->irq_level[OSS_IOPISM] = OSS_IRQLEV_DISABLED;			break;		case IRQ_MAC_SCSI:			oss->irq_level[OSS_SCSI] = OSS_IRQLEV_DISABLED;			break;		case IRQ_NUBUS_9:		case IRQ_NUBUS_A:		case IRQ_NUBUS_B:		case IRQ_NUBUS_C:		case IRQ_NUBUS_D:		case IRQ_NUBUS_E:			irq -= NUBUS_SOURCE_BASE;			oss->irq_level[irq] = OSS_IRQLEV_DISABLED;			break;#ifdef DEBUG_IRQUSE		default:			printk("%s unknown irq %d\n", __FUNCTION__, irq);			break;#endif	}}/* * Clear an OSS interrupt * * Not sure if this works or not but it's the only method I could * think of based on the contents of the mac_oss structure. */void oss_irq_clear(int irq) {	/* FIXME: how to do this on OSS? */	switch(irq) {		case IRQ_SCC:		case IRQ_SCCA:		case IRQ_SCCB:			oss->irq_pending &= ~OSS_IP_IOPSCC;			break;		case IRQ_MAC_ADB:			oss->irq_pending &= ~OSS_IP_IOPISM;			break;		case IRQ_MAC_SCSI:			oss->irq_pending &= ~OSS_IP_SCSI;			break;		case IRQ_NUBUS_9:		case IRQ_NUBUS_A:		case IRQ_NUBUS_B:		case IRQ_NUBUS_C:		case IRQ_NUBUS_D:		case IRQ_NUBUS_E:			irq -= NUBUS_SOURCE_BASE;			oss->irq_pending &= ~(1 << irq);			break;	}}/* * Check to see if a specific OSS interrupt is pending */int oss_irq_pending(int irq){	switch(irq) {		case IRQ_SCC:		case IRQ_SCCA:		case IRQ_SCCB:			return oss->irq_pending & OSS_IP_IOPSCC;			break;		case IRQ_MAC_ADB:			return oss->irq_pending & OSS_IP_IOPISM;			break;		case IRQ_MAC_SCSI:			return oss->irq_pending & OSS_IP_SCSI;			break;		case IRQ_NUBUS_9:		case IRQ_NUBUS_A:		case IRQ_NUBUS_B:		case IRQ_NUBUS_C:		case IRQ_NUBUS_D:		case IRQ_NUBUS_E:			irq -= NUBUS_SOURCE_BASE;			return oss->irq_pending & (1 << irq);			break;	}	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区影视| 91视频你懂的| 婷婷久久综合九色综合伊人色| 亚洲欧美另类在线| 国产欧美一区二区精品性| 欧美不卡激情三级在线观看| 欧美一级片免费看| 日韩视频123| 久久久久久亚洲综合| 久久久久国产一区二区三区四区| 久久青草国产手机看片福利盒子| www国产成人| 欧美国产一区视频在线观看| 国产精品素人一区二区| 中文字幕日韩一区| 亚洲精品国产品国语在线app| 亚洲精品成人在线| 日韩精品成人一区二区在线| 日本欧美在线观看| 国产精品一级片| 91在线视频播放地址| 欧美体内she精视频| 欧美电影在哪看比较好| 久久人人97超碰com| 亚洲天堂2016| 五月婷婷综合网| 国产成人精品三级麻豆| 在线视频中文字幕一区二区| 欧美丰满少妇xxxxx高潮对白| 欧美videos大乳护士334| 国产亲近乱来精品视频| 亚洲综合色在线| 精品亚洲porn| 91免费观看在线| 国产欧美在线观看一区| 亚洲欧洲日韩女同| 日本不卡视频在线| 波多野结衣精品在线| 91精品婷婷国产综合久久竹菊| 久久精品夜夜夜夜久久| 亚洲一区二区三区三| 国产福利精品一区| 欧美日本一区二区| 国产精品美日韩| 男男视频亚洲欧美| 一本色道综合亚洲| 国产亚洲精品bt天堂精选| 亚洲一级片在线观看| 国产精品一二三四| 日韩一卡二卡三卡| 亚洲综合色视频| 91色在线porny| 国产人成亚洲第一网站在线播放 | 色伊人久久综合中文字幕| 日韩欧美一级片| 亚洲一区自拍偷拍| 99麻豆久久久国产精品免费| 欧美va亚洲va| 日韩精品电影一区亚洲| 欧洲精品中文字幕| 亚洲精品视频在线| 夫妻av一区二区| 国产精品另类一区| 国产精品一区二区黑丝| 日韩欧美123| 日韩福利电影在线观看| 欧美在线观看一区| 亚洲精品伦理在线| 91免费观看在线| 亚洲美女免费在线| 色噜噜狠狠成人网p站| 国产精品夫妻自拍| 成人18视频日本| 中文字幕五月欧美| 99精品视频在线观看免费| 国产精品日产欧美久久久久| 国产一区啦啦啦在线观看| 欧美成人高清电影在线| 久久精品国产在热久久| 欧美岛国在线观看| 国产精品一区二区无线| 国产校园另类小说区| 成人午夜精品在线| 亚洲人成亚洲人成在线观看图片 | 精品人伦一区二区色婷婷| 蓝色福利精品导航| 精品日韩成人av| 国产伦理精品不卡| 国产精品理伦片| 一本到不卡免费一区二区| 一区二区三区不卡在线观看| 欧美日韩三级视频| 青草国产精品久久久久久| 欧美精品一区二区三区蜜桃视频| 蜜桃av噜噜一区| 日本一区二区电影| 日本道免费精品一区二区三区| 亚洲一区免费在线观看| 91精品国产综合久久香蕉的特点 | 国产午夜精品久久久久久免费视 | 91精品国产一区二区人妖| 久久99九九99精品| 国产精品视频看| 欧美日韩亚洲丝袜制服| 麻豆精品一区二区av白丝在线| 久久午夜免费电影| 91看片淫黄大片一级| 日韩成人dvd| 成人欧美一区二区三区白人| 精品视频资源站| 国产精品一区二区在线观看网站| 国产精品久久久久久久久免费相片 | 久久久国产精品午夜一区ai换脸| 粉嫩蜜臀av国产精品网站| 亚洲第一成年网| 久久精品欧美一区二区三区麻豆| 99久久精品国产网站| 美女mm1313爽爽久久久蜜臀| 中文字幕二三区不卡| 欧美一级淫片007| 99re热视频这里只精品| 毛片av一区二区| 亚洲一区免费视频| 中文字幕欧美三区| 日韩视频一区二区三区在线播放| 91视频在线看| 高清不卡一区二区| 日本v片在线高清不卡在线观看| 国产精品久久久久久久久免费丝袜| 9191成人精品久久| 欧美性猛交xxxxxxxx| 国产馆精品极品| 日本欧美在线看| 亚洲成人久久影院| 亚洲欧美一区二区久久| 久久久久久久国产精品影院| 欧美精品色综合| 色88888久久久久久影院按摩| 国产一区二区三区久久久| 青青青爽久久午夜综合久久午夜| 1024成人网| 日本一区二区三级电影在线观看 | 国产亚洲1区2区3区| 日韩精品一区二区三区视频| 欧美日韩亚洲不卡| 欧美最新大片在线看 | 欧美色区777第一页| 一本色道久久加勒比精品| 成人午夜免费视频| 粉嫩高潮美女一区二区三区| 国产一区二区导航在线播放| 老司机精品视频在线| 久久99热99| 麻豆精品久久精品色综合| 蜜臀国产一区二区三区在线播放 | 日韩一区二区免费视频| 日韩欧美美女一区二区三区| 91精品免费在线| 欧美一区二区三区免费视频| 欧美一区二区美女| 日韩视频永久免费| 久久久国产精品午夜一区ai换脸| 久久综合精品国产一区二区三区| 欧美不卡一区二区三区四区| 久久久久久99久久久精品网站| 国产亚洲欧美日韩日本| 国产精品久久久久久久久免费相片| 国产精品久久久久婷婷| 亚洲三级免费观看| 午夜精品久久久久久久| 免费一级片91| 国产69精品久久久久777| 播五月开心婷婷综合| 欧洲精品在线观看| 精品国精品国产| 国产精品色婷婷| 亚洲综合色婷婷| 久久99精品一区二区三区| 成人免费的视频| 欧美一区二区三区不卡| 亚洲精品在线免费播放| 国产精品女同一区二区三区| 亚洲黄网站在线观看| 麻豆精品视频在线观看视频| 国产成人精品一区二| 日本韩国欧美三级| 精品免费99久久| 亚洲欧美aⅴ...| 韩国av一区二区| 在线观看av一区| 久久久91精品国产一区二区精品| 亚洲天堂网中文字| 麻豆精品在线播放| 色综合中文字幕国产 | 紧缚奴在线一区二区三区| jlzzjlzz亚洲日本少妇| 日韩欧美一级片| 亚洲综合av网| 99热国产精品| 久久综合精品国产一区二区三区 |