hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/include/linux/acpi_iort.h
....@@ -1,19 +1,7 @@
1
+/* SPDX-License-Identifier: GPL-2.0-only */
12 /*
23 * Copyright (C) 2016, Semihalf
34 * Author: Tomasz Nowicki <tn@semihalf.com>
4
- *
5
- * This program is free software; you can redistribute it and/or modify it
6
- * under the terms and conditions of the GNU General Public License,
7
- * version 2, as published by the Free Software Foundation.
8
- *
9
- * This program is distributed in the hope it will be useful, but WITHOUT
10
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12
- * more details.
13
- *
14
- * You should have received a copy of the GNU General Public License along with
15
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
16
- * Place - Suite 330, Boston, MA 02111-1307 USA.
175 */
186
197 #ifndef __ACPI_IORT_H__
....@@ -26,37 +14,51 @@
2614 #define IORT_IRQ_MASK(irq) (irq & 0xffffffffULL)
2715 #define IORT_IRQ_TRIGGER_MASK(irq) ((irq >> 32) & 0xffffffffULL)
2816
17
+/*
18
+ * PMCG model identifiers for use in smmu pmu driver. Please note
19
+ * that this is purely for the use of software and has nothing to
20
+ * do with hardware or with IORT specification.
21
+ */
22
+#define IORT_SMMU_V3_PMCG_GENERIC 0x00000000 /* Generic SMMUv3 PMCG */
23
+#define IORT_SMMU_V3_PMCG_HISI_HIP08 0x00000001 /* HiSilicon HIP08 PMCG */
24
+
2925 int iort_register_domain_token(int trans_id, phys_addr_t base,
3026 struct fwnode_handle *fw_node);
3127 void iort_deregister_domain_token(int trans_id);
3228 struct fwnode_handle *iort_find_domain_token(int trans_id);
3329 #ifdef CONFIG_ACPI_IORT
3430 void acpi_iort_init(void);
35
-u32 iort_msi_map_rid(struct device *dev, u32 req_id);
36
-struct irq_domain *iort_get_device_domain(struct device *dev, u32 req_id);
31
+u32 iort_msi_map_id(struct device *dev, u32 id);
32
+struct irq_domain *iort_get_device_domain(struct device *dev, u32 id,
33
+ enum irq_domain_bus_token bus_token);
3734 void acpi_configure_pmsi_domain(struct device *dev);
3835 int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id);
3936 /* IOMMU interface */
4037 void iort_dma_setup(struct device *dev, u64 *dma_addr, u64 *size);
41
-const struct iommu_ops *iort_iommu_configure(struct device *dev);
38
+const struct iommu_ops *iort_iommu_configure_id(struct device *dev,
39
+ const u32 *id_in);
4240 int iort_iommu_msi_get_resv_regions(struct device *dev, struct list_head *head);
41
+phys_addr_t acpi_iort_dma_get_max_cpu_address(void);
4342 #else
4443 static inline void acpi_iort_init(void) { }
45
-static inline u32 iort_msi_map_rid(struct device *dev, u32 req_id)
46
-{ return req_id; }
47
-static inline struct irq_domain *iort_get_device_domain(struct device *dev,
48
- u32 req_id)
44
+static inline u32 iort_msi_map_id(struct device *dev, u32 id)
45
+{ return id; }
46
+static inline struct irq_domain *iort_get_device_domain(
47
+ struct device *dev, u32 id, enum irq_domain_bus_token bus_token)
4948 { return NULL; }
5049 static inline void acpi_configure_pmsi_domain(struct device *dev) { }
5150 /* IOMMU interface */
5251 static inline void iort_dma_setup(struct device *dev, u64 *dma_addr,
5352 u64 *size) { }
54
-static inline const struct iommu_ops *iort_iommu_configure(
55
- struct device *dev)
53
+static inline const struct iommu_ops *iort_iommu_configure_id(
54
+ struct device *dev, const u32 *id_in)
5655 { return NULL; }
5756 static inline
5857 int iort_iommu_msi_get_resv_regions(struct device *dev, struct list_head *head)
5958 { return 0; }
59
+
60
+static inline phys_addr_t acpi_iort_dma_get_max_cpu_address(void)
61
+{ return PHYS_ADDR_MAX; }
6062 #endif
6163
6264 #endif /* __ACPI_IORT_H__ */