我正在尝试了解有关 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 非核心一部分的虚拟设备。