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

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

?? pci.c

?? linux和2410結合開發 用他可以生成2410所需的zImage文件
?? C
?? 第 1 頁 / 共 4 頁
字號:
		if (pci_resource_flags(pdev, i) & IORESOURCE_IO)			release_region(pci_resource_start(pdev, i),				       pci_resource_len(pdev, i));		else if (pci_resource_flags(pdev, i) & IORESOURCE_MEM)			release_mem_region(pci_resource_start(pdev, i),					   pci_resource_len(pdev, i));	}}/** *	pci_request_regions - Reserved PCI I/O and memory resources *	@pdev: PCI device whose resources are to be reserved *	@res_name: Name to be associated with resource. * *	Mark all PCI regions associated with PCI device @pdev as *	being reserved by owner @res_name.  Do not access any *	address inside the PCI regions unless this call returns *	successfully. * *	Returns 0 on success, or %EBUSY on error.  A warning *	message is also printed on failure. */int pci_request_regions(struct pci_dev *pdev, char *res_name){	int i;		for (i = 0; i < 6; i++) {		if (pci_resource_len(pdev, i) == 0)			continue;		if (pci_resource_flags(pdev, i) & IORESOURCE_IO) {			if (!request_region(pci_resource_start(pdev, i),					    pci_resource_len(pdev, i), res_name))				goto err_out;		}				else if (pci_resource_flags(pdev, i) & IORESOURCE_MEM) {			if (!request_mem_region(pci_resource_start(pdev, i),					        pci_resource_len(pdev, i), res_name))				goto err_out;		}	}		return 0;err_out:	printk (KERN_WARNING "PCI: Unable to reserve %s region #%d:%lx@%lx for device %s\n",		pci_resource_flags(pdev, i) & IORESOURCE_IO ? "I/O" : "mem",		i + 1, /* PCI BAR # */		pci_resource_len(pdev, i), pci_resource_start(pdev, i),		pdev->slot_name);	pci_release_regions(pdev);	return -EBUSY;}/* *  Registration of PCI drivers and handling of hot-pluggable devices. */static LIST_HEAD(pci_drivers);/** * pci_match_device - Tell if a PCI device structure has a matching PCI device id structure * @ids: array of PCI device id structures to search in * @dev: the PCI device structure to match against *  * Used by a driver to check whether a PCI device present in the * system is in its list of supported devices.Returns the matching * pci_device_id structure or %NULL if there is no match. */const struct pci_device_id *pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev){	while (ids->vendor || ids->subvendor || ids->class_mask) {		if ((ids->vendor == PCI_ANY_ID || ids->vendor == dev->vendor) &&		    (ids->device == PCI_ANY_ID || ids->device == dev->device) &&		    (ids->subvendor == PCI_ANY_ID || ids->subvendor == dev->subsystem_vendor) &&		    (ids->subdevice == PCI_ANY_ID || ids->subdevice == dev->subsystem_device) &&		    !((ids->class ^ dev->class) & ids->class_mask))			return ids;		ids++;	}	return NULL;}static intpci_announce_device(struct pci_driver *drv, struct pci_dev *dev){	const struct pci_device_id *id;	int ret = 0;	if (drv->id_table) {		id = pci_match_device(drv->id_table, dev);		if (!id) {			ret = 0;			goto out;		}	} else		id = NULL;	dev_probe_lock();	if (drv->probe(dev, id) >= 0) {		dev->driver = drv;		ret = 1;	}	dev_probe_unlock();out:	return ret;}/** * pci_register_driver - register a new pci driver * @drv: the driver structure to register *  * Adds the driver structure to the list of registered drivers * Returns the number of pci devices which were claimed by the driver * during registration.  The driver remains registered even if the * return value is zero. */intpci_register_driver(struct pci_driver *drv){	struct pci_dev *dev;	int count = 0;	list_add_tail(&drv->node, &pci_drivers);	pci_for_each_dev(dev) {		if (!pci_dev_driver(dev))			count += pci_announce_device(drv, dev);	}	return count;}/** * pci_unregister_driver - unregister a pci driver * @drv: the driver structure to unregister *  * Deletes the driver structure from the list of registered PCI drivers, * gives it a chance to clean up by calling its remove() function for * each device it was responsible for, and marks those devices as * driverless. */voidpci_unregister_driver(struct pci_driver *drv){	struct pci_dev *dev;	list_del(&drv->node);	pci_for_each_dev(dev) {		if (dev->driver == drv) {			if (drv->remove)				drv->remove(dev);			dev->driver = NULL;		}	}}#ifdef CONFIG_HOTPLUG#ifndef FALSE#define FALSE	(0)#define TRUE	(!FALSE)#endifstatic voidrun_sbin_hotplug(struct pci_dev *pdev, int insert){	int i;	char *argv[3], *envp[8];	char id[20], sub_id[24], bus_id[24], class_id[20];	if (!hotplug_path[0])		return;	sprintf(class_id, "PCI_CLASS=%04X", pdev->class);	sprintf(id, "PCI_ID=%04X:%04X", pdev->vendor, pdev->device);	sprintf(sub_id, "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor, pdev->subsystem_device);	sprintf(bus_id, "PCI_SLOT_NAME=%s", pdev->slot_name);	i = 0;	argv[i++] = hotplug_path;	argv[i++] = "pci";	argv[i] = 0;	i = 0;	/* minimal command environment */	envp[i++] = "HOME=/";	envp[i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";		/* other stuff we want to pass to /sbin/hotplug */	envp[i++] = class_id;	envp[i++] = id;	envp[i++] = sub_id;	envp[i++] = bus_id;	if (insert)		envp[i++] = "ACTION=add";	else		envp[i++] = "ACTION=remove";	envp[i] = 0;	call_usermodehelper (argv [0], argv, envp);}/** * pci_announce_device_to_drivers - tell the drivers a new device has appeared * @dev: the device that has shown up * * Notifys the drivers that a new device has appeared, and also notifys * userspace through /sbin/hotplug. */voidpci_announce_device_to_drivers(struct pci_dev *dev){	struct list_head *ln;	for(ln=pci_drivers.next; ln != &pci_drivers; ln=ln->next) {		struct pci_driver *drv = list_entry(ln, struct pci_driver, node);		if (drv->remove && pci_announce_device(drv, dev))			break;	}	/* notify userspace of new hotplug device */	run_sbin_hotplug(dev, TRUE);}/** * pci_insert_device - insert a hotplug device * @dev: the device to insert * @bus: where to insert it * * Add a new device to the device lists and notify userspace (/sbin/hotplug). */voidpci_insert_device(struct pci_dev *dev, struct pci_bus *bus){	list_add_tail(&dev->bus_list, &bus->devices);	list_add_tail(&dev->global_list, &pci_devices);#ifdef CONFIG_PROC_FS	pci_proc_attach_device(dev);#endif	pci_announce_device_to_drivers(dev);}static voidpci_free_resources(struct pci_dev *dev){	int i;	for (i = 0; i < PCI_NUM_RESOURCES; i++) {		struct resource *res = dev->resource + i;		if (res->parent)			release_resource(res);	}}/** * pci_remove_device - remove a hotplug device * @dev: the device to remove * * Delete the device structure from the device lists and  * notify userspace (/sbin/hotplug). */voidpci_remove_device(struct pci_dev *dev){	if (dev->driver) {		if (dev->driver->remove)			dev->driver->remove(dev);		dev->driver = NULL;	}	list_del(&dev->bus_list);	list_del(&dev->global_list);	pci_free_resources(dev);#ifdef CONFIG_PROC_FS	pci_proc_detach_device(dev);#endif	/* notify userspace of hotplug device removal */	run_sbin_hotplug(dev, FALSE);}#endifstatic struct pci_driver pci_compat_driver = {	name: "compat"};/** * pci_dev_driver - get the pci_driver of a device * @dev: the device to query * * Returns the appropriate pci_driver structure or %NULL if there is no  * registered driver for the device. */struct pci_driver *pci_dev_driver(const struct pci_dev *dev){	if (dev->driver)		return dev->driver;	else {		int i;		for(i=0; i<=PCI_ROM_RESOURCE; i++)			if (dev->resource[i].flags & IORESOURCE_BUSY)				return &pci_compat_driver;	}	return NULL;}/* * This interrupt-safe spinlock protects all accesses to PCI * configuration space. */static spinlock_t pci_lock = SPIN_LOCK_UNLOCKED;/* *  Wrappers for all PCI configuration access functions.  They just check *  alignment, do locking and call the low-level functions pointed to *  by pci_dev->ops. */#define PCI_byte_BAD 0#define PCI_word_BAD (pos & 1)#define PCI_dword_BAD (pos & 3)#define PCI_OP(rw,size,type) \int pci_##rw##_config_##size (struct pci_dev *dev, int pos, type value) \{									\	int res;							\	unsigned long flags;						\	if (PCI_##size##_BAD) return PCIBIOS_BAD_REGISTER_NUMBER;	\	spin_lock_irqsave(&pci_lock, flags);				\	res = dev->bus->ops->rw##_##size(dev, pos, value);		\	spin_unlock_irqrestore(&pci_lock, flags);			\	return res;							\}PCI_OP(read, byte, u8 *)PCI_OP(read, word, u16 *)PCI_OP(read, dword, u32 *)PCI_OP(write, byte, u8)PCI_OP(write, word, u16)PCI_OP(write, dword, u32)/** * pci_set_master - enables bus-mastering for device dev * @dev: the PCI device to enable * * Enables bus-mastering on the device and calls pcibios_set_master() * to do the needed arch specific settings. */voidpci_set_master(struct pci_dev *dev){	u16 cmd;	pci_read_config_word(dev, PCI_COMMAND, &cmd);	if (! (cmd & PCI_COMMAND_MASTER)) {		DBG("PCI: Enabling bus mastering for device %s\n", dev->slot_name);		cmd |= PCI_COMMAND_MASTER;		pci_write_config_word(dev, PCI_COMMAND, cmd);	}	pcibios_set_master(dev);}intpci_set_dma_mask(struct pci_dev *dev, u64 mask){	if (!pci_dma_supported(dev, mask))		return -EIO;	dev->dma_mask = mask;	return 0;}    intpci_dac_set_dma_mask(struct pci_dev *dev, u64 mask){	if (!pci_dac_dma_supported(dev, mask))		return -EIO;	dev->dma_mask = mask;	return 0;}    /* * Translate the low bits of the PCI base * to the resource type */static inline unsigned int pci_calc_resource_flags(unsigned int flags){	if (flags & PCI_BASE_ADDRESS_SPACE_IO)		return IORESOURCE_IO;	if (flags & PCI_BASE_ADDRESS_MEM_PREFETCH)		return IORESOURCE_MEM | IORESOURCE_PREFETCH;	return IORESOURCE_MEM;}/* * Find the extent of a PCI decode.. */static u32 pci_size(u32 base, unsigned long mask){	u32 size = mask & base;		/* Find the significant bits */	size = size & ~(size-1);	/* Get the lowest of them to find the decode size */	return size-1;			/* extent = size - 1 */}static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom){	unsigned int pos, reg, next;	u32 l, sz;	struct resource *res;	for(pos=0; pos<howmany; pos = next) {		next = pos+1;		res = &dev->resource[pos];		res->name = dev->name;		reg = PCI_BASE_ADDRESS_0 + (pos << 2);		pci_read_config_dword(dev, reg, &l);		pci_write_config_dword(dev, reg, ~0);		pci_read_config_dword(dev, reg, &sz);		pci_write_config_dword(dev, reg, l);		if (!sz || sz == 0xffffffff)			continue;		if (l == 0xffffffff)			l = 0;		if ((l & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_MEMORY) {			res->start = l & PCI_BASE_ADDRESS_MEM_MASK;			res->flags |= l & ~PCI_BASE_ADDRESS_MEM_MASK;			sz = pci_size(sz, PCI_BASE_ADDRESS_MEM_MASK);		} else {			res->start = l & PCI_BASE_ADDRESS_IO_MASK;			res->flags |= l & ~PCI_BASE_ADDRESS_IO_MASK;			sz = pci_size(sz, PCI_BASE_ADDRESS_IO_MASK & 0xffff);		}		res->end = res->start + (unsigned long) sz;		res->flags |= pci_calc_resource_flags(l);		if ((l & (PCI_BASE_ADDRESS_SPACE | PCI_BASE_ADDRESS_MEM_TYPE_MASK))		    == (PCI_BASE_ADDRESS_SPACE_MEMORY | PCI_BASE_ADDRESS_MEM_TYPE_64)) {			pci_read_config_dword(dev, reg+4, &l);			next++;#if BITS_PER_LONG == 64			res->start |= ((unsigned long) l) << 32;			res->end = res->start + sz;			pci_write_config_dword(dev, reg+4, ~0);			pci_read_config_dword(dev, reg+4, &sz);			pci_write_config_dword(dev, reg+4, l);			if (~sz)				res->end = res->start + 0xffffffff +						(((unsigned long) ~sz) << 32);#else			if (l) {				printk(KERN_ERR "PCI: Unable to handle 64-bit address for device %s\n", dev->slot_name);				res->start = 0;				res->flags = 0;				continue;			}#endif		}	}	if (rom) {		dev->rom_base_reg = rom;		res = &dev->resource[PCI_ROM_RESOURCE];		pci_read_config_dword(dev, rom, &l);		pci_write_config_dword(dev, rom, ~PCI_ROM_ADDRESS_ENABLE);		pci_read_config_dword(dev, rom, &sz);		pci_write_config_dword(dev, rom, l);		if (l == 0xffffffff)			l = 0;		if (sz && sz != 0xffffffff) {			res->flags = (l & PCI_ROM_ADDRESS_ENABLE) |			  IORESOURCE_MEM | IORESOURCE_PREFETCH | IORESOURCE_READONLY | IORESOURCE_CACHEABLE;			res->start = l & PCI_ROM_ADDRESS_MASK;			sz = pci_size(sz, PCI_ROM_ADDRESS_MASK);			res->end = res->start + (unsigned long) sz;		}		res->name = dev->name;	}}void __devinit  pci_read_bridge_bases(struct pci_bus *child){	struct pci_dev *dev = child->self;	u8 io_base_lo, io_limit_lo;	u16 mem_base_lo, mem_limit_lo;	unsigned long base, limit;	struct resource *res;	int i;	if (!dev)		/* It's a host bus, nothing to read */		return;	for(i=0; i<3; i++)		child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];	res = child->resource[0];	pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);	pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);	base = (io_base_lo & PCI_IO_RANGE_MASK) << 8;	limit = (io_limit_lo & PCI_IO_RANGE_MASK) << 8;	if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {		u16 io_base_hi, io_limit_hi;		pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi);		pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi);		base |= (io_base_hi << 16);		limit |= (io_limit_hi << 16);	}	if (base && base <= limit) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲图片欧美视频| 91麻豆精品国产综合久久久久久| 欧美不卡一区二区| 青青草伊人久久| 精品久久久久久久久久久院品网| 免费欧美日韩国产三级电影| 欧美日本国产一区| 麻豆国产精品视频| 欧美精品一区二区久久婷婷| 亚洲成人av在线电影| 欧美疯狂做受xxxx富婆| 奇米精品一区二区三区在线观看一| 欧美电影免费观看高清完整版| 蜜臂av日日欢夜夜爽一区| 国产亚洲精品资源在线26u| 国产精品一区免费在线观看| 久久综合久久99| 国产不卡视频一区二区三区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 亚瑟在线精品视频| 欧美色大人视频| 免费不卡在线视频| 久久久99精品免费观看不卡| 粉嫩一区二区三区在线看| 中文字幕一区二区视频| 色老综合老女人久久久| 图片区小说区区亚洲影院| 日韩午夜精品视频| 国产精品资源在线看| 中文字幕人成不卡一区| 在线观看av一区| 久久成人免费电影| 国产精品对白交换视频| 欧美在线观看18| 久久成人免费电影| 1区2区3区精品视频| 欧美三日本三级三级在线播放| 青青草97国产精品免费观看| 国产视频不卡一区| 色妞www精品视频| 久久综合综合久久综合| 国产精品视频一二| 欧美日韩在线播放三区| 国产精品一线二线三线| 亚洲免费av网站| 欧美一区二区久久| www.欧美亚洲| 蜜桃免费网站一区二区三区| 国产精品初高中害羞小美女文| 337p亚洲精品色噜噜| 国产成人福利片| 午夜欧美电影在线观看| 久久久久久免费网| 欧美日韩亚洲综合在线| 国产一区二区三区免费在线观看| 一区二区成人在线| 久久视频一区二区| 777午夜精品视频在线播放| 成人免费毛片a| 蜜桃av一区二区三区电影| 一区二区在线观看免费视频播放 | 中文字幕亚洲在| 日韩一卡二卡三卡| 91美女视频网站| 久久av资源网| 无码av免费一区二区三区试看 | 91精品91久久久中77777| 精品亚洲国产成人av制服丝袜| 国产精品对白交换视频| 精品国产欧美一区二区| 欧美日韩精品免费| 91视频在线观看| 国产精品羞羞答答xxdd| 日本免费新一区视频| 樱花影视一区二区| 国产精品久久久久久久岛一牛影视 | 欧美综合视频在线观看| 成人激情校园春色| 国产精品一线二线三线精华| 狠狠色丁香久久婷婷综| 石原莉奈在线亚洲二区| 亚洲国产美国国产综合一区二区| 国产精品欧美经典| 日本一区二区三区电影| 久久久无码精品亚洲日韩按摩| 日韩一区二区三区电影在线观看| 欧美日韩一区二区三区四区| 日本韩国欧美一区| 91国产免费看| 欧美日韩中文字幕精品| 欧美视频精品在线观看| 91国偷自产一区二区使用方法| 91蜜桃视频在线| 91福利视频网站| 欧美日韩在线一区二区| 一本久久综合亚洲鲁鲁五月天| av网站一区二区三区| av不卡在线播放| 99视频精品在线| 99r精品视频| 色香色香欲天天天影视综合网| www.av亚洲| a美女胸又www黄视频久久| 国产91丝袜在线播放0| 美国毛片一区二区| 亚洲高清一区二区三区| 亚洲欧美电影院| 亚洲午夜一二三区视频| 天堂午夜影视日韩欧美一区二区| 石原莉奈在线亚洲三区| 激情综合网最新| 成人性生交大片免费看中文 | 日韩国产在线观看| 三级欧美韩日大片在线看| 麻豆久久久久久| 国产成人综合在线| 91视频国产资源| 欧美日韩一本到| 精品成人一区二区三区四区| 国产精品视频yy9299一区| 一区在线播放视频| 日韩电影免费在线观看网站| 久久er精品视频| 99国产精品视频免费观看| 欧美乱妇15p| 久久精品一区蜜桃臀影院| 亚洲理论在线观看| 久久成人久久爱| 91丨porny丨蝌蚪视频| 精品视频一区三区九区| 久久久蜜桃精品| 亚洲一区国产视频| 国产一区视频在线看| 色综合久久久久久久久久久| 56国语精品自产拍在线观看| 久久精品一区蜜桃臀影院| 一个色妞综合视频在线观看| 激情深爱一区二区| 在线亚洲高清视频| 国产日韩欧美精品综合| 亚洲午夜av在线| 成人h版在线观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产在线不卡一卡二卡三卡四卡| 91亚洲大成网污www| 欧美xxxxxxxxx| 亚洲精品国产精品乱码不99| 国模无码大尺度一区二区三区| 91国模大尺度私拍在线视频| 久久精品这里都是精品| 偷拍自拍另类欧美| 91麻豆蜜桃一区二区三区| 日韩一级大片在线| 亚洲国产一区二区三区| 91在线观看视频| 国产午夜亚洲精品羞羞网站| 亚洲成人在线网站| 色婷婷综合久色| 中文字幕免费在线观看视频一区| 日韩不卡一区二区| 欧美午夜电影一区| 国产精品久久久久四虎| 久久不见久久见免费视频1| 欧美挠脚心视频网站| 亚洲黄色免费电影| 99久久精品久久久久久清纯| 久久综合一区二区| 男人的j进女人的j一区| 欧美亚洲国产一区二区三区| 国产精品第一页第二页第三页| 激情六月婷婷久久| 日韩欧美精品在线| 蜜桃一区二区三区四区| 欧美日本免费一区二区三区| 夜夜嗨av一区二区三区中文字幕| 不卡欧美aaaaa| 精品国产乱码久久久久久牛牛| 亚洲资源中文字幕| 欧美亚洲国产一区在线观看网站| 成人免费小视频| 在线免费亚洲电影| 一区二区成人在线| 欧美亚洲国产一区二区三区va | 91精品国产综合久久福利| 国产综合久久久久久久久久久久| 欧美蜜桃一区二区三区| 日本亚洲视频在线| 久久色在线观看| 成人午夜视频在线| 亚洲一二三专区| 日韩一区二区精品| 成人av电影免费在线播放| 亚洲激情在线播放| 欧美一区二区三区爱爱| 国产伦精品一区二区三区视频青涩| 中文字幕的久久| 88在线观看91蜜桃国自产| 国产激情一区二区三区| 一区二区三区在线看| 91精品国产综合久久久蜜臀粉嫩|