4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The common header file for SMM FTW module and SMM FTW DXE Module.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2011, Intel Corporation. All rights reserved. <BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __SMM_FTW_COMMON_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __SMM_FTW_COMMON_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/SmmFirmwareVolumeBlock.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/SmmFaultTolerantWrite.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define FTW_FUNCTION_GET_MAX_BLOCK_SIZE 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define FTW_FUNCTION_ALLOCATE 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define FTW_FUNCTION_WRITE 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define FTW_FUNCTION_RESTART 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define FTW_FUNCTION_ABORT 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define FTW_FUNCTION_GET_LAST_WRITE 6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Function;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS ReturnStatus;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Data[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SMM_FTW_COMMUNICATE_FUNCTION_HEADER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Size of SMM communicate header, without including the payload.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SMM_COMMUNICATE_HEADER_SIZE (OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Size of SMM FTW communicate function header, without including the payload.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SMM_FTW_COMMUNICATE_HEADER_SIZE (OFFSET_OF (SMM_FTW_COMMUNICATE_FUNCTION_HEADER, Data))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN BlockSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SMM_FTW_GET_MAX_BLOCK_SIZE_HEADER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_GUID CallerId;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN PrivateDataSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN NumberOfWrites;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SMM_FTW_ALLOCATE_HEADER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_LBA Lba;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Offset;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN PrivateDataSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PHYSICAL_ADDRESS FvbBaseAddress;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_FVB_ATTRIBUTES_2 FvbAttributes;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Data[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SMM_FTW_WRITE_HEADER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PHYSICAL_ADDRESS FvbBaseAddress;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_FVB_ATTRIBUTES_2 FvbAttributes;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SMM_FTW_RESTART_HEADER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_GUID CallerId;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_LBA Lba;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Offset;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN PrivateDataSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN Complete;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Data[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SMM_FTW_GET_LAST_WRITE_HEADER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif