hc
2024-05-10 23fa18eaa71266feff7ba8d83022d9e1cc83c65a
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,52 @@
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
+#define IORT_SMMU_V3_PMCG_HISI_HIP09 0x00000002 /* HiSilicon HIP09 PMCG */
25
+
2926 int iort_register_domain_token(int trans_id, phys_addr_t base,
3027 struct fwnode_handle *fw_node);
3128 void iort_deregister_domain_token(int trans_id);
3229 struct fwnode_handle *iort_find_domain_token(int trans_id);
3330 #ifdef CONFIG_ACPI_IORT
3431 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);
32
+u32 iort_msi_map_id(struct device *dev, u32 id);
33
+struct irq_domain *iort_get_device_domain(struct device *dev, u32 id,
34
+ enum irq_domain_bus_token bus_token);
3735 void acpi_configure_pmsi_domain(struct device *dev);
3836 int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id);
3937 /* IOMMU interface */
4038 void iort_dma_setup(struct device *dev, u64 *dma_addr, u64 *size);
41
-const struct iommu_ops *iort_iommu_configure(struct device *dev);
39
+const struct iommu_ops *iort_iommu_configure_id(struct device *dev,
40
+ const u32 *id_in);
4241 int iort_iommu_msi_get_resv_regions(struct device *dev, struct list_head *head);
42
+phys_addr_t acpi_iort_dma_get_max_cpu_address(void);
4343 #else
4444 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)
45
+static inline u32 iort_msi_map_id(struct device *dev, u32 id)
46
+{ return id; }
47
+static inline struct irq_domain *iort_get_device_domain(
48
+ struct device *dev, u32 id, enum irq_domain_bus_token bus_token)
4949 { return NULL; }
5050 static inline void acpi_configure_pmsi_domain(struct device *dev) { }
5151 /* IOMMU interface */
5252 static inline void iort_dma_setup(struct device *dev, u64 *dma_addr,
5353 u64 *size) { }
54
-static inline const struct iommu_ops *iort_iommu_configure(
55
- struct device *dev)
54
+static inline const struct iommu_ops *iort_iommu_configure_id(
55
+ struct device *dev, const u32 *id_in)
5656 { return NULL; }
5757 static inline
5858 int iort_iommu_msi_get_resv_regions(struct device *dev, struct list_head *head)
5959 { return 0; }
60
+
61
+static inline phys_addr_t acpi_iort_dma_get_max_cpu_address(void)
62
+{ return PHYS_ADDR_MAX; }
6063 #endif
6164
6265 #endif /* __ACPI_IORT_H__ */