--- /dev/null
+/** @file\r
+ This file defines the data structures that comprise the FFS file system.\r
+\r
+ Copyright (c) 2006, Intel Corporation \r
+ All rights reserved. This program and the accompanying materials \r
+ are licensed and made available under the terms and conditions of the BSD License \r
+ which accompanies this distribution. 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
+\r
+ Module Name: FirmwareFileSystem.h\r
+\r
+ @par Revision Reference:\r
+ These definitions are from Firmware File System Spec 0.9.\r
+\r
+**/\r
+\r
+#ifndef __EFI_FFS_FILE_SYSTEM_H__\r
+#define __EFI_FFS_FILE_SYSTEM_H__\r
+\r
+///\r
+/// FFS specific file types\r
+///\r
+#define EFI_FV_FILETYPE_FFS_PAD 0xF0\r
+\r
+//\r
+// FFS File Attributes\r
+//\r
+#define FFS_ATTRIB_TAIL_PRESENT 0x01\r
+#define FFS_ATTRIB_RECOVERY 0x02\r
+#define FFS_ATTRIB_HEADER_EXTENSION 0x04\r
+#define FFS_ATTRIB_DATA_ALIGNMENT 0x38\r
+#define FFS_ATTRIB_CHECKSUM 0x40\r
+\r
+///\r
+/// FFS_FIXED_CHECKSUM is the default checksum value used when the\r
+/// FFS_ATTRIB_CHECKSUM attribute bit is clear\r
+/// note this is NOT an architecturally defined value, but is in this file for\r
+/// implementation convenience\r
+///\r
+#define FFS_FIXED_CHECKSUM 0x5A\r
+\r
+//\r
+// File state definitions\r
+//\r
+#define EFI_FILE_HEADER_CONSTRUCTION 0x01\r
+#define EFI_FILE_HEADER_VALID 0x02\r
+#define EFI_FILE_DATA_VALID 0x04\r
+#define EFI_FILE_MARKED_FOR_UPDATE 0x08\r
+#define EFI_FILE_DELETED 0x10\r
+#define EFI_FILE_HEADER_INVALID 0x20\r
+\r
+#define EFI_FILE_ALL_STATE_BITS (EFI_FILE_HEADER_CONSTRUCTION | \\r
+ EFI_FILE_HEADER_VALID | \\r
+ EFI_FILE_DATA_VALID | \\r
+ EFI_FILE_MARKED_FOR_UPDATE | \\r
+ EFI_FILE_DELETED | \\r
+ EFI_FILE_HEADER_INVALID \\r
+ )\r
+\r
+#define EFI_TEST_FFS_ATTRIBUTES_BIT(FvbAttributes, TestAttributes, Bit) \\r
+ ( \\r
+ (BOOLEAN) ( \\r
+ (FvbAttributes & EFI_FVB_ERASE_POLARITY) ? (((~TestAttributes) & Bit) == Bit) : ((TestAttributes & Bit) == Bit) \\r
+ ) \\r
+ )\r
+\r
+typedef UINT16 EFI_FFS_FILE_TAIL;\r
+\r
+///\r
+/// FFS file integrity check structure\r
+///\r
+typedef union {\r
+ struct {\r
+ UINT8 Header;\r
+ UINT8 File;\r
+ } Checksum;\r
+ UINT16 TailReference;\r
+} EFI_FFS_INTEGRITY_CHECK;\r
+\r
+//\r
+// FFS file header definition\r
+//\r
+typedef UINT8 EFI_FFS_FILE_ATTRIBUTES;\r
+typedef UINT8 EFI_FFS_FILE_STATE;\r
+\r
+typedef struct {\r
+ EFI_GUID Name;\r
+ EFI_FFS_INTEGRITY_CHECK IntegrityCheck;\r
+ EFI_FV_FILETYPE Type;\r
+ EFI_FFS_FILE_ATTRIBUTES Attributes;\r
+ UINT8 Size[3];\r
+ EFI_FFS_FILE_STATE State;\r
+} EFI_FFS_FILE_HEADER;\r
+\r
+#endif\r