英特爾 (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,或 %PCI_ANY_ID 以符合所有供應商 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 是 Intel 的供應商 ID 的巨集(當然是 0x8086,由 PCI-SIG 分配),下一個參數 0x208d 表示特定的裝置類型(由 Intel 自己分配)。

PCI ID 儲存庫將設備 8086:208d 描述為「Sky Lake-E CHA 暫存器」(您可能會在 lspci 中看到類似的名稱),因此它可能只是一個虛擬設​​備,屬於 Skylake 非核心的一部分。

相關內容