[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 2/9] Introduce machine property "audiodev"
From: |
Paolo Bonzini |
Subject: |
[PATCH 2/9] Introduce machine property "audiodev" |
Date: |
Fri, 22 Sep 2023 11:44:52 +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>
---
audio/audio.c | 4 ++--
hw/core/machine.c | 28 ++++++++++++++++++++++++++++
include/hw/boards.h | 7 +++++++
3 files changed, 37 insertions(+), 2 deletions(-)
diff --git a/audio/audio.c b/audio/audio.c
index 8c74bc6b88c..62047ea3069 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -2194,8 +2194,8 @@ const char *audio_maybe_init_dummy(const char *default_id)
{
MachineState *ms = MACHINE(qdev_get_machine());
- if (ms->default_audiodev) {
- return ms->default_audiodev;
+ if (ms->audiodev) {
+ return ms->audiodev;
}
dolog("warning: No audiodev specified for implicit machine devices, "
diff --git a/hw/core/machine.c b/hw/core/machine.c
index da699cf4e14..f677e96a223 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -682,6 +682,22 @@ 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);
+
+ g_free(ms->audiodev);
+ ms->audiodev = g_strdup(value);
+}
+
HotpluggableCPUList *machine_query_hotpluggable_cpus(MachineState *machine)
{
int i;
@@ -927,6 +943,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);
@@ -1132,6 +1159,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..b5153f5f85b 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,12 @@ struct MachineState {
MemoryRegion *ram;
DeviceMemoryState *device_memory;
+ /*
+ * Included in MachineState for simplicity, but not supported
+ * unless machine_add_audiodev_property is called.
+ */
+ char *audiodev;
+
ram_addr_t ram_size;
ram_addr_t maxram_size;
uint64_t ram_slots;
--
2.41.0
- [PATCH 0/9] audio: make sound cards require the audiodev property, Paolo Bonzini, 2023/09/22
- [PATCH 1/9] audio: Add easy dummy audio initialiser, Paolo Bonzini, 2023/09/22
- [PATCH 3/9] vl: support -audio BACKEND without model, Paolo Bonzini, 2023/09/22
- [PATCH 5/9] hw/ppc: Support machine-default audiodev with fallback, Paolo Bonzini, 2023/09/22
- [PATCH 2/9] Introduce machine property "audiodev",
Paolo Bonzini <=
- [PATCH 4/9] hw/arm: Support machine-default audiodev with fallback, Paolo Bonzini, 2023/09/22
- [PATCH 7/9] vl: recognize audiodev groups in configuration files, Paolo Bonzini, 2023/09/22
- [PATCH 8/9] audio: Make AUD_register_card fallible and require audiodev=, Paolo Bonzini, 2023/09/22
- [PATCH 9/9] audio: Be more strict during audio backend initialisation, Paolo Bonzini, 2023/09/22
- [PATCH 6/9] vt82c686: Support machine-default audiodev with fallback, Paolo Bonzini, 2023/09/22