public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Ethin Probst" <harlydavidsen@gmail.com>
To: Andrew Fish <afish@apple.com>
Cc: devel@edk2.groups.io, Leif Lindholm <leif@nuviainc.com>,
	 Laszlo Ersek <lersek@redhat.com>,
	 "Desimone, Nathaniel L" <nathaniel.l.desimone@intel.com>,
	 Rafael Rodrigues Machado <rafaelrodrigues.machado@gmail.com>,
	Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [edk2-devel] VirtIO Sound Driver (GSoC 2021)
Date: Tue, 13 Apr 2021 18:47:31 -0500	[thread overview]
Message-ID: <CAJQtwF0jAkJM1JX6OVoUT5kOkEZoHPDJXCPT-TS+ojfn=3Di4g@mail.gmail.com> (raw)
In-Reply-To: <BE3D8FA9-1BFE-43C3-B69F-38A44EA36ACE@apple.com>

Hi Andrew,

The developer guide for EDK2 drivers is a godsend. Thank you very
much, and thank you, Mike, for your excellent work on the guide! I may
just ahve to do my building on Linux and not Windows -- unless the Bug
-- bug 3302 -- has been fixed. I'll have to do testing on Linux, at
any rate, since Windows hosts do not support VirtIO emulation and I
can't seem to find any way of emulating them in a guest machine with
Windows as a host.

