summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Rudolph <patrick.rudolph@9elements.com>2024-10-24 12:49:02 +0200
committerLean Sheng Tan <sheng.tan@9elements.com>2024-11-16 22:08:17 +0000
commit4dcda853fd26623c09ce40cfb75e1e25c81434f1 (patch)
tree21dc53d0f3bc49f0704d108b8e78189c6eb74a64
parentf618b265adb434423ad8c06466e4575c7372f60e (diff)
device: Add helper to identify PCI IOAPICs
Add a helper function to identify PCI IOAPICs. Will be used in the following commits. Change-Id: Ibe50934260b025575440fd52eace73fe2327a193 Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/84849 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Shuo Liu <shuo.liu@intel.com>
-rw-r--r--src/device/device_util.c8
-rw-r--r--src/include/device/device.h1
2 files changed, 9 insertions, 0 deletions
diff --git a/src/device/device_util.c b/src/device/device_util.c
index f33c9250dc..ec2d1591ab 100644
--- a/src/device/device_util.c
+++ b/src/device/device_util.c
@@ -5,6 +5,7 @@
#include <console/console.h>
#include <device/device.h>
#include <device/pci_def.h>
+#include <device/pci_ids.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -969,3 +970,10 @@ bool is_pci_bridge(const struct device *pci)
{
return is_pci(pci) && ((pci->hdr_type & 0x7f) == PCI_HEADER_TYPE_BRIDGE);
}
+
+bool is_pci_ioapic(const struct device *pci)
+{
+ return is_pci(pci) && ((pci->class >> 16) == PCI_BASE_CLASS_SYSTEM) &&
+ ((pci->class >> 8) == PCI_CLASS_SYSTEM_PIC) &&
+ ((pci->class & 0xff) >= 0x10);
+}
diff --git a/src/include/device/device.h b/src/include/device/device.h
index f28a46b3bb..053138db99 100644
--- a/src/include/device/device.h
+++ b/src/include/device/device.h
@@ -195,6 +195,7 @@ bool is_pci(const struct device *pci);
bool is_enabled_pci(const struct device *pci);
bool is_pci_dev_on_bus(const struct device *pci, unsigned int bus);
bool is_pci_bridge(const struct device *pci);
+bool is_pci_ioapic(const struct device *pci);
bool is_domain0(const struct device *dev);
bool is_dev_on_domain0(const struct device *dev);