aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/include/linux/acpi_iort.h
diff options
context:
space:
mode:
authorTomasz Nowicki <tn@semihalf.com>2016-09-12 20:32:21 +0200
committerMarc Zyngier <marc.zyngier@arm.com>2016-09-12 20:32:40 +0100
commit4bf2efd26d7624372fb7adff8745b4c2e8407004 (patch)
tree5ef3d2923f7f5eced9a004d11876c887b3b67976 /include/linux/acpi_iort.h
parentACPI: I/O Remapping Table (IORT) initial support (diff)
downloadwireguard-linux-4bf2efd26d7624372fb7adff8745b4c2e8407004.tar.xz
wireguard-linux-4bf2efd26d7624372fb7adff8745b4c2e8407004.zip
ACPI: Add new IORT functions to support MSI domain handling
For ITS, MSI functionality consists on building domain stack and during that process we need to reference to domain stack components e.g. before we create new DOMAIN_BUS_PCI_MSI domain we need to specify its DOMAIN_BUS_NEXUS parent domain. In order to manage that process properly, maintain list which elements contain domain token (unique for MSI domain stack) and ITS ID: iort_register_domain_token() and iort_deregister_domain_token(). Then retrieve domain token any time later with ITS ID being key off: iort_find_domain_token(). With domain token and domain type we are able to find corresponding IRQ domain. Since IORT is prepared to describe MSI domain on a per-device basis, use existing IORT helpers and implement two calls: 1. iort_msi_map_rid() to map MSI RID for a device 2. iort_get_device_domain() to find domain token for a device Signed-off-by: Tomasz Nowicki <tn@semihalf.com> Acked-by: Rafael J. Wysocki <rjw@rjwysocki.net> Reviewed-by: Hanjun Guo <hanjun.guo@linaro.org> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Diffstat (limited to 'include/linux/acpi_iort.h')
-rw-r--r--include/linux/acpi_iort.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/include/linux/acpi_iort.h b/include/linux/acpi_iort.h
index fcacaf7ed64d..0e32dac8fd03 100644
--- a/include/linux/acpi_iort.h
+++ b/include/linux/acpi_iort.h
@@ -20,11 +20,23 @@
#define __ACPI_IORT_H__
#include <linux/acpi.h>
+#include <linux/fwnode.h>
+#include <linux/irqdomain.h>
+int iort_register_domain_token(int trans_id, struct fwnode_handle *fw_node);
+void iort_deregister_domain_token(int trans_id);
+struct fwnode_handle *iort_find_domain_token(int trans_id);
#ifdef CONFIG_ACPI_IORT
void acpi_iort_init(void);
+u32 iort_msi_map_rid(struct device *dev, u32 req_id);
+struct irq_domain *iort_get_device_domain(struct device *dev, u32 req_id);
#else
static inline void acpi_iort_init(void) { }
+static inline u32 iort_msi_map_rid(struct device *dev, u32 req_id)
+{ return req_id; }
+static inline struct irq_domain *iort_get_device_domain(struct device *dev,
+ u32 req_id)
+{ return NULL; }
#endif
#endif /* __ACPI_IORT_H__ */