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

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

?? direct.c

?? 底層驅動開發
?? C
字號:
/* * direct.c - Low-level direct PCI config space access */#include <linux/pci.h>#include <linux/init.h>#include "pci.h"/* * Functions for accessing PCI configuration space with type 1 accesses */#define PCI_CONF1_ADDRESS(bus, devfn, reg) \	(0x80000000 | (bus << 16) | (devfn << 8) | (reg & ~3))static int pci_conf1_read(unsigned int seg, unsigned int bus,			  unsigned int devfn, int reg, int len, u32 *value){	unsigned long flags;	if (!value || (bus > 255) || (devfn > 255) || (reg > 255))		return -EINVAL;	spin_lock_irqsave(&pci_config_lock, flags);	outl(PCI_CONF1_ADDRESS(bus, devfn, reg), 0xCF8);	switch (len) {	case 1:		*value = inb(0xCFC + (reg & 3));		break;	case 2:		*value = inw(0xCFC + (reg & 2));		break;	case 4:		*value = inl(0xCFC);		break;	}	spin_unlock_irqrestore(&pci_config_lock, flags);	return 0;}static int pci_conf1_write(unsigned int seg, unsigned int bus,			   unsigned int devfn, int reg, int len, u32 value){	unsigned long flags;	if ((bus > 255) || (devfn > 255) || (reg > 255)) 		return -EINVAL;	spin_lock_irqsave(&pci_config_lock, flags);	outl(PCI_CONF1_ADDRESS(bus, devfn, reg), 0xCF8);	switch (len) {	case 1:		outb((u8)value, 0xCFC + (reg & 3));		break;	case 2:		outw((u16)value, 0xCFC + (reg & 2));		break;	case 4:		outl((u32)value, 0xCFC);		break;	}	spin_unlock_irqrestore(&pci_config_lock, flags);	return 0;}#undef PCI_CONF1_ADDRESSstruct pci_raw_ops pci_direct_conf1 = {	.read =		pci_conf1_read,	.write =	pci_conf1_write,};/* * Functions for accessing PCI configuration space with type 2 accesses */#define PCI_CONF2_ADDRESS(dev, reg)	(u16)(0xC000 | (dev << 8) | reg)static int pci_conf2_read(unsigned int seg, unsigned int bus,			  unsigned int devfn, int reg, int len, u32 *value){	unsigned long flags;	int dev, fn;	if (!value || (bus > 255) || (devfn > 255) || (reg > 255))		return -EINVAL;	dev = PCI_SLOT(devfn);	fn = PCI_FUNC(devfn);	if (dev & 0x10) 		return PCIBIOS_DEVICE_NOT_FOUND;	spin_lock_irqsave(&pci_config_lock, flags);	outb((u8)(0xF0 | (fn << 1)), 0xCF8);	outb((u8)bus, 0xCFA);	switch (len) {	case 1:		*value = inb(PCI_CONF2_ADDRESS(dev, reg));		break;	case 2:		*value = inw(PCI_CONF2_ADDRESS(dev, reg));		break;	case 4:		*value = inl(PCI_CONF2_ADDRESS(dev, reg));		break;	}	outb(0, 0xCF8);	spin_unlock_irqrestore(&pci_config_lock, flags);	return 0;}static int pci_conf2_write(unsigned int seg, unsigned int bus,			   unsigned int devfn, int reg, int len, u32 value){	unsigned long flags;	int dev, fn;	if ((bus > 255) || (devfn > 255) || (reg > 255)) 		return -EINVAL;	dev = PCI_SLOT(devfn);	fn = PCI_FUNC(devfn);	if (dev & 0x10) 		return PCIBIOS_DEVICE_NOT_FOUND;	spin_lock_irqsave(&pci_config_lock, flags);	outb((u8)(0xF0 | (fn << 1)), 0xCF8);	outb((u8)bus, 0xCFA);	switch (len) {	case 1:		outb((u8)value, PCI_CONF2_ADDRESS(dev, reg));		break;	case 2:		outw((u16)value, PCI_CONF2_ADDRESS(dev, reg));		break;	case 4:		outl((u32)value, PCI_CONF2_ADDRESS(dev, reg));		break;	}	outb(0, 0xCF8);    	spin_unlock_irqrestore(&pci_config_lock, flags);	return 0;}#undef PCI_CONF2_ADDRESSstatic struct pci_raw_ops pci_direct_conf2 = {	.read =		pci_conf2_read,	.write =	pci_conf2_write,};/* * Before we decide to use direct hardware access mechanisms, we try to do some * trivial checks to ensure it at least _seems_ to be working -- we just test * whether bus 00 contains a host bridge (this is similar to checking * techniques used in XFree86, but ours should be more reliable since we * attempt to make use of direct access hints provided by the PCI BIOS). * * This should be close to trivial, but it isn't, because there are buggy * chipsets (yes, you guessed it, by Intel and Compaq) that have no class ID. */static int __init pci_sanity_check(struct pci_raw_ops *o){	u32 x = 0;	int devfn;	if (pci_probe & PCI_NO_CHECKS)		return 1;	for (devfn = 0; devfn < 0x100; devfn++) {		if (o->read(0, 0, devfn, PCI_CLASS_DEVICE, 2, &x))			continue;		if (x == PCI_CLASS_BRIDGE_HOST || x == PCI_CLASS_DISPLAY_VGA)			return 1;		if (o->read(0, 0, devfn, PCI_VENDOR_ID, 2, &x))			continue;		if (x == PCI_VENDOR_ID_INTEL || x == PCI_VENDOR_ID_COMPAQ)			return 1;	}	DBG("PCI: Sanity check failed\n");	return 0;}static int __init pci_check_type1(void){	unsigned long flags;	unsigned int tmp;	int works = 0;	local_irq_save(flags);	outb(0x01, 0xCFB);	tmp = inl(0xCF8);	outl(0x80000000, 0xCF8);	if (inl(0xCF8) == 0x80000000 && pci_sanity_check(&pci_direct_conf1)) {		works = 1;	}	outl(tmp, 0xCF8);	local_irq_restore(flags);	return works;}static int __init pci_check_type2(void){	unsigned long flags;	int works = 0;	local_irq_save(flags);	outb(0x00, 0xCFB);	outb(0x00, 0xCF8);	outb(0x00, 0xCFA);	if (inb(0xCF8) == 0x00 && inb(0xCFA) == 0x00 &&	    pci_sanity_check(&pci_direct_conf2)) {		works = 1;	}	local_irq_restore(flags);	return works;}static int __init pci_direct_init(void){	struct resource *region, *region2;	if ((pci_probe & PCI_PROBE_CONF1) == 0)		goto type2;	region = request_region(0xCF8, 8, "PCI conf1");	if (!region)		goto type2;	if (pci_check_type1()) {		printk(KERN_INFO "PCI: Using configuration type 1\n");		raw_pci_ops = &pci_direct_conf1;		return 0;	}	release_resource(region); type2:	if ((pci_probe & PCI_PROBE_CONF2) == 0)		goto out;	region = request_region(0xCF8, 4, "PCI conf2");	if (!region)		goto out;	region2 = request_region(0xC000, 0x1000, "PCI conf2");	if (!region2)		goto fail2;	if (pci_check_type2()) {		printk(KERN_INFO "PCI: Using configuration type 2\n");		raw_pci_ops = &pci_direct_conf2;		return 0;	}	release_resource(region2); fail2:	release_resource(region); out:	return 0;}arch_initcall(pci_direct_init);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜电影一区二区三区| 久久夜色精品国产噜噜av| 欧美中文字幕一二三区视频| 91在线云播放| 一本色道亚洲精品aⅴ| 91网站视频在线观看| 99久久精品国产网站| www.欧美日韩| 欧美日韩日日夜夜| 日韩精品一区二区三区三区免费 | 日韩欧美激情一区| 亚洲高清在线视频| 国产午夜精品久久久久久免费视 | 日韩欧美国产一区在线观看| 欧美日韩精品一区二区| 欧美肥胖老妇做爰| 国产日韩欧美高清| 视频一区二区三区入口| 久久成人av少妇免费| 国产一区二区三区av电影| 97久久超碰精品国产| 欧美日韩不卡在线| 国产欧美视频一区二区| 亚洲成av人在线观看| 婷婷久久综合九色综合绿巨人| 久久国产欧美日韩精品| 波多野结衣一区二区三区| 777色狠狠一区二区三区| 欧美精品一区二区三区视频| 亚洲精品五月天| 日韩av电影免费观看高清完整版 | 欧美日韩免费高清一区色橹橹 | 日本vs亚洲vs韩国一区三区| 成人午夜在线免费| 欧美成人bangbros| 日韩**一区毛片| 欧美日韩黄色影视| 午夜精品久久久久久久| 在线观看欧美黄色| 亚洲一区二区欧美| 欧美日韩在线综合| 亚洲乱码日产精品bd| 99精品视频一区二区三区| 欧美色综合久久| 亚洲综合偷拍欧美一区色| av色综合久久天堂av综合| 久久精品一区二区三区四区| 久久aⅴ国产欧美74aaa| 国产视频一区二区在线观看| 国产在线精品国自产拍免费| 久久嫩草精品久久久精品一| 国产精品一区二区在线播放| 日韩欧美的一区二区| 日韩高清在线电影| 久久九九国产精品| 国产很黄免费观看久久| 国产精品成人一区二区艾草| 91免费在线视频观看| 香蕉成人啪国产精品视频综合网| 欧美精品 国产精品| 老司机午夜精品99久久| 国产精品的网站| 51久久夜色精品国产麻豆| 韩国精品一区二区| 夜夜亚洲天天久久| 精品国产污网站| 在线观看网站黄不卡| 精品一区二区久久久| 国产精品灌醉下药二区| 日韩精品一区二区三区视频| 高清av一区二区| 日产国产欧美视频一区精品 | 亚洲成av人片观看| 亚洲欧美偷拍卡通变态| 久久久高清一区二区三区| 国产成人免费视频网站| 天天操天天干天天综合网| 中文字幕一区二区三区色视频| 欧美va亚洲va| 91精品午夜视频| 在线免费观看日本欧美| 成人免费看黄yyy456| 久久99精品久久久久婷婷| 天堂av在线一区| 亚洲色图在线视频| 欧美国产精品专区| 国产精品色一区二区三区| 国产亚洲成aⅴ人片在线观看| 日韩免费高清视频| 日韩一区和二区| 日韩亚洲电影在线| 欧美丝袜丝交足nylons图片| 日本福利一区二区| 91啪亚洲精品| 日韩一区二区在线看片| 91精品国产综合久久香蕉的特点| 精品视频一区二区不卡| 91麻豆精品国产自产在线 | 精品三级在线看| 精品国产91洋老外米糕| 久久久久久久综合| 日韩欧美国产一二三区| 91精品国产高清一区二区三区| 色综合久久综合| 欧美sm美女调教| 中文字幕欧美国产| 欧美性videosxxxxx| 欧美日韩中文国产| 国产偷国产偷亚洲高清人白洁| 久久九九久精品国产免费直播| 国产精品毛片久久久久久| 亚洲在线成人精品| 国产盗摄一区二区三区| 欧美色精品在线视频| 国产亚洲一本大道中文在线| 一区二区三区91| 国产福利一区二区| 91精品国产欧美一区二区成人| 久久久久久久久久看片| 蜜臀av一区二区| 色偷偷88欧美精品久久久| 久久综合色天天久久综合图片| 伊人夜夜躁av伊人久久| www.日韩av| 国产精品久久毛片| 久草精品在线观看| 日韩一级高清毛片| 亚洲成人黄色小说| 欧美人与性动xxxx| 亚洲午夜视频在线| 色婷婷综合久久久久中文| 国产精品免费久久久久| 韩国一区二区三区| 精品三级在线观看| 国产精品99久久久久久似苏梦涵| 欧美丰满一区二区免费视频| 午夜精品免费在线观看| 欧美天天综合网| 日韩国产精品久久| 精品免费99久久| 国产99精品国产| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 国产成人亚洲综合a∨猫咪 | 一区二区三区精品久久久| 色噜噜狠狠一区二区三区果冻| 一区二区三区免费看视频| 欧美日本在线视频| 精品一区二区三区在线播放| 亚洲视频香蕉人妖| 欧美韩国一区二区| 日本一区二区视频在线观看| 久久久亚洲高清| 久久久亚洲欧洲日产国码αv| 欧美一卡在线观看| 欧美日韩一区二区电影| 欧美亚一区二区| 在线不卡中文字幕播放| 欧美三级电影在线看| 欧美精品乱码久久久久久按摩| 日本高清成人免费播放| 欧美性感一区二区三区| 欧美日韩激情一区二区三区| 欧美一区二区三区系列电影| 欧美一级在线视频| 久久精品日产第一区二区三区高清版 | 欧美日韩成人综合天天影院| 国产一区二区三区免费在线观看| 奇米影视在线99精品| 亚洲一区二区三区四区在线| 亚洲美女免费在线| 亚洲男同性恋视频| 中文字幕av不卡| 国产人妖乱国产精品人妖| 精品福利视频一区二区三区| 3atv在线一区二区三区| 欧美日本一道本| 日韩欧美第一区| 久久久午夜精品| 亚洲天堂福利av| 亚洲最大成人综合| 亚洲图片欧美色图| 蜜臂av日日欢夜夜爽一区| 久久精品噜噜噜成人av农村| 久久99日本精品| 丁香天五香天堂综合| 成人av资源在线观看| 欧美少妇xxx| 久久久美女艺术照精彩视频福利播放| 精品盗摄一区二区三区| 国产精品国模大尺度视频| 亚洲欧美影音先锋| 奇米888四色在线精品| 成人伦理片在线| 日韩一区二区三区四区| 国产精品美女久久久久久| 午夜视频在线观看一区二区三区 | 欧美一区二区视频在线观看2022| 成人av资源网站| 成人aa视频在线观看| 91丝袜高跟美女视频|