On 04/21/20 05:09, Rebecca Cran wrote: > Add a null implementation library for QemuFwCfgLib, in order to > support building PciHostBridgeLib for bhyve. > > Signed-off-by: Rebecca Cran <rebe...@bsdio.com> > --- > .../Library/QemuFwCfgLib/QemuFwCfgLibNull.inf | 37 ++++ > OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgNull.c | 209 ++++++++++++++++++ > 2 files changed, 246 insertions(+) > create mode 100644 OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibNull.inf > create mode 100644 OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgNull.c > > diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibNull.inf > b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibNull.inf > new file mode 100644 > index 0000000000..09f86c2b02 > --- /dev/null > +++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibNull.inf > @@ -0,0 +1,37 @@ > +## @file > +# > +# Stateful, implicitly initialized fw_cfg library.
(1) This comment should be updated -- it should say (for example): "Null implementation of the fw_cfg library". (I could update this for you myself, but below there is another change that I cannot do for you.) > +# > +# Copyright (C) 2013, Red Hat, Inc. > +# Copyright (c) 2008 - 2012, Intel Corporation. All rights reserved.<BR> > +# Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR> (2) This is a new file; you should add your (C) on top (like you do in patch#1). I can't add this for you. > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +## > + > +[Defines] > + INF_VERSION = 0x00010005 > + BASE_NAME = QemuFwCfgLibNull > + FILE_GUID = B9D1A1F2-01E2-4732-982D-C7F9ED51AC6B > + MODULE_TYPE = BASE > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = QemuFwCfgLib > + > +# > +# The following information is for reference only and not required by the > build tools. > +# > +# VALID_ARCHITECTURES = IA32 X64 > +# (3) Technically speaking, the null instance is suitable for all architectures supported by edk2. I suggest simply dropping the VALID_ARCHITECTURES comment block. > + > +[Sources] > + QemuFwCfgLibInternal.h (4) We don't depend on this header file, please don't list it here. > + QemuFwCfgNull.c > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec (5) I *think* MdeModulePkg.dec is not needed, as we don't consume any content from MdeModulePkg. (The DebugLib class comes from MdePkg.) > + OvmfPkg/OvmfPkg.dec Yes, this is necessary (because the lib class header that we'll include comes from OvmfPkg). > + > +[LibraryClasses] > + DebugLib > diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgNull.c > b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgNull.c > new file mode 100644 > index 0000000000..e2cc5f3406 > --- /dev/null > +++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgNull.c > @@ -0,0 +1,209 @@ > +/** @file > + > + Stateful and implicitly initialized fw_cfg library implementation. (6) Same as (1). > + > + Copyright (C) 2013, Red Hat, Inc. > + Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.<BR> > + Copyright (c) 2017, Advanced Micro Devices. All rights reserved.<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > +**/ (7) Same as (2). > + > +#include <Uefi.h> > +#include <Library/DebugLib.h> > +#include <IndustryStandard/QemuFwCfg.h> > + (8) I believe <Uefi.h> and <IndustryStandard/QemuFwCfg.h> can be dropped. In exchange, <Library/QemuFwCfgLib.h> should be included. That's because the lib class header declares the functions that this lib instance will define (= implement). The lib class header also pulls in all dependencies that are needed for the API declarations. When you include <Library/QemuFwCfgLib.h>, please add it under DebugLib.h, to keep the #include list sorted. > +/** > + Returns a boolean indicating if the firmware configuration interface > + is available or not. > + > + This function may change fw_cfg state. > + > + @retval TRUE The interface is available > + @retval FALSE The interface is not available > + > +**/ > +BOOLEAN > +EFIAPI > +QemuFwCfgIsAvailable ( > + VOID > + ) > +{ > + return FALSE; > +} > + > + > +/** > + Selects a firmware configuration item for reading. > + > + Following this call, any data read from this item will start from > + the beginning of the configuration item's data. > + > + @param[in] QemuFwCfgItem - Firmware Configuration item to read > + > +**/ > +VOID > +EFIAPI > +QemuFwCfgSelectItem ( > + IN FIRMWARE_CONFIG_ITEM QemuFwCfgItem > + ) > +{ > + ASSERT (FALSE); > +} > + > + > +/** > + Reads firmware configuration bytes into a buffer > + > + If called multiple times, then the data read will > + continue at the offset of the firmware configuration > + item where the previous read ended. > + > + @param[in] Size - Size in bytes to read > + @param[in] Buffer - Buffer to store data into > + > +**/ > +VOID > +EFIAPI > +QemuFwCfgReadBytes ( > + IN UINTN Size, > + IN VOID *Buffer OPTIONAL > + ) > +{ > + ASSERT (FALSE); > +} > + > + > +/** > + Writes firmware configuration bytes from a buffer > + > + If called multiple times, then the data written will > + continue at the offset of the firmware configuration > + item where the previous write ended. > + > + @param[in] Size - Size in bytes to write > + @param[in] Buffer - Buffer to read data from > + > +**/ > +VOID > +EFIAPI > +QemuFwCfgWriteBytes ( > + IN UINTN Size, > + IN VOID *Buffer > + ) > +{ > + ASSERT (FALSE); > +} > + > + > +/** > + Skip bytes in the firmware configuration item. > + > + Increase the offset of the firmware configuration item without transferring > + bytes between the item and a caller-provided buffer. Subsequent read, write > + or skip operations will commence at the increased offset. > + > + @param[in] Size Number of bytes to skip. > +**/ > +VOID > +EFIAPI > +QemuFwCfgSkipBytes ( > + IN UINTN Size > + ) > +{ > + ASSERT (FALSE); > +} > + > + > +/** > + Reads a UINT8 firmware configuration value > + > + @return Value of Firmware Configuration item read > + > +**/ > +UINT8 > +EFIAPI > +QemuFwCfgRead8 ( > + VOID > + ) > +{ > + ASSERT (FALSE); > + return 0; > +} > + > + > +/** > + Reads a UINT16 firmware configuration value > + > + @return Value of Firmware Configuration item read > + > +**/ > +UINT16 > +EFIAPI > +QemuFwCfgRead16 ( > + VOID > + ) > +{ > + ASSERT (FALSE); > + return 0; > +} > + > + > +/** > + Reads a UINT32 firmware configuration value > + > + @return Value of Firmware Configuration item read > + > +**/ > +UINT32 > +EFIAPI > +QemuFwCfgRead32 ( > + VOID > + ) > +{ > + ASSERT (FALSE); > + return 0; > +} > + > + > +/** > + Reads a UINT64 firmware configuration value > + > + @return Value of Firmware Configuration item read > + > +**/ > +UINT64 > +EFIAPI > +QemuFwCfgRead64 ( > + VOID > + ) > +{ > + ASSERT (FALSE); > + return 0; > +} > + > + > +/** > + Find the configuration item corresponding to the firmware configuration > file. > + > + @param[in] Name - Name of file to look up. > + @param[out] Item - Configuration item corresponding to the file, to be > passed > + to QemuFwCfgSelectItem (). > + @param[out] Size - Number of bytes in the file. > + > + @return RETURN_SUCCESS If file is found. > + RETURN_NOT_FOUND If file is not found. > + RETURN_UNSUPPORTED If firmware configuration is unavailable. > + > +**/ > +RETURN_STATUS > +EFIAPI > +QemuFwCfgFindFile ( > + IN CONST CHAR8 *Name, > + OUT FIRMWARE_CONFIG_ITEM *Item, > + OUT UINTN *Size > + ) > +{ > + return RETURN_UNSUPPORTED; > +} > + > These parts are fine. Thanks! Laszlo -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#57913): https://edk2.groups.io/g/devel/message/57913 Mute This Topic: https://groups.io/mt/73165357/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-