audk/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmmCommon.h
Jiaxin Wu 67d3be644f MdeModulePkg/FaultTolerantWriteSmm: Update buffer valid check func name
In the MdeModulePkg/FaultTolerantWriteSmm, the Primary Buffer
(CommBuffer) check function has been updated to match the buffer
validation behavior:

For SMM, the SMM Handlers is to validate the buffer outside MMRAM.

For MM, the MM Handlers do not need to validate the buffer if it is
the CommBuffer passed from MmCore through the MmiHandler() parameter.
Return TRUE directly in this case.

There is no function impact.

Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Cc: Hongbin1 Zhang <hongbin1.zhang@intel.com>
Cc: Wei6 Xu <wei6.xu@intel.com>
Cc: Dun Tan <dun.tan@intel.com>
Cc: Yuanhao Xie <yuanhao.xie@intel.com>
2024-07-07 08:40:03 +00:00

111 lines
2.8 KiB
C

/** @file
The common header file for SMM FTW module and SMM FTW DXE Module.
Copyright (c) 2011 - 2024, Intel Corporation. All rights reserved. <BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef __SMM_FTW_COMMON_H__
#define __SMM_FTW_COMMON_H__
#include <Protocol/SmmFirmwareVolumeBlock.h>
#include <Protocol/SmmFaultTolerantWrite.h>
#define FTW_FUNCTION_GET_MAX_BLOCK_SIZE 1
#define FTW_FUNCTION_ALLOCATE 2
#define FTW_FUNCTION_WRITE 3
#define FTW_FUNCTION_RESTART 4
#define FTW_FUNCTION_ABORT 5
#define FTW_FUNCTION_GET_LAST_WRITE 6
typedef struct {
UINTN Function;
EFI_STATUS ReturnStatus;
UINT8 Data[1];
} SMM_FTW_COMMUNICATE_FUNCTION_HEADER;
///
/// Size of SMM communicate header, without including the payload.
///
#define SMM_COMMUNICATE_HEADER_SIZE (OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data))
///
/// Size of SMM FTW communicate function header, without including the payload.
///
#define SMM_FTW_COMMUNICATE_HEADER_SIZE (OFFSET_OF (SMM_FTW_COMMUNICATE_FUNCTION_HEADER, Data))
typedef struct {
UINTN BlockSize;
} SMM_FTW_GET_MAX_BLOCK_SIZE_HEADER;
typedef struct {
EFI_GUID CallerId;
UINTN PrivateDataSize;
UINTN NumberOfWrites;
} SMM_FTW_ALLOCATE_HEADER;
typedef struct {
EFI_LBA Lba;
UINTN Offset;
UINTN PrivateDataSize;
EFI_PHYSICAL_ADDRESS FvbBaseAddress;
EFI_FVB_ATTRIBUTES_2 FvbAttributes;
UINTN Length;
UINT8 Data[1];
} SMM_FTW_WRITE_HEADER;
typedef struct {
EFI_PHYSICAL_ADDRESS FvbBaseAddress;
EFI_FVB_ATTRIBUTES_2 FvbAttributes;
} SMM_FTW_RESTART_HEADER;
typedef struct {
EFI_GUID CallerId;
EFI_LBA Lba;
UINTN Offset;
UINTN Length;
UINTN PrivateDataSize;
BOOLEAN Complete;
UINT8 Data[1];
} SMM_FTW_GET_LAST_WRITE_HEADER;
/**
Shared entry point of the module.
@retval EFI_SUCCESS The initialization finished successfully.
@retval EFI_OUT_OF_RESOURCES Allocate memory error
@retval EFI_INVALID_PARAMETER Workspace or Spare block does not exist
**/
EFI_STATUS
MmFaultTolerantWriteInitialize (
VOID
);
/**
This function checks if the Primary Buffer is valid.
@param Buffer The buffer start address to be checked.
@param Length The buffer length to be checked.
@retval TRUE This buffer is valid.
@retval FALSE This buffer is not valid.
**/
BOOLEAN
FtwSmmIsPrimaryBufferValid (
IN EFI_PHYSICAL_ADDRESS Buffer,
IN UINT64 Length
);
/**
Notify the system that the SMM FTW driver is ready.
**/
VOID
FtwNotifySmmReady (
VOID
);
#endif