[edk2-devel] [PATCH 06/13] OvmfPkg: add QemuFwCfgPeiLibNull

Rebecca Cran posted 13 patches 5 years, 9 months ago
[edk2-devel] [PATCH 06/13] OvmfPkg: add QemuFwCfgPeiLibNull
Posted by Rebecca Cran 5 years, 9 months ago
Add a null PEI implementation of QemuFwCfgLib for bhyve.

Signed-off-by: Rebecca Cran <rebecca@bsdio.com>
---
 .../QemuFwCfgLibNull/QemuFwCfgPeiLibNull.inf  |  36 ++++++
 .../QemuFwCfgLibNull/QemuFwCfgPeiNull.c       | 107 ++++++++++++++++++
 2 files changed, 143 insertions(+)
 create mode 100644 OvmfPkg/Library/QemuFwCfgLibNull/QemuFwCfgPeiLibNull.inf
 create mode 100644 OvmfPkg/Library/QemuFwCfgLibNull/QemuFwCfgPeiNull.c

diff --git a/OvmfPkg/Library/QemuFwCfgLibNull/QemuFwCfgPeiLibNull.inf b/OvmfPkg/Library/QemuFwCfgLibNull/QemuFwCfgPeiLibNull.inf
new file mode 100644
index 0000000000..e5a7683b9b
--- /dev/null
+++ b/OvmfPkg/Library/QemuFwCfgLibNull/QemuFwCfgPeiLibNull.inf
@@ -0,0 +1,36 @@
+## @file
+#
+#  Stateful, implicitly initialized fw_cfg library.
+#
+#  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>
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = QemuFwCfgPeiLibNull
+  FILE_GUID                      = 404DEFA4-548D-4535-9D6B-915B14D98BC2
+  MODULE_TYPE                    = BASE
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = QemuFwCfgLib|PEIM
+
+  CONSTRUCTOR                    = QemuFwCfgInitialize
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+#  VALID_ARCHITECTURES           = IA32 X64
+#
+
+[Sources]
+  QemuFwCfgLibInternal.h
+  QemuFwCfgLibNull.c
+  QemuFwCfgPeiNull.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  OvmfPkg/OvmfPkg.dec
diff --git a/OvmfPkg/Library/QemuFwCfgLibNull/QemuFwCfgPeiNull.c b/OvmfPkg/Library/QemuFwCfgLibNull/QemuFwCfgPeiNull.c
new file mode 100644
index 0000000000..54d5eb4e19
--- /dev/null
+++ b/OvmfPkg/Library/QemuFwCfgLibNull/QemuFwCfgPeiNull.c
@@ -0,0 +1,107 @@
+/** @file
+
+  Stateful and implicitly initialized fw_cfg library implementation.
+
+  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
+**/
+
+#include <Library/BaseLib.h>
+#include <Library/IoLib.h>
+#include <Library/DebugLib.h>
+#include <Library/QemuFwCfgLib.h>
+#include <Library/MemEncryptSevLib.h>
+
+#include "QemuFwCfgLibInternal.h"
+
+
+/**
+  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 InternalQemuFwCfgIsAvailable ();
+}
+
+
+RETURN_STATUS
+EFIAPI
+QemuFwCfgInitialize (
+  VOID
+  )
+{
+  return RETURN_SUCCESS;
+}
+
+
+/**
+  Returns a boolean indicating if the firmware configuration interface is
+  available for library-internal purposes.
+
+  This function never changes fw_cfg state.
+
+  @retval    TRUE   The interface is available internally.
+  @retval    FALSE  The interface is not available internally.
+**/
+BOOLEAN
+InternalQemuFwCfgIsAvailable (
+  VOID
+  )
+{
+  return FALSE;
+}
+
+/**
+  Returns a boolean indicating whether QEMU provides the DMA-like access method
+  for fw_cfg.
+
+  @retval    TRUE   The DMA-like access method is available.
+  @retval    FALSE  The DMA-like access method is unavailable.
+**/
+BOOLEAN
+InternalQemuFwCfgDmaIsAvailable (
+  VOID
+  )
+{
+  return FALSE;
+}
+
+/**
+  Transfer an array of bytes, or skip a number of bytes, using the DMA
+  interface.
+
+  @param[in]     Size     Size in bytes to transfer or skip.
+
+  @param[in,out] Buffer   Buffer to read data into or write data from. Ignored,
+                          and may be NULL, if Size is zero, or Control is
+                          FW_CFG_DMA_CTL_SKIP.
+
+  @param[in]     Control  One of the following:
+                          FW_CFG_DMA_CTL_WRITE - write to fw_cfg from Buffer.
+                          FW_CFG_DMA_CTL_READ  - read from fw_cfg into Buffer.
+                          FW_CFG_DMA_CTL_SKIP  - skip bytes in fw_cfg.
+**/
+VOID
+InternalQemuFwCfgDmaBytes (
+  IN     UINT32   Size,
+  IN OUT VOID     *Buffer OPTIONAL,
+  IN     UINT32   Control
+  )
+{
+
+}
+
-- 
2.26.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#57440): https://edk2.groups.io/g/devel/message/57440
Mute This Topic: https://groups.io/mt/73045135/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [PATCH 06/13] OvmfPkg: add QemuFwCfgPeiLibNull
Posted by Laszlo Ersek 5 years, 9 months ago
On 04/16/20 01:09, Rebecca Cran wrote:
> Add a null PEI implementation of QemuFwCfgLib for bhyve.
> 
> Signed-off-by: Rebecca Cran <rebecca@bsdio.com>
> ---
>  .../QemuFwCfgLibNull/QemuFwCfgPeiLibNull.inf  |  36 ++++++
>  .../QemuFwCfgLibNull/QemuFwCfgPeiNull.c       | 107 ++++++++++++++++++
>  2 files changed, 143 insertions(+)
>  create mode 100644 OvmfPkg/Library/QemuFwCfgLibNull/QemuFwCfgPeiLibNull.inf
>  create mode 100644 OvmfPkg/Library/QemuFwCfgLibNull/QemuFwCfgPeiNull.c

The Null instance is usually not specific to any firmware phase, such as
the PEI phase. The Null instance does nothing, and doing nothing is
possible in any phase.

Please introduce the following files:

- QemuFwCfgLibNull.inf
- QemuFwCfgNull.c

In the INF file, set LIBRARY_CLASS to bare "QemuFwCfgLib"; there is no
need for a module type restriction (such as "|PEIM").

In the C file, implement the APIs listed in the lib class header,
"OvmfPkg/Include/Library/QemuFwCfgLib.h":

- QemuFwCfgIsAvailable -> return constant FALSE directly

- QemuFwCfgSelectItem  -> ASSERT (FALSE)
- QemuFwCfgReadBytes   -> ditto
- QemuFwCfgWriteBytes  -> ditto
- QemuFwCfgSkipBytes   -> ditto

- QemuFwCfgRead8       -> ASSERT (FALSE); return 0
- QemuFwCfgRead16      -> ditto
- QemuFwCfgRead32      -> ditto
- QemuFwCfgRead64      -> ditto

- QemuFwCfgFindFile    -> return RETURN_UNSUPPORTED

Implement no other functions. (Helper functions are not needed.)

(If any of the ASSERTs is tripped in your testing, then we have a bug in
an fw-cfg consumer module, and we should fix that. Basically, an fw-cfg
consumer module is allowed to call QemuFwCfgIsAvailable or
QemuFwCfgFindFile first, and the rest of the functions only if one of
the former succeeds).

Thanks
Laszlo


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#57534): https://edk2.groups.io/g/devel/message/57534
Mute This Topic: https://groups.io/mt/73045135/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-