[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 19/24] Introduce machine property "audiodev"
|
From: |
Paolo Bonzini |
|
Subject: |
[PULL 19/24] Introduce machine property "audiodev" |
|
Date: |
Tue, 3 Oct 2023 10:30:36 +0200 |
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
- [PULL 03/24] e1000: remove old compatibility code, (continued)
- [PULL 03/24] e1000: remove old compatibility code, Paolo Bonzini, 2023/10/03
- [PULL 07/24] Makefile: build plugins before running TCG tests, Paolo Bonzini, 2023/10/03
- [PULL 11/24] crypto: only include tls-cipher-suites in emulators, Paolo Bonzini, 2023/10/03
- [PULL 12/24] ui/vnc: Require audiodev= to enable audio, Paolo Bonzini, 2023/10/03
- [PULL 05/24] make-release: do not ship dtc sources, Paolo Bonzini, 2023/10/03
- [PULL 10/24] scsi-disk: ensure that FORMAT UNIT commands are terminated, Paolo Bonzini, 2023/10/03
- [PULL 21/24] hw/ppc: Support machine-default audiodev with fallback, Paolo Bonzini, 2023/10/03
- [PULL 08/24] esp: use correct type for esp_dma_enable() in sysbus_esp_gpio_demux(), Paolo Bonzini, 2023/10/03
- [PULL 15/24] audio: return Error ** from audio_state_by_name, Paolo Bonzini, 2023/10/03
- [PULL 16/24] audio: commonize voice initialization, Paolo Bonzini, 2023/10/03
- [PULL 19/24] Introduce machine property "audiodev",
Paolo Bonzini <=
- [PULL 17/24] audio: simplify flow in audio_init, Paolo Bonzini, 2023/10/03
- [PULL 04/24] pc: remove short_root_bus property, Paolo Bonzini, 2023/10/03
- [PULL 22/24] vt82c686 machines: Support machine-default audiodev with fallback, Paolo Bonzini, 2023/10/03
- [PULL 20/24] hw/arm: Support machine-default audiodev with fallback, Paolo Bonzini, 2023/10/03
- [PULL 13/24] audio: Require AudioState in AUD_add_capture, Paolo Bonzini, 2023/10/03
- [PULL 14/24] audio: allow returning an error from the driver init, Paolo Bonzini, 2023/10/03
- [PULL 18/24] audio: remove QEMU_AUDIO_* and -audio-help support, Paolo Bonzini, 2023/10/03
- [PULL 24/24] audio: forbid default audiodev backend with -nodefaults, Paolo Bonzini, 2023/10/03
- [PULL 09/24] esp: restrict non-DMA transfer length to that of available data, Paolo Bonzini, 2023/10/03
- [PULL 23/24] audio: propagate Error * out of audio_init, Paolo Bonzini, 2023/10/03