英特尔(Skylake)UnCore

英特尔(Skylake)UnCore

我正在尝试了解有关 Skylake 硬件的非核心性能计数器的 Linux 内核代码。https://elixir.bootlin.com/linux/v4.15/source/arch/x86/events/intel/uncore_snbep.c#L3565神奇地使用常数 0x208d。

在哪里可以找到这个常数的含义以及它代表什么?

谢谢,

答案1

该常量用于pci_get_device()函数调用;通过单击函数名称,您可以立即跳转到其定义在 drivers/pci/search.c 中。代码如下:

/**
 * pci_get_device - 开始或继续搜索 PCI 设备供应商/设备 ID
 * @vendor: 要匹配的 PCI 供应商 ID,或要匹配所有供应商 ID 的 %PCI_ANY_ID
 *@device: PCI 设备 ID匹配,或 %PCI_ANY_ID 匹配所有设备 ID
 * ...
 */
结构 pci_dev *pci_get_device(无符号整数供应商,无符号整数设备
                   结构 pci_dev *来自)
{
    ...
}

因此很明显该参数的含义是 PCI“设备 ID”。

那么,设备 ID 是什么?

所有 PCI 设备都有一个 16 位“供应商 ID”和一个 16 位“设备 ID”或“型号 ID”,它们在 PCI 扫描期间报告(请参阅lspci -tvnn)。(供应商,设备)对用于确定设备的正确驱动程序。

因此 PCI_VENDOR_ID_INTEL 是英特尔供应商 ID 的宏(当然是 PCI-SIG 分配的 0x8086),下一个参数 0x208d 表示特定的设备类型(由英特尔自己分配)。

PCI ID 存储库将设备 8086:208d 描述为“Sky Lake-E CHA 寄存器”(您可能会在 lspci 中看到类似的名称),因此它可能只是 Skylake 非核心一部分的虚拟设备。

相关内容