qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: berrange@redhat.com, balaton@eik.bme.hu,
	Martin Kletzander <mkletzan@redhat.com>
Subject: [PATCH v3 08/14] Introduce machine property "audiodev"
Date: Fri, 29 Sep 2023 10:51:01 +0200	[thread overview]
Message-ID: <20230929085112.983957-9-pbonzini@redhat.com> (raw)
In-Reply-To: <20230929085112.983957-1-pbonzini@redhat.com>

From: Martin Kletzander <mkletzan@redhat.com>

Many machine types have default audio devices with no way to set the underlying
audiodev.  Instead of adding an option for each and every one of them, this new
property can be used as a default during machine initialisation when creating
such devices.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
[Make the property optional, instead of including it in all machines. - Paolo]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 hw/core/machine.c   | 33 +++++++++++++++++++++++++++++++++
 include/hw/boards.h |  9 +++++++++
 2 files changed, 42 insertions(+)

diff --git a/hw/core/machine.c b/hw/core/machine.c
index cb38b8cf4cb..6aa49c8d4f1 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -39,6 +39,7 @@
 #include "hw/virtio/virtio.h"
 #include "hw/virtio/virtio-pci.h"
 #include "hw/virtio/virtio-net.h"
+#include "audio/audio.h"
 
 GlobalProperty hw_compat_8_1[] = {};
 const size_t hw_compat_8_1_len = G_N_ELEMENTS(hw_compat_8_1);
@@ -686,6 +687,26 @@ bool device_type_is_dynamic_sysbus(MachineClass *mc, const char *type)
     return allowed;
 }
 
+static char *machine_get_audiodev(Object *obj, Error **errp)
+{
+    MachineState *ms = MACHINE(obj);
+
+    return g_strdup(ms->audiodev);
+}
+
+static void machine_set_audiodev(Object *obj, const char *value,
+                                 Error **errp)
+{
+    MachineState *ms = MACHINE(obj);
+
+    if (!audio_state_by_name(value, errp)) {
+        return;
+    }
+
+    g_free(ms->audiodev);
+    ms->audiodev = g_strdup(value);
+}
+
 HotpluggableCPUList *machine_query_hotpluggable_cpus(MachineState *machine)
 {
     int i;
@@ -931,6 +952,17 @@ out_free:
     qapi_free_BootConfiguration(config);
 }
 
+void machine_add_audiodev_property(MachineClass *mc)
+{
+    ObjectClass *oc = OBJECT_CLASS(mc);
+
+    object_class_property_add_str(oc, "audiodev",
+                                  machine_get_audiodev,
+                                  machine_set_audiodev);
+    object_class_property_set_description(oc, "audiodev",
+                                          "Audiodev to use for default machine devices");
+}
+
 static void machine_class_init(ObjectClass *oc, void *data)
 {
     MachineClass *mc = MACHINE_CLASS(oc);
@@ -1136,6 +1168,7 @@ static void machine_finalize(Object *obj)
     g_free(ms->device_memory);
     g_free(ms->nvdimms_state);
     g_free(ms->numa_state);
+    g_free(ms->audiodev);
 }
 
 bool machine_usb(MachineState *machine)
diff --git a/include/hw/boards.h b/include/hw/boards.h
index 6c67af196a3..55a64a13fdf 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -24,6 +24,7 @@ OBJECT_DECLARE_TYPE(MachineState, MachineClass, MACHINE)
 
 extern MachineState *current_machine;
 
+void machine_add_audiodev_property(MachineClass *mc);
 void machine_run_board_init(MachineState *machine, const char *mem_path, Error **errp);
 bool machine_usb(MachineState *machine);
 int machine_phandle_start(MachineState *machine);
@@ -358,6 +359,14 @@ struct MachineState {
     MemoryRegion *ram;
     DeviceMemoryState *device_memory;
 
+    /*
+     * Included in MachineState for simplicity, but not supported
+     * unless machine_add_audiodev_property is called.  Boards
+     * that have embedded audio devices can call it from the
+     * machine init function and forward the property to the device.
+     */
+    char *audiodev;
+
     ram_addr_t ram_size;
     ram_addr_t maxram_size;
     uint64_t   ram_slots;
-- 
2.41.0



  parent reply	other threads:[~2023-09-29  8:56 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-29  8:50 [PATCH v3 00/14] Cleanup deprecated audio features, take 2 Paolo Bonzini
2023-09-29  8:50 ` [PATCH v3 01/14] ui/vnc: Require audiodev= to enable audio Paolo Bonzini
2023-09-29  8:50 ` [PATCH v3 02/14] audio: Require AudioState in AUD_add_capture Paolo Bonzini
2023-09-29 11:36   ` BALATON Zoltan
2023-09-29  8:50 ` [PATCH v3 03/14] audio: allow returning an error from the driver init Paolo Bonzini
2023-09-29  8:50 ` [PATCH v3 04/14] audio: return Error ** from audio_state_by_name Paolo Bonzini
2023-09-29  8:50 ` [PATCH v3 05/14] audio: commonize voice initialization Paolo Bonzini
2023-09-29  8:50 ` [PATCH v3 06/14] audio: simplify flow in audio_init Paolo Bonzini
2023-09-29  8:51 ` [PATCH v3 07/14] audio: remove QEMU_AUDIO_* and -audio-help support Paolo Bonzini
2023-09-29  8:51 ` Paolo Bonzini [this message]
2023-10-03 23:36   ` [PATCH v3 08/14] Introduce machine property "audiodev" Bernhard Beschow
2023-09-29  8:51 ` [PATCH v3 09/14] hw/arm: Support machine-default audiodev with fallback Paolo Bonzini
2023-09-29  8:51 ` [PATCH v3 10/14] hw/ppc: " Paolo Bonzini
2023-09-29  8:51 ` [PATCH v3 11/14] vt82c686: " Paolo Bonzini
2023-09-29 11:46   ` BALATON Zoltan
2023-09-29  8:51 ` [PATCH v3 12/14] audio: forbid mixing default audiodev backend and -audiodev Paolo Bonzini
2023-09-29 11:54   ` BALATON Zoltan
2023-09-29 16:37     ` Paolo Bonzini
2023-09-29  8:51 ` [PATCH v3 13/14] audio: forbid default audiodev backend with -nodefaults Paolo Bonzini
2023-09-29  8:51 ` [PATCH v3 14/14] audio: propagate Error out of audio_driver_init Paolo Bonzini

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=20230929085112.983957-9-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=balaton@eik.bme.hu \
    --cc=berrange@redhat.com \
    --cc=mkletzan@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).