与PCI Express中一样,称为“ pci express功能寄存器”的功能寄存器指定设备/端口类型字段,该字段指示其根端口,上游交换机端口,交换机下游端口,端点等。 BIOS在PCI总线枚举期间使用什么机制来确定端口/设备类型?
答案 0 :(得分:0)
我不确定是否回答您的问题,但是在coreboot(get_pci_bridge_ops)https://github.com/coreboot/coreboot/blob/master/src/device/pci_device.c中进行桥接操作时,方法是这样的:
unsigned int pciexpos;
pciexpos = pci_find_capability(dev, PCI_CAP_ID_PCIE);
if (pciexpos) {
u16 flags;
flags = pci_read_config16(dev, pciexpos + PCI_EXP_FLAGS);
switch ((flags & PCI_EXP_FLAGS_TYPE) >> 4) {
case PCI_EXP_TYPE_ROOT_PORT:
case PCI_EXP_TYPE_UPSTREAM:
case PCI_EXP_TYPE_DOWNSTREAM:
printk(BIOS_DEBUG, "%s subordinate bus PCI Express\n",
dev_path(dev));
return &default_pciexp_ops_bus;
case PCI_EXP_TYPE_PCI_BRIDGE:
printk(BIOS_DEBUG, "%s subordinate PCI\n",
dev_path(dev));
return &default_pci_ops_bus;
default:
break;
}
}
答案 1 :(得分:0)
它是固定的-供应商根据产品的设计进行编程。
制造商始终知道端口是上游还是下游,或者它是否仅设计了根联合体而不是交换机,或者是否正在使用PCI内置PCIe。
简而言之,这是供应商知识必不可少的地方,也是编写固件的责任所在。
具体来说,该字段值可以来自EEPROM / FlashROM或由BIOS / UEFI在早期启动时使用硬接线值进行编程。 它的完成方式并不重要,重要的是,在任何相关软件读取该字段之前,已按照工厂的预期对字段进行了初始化。