忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12
最近访问板块 发新帖
楼主: Cyberman.Wu

pci_request_regions是干啥的,在驱动中需要调用吗? [复制链接]

论坛徽章:
0
发表于 2009-03-10 10:08 |显示全部楼层
原帖由 Cyberman.Wu 于 2009-3-10 09:52 发表
Thanks. 这本书我以前下载了,但从来没看过,只看过LDD3,看来要多看一些不同的书及代码才行。

不过在实际的驱动中还是看到过没有调用这一函数处理的,是一个错误,还是不调用关系也不大?


我觉得Essential这本书讲得不错.

有的驱动可能不是PCI设备啊.

论坛徽章:
0
发表于 2009-03-10 13:20 |显示全部楼层

回复 #11 scutan 的帖子

我看得驱动就是PCI的,呵呵,是一个PCIe x4的板子。

LDD3对于具体的硬件相关部分感觉讲得不怎么到位,前一段时间都是看PCI/PCIe规范、别人的驱动加内核源码去理解的。

[ 本帖最后由 Cyberman.Wu 于 2009-3-10 13:21 编辑 ]

论坛徽章:
0
发表于 2009-03-10 13:31 |显示全部楼层
我觉得不掉用这个函数,除非驱动不需要直接内存访问硬件。
通过bios接口一样可以控制硬件,但是对于dma需要直接内存访问。
反正pci设备有多种访问方式,不用也成,就是效率低

论坛徽章:
0
发表于 2009-03-10 19:16 |显示全部楼层

回复 #13 emmoblin 的帖子

我用的那个驱动就是用DMA传数据的,用了这么久没任何问题。从代码看它主要是把那些地址段根据是MEM还是IO加到不同的链表中了,好像也没做太多操作吧。

论坛徽章:
0
发表于 2018-03-11 17:32 |显示全部楼层
回复 1# Cyberman.Wu

BIOS或系统初始化时已经把各个PCI桥和设备的resource插入ioport/iomem_resource资源树了,其中PCI设备的resource是叶子节点,但是这些叶子结点的flag没有被设置为IORESOURCE_BUSY,网卡驱动调用pci_request_regions() -> ... -> __request_region(),__request_region()创建一个resource并把flag设置为IORESOURCE_BUSY,然后递归查询ioport/iomem_resource资源树,直到找到相应的叶子结点,然后将这个resource插入叶子结点的child链表,如果有其它的进程也来请求同一块地址,会查到IORESOURCE_BUSY,请求失败,这就实现了互斥

论坛徽章:
0
发表于 2018-03-11 17:38 |显示全部楼层
回复 1# Cyberman.Wu

BIOS或系统初始化时已经把各个PCI桥和设备的resource插入ioport/iomem_resource资源树了,其中PCI设备的resource是叶子节点,但是这些叶子结点的flag没有被设置为IORESOURCE_BUSY,网卡驱动调用pci_request_regions() -> ... -> __request_region(),__request_region()创建一个resource并把flag设置为IORESOURCE_BUSY,然后递归查询ioport/iomem_resource资源树,直到找到相应的叶子结点,然后将这个resource插入叶子结点的child链表,如果有其它的进程也来请求同一块地址,会查到IORESOURCE_BUSY,请求失败,这就实现了互斥
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP