public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Laszlo Ersek <lersek@redhat.com>
To: "Cohen, Eugene" <eugene@hp.com>,
	"edk2-devel@lists.01.org" <edk2-devel@ml01.01.org>,
	"Kinney, Michael D" <michael.d.kinney@intel.com>,
	"Yao, Jiewen" <jiewen.yao@intel.com>,
	"Andrew Fish (afish@apple.com)" <afish@apple.com>
Subject: Re: RFC: ProtocolLib for cross DXE and SMM Protocol and Handle Services
Date: Fri, 30 Sep 2016 19:44:33 +0200	[thread overview]
Message-ID: <654a587b-8f79-51ef-8ba9-a29779de46c9@redhat.com> (raw)
In-Reply-To: <AT5PR84MB02913D5C767E5F2FAEDAA4E2B4C10@AT5PR84MB0291.NAMPRD84.PROD.OUTLOOK.COM>

On 09/30/16 18:36, Cohen, Eugene wrote:
> Laszlo,
> 
>> As far as I know:
>> - the DXE and SMM protocol databases are distinct,
>> - the same protocol GUID may or may not be installed (on one or more)
>> handle(s) in either,
>> - even if a protocol GUID exists uniquely in exactly one of those databases,
>> the locator function would have to return which database the GUID was
>> found.
>>
>> My point is that every wrapper function that returns a protocol interface (or
>> several protocol interfaces), or handles, each such return value will likely
>> have to be qualified with the database where it was found.
> 
> The intent here is to only search the UEFI DB from a DXE/UEFI driver
> and the SMM DB from an SMM driver and not to cross between.  So which
> protocol DB is searched is purely a function of the module type (i.e.
> what instance of the ProtocolLib it was linked against).  This is
> analogous to what is done with MemoryAllocationLib which either
> allocates from the UEFI memory pools for UEFI/DXE modules
> (UefiMemoryAllocationLib instance) or from the SMM memory pools for
> SMM modules (SmmMemoryAllocationLib).
> 
> Sorry I wasn't more clear initially.

I believe I understood this. However, in the entry point function of an
SMM driver, it is permitted to look for, and invoke member functions of,
both SMM and DXE protocols [1]. If the library instance that is supposed
to be linked into SMM drivers is tied to the SMM protocol database
solely, then it won't be able to serve the use case when an SMM driver
looks for a DXE protocol in its entry point function.

(Note I'm not speaking about "Combination SMM/DXE Drivers", just purely
SMM drivers.)

[1] "Vol4_SMM_1_4_Errata_A.pdf", section "1.7 SMM Driver Initialization":

    During SMM Driver initialization, SMM Drivers have access to two
    sets of protocols: UEFI and SMM. UEFI protocols are those which are
    installed and discovered using the UEFI Boot Services. UEFI
    protocols can be located and used by SMM drivers only during SMM
    Initialization. SMM protocols are those which are installed and
    discovered using the System Management Services Table (SMST). SMM
    protocols can be discovered by SMM drivers during initialization
    time and accessed while inside of SMM.

    [...]

... Actually, I believe this applies even to MemoryAllocationLib. In an
SMM driver, the SMM-tailored MemoryAllocationLib instance only allocates
SMRAM, which is mostly fine. However, it is unsuitable for allocating
(for example) EfiBootServicesData type memory, even though that too is
permitted in the SMM driver's entry point function, I think. For that,
gBS->AllocatePool() or gBS->AllocatePages() have to be called explicitly.

Thanks
Laszlo


  parent reply	other threads:[~2016-09-30 17:44 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-30 14:13 RFC: ProtocolLib for cross DXE and SMM Protocol and Handle Services Cohen, Eugene
2016-09-30 14:25 ` Laszlo Ersek
2016-09-30 16:36   ` Cohen, Eugene
2016-09-30 16:41     ` Tim Lewis
2016-09-30 16:51       ` Cohen, Eugene
2016-09-30 16:55         ` Tim Lewis
2016-09-30 17:02           ` Cohen, Eugene
2016-09-30 17:44     ` Laszlo Ersek [this message]
2016-09-30 22:04       ` Cohen, Eugene
2016-10-09  1:49         ` Gao, Liming
2016-10-10 15:24           ` Cohen, Eugene
2016-10-10 15:54             ` Kinney, Michael D
2016-10-10 16:23               ` Cohen, Eugene
2016-10-10 17:50                 ` Kinney, Michael D
2016-10-10 20:11                   ` Cohen, Eugene
2016-10-10 20:39                     ` Kinney, Michael D
2016-10-11 15:17                       ` Cohen, Eugene
2016-10-11 16:37                         ` Kinney, Michael D

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=654a587b-8f79-51ef-8ba9-a29779de46c9@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