| /** @file |
| Public include file for the Port IO/MMIO/MSR RegisterFilterLib. |
| |
| Copyright (c) 2021, Intel Corporation. All rights reserved.<BR> |
| |
| SPDX-License-Identifier: BSD-2-Clause-Patent |
| |
| **/ |
| |
| #ifndef REGISTER_FILTER_LIB_H_ |
| #define REGISTER_FILTER_LIB_H_ |
| |
| typedef enum { |
| FilterWidth8, |
| FilterWidth16, |
| FilterWidth32, |
| FilterWidth64 |
| } FILTER_IO_WIDTH; |
| |
| /** |
| 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] 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 |
| ); |
| |
| /** |
| 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 |
| ); |
| |
| /** |
| 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 BeforeWrite 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 |
| ); |
| |
| /** |
| 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 BeforeWrite data. |
| |
| **/ |
| VOID |
| EFIAPI |
| FilterAfterIoWrite ( |
| IN FILTER_IO_WIDTH Width, |
| IN UINTN Address, |
| IN VOID *Buffer |
| ); |
| |
| /** |
| 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] 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 |
| ); |
| |
| /** |
| 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 |
| ); |
| |
| /** |
| 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 BeforeWrite 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 |
| ); |
| |
| /** |
| 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 BeforeWrite data. |
| |
| **/ |
| VOID |
| EFIAPI |
| FilterAfterMmIoWrite ( |
| IN FILTER_IO_WIDTH Width, |
| IN UINTN Address, |
| IN VOID *Buffer |
| ); |
| |
| /** |
| 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 8-bit Machine Specific Register index to BeforeWrite. |
| @param Value The 64-bit value to BeforeRead from the Machine Specific Register. |
| |
| @retval TRUE Need to excute the MSR read. |
| @retval FALSE Skip the MSR read. |
| |
| **/ |
| BOOLEAN |
| EFIAPI |
| FilterBeforeMsrRead ( |
| IN UINT32 Index, |
| IN OUT UINT64 *Value |
| ); |
| |
| /** |
| Trace MSR after read operation |
| |
| @param Index The 8-bit Machine Specific Register index to BeforeWrite. |
| @param Value The 64-bit value to BeforeRead from the Machine Specific Register. |
| |
| **/ |
| VOID |
| EFIAPI |
| FilterAfterMsrRead ( |
| IN UINT32 Index, |
| IN UINT64 *Value |
| ); |
| |
| /** |
| 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 8-bit Machine Specific Register index to BeforeWrite. |
| @param Value The 64-bit value to BeforeWrite to the Machine Specific Register. |
| |
| @retval TRUE Need to excute the MSR write. |
| @retval FALSE Skip the MSR write. |
| |
| **/ |
| BOOLEAN |
| EFIAPI |
| FilterBeforeMsrWrite ( |
| IN UINT32 Index, |
| IN UINT64 *Value |
| ); |
| |
| /** |
| Trace MSR after write operation |
| |
| @param Index The 8-bit Machine Specific Register index to BeforeWrite. |
| @param Value The 64-bit value to BeforeWrite to the Machine Specific Register. |
| |
| **/ |
| VOID |
| EFIAPI |
| FilterAfterMsrWrite ( |
| IN UINT32 Index, |
| IN UINT64 *Value |
| ); |
| |
| #endif // REGISTER_FILTER_LIB_H_ |