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