<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="blue" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Question (since it’s been brought up): when *<b>wouldn’t</b>* you use EFI_*? They’re clearly superior in every way. I mean, they’ve got EFI right in the name.</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- Bret <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="border:none;padding:0in"><b>From: </b><a href="mailto:jiewen.yao=intel.com@groups.io">Yao, Jiewen via groups.io</a><br>
<b>Sent: </b>Friday, August 28, 2020 5:20 PM<br>
<b>To: </b><a href="mailto:lersek@redhat.com">Laszlo Ersek</a>; <a href="mailto:devel@edk2.groups.io">
devel@edk2.groups.io</a>; <a href="mailto:qi1.zhang@intel.com">Zhang, Qi1</a><br>
<b>Cc: </b><a href="mailto:jian.j.wang@intel.com">Wang, Jian J</a>; <a href="mailto:hao.a.wu@intel.com">
Wu, Hao A</a><br>
<b>Subject: </b>[EXTERNAL] Re: [edk2-devel] [PATCH] MdeModulePkg/Library: change TpmMeasurementLibNull to BASE library.</p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-bottom:12.0pt">Laszlo<br>
Good feedback.<br>
<br>
> The reason is that this change actually requires us to change the lib<br>
> class header too. Consider: the whole motivation for the patch is that a<br>
> client module that is more primitive than either a PEIM or a DXE_DRIVER<br>
> wants to consume the lib instance. That requires that the lib class<br>
> header be first consumable by the client module. And for that, the lib<br>
> class header must not declare the interface with EFI_xxx in the first<br>
> place, but with RETURN_xxx.<br>
<br>
[Jiewen] But I don’t think it is absolutely necessary to change EFI_xxx to RETURN_xxx in library class, just because a library instance could be PEI and DXE.<br>
<br>
EFI_xxx is legal for both PEI and DXE.<br>
<br>
That means, another way to fix the issue is to *add* PEIM and SEC to the LIBRARY_CLASS, instead of *remove* them.<br>
<br>
Thank you<br>
Yao Jiewen<br>
<br>
<br>
> -----Original Message-----<br>
> From: Laszlo Ersek <lersek@redhat.com><br>
> Sent: Saturday, August 29, 2020 6:59 AM<br>
> To: devel@edk2.groups.io; Zhang, Qi1 <qi1.zhang@intel.com><br>
> Cc: Wang, Jian J <jian.j.wang@intel.com>; Wu, Hao A <hao.a.wu@intel.com>;<br>
> Yao, Jiewen <jiewen.yao@intel.com><br>
> Subject: Re: [edk2-devel] [PATCH] MdeModulePkg/Library: change<br>
> TpmMeasurementLibNull to BASE library.<br>
> <br>
> On 08/28/20 19:17, Laszlo Ersek wrote:<br>
> > On 08/28/20 08:15, Qi Zhang wrote:<br>
> >> REF: <a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.tianocore.org%2Fshow_bug.cgi%3Fid%3D2940&amp;data=02%7C01%7Cbret.barkelew%40microsoft.com%7C7ae38c56bf854c2ea4c408d84bb147c7%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637342572075610295&amp;sdata=DEVDpeDBr5mTYuA0NdqgmGBUAdbQF1qDK2TuujmeSiQ%3D&amp;reserved=0">
https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.tianocore.org%2Fshow_bug.cgi%3Fid%3D2940&amp;data=02%7C01%7Cbret.barkelew%40microsoft.com%7C7ae38c56bf854c2ea4c408d84bb147c7%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637342572075610295&amp;sdata=DEVDpeDBr5mTYuA0NdqgmGBUAdbQF1qDK2TuujmeSiQ%3D&amp;reserved=0</a><br>
> >><br>
> >> TpmMeasurementLib includes DxeTpmMeasurementLib and<br>
> PeiTpmMeasurementLib.<br>
> >> So need to change TpmMeasurementLibNull to BASE library to avoid build<br>
> >>  error in some platform.<br>
> >><br>
> >> Signed-off-by: Qi Zhang <qi1.zhang@intel.com><br>
> >> Cc: Jian J Wang <jian.j.wang@intel.com><br>
> >> Cc: Hao A Wu <hao.a.wu@intel.com><br>
> >> Cc: Jiewen Yao <jiewen.yao@intel.com><br>
> >> ---<br>
> >>  .../Library/TpmMeasurementLibNull/TpmMeasurementLibNull.c   | 4 +++-<br>
> >>  .../Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf | 6 +++---<br>
> >>  2 files changed, 6 insertions(+), 4 deletions(-)<br>
> >><br>
> >> diff --git<br>
> a/MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.c<br>
> b/MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.c<br>
> >> index b9c5b68de8..ee3be62fc6 100644<br>
> >> ---<br>
> a/MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.c<br>
> >> +++<br>
> b/MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.c<br>
> >> @@ -1,11 +1,13 @@<br>
> >>  /** @file<br>
> >>    This library is used by other modules to measure data to TPM.<br>
> >><br>
> >> -Copyright (c) 2015, Intel Corporation. All rights reserved. <BR><br>
> >> +Copyright (c) 2015-2020, Intel Corporation. All rights reserved. <BR><br>
> >>  SPDX-License-Identifier: BSD-2-Clause-Patent<br>
> >><br>
> >>  **/<br>
> >><br>
> >> +#include <Uefi/UefiBaseType.h><br>
> >> +<br>
> >>  /**<br>
> >>    Tpm measure and log data, and extend the measurement result into a<br>
> specific PCR.<br>
> >><br>
> >> diff --git<br>
> a/MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.in<br>
> f<br>
> b/MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.in<br>
> f<br>
> >> index 61abcfa2ec..1db2c0d6a7 100644<br>
> >> ---<br>
> a/MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.in<br>
> f<br>
> >> +++<br>
> b/MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.in<br>
> f<br>
> >> @@ -1,7 +1,7 @@<br>
> >>  ## @file<br>
> >>  #  Provides NULL TPM measurement function.<br>
> >>  #<br>
> >> -# Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR><br>
> >> +# Copyright (c) 2015 - 2020, Intel Corporation. All rights reserved.<BR><br>
> >>  # SPDX-License-Identifier: BSD-2-Clause-Patent<br>
> >>  #<br>
> >>  ##<br>
> >> @@ -10,9 +10,9 @@<br>
> >>    INF_VERSION                    = 0x00010005<br>
> >>    BASE_NAME                      = TpmMeasurementLibNull<br>
> >>    FILE_GUID                      = 6DFD6E9F-9278-48D8-8F45-B6CFF2C2B69C<br>
> >> -  MODULE_TYPE                    = UEFI_DRIVER<br>
> >> +  MODULE_TYPE                    = BASE<br>
> >>    VERSION_STRING                 = 1.0<br>
> >> -  LIBRARY_CLASS                  = TpmMeasurementLib|DXE_DRIVER<br>
> DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER<br>
> >> +  LIBRARY_CLASS                  = TpmMeasurementLib<br>
> >>    MODULE_UNI_FILE                = TpmMeasurementLibNull.uni<br>
> >><br>
> >>  #<br>
> >><br>
> ><br>
> > (1) I agree this is a bugfix, and should be included in the stable tag.<br>
> ><br>
> ><br>
> > (2) The commit message makes zero sense to me, on the other hand. I<br>
> > don't understand how DxeTpmMeasurementLib and PeiTpmMeasurementLib<br>
> are<br>
> > relevant at all. I also don't understand how TpmMeasurementLib<br>
> > "includes" DxeTpmMeasurementLib and PeiTpmMeasurementLib.<br>
> ><br>
> > I guess the intent is to say that *some* of the known TpmMeasurementLib<br>
> > instances are PeiTpmMeasurementLib and DxeTpmMeasurementLib. I guess<br>
> > that would be a valid statement, but it's still irrelevant here.<br>
> ><br>
> > The issue here is that *all* Null instances (regardless of library<br>
> > class) should have MODULE_TYPE=BASE, so that they can be consumed by the<br>
> > broadest selection of client modules. This specific Null instance breaks<br>
> > that principle, and that's what the patch fixes.<br>
> ><br>
> > The fact that this particular Null instance happens to implement the<br>
> > TpmMeasurementLib class is irrelevant in this regard.<br>
> ><br>
> > Please update the commit message accordingly. (There is time for a<br>
> > repost, this patch certainly qualifies for both review and merging<br>
> > during the hard feature freeze.) Again, the bug we're fixing is that<br>
> > this is a Null instance that currently does not have MODULE_TYPE=BASE.<br>
> ><br>
> > (Removing the client type restrictions from the LIBRARY_CLASS line is<br>
> > correct, of course.)<br>
> ><br>
> ><br>
> > (3) The C file needs more changes. Because we're flipping the module<br>
> > type to BASE, we should replace the EFI_STATUS type and the EFI_xxx<br>
> > return values with RETURN_STATUS and RETURN_xxx, respectively.<br>
> ><br>
> ><br>
> > (4) Consequently, for RETURN_STATUS and RETURN_xxx, we should #include<br>
> > <Base.h>, rather than <Uefi/UefiBaseType.h>.<br>
> <br>
> I've been thinking more about this.<br>
> <br>
> Assume that we replace EFI_STATUS (and the constants) with RETURN_STATUS<br>
> (and RETURN_xxx) in this Null library instance.<br>
> <br>
> Then we'll have an interesting situation where this library instance<br>
> will no longer match the lib class header --<br>
> "MdeModulePkg/Include/Library/TpmMeasurementLib.h" will continue<br>
> declaring this function as returning EFI_STATUS.<br>
> <br>
> So what's the reason for that conflict?<br>
> <br>
> The reason is that this change actually requires us to change the lib<br>
> class header too. Consider: the whole motivation for the patch is that a<br>
> client module that is more primitive than either a PEIM or a DXE_DRIVER<br>
> wants to consume the lib instance. That requires that the lib class<br>
> header be first consumable by the client module. And for that, the lib<br>
> class header must not declare the interface with EFI_xxx in the first<br>
> place, but with RETURN_xxx.<br>
> <br>
> In turn, other implementations (instances) of the same lib class should<br>
> be updated to use RETURN_xxx. Luckily this lib class is small -- it's<br>
> just one function declaration.<br>
> <br>
> Importantly, call sites of TpmMeasureAndLogData() in PEIMs and<br>
> DXE_DRIVERs etc need not be touched, as assigning a RETURN_STATUS to an<br>
> EFI_STATUS variable (or checking with EFI_ERROR / ASSERT_EFI_ERROR) is<br>
> fine, not just technically, but conceptually too.<br>
> <br>
> Interestingly though, the BASE module in OpenBoardPkg for whose sake the<br>
> whole thing is being done, should use RETURN_STATUS only, not EFI_STATUS<br>
> -- being a BASE module, its own self should not use EFI_xxx, only<br>
> RETURN_xxx.<br>
> <br>
> <br>
> OK; I'll get off my soap box now. I don't want to blow up this patch to<br>
> modify a lib class header in MdeModulePkg during the hard feature<br>
> freeze. So just do whatever the MdeModulePkg maintainers / reviewers are<br>
> OK with, for now.<br>
> <br>
> But, for the next development cycle, I suggest that the return type and<br>
> return values of TpmMeasureAndLogData() be cleaned up (= be made<br>
> RETURN_xxx) in the lib class header, and in all of the instances. Again,<br>
> existent call sites in edk2 should need no changes. (The call site in<br>
> OpenBoardPkg like does, though.)<br>
> <br>
> <br>
> (5) Final point -- if we know that this is for OpenBoardPkg's sake, then<br>
> please don't say "some platform" in the commit message. Name<br>
> OpenBoardPkg, please.<br>
> <br>
> Thanks<br>
> Laszlo<br>
<br>
<br>
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>

<div width="1" style="color:white;clear:both">_._,_._,_</div>
<hr>
Groups.io Links:<p>


You receive all messages sent to this group.



<p>

<a target="_blank" href="https://edk2.groups.io/g/devel/message/64789">View/Reply Online (#64789)</a> |


  


|


  
    <a target="_blank" href="https://groups.io/mt/76468437/1813853">Mute This Topic</a>
  

| <a href="https://edk2.groups.io/g/devel/post">New Topic</a><br>



<br>

<a href="https://edk2.groups.io/g/devel/editsub/1813853">Your Subscription</a> |
<a href="mailto:devel+owner@edk2.groups.io">Contact Group Owner</a> |

<a href="https://edk2.groups.io/g/devel/unsub">Unsubscribe</a>

 [edk2-devel-archive@redhat.com]<br>
<div width="1" style="color:white;clear:both">_._,_._,_</div>