每个PCIe设备都有一个唯一的Class Code,由3个字节组成,分为Class、Subclass和Programming Interface三个部分。Class表示设备的主要功能类型,Subclass表示设备的具体子类型,Programming Interface表示设备的编程接口。通过Class Code,系统可以识别和区分不同类型的PCIe设备。 1 Base Class 00h VGA兼容设备 2 Base Class 01h...
其中Device ID和Vendor ID是区分不同设备的关键,OS和UEFI在很多时候就是通过匹配他们来找到不同的设备驱动(Class Code有时也起一定作用)。为了保证其唯一性,Vendor ID应当向PCI特别兴趣小组(PCI SIG)申请而得到。 我们重点来了解一下这些Base Address Registers(BAR)。BAR是PCI配置空间中从0x10 到 0x24的6个regis...
Class Code: 该寄存器是只读的,通常用来表示该设备类型。用法如下: ClassClde Register共3个byte,位于配置空间的[0A:08],分别表示BaseClass, Sub-Class, InterFace 举个简单的例子--使用RW工具查看笔者自己笔记本的Pcie Memory设备的Config空间,如下图: 可以看到该设备的ClassCode Register的值是0x058000,对照PCIE ...
这是类代码寄存器,记载PCI设备的分类,可供系统转接进行不同设备的识别,该寄存器由三个字段组成,分别为Base Class Code、Sub Class Code和Interface。其中Base Class Code将设备分为显卡、网卡等设备,Sub Class Code则是对这些设备进一步细分,Interface定义接口。 06Cache Line Size 记录HOST处理器使用的Cache行长度,PC...
Revision ID和Class Code寄存器 (只读) Revision ID记载PCI设备的版本号,可以被认为是Device ID寄存器的扩展 Class Code寄存器记载PCI设备的分类,用于系统软件识别当前PCI设备的分类。该寄存器由Base Class Code、Sub class code和interface三个字段组成。Base Class Code将PCI设备分类为显卡、网卡、PCI桥等设备;Sub clas...
在某些特殊应用中,PCI桥也可以作为负向译码设备。PCI总线规定使用负向译码的PCI桥,其Base Class Code寄存器为0x06,Sub Class Code寄存器为0x04,而Interface寄存器为0x01;使用正向译码方式的PCI桥的Interface寄存器为0x00。 如笔记本在连接Dock插座时,也使用了PCI桥。因为在大多数情况下,笔记本与Dock插座是分离使用的,...
Class Code:设备类型(大类),决定使用什么驱动去访问这个设备;设备分类信息, 表示pci设备属于哪一种类别,如网卡,存储卡,显卡等。需要重点关注的一个寄存器,之前定位过一个问题,pci设备资源分配失败,就是因为将class code设置为0, 而那张卡是pcie 网卡, class code应该设置为2。
Base Class Code:设备类型的编码,比如01h表示mass storage controler; Sub Class Code:设备子类型编码,比如08h表示ssd controler。 所以知道这些后大致可以分析,不能被Windows识别的这款SSD是因为匹配Revision ID不通过,导致windows认为它是一款非法的设备,从而拒绝认证该设备,并终止了相应驱动程序的安装。由于上述这些字...
Class Code: 寄存器只读,通常用来表示设备类型。用法如下: ClassClde Register共3个byte,位于配置空间的[0A:分别表示08]BaseClass, Sub-Class, InterFace 举个简单的例子–使用RW检查作者笔记本的工具Pcie Memory设备的Config如下图所示: 可见设备ClassCode Register的值是0x058000,对照PCIE Spec查看,可以看到: ...
Class Code:类代码。共三字节,分别是类代码、子类代码、编程接口。类代码不仅用于区分设备类型,还是编程接口的规范,这就是为什么会有通用驱动程序。 IRQ Line:IRQ编号。PC机以前是靠两片8259芯片来管理16个硬件中断。现在为了支持对称多处理器,有了APIC(高级可编程中断控制器),它支持管理24个中断。