寄存器的设置及初始化

2025-05-25 22:45:23

1、首先,这个16-位寄存器标识一个硬件制造商,每个 Intel 设备都标有相同的供应商号, 0x8086,这样的号有一个全球的注册,由 PCI 特别利益体所维护,并且供应商必须申请有一个唯一的分配给它们的号。

寄存器的设置及初始化

2、然后,这是另一个16-位寄存器,由供应商选择,对于这个设备 ID 没有要求官方的注册. 这个 ID 常常和 供应商 ID 成对出现来组成一个唯一的 32-位 标识符给一个硬件设备. 我们使用词语"签名"来指代供应商和设备 ID 对. 一个设备驱动常常依靠签名来标识它的设备; 你可在硬件手册中找到对于目标设备要寻找的值。

寄存器的设置及初始化

3、然后,每个外设都属于一个类. 类寄存器是一个 16-位 值, 它的高 8 位标榄茈托锣识"基类"(或者群). 例如, "髫潋啜缅ethernet"和"token ring"是 2 个类都属于"network"群, 而"serial"和"parallel"属于"communication"群. 一些驱动可支持几个类似的设备, 每个都有一个不同的签名但是都属于同样的类; 这些驱动可依赖类寄存器标识它们的外设。

寄存器的设置及初始化

4、然后,这些字段可用来进一步标识一个设备,如果芯片对于本地总线是一个通用接口芯片, 它常常被用在几个完全不同的地方,并且驱动团蝣逅捎必须标识出它在与之通话的实际设备,子系统标志用作此目的。使用这些不同的标识符,一个 PCI 驱动可告知内核它支持什么类型的设备。struct pci_device_id 结构被用来定义一个驱动支持的不同类型 PCI 设备的列表。这些指定一个设备的 PCI 供应商和设备 ID. 如果驱动可处理任何供应商或者设备 ID, 值 PCI_ANY_ID 应当用作这些成员上。

寄存器的设置及初始化

5、然后,这些指定一个设备的 PCI 子系统供应商和子系统设备 ID。如果驱动可处理任何类型的子系统 ID, 值 PCI_ANY_ID 应当用作这些成员上。这 2 个值允许驱动来指定它支持一类 PCI 类设备。 不同的 PCI 设备类( 一个 VAG 控制器是一个例子 )在 PCI 规范里被描述. 如果一个驱动可处理任何子系统 ID, 值 PCI_ANY_ID 应当用作这些字段。

寄存器的设置及初始化

6、最后,这个创建一个 struct pci_device_id, 它匹配一个特定的 PCI 类。这些例子创建一个 struct pci_device_id 结构的列表, 列表中最后一个是被设置为全零的的空结构. 这个 ID 的数组用在 struct pci_driver ,并且它还用来告诉用户空间这个特定的驱动支持哪个设备。

寄存器的设置及初始化
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