This patch series aims to implement the virtio sound card as defined in the virtio specs (v8). The specs can be found at the following github repo: https://github.com/oasis-tcs/virtio-spec
This patch series is not complete yet, but here is what's already been done: - The device is initialized properly and is recognized by the guest as a sound card device. - Output stream works but the output is very noisy. (Which is what I wanted coments on.) What remains to be done: - Input streams yet to be done. - The jacks are initialized with a default config, but they are not mapped to any streams for now. - Channel maps are yet to be implemented. I'd like to request some comments on the following points: - The output from the sound card is accompanied by periodic white noise. I do not know why this is happening. I tried debugging it by writing the buffers to a new wav file and sure enough the contents of the file were different at some places, but I couldn't find what must be causing it. (Relevant patches: #19, #20, #21 and #25.) What steps should I take for debugging this? - If I try and output a wav file of a different size, that sets the period_bytes to 4004, I get an assert failure in the object_unref function defined in qom/object.c. (Function defined on line #681, assert on line #690.) assert(obj->parent == NULL); I tried taking a look at the stack trace for when this failure happens. In the stacktrace I found out that this happened when QEMU was trying to unmap the out_sg from the VirtQueue element. This failure doesn't happen if I am using a different wav file, that sets the period_bytes to something else. (Relevant patches: #19, #20, #21 and #25.) What could be causing this problem? - What is the suggested way of waiting? When the driver issues the VIRTIO_SND_PCM_STOP ctrl command I want to wait for the buffers existing in tx vq to be consumed before closing the stream. Shreyansh Chouhan (27): virtio-snd: Add virtio sound header file virtio-snd: Add jack control structures virtio-snd: Add PCM control structures virtio-snd: Add chmap control structures virtio-snd: Add device implementation structures virtio-snd: Add PCI wrapper code for VirtIOSound virtio-snd: Add properties for class init virtio-snd: Add code for get config function virtio-snd: Add code for set config function virtio-snd: Add code for the realize function virtio-snd: Add macros for logging virtio-snd: Add control virtqueue handler virtio-snd: Add VIRTIO_SND_R_JACK_INFO handler virtio-snd: Add stub for VIRTIO_SND_R_JACK_REMAP handler virtio-snd: Add VIRTIO_SND_R_PCM_INFO handler virtio-snd: Add VIRITO_SND_R_PCM_SET_PARAMS handle virtio-snd: Add VIRTIO_SND_R_PCM_PREPARE handler virtio-snd: Add default configs to realize fn virtio-snd: Add callback for SWVoiceOut virtio-snd: Add VIRITO_SND_R_PCM_START handler virtio-snd: Add VIRTIO_SND_R_PCM_STOP handler virtio-snd: Add VIRTIO_SND_R_PCM_RELEASE handler virtio-snd: Replaced goto with if else virtio-snd: Add code to device unrealize function virtio-snd: Add tx vq and handler virtio-snd: Add event vq and a handler stub virtio-snd: Add rx vq and stub handler hw/audio/Kconfig | 5 + hw/audio/meson.build | 1 + hw/audio/virtio-snd.c | 1168 ++++++++++++++++++++++++++++++++ hw/virtio/meson.build | 1 + hw/virtio/virtio-snd-pci.c | 72 ++ include/hw/virtio/virtio-snd.h | 393 +++++++++++ 6 files changed, 1640 insertions(+) create mode 100644 hw/audio/virtio-snd.c create mode 100644 hw/virtio/virtio-snd-pci.c create mode 100644 include/hw/virtio/virtio-snd.h -- 2.25.1