qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: qemu-devel@nongnu.org
Cc: mst@redhat.com, Gerd Hoffmann <kraxel@redhat.com>
Subject: [PATCH v2 01/35] acpi: add interface to build device specific AML
Date: Wed,  8 Jun 2022 09:53:06 -0400	[thread overview]
Message-ID: <20220608135340.3304695-2-imammedo@redhat.com> (raw)
In-Reply-To: <20220608135340.3304695-1-imammedo@redhat.com>

There is already ISADeviceClass::build_aml() callback which
builds device specific AML blob for some ISA devices.
To extend the same idea to other devices, add TYPE_ACPI_DEV_AML_IF
Interface that will provide a more generic callback which
will be used not only for ISA but other devices. It will
allow get rid of some data-mining and ad-hoc AML building,
by asking device(s) to generate its own AML blob like it's
done for ISA devices.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/hw/acpi/acpi_aml_interface.h | 40 ++++++++++++++++++++++++++++
 hw/acpi/acpi_interface.c             |  8 ++++++
 hw/acpi/meson.build                  |  2 +-
 3 files changed, 49 insertions(+), 1 deletion(-)
 create mode 100644 include/hw/acpi/acpi_aml_interface.h

diff --git a/include/hw/acpi/acpi_aml_interface.h b/include/hw/acpi/acpi_aml_interface.h
new file mode 100644
index 0000000000..ab76f0e55d
--- /dev/null
+++ b/include/hw/acpi/acpi_aml_interface.h
@@ -0,0 +1,40 @@
+#ifndef ACPI_AML_INTERFACE_H
+#define ACPI_AML_INTERFACE_H
+
+#include "qom/object.h"
+#include "hw/acpi/aml-build.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 void call_dev_aml_func(DeviceState *dev, Aml *scope)
+{
+    if (object_dynamic_cast(OBJECT(dev), TYPE_ACPI_DEV_AML_IF)) {
+        AcpiDevAmlIfClass *klass = ACPI_DEV_AML_IF_GET_CLASS(dev);
+        klass->build_dev_aml(ACPI_DEV_AML_IF(dev), scope);
+    }
+}
+
+#endif
diff --git a/hw/acpi/acpi_interface.c b/hw/acpi/acpi_interface.c
index 6583917b8e..c668d361f6 100644
--- a/hw/acpi/acpi_interface.c
+++ b/hw/acpi/acpi_interface.c
@@ -1,5 +1,6 @@
 #include "qemu/osdep.h"
 #include "hw/acpi/acpi_dev_interface.h"
+#include "hw/acpi/acpi_aml_interface.h"
 #include "qemu/module.h"
 
 void acpi_send_event(DeviceState *dev, AcpiEventStatusBits event)
@@ -18,8 +19,15 @@ static void register_types(void)
         .parent        = TYPE_INTERFACE,
         .class_size = sizeof(AcpiDeviceIfClass),
     };
+    static const TypeInfo acpi_dev_aml_if_info = {
+        .name          = TYPE_ACPI_DEV_AML_IF,
+        .parent        = TYPE_INTERFACE,
+        .class_size = sizeof(AcpiDevAmlIfClass),
+    };
+
 
     type_register_static(&acpi_dev_if_info);
+    type_register_static(&acpi_dev_aml_if_info);
 }
 
 type_init(register_types)
diff --git a/hw/acpi/meson.build b/hw/acpi/meson.build
index cea2f5f93a..f8c820ca94 100644
--- a/hw/acpi/meson.build
+++ b/hw/acpi/meson.build
@@ -29,7 +29,7 @@ acpi_ss.add(when: 'CONFIG_PC', if_false: files('acpi-x86-stub.c'))
 if have_tpm
   acpi_ss.add(files('tpm.c'))
 endif
