xref: /linux/arch/powerpc/include/asm/device.h (revision b85d45947951d23cb22d90caecf4c1eb81342c96)
1 /*
2  * Arch specific extensions to struct device
3  *
4  * This file is released under the GPLv2
5  */
6 #ifndef _ASM_POWERPC_DEVICE_H
7 #define _ASM_POWERPC_DEVICE_H
8 
9 struct dma_map_ops;
10 struct device_node;
11 #ifdef CONFIG_PPC64
12 struct pci_dn;
13 struct iommu_table;
14 #endif
15 
16 /*
17  * Arch extensions to struct device.
18  *
19  * When adding fields, consider macio_add_one_device in
20  * drivers/macintosh/macio_asic.c
21  */
22 struct dev_archdata {
23 	/* DMA operations on that device */
24 	struct dma_map_ops	*dma_ops;
25 
26 	/*
27 	 * These two used to be a union. However, with the hybrid ops we need
28 	 * both so here we store both a DMA offset for direct mappings and
29 	 * an iommu_table for remapped DMA.
30 	 */
31 	dma_addr_t		dma_offset;
32 
33 #ifdef CONFIG_PPC64
34 	struct iommu_table	*iommu_table_base;
35 #endif
36 
37 #ifdef CONFIG_IOMMU_API
38 	void			*iommu_domain;
39 #endif
40 #ifdef CONFIG_SWIOTLB
41 	dma_addr_t		max_direct_dma_addr;
42 #endif
43 #ifdef CONFIG_PPC64
44 	struct pci_dn		*pci_data;
45 #endif
46 #ifdef CONFIG_EEH
47 	struct eeh_dev		*edev;
48 #endif
49 #ifdef CONFIG_FAIL_IOMMU
50 	int fail_iommu;
51 #endif
52 #ifdef CONFIG_CXL_BASE
53 	struct cxl_context	*cxl_ctx;
54 #endif
55 };
56 
57 struct pdev_archdata {
58 	u64 dma_mask;
59 };
60 
61 #define ARCH_HAS_DMA_GET_REQUIRED_MASK
62 
63 #endif /* _ASM_POWERPC_DEVICE_H */
64