]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Include/Guid/SystemNvDataGuid.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Include / Guid / SystemNvDataGuid.h
index 4e218883568cb378ba5e8847d81a426b8214f2d2..85f226d0cc7c16f55a5fd080433317a076eac07e 100644 (file)
@@ -1,17 +1,11 @@
-/** @file  \r
-  This file defines NvDataFv GUID and FTW working block structure header.\r
-  This guid can be used as FileSystemGuid in EFI_FIRMWARE_VOLUME_HEADER if \r
+/** @file\r
+  This file defines NvDataFv GUID and FTW working block structures.\r
+  The NvDataFv GUID can be used as FileSystemGuid in EFI_FIRMWARE_VOLUME_HEADER if\r
   this FV image contains NV data, such as NV variable data.\r
-  This guid can also be used as the signature of FTW working block header.\r
+  This file also defines WorkingBlockSignature GUID for FTW working block signature.\r
 \r
-Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials are licensed and made available under \r
-the terms and conditions of the BSD License that accompanies this distribution.  \r
-The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php.                                            \r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -21,13 +15,14 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #define EFI_SYSTEM_NV_DATA_FV_GUID \\r
   {0xfff12b8d, 0x7696, 0x4c8b, {0xa9, 0x85, 0x27, 0x47, 0x7, 0x5b, 0x4f, 0x50} }\r
 \r
-///\r
-/// An NvDataFv GUID used as the signature of FTW working block header.\r
-///\r
-extern EFI_GUID gEfiSystemNvDataFvGuid;\r
+#define EDKII_WORKING_BLOCK_SIGNATURE_GUID \\r
+  {0x9e58292b, 0x7c68, 0x497d, {0xa0, 0xce, 0x65,  0x0, 0xfd, 0x9f, 0x1b, 0x95} }\r
+\r
+extern EFI_GUID  gEfiSystemNvDataFvGuid;\r
+extern EFI_GUID  gEdkiiWorkingBlockSignatureGuid;\r
 \r
-#define WORKING_BLOCK_VALID   0x1\r
-#define WORKING_BLOCK_INVALID 0x2\r
+#define WORKING_BLOCK_VALID    0x1\r
+#define WORKING_BLOCK_INVALID  0x2\r
 \r
 ///\r
 /// The EDKII Fault tolerant working block header.\r
@@ -35,28 +30,82 @@ extern EFI_GUID gEfiSystemNvDataFvGuid;
 ///\r
 typedef struct {\r
   ///\r
-  /// System Non Volatile FV Guid.\r
+  /// FTW working block signature.\r
+  /// Its value has be updated from gEfiSystemNvDataFvGuid to gEdkiiWorkingBlockSignatureGuid,\r
+  /// because its write queue data format has been updated to support the crossing archs.\r
   ///\r
-  EFI_GUID  Signature;\r
+  EFI_GUID    Signature;\r
   ///\r
-  /// 32bit CRC caculated for this header.\r
+  /// 32bit CRC calculated for this header.\r
   ///\r
-  UINT32    Crc;\r
+  UINT32      Crc;\r
   ///\r
   /// Working block valid bit.\r
   ///\r
-  UINT8     WorkingBlockValid : 1;\r
-  UINT8     WorkingBlockInvalid : 1;\r
-  UINT8     Reserved : 6;\r
-  UINT8     Reserved3[3];\r
+  UINT8       WorkingBlockValid   : 1;\r
+  UINT8       WorkingBlockInvalid : 1;\r
+  UINT8       Reserved            : 6;\r
+  UINT8       Reserved3[3];\r
   ///\r
   /// Total size of the following write queue range.\r
   ///\r
-  UINT64    WriteQueueSize;\r
+  UINT64      WriteQueueSize;\r
   ///\r
   /// Write Queue data.\r
-  /// UINT8  WriteQueue[WriteQueueSize];\r
+  ///\r
+  /// EFI_FAULT_TOLERANT_WRITE_HEADER FtwHeader;\r
+  /// EFI_FAULT_TOLERANT_WRITE_RECORD FtwRecord[FtwHeader.NumberOfWrites]\r
+  /// EFI_FAULT_TOLERANT_WRITE_HEADER FtwHeader2;\r
+  /// EFI_FAULT_TOLERANT_WRITE_RECORD FtwRecord2[FtwHeader2.NumberOfWrites]\r
+  /// ...\r
   ///\r
 } EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER;\r
 \r
+#define FTW_VALID_STATE    0\r
+#define FTW_INVALID_STATE  1\r
+\r
+//\r
+// EFI Fault tolerant block update write queue entry.\r
+//\r
+typedef struct {\r
+  UINT8       HeaderAllocated : 1;\r
+  UINT8       WritesAllocated : 1;\r
+  UINT8       Complete        : 1;\r
+  UINT8       Reserved        : 5;\r
+  EFI_GUID    CallerId;\r
+  UINT64      NumberOfWrites;\r
+  UINT64      PrivateDataSize;\r
+} EFI_FAULT_TOLERANT_WRITE_HEADER;\r
+\r
+//\r
+// EFI Fault tolerant block update write queue record.\r
+//\r
+typedef struct {\r
+  UINT8      BootBlockUpdate     : 1;\r
+  UINT8      SpareComplete       : 1;\r
+  UINT8      DestinationComplete : 1;\r
+  UINT8      Reserved            : 5;\r
+  EFI_LBA    Lba;\r
+  UINT64     Offset;\r
+  UINT64     Length;\r
+  //\r
+  // Relative offset to spare block.\r
+  //\r
+  INT64      RelativeOffset;\r
+  //\r
+  // UINT8    PrivateData[PrivateDataSize]\r
+  //\r
+} EFI_FAULT_TOLERANT_WRITE_RECORD;\r
+\r
+#define FTW_RECORD_SIZE(PrivateDataSize)  (sizeof (EFI_FAULT_TOLERANT_WRITE_RECORD) + (UINTN) PrivateDataSize)\r
+\r
+#define FTW_RECORD_TOTAL_SIZE(NumberOfWrites, PrivateDataSize) \\r
+    ((UINTN) (NumberOfWrites) * (sizeof (EFI_FAULT_TOLERANT_WRITE_RECORD) + (UINTN) PrivateDataSize))\r
+\r
+#define FTW_WRITE_TOTAL_SIZE(NumberOfWrites, PrivateDataSize) \\r
+    ( \\r
+      sizeof (EFI_FAULT_TOLERANT_WRITE_HEADER) + (UINTN) (NumberOfWrites) * \\r
+      (sizeof (EFI_FAULT_TOLERANT_WRITE_RECORD) + (UINTN) PrivateDataSize) \\r
+    )\r
+\r
 #endif\r