xref: /qemu/include/hw/acpi/acpi_aml_interface.h (revision 23609e47c0f62b537ba9803cb15e69993fd0c266)
1*23609e47SIgor Mammedov #ifndef ACPI_AML_INTERFACE_H
2*23609e47SIgor Mammedov #define ACPI_AML_INTERFACE_H
3*23609e47SIgor Mammedov 
4*23609e47SIgor Mammedov #include "qom/object.h"
5*23609e47SIgor Mammedov #include "hw/acpi/aml-build.h"
6*23609e47SIgor Mammedov 
7*23609e47SIgor Mammedov #define TYPE_ACPI_DEV_AML_IF "acpi-dev-aml-interface"
8*23609e47SIgor Mammedov typedef struct AcpiDevAmlIfClass AcpiDevAmlIfClass;
9*23609e47SIgor Mammedov DECLARE_CLASS_CHECKERS(AcpiDevAmlIfClass, ACPI_DEV_AML_IF, TYPE_ACPI_DEV_AML_IF)
10*23609e47SIgor Mammedov #define ACPI_DEV_AML_IF(obj) \
11*23609e47SIgor Mammedov      INTERFACE_CHECK(AcpiDevAmlIf, (obj), TYPE_ACPI_DEV_AML_IF)
12*23609e47SIgor Mammedov 
13*23609e47SIgor Mammedov typedef struct AcpiDevAmlIf AcpiDevAmlIf;
14*23609e47SIgor Mammedov typedef void (*dev_aml_fn)(AcpiDevAmlIf *adev, Aml *scope);
15*23609e47SIgor Mammedov 
16*23609e47SIgor Mammedov /**
17*23609e47SIgor Mammedov  * AcpiDevAmlIfClass:
18*23609e47SIgor Mammedov  *
19*23609e47SIgor Mammedov  * build_dev_aml: adds device specific AML blob to provided scope
20*23609e47SIgor Mammedov  *
21*23609e47SIgor Mammedov  * Interface is designed for providing generic callback that builds device
22*23609e47SIgor Mammedov  * specific AML blob.
23*23609e47SIgor Mammedov  */
24*23609e47SIgor Mammedov struct AcpiDevAmlIfClass {
25*23609e47SIgor Mammedov     /* <private> */
26*23609e47SIgor Mammedov     InterfaceClass parent_class;
27*23609e47SIgor Mammedov 
28*23609e47SIgor Mammedov     /* <public> */
29*23609e47SIgor Mammedov     dev_aml_fn build_dev_aml;
30*23609e47SIgor Mammedov };
31*23609e47SIgor Mammedov 
32*23609e47SIgor Mammedov static inline void call_dev_aml_func(DeviceState *dev, Aml *scope)
33*23609e47SIgor Mammedov {
34*23609e47SIgor Mammedov     if (object_dynamic_cast(OBJECT(dev), TYPE_ACPI_DEV_AML_IF)) {
35*23609e47SIgor Mammedov         AcpiDevAmlIfClass *klass = ACPI_DEV_AML_IF_GET_CLASS(dev);
36*23609e47SIgor Mammedov         klass->build_dev_aml(ACPI_DEV_AML_IF(dev), scope);
37*23609e47SIgor Mammedov     }
38*23609e47SIgor Mammedov }
39*23609e47SIgor Mammedov 
40*23609e47SIgor Mammedov #endif
41