X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=arch_init.c;h=49c5dc27e641ec97b3cd6dd712ce903689d46cab;hb=4458c23672904fa131e69897007eeb7c953be7e5;hp=92de1bde495dea2c7ee3c5e5c433618b7060559e;hpb=0bc3cd624f1d59456cad769bb07e84066a2ddaf9;p=qemu.git diff --git a/arch_init.c b/arch_init.c index 92de1bde4..49c5dc27e 100644 --- a/arch_init.c +++ b/arch_init.c @@ -887,7 +887,6 @@ SaveVMHandlers savevm_ram_handlers = { .cancel = ram_migration_cancel, }; -#ifdef HAS_AUDIO struct soundhw { const char *name; const char *descr; @@ -899,96 +898,30 @@ struct soundhw { } init; }; -static struct soundhw soundhw[] = { -#ifdef HAS_AUDIO_CHOICE -#ifdef CONFIG_PCSPK - { - "pcspk", - "PC speaker", - 0, - 1, - { .init_isa = pcspk_audio_init } - }, -#endif - -#ifdef CONFIG_SB16 - { - "sb16", - "Creative Sound Blaster 16", - 0, - 1, - { .init_isa = SB16_init } - }, -#endif - -#ifdef CONFIG_CS4231A - { - "cs4231a", - "CS4231A", - 0, - 1, - { .init_isa = cs4231a_init } - }, -#endif - -#ifdef CONFIG_ADLIB - { - "adlib", -#ifdef HAS_YMF262 - "Yamaha YMF262 (OPL3)", -#else - "Yamaha YM3812 (OPL2)", -#endif - 0, - 1, - { .init_isa = Adlib_init } - }, -#endif - -#ifdef CONFIG_GUS - { - "gus", - "Gravis Ultrasound GF1", - 0, - 1, - { .init_isa = GUS_init } - }, -#endif - -#ifdef CONFIG_AC97 - { - "ac97", - "Intel 82801AA AC97 Audio", - 0, - 0, - { .init_pci = ac97_init } - }, -#endif - -#ifdef CONFIG_ES1370 - { - "es1370", - "ENSONIQ AudioPCI ES1370", - 0, - 0, - { .init_pci = es1370_init } - }, -#endif +static struct soundhw soundhw[9]; +static int soundhw_count; -#ifdef CONFIG_HDA - { - "hda", - "Intel HD Audio", - 0, - 0, - { .init_pci = intel_hda_and_codec_init } - }, -#endif - -#endif /* HAS_AUDIO_CHOICE */ +void isa_register_soundhw(const char *name, const char *descr, + int (*init_isa)(ISABus *bus)) +{ + assert(soundhw_count < ARRAY_SIZE(soundhw) - 1); + soundhw[soundhw_count].name = name; + soundhw[soundhw_count].descr = descr; + soundhw[soundhw_count].isa = 1; + soundhw[soundhw_count].init.init_isa = init_isa; + soundhw_count++; +} - { NULL, NULL, 0, 0, { NULL } } -}; +void pci_register_soundhw(const char *name, const char *descr, + int (*init_pci)(PCIBus *bus)) +{ + assert(soundhw_count < ARRAY_SIZE(soundhw) - 1); + soundhw[soundhw_count].name = name; + soundhw[soundhw_count].descr = descr; + soundhw[soundhw_count].isa = 0; + soundhw[soundhw_count].init.init_pci = init_pci; + soundhw_count++; +} void select_soundhw(const char *optarg) { @@ -997,16 +930,16 @@ void select_soundhw(const char *optarg) if (is_help_option(optarg)) { show_valid_cards: -#ifdef HAS_AUDIO_CHOICE - printf("Valid sound card names (comma separated):\n"); - for (c = soundhw; c->name; ++c) { - printf ("%-11s %s\n", c->name, c->descr); + if (soundhw_count) { + printf("Valid sound card names (comma separated):\n"); + for (c = soundhw; c->name; ++c) { + printf ("%-11s %s\n", c->name, c->descr); + } + printf("\n-soundhw all will enable all of the above\n"); + } else { + printf("Machine has no user-selectable audio hardware " + "(it may or may not have always-present audio hardware).\n"); } - printf("\n-soundhw all will enable all of the above\n"); -#else - printf("Machine has no user-selectable audio hardware " - "(it may or may not have always-present audio hardware).\n"); -#endif exit(!is_help_option(optarg)); } else { @@ -1054,32 +987,30 @@ void select_soundhw(const char *optarg) } } -void audio_init(ISABus *isa_bus, PCIBus *pci_bus) +void audio_init(void) { struct soundhw *c; + ISABus *isa_bus = (ISABus *) object_resolve_path_type("", TYPE_ISA_BUS, NULL); + PCIBus *pci_bus = (PCIBus *) object_resolve_path_type("", TYPE_PCI_BUS, NULL); for (c = soundhw; c->name; ++c) { if (c->enabled) { if (c->isa) { - if (isa_bus) { - c->init.init_isa(isa_bus); + if (!isa_bus) { + fprintf(stderr, "ISA bus not available for %s\n", c->name); + exit(1); } + c->init.init_isa(isa_bus); } else { - if (pci_bus) { - c->init.init_pci(pci_bus); + if (!pci_bus) { + fprintf(stderr, "PCI bus not available for %s\n", c->name); + exit(1); } + c->init.init_pci(pci_bus); } } } } -#else -void select_soundhw(const char *optarg) -{ -} -void audio_init(ISABus *isa_bus, PCIBus *pci_bus) -{ -} -#endif int qemu_uuid_parse(const char *str, uint8_t *uuid) { @@ -1135,15 +1066,6 @@ void cpudef_init(void) #endif } -int audio_available(void) -{ -#ifdef HAS_AUDIO - return 1; -#else - return 0; -#endif -} - int tcg_available(void) { return 1;