| /** @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_ |