From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ua1-f41.google.com (mail-ua1-f41.google.com [209.85.222.41]) by mx.groups.io with SMTP id smtpd.web08.1237.1646954328739601077 for ; Thu, 10 Mar 2022 15:18:48 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20210112 header.b=Pc/5eKIM; spf=pass (domain: gmail.com, ip: 209.85.222.41, mailfrom: pedro.falcato@gmail.com) Received: by mail-ua1-f41.google.com with SMTP id f7so2992033uab.8 for ; Thu, 10 Mar 2022 15:18:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=6axW7Nk6p7eddHCgXKFDXW1X5af/2Tgy53ivxnANVtk=; b=Pc/5eKIMwPkBZukbFqZdMXrfm/Yppkiihr46ecCbSDIgj/qTpaY9P0Zh+Ks61dJKR/ UZVm+No9KCtEcAMkW4tOWuR1ckJNfzPPyy+v2eJMrVhAx72wYS3C2JgucB193JhAf41S nDu5twvpy2Zdvd02efNYF4HDHS2hlcVia9Q3QV3ks0OmIY6Slussfg6mS6UT6L8Rmtt2 w5GvZNT8HwsVIgZFqDSqlB969hFDwnHUajfpTjijV9TsE/a1gS2xRTAJb3W9WjD49ItS 3PMWl7Q17xC2fNfQTPbS14lBibNRzgTik+5MHk361Cp9Ws/4E1VI6SesfdHFiTaT3lND 7ZZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=6axW7Nk6p7eddHCgXKFDXW1X5af/2Tgy53ivxnANVtk=; b=wiCIWey+YERtbIGbrg5S07XfPZj4GBwpOmuKXovEtar8lMUarI6Dfw6ukNzBF6AigU MyYVwVlGxN6pFsz4KyG3G94C+aO8fmiY9QWTQ3J197EgTRohzyNovs5atolM7pc8CTVn ReIdth8n7CtGtYgaEeGBwsa7jRTmqdYlXDYEDEvCYA4SiBCKMB6DJcQdRe5lMwduOKPD 27bWdMqkmcSzy7jyL1stt6QBgF3OJ2fQ0/GDnVq6tn21juttwywkWYJQ0MrQhB5izOx4 93i0w3XoRpNQHDakW1BsBMn/NH+vZ1H3nvnlwrWbcjEcMOW4F/e7Q2bdwFRpSiqLmLo+ +YYQ== X-Gm-Message-State: AOAM533LcI6eGiLExKT21T03Ofy44TzLzMOXm/qZD7ol49F/zJixYTPO qCTNPvBBbqN4ErFSFwyTguNTs4KJU68krj/w7oAf8j1XkLZlTg== X-Google-Smtp-Source: ABdhPJxwsHG84hbFhAv6FVGF0d2SBSu54Ge3Nkm7N1axNYh4mrd8W5Q9fS/vTFzeftJY+hmPgdmHpLMAm+DimbXMvPU= X-Received: by 2002:ab0:25d2:0:b0:347:4f2:bbd0 with SMTP id y18-20020ab025d2000000b0034704f2bbd0mr3077667uan.105.1646954327514; Thu, 10 Mar 2022 15:18:47 -0800 (PST) MIME-Version: 1.0 References: <406972869595ac96cd402be7843f16b9e0534df9.1646951441.git.isaac.w.oram@intel.com> In-Reply-To: <406972869595ac96cd402be7843f16b9e0534df9.1646951441.git.isaac.w.oram@intel.com> From: "Pedro Falcato" Date: Thu, 10 Mar 2022 23:18:36 +0000 Message-ID: Subject: Re: [edk2-devel][edk2-platforms][PATCH V1 3/9] WhitleyOpenBoardPkg/BaseCrcLib: Add library for CRC16 To: edk2-devel-groups-io , isaac.w.oram@intel.com Cc: Nate DeSimone , Chasel Chiu Content-Type: multipart/alternative; boundary="000000000000a7231105d9e56fe1" --000000000000a7231105d9e56fe1 Content-Type: text/plain; charset="UTF-8" Hi, I've just noticed this patch adds CRC16, which I've already added to my Ext4Pkg ( https://github.com/tianocore/edk2-platforms/blob/master/Features/Ext4Pkg/Ext4Dxe/Crc16.c ). I suggest we add CRC16 (and possibly CRC32C, which I already have in my package as well) to MdePkg, as to de-duplicate code which might be useful in other places. What do you think? If it sounds good to you, I'll open a bugzilla and work on that. Best regards, Pedro On Thu, Mar 10, 2022 at 10:41 PM Oram, Isaac W wrote: > Core only supports CRC32, this library adds CRC16 support. > > Cc: Nate DeSimone > Cc: Chasel Chiu > Signed-off-by: Isaac Oram > --- > Platform/Intel/WhitleyOpenBoardPkg/Include/Library/CrcLib.h | 42 > ++++++++++++ > Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.c | 71 > ++++++++++++++++++++ > Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.inf | 23 > +++++++ > Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc | 1 > + > 4 files changed, 137 insertions(+) > > diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/CrcLib.h > b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/CrcLib.h > new file mode 100644 > index 0000000000..7ca3b7cabb > --- /dev/null > +++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/CrcLib.h > @@ -0,0 +1,42 @@ > +/** @file > + Interface header file for the CRC library class. > + > + @copyright > + Copyright 2016 - 2018 Intel Corporation.
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > +**/ > + > +#ifndef _CRC_LIB_H_ > +#define _CRC_LIB_H_ > + > +#include > + > +/** > + Calculate a 16-bit CRC. > + > + The algorithm used is MSB-first form of the ITU-T Recommendation V.41, > which > + uses an initial value of 0x0000 and a polynomial of 0x1021. It is the > same > + algorithm used by XMODEM. > + > + The output CRC location is not updated until the calculation is > finished, so > + it is possible to pass a structure as the data, and the CRC field of > the same > + structure as the output location for the calculated CRC. The CRC field > should > + be set to zero before calling this function. Once the CRC field is > updated by > + this function, running it again over the structure produces a CRC of > zero. > + > + @param[in] Data A pointer to the target data. > + @param[in] DataSize The target data size. > + @param[out] CrcOut A pointer to the return location of the > CRC. > + > + @retval EFI_SUCCESS The CRC was calculated successfully. > + @retval EFI_INVALID_PARAMETER A null pointer was provided. > +**/ > +EFI_STATUS > +CalculateCrc16 ( > + IN VOID *Data, > + IN UINTN DataSize, > + OUT UINT16 *CrcOut > + ); > + > +#endif // _CRC_LIB_H_ > diff --git > a/Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.c > b/Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.c > new file mode 100644 > index 0000000000..3e8fa402ad > --- /dev/null > +++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.c > @@ -0,0 +1,71 @@ > +/** @file > + Base implementation of the CRC library class. > + > + @copyright > + Copyright 2016 - 2018 Intel Corporation.
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > +**/ > + > +#include > +#include > + > +/** > + Calculate a 16-bit CRC. > + > + The algorithm used is MSB-first form of the ITU-T Recommendation V.41, > which > + uses an initial value of 0x0000 and a polynomial of 0x1021. It is the > same > + algorithm used by XMODEM. > + > + The output CRC location is not updated until the calculation is > finished, so > + it is possible to pass a structure as the data, and the CRC field of > the same > + structure as the output location for the calculated CRC. The CRC field > should > + be set to zero before calling this function. Once the CRC field is > updated by > + this function, running it again over the structure produces a CRC of > zero. > + > + @param[in] Data A pointer to the target data. > + @param[in] DataSize The target data size. > + @param[out] CrcOut A pointer to the return location of the > CRC. > + > + @retval EFI_SUCCESS The CRC was calculated successfully. > + @retval EFI_INVALID_PARAMETER A null pointer was provided. > +**/ > +EFI_STATUS > +CalculateCrc16 ( > + IN VOID *Data, > + IN UINTN DataSize, > + OUT UINT16 *CrcOut > + ) > +{ > + UINT32 Crc; > + UINTN Index; > + UINT8 *Byte; > + > + if (Data == NULL || CrcOut == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + Crc = 0x0000; > + for (Byte = (UINT8 *) Data; Byte < (UINT8 *) Data + DataSize; Byte++) { > + // > + // XOR the next data byte into the CRC. > + // > + Crc ^= (UINT16) *Byte << 8; > + // > + // Shift out eight bits, feeding back based on the polynomial > whenever a > + // 1 is shifted out of bit 15. > + // > + for (Index = 0; Index < 8; Index++) { > + Crc <<= 1; > + if (Crc & BIT16) { > + Crc ^= 0x1021; > + } > + } > + } > + > + // > + // Mask and return the 16-bit CRC. > + // > + *CrcOut = (UINT16) (Crc & 0xFFFF); > + return EFI_SUCCESS; > +} > diff --git > a/Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.inf > b/Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.inf > new file mode 100644 > index 0000000000..6b404e1259 > --- /dev/null > +++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.inf > @@ -0,0 +1,23 @@ > +## @file > +# Base implementation of the CRC library class. > +# > +# @copyright > +# Copyright 2016 Intel Corporation.
> +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +## > + > +[Defines] > + INF_VERSION = 0x00010019 > + BASE_NAME = BaseCrcLib > + FILE_GUID = F3BE9A28-78A2-4B02-AB26-D27EE85D9256 > + MODULE_TYPE = BASE > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = CrcLib > + > +[Sources] > + BaseCrcLib.c > + > +[Packages] > + MdePkg/MdePkg.dec > + WhitleyOpenBoardPkg/PlatformPkg.dec > diff --git a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc > b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc > index e78a104004..9cdb5bc2f6 100644 > --- a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc > +++ b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc > @@ -618,6 +618,7 @@ > > PciSegmentInfoLib|$(PLATFORM_PKG)/Pci/Library/PciSegmentInfoLibSimple/PciSegmentInfoLibSimple.inf > > PlatformOpromPolicyLib|$(RP_PKG)/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.inf > VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf > + CrcLib|WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.inf > > [LibraryClasses.Common.SEC, LibraryClasses.Common.PEI_CORE, > LibraryClasses.Common.PEIM] > > FspWrapperApiLib|IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/BaseFspWrapperApiLib.inf > -- > 2.27.0.windows.1 > > > > > > > -- Pedro Falcato --000000000000a7231105d9e56fe1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

I've just noticed th= is patch adds CRC16, which I've already added to my Ext4Pkg (https://github.com/tianocore/edk2-platforms/blob/master/Fea= tures/Ext4Pkg/Ext4Dxe/Crc16.c).
I suggest we add CRC16 (and p= ossibly CRC32C, which I already have in my package as well) to MdePkg, as t= o de-duplicate code which might be useful in other places.
What d= o you think? If it sounds good to you, I'll open a bugzilla and work on= that.

Best regards,
Pedro

On T= hu, Mar 10, 2022 at 10:41 PM Oram, Isaac W <isaac.w.oram@intel.com> wrote:
Core only supports CRC32, this library = adds CRC16 support.

Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Signed-off-by: Isaac Oram <isaac.w.oram@intel.com>
---
=C2=A0Platform/Intel/WhitleyOpenBoardPkg/Include/Library/CrcLib.h=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 | 42 ++++++++++++
=C2=A0Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.c=C2= =A0 =C2=A0| 71 ++++++++++++++++++++
=C2=A0Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.inf = | 23 +++++++
=C2=A0Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 1 +
=C2=A04 files changed, 137 insertions(+)

diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/CrcLib.h b/= Platform/Intel/WhitleyOpenBoardPkg/Include/Library/CrcLib.h
new file mode 100644
index 0000000000..7ca3b7cabb
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/CrcLib.h
@@ -0,0 +1,42 @@
+/** @file
+=C2=A0 Interface header file for the CRC library class.
+
+=C2=A0 @copyright
+=C2=A0 Copyright 2016 - 2018 Intel Corporation. <BR>
+
+=C2=A0 SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _CRC_LIB_H_
+#define _CRC_LIB_H_
+
+#include <Uefi.h>
+
+/**
+=C2=A0 Calculate a 16-bit CRC.
+
+=C2=A0 The algorithm used is MSB-first form of the ITU-T Recommendation V.= 41, which
+=C2=A0 uses an initial value of 0x0000 and a polynomial of 0x1021. It is t= he same
+=C2=A0 algorithm used by XMODEM.
+
+=C2=A0 The output CRC location is not updated until the calculation is fin= ished, so
+=C2=A0 it is possible to pass a structure as the data, and the CRC field o= f the same
+=C2=A0 structure as the output location for the calculated CRC. The CRC fi= eld should
+=C2=A0 be set to zero before calling this function. Once the CRC field is = updated by
+=C2=A0 this function, running it again over the structure produces a CRC o= f zero.
+
+=C2=A0 @param[in]=C2=A0 Data=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 A pointer to the target data.
+=C2=A0 @param[in]=C2=A0 DataSize=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 The tar= get data size.
+=C2=A0 @param[out] CrcOut=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 A point= er to the return location of the CRC.
+
+=C2=A0 @retval EFI_SUCCESS=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0The CRC= was calculated successfully.
+=C2=A0 @retval EFI_INVALID_PARAMETER A null pointer was provided.
+**/
+EFI_STATUS
+CalculateCrc16 (
+=C2=A0 IN=C2=A0 VOID=C2=A0 =C2=A0 *Data,
+=C2=A0 IN=C2=A0 UINTN=C2=A0 =C2=A0DataSize,
+=C2=A0 OUT UINT16=C2=A0 *CrcOut
+=C2=A0 );
+
+#endif=C2=A0 // _CRC_LIB_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcL= ib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.c new file mode 100644
index 0000000000..3e8fa402ad
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.c @@ -0,0 +1,71 @@
+/** @file
+=C2=A0 Base implementation of the CRC library class.
+
+=C2=A0 @copyright
+=C2=A0 Copyright 2016 - 2018 Intel Corporation. <BR>
+
+=C2=A0 SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+#include <Library/CrcLib.h>
+
+/**
+=C2=A0 Calculate a 16-bit CRC.
+
+=C2=A0 The algorithm used is MSB-first form of the ITU-T Recommendation V.= 41, which
+=C2=A0 uses an initial value of 0x0000 and a polynomial of 0x1021. It is t= he same
+=C2=A0 algorithm used by XMODEM.
+
+=C2=A0 The output CRC location is not updated until the calculation is fin= ished, so
+=C2=A0 it is possible to pass a structure as the data, and the CRC field o= f the same
+=C2=A0 structure as the output location for the calculated CRC. The CRC fi= eld should
+=C2=A0 be set to zero before calling this function. Once the CRC field is = updated by
+=C2=A0 this function, running it again over the structure produces a CRC o= f zero.
+
+=C2=A0 @param[in]=C2=A0 Data=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 A pointer to the target data.
+=C2=A0 @param[in]=C2=A0 DataSize=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 The tar= get data size.
+=C2=A0 @param[out] CrcOut=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 A point= er to the return location of the CRC.
+
+=C2=A0 @retval EFI_SUCCESS=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0The CRC= was calculated successfully.
+=C2=A0 @retval EFI_INVALID_PARAMETER A null pointer was provided.
+**/
+EFI_STATUS
+CalculateCrc16 (
+=C2=A0 IN=C2=A0 VOID=C2=A0 =C2=A0 *Data,
+=C2=A0 IN=C2=A0 UINTN=C2=A0 =C2=A0DataSize,
+=C2=A0 OUT UINT16=C2=A0 *CrcOut
+=C2=A0 )
+{
+=C2=A0 UINT32=C2=A0 Crc;
+=C2=A0 UINTN=C2=A0 =C2=A0Index;
+=C2=A0 UINT8=C2=A0 =C2=A0*Byte;
+
+=C2=A0 if (Data =3D=3D NULL || CrcOut =3D=3D NULL) {
+=C2=A0 =C2=A0 return EFI_INVALID_PARAMETER;
+=C2=A0 }
+
+=C2=A0 Crc =3D 0x0000;
+=C2=A0 for (Byte =3D (UINT8 *) Data; Byte < (UINT8 *) Data + DataSize; = Byte++) {
+=C2=A0 =C2=A0 //
+=C2=A0 =C2=A0 // XOR the next data byte into the CRC.
+=C2=A0 =C2=A0 //
+=C2=A0 =C2=A0 Crc ^=3D (UINT16) *Byte << 8;
+=C2=A0 =C2=A0 //
+=C2=A0 =C2=A0 // Shift out eight bits, feeding back based on the polynomia= l whenever a
+=C2=A0 =C2=A0 // 1 is shifted out of bit 15.
+=C2=A0 =C2=A0 //
+=C2=A0 =C2=A0 for (Index =3D 0; Index < 8; Index++) {
+=C2=A0 =C2=A0 =C2=A0 Crc <<=3D 1;
+=C2=A0 =C2=A0 =C2=A0 if (Crc & BIT16) {
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 Crc ^=3D 0x1021;
+=C2=A0 =C2=A0 =C2=A0 }
+=C2=A0 =C2=A0 }
+=C2=A0 }
+
+=C2=A0 //
+=C2=A0 // Mask and return the 16-bit CRC.
+=C2=A0 //
+=C2=A0 *CrcOut =3D (UINT16) (Crc & 0xFFFF);
+=C2=A0 return EFI_SUCCESS;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcL= ib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.i= nf
new file mode 100644
index 0000000000..6b404e1259
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.inf<= br> @@ -0,0 +1,23 @@
+## @file
+# Base implementation of the CRC library class.
+#
+# @copyright
+# Copyright 2016 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+=C2=A0 INF_VERSION=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0=3D 0x00010019
+=C2=A0 BASE_NAME=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0=3D BaseCrcLib
+=C2=A0 FILE_GUID=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0=3D F3BE9A28-78A2-4B02-AB26-D27EE85D9256
+=C2=A0 MODULE_TYPE=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0=3D BASE
+=C2=A0 VERSION_STRING=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =3D 1.0
+=C2=A0 LIBRARY_CLASS=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0=3D CrcLib
+
+[Sources]
+=C2=A0 BaseCrcLib.c
+
+[Packages]
+=C2=A0 MdePkg/MdePkg.dec
+=C2=A0 WhitleyOpenBoardPkg/PlatformPkg.dec
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc b/Platform/= Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
index e78a104004..9cdb5bc2f6 100644
--- a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
+++ b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
@@ -618,6 +618,7 @@
=C2=A0 =C2=A0PciSegmentInfoLib|$(PLATFORM_PKG)/Pci/Library/PciSegmentInfoLi= bSimple/PciSegmentInfoLibSimple.inf
=C2=A0 =C2=A0PlatformOpromPolicyLib|$(RP_PKG)/Library/PlatformOpromPolicyLi= bNull/PlatformOpromPolicyLibNull.inf
=C2=A0 =C2=A0VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.in= f
+=C2=A0 CrcLib|WhitleyOpenBoardPkg/Library/BaseCrcLib/BaseCrcLib.inf

=C2=A0[LibraryClasses.Common.SEC, LibraryClasses.Common.PEI_CORE, LibraryCl= asses.Common.PEIM]
=C2=A0 =C2=A0FspWrapperApiLib|IntelFsp2WrapperPkg/Library/BaseFspWrapperApi= Lib/BaseFspWrapperApiLib.inf
--
2.27.0.windows.1








--
Pedro Falcato
--000000000000a7231105d9e56fe1--