linux驱动结构pci

linux驱动结构pci

ID:37239688

大小:457.00 KB

页数:45页

时间:2019-05-20

linux驱动结构pci_第1页
linux驱动结构pci_第2页
linux驱动结构pci_第3页
linux驱动结构pci_第4页
linux驱动结构pci_第5页
资源描述:

《linux驱动结构pci》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、linux驱动结构pciLinux设计了一个通用的数据结构resource来描述各种I/O资源(如:I/O端口、外设内存、DMA和IRQ等)。该结构定义在include/linux/ioport.h头文件中:structresource{constchar*name;unsignedlongstart,end;\表示资源的起始物理地址和终止物理地址。它们确定了资源的范围,也即是一个闭区间[start,end]unsignedlongflags;\描述资源的标志structresource*parent,*sibling,*child;\分别指向父、兄弟、子资

2、源的指针}; Linux是以一种倒置的树形结构来管理每一类I/O资源(如:I/O端口、外设内存、DMA和IRQ)的。每一类I/O资源都对应有一颗倒置的资源树,树中的每一个节点都是一个resource结构,而树的根结点root则描述了该类资源的整个资源空间。为什么使用树?例如,考虑一下IDE硬盘接口所使用的I/O端口地址-比如说从0xf000到0xf00f。那么,start字段为0xf000且end字段为0xf00f的这样一个资源包含在树中,控制器的常规名字存放在name字段中。但是,IDE设备驱动程序需要记住另外的信息,也就是IDE链主盘使用0xf000到0xf0

3、07的子范围,从盘使用0xf008到0xf00f的子范围。为了做到这点,设备驱动程序把两个子范围对应的孩子插入到从0xf000到0xf00f的整个范围对应的资源下。一般来说,树中的每个节点肯定相当于父节点对应范围的一个子范围。I/O端口资源树(ioport_resource)的根节点跨越了整个I/O地址空间(从端口0到65535,即64K)。更详细可以参考:每种类的PCI设备都可以用结构类型pci_dev来描述。更为准确地说,应该是每一个PCI功能,即PCI逻辑设备都唯一地对应有一个pci_dev设备描述符。该数据结构的定义如下(include/linux/pci

4、.h):structpci_dev{structlist_headglobal_list;/*全局链表元素global_list:每一个pci_dev结构都通过该成员连接到全局pci设备链表pci_devices中*/structlist_headbus_list;/*总线设备链表元素bus_list:每一个pci_dev结构除了链接到全局设备链表中外,还会通过这个成员连接到其所属PCI总线的设备链表中。每一条PCI总线都维护一条它自己的设备链表视图,以便描述所有连接在该PCI总线上的设备,其表头由PCI总线的pci_bus结构中的devices成员所描述t*/s

5、tructpci_bus*bus;/*总线指针bus:指向这个PCI设备所在的PCI总线的pci_bus结构。因此,对于桥设备而言,bus指针将指向桥设备的主总线(primarybus),也即指向桥设备所在的PCI总线*/structpci_bus*subordinate;/*指针subordinate:指向这个PCI设备所桥接的下级总线。这个指针成员仅对桥设备才有意义,而对于一般的非桥PCI设备而言,该指针成员总是为NULL*/void*sysdata;/*无类型指针sysdata:指向一片特定于系统的扩展数据*/structproc_dir_entry*pro

6、cent;/*指针procent:指向该PCI设备在/proc文件系统中对应的目录项*/unsignedintdevfn;/*devfn:这个PCI设备的设备功能号,也成为PCI逻辑设备号(0-255)。其中bit[7:3]是物理设备号(取值范围0-31),bit[2:0]是功能号(取值范围0-7)。*/unsignedshortvendor;/*vendor:这是一个16无符号整数,表示PCI设备的厂商ID*/unsignedshortdevice;/*device:这是一个16无符号整数,表示PCI设备的设备ID*/unsignedshortsubsystem

7、_vendor;/*subsystem_vendor:这是一个16无符号整数,表示PCI设备的子系统厂商ID*/unsignedshortsubsystem_device;/*subsystem_device:这是一个16无符号整数,表示PCI设备的子系统设备ID。*/unsignedintclass;/*class:32位的无符号整数,表示该PCI设备的类别,其中,bit[7:0]为编程接口,bit[15:8]为子类别代码,bit[23:16]为基类别代码,bit[31:24]无意义。显然,class成员的低3字节刚好对应与PCI配置空间中的类代码*/u8hdr

8、_type

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。