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

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

?? setup-bus.c

?? Linux內核源代碼 為壓縮文件 是<<Linux內核>>一書中的源代碼
?? C
字號:
/* *	drivers/pci/setup-bus.c * * Extruded from code written by *      Dave Rusling (david.rusling@reo.mts.dec.com) *      David Mosberger (davidm@cs.arizona.edu) *	David Miller (davem@redhat.com) * * Support routines for initializing a PCI subsystem. *//* * Nov 2000, Ivan Kokshaysky <ink@jurassic.park.msu.ru> *	     PCI-PCI bridges cleanup, sorted resource allocation */#include <linux/init.h>#include <linux/kernel.h>#include <linux/pci.h>#include <linux/errno.h>#include <linux/ioport.h>#include <linux/cache.h>#include <linux/slab.h>#define DEBUG_CONFIG 1#if DEBUG_CONFIG# define DBGC(args)     printk args#else# define DBGC(args)#endif#define ROUND_UP(x, a)		(((x) + (a) - 1) & ~((a) - 1))static int __initpbus_assign_resources_sorted(struct pci_bus *bus,			     struct pbus_set_ranges_data *ranges){	struct list_head *ln;	struct resource *res;	struct resource_list head_io, head_mem, *list, *tmp;	unsigned long io_reserved = 0, mem_reserved = 0;	int idx, found_vga = 0;	head_io.next = head_mem.next = NULL;	for (ln=bus->devices.next; ln != &bus->devices; ln=ln->next) {		struct pci_dev *dev = pci_dev_b(ln);		u16 class = dev->class >> 8;		u16 cmd;		/* First, disable the device to avoid side		   effects of possibly overlapping I/O and		   memory ranges.		   Leave VGA enabled - for obvious reason. :-)		   Same with all sorts of bridges - they may		   have VGA behind them.  */		if (class == PCI_CLASS_DISPLAY_VGA				|| class == PCI_CLASS_NOT_DEFINED_VGA)			found_vga = 1;		else if (class >> 8 != PCI_BASE_CLASS_BRIDGE) {			pci_read_config_word(dev, PCI_COMMAND, &cmd);			cmd &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY						| PCI_COMMAND_MASTER);			pci_write_config_word(dev, PCI_COMMAND, cmd);		}		/* Reserve some resources for CardBus.		   Are these values reasonable? */		if (class == PCI_CLASS_BRIDGE_CARDBUS) {			io_reserved += 8*1024;			mem_reserved += 32*1024*1024;			continue;		}		pdev_sort_resources(dev, &head_io, IORESOURCE_IO);		pdev_sort_resources(dev, &head_mem, IORESOURCE_MEM);	}	for (list = head_io.next; list;) {		res = list->res;		idx = res - &list->dev->resource[0];		if (pci_assign_resource(list->dev, idx) == 0		    && ranges->io_end < res->end)			ranges->io_end = res->end;		tmp = list;		list = list->next;		kfree(tmp);	}	for (list = head_mem.next; list;) {		res = list->res;		idx = res - &list->dev->resource[0];		if (pci_assign_resource(list->dev, idx) == 0		    && ranges->mem_end < res->end)			ranges->mem_end = res->end;		tmp = list;		list = list->next;		kfree(tmp);	}	ranges->io_end += io_reserved;	ranges->mem_end += mem_reserved;	/* PCI-to-PCI Bridge Architecture Specification rev. 1.1 (1998)	   requires that if there is no I/O ports or memory behind the	   bridge, corresponding range must be turned off by writing base	   value greater than limit to the bridge's base/limit registers.  */#if 1	/* But assuming that some hardware designed before 1998 might	   not support this (very unlikely - at least all DEC bridges	   are ok and I believe that was standard de-facto. -ink), we	   must allow for at least one unit.  */	if (ranges->io_end == ranges->io_start)		ranges->io_end += 1;	if (ranges->mem_end == ranges->mem_start)		ranges->mem_end += 1;#endif	ranges->io_end = ROUND_UP(ranges->io_end, 4*1024);	ranges->mem_end = ROUND_UP(ranges->mem_end, 1024*1024);	return found_vga;}/* Initialize bridges with base/limit values we have collected */static void __initpci_setup_bridge(struct pci_bus *bus){	struct pbus_set_ranges_data ranges;	struct pci_dev *bridge = bus->self;	u32 l;	if (!bridge || (bridge->class >> 8) != PCI_CLASS_BRIDGE_PCI)		return;	ranges.io_start = bus->resource[0]->start;	ranges.io_end = bus->resource[0]->end;	ranges.mem_start = bus->resource[1]->start;	ranges.mem_end = bus->resource[1]->end;	pcibios_fixup_pbus_ranges(bus, &ranges);	DBGC(("PCI: Bus %d, bridge: %s\n", bus->number, bridge->name));	DBGC(("  IO window: %04lx-%04lx\n", ranges.io_start, ranges.io_end));	DBGC(("  MEM window: %08lx-%08lx\n", ranges.mem_start, ranges.mem_end));	/* Set up the top and bottom of the PCI I/O segment for this bus. */	pci_read_config_dword(bridge, PCI_IO_BASE, &l);	l &= 0xffff0000;	l |= (ranges.io_start >> 8) & 0x00f0;	l |= ranges.io_end & 0xf000;	pci_write_config_dword(bridge, PCI_IO_BASE, l);	/* Clear upper 16 bits of I/O base/limit. */	pci_write_config_dword(bridge, PCI_IO_BASE_UPPER16, 0);	/* Clear out the upper 32 bits of PREF base/limit. */	pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32, 0);	pci_write_config_dword(bridge, PCI_PREF_LIMIT_UPPER32, 0);	/* Set up the top and bottom of the PCI Memory segment	   for this bus. */	l = (ranges.mem_start >> 16) & 0xfff0;	l |= ranges.mem_end & 0xfff00000;	pci_write_config_dword(bridge, PCI_MEMORY_BASE, l);	/* Set up PREF base/limit. */	l = (bus->resource[2]->start >> 16) & 0xfff0;	l |= bus->resource[2]->end & 0xfff00000;	pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, l);	/* Check if we have VGA behind the bridge.	   Enable ISA in either case. */	l = (bus->resource[0]->flags & IORESOURCE_BUS_HAS_VGA) ? 0x0c : 0x04;	pci_write_config_word(bridge, PCI_BRIDGE_CONTROL, l);}static void __initpbus_assign_resources(struct pci_bus *bus, struct pbus_set_ranges_data *ranges){	struct list_head *ln;	int found_vga = pbus_assign_resources_sorted(bus, ranges);	if (!ranges->found_vga && found_vga) {		struct pci_bus *b;		ranges->found_vga = 1;		/* Propogate presence of the VGA to upstream bridges */		for (b = bus; b->parent; b = b->parent) {#if 0			/* ? Do we actually need to enable PF memory? */			b->resource[2]->start = 0;#endif			b->resource[0]->flags |= IORESOURCE_BUS_HAS_VGA;		}	}	for (ln=bus->children.next; ln != &bus->children; ln=ln->next) {		struct pci_bus *b = pci_bus_b(ln);		b->resource[0]->start = ranges->io_start = ranges->io_end;		b->resource[1]->start = ranges->mem_start = ranges->mem_end;		pbus_assign_resources(b, ranges);		b->resource[0]->end = ranges->io_end - 1;		b->resource[1]->end = ranges->mem_end - 1;		pci_setup_bridge(b);	}}void __initpci_assign_unassigned_resources(void){	struct pbus_set_ranges_data ranges;	struct list_head *ln;	struct pci_dev *dev;	for(ln=pci_root_buses.next; ln != &pci_root_buses; ln=ln->next) {		struct pci_bus *b = pci_bus_b(ln);		ranges.io_start = b->resource[0]->start + PCIBIOS_MIN_IO;		ranges.mem_start = b->resource[1]->start + PCIBIOS_MIN_MEM;		ranges.io_end = ranges.io_start;		ranges.mem_end = ranges.mem_start;		ranges.found_vga = 0;		pbus_assign_resources(b, &ranges);	}	pci_for_each_dev(dev) {		pdev_enable_device(dev);	}}/* Check whether the bridge supports I/O forwarding.   If not, its I/O base/limit register must be   read-only and read as 0. */unsigned long __initpci_bridge_check_io(struct pci_dev *bridge){	u16 io;	pci_read_config_word(bridge, PCI_IO_BASE, &io);	if (!io) {		pci_write_config_word(bridge, PCI_IO_BASE, 0xf0f0);		pci_read_config_word(bridge, PCI_IO_BASE, &io);		pci_write_config_word(bridge, PCI_IO_BASE, 0x0);	}	if (io)		return IORESOURCE_IO;	printk(KERN_WARNING "PCI: bridge %s does not support I/O forwarding!\n",				bridge->name);	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩午夜激情视频| 99久久国产综合精品麻豆| 国产成人在线视频网站| 91在线播放网址| 欧美日韩第一区日日骚| 久久久亚洲欧洲日产国码αv| 国产精品少妇自拍| 亚洲成人av一区二区| 国产专区欧美精品| 91视视频在线观看入口直接观看www | 精品一区二区三区在线播放视频| 国产精品69毛片高清亚洲| 91蜜桃网址入口| 欧美电影免费观看高清完整版在线| 国产精品国产三级国产有无不卡| 天天操天天综合网| 粉嫩av一区二区三区在线播放| 欧美色图第一页| 亚洲国产精品99久久久久久久久| 亚洲国产成人91porn| 国产精品一卡二| 欧美性xxxxx极品少妇| 久久久久久久久久久久久夜| 亚洲最大的成人av| 国产呦萝稀缺另类资源| 色www精品视频在线观看| 精品国产在天天线2019| 亚洲精品成人在线| 国产高清视频一区| 欧美精品三级在线观看| 成人欧美一区二区三区白人| 蜜桃精品视频在线| 日本高清成人免费播放| 久久久久久麻豆| 日韩高清欧美激情| 91麻豆精品一区二区三区| 久久人人爽爽爽人久久久| 亚洲国产综合在线| 9色porny自拍视频一区二区| 26uuu亚洲婷婷狠狠天堂| 亚洲第一二三四区| 成人在线视频一区| 日韩精品一区二区三区中文不卡| 亚洲欧美乱综合| 国产白丝精品91爽爽久久 | 99久久99久久精品免费看蜜桃| 欧美sm美女调教| 三级欧美韩日大片在线看| av电影在线观看不卡| 国产亚洲精品超碰| 麻豆精品新av中文字幕| 欧美日韩aaa| 亚洲午夜免费视频| 色噜噜偷拍精品综合在线| 中文字幕av一区 二区| 国产综合一区二区| 欧美岛国在线观看| 日本大胆欧美人术艺术动态 | 亚洲国产日产av| 色婷婷久久久亚洲一区二区三区 | av午夜精品一区二区三区| 久久久激情视频| 国产一区二区在线电影| 日韩视频免费观看高清完整版在线观看| 亚洲伊人伊色伊影伊综合网| 91亚洲资源网| ㊣最新国产の精品bt伙计久久| 懂色av中文字幕一区二区三区| 久久亚洲一区二区三区明星换脸| 轻轻草成人在线| 欧美一区二区三区在线观看视频| 亚洲18女电影在线观看| 欧美妇女性影城| 婷婷开心久久网| 91精品欧美久久久久久动漫 | 欧美日韩亚洲丝袜制服| 一区二区欧美在线观看| 色哟哟日韩精品| 亚洲综合一区二区三区| 欧美在线观看一区二区| 亚洲午夜成aⅴ人片| 正在播放亚洲一区| 久久精品国产久精国产爱| 精品国产伦一区二区三区观看体验 | 不卡一区二区中文字幕| 亚洲色图欧美激情| 欧美在线free| 日本伊人精品一区二区三区观看方式| 777亚洲妇女| 激情五月激情综合网| 国产亚洲一二三区| caoporen国产精品视频| 亚洲自拍欧美精品| 777xxx欧美| 国产乱码精品一区二区三区av | 成人免费毛片app| 亚洲老妇xxxxxx| 欧美三级乱人伦电影| 蜜桃精品在线观看| 欧美国产精品一区| 在线亚洲欧美专区二区| 日产欧产美韩系列久久99| 日韩久久久精品| www.色精品| 亚洲国产视频网站| 欧美mv日韩mv国产网站| 成人午夜激情片| 亚洲综合小说图片| 欧美v日韩v国产v| aa级大片欧美| 日本成人在线电影网| 国产欧美一区二区精品久导航| 99麻豆久久久国产精品免费 | 精品久久久久久久一区二区蜜臀| 国产91精品露脸国语对白| 亚洲综合在线观看视频| 欧美成人a视频| 色综合中文字幕| 看片的网站亚洲| 国产精品日韩精品欧美在线| 欧美三区在线视频| 国产老女人精品毛片久久| 亚洲精品第一国产综合野| 精品国内二区三区| 欧洲亚洲国产日韩| 国产乱码一区二区三区| 亚洲成人免费视| 国产日韩欧美精品综合| 欧美高清精品3d| 成人av影视在线观看| 日本欧美一区二区| 自拍视频在线观看一区二区| 欧美电影免费观看高清完整版在 | 亚洲欧美日韩电影| 欧美大片在线观看一区二区| www.av亚洲| 捆绑调教一区二区三区| 亚洲影视在线播放| 国产精品私人影院| 日韩欧美一级特黄在线播放| 91黄色免费观看| 国产成人av自拍| 日本伊人精品一区二区三区观看方式| 国产精品欧美久久久久无广告| 日韩欧美视频在线| 欧美日韩国产综合一区二区| 成人18精品视频| 国产精品综合久久| 麻豆91精品视频| 五月婷婷综合激情| 一区二区高清免费观看影视大全| 国产亚洲欧洲一区高清在线观看| 欧美美女视频在线观看| 97aⅴ精品视频一二三区| 国内精品嫩模私拍在线| 青青国产91久久久久久| 亚洲一区二区三区视频在线播放 | 色综合天天综合网国产成人综合天 | 欧洲在线/亚洲| 91老师国产黑色丝袜在线| 国产电影精品久久禁18| 久久国产精品一区二区| 日日摸夜夜添夜夜添精品视频 | 精品视频免费在线| 91麻豆精东视频| 不卡欧美aaaaa| 国产成人精品三级麻豆| 国产乱国产乱300精品| 久草精品在线观看| 日韩av成人高清| 婷婷久久综合九色国产成人| 亚洲福利一区二区三区| 一区二区三区四区视频精品免费| 中文字幕在线一区免费| 中文字幕第一区第二区| 久久久久久久久免费| 久久天天做天天爱综合色| 精品福利在线导航| 久久亚洲精华国产精华液| 精品欧美一区二区在线观看 | 麻豆成人综合网| 精品一区中文字幕| 久久精品二区亚洲w码| 久久99精品国产91久久来源| 精品一区二区三区欧美| 精品在线播放免费| 国产精品一区二区91| 国产成人免费视频网站| 成人一区二区视频| 99久久国产免费看| 日本道色综合久久| 欧美日韩激情一区二区三区| 91麻豆精品91久久久久同性| 日韩欧美一级二级三级久久久| 日韩精品一区二区在线| 国产亚洲欧美一级| 国产精品污网站| 日韩美女视频19| 亚洲第一福利一区| 裸体在线国模精品偷拍|