#include <xen/lib.h>
extern const struct device_desc _sdevice[], _edevice[];
+extern const struct acpi_device_desc _asdevice[], _aedevice[];
int __init device_init(struct dt_device_node *dev, enum device_class class,
const void *data)
return -EBADF;
}
+int __init acpi_device_init(enum device_class class, const void *data, int class_type)
+{
+ const struct acpi_device_desc *desc;
+
+ for ( desc = _asdevice; desc != _aedevice; desc++ )
+ {
+ if ( ( desc->class != class ) || ( desc->class_type != class_type ) )
+ continue;
+
+ ASSERT(desc->init != NULL);
+
+ return desc->init(data);
+ }
+
+ return -EBADF;
+}
+
enum device_class device_get_class(const struct dt_device_node *dev)
{
const struct device_desc *desc;
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 __init acpi_device_init(enum device_class class,
+ const void *data, int class_type);
+
/**
* device_init - Initialize a device
* @dev: device to initialize
#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 */
/*