]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmmCommon.h
MdeModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Universal / FaultTolerantWriteDxe / FaultTolerantWriteSmmCommon.h
CommitLineData
f3b80a8e 1/** @file\r
2\r
d1102dba 3 The common header file for SMM FTW module and SMM FTW DXE Module.\r
f3b80a8e 4\r
d1102dba 5Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved. <BR>\r
9d510e61 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
f3b80a8e 7\r
8**/\r
9\r
10#ifndef __SMM_FTW_COMMON_H__\r
11#define __SMM_FTW_COMMON_H__\r
12\r
13#include <Protocol/SmmFirmwareVolumeBlock.h>\r
14#include <Protocol/SmmFaultTolerantWrite.h>\r
15\r
16#define FTW_FUNCTION_GET_MAX_BLOCK_SIZE 1\r
17#define FTW_FUNCTION_ALLOCATE 2\r
18#define FTW_FUNCTION_WRITE 3\r
19#define FTW_FUNCTION_RESTART 4\r
20#define FTW_FUNCTION_ABORT 5\r
21#define FTW_FUNCTION_GET_LAST_WRITE 6\r
22\r
23typedef struct {\r
24 UINTN Function;\r
25 EFI_STATUS ReturnStatus;\r
26 UINT8 Data[1];\r
27} SMM_FTW_COMMUNICATE_FUNCTION_HEADER;\r
28\r
29///\r
30/// Size of SMM communicate header, without including the payload.\r
31///\r
32#define SMM_COMMUNICATE_HEADER_SIZE (OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data))\r
33\r
34///\r
35/// Size of SMM FTW communicate function header, without including the payload.\r
36///\r
37#define SMM_FTW_COMMUNICATE_HEADER_SIZE (OFFSET_OF (SMM_FTW_COMMUNICATE_FUNCTION_HEADER, Data))\r
38\r
39typedef struct {\r
40 UINTN BlockSize;\r
41} SMM_FTW_GET_MAX_BLOCK_SIZE_HEADER;\r
42\r
43typedef struct {\r
44 EFI_GUID CallerId;\r
45 UINTN PrivateDataSize;\r
46 UINTN NumberOfWrites;\r
47} SMM_FTW_ALLOCATE_HEADER;\r
48\r
49typedef struct {\r
50 EFI_LBA Lba;\r
51 UINTN Offset;\r
52 UINTN PrivateDataSize;\r
53 EFI_PHYSICAL_ADDRESS FvbBaseAddress;\r
54 EFI_FVB_ATTRIBUTES_2 FvbAttributes;\r
55 UINTN Length;\r
56 UINT8 Data[1];\r
57} SMM_FTW_WRITE_HEADER;\r
58\r
59typedef struct {\r
60 EFI_PHYSICAL_ADDRESS FvbBaseAddress;\r
61 EFI_FVB_ATTRIBUTES_2 FvbAttributes;\r
62} SMM_FTW_RESTART_HEADER;\r
63\r
64typedef struct {\r
65 EFI_GUID CallerId;\r
66 EFI_LBA Lba;\r
67 UINTN Offset;\r
68 UINTN Length;\r
69 UINTN PrivateDataSize;\r
70 BOOLEAN Complete;\r
71 UINT8 Data[1];\r
72} SMM_FTW_GET_LAST_WRITE_HEADER;\r
73\r
22cedf5b 74/**\r
44289eea 75 Shared entry point of the module.\r
22cedf5b
AB
76\r
77 @retval EFI_SUCCESS The initialization finished successfully.\r
78 @retval EFI_OUT_OF_RESOURCES Allocate memory error\r
79 @retval EFI_INVALID_PARAMETER Workspace or Spare block does not exist\r
80\r
81**/\r
82EFI_STATUS\r
83MmFaultTolerantWriteInitialize (\r
84 VOID\r
85 );\r
86\r
87/**\r
88 This function checks if the buffer is valid per processor architecture and\r
89 does not overlap with SMRAM.\r
90\r
91 @param Buffer The buffer start address to be checked.\r
92 @param Length The buffer length to be checked.\r
93\r
94 @retval TRUE This buffer is valid per processor architecture and does not\r
95 overlap with SMRAM.\r
96 @retval FALSE This buffer is not valid per processor architecture or overlaps\r
97 with SMRAM.\r
98**/\r
99BOOLEAN\r
100FtwSmmIsBufferOutsideSmmValid (\r
101 IN EFI_PHYSICAL_ADDRESS Buffer,\r
102 IN UINT64 Length\r
103 );\r
104\r
105/**\r
44289eea 106 Notify the system that the SMM FTW driver is ready.\r
22cedf5b
AB
107**/\r
108VOID\r
109FtwNotifySmmReady (\r
110 VOID\r
111 );\r
112\r
f3b80a8e 113#endif\r