-softmmu_ss.add(when: 'CONFIG_ACPI', if_false: files('acpi-stub.c', 'aml-build-stub.c', 'ghes-stub.c'))
+softmmu_ss.add(when: 'CONFIG_ACPI', if_false: files('acpi-stub.c', 'aml-build-stub.c', 'ghes-stub.c', 'acpi_interface.c'))
 softmmu_ss.add_all(when: 'CONFIG_ACPI', if_true: acpi_ss)
 softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('acpi-stub.c', 'aml-build-stub.c',
                                                   'acpi-x86-stub.c', 'ipmi-stub.c', 'ghes-stub.c',
-- 
2.31.1



  reply	other threads:[~2022-06-08 13:55 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-08 13:53 [PATCH v2 00/35] pc/q35: refactor ISA and SMBUS AML generation Igor Mammedov
2022-06-08 13:53 ` Igor Mammedov [this message]
2022-06-08 13:53 ` [PATCH v2 02/35] acpi: make isa_build_aml() support AcpiDevAmlIf interface Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 03/35] acpi: fdc-isa: replace ISADeviceClass::build_aml with AcpiDevAmlIfClass:build_dev_aml Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 04/35] acpi: parallel port: " Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 05/35] acpi: serial-is: " Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 06/35] acpi: mc146818rtc: " Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 07/35] acpi: pckbd: " Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 08/35] isa-bus: drop no longer used ISADeviceClass::build_aml Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 09/35] tests: acpi: add and whitelist DSDT.ipmismbus expected blob Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 10/35] tests: acpi: q35: add test for smbus-ipmi device Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 11/35] tests: acpi: update expected blob DSDT.ipmismbus Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 12/35] tests: acpi: whitelist DSDT.ipmismbus expected blob Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 13/35] ipmi: acpi: use relative path to resource source Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 14/35] tests: acpi: update expected DSDT.ipmismbus blob Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 15/35] acpi: ich9-smb: add support for AcpiDevAmlIf interface Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 16/35] acpi: ipmi: use AcpiDevAmlIf interface to build IPMI device descriptors Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 17/35] q35: acpi: drop not needed PCMachineClass::do_not_add_smb_acpi Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 18/35] tests: acpi: white-list to be re-factored pc/q35 DSDT Igor Mammedov
2022-06-09 11:48   ` [PATCH v3 " Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 19/35] acpi: pc: isa bridge: use AcpiDevAmlIf interface to build ISA device descriptors Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 20/35] acpi: q35: " Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 21/35] tests: acpi: update expected blobs Igor Mammedov
2022-06-09 11:51   ` [PATCH v3 " Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 22/35] tests: acpi: add and white-list DSDT.applesmc expected blob Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 23/35] tests: acpi: add applesmc testcase Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 24/35] acpi: applesmc: use AcpiDevAmlIfClass:build_dev_aml to provide device's AML Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 25/35] tests: acpi: update expected blobs Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 26/35] tests: acpi: white-lists expected DSDT.pvpanic-isa blob Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 27/35] tests: acpi: add pvpanic-isa: testcase Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 28/35] acpi: pvpanic-isa: use AcpiDevAmlIfClass:build_dev_aml to provide device's AML Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 29/35] tests: acpi: update expected DSDT.pvpanic-isa blob Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 30/35] tests: acpi: white-list DSDT.tis.tpm2/DSDT.tis.tpm12 expected blobs Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 31/35] acpi: pc/q35: tpm-tis: fix TPM device scope Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 32/35] acpi: pc/q35: remove not needed 'if' condition on pci bus Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 33/35] acpi: tpm-tis: use AcpiDevAmlIfClass:build_dev_aml to provide device's AML Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 34/35] tests: acpi: update expected DSDT.tis.tpm2/DSDT.tis.tpm12 blobs Igor Mammedov
2022-06-08 13:53 ` [PATCH v2 35/35] x86: acpi-build: do not include hw/isa/isa.h directly Igor Mammedov
2022-06-09  9:30 ` [PATCH v2 00/35] pc/q35: refactor ISA and SMBUS AML generation Igor Mammedov
2022-06-09 11:55   ` Igor Mammedov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220608135340.3304695-2-imammedo@redhat.com \
    --to=imammedo@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).