diff options
author | Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com> | 2021-10-08 15:38:17 -0700 |
---|---|---|
committer | Stefano Stabellini <stefano.stabellini@xilinx.com> | 2021-10-08 15:38:17 -0700 |
commit | 305f19306b4f16448a53ceebe6e6aa19513738ed (patch) | |
tree | 0f541412411866fa4fbca1e414b7c0fefe9751d4 /xen/include | |
parent | b11380f6cd58ce40422473262b2b4c2b210447a1 (diff) |
xen/arm: Add new device type for PCI
Add new device type (DEV_PCI) to distinguish PCI devices from platform
DT devices, so some drivers, like IOMMU, can handle PCI devices
differently.
Also add a helper which is when given a struct device returns the
corresponding struct pci_dev which this device is a part of.
Because of the header cross-dependencies, e.g. we need both
struct pci_dev and struct arch_pci_dev at the same time, this cannot be
done with an inline.
Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Reviewed-by: Rahul Singh <rahul.singh@arm.com>
Tested-by: Rahul Singh <rahul.singh@arm.com>
Diffstat (limited to 'xen/include')
-rw-r--r-- | xen/include/asm-arm/device.h | 4 | ||||
-rw-r--r-- | xen/include/asm-arm/pci.h | 7 |
2 files changed, 9 insertions, 2 deletions
diff --git a/xen/include/asm-arm/device.h b/xen/include/asm-arm/device.h index ebe84ea853..7bf0405603 100644 --- a/xen/include/asm-arm/device.h +++ b/xen/include/asm-arm/device.h @@ -4,6 +4,7 @@ enum device_type { DEV_DT, + DEV_PCI, }; struct dev_archdata { @@ -25,8 +26,7 @@ typedef struct device device_t; #include <xen/device_tree.h> -/* TODO: Correctly implement dev_is_pci when PCI is supported on ARM */ -#define dev_is_pci(dev) ((void)(dev), 0) +#define dev_is_pci(dev) ((dev)->type == DEV_PCI) #define dev_is_dt(dev) ((dev)->type == DEV_DT) enum device_class diff --git a/xen/include/asm-arm/pci.h b/xen/include/asm-arm/pci.h index f5a5f15e3b..8551704de3 100644 --- a/xen/include/asm-arm/pci.h +++ b/xen/include/asm-arm/pci.h @@ -27,6 +27,13 @@ struct arch_pci_dev { }; /* + * Because of the header cross-dependencies, e.g. we need both + * struct pci_dev and struct arch_pci_dev at the same time, this cannot be + * done with an inline here. Macro can be implemented, but looks scary. + */ +struct pci_dev *dev_to_pci(struct device *dev); + +/* * struct to hold the mappings of a config space window. This * is expected to be used as sysdata for PCI controllers that * use ECAM. |