Hi all,
So Leif and I have been working on USB Audio but we've run into a snag. We've 
encountered a problem -- neither of us knows enough about USB to figure out how 
to get the class-specific AC interface descriptors, and those contain vital 
information that I need to be able to control the audio device. The audio 
specification was quite useless. So I have two projects running in parallel: 
the USB audio one and the VirtIO audio (We managed to get the virtio-snd 
patchset in qemu and I've got a built version of it over here and, though its 
not a fully working implementation, as long as I get something -- no matter how 
bad it sounds -- I'll be happy). Whichever project we get working first is the 
one we move forward with.
The VirtIO sound device specification contains four virtqueues: the control 
queue for controlling the device; the event queue for receiving notifications 
from the device; the tx queue for transmitting audio data to the device; and 
the rx queue for receiving audio data from the device. Thus far I've been 
following the VirtioRngDxe code as a guide on how to get a VirtIO device 
initialized using the VirtioLib in OVMF, but I've reached an impasse regarding 
the queues and descriptors.

The VirtioRngDxe DXE uses a single descriptor and a single queue for operation. 
However, the RNG device works vastly differently to the audio device and is far 
simpler. The virtio-snd specification says that, to initialize the device, I 
must (copied from the spec):

* Configure the control, event, tx and rx queues.
* Read the jacks field and send a control request to query information about 
the available jacks.
* Read the streams field and send a control request to query information about 
the available PCM streams.
* Read the chmaps field and send a control request to query information about 
the available channel maps.
* Populate the event queue with empty buffers.

Steps 2, 3, 4, and 5 are a bit confusing and raise some questions:

1. Does the device automatically send notifications in the event queue about 
the jacks, streams, and channel maps, or do I have to explicitly ask for them?
2. How many buffers would we need to populate the event queue with, and what 
VirtioLib function (if any) specifically accomplishes that?


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#77382): https://edk2.groups.io/g/devel/message/77382
Mute This Topic: https://groups.io/mt/83904983/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to