On 4/13/21, Andrew Fish <afish@apple.com> wrote:
>
>
>> On Apr 13, 2021, at 9:53 AM, Ethin Probst <harlydavidsen@gmail.com>
>> wrote:
>>
>> Would it be possible for us to conduct discussion on the UEFI talkbox?
>> I don't mind using email, but things could definitely get moving
>> quicker over there (though its not a requirement obviously).
>>
>
> Sure, don’t think I’ve really used that but as long as I get pointed int he
> right direction I can make it work.
>
> For a device driver the general UEFI model is for the Entry point of the
> driver to publish a EFI_DRIVER_BINDING_PROTOCOL[1]. The Supported() function
> matches on the PCI devices. The Start() function installs the Protocols to
> do work, and the Stop() undoes the Start().
>
> Mike Kinney started this back in the day and it describes how to write UEFI
> drivers:
> https://github.com/tianocore/tianocore.github.io/wiki/UEFI-Driver-Writer%27s-Guide
>
> [1]https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Protocol/DriverBinding.h#L157
>
> Thanks,
>
> Andrew Fish
>
>> Here's how I generally envision the driver functioning:
>>
>> 1. Firmware/platform code calls InitaudioOutput() or something like
>> it. This function scans the PCIe bus and scans for one of the
>> following:
>> - Vendor ID 0x1AF4, device ID 0x1059: VirtIO sound device
>> - PCI class 0x0C, subclass 0x03, program interface 0x30 or 0x40: for
>> USB audio interface (I'm only thinking of targeting XHCI and USB 4,
>> and not UHCI, OHCI or EHCI). But maybe EDK2 will take that out of my
>> hands. If so, it will make things easier.
>> - For USB audio devices I'm not quite sure what to look for; I'm
>> definitely unused to USB.
>> 2. If any of the above cases are found, appropriate driver
>> initialization occurs. Since for the time being I am solely focusing
>> on VirtIO sound devices, the VirtIO general initialization sequence
>> will occur as outlined in sec. 3 of the VirtIO specification available
>> at https://www.kraxel.org/virtio/virtio-v1.1-cs01-sound-v7.html
>> <https://www.kraxel.org/virtio/virtio-v1.1-cs01-sound-v7.html>.
>> As for actual protocol exposure that would be spec-worthy, for
>> EFI_AUDIO_OUTPUT_PROTOCOL, I'm not quite sure what to expose. VirtIO
>> is rather simple: there's a buffer for sending and receiving audio
>> data in PCM streams. So for that we could expose a Reset(),
>> RemapJack(), GetJackConfig(), GetPcmConfig(), SetPcmParams(),
>> Prepare(), Release(), Start(), and Stop() function for the
>> corresponding request types VIRTIO_SND_R_JACK_GET_CONFIG,
>> VIRTIO_SND_R_JACK_REMAP, VIRTIO_SND_R_PCM_GET_CONFIG,
>> VIRTIO_SND_R_PCM_SET_PARAMS, VIRTIO_SND_R_PCM_PREPARE,
>> VIRTIO_SND_R_PCM_RELEASE, VIRTIO_SND_R_PCM_START, and
>> VIRTIO_SND_R_PCM_STOP control requests. However, for HDA things are a
>> lot more complex, so I'm not sure how that should work.
>> For VirtIO -- which is what I'll focus on for now -- everything is
>> described, in excellent detail, in sec. 5.14 of the above-linked
>> document. What are your guys's thoughts thus far and how should
>> everything be mapped to UEFI interfaces?
>>
>> On 4/13/21, Andrew Fish <afish@apple.com <mailto:afish@apple.com>> wrote:
>>> Leif,
>>>
>>> Since I have put some brain cells around this area in the past I can be
>>> the
>>> backup and help out too.
>>>
>>> I’d also point out if you are having issues building or have general
>>> questions on how things work it is fine to use the mailing list. I’ve got
>>> a
>>> lot of feedback that folks read or search the mailing list looking for
>>> answer to their questions so one person asking can help out a lot of
>>> other
>>> people.
>>>
>>> Thanks,
>>>
>>> Andrew Fish
>>>
>>>> On Apr 13, 2021, at 5:28 AM, Leif Lindholm <leif@nuviainc.com> wrote:
>>>>
>>>> Hi all, especially Ethin.
>>>>
>>>> Apologies for radio silence - last week I was off on holiday, and
>>>> before
>>>> that ... let's just say corporate acquisitions generate some
>>>> distractions.
>>>> Anyway, I'm back, and since I'm down as the mentor for this task, feel
>>>> free to spam me with any remaining/new questions.
>>>>
>>>> /
>>>>    Leif
>>>>
>>>> On Tue, Apr 6, 2021 at 4:17 PM Ethin Probst <harlydavidsen@gmail.com
>>>> <mailto:harlydavidsen@gmail.com <mailto:harlydavidsen@gmail.com>>>
>>>> wrote:
>>>> I'll attach the bug for the build tools to the BZ shortly.
>>>> Laszlo, thanks for that. I don't know their email addresses though.
>>>> And yes, I was going to make it device independent, as the majority
>>>> (if not all) of UEFI protocols are.
>>>>
>>>> On 4/6/21, Laszlo Ersek <lersek@redhat.com <mailto:lersek@redhat.com>
>>>> <mailto:lersek@redhat.com <mailto:lersek@redhat.com>>>
>>>> wrote:
>>>>> On 03/31/21 08:41, Nate DeSimone wrote:
>>>>>> Another option is to put the protocol definition in MdeModulePkg and
>>>>>> mark it with the EDKII_ prefix. For my last “code first” UEFI spec
>>>>>> contribution I did this with the PPI that added up getting added.
>>>>>
>>>>> The new audio protocol should be generic, only its implementation in
>>>>> question should be virtio specific.
>>>>>
>>>>> Please include Gerd Hoffmann (CC'd) in the protocol design, as well as
>>>>> the developers of the virtio-sound device model in QEMU.
>>>>>
>>>>> Thanks
>>>>> Laszlo
>>>>>
>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> Nate
>>>>>>
>>>>>>
>>>>>>
>>>>>> *From: *<devel@edk2.groups.io <mailto:devel@edk2.groups.io>
>>>>>> <mailto:devel@edk2.groups.io <mailto:devel@edk2.groups.io>>> on
>>>>>> behalf
>>>>>> of "Andrew Fish via groups.io <http://groups.io/> <http://groups.io/
>>>>>> <http://groups.io/>>"
>>>>>> <afish=apple.com@groups.io <mailto:afish=apple.com@groups.io>
>>>>>> <mailto:apple.com@groups.io <mailto:apple.com@groups.io>>>
>>>>>> *Reply-To: *"devel@edk2.groups.io <mailto:devel@edk2.groups.io>
>>>>>> <mailto:devel@edk2.groups.io <mailto:devel@edk2.groups.io>>"
>>>>>> <devel@edk2.groups.io <mailto:devel@edk2.groups.io>
>>>>>> <mailto:devel@edk2.groups.io <mailto:devel@edk2.groups.io>>>,
>>>>>> "afish@apple.com <mailto:afish@apple.com> <mailto:afish@apple.com
>>>>>> <mailto:afish@apple.com>>" <afish@apple.com <mailto:afish@apple.com>
>>>>>> <mailto:afish@apple.com <mailto:afish@apple.com>>>
>>>>>> *Date: *Tuesday, March 30, 2021 at 10:54 PM
>>>>>> *To: *edk2-devel-groups-io <devel@edk2.groups.io
>>>>>> <mailto:devel@edk2.groups.io>
>>>>>> <mailto:devel@edk2.groups.io <mailto:devel@edk2.groups.io>>>,
>>>>>> "harlydavidsen@gmail.com <mailto:harlydavidsen@gmail.com>
>>>>>> <mailto:harlydavidsen@gmail.com <mailto:harlydavidsen@gmail.com>>"
>>>>>> <harlydavidsen@gmail.com <mailto:harlydavidsen@gmail.com>
>>>>>> <mailto:harlydavidsen@gmail.com <mailto:harlydavidsen@gmail.com>>>
>>>>>> *Cc: *Rafael Rodrigues Machado <rafaelrodrigues.machado@gmail.com
>>>>>> <mailto:rafaelrodrigues.machado@gmail.com>
>>>>>> <mailto:rafaelrodrigues.machado@gmail.com
>>>>>> <mailto:rafaelrodrigues.machado@gmail.com>>>
>>>>>> *Subject: *Re: [edk2-devel] VirtIO Sound Driver (GSoC 2021)
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>    On Mar 30, 2021, at 5:01 PM, Ethin Probst <harlydavidsen@gmail.com
>>>>>> <mailto:harlydavidsen@gmail.com>
>>>>>> <mailto:harlydavidsen@gmail.com <mailto:harlydavidsen@gmail.com>>
>>>>>>    <mailto:harlydavidsen@gmail.com <mailto:harlydavidsen@gmail.com>
>>>>>> <mailto:harlydavidsen@gmail.com <mailto:harlydavidsen@gmail.com>>>>
>>>>>> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>    I'm wondering where exactly I should add the VirtIO sound
>>>>>> protocol.
>>>>>> I
>>>>>>    just familiarized myself with the build system and am about to
>>>>>> test
>>>>>> it
>>>>>>    by building OVMF if possible, but I'm wondering where I should
>>>>>>    actually put the protocol and all that stuff. Maybe there's
>>>>>>    documentation I've missed as well.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Ethin,
>>>>>>
>>>>>>
>>>>>>
>>>>>> For the driver I’d match the patter of OVMF [1] and use
>>>>>> OvmfPkg/VirtioSoundDxe/. Maybe even use one of the other drivers as a
>>>>>> template.
>>>>>>
>>>>>>
>>>>>>
>>>>>> The protocol is more of a public thing. I think eventually we would
>>>>>> like
>>>>>> to publish the protocol in the UEFI Spec (I can help with that part)
>>>>>> and
>>>>>> that would mean we put the Protocol definition in
>>>>>> MdePkg/Include/Protocol, but we don’t want to do that before it is
>>>>>> standardized as that causes compatibility issues. So this is a “code
>>>>>> first project” (code prototype and then contribute to the UEFI Forum
>>>>>> for
>>>>>> inclusion in the specification) so we need to follow some code first
>>>>>> rules that I don’t remember of the top of my head? So why not start
>>>>>> out
>>>>>> the protocol definition OvmfPkg/Include/Protocol. You can also add a
>>>>>> test application looks like you can just use the root [2] of OVMF for
>>>>>> that. That way the project is not blocked.
>>>>>>
>>>>>>
>>>>>>
>>>>>> We can have a conversation on the mailing list about better places to
>>>>>> put stuff, and it should be easy enough to move stuff around if
>>>>>> everything else is working.
>>>>>>
>>>>>>
>>>>>>
>>>>>> [1] find OvmfPkg  -iname '*Virtio*.inf'
>>>>>>
>>>>>> OvmfPkg/VirtioPciDeviceDxe/VirtioPciDeviceDxe.inf
>>>>>>
>>>>>> OvmfPkg/VirtioScsiDxe/VirtioScsi.inf
>>>>>>
>>>>>> OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceLib.inf
>>>>>>
>>>>>> OvmfPkg/Library/VirtioLib/VirtioLib.inf
>>>>>>
>>>>>> OvmfPkg/VirtioGpuDxe/VirtioGpu.inf
>>>>>>
>>>>>> OvmfPkg/VirtioBlkDxe/VirtioBlk.inf
>>>>>>
>>>>>> OvmfPkg/Virtio10Dxe/Virtio10.inf
>>>>>>
>>>>>> OvmfPkg/VirtioNetDxe/VirtioNet.inf
>>>>>>
>>>>>> OvmfPkg/VirtioRngDxe/VirtioRng.inf
>>>>>>
>>>>>>
>>>>>>
>>>>>> [2] /Volumes/Case/edk2-github/OvmfPkg>git grep APPLICATION -- *.inf |
>>>>>> grep MODULE_TYPE
>>>>>>
>>>>>> EnrollDefaultKeys/EnrollDefaultKeys.inf:13:  MODULE_TYPE
>>>>>>    = UEFI_APPLICATION
>>>>>>
>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>>
>>>>>>
>>>>>> Andrew Fish
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>    On 3/30/21, Ethin Probst via groups.io <http://groups.io/>
>>>>>> <http://groups.io/ <http://groups.io/>>
>>>>>> <http://groups.io/ <http://groups.io/> <http://groups.io/
>>>>>> <http://groups.io/>>>
>>>>>>    <harlydavidsen=gmail.com@groups.io
>>>>>> <mailto:harlydavidsen=gmail.com@groups.io> <mailto:gmail.com@groups.io
>>>>>> <mailto:gmail.com@groups.io>>
>>>>>>    <mailto:harlydavidsen <mailto:harlydavidsen>=gmail.com@groups.io
>>>>>> <mailto:gmail.com@groups.io>
>>>>>> <mailto:gmail.com@groups.io <mailto:gmail.com@groups.io>>>> wrote:
>>>>>>
>>>>>>        I agree. Plus, it gives me a chance to finally learn the EDK2
>>>>>> build
>>>>>>        system and how it works! I've been working on a hobby OS as a
>>>>>> side
>>>>>>        project and, though learning from other code examples from
>>>>>> OSes
>>>>>> is
>>>>>>        fun, I have to say that learning from the firmware code like
>>>>>> from
>>>>>>        SeaBIOS has been some of the most enlightening and interesting
>>>>>> times
>>>>>>        thus far.
>>>>>>        Thanks for the link to your code, Rafael; once I get virtIO
>>>>>> support
>>>>>>        in, I can work on HDA support, though I might tackle USB
>>>>>> support
>>>>>>        second and HDA third. We'll see, but VirtIO definitely is
>>>>>> coming
>>>>>>        first.
>>>>>>
>>>>>>        As I said before, I look forward to working with all of you
>>>>>>        wonderful
>>>>>>        people!
>>>>>>
>>>>>>        On 3/30/21, Rafael Rodrigues Machado
>>>>>>        <rafaelrodrigues.machado@gmail.com
>>>>>> <mailto:rafaelrodrigues.machado@gmail.com>
>>>>>> <mailto:rafaelrodrigues.machado@gmail.com
>>>>>> <mailto:rafaelrodrigues.machado@gmail.com>>
>>>>>>        <mailto:rafaelrodrigues.machado@gmail.com
>>>>>> <mailto:rafaelrodrigues.machado@gmail.com>
>>>>>> <mailto:rafaelrodrigues.machado@gmail.com
>>>>>> <mailto:rafaelrodrigues.machado@gmail.com>>>>
>>>>>>        wrote:
>>>>>>
>>>>>>            This would be amazing so people can continue my work
>>>>>> related
>>>>>> to
>>>>>>            accessibility at BIOS. Something desired by the blind
>>>>>> people
>>>>>>            since the
>>>>>>            90's
>>>>>>            Just for reference, this is what I have done:
>>>>>>
>>>>>>
>>>>>> https://github.com/RafaelRMachado/Msc_UefiHda_PreOs_Accessibility
>>>>>> <https://github.com/RafaelRMachado/Msc_UefiHda_PreOs_Accessibility>
>>>>>> <https://github.com/RafaelRMachado/Msc_UefiHda_PreOs_Accessibility
>>>>>> <https://github.com/RafaelRMachado/Msc_UefiHda_PreOs_Accessibility>>
>>>>>>
>>>>>>            Thanks
>>>>>>            Rafael
>>>>>>
>>>>>>            Em seg, 29 de mar de 2021 20:24, Ethin Probst
>>>>>>            <harlydavidsen@gmail.com <mailto:harlydavidsen@gmail.com>
>>>>>> <mailto:harlydavidsen@gmail.com <mailto:harlydavidsen@gmail.com>>>
>>>>>>            escreveu:
>>>>>>
>>>>>>
>>>>>>                Hello everyone,
>>>>>>
>>>>>>                This is the first time I've ever contributed to EDK2.
>>>>>> As
>>>>>>                part of GSoC
>>>>>>                2021, I have submitted a proposal to implement a UEFI
>>>>>>                audio output
>>>>>>                protocol that will utilize the VirtIO sound driver.
>>>>>> I've
>>>>>>                already
>>>>>>                submitted a draft proposal, and apologize if I've done
>>>>>>                things out of
>>>>>>                order. This is my first time doing GSoC 2021, and
>>>>>>                contributing to EDK2
>>>>>>                felt like a really fun thing to do!
>>>>>>
>>>>>>                I look forward to working with you guys on this and
>>>>>> any
>>>>>>                future projects!
>>>>>>                :-)
>>>>>>
>>>>>>                --
>>>>>>                Signed,
>>>>>>                Ethin D. Probst
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>        --
>>>>>>        Signed,
>>>>>>        Ethin D. Probst
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>    --
>>>>>>    Signed,
>>>>>>    Ethin D. Probst
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Signed,
>>>> Ethin D. Probst
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>> --
>> Signed,
>> Ethin D. Probst
>>
>>
>> 
>
>


