diff mbox series

[2/7] audio: add module loading support

Message ID 20180306074053.22856-3-kraxel@redhat.com
State New
Headers show
Series None | expand

Commit Message

Gerd Hoffmann March 6, 2018, 7:40 a.m. UTC
Make audio_driver_lookup() try load the module in case it doesn't find
the driver in the registry.  Also load all modules for -audio-help, so
the help output includes the help text for modular audio drivers.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/qemu/module.h |  1 +
 audio/audio.c         | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+)

Comments

Marc-André Lureau March 6, 2018, 10:59 a.m. UTC | #1
On Tue, Mar 6, 2018 at 8:40 AM, Gerd Hoffmann <kraxel@redhat.com> wrote:
> Make audio_driver_lookup() try load the module in case it doesn't find
> the driver in the registry.  Also load all modules for -audio-help, so
> the help output includes the help text for modular audio drivers.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>


> ---
>  include/qemu/module.h |  1 +
>  audio/audio.c         | 20 ++++++++++++++++++++
>  2 files changed, 21 insertions(+)
>
> diff --git a/include/qemu/module.h b/include/qemu/module.h
> index 9fea75aaeb..54300ab6e5 100644
> --- a/include/qemu/module.h
> +++ b/include/qemu/module.h
> @@ -54,6 +54,7 @@ typedef enum {
>
>  #define block_module_load_one(lib) module_load_one("block-", lib)
>  #define ui_module_load_one(lib) module_load_one("ui-", lib)
> +#define audio_module_load_one(lib) module_load_one("audio-", lib)
>
>  void register_module_init(void (*fn)(void), module_init_type type);
>  void register_dso_module_init(void (*fn)(void), module_init_type type);
> diff --git a/audio/audio.c b/audio/audio.c
> index 2384612b87..6eccdb17ee 100644
> --- a/audio/audio.c
> +++ b/audio/audio.c
> @@ -68,9 +68,26 @@ audio_driver *audio_driver_lookup(const char *name)
>              return d;
>          }
>      }
> +
> +    audio_module_load_one(name);
> +    QLIST_FOREACH(d, &audio_drivers, next) {
> +        if (strcmp(name, d->name) == 0) {
> +            return d;
> +        }
> +    }
> +
>      return NULL;
>  }
>
> +static void audio_module_load_all(void)
> +{
> +    int i;
> +
> +    for (i = 0; i < ARRAY_SIZE(audio_prio_list); i++) {
> +        audio_driver_lookup(audio_prio_list[i]);
> +    }
> +}
> +
>  struct fixed_settings {
>      int enabled;
>      int nb_voices;
> @@ -1675,6 +1692,9 @@ void AUD_help (void)
>  {
>      struct audio_driver *d;
>
> +    /* make sure we print the help text for modular drivers too */
> +    audio_module_load_all();
> +
>      audio_process_options ("AUDIO", audio_options);
>      QLIST_FOREACH(d, &audio_drivers, next) {
>          if (d->options) {
> --
> 2.9.3
>
>
diff mbox series

Patch

diff --git a/include/qemu/module.h b/include/qemu/module.h
index 9fea75aaeb..54300ab6e5 100644
--- a/include/qemu/module.h
+++ b/include/qemu/module.h
@@ -54,6 +54,7 @@  typedef enum {
 
 #define block_module_load_one(lib) module_load_one("block-", lib)
 #define ui_module_load_one(lib) module_load_one("ui-", lib)
+#define audio_module_load_one(lib) module_load_one("audio-", lib)
 
 void register_module_init(void (*fn)(void), module_init_type type);
 void register_dso_module_init(void (*fn)(void), module_init_type type);
diff --git a/audio/audio.c b/audio/audio.c
index 2384612b87..6eccdb17ee 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -68,9 +68,26 @@  audio_driver *audio_driver_lookup(const char *name)
             return d;
         }
     }
+
+    audio_module_load_one(name);
+    QLIST_FOREACH(d, &audio_drivers, next) {
+        if (strcmp(name, d->name) == 0) {
+            return d;
+        }
+    }
+
     return NULL;
 }
 
+static void audio_module_load_all(void)
+{
+    int i;
+
+    for (i = 0; i < ARRAY_SIZE(audio_prio_list); i++) {
+        audio_driver_lookup(audio_prio_list[i]);
+    }
+}
+
 struct fixed_settings {
     int enabled;
     int nb_voices;
@@ -1675,6 +1692,9 @@  void AUD_help (void)
 {
     struct audio_driver *d;
 
+    /* make sure we print the help text for modular drivers too */
+    audio_module_load_all();
+
     audio_process_options ("AUDIO", audio_options);
     QLIST_FOREACH(d, &audio_drivers, next) {
         if (d->options) {