X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=arch_init.c;h=49c5dc27e641ec97b3cd6dd712ce903689d46cab;hb=d551d220c9574b00a318297b8654344e13e0efde;hp=4ef5a15a6e75af8a53167c8d31658270a49a0390;hpb=500f0061d628b52220038939728f0d7aee634468;p=qemu.git diff --git a/arch_init.c b/arch_init.c index 4ef5a15a6..49c5dc27e 100644 --- a/arch_init.c +++ b/arch_init.c @@ -35,20 +35,20 @@ #include "qemu/bitmap.h" #include "sysemu/arch_init.h" #include "audio/audio.h" -#include "hw/pc.h" +#include "hw/i386/pc.h" #include "hw/pci/pci.h" -#include "hw/audiodev.h" +#include "hw/audio/audio.h" #include "sysemu/kvm.h" #include "migration/migration.h" -#include "exec/gdbstub.h" -#include "hw/smbios.h" +#include "hw/i386/smbios.h" #include "exec/address-spaces.h" -#include "hw/pcspk.h" +#include "hw/audio/pcspk.h" #include "migration/page_cache.h" #include "qemu/config-file.h" #include "qmp-commands.h" #include "trace.h" #include "exec/cpu-all.h" +#include "hw/acpi/acpi.h" #ifdef DEBUG_ARCH_INIT #define DPRINTF(fmt, ...) \ @@ -142,7 +142,7 @@ int qemu_read_default_config_files(bool userconfig) return ret; } } - + return 0; } @@ -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 +static struct soundhw soundhw[9]; +static int soundhw_count; -#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 - -#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) { @@ -1103,11 +1034,16 @@ int qemu_uuid_parse(const char *str, uint8_t *uuid) return 0; } -void do_acpitable_option(const char *optarg) +void do_acpitable_option(const QemuOpts *opts) { #ifdef TARGET_I386 - if (acpi_table_add(optarg) < 0) { - fprintf(stderr, "Wrong acpi table provided\n"); + Error *err = NULL; + + acpi_table_add(opts, &err); + if (err) { + fprintf(stderr, "Wrong acpi table provided: %s\n", + error_get_pretty(err)); + error_free(err); exit(1); } #endif @@ -1130,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;