root/arch/powerpc/include/asm/device.h
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Arch specific extensions to struct device
 */
#ifndef _ASM_POWERPC_DEVICE_H
#define _ASM_POWERPC_DEVICE_H

struct device_node;
#ifdef CONFIG_PPC64
struct pci_dn;
struct iommu_table;
#endif

/*
 * Arch extensions to struct device.
 *
 * When adding fields, consider macio_add_one_device in
 * drivers/macintosh/macio_asic.c
 */
struct dev_archdata {
        /*
         * These two used to be a union. However, with the hybrid ops we need
         * both so here we store both a DMA offset for direct mappings and
         * an iommu_table for remapped DMA.
         */
        dma_addr_t              dma_offset;

#ifdef CONFIG_PPC64
        struct iommu_table      *iommu_table_base;
#endif

#ifdef CONFIG_PPC64
        struct pci_dn           *pci_data;
#endif
#ifdef CONFIG_EEH
        struct eeh_dev          *edev;
#endif
#ifdef CONFIG_FAIL_IOMMU
        int fail_iommu;
#endif
#ifdef CONFIG_PCI_IOV
        void *iov_data;
#endif
};

struct pdev_archdata {
        u64 dma_mask;
        /*
         * Pointer to nvdimm_pmu structure, to handle the unregistering
         * of pmu device
         */
        void *priv;
};

#endif /* _ASM_POWERPC_DEVICE_H */