-- 
Signed,
Ethin D. Probst

  reply	other threads:[~2021-04-13 23:47 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-29 20:28 VirtIO Sound Driver (GSoC 2021) Ethin Probst
2021-03-30  3:17 ` [edk2-devel] " Nate DeSimone
2021-03-30 14:41   ` Ethin Probst
2021-03-31  6:34     ` Nate DeSimone
2021-03-30 21:50 ` Rafael Machado
2021-03-30 22:12   ` Ethin Probst
     [not found]   ` <16713E6D64EE917D.25648@groups.io>
2021-03-31  0:01     ` Ethin Probst
2021-03-31  5:02       ` Andrew Fish
2021-03-31  6:41         ` Nate DeSimone
2021-04-01  5:05           ` Ethin Probst
2021-04-05  4:42             ` Andrew Fish
2021-04-05  4:43               ` Ethin Probst
2021-04-05  5:10                 ` Andrew Fish
2021-04-06 14:16           ` Laszlo Ersek
2021-04-06 15:17             ` Ethin Probst
2021-04-13 12:28               ` Leif Lindholm
2021-04-13 14:16                 ` Andrew Fish
2021-04-13 16:53                   ` Ethin Probst
2021-04-13 21:38                     ` Andrew Fish
2021-04-13 23:47                       ` Ethin Probst [this message]
     [not found]                       ` <16758FB6436B1195.32393@groups.io>
2021-04-14  1:20                         ` Ethin Probst
2021-04-14  3:52                           ` Andrew Fish
2021-04-14 20:47                             ` Ethin Probst
2021-04-14 22:30                               ` Michael D Kinney
2021-04-14 23:54                                 ` Andrew Fish
2021-04-15  4:01                                   ` Ethin Probst
2021-04-15  4:58                                     ` Andrew Fish
2021-04-15  5:28                                       ` Ethin Probst
2021-04-15 12:07                                         ` Michael Brown
2021-04-15 16:42                                           ` Andrew Fish
2021-04-15 20:11                                             ` Ethin Probst
2021-04-15 22:35                                               ` Andrew Fish
2021-04-15 23:42                                                 ` Ethin Probst
2021-04-16  0:59                                                   ` Michael Brown
2021-04-16  5:13                                                     ` Andrew Fish
2021-04-16  5:33                                                       ` Ethin Probst
2021-04-16 11:34                                                         ` Leif Lindholm
2021-04-16 17:03                                                           ` Andrew Fish
2021-04-16 17:45                                                             ` Ethin Probst
2021-04-16 17:55                                                               ` Ethin Probst
2021-04-16 18:09                                                                 ` Andrew Fish
2021-04-16 23:50                                                                   ` Ethin Probst
2021-04-16 18:02                                                               ` Andrew Fish
2021-04-17 16:51                                                               ` Marvin Häuser
2021-04-17 17:31                                                                 ` Andrew Fish
2021-04-17 18:04                                                                   ` Marvin Häuser
2021-04-18  8:55                                                                     ` Ethin Probst
2021-04-18 15:22                                                                       ` Andrew Fish
2021-04-18 19:11                                                                         ` Marvin Häuser
2021-04-18 19:22                                                                           ` Marvin Häuser
2021-04-18 21:00                                                                             ` Andrew Fish
2021-04-16 13:22                                                   ` Marvin Häuser
2021-04-16 14:34                                                     ` Andrew Fish
2021-04-16 15:03                                                       ` Marvin Häuser
     [not found]                                                 ` <16762C957671127A.12361@groups.io>
2021-04-16  0:59                                                   ` Ethin Probst
2021-04-16  1:03                                                     ` Michael Brown
2021-04-16  2:06                                                       ` Ethin Probst
2021-04-16  3:48                                                       ` Andrew Fish
2021-04-16  4:29                                                         ` Ethin Probst
2021-04-15  9:51                                     ` Laszlo Ersek
2021-04-15 16:01                                       ` Andrew Fish
2021-04-04 22:05 ` Marvin Häuser

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAJQtwF0jAkJM1JX6OVoUT5kOkEZoHPDJXCPT-TS+ojfn=3Di4g@mail.gmail.com' \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox