.. | .. |
---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-only */ |
---|
1 | 2 | /* |
---|
2 | 3 | * Copyright (C) 2016, Semihalf |
---|
3 | 4 | * 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. |
---|
17 | 5 | */ |
---|
18 | 6 | |
---|
19 | 7 | #ifndef __ACPI_IORT_H__ |
---|
.. | .. |
---|
26 | 14 | #define IORT_IRQ_MASK(irq) (irq & 0xffffffffULL) |
---|
27 | 15 | #define IORT_IRQ_TRIGGER_MASK(irq) ((irq >> 32) & 0xffffffffULL) |
---|
28 | 16 | |
---|
| 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 | + |
---|
29 | 26 | int iort_register_domain_token(int trans_id, phys_addr_t base, |
---|
30 | 27 | struct fwnode_handle *fw_node); |
---|
31 | 28 | void iort_deregister_domain_token(int trans_id); |
---|
32 | 29 | struct fwnode_handle *iort_find_domain_token(int trans_id); |
---|
33 | 30 | #ifdef CONFIG_ACPI_IORT |
---|
34 | 31 | 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); |
---|
37 | 35 | void acpi_configure_pmsi_domain(struct device *dev); |
---|
38 | 36 | int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id); |
---|
39 | 37 | /* IOMMU interface */ |
---|
40 | 38 | 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); |
---|
42 | 41 | 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); |
---|
43 | 43 | #else |
---|
44 | 44 | 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) |
---|
49 | 49 | { return NULL; } |
---|
50 | 50 | static inline void acpi_configure_pmsi_domain(struct device *dev) { } |
---|
51 | 51 | /* IOMMU interface */ |
---|
52 | 52 | static inline void iort_dma_setup(struct device *dev, u64 *dma_addr, |
---|
53 | 53 | 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) |
---|
56 | 56 | { return NULL; } |
---|
57 | 57 | static inline |
---|
58 | 58 | int iort_iommu_msi_get_resv_regions(struct device *dev, struct list_head *head) |
---|
59 | 59 | { return 0; } |
---|
| 60 | + |
---|
| 61 | +static inline phys_addr_t acpi_iort_dma_get_max_cpu_address(void) |
---|
| 62 | +{ return PHYS_ADDR_MAX; } |
---|
60 | 63 | #endif |
---|
61 | 64 | |
---|
62 | 65 | #endif /* __ACPI_IORT_H__ */ |
---|