@@ -16,7 +16,10 @@
#include <xen/lib.h>
extern const struct device_desc _sdevice[], _edevice[];
+
+#ifdef CONFIG_ACPI
extern const struct acpi_device_desc _asdevice[], _aedevice[];
+#endif
int __init device_init(struct dt_device_node *dev, enum device_class class,
const void *data)
@@ -45,6 +48,7 @@ int __init device_init(struct dt_device_node *dev, enum device_class class,
return -EBADF;
}
+#ifdef CONFIG_ACPI
int __init acpi_device_init(enum device_class class, const void *data, int class_type)
{
const struct acpi_device_desc *desc;
@@ -61,6 +65,7 @@ int __init acpi_device_init(enum device_class class, const void *data, int class
return -EBADF;
}
+#endif
enum device_class device_get_class(const struct dt_device_node *dev)
{
@@ -1651,7 +1651,7 @@ static int __init handle_node(struct domain *d, struct kernel_info *kinfo,
* Replace these nodes with our own. Note that the original may be
* used_by DOMID_XEN so this check comes first.
*/
- if ( device_get_class(node) == DEVICE_GIC )
+ if ( device_get_class(node) == DEVICE_INTERRUPT_CONTROLLER )
return make_gic_node(d, kinfo->fdt, node);
if ( dt_match_node(timer_matches, node) )
return make_timer_node(kinfo);
@@ -1366,7 +1366,7 @@ static const struct dt_device_match gicv2_dt_match[] __initconst =
{ /* sentinel */ },
};
-DT_DEVICE_START(gicv2, "GICv2", DEVICE_GIC)
+DT_DEVICE_START(gicv2, "GICv2", DEVICE_INTERRUPT_CONTROLLER)
.dt_match = gicv2_dt_match,
.init = gicv2_dt_preinit,
DT_DEVICE_END
@@ -1381,7 +1381,7 @@ static int __init gicv2_acpi_preinit(const void *data)
return 0;
}
-ACPI_DEVICE_START(agicv2, "GICv2", DEVICE_GIC)
+ACPI_DEVICE_START(agicv2, "GICv2", DEVICE_INTERRUPT_CONTROLLER)
.class_type = ACPI_MADT_GIC_VERSION_V2,
.init = gicv2_acpi_preinit,
ACPI_DEVICE_END
@@ -1909,7 +1909,7 @@ static const struct dt_device_match gicv3_dt_match[] __initconst =
{ /* sentinel */ },
};
-DT_DEVICE_START(gicv3, "GICv3", DEVICE_GIC)
+DT_DEVICE_START(gicv3, "GICv3", DEVICE_INTERRUPT_CONTROLLER)
.dt_match = gicv3_dt_match,
.init = gicv3_dt_preinit,
DT_DEVICE_END
@@ -1924,12 +1924,12 @@ static int __init gicv3_acpi_preinit(const void *data)
return 0;
}
-ACPI_DEVICE_START(agicv3, "GICv3", DEVICE_GIC)
+ACPI_DEVICE_START(agicv3, "GICv3", DEVICE_INTERRUPT_CONTROLLER)
.class_type = ACPI_MADT_GIC_VERSION_V3,
.init = gicv3_acpi_preinit,
ACPI_DEVICE_END
-ACPI_DEVICE_START(agicv4, "GICv4", DEVICE_GIC)
+ACPI_DEVICE_START(agicv4, "GICv4", DEVICE_INTERRUPT_CONTROLLER)
.class_type = ACPI_MADT_GIC_VERSION_V4,
.init = gicv3_acpi_preinit,
ACPI_DEVICE_END
@@ -234,7 +234,7 @@ static void __init gic_dt_preinit(void)
if ( !dt_get_parent(node) )
continue;
- rc = device_init(node, DEVICE_GIC, NULL);
+ rc = device_init(node, DEVICE_INTERRUPT_CONTROLLER, NULL);
if ( !rc )
{
/* NOTE: Only one GIC is supported */
@@ -262,7 +262,7 @@ static void __init gic_acpi_preinit(void)
dist = container_of(header, struct acpi_madt_generic_distributor, header);
- if ( acpi_device_init(DEVICE_GIC, NULL, dist->version) )
+ if ( acpi_device_init(DEVICE_INTERRUPT_CONTROLLER, NULL, dist->version) )
panic("Unable to find compatible GIC in the ACPI table\n");
}
#else
@@ -1,5 +1,6 @@
# SPDX-License-Identifier: GPL-2.0-only
generic-y += altp2m.h
+generic-y += device.h
generic-y += hardirq.h
generic-y += iocap.h
generic-y += paging.h
deleted file mode 100644
@@ -1,124 +0,0 @@
-#ifndef __ASM_ARM_DEVICE_H
-#define __ASM_ARM_DEVICE_H
-
-enum device_type
-{
- DEV_DT,
- DEV_PCI,
-};
-
-struct dev_archdata {
- void *iommu; /* IOMMU private data */
-};
-
-/* struct device - The basic device structure */
-struct device
-{
- enum device_type type;
-#ifdef CONFIG_HAS_DEVICE_TREE
- struct dt_device_node *of_node; /* Used by drivers imported from Linux */
-#endif
- struct dev_archdata archdata;
- struct iommu_fwspec *iommu_fwspec; /* per-device IOMMU instance data */
-};
-
-typedef struct device device_t;
-
-#include <xen/device_tree.h>
-
-#define dev_is_pci(dev) ((dev)->type == DEV_PCI)
-#define dev_is_dt(dev) ((dev)->type == DEV_DT)
-
-enum device_class
-{
- DEVICE_SERIAL,
- DEVICE_IOMMU,
- DEVICE_GIC,
- DEVICE_PCI_HOSTBRIDGE,
- /* Use for error */
- DEVICE_UNKNOWN,
-};
-
-struct device_desc {
- /* Device name */
- const char *name;
- /* Device class */
- enum device_class class;
- /* List of devices supported by this driver */
- const struct dt_device_match *dt_match;
- /*
- * Device initialization.
- *
- * -EAGAIN is used to indicate that device probing is deferred.
- */
- int (*init)(struct dt_device_node *dev, const void *data);
-};
-
-struct acpi_device_desc {
- /* Device name */
- const char *name;
- /* Device class */
- enum device_class class;
- /* type of device supported by the driver */
- const int class_type;
- /* Device initialization */
- int (*init)(const void *data);
-};
-
-/**
- * acpi_device_init - Initialize a device
- * @class: class of the device (serial, network...)
- * @data: specific data for initializing the device
- *
- * Return 0 on success.
- */
-int acpi_device_init(enum device_class class,
- const void *data, int class_type);
-
-/**
- * device_init - Initialize a device
- * @dev: device to initialize
- * @class: class of the device (serial, network...)
- * @data: specific data for initializing the device
- *
- * Return 0 on success.
- */
-int device_init(struct dt_device_node *dev, enum device_class class,
- const void *data);
-
-/**
- * device_get_type - Get the type of the device
- * @dev: device to match
- *
- * Return the device type on success or DEVICE_ANY on failure
- */
-enum device_class device_get_class(const struct dt_device_node *dev);
-
-#define DT_DEVICE_START(_name, _namestr, _class) \
-static const struct device_desc __dev_desc_##_name __used \
-__section(".dev.info") = { \
- .name = _namestr, \
- .class = _class, \
-
-#define DT_DEVICE_END \
-};
-
-#define ACPI_DEVICE_START(_name, _namestr, _class) \
-static const struct acpi_device_desc __dev_desc_##_name __used \
-__section(".adev.info") = { \
- .name = _namestr, \
- .class = _class, \
-
-#define ACPI_DEVICE_END \
-};
-
-#endif /* __ASM_ARM_DEVICE_H */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * indent-tabs-mode: nil
- * End:
- */
The following changes were done as a result of switching to asm-generic/device.h: * DEVICE_GIC was renamed to DEVICE_INTERRUPT_CONTROLLER according to definition of enum device_class in asm-generic/device.h. * acpi-related things in Arm code were guarded by #ifdef CONFIG_ACPI as struct acpi_device_desc was guarded in asm-generic, also functions acpi_device_init() was guarded too as they are using structure acpi_device_desc inside. * drop arm/include/asm/device.h and update arm/include/asm/Makefile to use asm-generic/device.h instead. Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com> --- Changes in V8: - update the commit message --- Changes in V7: - newly introduced patch which is based on the previous version of the patch: [PATCH v6 9/9] xen/asm-generic: introduce generic device.h --- xen/arch/arm/device.c | 5 ++ xen/arch/arm/domain_build.c | 2 +- xen/arch/arm/gic-v2.c | 4 +- xen/arch/arm/gic-v3.c | 6 +- xen/arch/arm/gic.c | 4 +- xen/arch/arm/include/asm/Makefile | 1 + xen/arch/arm/include/asm/device.h | 124 ------------------------------ 7 files changed, 14 insertions(+), 132 deletions(-) delete mode 100644 xen/arch/arm/include/asm/device.h