博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内核ACPI函数API之acpi_platform_fill_resource
阅读量:4216 次
发布时间:2019-05-26

本文共 1348 字,大约阅读时间需要 4 分钟。

static void acpi_platform_fill_resource(struct acpi_device *adev,	const struct resource *src, struct resource *dest)这个函数用于将src的的resource赋值给dest。其源码分析如下:static void acpi_platform_fill_resource(struct acpi_device *adev,	const struct resource *src, struct resource *dest){	struct device *parent;	#将src的resource 赋值给dest	*dest = *src;	/*	 * If the device has parent we need to take its resources into	 * account as well because this device might consume part of those.	 */	 #找到这个acpi_device的父设备	parent = acpi_get_first_physical_node(adev->parent);	#如果这个父设备是一个pcie设备的的话。dest也好包含父设备的resource	if (parent && dev_is_pci(parent))		dest->parent = pci_find_resource(to_pci_dev(parent), dest);}struct resource *pci_find_resource(struct pci_dev *dev, struct resource *res){	int i;	#遍历父设备的资源	for (i = 0; i < PCI_ROM_RESOURCE; i++) {		struct resource *r = &dev->resource[i];		#如果资源不为null,且已经包含自设备的资源,就返回这个资源		if (r->start && resource_contains(r, res))			return r;	}	return NULL;}resource_contains 的实现比较简单,只有在形参r1 完全包含r2的时候才返回truestatic inline bool resource_contains(struct resource *r1, struct resource *r2){	#首先比较type 是否相等,type 不相等的话直接返回false	if (resource_type(r1) != resource_type(r2))		return false;	#父设备和子设备如果包含UNSET flags,则退出	if (r1->flags & IORESOURCE_UNSET || r2->flags & IORESOURCE_UNSET)		return false;	return r1->start <= r2->start && r1->end >= r2->end;}

转载地址:http://ndnmi.baihongyu.com/

你可能感兴趣的文章
终端驱动程序:几个简单例子
查看>>
HTML条件注释
查看>>
内核态与用户态
查看>>
使用mingw(fedora)移植virt-viewer
查看>>
趣链 BitXHub跨链平台 (4)跨链网关“初介绍”
查看>>
C++ 字符串string操作
查看>>
MySQL必知必会 -- 了解SQL和MySQL
查看>>
MySQL必知必会 -- 数据检索
查看>>
MySQL必知必会 -- 排序检索数据 ORDER BY
查看>>
POJ 3087 解题报告
查看>>
POJ 2536 解题报告
查看>>
POJ 1154 解题报告
查看>>
POJ 1661 解题报告
查看>>
POJ 1101 解题报告
查看>>
ACM POJ catalogues[转载]
查看>>
ACM经历总结[转载]
查看>>
C/C++文件操作[转载]
查看>>
常见的排序算法
查看>>
hdu 3460 Ancient Printer(trie tree)
查看>>
KMP求前缀函数(next数组)
查看>>