Commit 6a36d84e1024ce41860751b449727f4ddca91aa2
1 parent
3f9f3aa1
suppressed -enable-audio and simplified -soundhw option handling (malc)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1725 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
115 additions
and
77 deletions
hw/pc.c
| ... | ... | @@ -574,6 +574,38 @@ static int serial_irq[MAX_SERIAL_PORTS] = { 4, 3, 4, 3 }; |
| 574 | 574 | static int parallel_io[MAX_PARALLEL_PORTS] = { 0x378, 0x278, 0x3bc }; |
| 575 | 575 | static int parallel_irq[MAX_PARALLEL_PORTS] = { 7, 7, 7 }; |
| 576 | 576 | |
| 577 | +#ifdef HAS_AUDIO | |
| 578 | +static void audio_init (PCIBus *pci_bus) | |
| 579 | +{ | |
| 580 | + struct soundhw *c; | |
| 581 | + int audio_enabled = 0; | |
| 582 | + | |
| 583 | + for (c = soundhw; !audio_enabled && c->name; ++c) { | |
| 584 | + audio_enabled = c->enabled; | |
| 585 | + } | |
| 586 | + | |
| 587 | + if (audio_enabled) { | |
| 588 | + AudioState *s; | |
| 589 | + | |
| 590 | + s = AUD_init (); | |
| 591 | + if (s) { | |
| 592 | + for (c = soundhw; c->name; ++c) { | |
| 593 | + if (c->enabled) { | |
| 594 | + if (c->isa) { | |
| 595 | + c->init.init_isa (s); | |
| 596 | + } | |
| 597 | + else { | |
| 598 | + if (pci_bus) { | |
| 599 | + c->init.init_pci (pci_bus, s); | |
| 600 | + } | |
| 601 | + } | |
| 602 | + } | |
| 603 | + } | |
| 604 | + } | |
| 605 | + } | |
| 606 | +} | |
| 607 | +#endif | |
| 608 | + | |
| 577 | 609 | /* PC hardware initialisation */ |
| 578 | 610 | static void pc_init1(int ram_size, int vga_ram_size, int boot_device, |
| 579 | 611 | DisplayState *ds, const char **fd_filename, int snapshot, |
| ... | ... | @@ -789,26 +821,9 @@ static void pc_init1(int ram_size, int vga_ram_size, int boot_device, |
| 789 | 821 | |
| 790 | 822 | kbd_init(); |
| 791 | 823 | DMA_init(0); |
| 792 | - | |
| 793 | - if (audio_enabled) { | |
| 794 | - AudioState *audio; | |
| 795 | - | |
| 796 | - audio = AUD_init(); | |
| 797 | - if (audio) { | |
| 798 | - if (sb16_enabled) | |
| 799 | - SB16_init (audio); | |
| 800 | -#ifdef CONFIG_ADLIB | |
| 801 | - if (adlib_enabled) | |
| 802 | - Adlib_init (audio); | |
| 803 | -#endif | |
| 804 | -#ifdef CONFIG_GUS | |
| 805 | - if (gus_enabled) | |
| 806 | - GUS_init (audio); | |
| 824 | +#ifdef HAS_AUDIO | |
| 825 | + audio_init(pci_enabled ? pci_bus : NULL); | |
| 807 | 826 | #endif |
| 808 | - if (pci_enabled && es1370_enabled) | |
| 809 | - es1370_init (pci_bus, audio); | |
| 810 | - } | |
| 811 | - } | |
| 812 | 827 | |
| 813 | 828 | floppy_controller = fdctrl_init(6, 2, 0, 0x3f0, fd_table); |
| 814 | 829 | ... | ... |
qemu-doc.texi
| ... | ... | @@ -201,16 +201,12 @@ de en-us fi fr-be hr it lv nl-be pt sl tr |
| 201 | 201 | |
| 202 | 202 | The default is @code{en-us}. |
| 203 | 203 | |
| 204 | -@item -enable-audio | |
| 205 | - | |
| 206 | -Will enable audio and all the sound hardware QEMU was built with. | |
| 207 | - | |
| 208 | 204 | @item -audio-help |
| 209 | 205 | |
| 210 | 206 | Will show the audio subsystem help: list of drivers, tunable |
| 211 | 207 | parameters. |
| 212 | 208 | |
| 213 | -@item -soundhw card1,card2,... | |
| 209 | +@item -soundhw card1,card2,... or -soundhw all | |
| 214 | 210 | |
| 215 | 211 | Enable audio and selected sound hardware. Use ? to print all |
| 216 | 212 | available sound hardware. |
| ... | ... | @@ -218,6 +214,7 @@ available sound hardware. |
| 218 | 214 | @example |
| 219 | 215 | qemu -soundhw sb16,adlib hda |
| 220 | 216 | qemu -soundhw es1370 hda |
| 217 | +qemu -soundhw all hda | |
| 221 | 218 | qemu -soundhw ? |
| 222 | 219 | @end example |
| 223 | 220 | ... | ... |
vl.c
| ... | ... | @@ -124,13 +124,6 @@ int nb_nics; |
| 124 | 124 | NICInfo nd_table[MAX_NICS]; |
| 125 | 125 | QEMUTimer *gui_timer; |
| 126 | 126 | int vm_running; |
| 127 | -#ifdef HAS_AUDIO | |
| 128 | -int audio_enabled = 0; | |
| 129 | -int sb16_enabled = 0; | |
| 130 | -int adlib_enabled = 0; | |
| 131 | -int gus_enabled = 0; | |
| 132 | -int es1370_enabled = 0; | |
| 133 | -#endif | |
| 134 | 127 | int rtc_utc = 1; |
| 135 | 128 | int cirrus_vga_enabled = 1; |
| 136 | 129 | #ifdef TARGET_SPARC |
| ... | ... | @@ -3977,11 +3970,11 @@ void help(void) |
| 3977 | 3970 | "-k language use keyboard layout (for example \"fr\" for French)\n" |
| 3978 | 3971 | #endif |
| 3979 | 3972 | #ifdef HAS_AUDIO |
| 3980 | - "-enable-audio enable audio support, and all the sound cards\n" | |
| 3981 | 3973 | "-audio-help print list of audio drivers and their options\n" |
| 3982 | 3974 | "-soundhw c1,... enable audio support\n" |
| 3983 | 3975 | " and only specified sound cards (comma separated list)\n" |
| 3984 | 3976 | " use -soundhw ? to get the list of supported cards\n" |
| 3977 | + " use -soundhw all to enable all of them\n" | |
| 3985 | 3978 | #endif |
| 3986 | 3979 | "-localtime set the real time clock to local time [default=utc]\n" |
| 3987 | 3980 | "-full-screen start in full screen\n" |
| ... | ... | @@ -4097,7 +4090,6 @@ enum { |
| 4097 | 4090 | QEMU_OPTION_m, |
| 4098 | 4091 | QEMU_OPTION_nographic, |
| 4099 | 4092 | #ifdef HAS_AUDIO |
| 4100 | - QEMU_OPTION_enable_audio, | |
| 4101 | 4093 | QEMU_OPTION_audio_help, |
| 4102 | 4094 | QEMU_OPTION_soundhw, |
| 4103 | 4095 | #endif |
| ... | ... | @@ -4159,7 +4151,6 @@ const QEMUOption qemu_options[] = { |
| 4159 | 4151 | { "nographic", 0, QEMU_OPTION_nographic }, |
| 4160 | 4152 | { "k", HAS_ARG, QEMU_OPTION_k }, |
| 4161 | 4153 | #ifdef HAS_AUDIO |
| 4162 | - { "enable-audio", 0, QEMU_OPTION_enable_audio }, | |
| 4163 | 4154 | { "audio-help", 0, QEMU_OPTION_audio_help }, |
| 4164 | 4155 | { "soundhw", HAS_ARG, QEMU_OPTION_soundhw }, |
| 4165 | 4156 | #endif |
| ... | ... | @@ -4280,58 +4271,90 @@ void register_machines(void) |
| 4280 | 4271 | } |
| 4281 | 4272 | |
| 4282 | 4273 | #ifdef HAS_AUDIO |
| 4283 | -static void select_soundhw (const char *optarg) | |
| 4284 | -{ | |
| 4285 | - if (*optarg == '?') { | |
| 4286 | - show_valid_cards: | |
| 4287 | - printf ("Valid sound card names (comma separated):\n"); | |
| 4288 | - printf ("sb16 Creative Sound Blaster 16\n"); | |
| 4274 | +struct soundhw soundhw[] = { | |
| 4275 | + { | |
| 4276 | + "sb16", | |
| 4277 | + "Creative Sound Blaster 16", | |
| 4278 | + 0, | |
| 4279 | + 1, | |
| 4280 | + { .init_isa = SB16_init } | |
| 4281 | + }, | |
| 4282 | + | |
| 4289 | 4283 | #ifdef CONFIG_ADLIB |
| 4284 | + { | |
| 4285 | + "adlib", | |
| 4290 | 4286 | #ifdef HAS_YMF262 |
| 4291 | - printf ("adlib Yamaha YMF262 (OPL3)\n"); | |
| 4287 | + "Yamaha YMF262 (OPL3)", | |
| 4292 | 4288 | #else |
| 4293 | - printf ("adlib Yamaha YM3812 (OPL2)\n"); | |
| 4289 | + "Yamaha YM3812 (OPL2)", | |
| 4294 | 4290 | #endif |
| 4291 | + 0, | |
| 4292 | + 1, | |
| 4293 | + { .init_isa = Adlib_init } | |
| 4294 | + }, | |
| 4295 | 4295 | #endif |
| 4296 | + | |
| 4296 | 4297 | #ifdef CONFIG_GUS |
| 4297 | - printf ("gus Gravis Ultrasound GF1\n"); | |
| 4298 | + { | |
| 4299 | + "gus", | |
| 4300 | + "Gravis Ultrasound GF1", | |
| 4301 | + 0, | |
| 4302 | + 1, | |
| 4303 | + { .init_isa = GUS_init } | |
| 4304 | + }, | |
| 4298 | 4305 | #endif |
| 4299 | - printf ("es1370 ENSONIQ AudioPCI ES1370\n"); | |
| 4306 | + | |
| 4307 | + { | |
| 4308 | + "es1370", | |
| 4309 | + "ENSONIQ AudioPCI ES1370", | |
| 4310 | + 0, | |
| 4311 | + 0, | |
| 4312 | + { .init_pci = es1370_init } | |
| 4313 | + }, | |
| 4314 | + | |
| 4315 | + { NULL, NULL, 0, 0, { NULL } } | |
| 4316 | +}; | |
| 4317 | + | |
| 4318 | +static void select_soundhw (const char *optarg) | |
| 4319 | +{ | |
| 4320 | + struct soundhw *c; | |
| 4321 | + | |
| 4322 | + if (*optarg == '?') { | |
| 4323 | + show_valid_cards: | |
| 4324 | + | |
| 4325 | + printf ("Valid sound card names (comma separated):\n"); | |
| 4326 | + for (c = soundhw; c->name; ++c) { | |
| 4327 | + printf ("%-11s %s\n", c->name, c->descr); | |
| 4328 | + } | |
| 4329 | + printf ("\n-soundhw all will enable all of the above\n"); | |
| 4300 | 4330 | exit (*optarg != '?'); |
| 4301 | 4331 | } |
| 4302 | 4332 | else { |
| 4303 | - struct { | |
| 4304 | - char *name; | |
| 4305 | - int *enabledp; | |
| 4306 | - } soundhw_tab[] = { | |
| 4307 | - { "sb16", &sb16_enabled }, | |
| 4308 | -#ifdef CONFIG_ADLIB | |
| 4309 | - { "adlib", &adlib_enabled }, | |
| 4310 | -#endif | |
| 4311 | -#ifdef CONFIG_GUS | |
| 4312 | - { "gus", &gus_enabled }, | |
| 4313 | -#endif | |
| 4314 | - { "es1370", &es1370_enabled }, | |
| 4315 | - }; | |
| 4316 | - size_t tablen, l, i; | |
| 4333 | + size_t l; | |
| 4317 | 4334 | const char *p; |
| 4318 | 4335 | char *e; |
| 4319 | 4336 | int bad_card = 0; |
| 4320 | 4337 | |
| 4321 | - p = optarg; | |
| 4322 | - tablen = sizeof (soundhw_tab) / sizeof (soundhw_tab[0]); | |
| 4338 | + if (!strcmp (optarg, "all")) { | |
| 4339 | + for (c = soundhw; c->name; ++c) { | |
| 4340 | + c->enabled = 1; | |
| 4341 | + } | |
| 4342 | + return; | |
| 4343 | + } | |
| 4323 | 4344 | |
| 4345 | + p = optarg; | |
| 4324 | 4346 | while (*p) { |
| 4325 | 4347 | e = strchr (p, ','); |
| 4326 | 4348 | l = !e ? strlen (p) : (size_t) (e - p); |
| 4327 | - for (i = 0; i < tablen; ++i) { | |
| 4328 | - if (!strncmp (soundhw_tab[i].name, p, l)) { | |
| 4329 | - audio_enabled = 1; | |
| 4330 | - *soundhw_tab[i].enabledp = 1; | |
| 4349 | + | |
| 4350 | + for (c = soundhw; c->name; ++c) { | |
| 4351 | + if (!strncmp (c->name, p, l)) { | |
| 4352 | + c->enabled = 1; | |
| 4331 | 4353 | break; |
| 4332 | 4354 | } |
| 4333 | 4355 | } |
| 4334 | - if (i == tablen) { | |
| 4356 | + | |
| 4357 | + if (!c->name) { | |
| 4335 | 4358 | if (l > 80) { |
| 4336 | 4359 | fprintf (stderr, |
| 4337 | 4360 | "Unknown sound card name (too big to show)\n"); |
| ... | ... | @@ -4592,13 +4615,6 @@ int main(int argc, char **argv) |
| 4592 | 4615 | break; |
| 4593 | 4616 | #endif |
| 4594 | 4617 | #ifdef HAS_AUDIO |
| 4595 | - case QEMU_OPTION_enable_audio: | |
| 4596 | - audio_enabled = 1; | |
| 4597 | - sb16_enabled = 1; | |
| 4598 | - adlib_enabled = 1; | |
| 4599 | - gus_enabled = 1; | |
| 4600 | - es1370_enabled = 1; | |
| 4601 | - break; | |
| 4602 | 4618 | case QEMU_OPTION_audio_help: |
| 4603 | 4619 | AUD_help (); |
| 4604 | 4620 | exit (0); | ... | ... |
vl.h
| ... | ... | @@ -126,11 +126,6 @@ void qemu_system_powerdown(void); |
| 126 | 126 | |
| 127 | 127 | void main_loop_wait(int timeout); |
| 128 | 128 | |
| 129 | -extern int audio_enabled; | |
| 130 | -extern int sb16_enabled; | |
| 131 | -extern int adlib_enabled; | |
| 132 | -extern int gus_enabled; | |
| 133 | -extern int es1370_enabled; | |
| 134 | 129 | extern int ram_size; |
| 135 | 130 | extern int bios_size; |
| 136 | 131 | extern int rtc_utc; |
| ... | ... | @@ -621,6 +616,21 @@ typedef struct HeathrowPICS HeathrowPICS; |
| 621 | 616 | void heathrow_pic_set_irq(void *opaque, int num, int level); |
| 622 | 617 | HeathrowPICS *heathrow_pic_init(int *pmem_index); |
| 623 | 618 | |
| 619 | +#ifdef HAS_AUDIO | |
| 620 | +struct soundhw { | |
| 621 | + const char *name; | |
| 622 | + const char *descr; | |
| 623 | + int enabled; | |
| 624 | + int isa; | |
| 625 | + union { | |
| 626 | + int (*init_isa) (AudioState *s); | |
| 627 | + int (*init_pci) (PCIBus *bus, AudioState *s); | |
| 628 | + } init; | |
| 629 | +}; | |
| 630 | + | |
| 631 | +extern struct soundhw soundhw[]; | |
| 632 | +#endif | |
| 633 | + | |
| 624 | 634 | /* vga.c */ |
| 625 | 635 | |
| 626 | 636 | #define VGA_RAM_SIZE (4096 * 1024) | ... | ... |