PCIe设备的Header Type是配置空间中的一个重要字段,用于标识设备的类型和功能。不同设备类型的配置空间是不一样的。
可以通过lspci直接查看输出的设备列表中是否有bridge字样,如果有表示是bridge设备。
也可以通过读取Header Type寄存器来查看。
Header Type寄存器:只读寄存器,表示类型,分为PCIe endpoint设备(最低位是0)和PCIe桥(最低位是1),最高位0表示单功能设备,最高位1表示多功能设备,逻辑设备是单功能设备。位置偏移在PCIe设备配置空间的0x0E处。
lspci -s 01:00.0 -x
00表示是endpoint设备
lspci -s 00:02.0 -x
81表示是多功能PCIe桥设备。
PCIe Header type的具体定义如下:
// 配置空间偏移0x0E处
struct pcie_header_type {
uint8_t type:7; // 低7位表示类型
uint8_t multi:1; // 最高位表示是否多功能
};
// 类型定义
#define PCI_HEADER_TYPE_NORMAL 0x00 // 端点设备
#define PCI_HEADER_TYPE_BRIDGE 0x01 // PCI-PCI桥
#define PCI_HEADER_TYPE_CARDBUS 0x02 // CardBus桥
#define PCI_HEADER_TYPE_MULTI_FUNC 0x80 // 多功能标志位