public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Laszlo Ersek <lersek@redhat.com>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Michael Zimmermann <sigmaepsilon92@gmail.com>
Cc: "Ni, Ruiyu" <ruiyu.ni@intel.com>,
	edk2-devel-01 <edk2-devel@lists.01.org>,
	Andrew Fish <afish@apple.com>,
	Leif Lindholm <leif.lindholm@linaro.org>
Subject: Re: 'fastboot boot' TPL
Date: Wed, 28 Feb 2018 13:11:19 +0100	[thread overview]
Message-ID: <9c53a083-d56d-7523-fe62-b87d20c32a0e@redhat.com> (raw)
In-Reply-To: <CAKv+Gu8xMLpfrN8+cAdU4L=-EUVgCz+hkYNrULAmviTozb4-6g@mail.gmail.com>

On 02/28/18 09:19, Ard Biesheuvel wrote:
> On 28 February 2018 at 08:15, Michael Zimmermann
> <sigmaepsilon92@gmail.com> wrote:
>>> I agree. Did you run into any issues due to this?
>> Surprisingly no. I was just trying to understand the fastboot implementation
>> before I use it on my platform
>> and was surprised that this works at all. I can imagine that's because this
>> is supposed to load linux's efistub which probably doesn't do anything but
>> calling SetVirtualMemoryMap and ExitBootServices.
> 
> The ARM/Linux EFI stub does quite a bit more than that, actually. It
> uses the various memory allocation and protocol handling services, to
> carve out an allocation for the kernel, initrd and device tree, and to
> access the command line, the EFI_RNG_PROTOCOL (if available) and to
> interrogate the protocol database for GOP instances.
> 
>> I can imagine that more complex loaders like the one used for Windows
>> wouldn't work this way.
>>
> 
> No, and this is indeed something that should be fixed. Any clue as to how?

- Change the type of the event "ReceiveEvent" from EVT_NOTIFY_SIGNAL to
zero (0)

- remove the DataReady() function

- continue passing "ReceiveEvent" to mTransport->Start()

- in the WaitForEvent() call near the end of FastbootAppEntryPoint(),
also wait for "ReceiveEvent"

- whenever "ReceiveEvent" fires, implement the same logic as seen
originally in DataReady(), but now near the end of FastbootAppEntryPoint().

The idea -- already used with "mFinishedEvent" BTW -- is that an event
can have type 0, which means it can be signaled and waited for without
ever queueing a notification function (at either signaling or waiting).
So mTransport should continue signaling ReceiveEvent whenever data is
ready. But, readiness should be observed in the "main loop", and the
data should be read, parsed and acted upon in that context as well, not
in a callback.

Thanks,
Laszlo


      parent reply	other threads:[~2018-02-28 12:05 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-28  6:06 'fastboot boot' TPL Michael Zimmermann
2018-02-28  7:29 ` Ni, Ruiyu
2018-02-28  7:33   ` Michael Zimmermann
2018-02-28  7:42     ` Andrew Fish
2018-02-28  7:56       ` Michael Zimmermann
2018-02-28  8:10         ` Ard Biesheuvel
2018-02-28  8:15           ` Michael Zimmermann
2018-02-28  8:19             ` Ard Biesheuvel
2018-02-28 10:10               ` Michael Zimmermann
2018-02-28 12:11               ` Laszlo Ersek [this message]

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=9c53a083-d56d-7523-fe62-b87d20c32a0e@redhat.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