Commit 1a7dafce1dfc3dc2052d0c5d8397e72121291c57

Authored by malc
1 parent b36aa85c

Remove any pretense that there can be more than one AudioState

audio/audio.c
@@ -707,11 +707,11 @@ static void noop_conv (struct st_sample *dst, const void *src, @@ -707,11 +707,11 @@ static void noop_conv (struct st_sample *dst, const void *src,
707 } 707 }
708 708
709 static CaptureVoiceOut *audio_pcm_capture_find_specific ( 709 static CaptureVoiceOut *audio_pcm_capture_find_specific (
710 - AudioState *s,  
711 struct audsettings *as 710 struct audsettings *as
712 ) 711 )
713 { 712 {
714 CaptureVoiceOut *cap; 713 CaptureVoiceOut *cap;
  714 + AudioState *s = &glob_audio_state;
715 715
716 for (cap = s->cap_head.lh_first; cap; cap = cap->entries.le_next) { 716 for (cap = s->cap_head.lh_first; cap; cap = cap->entries.le_next) {
717 if (audio_pcm_info_eq (&cap->hw.info, as)) { 717 if (audio_pcm_info_eq (&cap->hw.info, as)) {
@@ -786,8 +786,9 @@ static void audio_detach_capture (HWVoiceOut *hw) @@ -786,8 +786,9 @@ static void audio_detach_capture (HWVoiceOut *hw)
786 } 786 }
787 } 787 }
788 788
789 -static int audio_attach_capture (AudioState *s, HWVoiceOut *hw) 789 +static int audio_attach_capture (HWVoiceOut *hw)
790 { 790 {
  791 + AudioState *s = &glob_audio_state;
791 CaptureVoiceOut *cap; 792 CaptureVoiceOut *cap;
792 793
793 audio_detach_capture (hw); 794 audio_detach_capture (hw);
@@ -1295,7 +1296,7 @@ static void audio_run_out (AudioState *s) @@ -1295,7 +1296,7 @@ static void audio_run_out (AudioState *s)
1295 HWVoiceOut *hw = NULL; 1296 HWVoiceOut *hw = NULL;
1296 SWVoiceOut *sw; 1297 SWVoiceOut *sw;
1297 1298
1298 - while ((hw = audio_pcm_hw_find_any_enabled_out (s, hw))) { 1299 + while ((hw = audio_pcm_hw_find_any_enabled_out (hw))) {
1299 int played; 1300 int played;
1300 int live, free, nb_live, cleanup_required, prev_rpos; 1301 int live, free, nb_live, cleanup_required, prev_rpos;
1301 1302
@@ -1390,7 +1391,7 @@ static void audio_run_out (AudioState *s) @@ -1390,7 +1391,7 @@ static void audio_run_out (AudioState *s)
1390 #ifdef DEBUG_PLIVE 1391 #ifdef DEBUG_PLIVE
1391 dolog ("Finishing with old voice\n"); 1392 dolog ("Finishing with old voice\n");
1392 #endif 1393 #endif
1393 - audio_close_out (s, sw); 1394 + audio_close_out (sw);
1394 } 1395 }
1395 sw = sw1; 1396 sw = sw1;
1396 } 1397 }
@@ -1402,7 +1403,7 @@ static void audio_run_in (AudioState *s) @@ -1402,7 +1403,7 @@ static void audio_run_in (AudioState *s)
1402 { 1403 {
1403 HWVoiceIn *hw = NULL; 1404 HWVoiceIn *hw = NULL;
1404 1405
1405 - while ((hw = audio_pcm_hw_find_any_enabled_in (s, hw))) { 1406 + while ((hw = audio_pcm_hw_find_any_enabled_in (hw))) {
1406 SWVoiceIn *sw; 1407 SWVoiceIn *sw;
1407 int captured, min; 1408 int captured, min;
1408 1409
@@ -1610,8 +1611,8 @@ static int audio_driver_init (AudioState *s, struct audio_driver *drv) @@ -1610,8 +1611,8 @@ static int audio_driver_init (AudioState *s, struct audio_driver *drv)
1610 s->drv_opaque = drv->init (); 1611 s->drv_opaque = drv->init ();
1611 1612
1612 if (s->drv_opaque) { 1613 if (s->drv_opaque) {
1613 - audio_init_nb_voices_out (s, drv);  
1614 - audio_init_nb_voices_in (s, drv); 1614 + audio_init_nb_voices_out (drv);
  1615 + audio_init_nb_voices_in (drv);
1615 s->drv = drv; 1616 s->drv = drv;
1616 return 0; 1617 return 0;
1617 } 1618 }
@@ -1630,11 +1631,11 @@ static void audio_vm_change_state_handler (void *opaque, int running, @@ -1630,11 +1631,11 @@ static void audio_vm_change_state_handler (void *opaque, int running,
1630 int op = running ? VOICE_ENABLE : VOICE_DISABLE; 1631 int op = running ? VOICE_ENABLE : VOICE_DISABLE;
1631 1632
1632 s->vm_running = running; 1633 s->vm_running = running;
1633 - while ((hwo = audio_pcm_hw_find_any_enabled_out (s, hwo))) { 1634 + while ((hwo = audio_pcm_hw_find_any_enabled_out (hwo))) {
1634 hwo->pcm_ops->ctl_out (hwo, op); 1635 hwo->pcm_ops->ctl_out (hwo, op);
1635 } 1636 }
1636 1637
1637 - while ((hwi = audio_pcm_hw_find_any_enabled_in (s, hwi))) { 1638 + while ((hwi = audio_pcm_hw_find_any_enabled_in (hwi))) {
1638 hwi->pcm_ops->ctl_in (hwi, op); 1639 hwi->pcm_ops->ctl_in (hwi, op);
1639 } 1640 }
1640 } 1641 }
@@ -1645,7 +1646,7 @@ static void audio_atexit (void) @@ -1645,7 +1646,7 @@ static void audio_atexit (void)
1645 HWVoiceOut *hwo = NULL; 1646 HWVoiceOut *hwo = NULL;
1646 HWVoiceIn *hwi = NULL; 1647 HWVoiceIn *hwi = NULL;
1647 1648
1648 - while ((hwo = audio_pcm_hw_find_any_enabled_out (s, hwo))) { 1649 + while ((hwo = audio_pcm_hw_find_any_enabled_out (hwo))) {
1649 SWVoiceCap *sc; 1650 SWVoiceCap *sc;
1650 1651
1651 hwo->pcm_ops->ctl_out (hwo, VOICE_DISABLE); 1652 hwo->pcm_ops->ctl_out (hwo, VOICE_DISABLE);
@@ -1661,7 +1662,7 @@ static void audio_atexit (void) @@ -1661,7 +1662,7 @@ static void audio_atexit (void)
1661 } 1662 }
1662 } 1663 }
1663 1664
1664 - while ((hwi = audio_pcm_hw_find_any_enabled_in (s, hwi))) { 1665 + while ((hwi = audio_pcm_hw_find_any_enabled_in (hwi))) {
1665 hwi->pcm_ops->ctl_in (hwi, VOICE_DISABLE); 1666 hwi->pcm_ops->ctl_in (hwi, VOICE_DISABLE);
1666 hwi->pcm_ops->fini_in (hwi); 1667 hwi->pcm_ops->fini_in (hwi);
1667 } 1668 }
@@ -1689,22 +1690,7 @@ static int audio_load (QEMUFile *f, void *opaque, int version_id) @@ -1689,22 +1690,7 @@ static int audio_load (QEMUFile *f, void *opaque, int version_id)
1689 return 0; 1690 return 0;
1690 } 1691 }
1691 1692
1692 -void AUD_register_card (AudioState *s, const char *name, QEMUSoundCard *card)  
1693 -{  
1694 - card->audio = s;  
1695 - card->name = qemu_strdup (name);  
1696 - memset (&card->entries, 0, sizeof (card->entries));  
1697 - LIST_INSERT_HEAD (&s->card_head, card, entries);  
1698 -}  
1699 -  
1700 -void AUD_remove_card (QEMUSoundCard *card)  
1701 -{  
1702 - LIST_REMOVE (card, entries);  
1703 - card->audio = NULL;  
1704 - qemu_free (card->name);  
1705 -}  
1706 -  
1707 -AudioState *AUD_init (void) 1693 +static void audio_init (void)
1708 { 1694 {
1709 size_t i; 1695 size_t i;
1710 int done = 0; 1696 int done = 0;
@@ -1712,7 +1698,7 @@ AudioState *AUD_init (void) @@ -1712,7 +1698,7 @@ AudioState *AUD_init (void)
1712 AudioState *s = &glob_audio_state; 1698 AudioState *s = &glob_audio_state;
1713 1699
1714 if (s->drv) { 1700 if (s->drv) {
1715 - return s; 1701 + return;
1716 } 1702 }
1717 1703
1718 LIST_INIT (&s->hw_head_out); 1704 LIST_INIT (&s->hw_head_out);
@@ -1804,24 +1790,33 @@ AudioState *AUD_init (void) @@ -1804,24 +1790,33 @@ AudioState *AUD_init (void)
1804 LIST_INIT (&s->card_head); 1790 LIST_INIT (&s->card_head);
1805 register_savevm ("audio", 0, 1, audio_save, audio_load, s); 1791 register_savevm ("audio", 0, 1, audio_save, audio_load, s);
1806 qemu_mod_timer (s->ts, qemu_get_clock (vm_clock) + conf.period.ticks); 1792 qemu_mod_timer (s->ts, qemu_get_clock (vm_clock) + conf.period.ticks);
1807 - return s;  
1808 } 1793 }
1809 1794
  1795 +void AUD_register_card (const char *name, QEMUSoundCard *card)
  1796 +{
  1797 + audio_init ();
  1798 + card->name = qemu_strdup (name);
  1799 + memset (&card->entries, 0, sizeof (card->entries));
  1800 + LIST_INSERT_HEAD (&glob_audio_state.card_head, card, entries);
  1801 +}
  1802 +
  1803 +void AUD_remove_card (QEMUSoundCard *card)
  1804 +{
  1805 + LIST_REMOVE (card, entries);
  1806 + qemu_free (card->name);
  1807 +}
  1808 +
  1809 +
1810 CaptureVoiceOut *AUD_add_capture ( 1810 CaptureVoiceOut *AUD_add_capture (
1811 - AudioState *s,  
1812 struct audsettings *as, 1811 struct audsettings *as,
1813 struct audio_capture_ops *ops, 1812 struct audio_capture_ops *ops,
1814 void *cb_opaque 1813 void *cb_opaque
1815 ) 1814 )
1816 { 1815 {
  1816 + AudioState *s = &glob_audio_state;
1817 CaptureVoiceOut *cap; 1817 CaptureVoiceOut *cap;
1818 struct capture_callback *cb; 1818 struct capture_callback *cb;
1819 1819
1820 - if (!s) {  
1821 - /* XXX suppress */  
1822 - s = &glob_audio_state;  
1823 - }  
1824 -  
1825 if (audio_validate_settings (as)) { 1820 if (audio_validate_settings (as)) {
1826 dolog ("Invalid settings were passed when trying to add capture\n"); 1821 dolog ("Invalid settings were passed when trying to add capture\n");
1827 audio_print_settings (as); 1822 audio_print_settings (as);
@@ -1837,7 +1832,7 @@ CaptureVoiceOut *AUD_add_capture ( @@ -1837,7 +1832,7 @@ CaptureVoiceOut *AUD_add_capture (
1837 cb->ops = *ops; 1832 cb->ops = *ops;
1838 cb->opaque = cb_opaque; 1833 cb->opaque = cb_opaque;
1839 1834
1840 - cap = audio_pcm_capture_find_specific (s, as); 1835 + cap = audio_pcm_capture_find_specific (as);
1841 if (cap) { 1836 if (cap) {
1842 LIST_INSERT_HEAD (&cap->cb_head, cb, entries); 1837 LIST_INSERT_HEAD (&cap->cb_head, cb, entries);
1843 return cap; 1838 return cap;
@@ -1887,8 +1882,8 @@ CaptureVoiceOut *AUD_add_capture ( @@ -1887,8 +1882,8 @@ CaptureVoiceOut *AUD_add_capture (
1887 LIST_INSERT_HEAD (&cap->cb_head, cb, entries); 1882 LIST_INSERT_HEAD (&cap->cb_head, cb, entries);
1888 1883
1889 hw = NULL; 1884 hw = NULL;
1890 - while ((hw = audio_pcm_hw_find_any_out (s, hw))) {  
1891 - audio_attach_capture (s, hw); 1885 + while ((hw = audio_pcm_hw_find_any_out (hw))) {
  1886 + audio_attach_capture (hw);
1892 } 1887 }
1893 return cap; 1888 return cap;
1894 1889
audio/audio.h
@@ -78,7 +78,6 @@ typedef struct CaptureVoiceOut CaptureVoiceOut; @@ -78,7 +78,6 @@ typedef struct CaptureVoiceOut CaptureVoiceOut;
78 typedef struct SWVoiceIn SWVoiceIn; 78 typedef struct SWVoiceIn SWVoiceIn;
79 79
80 typedef struct QEMUSoundCard { 80 typedef struct QEMUSoundCard {
81 - AudioState *audio;  
82 char *name; 81 char *name;
83 LIST_ENTRY (QEMUSoundCard) entries; 82 LIST_ENTRY (QEMUSoundCard) entries;
84 } QEMUSoundCard; 83 } QEMUSoundCard;
@@ -94,12 +93,10 @@ void AUD_log (const char *cap, const char *fmt, ...) @@ -94,12 +93,10 @@ void AUD_log (const char *cap, const char *fmt, ...)
94 #endif 93 #endif
95 ; 94 ;
96 95
97 -AudioState *AUD_init (void);  
98 void AUD_help (void); 96 void AUD_help (void);
99 -void AUD_register_card (AudioState *s, const char *name, QEMUSoundCard *card); 97 +void AUD_register_card (const char *name, QEMUSoundCard *card);
100 void AUD_remove_card (QEMUSoundCard *card); 98 void AUD_remove_card (QEMUSoundCard *card);
101 CaptureVoiceOut *AUD_add_capture ( 99 CaptureVoiceOut *AUD_add_capture (
102 - AudioState *s,  
103 struct audsettings *as, 100 struct audsettings *as,
104 struct audio_capture_ops *ops, 101 struct audio_capture_ops *ops,
105 void *opaque 102 void *opaque
audio/audio_int.h
@@ -104,6 +104,7 @@ typedef struct HWVoiceIn { @@ -104,6 +104,7 @@ typedef struct HWVoiceIn {
104 } HWVoiceIn; 104 } HWVoiceIn;
105 105
106 struct SWVoiceOut { 106 struct SWVoiceOut {
  107 + QEMUSoundCard *card;
107 struct audio_pcm_info info; 108 struct audio_pcm_info info;
108 t_sample *conv; 109 t_sample *conv;
109 int64_t ratio; 110 int64_t ratio;
@@ -120,6 +121,7 @@ struct SWVoiceOut { @@ -120,6 +121,7 @@ struct SWVoiceOut {
120 }; 121 };
121 122
122 struct SWVoiceIn { 123 struct SWVoiceIn {
  124 + QEMUSoundCard *card;
123 int active; 125 int active;
124 struct audio_pcm_info info; 126 struct audio_pcm_info info;
125 int64_t ratio; 127 int64_t ratio;
audio/audio_template.h
@@ -36,11 +36,9 @@ @@ -36,11 +36,9 @@
36 #define HWBUF hw->conv_buf 36 #define HWBUF hw->conv_buf
37 #endif 37 #endif
38 38
39 -static void glue (audio_init_nb_voices_, TYPE) (  
40 - AudioState *s,  
41 - struct audio_driver *drv  
42 - ) 39 +static void glue (audio_init_nb_voices_, TYPE) (struct audio_driver *drv)
43 { 40 {
  41 + AudioState *s = &glob_audio_state;
44 int max_voices = glue (drv->max_voices_, TYPE); 42 int max_voices = glue (drv->max_voices_, TYPE);
45 int voice_size = glue (drv->voice_size_, TYPE); 43 int voice_size = glue (drv->voice_size_, TYPE);
46 44
@@ -194,8 +192,9 @@ static void glue (audio_pcm_hw_del_sw_, TYPE) (SW *sw) @@ -194,8 +192,9 @@ static void glue (audio_pcm_hw_del_sw_, TYPE) (SW *sw)
194 LIST_REMOVE (sw, entries); 192 LIST_REMOVE (sw, entries);
195 } 193 }
196 194
197 -static void glue (audio_pcm_hw_gc_, TYPE) (AudioState *s, HW **hwp) 195 +static void glue (audio_pcm_hw_gc_, TYPE) (HW **hwp)
198 { 196 {
  197 + AudioState *s = &glob_audio_state;
199 HW *hw = *hwp; 198 HW *hw = *hwp;
200 199
201 if (!hw->sw_head.lh_first) { 200 if (!hw->sw_head.lh_first) {
@@ -211,14 +210,15 @@ static void glue (audio_pcm_hw_gc_, TYPE) (AudioState *s, HW **hwp) @@ -211,14 +210,15 @@ static void glue (audio_pcm_hw_gc_, TYPE) (AudioState *s, HW **hwp)
211 } 210 }
212 } 211 }
213 212
214 -static HW *glue (audio_pcm_hw_find_any_, TYPE) (AudioState *s, HW *hw) 213 +static HW *glue (audio_pcm_hw_find_any_, TYPE) (HW *hw)
215 { 214 {
216 - return hw ? hw->entries.le_next : s->glue (hw_head_, TYPE).lh_first; 215 + AudioState *s = &glob_audio_state;
  216 + return hw ? hw->entries.le_next : glue (s->hw_head_, TYPE).lh_first;
217 } 217 }
218 218
219 -static HW *glue (audio_pcm_hw_find_any_enabled_, TYPE) (AudioState *s, HW *hw) 219 +static HW *glue (audio_pcm_hw_find_any_enabled_, TYPE) (HW *hw)
220 { 220 {
221 - while ((hw = glue (audio_pcm_hw_find_any_, TYPE) (s, hw))) { 221 + while ((hw = glue (audio_pcm_hw_find_any_, TYPE) (hw))) {
222 if (hw->enabled) { 222 if (hw->enabled) {
223 return hw; 223 return hw;
224 } 224 }
@@ -227,12 +227,11 @@ static HW *glue (audio_pcm_hw_find_any_enabled_, TYPE) (AudioState *s, HW *hw) @@ -227,12 +227,11 @@ static HW *glue (audio_pcm_hw_find_any_enabled_, TYPE) (AudioState *s, HW *hw)
227 } 227 }
228 228
229 static HW *glue (audio_pcm_hw_find_specific_, TYPE) ( 229 static HW *glue (audio_pcm_hw_find_specific_, TYPE) (
230 - AudioState *s,  
231 HW *hw, 230 HW *hw,
232 struct audsettings *as 231 struct audsettings *as
233 ) 232 )
234 { 233 {
235 - while ((hw = glue (audio_pcm_hw_find_any_, TYPE) (s, hw))) { 234 + while ((hw = glue (audio_pcm_hw_find_any_, TYPE) (hw))) {
236 if (audio_pcm_info_eq (&hw->info, as)) { 235 if (audio_pcm_info_eq (&hw->info, as)) {
237 return hw; 236 return hw;
238 } 237 }
@@ -240,10 +239,10 @@ static HW *glue (audio_pcm_hw_find_specific_, TYPE) ( @@ -240,10 +239,10 @@ static HW *glue (audio_pcm_hw_find_specific_, TYPE) (
240 return NULL; 239 return NULL;
241 } 240 }
242 241
243 -static HW *glue (audio_pcm_hw_add_new_, TYPE) (AudioState *s,  
244 - struct audsettings *as) 242 +static HW *glue (audio_pcm_hw_add_new_, TYPE) (struct audsettings *as)
245 { 243 {
246 HW *hw; 244 HW *hw;
  245 + AudioState *s = &glob_audio_state;
247 struct audio_driver *drv = s->drv; 246 struct audio_driver *drv = s->drv;
248 247
249 if (!glue (s->nb_hw_voices_, TYPE)) { 248 if (!glue (s->nb_hw_voices_, TYPE)) {
@@ -298,7 +297,7 @@ static HW *glue (audio_pcm_hw_add_new_, TYPE) (AudioState *s, @@ -298,7 +297,7 @@ static HW *glue (audio_pcm_hw_add_new_, TYPE) (AudioState *s,
298 LIST_INSERT_HEAD (&s->glue (hw_head_, TYPE), hw, entries); 297 LIST_INSERT_HEAD (&s->glue (hw_head_, TYPE), hw, entries);
299 glue (s->nb_hw_voices_, TYPE) -= 1; 298 glue (s->nb_hw_voices_, TYPE) -= 1;
300 #ifdef DAC 299 #ifdef DAC
301 - audio_attach_capture (s, hw); 300 + audio_attach_capture (hw);
302 #endif 301 #endif
303 return hw; 302 return hw;
304 303
@@ -309,33 +308,31 @@ static HW *glue (audio_pcm_hw_add_new_, TYPE) (AudioState *s, @@ -309,33 +308,31 @@ static HW *glue (audio_pcm_hw_add_new_, TYPE) (AudioState *s,
309 return NULL; 308 return NULL;
310 } 309 }
311 310
312 -static HW *glue (audio_pcm_hw_add_, TYPE) (AudioState *s,  
313 - struct audsettings *as) 311 +static HW *glue (audio_pcm_hw_add_, TYPE) (struct audsettings *as)
314 { 312 {
315 HW *hw; 313 HW *hw;
316 314
317 if (glue (conf.fixed_, TYPE).enabled && glue (conf.fixed_, TYPE).greedy) { 315 if (glue (conf.fixed_, TYPE).enabled && glue (conf.fixed_, TYPE).greedy) {
318 - hw = glue (audio_pcm_hw_add_new_, TYPE) (s, as); 316 + hw = glue (audio_pcm_hw_add_new_, TYPE) (as);
319 if (hw) { 317 if (hw) {
320 return hw; 318 return hw;
321 } 319 }
322 } 320 }
323 321
324 - hw = glue (audio_pcm_hw_find_specific_, TYPE) (s, NULL, as); 322 + hw = glue (audio_pcm_hw_find_specific_, TYPE) (NULL, as);
325 if (hw) { 323 if (hw) {
326 return hw; 324 return hw;
327 } 325 }
328 326
329 - hw = glue (audio_pcm_hw_add_new_, TYPE) (s, as); 327 + hw = glue (audio_pcm_hw_add_new_, TYPE) (as);
330 if (hw) { 328 if (hw) {
331 return hw; 329 return hw;
332 } 330 }
333 331
334 - return glue (audio_pcm_hw_find_any_, TYPE) (s, NULL); 332 + return glue (audio_pcm_hw_find_any_, TYPE) (NULL);
335 } 333 }
336 334
337 static SW *glue (audio_pcm_create_voice_pair_, TYPE) ( 335 static SW *glue (audio_pcm_create_voice_pair_, TYPE) (
338 - AudioState *s,  
339 const char *sw_name, 336 const char *sw_name,
340 struct audsettings *as 337 struct audsettings *as
341 ) 338 )
@@ -358,7 +355,7 @@ static SW *glue (audio_pcm_create_voice_pair_, TYPE) ( @@ -358,7 +355,7 @@ static SW *glue (audio_pcm_create_voice_pair_, TYPE) (
358 goto err1; 355 goto err1;
359 } 356 }
360 357
361 - hw = glue (audio_pcm_hw_add_, TYPE) (s, &hw_as); 358 + hw = glue (audio_pcm_hw_add_, TYPE) (&hw_as);
362 if (!hw) { 359 if (!hw) {
363 goto err2; 360 goto err2;
364 } 361 }
@@ -373,31 +370,30 @@ static SW *glue (audio_pcm_create_voice_pair_, TYPE) ( @@ -373,31 +370,30 @@ static SW *glue (audio_pcm_create_voice_pair_, TYPE) (
373 370
374 err3: 371 err3:
375 glue (audio_pcm_hw_del_sw_, TYPE) (sw); 372 glue (audio_pcm_hw_del_sw_, TYPE) (sw);
376 - glue (audio_pcm_hw_gc_, TYPE) (s, &hw); 373 + glue (audio_pcm_hw_gc_, TYPE) (&hw);
377 err2: 374 err2:
378 qemu_free (sw); 375 qemu_free (sw);
379 err1: 376 err1:
380 return NULL; 377 return NULL;
381 } 378 }
382 379
383 -static void glue (audio_close_, TYPE) (AudioState *s, SW *sw) 380 +static void glue (audio_close_, TYPE) (SW *sw)
384 { 381 {
385 glue (audio_pcm_sw_fini_, TYPE) (sw); 382 glue (audio_pcm_sw_fini_, TYPE) (sw);
386 glue (audio_pcm_hw_del_sw_, TYPE) (sw); 383 glue (audio_pcm_hw_del_sw_, TYPE) (sw);
387 - glue (audio_pcm_hw_gc_, TYPE) (s, &sw->hw); 384 + glue (audio_pcm_hw_gc_, TYPE) (&sw->hw);
388 qemu_free (sw); 385 qemu_free (sw);
389 } 386 }
390 387
391 void glue (AUD_close_, TYPE) (QEMUSoundCard *card, SW *sw) 388 void glue (AUD_close_, TYPE) (QEMUSoundCard *card, SW *sw)
392 { 389 {
393 if (sw) { 390 if (sw) {
394 - if (audio_bug (AUDIO_FUNC, !card || !card->audio)) {  
395 - dolog ("card=%p card->audio=%p\n",  
396 - card, card ? card->audio : NULL); 391 + if (audio_bug (AUDIO_FUNC, !card)) {
  392 + dolog ("card=%p\n", card);
397 return; 393 return;
398 } 394 }
399 395
400 - glue (audio_close_, TYPE) (card->audio, sw); 396 + glue (audio_close_, TYPE) (sw);
401 } 397 }
402 } 398 }
403 399
@@ -410,7 +406,7 @@ SW *glue (AUD_open_, TYPE) ( @@ -410,7 +406,7 @@ SW *glue (AUD_open_, TYPE) (
410 struct audsettings *as 406 struct audsettings *as
411 ) 407 )
412 { 408 {
413 - AudioState *s; 409 + AudioState *s = &glob_audio_state;
414 #ifdef DAC 410 #ifdef DAC
415 int live = 0; 411 int live = 0;
416 SW *old_sw = NULL; 412 SW *old_sw = NULL;
@@ -419,15 +415,12 @@ SW *glue (AUD_open_, TYPE) ( @@ -419,15 +415,12 @@ SW *glue (AUD_open_, TYPE) (
419 ldebug ("open %s, freq %d, nchannels %d, fmt %d\n", 415 ldebug ("open %s, freq %d, nchannels %d, fmt %d\n",
420 name, as->freq, as->nchannels, as->fmt); 416 name, as->freq, as->nchannels, as->fmt);
421 417
422 - if (audio_bug (AUDIO_FUNC,  
423 - !card || !card->audio || !name || !callback_fn || !as)) {  
424 - dolog ("card=%p card->audio=%p name=%p callback_fn=%p as=%p\n",  
425 - card, card ? card->audio : NULL, name, callback_fn, as); 418 + if (audio_bug (AUDIO_FUNC, !card || !name || !callback_fn || !as)) {
  419 + dolog ("card=%p name=%p callback_fn=%p as=%p\n",
  420 + card, name, callback_fn, as);
426 goto fail; 421 goto fail;
427 } 422 }
428 423
429 - s = card->audio;  
430 -  
431 if (audio_bug (AUDIO_FUNC, audio_validate_settings (as))) { 424 if (audio_bug (AUDIO_FUNC, audio_validate_settings (as))) {
432 audio_print_settings (as); 425 audio_print_settings (as);
433 goto fail; 426 goto fail;
@@ -485,7 +478,7 @@ SW *glue (AUD_open_, TYPE) ( @@ -485,7 +478,7 @@ SW *glue (AUD_open_, TYPE) (
485 } 478 }
486 } 479 }
487 else { 480 else {
488 - sw = glue (audio_pcm_create_voice_pair_, TYPE) (s, name, as); 481 + sw = glue (audio_pcm_create_voice_pair_, TYPE) (name, as);
489 if (!sw) { 482 if (!sw) {
490 dolog ("Failed to create voice `%s'\n", name); 483 dolog ("Failed to create voice `%s'\n", name);
491 return NULL; 484 return NULL;
@@ -493,6 +486,7 @@ SW *glue (AUD_open_, TYPE) ( @@ -493,6 +486,7 @@ SW *glue (AUD_open_, TYPE) (
493 } 486 }
494 487
495 if (sw) { 488 if (sw) {
  489 + sw->card = card;
496 sw->vol = nominal_volume; 490 sw->vol = nominal_volume;
497 sw->callback.fn = callback_fn; 491 sw->callback.fn = callback_fn;
498 sw->callback.opaque = callback_opaque; 492 sw->callback.opaque = callback_opaque;
audio/wavcapture.c
@@ -145,7 +145,7 @@ int wav_start_capture (CaptureState *s, const char *path, int freq, @@ -145,7 +145,7 @@ int wav_start_capture (CaptureState *s, const char *path, int freq,
145 145
146 qemu_put_buffer (wav->f, hdr, sizeof (hdr)); 146 qemu_put_buffer (wav->f, hdr, sizeof (hdr));
147 147
148 - cap = AUD_add_capture (NULL, &as, &ops, wav); 148 + cap = AUD_add_capture (&as, &ops, wav);
149 if (!cap) { 149 if (!cap) {
150 monitor_printf(mon, "Failed to add audio capture\n"); 150 monitor_printf(mon, "Failed to add audio capture\n");
151 qemu_free (wav->path); 151 qemu_free (wav->path);
hw/ac97.c
@@ -1310,7 +1310,6 @@ static void ac97_on_reset (void *opaque) @@ -1310,7 +1310,6 @@ static void ac97_on_reset (void *opaque)
1310 1310
1311 int ac97_init (PCIBus *bus) 1311 int ac97_init (PCIBus *bus)
1312 { 1312 {
1313 - AudioState *audio = AUD_init();  
1314 PCIAC97LinkState *d; 1313 PCIAC97LinkState *d;
1315 AC97LinkState *s; 1314 AC97LinkState *s;
1316 uint8_t *c; 1315 uint8_t *c;
@@ -1371,7 +1370,7 @@ int ac97_init (PCIBus *bus) @@ -1371,7 +1370,7 @@ int ac97_init (PCIBus *bus)
1371 pci_register_io_region (&d->dev, 1, 64 * 4, PCI_ADDRESS_SPACE_IO, ac97_map); 1370 pci_register_io_region (&d->dev, 1, 64 * 4, PCI_ADDRESS_SPACE_IO, ac97_map);
1372 register_savevm ("ac97", 0, 2, ac97_save, ac97_load, s); 1371 register_savevm ("ac97", 0, 2, ac97_save, ac97_load, s);
1373 qemu_register_reset (ac97_on_reset, s); 1372 qemu_register_reset (ac97_on_reset, s);
1374 - AUD_register_card (audio, "ac97", &s->card); 1373 + AUD_register_card ("ac97", &s->card);
1375 ac97_on_reset (s); 1374 ac97_on_reset (s);
1376 return 0; 1375 return 0;
1377 } 1376 }
hw/adlib.c
@@ -278,7 +278,6 @@ static void Adlib_fini (AdlibState *s) @@ -278,7 +278,6 @@ static void Adlib_fini (AdlibState *s)
278 278
279 int Adlib_init (qemu_irq *pic) 279 int Adlib_init (qemu_irq *pic)
280 { 280 {
281 - AudioState *audio = AUD_init();  
282 AdlibState *s = &glob_adlib; 281 AdlibState *s = &glob_adlib;
283 struct audsettings as; 282 struct audsettings as;
284 283
@@ -308,7 +307,7 @@ int Adlib_init (qemu_irq *pic) @@ -308,7 +307,7 @@ int Adlib_init (qemu_irq *pic)
308 as.fmt = AUD_FMT_S16; 307 as.fmt = AUD_FMT_S16;
309 as.endianness = AUDIO_HOST_ENDIANNESS; 308 as.endianness = AUDIO_HOST_ENDIANNESS;
310 309
311 - AUD_register_card (audio, "adlib", &s->card); 310 + AUD_register_card ("adlib", &s->card);
312 311
313 s->voice = AUD_open_out ( 312 s->voice = AUD_open_out (
314 &s->card, 313 &s->card,
hw/cs4231a.c
@@ -638,7 +638,6 @@ static int cs_load(QEMUFile *f, void *opaque, int version_id) @@ -638,7 +638,6 @@ static int cs_load(QEMUFile *f, void *opaque, int version_id)
638 638
639 int cs4231a_init (qemu_irq *pic) 639 int cs4231a_init (qemu_irq *pic)
640 { 640 {
641 - AudioState *audio = AUD_init();  
642 int i; 641 int i;
643 CSState *s; 642 CSState *s;
644 643
@@ -660,6 +659,6 @@ int cs4231a_init (qemu_irq *pic) @@ -660,6 +659,6 @@ int cs4231a_init (qemu_irq *pic)
660 qemu_register_reset (cs_reset, s); 659 qemu_register_reset (cs_reset, s);
661 cs_reset (s); 660 cs_reset (s);
662 661
663 - AUD_register_card (audio,"cs4231a", &s->card); 662 + AUD_register_card ("cs4231a", &s->card);
664 return 0; 663 return 0;
665 } 664 }
hw/es1370.c
@@ -1007,7 +1007,6 @@ static void es1370_on_reset (void *opaque) @@ -1007,7 +1007,6 @@ static void es1370_on_reset (void *opaque)
1007 1007
1008 int es1370_init (PCIBus *bus) 1008 int es1370_init (PCIBus *bus)
1009 { 1009 {
1010 - AudioState *audio = AUD_init();  
1011 PCIES1370State *d; 1010 PCIES1370State *d;
1012 ES1370State *s; 1011 ES1370State *s;
1013 uint8_t *c; 1012 uint8_t *c;
@@ -1058,7 +1057,7 @@ int es1370_init (PCIBus *bus) @@ -1058,7 +1057,7 @@ int es1370_init (PCIBus *bus)
1058 register_savevm ("es1370", 0, 2, es1370_save, es1370_load, s); 1057 register_savevm ("es1370", 0, 2, es1370_save, es1370_load, s);
1059 qemu_register_reset (es1370_on_reset, s); 1058 qemu_register_reset (es1370_on_reset, s);
1060 1059
1061 - AUD_register_card (audio, "es1370", &s->card); 1060 + AUD_register_card ("es1370", &s->card);
1062 es1370_reset (s); 1061 es1370_reset (s);
1063 return 0; 1062 return 0;
1064 } 1063 }
hw/gus.c
@@ -252,13 +252,12 @@ static int GUS_load (QEMUFile *f, void *opaque, int version_id) @@ -252,13 +252,12 @@ static int GUS_load (QEMUFile *f, void *opaque, int version_id)
252 252
253 int GUS_init (qemu_irq *pic) 253 int GUS_init (qemu_irq *pic)
254 { 254 {
255 - AudioState *audio = AUD_init();  
256 GUSState *s; 255 GUSState *s;
257 struct audsettings as; 256 struct audsettings as;
258 257
259 s = qemu_mallocz (sizeof (*s)); 258 s = qemu_mallocz (sizeof (*s));
260 259
261 - AUD_register_card (audio, "gus", &s->card); 260 + AUD_register_card ("gus", &s->card);
262 261
263 as.freq = conf.freq; 262 as.freq = conf.freq;
264 as.nchannels = 2; 263 as.nchannels = 2;
hw/omap2.c
@@ -1973,7 +1973,7 @@ struct omap_eac_s *omap_eac_init(struct omap_target_agent_s *ta, @@ -1973,7 +1973,7 @@ struct omap_eac_s *omap_eac_init(struct omap_target_agent_s *ta,
1973 omap_eac_reset(s); 1973 omap_eac_reset(s);
1974 1974
1975 #ifdef HAS_AUDIO 1975 #ifdef HAS_AUDIO
1976 - AUD_register_card(AUD_init(), "OMAP EAC", &s->codec.card); 1976 + AUD_register_card("OMAP EAC", &s->codec.card);
1977 1977
1978 iomemtype = cpu_register_io_memory(0, omap_eac_readfn, 1978 iomemtype = cpu_register_io_memory(0, omap_eac_readfn,
1979 omap_eac_writefn, s); 1979 omap_eac_writefn, s);
hw/pcspk.c
@@ -98,11 +98,10 @@ static void pcspk_callback(void *opaque, int free) @@ -98,11 +98,10 @@ static void pcspk_callback(void *opaque, int free)
98 98
99 int pcspk_audio_init(qemu_irq *pic) 99 int pcspk_audio_init(qemu_irq *pic)
100 { 100 {
101 - AudioState *audio = AUD_init();  
102 PCSpkState *s = &pcspk_state; 101 PCSpkState *s = &pcspk_state;
103 struct audsettings as = {PCSPK_SAMPLE_RATE, 1, AUD_FMT_U8, 0}; 102 struct audsettings as = {PCSPK_SAMPLE_RATE, 1, AUD_FMT_U8, 0};
104 103
105 - AUD_register_card(audio, s_spk, &s->card); 104 + AUD_register_card(s_spk, &s->card);
106 105
107 s->voice = AUD_open_out(&s->card, s->voice, s_spk, s, pcspk_callback, &as); 106 s->voice = AUD_open_out(&s->card, s->voice, s_spk, s, pcspk_callback, &as);
108 if (!s->voice) { 107 if (!s->voice) {
hw/sb16.c
@@ -1400,7 +1400,6 @@ static int SB_load (QEMUFile *f, void *opaque, int version_id) @@ -1400,7 +1400,6 @@ static int SB_load (QEMUFile *f, void *opaque, int version_id)
1400 1400
1401 int SB16_init (qemu_irq *pic) 1401 int SB16_init (qemu_irq *pic)
1402 { 1402 {
1403 - AudioState *audio = AUD_init();  
1404 SB16State *s; 1403 SB16State *s;
1405 int i; 1404 int i;
1406 static const uint8_t dsp_write_ports[] = {0x6, 0xc}; 1405 static const uint8_t dsp_write_ports[] = {0x6, 0xc};
@@ -1447,6 +1446,6 @@ int SB16_init (qemu_irq *pic) @@ -1447,6 +1446,6 @@ int SB16_init (qemu_irq *pic)
1447 s->can_write = 1; 1446 s->can_write = 1;
1448 1447
1449 register_savevm ("sb16", 0, 1, SB_save, SB_load, s); 1448 register_savevm ("sb16", 0, 1, SB_save, SB_load, s);
1450 - AUD_register_card (audio, "sb16", &s->card); 1449 + AUD_register_card ("sb16", &s->card);
1451 return 0; 1450 return 0;
1452 } 1451 }
hw/tsc210x.c
@@ -82,7 +82,6 @@ typedef struct { @@ -82,7 +82,6 @@ typedef struct {
82 SWVoiceOut *dac_voice[1]; 82 SWVoiceOut *dac_voice[1];
83 int i2s_rx_rate; 83 int i2s_rx_rate;
84 int i2s_tx_rate; 84 int i2s_tx_rate;
85 - AudioState *audio;  
86 85
87 int tr[8]; 86 int tr[8];
88 87
@@ -1117,7 +1116,6 @@ uWireSlave *tsc2102_init(qemu_irq pint) @@ -1117,7 +1116,6 @@ uWireSlave *tsc2102_init(qemu_irq pint)
1117 s->pint = pint; 1116 s->pint = pint;
1118 s->model = 0x2102; 1117 s->model = 0x2102;
1119 s->name = "tsc2102"; 1118 s->name = "tsc2102";
1120 - s->audio = AUD_init();;  
1121 1119
1122 s->tr[0] = 0; 1120 s->tr[0] = 0;
1123 s->tr[1] = 1; 1121 s->tr[1] = 1;
@@ -1143,7 +1141,7 @@ uWireSlave *tsc2102_init(qemu_irq pint) @@ -1143,7 +1141,7 @@ uWireSlave *tsc2102_init(qemu_irq pint)
1143 qemu_add_mouse_event_handler(tsc210x_touchscreen_event, s, 1, 1141 qemu_add_mouse_event_handler(tsc210x_touchscreen_event, s, 1,
1144 "QEMU TSC2102-driven Touchscreen"); 1142 "QEMU TSC2102-driven Touchscreen");
1145 1143
1146 - AUD_register_card(s->audio, s->name, &s->card); 1144 + AUD_register_card(s->name, &s->card);
1147 1145
1148 qemu_register_reset((void *) tsc210x_reset, s); 1146 qemu_register_reset((void *) tsc210x_reset, s);
1149 register_savevm(s->name, -1, 0, 1147 register_savevm(s->name, -1, 0,
@@ -1169,7 +1167,6 @@ uWireSlave *tsc2301_init(qemu_irq penirq, qemu_irq kbirq, qemu_irq dav) @@ -1169,7 +1167,6 @@ uWireSlave *tsc2301_init(qemu_irq penirq, qemu_irq kbirq, qemu_irq dav)
1169 s->davint = dav; 1167 s->davint = dav;
1170 s->model = 0x2301; 1168 s->model = 0x2301;
1171 s->name = "tsc2301"; 1169 s->name = "tsc2301";
1172 - s->audio = AUD_init();  
1173 1170
1174 s->tr[0] = 0; 1171 s->tr[0] = 0;
1175 s->tr[1] = 1; 1172 s->tr[1] = 1;
@@ -1195,7 +1192,7 @@ uWireSlave *tsc2301_init(qemu_irq penirq, qemu_irq kbirq, qemu_irq dav) @@ -1195,7 +1192,7 @@ uWireSlave *tsc2301_init(qemu_irq penirq, qemu_irq kbirq, qemu_irq dav)
1195 qemu_add_mouse_event_handler(tsc210x_touchscreen_event, s, 1, 1192 qemu_add_mouse_event_handler(tsc210x_touchscreen_event, s, 1,
1196 "QEMU TSC2301-driven Touchscreen"); 1193 "QEMU TSC2301-driven Touchscreen");
1197 1194
1198 - AUD_register_card(s->audio, s->name, &s->card); 1195 + AUD_register_card(s->name, &s->card);
1199 1196
1200 qemu_register_reset((void *) tsc210x_reset, s); 1197 qemu_register_reset((void *) tsc210x_reset, s);
1201 register_savevm(s->name, -1, 0, tsc210x_save, tsc210x_load, s); 1198 register_savevm(s->name, -1, 0, tsc210x_save, tsc210x_load, s);
hw/wm8750.c
@@ -647,14 +647,13 @@ static int wm8750_load(QEMUFile *f, void *opaque, int version_id) @@ -647,14 +647,13 @@ static int wm8750_load(QEMUFile *f, void *opaque, int version_id)
647 647
648 i2c_slave *wm8750_init(i2c_bus *bus) 648 i2c_slave *wm8750_init(i2c_bus *bus)
649 { 649 {
650 - AudioState *audio = AUD_init();  
651 WM8750State *s = (WM8750State *) 650 WM8750State *s = (WM8750State *)
652 i2c_slave_init(bus, 0, sizeof(WM8750State)); 651 i2c_slave_init(bus, 0, sizeof(WM8750State));
653 s->i2c.event = wm8750_event; 652 s->i2c.event = wm8750_event;
654 s->i2c.recv = wm8750_rx; 653 s->i2c.recv = wm8750_rx;
655 s->i2c.send = wm8750_tx; 654 s->i2c.send = wm8750_tx;
656 655
657 - AUD_register_card(audio, CODEC, &s->card); 656 + AUD_register_card(CODEC, &s->card);
658 wm8750_reset(&s->i2c); 657 wm8750_reset(&s->i2c);
659 658
660 register_savevm(CODEC, -1, 0, wm8750_save, wm8750_load, s); 659 register_savevm(CODEC, -1, 0, wm8750_save, wm8750_load, s);
@@ -855,7 +855,7 @@ static void audio_add(VncState *vs) @@ -855,7 +855,7 @@ static void audio_add(VncState *vs)
855 ops.destroy = audio_capture_destroy; 855 ops.destroy = audio_capture_destroy;
856 ops.capture = audio_capture; 856 ops.capture = audio_capture;
857 857
858 - vs->audio_cap = AUD_add_capture(NULL, &vs->as, &ops, vs); 858 + vs->audio_cap = AUD_add_capture(&vs->as, &ops, vs);
859 if (!vs->audio_cap) { 859 if (!vs->audio_cap) {
860 monitor_printf(mon, "Failed to add audio capture\n"); 860 monitor_printf(mon, "Failed to add audio capture\n");
861 } 861 }