162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Arch specific extensions to struct device
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci#ifndef _ASM_POWERPC_DEVICE_H
662306a36Sopenharmony_ci#define _ASM_POWERPC_DEVICE_H
762306a36Sopenharmony_ci
862306a36Sopenharmony_cistruct device_node;
962306a36Sopenharmony_ci#ifdef CONFIG_PPC64
1062306a36Sopenharmony_cistruct pci_dn;
1162306a36Sopenharmony_cistruct iommu_table;
1262306a36Sopenharmony_ci#endif
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci/*
1562306a36Sopenharmony_ci * Arch extensions to struct device.
1662306a36Sopenharmony_ci *
1762306a36Sopenharmony_ci * When adding fields, consider macio_add_one_device in
1862306a36Sopenharmony_ci * drivers/macintosh/macio_asic.c
1962306a36Sopenharmony_ci */
2062306a36Sopenharmony_cistruct dev_archdata {
2162306a36Sopenharmony_ci	/*
2262306a36Sopenharmony_ci	 * These two used to be a union. However, with the hybrid ops we need
2362306a36Sopenharmony_ci	 * both so here we store both a DMA offset for direct mappings and
2462306a36Sopenharmony_ci	 * an iommu_table for remapped DMA.
2562306a36Sopenharmony_ci	 */
2662306a36Sopenharmony_ci	dma_addr_t		dma_offset;
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci#ifdef CONFIG_PPC64
2962306a36Sopenharmony_ci	struct iommu_table	*iommu_table_base;
3062306a36Sopenharmony_ci#endif
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci#ifdef CONFIG_PPC64
3362306a36Sopenharmony_ci	struct pci_dn		*pci_data;
3462306a36Sopenharmony_ci#endif
3562306a36Sopenharmony_ci#ifdef CONFIG_EEH
3662306a36Sopenharmony_ci	struct eeh_dev		*edev;
3762306a36Sopenharmony_ci#endif
3862306a36Sopenharmony_ci#ifdef CONFIG_FAIL_IOMMU
3962306a36Sopenharmony_ci	int fail_iommu;
4062306a36Sopenharmony_ci#endif
4162306a36Sopenharmony_ci#ifdef CONFIG_CXL_BASE
4262306a36Sopenharmony_ci	struct cxl_context	*cxl_ctx;
4362306a36Sopenharmony_ci#endif
4462306a36Sopenharmony_ci#ifdef CONFIG_PCI_IOV
4562306a36Sopenharmony_ci	void *iov_data;
4662306a36Sopenharmony_ci#endif
4762306a36Sopenharmony_ci};
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cistruct pdev_archdata {
5062306a36Sopenharmony_ci	u64 dma_mask;
5162306a36Sopenharmony_ci	/*
5262306a36Sopenharmony_ci	 * Pointer to nvdimm_pmu structure, to handle the unregistering
5362306a36Sopenharmony_ci	 * of pmu device
5462306a36Sopenharmony_ci	 */
5562306a36Sopenharmony_ci	void *priv;
5662306a36Sopenharmony_ci};
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci#endif /* _ASM_POWERPC_DEVICE_H */
59