12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #ifndef ACPI_AML_INTERFACE_H
- #define ACPI_AML_INTERFACE_H
- #include "qom/object.h"
- #include "hw/acpi/aml-build.h"
- #include "hw/qdev-core.h"
- #define TYPE_ACPI_DEV_AML_IF "acpi-dev-aml-interface"
- typedef struct AcpiDevAmlIfClass AcpiDevAmlIfClass;
- DECLARE_CLASS_CHECKERS(AcpiDevAmlIfClass, ACPI_DEV_AML_IF, TYPE_ACPI_DEV_AML_IF)
- #define ACPI_DEV_AML_IF(obj) \
- INTERFACE_CHECK(AcpiDevAmlIf, (obj), TYPE_ACPI_DEV_AML_IF)
- typedef struct AcpiDevAmlIf AcpiDevAmlIf;
- typedef void (*dev_aml_fn)(AcpiDevAmlIf *adev, Aml *scope);
- /**
- * AcpiDevAmlIfClass:
- *
- * build_dev_aml: adds device specific AML blob to provided scope
- *
- * Interface is designed for providing generic callback that builds device
- * specific AML blob.
- */
- struct AcpiDevAmlIfClass {
- /* <private> */
- InterfaceClass parent_class;
- /* <public> */
- dev_aml_fn build_dev_aml;
- };
- static inline dev_aml_fn get_dev_aml_func(DeviceState *dev)
- {
- if (object_dynamic_cast(OBJECT(dev), TYPE_ACPI_DEV_AML_IF)) {
- AcpiDevAmlIfClass *klass = ACPI_DEV_AML_IF_GET_CLASS(dev);
- return klass->build_dev_aml;
- }
- return NULL;
- }
- static inline void call_dev_aml_func(DeviceState *dev, Aml *scope)
- {
- dev_aml_fn fn = get_dev_aml_func(dev);
- if (fn) {
- fn(ACPI_DEV_AML_IF(dev), scope);
- }
- }
- void qbus_build_aml(BusState *bus, Aml *scope);
- #endif
|