static int milkymist_ac97_init(SysBusDevice *dev) { MilkymistAC97State *s = FROM_SYSBUS(typeof(*s), dev); struct audsettings as; sysbus_init_irq(dev, &s->crrequest_irq); sysbus_init_irq(dev, &s->crreply_irq); sysbus_init_irq(dev, &s->dmar_irq); sysbus_init_irq(dev, &s->dmaw_irq); AUD_register_card("Milkymist AC'97", &s->card); as.freq = 48000; as.nchannels = 2; as.fmt = AUD_FMT_S16; as.endianness = 1; s->voice_in = AUD_open_in(&s->card, s->voice_in, "mm_ac97.in", s, ac97_in_cb, &as); s->voice_out = AUD_open_out(&s->card, s->voice_out, "mm_ac97.out", s, ac97_out_cb, &as); memory_region_init_io(&s->regs_region, &ac97_mmio_ops, s, "milkymist-ac97", R_MAX * 4); sysbus_init_mmio(dev, &s->regs_region); return 0; }
void virtio_audio_init(VirtIOBindFn bind, void *bind_arg, AudioState *audio) { VirtIOAudio *s; int i; s = (VirtIOAudio *)bind(bind_arg, "virtio-audio", 0, VIRTIO_ID_AUDIO, sizeof(struct virtio_audio_cfg), sizeof(VirtIOAudio)); if (!s) return; s->vdev.get_config = virtio_audio_get_config; s->vdev.get_features = virtio_audio_get_features; s->vdev.set_features = virtio_audio_set_features; s->cmd_vq = virtio_add_queue(&s->vdev, VIRT_CONTROL_QUEUE_SIZE, virtio_audio_handle_cmd); for (i = 0; i < NUM_STREAMS; i++) { s->stream[i].data_vq = virtio_add_queue(&s->vdev, VIRT_DATA_QUEUE_SIZE, virtio_audio_handle_data); s->stream[i].dev = s; } AUD_register_card(audio, "virtio-audio", &s->card); register_savevm("virtio-audio", -1, 1, virtio_audio_save, virtio_audio_load, s); }
static void milkymist_ac97_realize(DeviceState *dev, Error **errp) { MilkymistAC97State *s = MILKYMIST_AC97(dev); struct audsettings as; AUD_register_card("Milkymist AC'97", &s->card); as.freq = 48000; as.nchannels = 2; as.fmt = AUD_FMT_S16; as.endianness = 1; s->voice_in = AUD_open_in(&s->card, s->voice_in, "mm_ac97.in", s, ac97_in_cb, &as); s->voice_out = AUD_open_out(&s->card, s->voice_out, "mm_ac97.out", s, ac97_out_cb, &as); }