1 #ifndef ACPI_AML_INTERFACE_H
2 #define ACPI_AML_INTERFACE_H
4 #include "qom/object.h"
5 #include "hw/acpi/aml-build.h"
7 #define TYPE_ACPI_DEV_AML_IF "acpi-dev-aml-interface"
8 typedef struct AcpiDevAmlIfClass AcpiDevAmlIfClass
;
9 DECLARE_CLASS_CHECKERS(AcpiDevAmlIfClass
, ACPI_DEV_AML_IF
, TYPE_ACPI_DEV_AML_IF
)
10 #define ACPI_DEV_AML_IF(obj) \
11 INTERFACE_CHECK(AcpiDevAmlIf, (obj), TYPE_ACPI_DEV_AML_IF)
13 typedef struct AcpiDevAmlIf AcpiDevAmlIf
;
14 typedef void (*dev_aml_fn
)(AcpiDevAmlIf
*adev
, Aml
*scope
);
19 * build_dev_aml: adds device specific AML blob to provided scope
21 * Interface is designed for providing generic callback that builds device
24 struct AcpiDevAmlIfClass
{
26 InterfaceClass parent_class
;
29 dev_aml_fn build_dev_aml
;
32 static inline dev_aml_fn
get_dev_aml_func(DeviceState
*dev
)
34 if (object_dynamic_cast(OBJECT(dev
), TYPE_ACPI_DEV_AML_IF
)) {
35 AcpiDevAmlIfClass
*klass
= ACPI_DEV_AML_IF_GET_CLASS(dev
);
36 return klass
->build_dev_aml
;
41 static inline void call_dev_aml_func(DeviceState
*dev
, Aml
*scope
)
43 dev_aml_fn fn
= get_dev_aml_func(dev
);
45 fn(ACPI_DEV_AML_IF(dev
), scope
);