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

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

?? sys_cabriolet.c

?? ARM 嵌入式 系統 設計與實例開發 實驗教材 二源碼
?? C
字號:
/* *	linux/arch/alpha/kernel/sys_cabriolet.c * *	Copyright (C) 1995 David A Rusling *	Copyright (C) 1996 Jay A Estabrook *	Copyright (C) 1998, 1999, 2000 Richard Henderson * * Code supporting the Cabriolet (AlphaPC64), EB66+, and EB164, * PC164 and LX164. */#include <linux/config.h>#include <linux/kernel.h>#include <linux/types.h>#include <linux/mm.h>#include <linux/sched.h>#include <linux/pci.h>#include <linux/init.h>#include <asm/ptrace.h>#include <asm/system.h>#include <asm/dma.h>#include <asm/irq.h>#include <asm/bitops.h>#include <asm/mmu_context.h>#include <asm/io.h>#include <asm/pgtable.h>#include <asm/core_apecs.h>#include <asm/core_cia.h>#include <asm/core_lca.h>#include "proto.h"#include "irq_impl.h"#include "pci_impl.h"#include "machvec_impl.h"/* Note mask bit is true for DISABLED irqs.  */static unsigned long cached_irq_mask = ~0UL;static inline voidcabriolet_update_irq_hw(unsigned int irq, unsigned long mask){	int ofs = (irq - 16) / 8;	outb(mask >> (16 + ofs * 8), 0x804 + ofs);}static inline voidcabriolet_enable_irq(unsigned int irq){	cabriolet_update_irq_hw(irq, cached_irq_mask &= ~(1UL << irq));}static voidcabriolet_disable_irq(unsigned int irq){	cabriolet_update_irq_hw(irq, cached_irq_mask |= 1UL << irq);}static unsigned intcabriolet_startup_irq(unsigned int irq){ 	cabriolet_enable_irq(irq);	return 0; /* never anything pending */}static voidcabriolet_end_irq(unsigned int irq){ 	if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))		cabriolet_enable_irq(irq);}static struct hw_interrupt_type cabriolet_irq_type = {	typename:	"CABRIOLET",	startup:	cabriolet_startup_irq,	shutdown:	cabriolet_disable_irq,	enable:		cabriolet_enable_irq,	disable:	cabriolet_disable_irq,	ack:		cabriolet_disable_irq,	end:		cabriolet_end_irq,};static void cabriolet_device_interrupt(unsigned long v, struct pt_regs *r){	unsigned long pld;	unsigned int i;	/* Read the interrupt summary registers */	pld = inb(0x804) | (inb(0x805) << 8) | (inb(0x806) << 16);	/*	 * Now for every possible bit set, work through them and call	 * the appropriate interrupt handler.	 */	while (pld) {		i = ffz(~pld);		pld &= pld - 1;	/* clear least bit set */		if (i == 4) {			isa_device_interrupt(v, r);		} else {			handle_irq(16 + i, r);		}	}}static void __initcommon_init_irq(void (*srm_dev_int)(unsigned long v, struct pt_regs *r)){	init_i8259a_irqs();	if (alpha_using_srm) {		alpha_mv.device_interrupt = srm_dev_int;		init_srm_irqs(35, 0);	}	else {		long i;		outb(0xff, 0x804);		outb(0xff, 0x805);		outb(0xff, 0x806);		for (i = 16; i < 35; ++i) {			irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;			irq_desc[i].handler = &cabriolet_irq_type;		}	}	common_init_isa_dma();	setup_irq(16+4, &isa_cascade_irqaction);}static void __initcabriolet_init_irq(void){	common_init_irq(srm_device_interrupt);}#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_PC164)/* In theory, the PC164 has the same interrupt hardware as the other   Cabriolet based systems.  However, something got screwed up late   in the development cycle which broke the interrupt masking hardware.   Repeat, it is not possible to mask and ack interrupts.  At all.   In an attempt to work around this, while processing interrupts,   we do not allow the IPL to drop below what it is currently.  This   prevents the possibility of recursion.     ??? Another option might be to force all PCI devices to use edge   triggered rather than level triggered interrupts.  That might be   too invasive though.  */static voidpc164_srm_device_interrupt(unsigned long v, struct pt_regs *r){	__min_ipl = getipl();	srm_device_interrupt(v, r);	__min_ipl = 0;}static voidpc164_device_interrupt(unsigned long v, struct pt_regs *r){	__min_ipl = getipl();	cabriolet_device_interrupt(v, r);	__min_ipl = 0;}static void __initpc164_init_irq(void){	common_init_irq(pc164_srm_device_interrupt);}#endif/* * The EB66+ is very similar to the EB66 except that it does not have * the on-board NCR and Tulip chips.  In the code below, I have used * slot number to refer to the id select line and *not* the slot * number used in the EB66+ documentation.  However, in the table, * I've given the slot number, the id select line and the Jxx number * that's printed on the board.  The interrupt pins from the PCI slots * are wired into 3 interrupt summary registers at 0x804, 0x805 and * 0x806 ISA. * * In the table, -1 means don't assign an IRQ number.  This is usually * because it is the Saturn IO (SIO) PCI/ISA Bridge Chip. */static inline int __initeb66p_map_irq(struct pci_dev *dev, u8 slot, u8 pin){	static char irq_tab[5][5] __initdata = {		/*INT  INTA  INTB  INTC   INTD */		{16+0, 16+0, 16+5,  16+9, 16+13},  /* IdSel 6,  slot 0, J25 */		{16+1, 16+1, 16+6, 16+10, 16+14},  /* IdSel 7,  slot 1, J26 */		{  -1,   -1,   -1,    -1,    -1},  /* IdSel 8,  SIO         */		{16+2, 16+2, 16+7, 16+11, 16+15},  /* IdSel 9,  slot 2, J27 */		{16+3, 16+3, 16+8, 16+12,  16+6}   /* IdSel 10, slot 3, J28 */	};	const long min_idsel = 6, max_idsel = 10, irqs_per_slot = 5;	return COMMON_TABLE_LOOKUP;}/* * The AlphaPC64 is very similar to the EB66+ except that its slots * are numbered differently.  In the code below, I have used slot * number to refer to the id select line and *not* the slot number * used in the AlphaPC64 documentation.  However, in the table, I've * given the slot number, the id select line and the Jxx number that's * printed on the board.  The interrupt pins from the PCI slots are * wired into 3 interrupt summary registers at 0x804, 0x805 and 0x806 * ISA. * * In the table, -1 means don't assign an IRQ number.  This is usually * because it is the Saturn IO (SIO) PCI/ISA Bridge Chip. */static inline int __initcabriolet_map_irq(struct pci_dev *dev, u8 slot, u8 pin){	static char irq_tab[5][5] __initdata = {		/*INT   INTA  INTB  INTC   INTD */		{ 16+2, 16+2, 16+7, 16+11, 16+15}, /* IdSel 5,  slot 2, J21 */		{ 16+0, 16+0, 16+5,  16+9, 16+13}, /* IdSel 6,  slot 0, J19 */		{ 16+1, 16+1, 16+6, 16+10, 16+14}, /* IdSel 7,  slot 1, J20 */		{   -1,   -1,   -1,    -1,    -1}, /* IdSel 8,  SIO         */		{ 16+3, 16+3, 16+8, 16+12, 16+16}  /* IdSel 9,  slot 3, J22 */	};	const long min_idsel = 5, max_idsel = 9, irqs_per_slot = 5;	return COMMON_TABLE_LOOKUP;}static inline void __initcabriolet_init_pci(void){	common_init_pci();	ns87312_enable_ide(0x398);}static inline void __initcia_cab_init_pci(void){	cia_init_pci();	ns87312_enable_ide(0x398);}/* * The PC164 and LX164 have 19 PCI interrupts, four from each of the four * PCI slots, the SIO, PCI/IDE, and USB. *  * Each of the interrupts can be individually masked. This is * accomplished by setting the appropriate bit in the mask register. * A bit is set by writing a "1" to the desired position in the mask * register and cleared by writing a "0". There are 3 mask registers * located at ISA address 804h, 805h and 806h. *  * An I/O read at ISA address 804h, 805h, 806h will return the * state of the 11 PCI interrupts and not the state of the MASKED * interrupts. *  * Note: A write to I/O 804h, 805h, and 806h the mask register will be * updated. *  *  * 				ISA DATA<7:0> * ISA     +--------------------------------------------------------------+ * ADDRESS |   7   |   6   |   5   |   4   |   3   |   2  |   1   |   0   | *         +==============================================================+ * 0x804   | INTB0 |  USB  |  IDE  |  SIO  | INTA3 |INTA2 | INTA1 | INTA0 | *         +--------------------------------------------------------------+ * 0x805   | INTD0 | INTC3 | INTC2 | INTC1 | INTC0 |INTB3 | INTB2 | INTB1 | *         +--------------------------------------------------------------+ * 0x806   | Rsrv  | Rsrv  | Rsrv  | Rsrv  | Rsrv  |INTD3 | INTD2 | INTD1 | *         +--------------------------------------------------------------+ *         * Rsrv = reserved bits *         Note: The mask register is write-only. *  * IdSel	 *   5	 32 bit PCI option slot 2 *   6	 64 bit PCI option slot 0 *   7	 64 bit PCI option slot 1 *   8	 Saturn I/O *   9	 32 bit PCI option slot 3 *  10	 USB *  11	 IDE *  */static inline int __initalphapc164_map_irq(struct pci_dev *dev, u8 slot, u8 pin){	static char irq_tab[7][5] __initdata = {		/*INT   INTA  INTB   INTC   INTD */		{ 16+2, 16+2, 16+9,  16+13, 16+17}, /* IdSel  5, slot 2, J20 */		{ 16+0, 16+0, 16+7,  16+11, 16+15}, /* IdSel  6, slot 0, J29 */		{ 16+1, 16+1, 16+8,  16+12, 16+16}, /* IdSel  7, slot 1, J26 */		{   -1,   -1,   -1,    -1,    -1},  /* IdSel  8, SIO */		{ 16+3, 16+3, 16+10, 16+14, 16+18}, /* IdSel  9, slot 3, J19 */		{ 16+6, 16+6, 16+6,  16+6,  16+6},  /* IdSel 10, USB */		{ 16+5, 16+5, 16+5,  16+5,  16+5}   /* IdSel 11, IDE */	};	const long min_idsel = 5, max_idsel = 11, irqs_per_slot = 5;	return COMMON_TABLE_LOOKUP;}static inline void __initalphapc164_init_pci(void){	cia_init_pci();	SMC93x_Init();}/* * The System Vector */#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_CABRIOLET)struct alpha_machine_vector cabriolet_mv __initmv = {	vector_name:		"Cabriolet",	DO_EV4_MMU,	DO_DEFAULT_RTC,	DO_APECS_IO,	DO_APECS_BUS,	machine_check:		apecs_machine_check,	max_dma_address:	ALPHA_MAX_DMA_ADDRESS,	min_io_address:		DEFAULT_IO_BASE,	min_mem_address:	APECS_AND_LCA_DEFAULT_MEM_BASE,	nr_irqs:		35,	device_interrupt:	cabriolet_device_interrupt,	init_arch:		apecs_init_arch,	init_irq:		cabriolet_init_irq,	init_rtc:		common_init_rtc,	init_pci:		cabriolet_init_pci,	kill_arch:		NULL,	pci_map_irq:		cabriolet_map_irq,	pci_swizzle:		common_swizzle,};#ifndef CONFIG_ALPHA_EB64PALIAS_MV(cabriolet)#endif#endif#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_EB164)struct alpha_machine_vector eb164_mv __initmv = {	vector_name:		"EB164",	DO_EV5_MMU,	DO_DEFAULT_RTC,	DO_CIA_IO,	DO_CIA_BUS,	machine_check:		cia_machine_check,	max_dma_address:	ALPHA_MAX_DMA_ADDRESS,	min_io_address:		DEFAULT_IO_BASE,	min_mem_address:	CIA_DEFAULT_MEM_BASE,	nr_irqs:		35,	device_interrupt:	cabriolet_device_interrupt,	init_arch:		cia_init_arch,	init_irq:		cabriolet_init_irq,	init_rtc:		common_init_rtc,	init_pci:		cia_cab_init_pci,	pci_map_irq:		cabriolet_map_irq,	pci_swizzle:		common_swizzle,};ALIAS_MV(eb164)#endif#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_EB66P)struct alpha_machine_vector eb66p_mv __initmv = {	vector_name:		"EB66+",	DO_EV4_MMU,	DO_DEFAULT_RTC,	DO_LCA_IO,	DO_LCA_BUS,	machine_check:		lca_machine_check,	max_dma_address:	ALPHA_MAX_DMA_ADDRESS,	min_io_address:		DEFAULT_IO_BASE,	min_mem_address:	APECS_AND_LCA_DEFAULT_MEM_BASE,	nr_irqs:		35,	device_interrupt:	cabriolet_device_interrupt,	init_arch:		lca_init_arch,	init_irq:		cabriolet_init_irq,	init_rtc:		common_init_rtc,	init_pci:		cabriolet_init_pci,	pci_map_irq:		eb66p_map_irq,	pci_swizzle:		common_swizzle,};ALIAS_MV(eb66p)#endif#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_LX164)struct alpha_machine_vector lx164_mv __initmv = {	vector_name:		"LX164",	DO_EV5_MMU,	DO_DEFAULT_RTC,	DO_PYXIS_IO,	DO_CIA_BUS,	machine_check:		cia_machine_check,	max_dma_address:	ALPHA_MAX_DMA_ADDRESS,	min_io_address:		DEFAULT_IO_BASE,	min_mem_address:	DEFAULT_MEM_BASE,	pci_dac_offset:		PYXIS_DAC_OFFSET,	nr_irqs:		35,	device_interrupt:	cabriolet_device_interrupt,	init_arch:		pyxis_init_arch,	init_irq:		cabriolet_init_irq,	init_rtc:		common_init_rtc,	init_pci:		alphapc164_init_pci,	pci_map_irq:		alphapc164_map_irq,	pci_swizzle:		common_swizzle,};ALIAS_MV(lx164)#endif#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_PC164)struct alpha_machine_vector pc164_mv __initmv = {	vector_name:		"PC164",	DO_EV5_MMU,	DO_DEFAULT_RTC,	DO_CIA_IO,	DO_CIA_BUS,	machine_check:		cia_machine_check,	max_dma_address:	ALPHA_MAX_DMA_ADDRESS,	min_io_address:		DEFAULT_IO_BASE,	min_mem_address:	CIA_DEFAULT_MEM_BASE,	nr_irqs:		35,	device_interrupt:	pc164_device_interrupt,	init_arch:		cia_init_arch,	init_irq:		pc164_init_irq,	init_rtc:		common_init_rtc,	init_pci:		alphapc164_init_pci,	pci_map_irq:		alphapc164_map_irq,	pci_swizzle:		common_swizzle,};ALIAS_MV(pc164)#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本高清不卡一区| 国产精品天天看| 日本一区二区综合亚洲| 夜夜夜精品看看| 成人午夜视频网站| 欧美一级二级在线观看| 午夜视频一区二区三区| www.在线成人| 国产精品视频观看| 国产最新精品免费| 欧美电视剧免费全集观看| 亚洲黄色尤物视频| gogo大胆日本视频一区| 久久亚洲精精品中文字幕早川悠里| 亚洲高清免费一级二级三级| 91在线国产福利| 国产精品午夜免费| 国产**成人网毛片九色| 精品美女在线观看| 老司机免费视频一区二区| 欧美日韩大陆在线| 亚洲影院免费观看| 在线观看www91| 亚洲一区欧美一区| 欧洲精品一区二区三区在线观看| 国产精品色一区二区三区| 国产精品资源在线观看| 久久亚洲精品国产精品紫薇| 精品无码三级在线观看视频| 日韩欧美自拍偷拍| 麻豆高清免费国产一区| 欧美tk丨vk视频| 精品一区二区三区蜜桃| 欧美精品一区男女天堂| 国模套图日韩精品一区二区| 久久久综合网站| 国产成人午夜视频| 国产精品免费看片| 色噜噜夜夜夜综合网| 亚洲在线观看免费| 91麻豆精品国产91久久久使用方法| 天天综合网天天综合色| 欧美岛国在线观看| 国产精品资源站在线| 国产精品三级电影| 成人性生交大片| 亚洲精品网站在线观看| 欧美午夜精品免费| 久久国产精品第一页| 国产亚洲欧美日韩日本| 91蜜桃传媒精品久久久一区二区| 一区二区在线免费观看| 欧美日韩国产精品自在自线| 老司机免费视频一区二区三区| 国产视频一区二区三区在线观看| 成人小视频在线观看| 亚洲国产成人av好男人在线观看| 欧美一区欧美二区| 69久久99精品久久久久婷婷| 久久婷婷国产综合国色天香| 国产剧情在线观看一区二区| 亚洲天堂中文字幕| 欧美日韩一二区| 国产成人亚洲综合a∨婷婷| 亚洲人成网站精品片在线观看| 欧美乱妇15p| 成人午夜碰碰视频| 首页国产欧美久久| 国产精品欧美经典| 91精品国产91久久久久久一区二区| 国产在线精品不卡| 亚洲一区二区视频在线观看| 久久久99精品久久| 欧美性大战xxxxx久久久| 国产精品1区2区| 性久久久久久久久| 国产精品嫩草99a| 日韩视频在线永久播放| 色综合久久久久综合| 激情久久五月天| 丝袜亚洲另类丝袜在线| 中文字幕欧美一| 久久久亚洲国产美女国产盗摄 | 2021中文字幕一区亚洲| 91激情五月电影| 丁香婷婷综合五月| 毛片基地黄久久久久久天堂| 亚洲福利视频三区| 亚洲精品乱码久久久久久| 国产日韩欧美亚洲| 日韩限制级电影在线观看| 91国偷自产一区二区三区成为亚洲经典| 精品一区二区在线看| 亚洲成人激情社区| 亚洲一区精品在线| 亚洲欧美成人一区二区三区| 国产午夜久久久久| 欧美精品一区二区三区久久久| 欧美日韩国产成人在线91| 色综合一区二区| 99久久综合国产精品| 国产69精品久久777的优势| 久久99国产精品成人| 老色鬼精品视频在线观看播放| 午夜影院在线观看欧美| 一区二区三区日本| 一区二区不卡在线视频 午夜欧美不卡在| 国产三级精品视频| 国产婷婷一区二区| 久久日韩精品一区二区五区| 精品美女在线观看| 久久久久免费观看| 久久久久久久电影| 欧美国产日韩一二三区| 国产精品色婷婷| 亚洲视频每日更新| 亚洲一区二区综合| 日韩精品色哟哟| 久久99这里只有精品| 国产尤物一区二区在线| 国产精品一二三四| av一二三不卡影片| 在线一区二区视频| 欧美日韩亚洲另类| 欧美日韩成人高清| 欧美一级生活片| 久久综合色综合88| 欧美激情一区二区三区蜜桃视频 | 粉嫩高潮美女一区二区三区| 国产91丝袜在线观看| 99久久99久久精品免费观看| 91小宝寻花一区二区三区| 91久久久免费一区二区| 欧美一级艳片视频免费观看| 国产校园另类小说区| 亚洲欧洲精品天堂一级 | 国产精品美女久久久久久久| ...xxx性欧美| 手机精品视频在线观看| 黄色小说综合网站| 成年人国产精品| 制服丝袜亚洲色图| 久久久久久久综合狠狠综合| 亚洲欧美欧美一区二区三区| 五月综合激情网| 国产精品69久久久久水密桃| 色综合久久精品| 日韩欧美精品三级| 亚洲人成伊人成综合网小说| 麻豆freexxxx性91精品| www.欧美亚洲| 日韩精品在线看片z| 亚洲品质自拍视频| 蜜桃免费网站一区二区三区| 91老师国产黑色丝袜在线| 日韩亚洲欧美中文三级| 1000部国产精品成人观看| 日韩在线卡一卡二| www.在线成人| 26uuu亚洲综合色| 老鸭窝一区二区久久精品| 99re8在线精品视频免费播放| 欧美一级片免费看| 亚洲欧美福利一区二区| 国产一区二区三区在线看麻豆| 在线视频欧美区| 国产亚洲精品aa午夜观看| 婷婷丁香激情综合| 色综合色狠狠综合色| 久久久亚洲国产美女国产盗摄| 五月开心婷婷久久| 99国内精品久久| 欧美激情一区二区三区四区| 免费欧美日韩国产三级电影| 在线看国产日韩| 中文字幕精品一区二区三区精品| 免费成人你懂的| 69精品人人人人| 亚洲资源中文字幕| 色综合久久久久| 亚洲三级在线看| 成人开心网精品视频| 精品久久久久久无| 日韩高清不卡在线| 91精品91久久久中77777| 国产精品理伦片| 波多野结衣中文字幕一区二区三区| 91麻豆精品国产自产在线观看一区| 亚洲精品videosex极品| k8久久久一区二区三区| 日本一区二区三区四区在线视频| 六月丁香综合在线视频| 91精品国产欧美一区二区18| 亚洲一区二区三区美女| 91国偷自产一区二区三区成为亚洲经典| 中文字幕一区二区三区乱码在线| 国产91精品露脸国语对白| 久久久久久久久久久久久久久99| 国产精品一区二区久久不卡| 26uuu久久天堂性欧美|