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