@samitouri / QOSamiQemu / commits / bc52c58c25

audio: remove audio_driver init/fini/next

They are no longer used after conversion to QOM. Also removing the drv_opaque from a few of the pcm_ops methods. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp> Reviewed-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>

Marc-André Lureau committed Jan 16, 2026 at 19:32 UTC bc52c58c25ef9075ee88b740f5a84daeba136757
16 files changed +28 -56
audio/alsaaudio.c
+2 -3
@@ -692,8 +692,7 @@ static void alsa_fini_out (HWVoiceOut *hw)
692 alsa_anal_close (&alsa->handle, &alsa->pollhlp);
693 }
694
695 -static int alsa_init_out(HWVoiceOut *hw, struct audsettings *as,
696 - void *drv_opaque)
695 +static int alsa_init_out(HWVoiceOut *hw, struct audsettings *as)
696 {
697 ALSAVoiceOut *alsa = (ALSAVoiceOut *) hw;
698 struct alsa_params_req req;
@@ -779,7 +778,7 @@ static void alsa_enable_out(HWVoiceOut *hw, bool enable)
778 }
779 }
780
782 -static int alsa_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
781 +static int alsa_init_in(HWVoiceIn *hw, struct audsettings *as)
782 {
783 ALSAVoiceIn *alsa = (ALSAVoiceIn *) hw;
784 struct alsa_params_req req;
audio/audio-mixeng-be.c
+1 -14
@@ -1521,13 +1521,6 @@ static bool audio_mixeng_backend_realize(AudioBackend *abe,
1521 audio_driver *drv = AUDIO_MIXENG_BACKEND_GET_CLASS(be)->driver;
1522
1523 be->dev = dev;
1524 - if (drv->init != NULL) {
1525 - be->drv_opaque = drv->init(be->dev, errp);
1526 - if (!be->drv_opaque) {
1527 - return false;
1528 - }
1529 - }
1530 -
1524 if (!drv->pcm_ops->get_buffer_in) {
1525 drv->pcm_ops->get_buffer_in = audio_generic_get_buffer_in;
1526 drv->pcm_ops->put_buffer_in = audio_generic_put_buffer_in;
@@ -1665,13 +1658,7 @@ static void audio_mixeng_backend_finalize(Object *obj)
1658 QLIST_REMOVE(hwi, entries);
1659 }
1660
1668 - if (s->drv) {
1669 - if (s->drv->fini) {
1670 - s->drv->fini (s->drv_opaque);
1671 - }
1672 - s->drv = NULL;
1673 - }
1674 -
1661 + s->drv = NULL;
1662 if (s->dev) {
1663 qapi_free_Audiodev(s->dev);
1664 s->dev = NULL;
audio/audio_int.h
+2 -6
@@ -139,18 +139,15 @@ struct SWVoiceIn {
139 typedef struct audio_driver audio_driver;
140 struct audio_driver {
141 const char *name;
142 - void *(*init) (Audiodev *, Error **);
143 - void (*fini) (void *);
142 struct audio_pcm_ops *pcm_ops;
143 int max_voices_out;
144 int max_voices_in;
145 size_t voice_size_out;
146 size_t voice_size_in;
149 - QLIST_ENTRY(audio_driver) next;
147 };
148
149 struct audio_pcm_ops {
153 - int (*init_out)(HWVoiceOut *hw, audsettings *as, void *drv_opaque);
150 + int (*init_out)(HWVoiceOut *hw, audsettings *as);
151 void (*fini_out)(HWVoiceOut *hw);
152 size_t (*write) (HWVoiceOut *hw, void *buf, size_t size);
153 void (*run_buffer_out)(HWVoiceOut *hw);
@@ -173,7 +170,7 @@ struct audio_pcm_ops {
170 void (*enable_out)(HWVoiceOut *hw, bool enable);
171 void (*volume_out)(HWVoiceOut *hw, Volume *vol);
172
176 - int (*init_in) (HWVoiceIn *hw, audsettings *as, void *drv_opaque);
173 + int (*init_in) (HWVoiceIn *hw, audsettings *as);
174 void (*fini_in) (HWVoiceIn *hw);
175 size_t (*read) (HWVoiceIn *hw, void *buf, size_t size);
176 void (*run_buffer_in)(HWVoiceIn *hw);
@@ -240,7 +237,6 @@ struct AudioMixengBackend {
237
238 struct audio_driver *drv;
239 Audiodev *dev;
243 - void *drv_opaque;
240
241 QEMUTimer *ts;
242 QLIST_HEAD (hw_in_listhead, HWVoiceIn) hw_head_in;
audio/audio_template.h
+1 -1
@@ -295,7 +295,7 @@ static HW *glue(audio_pcm_hw_add_new_, TYPE)(AudioMixengBackend *s,
295 #ifdef DAC
296 QLIST_INIT (&hw->cap_head);
297 #endif
298 - if (glue (hw->pcm_ops->init_, TYPE) (hw, as, s->drv_opaque)) {
298 + if (glue (hw->pcm_ops->init_, TYPE) (hw, as)) {
299 goto err0;
300 }
301
audio/coreaudio.m
+1 -2
@@ -573,8 +573,7 @@ static OSStatus handle_voice_change(
573 return 0;
574 }
575
576 -static int coreaudio_init_out(HWVoiceOut *hw, struct audsettings *as,
577 - void *drv_opaque)
576 +static int coreaudio_init_out(HWVoiceOut *hw, struct audsettings *as)
577 {
578 OSStatus status;
579 coreaudioVoiceOut *core = (coreaudioVoiceOut *) hw;
audio/dbusaudio.c
+2 -2
@@ -173,7 +173,7 @@ dbus_audio_get_nsamples(AudioDbus *da)
173 }
174
175 static int
176 -dbus_init_out(HWVoiceOut *hw, struct audsettings *as, void *drv_opaque)
176 +dbus_init_out(HWVoiceOut *hw, struct audsettings *as)
177 {
178 AudioDbus *da = AUDIO_DBUS(hw->s);
179 DBusVoiceOut *vo = container_of(hw, DBusVoiceOut, hw);
@@ -287,7 +287,7 @@ dbus_init_in_listener(QemuDBusDisplay1AudioInListener *listener, HWVoiceIn *hw)
287 }
288
289 static int
290 -dbus_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
290 +dbus_init_in(HWVoiceIn *hw, struct audsettings *as)
291 {
292 AudioDbus *da = AUDIO_DBUS(hw->s);
293 DBusVoiceIn *vo = container_of(hw, DBusVoiceIn, hw);
audio/dsound_template.h
+2 -4
@@ -157,11 +157,9 @@ static void dsound_fini_out (HWVoiceOut *hw)
157 }
158
159 #ifdef DSBTYPE_IN
160 -static int dsound_init_in(HWVoiceIn *hw, struct audsettings *as,
161 - void *drv_opaque)
160 +static int dsound_init_in(HWVoiceIn *hw, struct audsettings *as)
161 #else
163 -static int dsound_init_out(HWVoiceOut *hw, struct audsettings *as,
164 - void *drv_opaque)
162 +static int dsound_init_out(HWVoiceOut *hw, struct audsettings *as)
163 #endif
164 {
165 int err;
audio/jackaudio.c
+2 -4
@@ -507,8 +507,7 @@ static int qjack_client_init(QJackClient *c)
507 return 0;
508 }
509
510 -static int qjack_init_out(HWVoiceOut *hw, struct audsettings *as,
511 - void *drv_opaque)
510 +static int qjack_init_out(HWVoiceOut *hw, struct audsettings *as)
511 {
512 QJackOut *jo = (QJackOut *)hw;
513 Audiodev *dev = hw->s->dev;
@@ -544,8 +543,7 @@ static int qjack_init_out(HWVoiceOut *hw, struct audsettings *as,
543 return 0;
544 }
545
547 -static int qjack_init_in(HWVoiceIn *hw, struct audsettings *as,
548 - void *drv_opaque)
546 +static int qjack_init_in(HWVoiceIn *hw, struct audsettings *as)
547 {
548 QJackIn *ji = (QJackIn *)hw;
549 Audiodev *dev = hw->s->dev;
audio/noaudio.c
+2 -2
@@ -62,7 +62,7 @@ static size_t no_write(HWVoiceOut *hw, void *buf, size_t len)
62 return audio_rate_get_bytes(&no->rate, &hw->info, len);
63 }
64
65 -static int no_init_out(HWVoiceOut *hw, struct audsettings *as, void *drv_opaque)
65 +static int no_init_out(HWVoiceOut *hw, struct audsettings *as)
66 {
67 NoVoiceOut *no = (NoVoiceOut *) hw;
68
@@ -86,7 +86,7 @@ static void no_enable_out(HWVoiceOut *hw, bool enable)
86 }
87 }
88
89 -static int no_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
89 +static int no_init_in(HWVoiceIn *hw, struct audsettings *as)
90 {
91 NoVoiceIn *no = (NoVoiceIn *) hw;
92
audio/ossaudio.c
+2 -3
@@ -493,8 +493,7 @@ static void oss_fini_out (HWVoiceOut *hw)
493 }
494 }
495
496 -static int oss_init_out(HWVoiceOut *hw, struct audsettings *as,
497 - void *drv_opaque)
496 +static int oss_init_out(HWVoiceOut *hw, struct audsettings *as)
497 {
498 OSSVoiceOut *oss = (OSSVoiceOut *) hw;
499 struct oss_params req, obt;
@@ -625,7 +624,7 @@ static void oss_enable_out(HWVoiceOut *hw, bool enable)
624 }
625 }
626
628 -static int oss_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
627 +static int oss_init_in(HWVoiceIn *hw, struct audsettings *as)
628 {
629 OSSVoiceIn *oss = (OSSVoiceIn *) hw;
630 struct oss_params req, obt;
audio/paaudio.c
+2 -3
@@ -518,8 +518,7 @@ fail:
518 return NULL;
519 }
520
521 -static int qpa_init_out(HWVoiceOut *hw, struct audsettings *as,
522 - void *drv_opaque)
521 +static int qpa_init_out(HWVoiceOut *hw, struct audsettings *as)
522 {
523 AudioMixengBackend *amb = hw->s;
524 AudioPa *apa = AUDIO_PA(amb);
@@ -570,7 +569,7 @@ static int qpa_init_out(HWVoiceOut *hw, struct audsettings *as,
569 return -1;
570 }
571
573 -static int qpa_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
572 +static int qpa_init_in(HWVoiceIn *hw, struct audsettings *as)
573 {
574 AudioMixengBackend *amb = hw->s;
575 AudioPa *apa = AUDIO_PA(amb);
audio/pwaudio.c
+2 -2
@@ -524,7 +524,7 @@ qpw_set_position(uint32_t channels, uint32_t position[SPA_AUDIO_MAX_CHANNELS])
524 }
525
526 static int
527 -qpw_init_out(HWVoiceOut *hw, struct audsettings *as, void *drv_opaque)
527 +qpw_init_out(HWVoiceOut *hw, struct audsettings *as)
528 {
529 AudioPw *c = AUDIO_PW(hw->s);
530 PWVoiceOut *pw = (PWVoiceOut *) hw;
@@ -571,7 +571,7 @@ qpw_init_out(HWVoiceOut *hw, struct audsettings *as, void *drv_opaque)
571 }
572
573 static int
574 -qpw_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
574 +qpw_init_in(HWVoiceIn *hw, struct audsettings *as)
575 {
576 AudioPw *c = AUDIO_PW(hw->s);
577 PWVoiceIn *pw = (PWVoiceIn *) hw;
audio/sdlaudio.c
+2 -3
@@ -345,8 +345,7 @@ static void sdl_fini_out(HWVoiceOut *hw)
345 sdl_close_out(sdl);
346 }
347
348 -static int sdl_init_out(HWVoiceOut *hw, struct audsettings *as,
349 - void *drv_opaque)
348 +static int sdl_init_out(HWVoiceOut *hw, struct audsettings *as)
349 {
350 SDLVoiceOut *sdl = (SDLVoiceOut *)hw;
351 SDL_AudioSpec req, obt;
@@ -402,7 +401,7 @@ static void sdl_fini_in(HWVoiceIn *hw)
401 sdl_close_in(sdl);
402 }
403
405 -static int sdl_init_in(HWVoiceIn *hw, audsettings *as, void *drv_opaque)
404 +static int sdl_init_in(HWVoiceIn *hw, audsettings *as)
405 {
406 SDLVoiceIn *sdl = (SDLVoiceIn *)hw;
407 SDL_AudioSpec req, obt;
audio/sndioaudio.c
+2 -2
@@ -495,7 +495,7 @@ static void sndio_enable_in(HWVoiceIn *hw, bool enable)
495 sndio_enable(self, enable);
496 }
497
498 -static int sndio_init_out(HWVoiceOut *hw, struct audsettings *as, void *opaque)
498 +static int sndio_init_out(HWVoiceOut *hw, struct audsettings *as)
499 {
500 SndioVoice *self = (SndioVoice *) hw;
501
@@ -508,7 +508,7 @@ static int sndio_init_out(HWVoiceOut *hw, struct audsettings *as, void *opaque)
508 return 0;
509 }
510
511 -static int sndio_init_in(HWVoiceIn *hw, struct audsettings *as, void *opaque)
511 +static int sndio_init_in(HWVoiceIn *hw, struct audsettings *as)
512 {
513 SndioVoice *self = (SndioVoice *) hw;
514
audio/spiceaudio.c
+2 -3
@@ -108,8 +108,7 @@ static const SpiceRecordInterface record_sif = {
108
109 /* playback */
110
111 -static int line_out_init(HWVoiceOut *hw, struct audsettings *as,
112 - void *drv_opaque)
111 +static int line_out_init(HWVoiceOut *hw, struct audsettings *as)
112 {
113 SpiceVoiceOut *out = container_of (hw, SpiceVoiceOut, hw);
114 struct audsettings settings;
@@ -225,7 +224,7 @@ static void line_out_volume(HWVoiceOut *hw, Volume *vol)
224
225 /* record */
226
228 -static int line_in_init(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
227 +static int line_in_init(HWVoiceIn *hw, struct audsettings *as)
228 {
229 SpiceVoiceIn *in = container_of (hw, SpiceVoiceIn, hw);
230 struct audsettings settings;
audio/wavaudio.c
+1 -2
@@ -78,8 +78,7 @@ static void le_store (uint8_t *buf, uint32_t val, int len)
78 }
79 }
80
81 -static int wav_init_out(HWVoiceOut *hw, struct audsettings *as,
82 - void *drv_opaque)
81 +static int wav_init_out(HWVoiceOut *hw, struct audsettings *as)
82 {
83 WAVVoiceOut *wav = (WAVVoiceOut *) hw;
84 int bits16 = 0, stereo = 0;