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