提交 22d83b14 编写于 作者: P Paul Brook

Push AUD_init down to devices

Now we can safely call AUD_init multiple times we can push it down to
individual audio devices, rather than having to pass it from the board
init.
Signed-off-by: NPaul Brook <paul@codesourcery.com>
上级 0d9acba8
...@@ -1308,8 +1308,9 @@ static void ac97_on_reset (void *opaque) ...@@ -1308,8 +1308,9 @@ static void ac97_on_reset (void *opaque)
mixer_reset (s); mixer_reset (s);
} }
int ac97_init (PCIBus *bus, AudioState *audio) int ac97_init (PCIBus *bus)
{ {
AudioState *audio = AUD_init();
PCIAC97LinkState *d; PCIAC97LinkState *d;
AC97LinkState *s; AC97LinkState *s;
uint8_t *c; uint8_t *c;
...@@ -1319,11 +1320,6 @@ int ac97_init (PCIBus *bus, AudioState *audio) ...@@ -1319,11 +1320,6 @@ int ac97_init (PCIBus *bus, AudioState *audio)
return -1; return -1;
} }
if (!audio) {
AUD_log ("ac97", "No audio state\n");
return -1;
}
d = (PCIAC97LinkState *) pci_register_device (bus, "AC97", d = (PCIAC97LinkState *) pci_register_device (bus, "AC97",
sizeof (PCIAC97LinkState), sizeof (PCIAC97LinkState),
-1, NULL, NULL); -1, NULL, NULL);
......
...@@ -277,16 +277,12 @@ static void Adlib_fini (AdlibState *s) ...@@ -277,16 +277,12 @@ static void Adlib_fini (AdlibState *s)
AUD_remove_card (&s->card); AUD_remove_card (&s->card);
} }
int Adlib_init (AudioState *audio, qemu_irq *pic) int Adlib_init (qemu_irq *pic)
{ {
AudioState *audio = AUD_init();
AdlibState *s = &glob_adlib; AdlibState *s = &glob_adlib;
struct audsettings as; struct audsettings as;
if (!audio) {
dolog ("No audio state\n");
return -1;
}
#ifdef HAS_YMF262 #ifdef HAS_YMF262
if (YMF262Init (1, 14318180, conf.freq)) { if (YMF262Init (1, 14318180, conf.freq)) {
dolog ("YMF262Init %d failed\n", conf.freq); dolog ("YMF262Init %d failed\n", conf.freq);
......
/* es1370.c */ /* es1370.c */
int es1370_init (PCIBus *bus, AudioState *s); int es1370_init(PCIBus *bus);
/* sb16.c */ /* sb16.c */
int SB16_init (AudioState *s, qemu_irq *pic); int SB16_init(qemu_irq *pic);
/* adlib.c */ /* adlib.c */
int Adlib_init (AudioState *s, qemu_irq *pic); int Adlib_init(qemu_irq *pic);
/* gus.c */ /* gus.c */
int GUS_init (AudioState *s, qemu_irq *pic); int GUS_init(qemu_irq *pic);
/* ac97.c */ /* ac97.c */
int ac97_init (PCIBus *buf, AudioState *s); int ac97_init(PCIBus *buf);
/* cs4231a.c */ /* cs4231a.c */
int cs4231a_init (AudioState *s, qemu_irq *pic); int cs4231a_init(qemu_irq *pic);
...@@ -636,16 +636,12 @@ static int cs_load(QEMUFile *f, void *opaque, int version_id) ...@@ -636,16 +636,12 @@ static int cs_load(QEMUFile *f, void *opaque, int version_id)
return 0; return 0;
} }
int cs4231a_init (AudioState *audio, qemu_irq *pic) int cs4231a_init (qemu_irq *pic)
{ {
AudioState *audio = AUD_init();
int i; int i;
CSState *s; CSState *s;
if (!audio) {
lerr ("No audio state\n");
return -1;
}
s = qemu_mallocz (sizeof (*s)); s = qemu_mallocz (sizeof (*s));
s->pic = pic; s->pic = pic;
......
...@@ -17,9 +17,8 @@ void ads7846_write(void *opaque, uint32_t value); ...@@ -17,9 +17,8 @@ void ads7846_write(void *opaque, uint32_t value);
ADS7846State *ads7846_init(qemu_irq penirq); ADS7846State *ads7846_init(qemu_irq penirq);
/* tsc210x.c */ /* tsc210x.c */
uWireSlave *tsc2102_init(qemu_irq pint, AudioState *audio); uWireSlave *tsc2102_init(qemu_irq pint);
uWireSlave *tsc2301_init(qemu_irq penirq, qemu_irq kbirq, uWireSlave *tsc2301_init(qemu_irq penirq, qemu_irq kbirq, qemu_irq dav);
qemu_irq dav, AudioState *audio);
I2SCodec *tsc210x_codec(uWireSlave *chip); I2SCodec *tsc210x_codec(uWireSlave *chip);
uint32_t tsc210x_txrx(void *opaque, uint32_t value, int len); uint32_t tsc210x_txrx(void *opaque, uint32_t value, int len);
void tsc210x_set_transform(uWireSlave *chip, void tsc210x_set_transform(uWireSlave *chip,
......
...@@ -1005,8 +1005,9 @@ static void es1370_on_reset (void *opaque) ...@@ -1005,8 +1005,9 @@ static void es1370_on_reset (void *opaque)
es1370_reset (s); es1370_reset (s);
} }
int es1370_init (PCIBus *bus, AudioState *audio) int es1370_init (PCIBus *bus)
{ {
AudioState *audio = AUD_init();
PCIES1370State *d; PCIES1370State *d;
ES1370State *s; ES1370State *s;
uint8_t *c; uint8_t *c;
...@@ -1016,11 +1017,6 @@ int es1370_init (PCIBus *bus, AudioState *audio) ...@@ -1016,11 +1017,6 @@ int es1370_init (PCIBus *bus, AudioState *audio)
return -1; return -1;
} }
if (!audio) {
dolog ("No audio state\n");
return -1;
}
d = (PCIES1370State *) pci_register_device (bus, "ES1370", d = (PCIES1370State *) pci_register_device (bus, "ES1370",
sizeof (PCIES1370State), sizeof (PCIES1370State),
-1, NULL, NULL); -1, NULL, NULL);
......
...@@ -250,16 +250,12 @@ static int GUS_load (QEMUFile *f, void *opaque, int version_id) ...@@ -250,16 +250,12 @@ static int GUS_load (QEMUFile *f, void *opaque, int version_id)
return 0; return 0;
} }
int GUS_init (AudioState *audio, qemu_irq *pic) int GUS_init (qemu_irq *pic)
{ {
AudioState *audio = AUD_init();
GUSState *s; GUSState *s;
struct audsettings as; struct audsettings as;
if (!audio) {
dolog ("No audio state\n");
return -1;
}
s = qemu_mallocz (sizeof (*s)); s = qemu_mallocz (sizeof (*s));
AUD_register_card (audio, "gus", &s->card); AUD_register_card (audio, "gus", &s->card);
......
...@@ -60,7 +60,7 @@ qemu_irq *max7310_gpio_in_get(i2c_slave *i2c); ...@@ -60,7 +60,7 @@ qemu_irq *max7310_gpio_in_get(i2c_slave *i2c);
void max7310_gpio_out_set(i2c_slave *i2c, int line, qemu_irq handler); void max7310_gpio_out_set(i2c_slave *i2c, int line, qemu_irq handler);
/* wm8750.c */ /* wm8750.c */
i2c_slave *wm8750_init(i2c_bus *bus, AudioState *audio); i2c_slave *wm8750_init(i2c_bus *bus);
void wm8750_reset(i2c_slave *i2c); void wm8750_reset(i2c_slave *i2c);
void wm8750_data_req_set(i2c_slave *i2c, void wm8750_data_req_set(i2c_slave *i2c,
void (*data_req)(void *, int, int), void *opaque); void (*data_req)(void *, int, int), void *opaque);
......
...@@ -104,13 +104,10 @@ static void audio_init(qemu_irq *pic) ...@@ -104,13 +104,10 @@ static void audio_init(qemu_irq *pic)
} }
if (audio_enabled) { if (audio_enabled) {
AudioState *s;
s = AUD_init();
for (c = soundhw; c->name; ++c) { for (c = soundhw; c->name; ++c) {
if (c->enabled) { if (c->enabled) {
if (c->isa) { if (c->isa) {
c->init.init_isa(s, pic); c->init.init_isa(pic);
} }
} }
} }
......
...@@ -469,12 +469,9 @@ static void audio_init (PCIBus *pci_bus) ...@@ -469,12 +469,9 @@ static void audio_init (PCIBus *pci_bus)
} }
if (audio_enabled) { if (audio_enabled) {
AudioState *s;
s = AUD_init ();
for (c = soundhw; c->name; ++c) { for (c = soundhw; c->name; ++c) {
if (c->enabled) { if (c->enabled) {
c->init.init_pci (pci_bus, s); c->init.init_pci(pci_bus);
} }
} }
} }
......
...@@ -422,13 +422,10 @@ static CPUWriteMemoryFunc *musicpal_audio_writefn[] = { ...@@ -422,13 +422,10 @@ static CPUWriteMemoryFunc *musicpal_audio_writefn[] = {
static i2c_interface *musicpal_audio_init(qemu_irq irq) static i2c_interface *musicpal_audio_init(qemu_irq irq)
{ {
AudioState *audio;
musicpal_audio_state *s; musicpal_audio_state *s;
i2c_interface *i2c; i2c_interface *i2c;
int iomemtype; int iomemtype;
audio = AUD_init();
s = qemu_mallocz(sizeof(musicpal_audio_state)); s = qemu_mallocz(sizeof(musicpal_audio_state));
s->irq = irq; s->irq = irq;
...@@ -436,7 +433,7 @@ static i2c_interface *musicpal_audio_init(qemu_irq irq) ...@@ -436,7 +433,7 @@ static i2c_interface *musicpal_audio_init(qemu_irq irq)
i2c->bus = i2c_init_bus(); i2c->bus = i2c_init_bus();
i2c->current_addr = -1; i2c->current_addr = -1;
s->wm = wm8750_init(i2c->bus, audio); s->wm = wm8750_init(i2c->bus);
if (!s->wm) if (!s->wm)
return NULL; return NULL;
i2c_set_slave_address(s->wm, MP_WM_ADDR); i2c_set_slave_address(s->wm, MP_WM_ADDR);
......
...@@ -252,7 +252,7 @@ static void n800_tsc_kbd_setup(struct n800_s *s) ...@@ -252,7 +252,7 @@ static void n800_tsc_kbd_setup(struct n800_s *s)
qemu_irq kbirq = omap2_gpio_in_get(s->cpu->gpif, N800_TSC_KP_IRQ_GPIO)[0]; qemu_irq kbirq = omap2_gpio_in_get(s->cpu->gpif, N800_TSC_KP_IRQ_GPIO)[0];
qemu_irq dav = omap2_gpio_in_get(s->cpu->gpif, N800_TSC_TS_GPIO)[0]; qemu_irq dav = omap2_gpio_in_get(s->cpu->gpif, N800_TSC_TS_GPIO)[0];
s->ts.chip = tsc2301_init(penirq, kbirq, dav, 0); s->ts.chip = tsc2301_init(penirq, kbirq, dav);
s->ts.opaque = s->ts.chip->opaque; s->ts.opaque = s->ts.chip->opaque;
s->ts.txrx = tsc210x_txrx; s->ts.txrx = tsc210x_txrx;
......
...@@ -1973,7 +1973,6 @@ struct omap_eac_s *omap_eac_init(struct omap_target_agent_s *ta, ...@@ -1973,7 +1973,6 @@ struct omap_eac_s *omap_eac_init(struct omap_target_agent_s *ta,
omap_eac_reset(s); omap_eac_reset(s);
#ifdef HAS_AUDIO #ifdef HAS_AUDIO
/* TODO: do AUD_init globally for machine */
AUD_register_card(AUD_init(), "OMAP EAC", &s->codec.card); AUD_register_card(AUD_init(), "OMAP EAC", &s->codec.card);
iomemtype = cpu_register_io_memory(0, omap_eac_readfn, iomemtype = cpu_register_io_memory(0, omap_eac_readfn,
......
...@@ -93,14 +93,8 @@ static MouseTransformInfo palmte_pointercal = { ...@@ -93,14 +93,8 @@ static MouseTransformInfo palmte_pointercal = {
static void palmte_microwire_setup(struct omap_mpu_state_s *cpu) static void palmte_microwire_setup(struct omap_mpu_state_s *cpu)
{ {
uWireSlave *tsc; uWireSlave *tsc;
AudioState *audio = 0;
#ifdef HAS_AUDIO tsc = tsc2102_init(omap_gpio_in_get(cpu->gpio)[PALMTE_PINTDAV_GPIO]);
audio = AUD_init();
#endif
tsc = tsc2102_init(omap_gpio_in_get(cpu->gpio)[PALMTE_PINTDAV_GPIO],
audio);
omap_uwire_attach(cpu->microwire, tsc, 0); omap_uwire_attach(cpu->microwire, tsc, 0);
omap_mcbsp_i2s_attach(cpu->mcbsp1, tsc210x_codec(tsc)); omap_mcbsp_i2s_attach(cpu->mcbsp1, tsc210x_codec(tsc));
......
...@@ -788,17 +788,13 @@ static void audio_init (PCIBus *pci_bus, qemu_irq *pic) ...@@ -788,17 +788,13 @@ static void audio_init (PCIBus *pci_bus, qemu_irq *pic)
} }
if (audio_enabled) { if (audio_enabled) {
AudioState *s;
s = AUD_init ();
for (c = soundhw; c->name; ++c) { for (c = soundhw; c->name; ++c) {
if (c->enabled) { if (c->enabled) {
if (c->isa) { if (c->isa) {
c->init.init_isa (s, pic); c->init.init_isa(pic);
} } else {
else {
if (pci_bus) { if (pci_bus) {
c->init.init_pci (pci_bus, s); c->init.init_pci(pci_bus);
} }
} }
} }
......
...@@ -119,7 +119,7 @@ extern int no_hpet; ...@@ -119,7 +119,7 @@ extern int no_hpet;
/* pcspk.c */ /* pcspk.c */
void pcspk_init(PITState *); void pcspk_init(PITState *);
int pcspk_audio_init(AudioState *, qemu_irq *pic); int pcspk_audio_init(qemu_irq *pic);
/* piix_pci.c */ /* piix_pci.c */
PCIBus *i440fx_init(PCIDevice **pi440fx_state, qemu_irq *pic); PCIBus *i440fx_init(PCIDevice **pi440fx_state, qemu_irq *pic);
......
...@@ -96,15 +96,12 @@ static void pcspk_callback(void *opaque, int free) ...@@ -96,15 +96,12 @@ static void pcspk_callback(void *opaque, int free)
} }
} }
int pcspk_audio_init(AudioState *audio, qemu_irq *pic) int pcspk_audio_init(qemu_irq *pic)
{ {
AudioState *audio = AUD_init();
PCSpkState *s = &pcspk_state; PCSpkState *s = &pcspk_state;
struct audsettings as = {PCSPK_SAMPLE_RATE, 1, AUD_FMT_U8, 0}; struct audsettings as = {PCSPK_SAMPLE_RATE, 1, AUD_FMT_U8, 0};
if (!audio) {
AUD_log(s_spk, "No audio state\n");
return -1;
}
AUD_register_card(audio, s_spk, &s->card); AUD_register_card(audio, s_spk, &s->card);
s->voice = AUD_open_out(&s->card, s->voice, s_spk, s, pcspk_callback, &as); s->voice = AUD_open_out(&s->card, s->voice, s_spk, s, pcspk_callback, &as);
......
...@@ -696,7 +696,6 @@ static void ppc_prep_init (ram_addr_t ram_size, int vga_ram_size, ...@@ -696,7 +696,6 @@ static void ppc_prep_init (ram_addr_t ram_size, int vga_ram_size,
} }
i8042_init(i8259[1], i8259[12], 0x60); i8042_init(i8259[1], i8259[12], 0x60);
DMA_init(1); DMA_init(1);
// AUD_init();
// SB16_init(); // SB16_init();
for(i = 0; i < MAX_FD; i++) { for(i = 0; i < MAX_FD; i++) {
......
...@@ -1398,18 +1398,14 @@ static int SB_load (QEMUFile *f, void *opaque, int version_id) ...@@ -1398,18 +1398,14 @@ static int SB_load (QEMUFile *f, void *opaque, int version_id)
return 0; return 0;
} }
int SB16_init (AudioState *audio, qemu_irq *pic) int SB16_init (qemu_irq *pic)
{ {
AudioState *audio = AUD_init();
SB16State *s; SB16State *s;
int i; int i;
static const uint8_t dsp_write_ports[] = {0x6, 0xc}; static const uint8_t dsp_write_ports[] = {0x6, 0xc};
static const uint8_t dsp_read_ports[] = {0x6, 0xa, 0xc, 0xd, 0xe, 0xf}; static const uint8_t dsp_read_ports[] = {0x6, 0xa, 0xc, 0xd, 0xe, 0xf};
if (!audio) {
dolog ("No audio state\n");
return -1;
}
s = qemu_mallocz (sizeof (*s)); s = qemu_mallocz (sizeof (*s));
s->cmd = -1; s->cmd = -1;
......
...@@ -740,12 +740,10 @@ static void spitz_i2c_setup(PXA2xxState *cpu) ...@@ -740,12 +740,10 @@ static void spitz_i2c_setup(PXA2xxState *cpu)
i2c_bus *bus = pxa2xx_i2c_bus(cpu->i2c[0]); i2c_bus *bus = pxa2xx_i2c_bus(cpu->i2c[0]);
#ifdef HAS_AUDIO #ifdef HAS_AUDIO
AudioState *audio;
i2c_slave *wm; i2c_slave *wm;
audio = AUD_init();
/* Attach a WM8750 to the bus */ /* Attach a WM8750 to the bus */
wm = wm8750_init(bus, audio); wm = wm8750_init(bus);
spitz_wm8750_addr(wm, 0, 0); spitz_wm8750_addr(wm, 0, 0);
pxa2xx_gpio_out_set(cpu->gpio, SPITZ_GPIO_WM, pxa2xx_gpio_out_set(cpu->gpio, SPITZ_GPIO_WM,
......
...@@ -684,8 +684,7 @@ static void tsc2102_audio_register_write( ...@@ -684,8 +684,7 @@ static void tsc2102_audio_register_write(
"wrong value written into Audio 1\n"); "wrong value written into Audio 1\n");
#endif #endif
tsc2102_audio_rate_update(s); tsc2102_audio_rate_update(s);
if (s->audio) tsc2102_audio_output_update(s);
tsc2102_audio_output_update(s);
return; return;
case 0x01: case 0x01:
...@@ -729,8 +728,7 @@ static void tsc2102_audio_register_write( ...@@ -729,8 +728,7 @@ static void tsc2102_audio_register_write(
"wrong value written into Power\n"); "wrong value written into Power\n");
#endif #endif
tsc2102_audio_rate_update(s); tsc2102_audio_rate_update(s);
if (s->audio) tsc2102_audio_output_update(s);
tsc2102_audio_output_update(s);
return; return;
case 0x06: /* Audio Control 3 */ case 0x06: /* Audio Control 3 */
...@@ -741,8 +739,7 @@ static void tsc2102_audio_register_write( ...@@ -741,8 +739,7 @@ static void tsc2102_audio_register_write(
fprintf(stderr, "tsc2102_audio_register_write: " fprintf(stderr, "tsc2102_audio_register_write: "
"wrong value written into Audio 3\n"); "wrong value written into Audio 3\n");
#endif #endif
if (s->audio) tsc2102_audio_output_update(s);
tsc2102_audio_output_update(s);
return; return;
case 0x07: /* LCH_BASS_BOOST_N0 */ case 0x07: /* LCH_BASS_BOOST_N0 */
...@@ -1105,7 +1102,7 @@ static int tsc210x_load(QEMUFile *f, void *opaque, int version_id) ...@@ -1105,7 +1102,7 @@ static int tsc210x_load(QEMUFile *f, void *opaque, int version_id)
return 0; return 0;
} }
uWireSlave *tsc2102_init(qemu_irq pint, AudioState *audio) uWireSlave *tsc2102_init(qemu_irq pint)
{ {
TSC210xState *s; TSC210xState *s;
...@@ -1120,7 +1117,7 @@ uWireSlave *tsc2102_init(qemu_irq pint, AudioState *audio) ...@@ -1120,7 +1117,7 @@ uWireSlave *tsc2102_init(qemu_irq pint, AudioState *audio)
s->pint = pint; s->pint = pint;
s->model = 0x2102; s->model = 0x2102;
s->name = "tsc2102"; s->name = "tsc2102";
s->audio = audio; s->audio = AUD_init();;
s->tr[0] = 0; s->tr[0] = 0;
s->tr[1] = 1; s->tr[1] = 1;
...@@ -1146,8 +1143,7 @@ uWireSlave *tsc2102_init(qemu_irq pint, AudioState *audio) ...@@ -1146,8 +1143,7 @@ uWireSlave *tsc2102_init(qemu_irq pint, AudioState *audio)
qemu_add_mouse_event_handler(tsc210x_touchscreen_event, s, 1, qemu_add_mouse_event_handler(tsc210x_touchscreen_event, s, 1,
"QEMU TSC2102-driven Touchscreen"); "QEMU TSC2102-driven Touchscreen");
if (s->audio) AUD_register_card(s->audio, s->name, &s->card);
AUD_register_card(s->audio, s->name, &s->card);
qemu_register_reset((void *) tsc210x_reset, s); qemu_register_reset((void *) tsc210x_reset, s);
register_savevm(s->name, -1, 0, register_savevm(s->name, -1, 0,
...@@ -1156,8 +1152,7 @@ uWireSlave *tsc2102_init(qemu_irq pint, AudioState *audio) ...@@ -1156,8 +1152,7 @@ uWireSlave *tsc2102_init(qemu_irq pint, AudioState *audio)
return &s->chip; return &s->chip;
} }
uWireSlave *tsc2301_init(qemu_irq penirq, qemu_irq kbirq, uWireSlave *tsc2301_init(qemu_irq penirq, qemu_irq kbirq, qemu_irq dav)
qemu_irq dav, AudioState *audio)
{ {
TSC210xState *s; TSC210xState *s;
...@@ -1174,7 +1169,7 @@ uWireSlave *tsc2301_init(qemu_irq penirq, qemu_irq kbirq, ...@@ -1174,7 +1169,7 @@ uWireSlave *tsc2301_init(qemu_irq penirq, qemu_irq kbirq,
s->davint = dav; s->davint = dav;
s->model = 0x2301; s->model = 0x2301;
s->name = "tsc2301"; s->name = "tsc2301";
s->audio = audio; s->audio = AUD_init();
s->tr[0] = 0; s->tr[0] = 0;
s->tr[1] = 1; s->tr[1] = 1;
...@@ -1200,8 +1195,7 @@ uWireSlave *tsc2301_init(qemu_irq penirq, qemu_irq kbirq, ...@@ -1200,8 +1195,7 @@ uWireSlave *tsc2301_init(qemu_irq penirq, qemu_irq kbirq,
qemu_add_mouse_event_handler(tsc210x_touchscreen_event, s, 1, qemu_add_mouse_event_handler(tsc210x_touchscreen_event, s, 1,
"QEMU TSC2301-driven Touchscreen"); "QEMU TSC2301-driven Touchscreen");
if (s->audio) AUD_register_card(s->audio, s->name, &s->card);
AUD_register_card(s->audio, s->name, &s->card);
qemu_register_reset((void *) tsc210x_reset, s); qemu_register_reset((void *) tsc210x_reset, s);
register_savevm(s->name, -1, 0, tsc210x_save, tsc210x_load, s); register_savevm(s->name, -1, 0, tsc210x_save, tsc210x_load, s);
......
...@@ -645,8 +645,9 @@ static int wm8750_load(QEMUFile *f, void *opaque, int version_id) ...@@ -645,8 +645,9 @@ static int wm8750_load(QEMUFile *f, void *opaque, int version_id)
return 0; return 0;
} }
i2c_slave *wm8750_init(i2c_bus *bus, AudioState *audio) i2c_slave *wm8750_init(i2c_bus *bus)
{ {
AudioState *audio = AUD_init();
WM8750State *s = (WM8750State *) WM8750State *s = (WM8750State *)
i2c_slave_init(bus, 0, sizeof(WM8750State)); i2c_slave_init(bus, 0, sizeof(WM8750State));
s->i2c.event = wm8750_event; s->i2c.event = wm8750_event;
......
...@@ -241,8 +241,8 @@ struct soundhw { ...@@ -241,8 +241,8 @@ struct soundhw {
int enabled; int enabled;
int isa; int isa;
union { union {
int (*init_isa) (AudioState *s, qemu_irq *pic); int (*init_isa) (qemu_irq *pic);
int (*init_pci) (PCIBus *bus, AudioState *s); int (*init_pci) (PCIBus *bus);
} init; } init;
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册