summaryrefslogtreecommitdiffstats
path: root/MdePkg/Library
diff options
context:
space:
mode:
authorDandan Bi <dandan.bi@intel.com>2021-02-08 10:06:45 +0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2021-03-30 12:48:30 +0000
commit1c11e7a2142b1406ccff5e0af0893c94472871c8 (patch)
tree86aa76dec08056f0976995d174381f99ec1b481f /MdePkg/Library
parentb33cf5bfcb4c941370739dfbbe1532ff508fd29d (diff)
downloadedk2-1c11e7a2142b1406ccff5e0af0893c94472871c8.tar.gz
edk2-1c11e7a2142b1406ccff5e0af0893c94472871c8.tar.bz2
edk2-1c11e7a2142b1406ccff5e0af0893c94472871c8.zip
MdePkg: Add RegisterFilterLib class and NULL instance
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3246 1. Add a new library class (RegisterFilterLib) to filter and trace port IO/MMIO/MSR access. 2. Add a NULL instance (RegisterFilterLibNull) can be used to keep current behavior. Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Liming Gao <gaoliming@byosoft.com.cn> Cc: Zhiguang Liu <zhiguang.liu@intel.com> Signed-off-by: Dandan Bi <dandan.bi@intel.com> Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> Acked-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Abner Chang <abner.chang@hpe.com>
Diffstat (limited to 'MdePkg/Library')
-rw-r--r--MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.c271
-rw-r--r--MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf23
-rw-r--r--MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.uni13
3 files changed, 307 insertions, 0 deletions
diff --git a/MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.c b/MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.c
new file mode 100644
index 0000000000..7150f1ed5f
--- /dev/null
+++ b/MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.c
@@ -0,0 +1,271 @@
+/** @file
+ Null instance of RegisterFilterLib.
+
+ Copyright (c) 2021 Intel Corporation. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Library/RegisterFilterLib.h>
+
+/**
+ Filter IO read operation before read IO port.
+ It is used to filter IO read operation.
+
+ It will return the flag to decide whether require read real IO port.
+ It can be used for emulation environment.
+
+ @param[in] Width Signifies the width of the I/O operation.
+ @param[in] Address The base address of the I/O operation.
+ @param[in,out] Buffer The destination buffer to store the results.
+
+ @retval TRUE Need to excute the IO read.
+ @retval FALSE Skip the IO read.
+
+**/
+BOOLEAN
+EFIAPI
+FilterBeforeIoRead (
+ IN FILTER_IO_WIDTH Width,
+ IN UINTN Address,
+ IN OUT VOID *Buffer
+ )
+{
+ return TRUE;
+}
+
+/**
+ Trace IO read operation after read IO port.
+ It is used to trace IO operation.
+
+ @param[in] Width Signifies the width of the I/O operation.
+ @param[in] Address The base address of the I/O operation.
+ @param[in] Buffer The destination buffer to store the results.
+
+**/
+VOID
+EFIAPI
+FilterAfterIoRead (
+ IN FILTER_IO_WIDTH Width,
+ IN UINTN Address,
+ IN VOID *Buffer
+ )
+{
+ return;
+}
+
+/**
+ Filter IO Write operation before wirte IO port.
+ It is used to filter IO operation.
+
+ It will return the flag to decide whether require read write IO port.
+ It can be used for emulation environment.
+
+ @param[in] Width Signifies the width of the I/O operation.
+ @param[in] Address The base address of the I/O operation.
+ @param[in] Buffer The source buffer from which to write data.
+
+ @retval TRUE Need to excute the IO write.
+ @retval FALSE Skip the IO write.
+
+**/
+BOOLEAN
+EFIAPI
+FilterBeforeIoWrite (
+ IN FILTER_IO_WIDTH Width,
+ IN UINTN Address,
+ IN VOID *Buffer
+ )
+{
+ return TRUE;
+}
+
+ /**
+ Trace IO Write operation after wirte IO port.
+ It is used to trace IO operation.
+
+ @param[in] Width Signifies the width of the I/O operation.
+ @param[in] Address The base address of the I/O operation.
+ @param[in] Buffer The source buffer from which to Write data.
+
+**/
+VOID
+EFIAPI
+FilterAfterIoWrite (
+ IN FILTER_IO_WIDTH Width,
+ IN UINTN Address,
+ IN VOID *Buffer
+ )
+{
+ return;
+}
+
+/**
+ Filter memory IO before Read operation.
+
+ It will return the flag to decide whether require read real MMIO.
+ It can be used for emulation environment.
+
+ @param[in] Width Signifies the width of the memory I/O operation.
+ @param[in] Address The base address of the memory I/O operation.
+ @param[in,out] Buffer The destination buffer to store the results.
+
+ @retval TRUE Need to excute the MMIO read.
+ @retval FALSE Skip the MMIO read.
+
+**/
+BOOLEAN
+EFIAPI
+FilterBeforeMmIoRead (
+ IN FILTER_IO_WIDTH Width,
+ IN UINTN Address,
+ IN OUT VOID *Buffer
+ )
+{
+ return TRUE;
+}
+
+/**
+ Tracer memory IO after read operation.
+
+ @param[in] Width Signifies the width of the memory I/O operation.
+ @param[in] Address The base address of the memory I/O operation.
+ @param[in] Buffer The destination buffer to store the results.
+
+**/
+VOID
+EFIAPI
+FilterAfterMmIoRead (
+ IN FILTER_IO_WIDTH Width,
+ IN UINTN Address,
+ IN VOID *Buffer
+ )
+{
+ return;
+}
+
+/**
+ Filter memory IO before write operation.
+
+ It will return the flag to decide whether require wirte real MMIO.
+ It can be used for emulation environment.
+
+ @param[in] Width Signifies the width of the memory I/O operation.
+ @param[in] Address The base address of the memory I/O operation.
+ @param[in] Buffer The source buffer from which to write data.
+
+ @retval TRUE Need to excute the MMIO write.
+ @retval FALSE Skip the MMIO write.
+
+**/
+BOOLEAN
+EFIAPI
+FilterBeforeMmIoWrite (
+ IN FILTER_IO_WIDTH Width,
+ IN UINTN Address,
+ IN VOID *Buffer
+ )
+{
+ return TRUE;
+}
+
+/**
+ Tracer memory IO after write operation.
+
+ @param[in] Width Signifies the width of the memory I/O operation.
+ @param[in] Address The base address of the memory I/O operation.
+ @param[in] Buffer The source buffer from which to write data.
+
+**/
+VOID
+EFIAPI
+FilterAfterMmIoWrite (
+ IN FILTER_IO_WIDTH Width,
+ IN UINTN Address,
+ IN VOID *Buffer
+ )
+{
+ return;
+}
+
+/**
+ Filter MSR before read operation.
+
+ It will return the flag to decide whether require read real MSR.
+ It can be used for emulation environment.
+
+ @param Index The Register index of the MSR.
+ @param Value Point to the data will be read from the MSR.
+
+ @retval TRUE Need to excute the MSR read.
+ @retval FALSE Skip the MSR read.
+
+**/
+BOOLEAN
+EFIAPI
+FilterBeforeMsrRead (
+ IN UINT32 Index,
+ IN OUT UINT64 *Value
+ )
+{
+ return TRUE;
+}
+
+/**
+ Trace MSR after read operation.
+
+ @param Index The Register index of the MSR.
+ @param Value Point to the data has been be read from the MSR.
+
+**/
+VOID
+EFIAPI
+FilterAfterMsrRead (
+ IN UINT32 Index,
+ IN UINT64 *Value
+ )
+{
+ return;
+}
+
+/**
+ Filter MSR before write operation.
+
+ It will return the flag to decide whether require write real MSR.
+ It can be used for emulation environment.
+
+ @param Index The Register index of the MSR.
+ @param Value Point to the data want to be written to the MSR.
+
+ @retval TRUE Need to excute the MSR write.
+ @retval FALSE Skip the MSR write.
+
+**/
+BOOLEAN
+EFIAPI
+FilterBeforeMsrWrite (
+ IN UINT32 Index,
+ IN UINT64 *Value
+ )
+{
+ return TRUE;
+}
+
+/**
+ Trace MSR after write operation.
+
+ @param Index The Register index of the MSR.
+ @param Value Point to the data has been be written to the MSR.
+
+**/
+VOID
+EFIAPI
+FilterAfterMsrWrite (
+ IN UINT32 Index,
+ IN UINT64 *Value
+ )
+{
+ return;
+}
+
diff --git a/MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf b/MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf
new file mode 100644
index 0000000000..a7fc7497ed
--- /dev/null
+++ b/MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf
@@ -0,0 +1,23 @@
+## @file
+# Null instance of RegisterFilterLib.
+#
+# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = FilterLibNull
+ MODULE_UNI_FILE = FilterLibNull.uni
+ FILE_GUID = 9F555194-A410-4AD6-B3FC-53F6E10FA793
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = RegisterFilterLib
+
+[Sources]
+ RegisterFilterLibNull.c
+
+[Packages]
+ MdePkg/MdePkg.dec
diff --git a/MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.uni b/MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.uni
new file mode 100644
index 0000000000..ed64c7e63d
--- /dev/null
+++ b/MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.uni
@@ -0,0 +1,13 @@
+// /** @file
+// Null instance of RegisterFilterLib.
+//
+// Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
+//
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+//
+// **/
+
+
+#string STR_MODULE_ABSTRACT #language en-US "Null instance of RegisterFilterLib."
+#string STR_MODULE_DESCRIPTION #language en-US "Null instance of RegisterFilterLib."
+