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

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

?? setup-bus.c

?? uclinux 下的pci驅動
?? 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>#ifdef DEBUG#define DBG  printk#else#define DBG(x...)#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;	int i;	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 &&			 class >> 8 != PCI_BASE_CLASS_PROCESSOR) {						pci_read_config_word(dev, PCI_COMMAND, &cmd);			/*NOTE: ryc => If you disable PCI_COMMAND_MASTER bit			 * 		kernel panic will be occurred			 */			/* ryc-- orignal code 			cmd &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY						| PCI_COMMAND_MASTER);			*/			/* ryc modified the following line to avoid kernel panic!!! */			if(dev->device == 0xa510){ /* when device is 2510 host device */					cmd &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY);			}else{				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);	DBG(KERN_ERR "PCI: Bus %d, bridge: %s\n", bus->number, bridge->name);	DBG(KERN_ERR "  IO window: %04lx-%04lx\n", ranges.io_start, ranges.io_end);	DBG(KERN_ERR "  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);  //here, resource assignment.	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;		}	}	DBG("%x, %x, %x\n",bus->children.next,&bus->children,ln->next);	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一区二区三区免费野_久草精品视频
五月天亚洲精品| 欧美一区二区三区在线看| 宅男噜噜噜66一区二区66| 日韩欧美在线影院| 亚洲福利视频一区| 欧美怡红院视频| 亚洲制服丝袜在线| 欧美午夜精品一区| 亚洲午夜久久久久久久久电影院| 欧美在线免费播放| 一区二区在线看| 欧美三级韩国三级日本三斤| 亚洲电影中文字幕在线观看| 91麻豆国产香蕉久久精品| 亚洲卡通欧美制服中文| 欧美性猛交xxxxxx富婆| 亚洲.国产.中文慕字在线| 777亚洲妇女| 麻豆专区一区二区三区四区五区| 日韩美女主播在线视频一区二区三区| 日本午夜一区二区| 91麻豆精品国产91久久久久久 | 欧美亚洲一区二区三区四区| 亚洲在线视频一区| 51精品秘密在线观看| 精品一二线国产| 中文字幕成人网| 99精品黄色片免费大全| 一区二区高清免费观看影视大全 | 色婷婷久久久亚洲一区二区三区 | 日韩一级欧美一级| 国产精品亚洲а∨天堂免在线| 中文字幕成人网| 欧美日韩亚洲高清一区二区| 一区二区三区在线视频免费 | 日本精品一区二区三区四区的功能| 午夜电影久久久| 久久久噜噜噜久噜久久综合| 99国内精品久久| 日韩成人精品在线| 国产欧美精品一区二区色综合朱莉 | wwwwxxxxx欧美| 成人av在线观| 日本不卡一二三| 中文字幕制服丝袜成人av| 欧美浪妇xxxx高跟鞋交| 国产成人精品免费在线| 亚洲图片欧美一区| 国产亚洲污的网站| 成人av电影免费在线播放| 亚洲天天做日日做天天谢日日欢 | 国产精品影视在线| 夜夜揉揉日日人人青青一国产精品| 日韩三级在线观看| 91美女在线看| 国产一区免费电影| 性欧美疯狂xxxxbbbb| 国产精品免费久久久久| 欧美一级片在线看| 色综合色综合色综合| 国产一区二区网址| 亚洲电影视频在线| 国产女人aaa级久久久级| 欧美在线视频全部完| 国产成人免费视频网站高清观看视频| 亚洲国产成人va在线观看天堂| 久久精品视频免费观看| 7777精品伊人久久久大香线蕉经典版下载 | 欧美大黄免费观看| 一本久久精品一区二区| 国产成人免费xxxxxxxx| 日韩高清一区二区| 一区二区三区日韩精品视频| 欧美r级在线观看| 成人性色生活片免费看爆迷你毛片| 一区二区三区国产精品| 精品日韩成人av| 欧美一区二区三区免费视频| 欧美中文字幕久久| 97aⅴ精品视频一二三区| 国产成人精品影视| 老司机午夜精品| 日韩在线观看一区二区| 亚洲午夜在线视频| 亚洲精品国产精华液| 中文字幕在线一区二区三区| 国产欧美精品一区二区色综合| 久久久亚洲精品一区二区三区| 成人午夜激情片| 成a人片亚洲日本久久| 国产成人精品一区二区三区网站观看 | 成人黄色电影在线 | 国产精品你懂的在线欣赏| 精品国产亚洲一区二区三区在线观看| 欧美精品欧美精品系列| 欧美嫩在线观看| 欧美日韩免费观看一区二区三区| 91视频观看免费| 色综合久久久久综合体| 91久久香蕉国产日韩欧美9色| 一本大道久久a久久综合婷婷 | 一区二区三区在线视频观看| 17c精品麻豆一区二区免费| 中文字幕一区不卡| 亚洲久草在线视频| 夜夜嗨av一区二区三区网页| 一二三区精品视频| 亚洲色大成网站www久久九九| 《视频一区视频二区| 一区二区三区资源| 婷婷久久综合九色综合伊人色| 午夜精品福利视频网站| 亚洲一区二区3| 国产精品久久久久久久久晋中 | 国精产品一区一区三区mba桃花| 午夜久久久久久久久久一区二区| 亚洲在线成人精品| 美女尤物国产一区| 国产精品白丝jk黑袜喷水| 不卡高清视频专区| 欧美色国产精品| 日韩精品在线一区二区| 国产人久久人人人人爽| 中文字幕免费观看一区| 亚洲日本护士毛茸茸| 午夜不卡在线视频| 国产盗摄一区二区| 一本在线高清不卡dvd| 91精品国产综合久久久久| 久久婷婷久久一区二区三区| 最新日韩av在线| 偷拍亚洲欧洲综合| 精品影院一区二区久久久| 成人激情午夜影院| 欧美欧美欧美欧美首页| 国产欧美日本一区视频| 亚洲v中文字幕| 国产精品资源网| 欧美区视频在线观看| 国产三区在线成人av| 亚洲国产成人精品视频| 丰满亚洲少妇av| 欧美区一区二区三区| 国产精品嫩草影院com| 免费在线看一区| jizzjizzjizz欧美| 欧美亚洲国产bt| 欧美zozozo| 亚洲曰韩产成在线| 黄一区二区三区| 色视频成人在线观看免| 久久午夜电影网| 天堂久久一区二区三区| 成人国产精品免费观看动漫| 欧美高清一级片在线| 亚洲欧洲日韩av| 亚洲va韩国va欧美va| 成人福利电影精品一区二区在线观看| 91久久国产最好的精华液| 久久久国产精华| 蜜臀精品久久久久久蜜臀| 欧美天堂亚洲电影院在线播放| 中文字幕高清不卡| 久久精品国内一区二区三区| 欧美日韩你懂的| 一区二区欧美视频| 9人人澡人人爽人人精品| 精品国产乱码久久| 黑人精品欧美一区二区蜜桃| www国产精品av| 国产99精品在线观看| 国产精品无人区| 不卡的av网站| 亚洲免费观看高清完整版在线观看 | 亚洲国产精品人人做人人爽| 欧美体内she精视频| 日韩精品国产欧美| 欧美变态口味重另类| www.欧美.com| 亚洲久本草在线中文字幕| 欧美日韩一区成人| 日韩黄色片在线观看| 精品国产一区二区三区久久久蜜月| 韩国精品一区二区| 国产欧美一区二区精品久导航| 风间由美一区二区三区在线观看 | 中文字幕综合网| 欧洲精品一区二区| 奇米在线7777在线精品| 久久久99免费| 色综合一区二区| 亚洲成av人片一区二区三区| 精品国产网站在线观看| 成人黄色在线看| 亚洲动漫第一页| 久久久国产精华| 欧美三区在线观看| 国产做a爰片久久毛片| 亚洲欧美视频在线观看视频| 9191成人精品久久|