1 /*++ 2 3 Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR> 4 This program and the accompanying materials 5 are licensed and made available under the terms and conditions of the BSD License 6 which accompanies this distribution. The full text of the license may be found at 7 http://opensource.org/licenses/bsd-license.php 8 9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 12 Module Name: 13 14 EfiCapsule.h 15 16 Abstract: 17 18 Defines for the EFI Capsule functionality 19 20 --*/ 21 22 #ifndef _EFI_CAPSULE_H_ 23 #define _EFI_CAPSULE_H_ 24 25 26 #define CAPSULE_BLOCK_DESCRIPTOR_SIGNATURE EFI_SIGNATURE_32 ('C', 'B', 'D', 'S') 27 28 typedef struct { 29 EFI_GUID OemGuid; 30 UINT32 HeaderSize; 31 // 32 // UINT8 OemHdrData[]; 33 // 34 } EFI_CAPSULE_OEM_HEADER; 35 36 #if (EFI_SPECIFICATION_VERSION >= 0x00020000) 37 38 #define MAX_SUPPORT_CAPSULE_NUM 50 39 #define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000 40 #define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000 41 42 typedef struct { 43 UINT64 Length; 44 union { 45 EFI_PHYSICAL_ADDRESS DataBlock; 46 EFI_PHYSICAL_ADDRESS ContinuationPointer; 47 } Union; 48 } EFI_CAPSULE_BLOCK_DESCRIPTOR; 49 50 typedef struct { 51 EFI_GUID CapsuleGuid; 52 UINT32 HeaderSize; 53 UINT32 Flags; 54 UINT32 CapsuleImageSize; 55 } EFI_CAPSULE_HEADER; 56 57 typedef struct { 58 UINT32 CapsuleArrayNumber; 59 VOID* CapsulePtr[1]; 60 } EFI_CAPSULE_TABLE; 61 62 // 63 // This struct is deprecated because VendorTable entries physical address will not be fixed up when 64 // transitioning from preboot to runtime phase. So we don't need CapsuleInfoTable to record capsule 65 // GUIDs any more for runtime convert. 66 // 67 typedef struct { 68 UINT32 CapsuleGuidNumber; 69 EFI_GUID CapsuleGuidPtr[1]; 70 } EFI_CAPSULE_INFO_TABLE; 71 72 // 73 // This GUID is used for collecting all capsules' Guids who install in ConfigTable. 74 // This GUID is deprecated as well. 75 // 76 #define EFI_CAPSULE_INFO_GUID \ 77 { \ 78 0x8B34EAC7, 0x2690, 0x460B, {0x8B, 0xA5, 0xD5, 0xCF, 0x32, 0x83, 0x17, 0x35} \ 79 } 80 81 #else 82 83 typedef struct { 84 EFI_GUID CapsuleGuid; 85 UINT32 HeaderSize; 86 UINT32 Flags; 87 UINT32 CapsuleImageSize; 88 UINT32 SequenceNumber; 89 EFI_GUID InstanceId; 90 UINT32 OffsetToSplitInformation; 91 UINT32 OffsetToCapsuleBody; 92 UINT32 OffsetToOemDefinedHeader; 93 UINT32 OffsetToAuthorInformation; 94 UINT32 OffsetToRevisionInformation; 95 UINT32 OffsetToShortDescription; 96 UINT32 OffsetToLongDescription; 97 UINT32 OffsetToApplicableDevices; 98 } EFI_CAPSULE_HEADER; 99 100 // 101 // An array of these describe the blocks that make up a capsule for 102 // a capsule update. 103 // 104 typedef struct { 105 UINT64 Length; // length of the data block 106 EFI_PHYSICAL_ADDRESS Data; // physical address of the data block 107 UINT32 Signature; // CBDS 108 UINT32 CheckSum; // to sum this structure to 0 109 } EFI_CAPSULE_BLOCK_DESCRIPTOR; 110 111 #endif 112 113 // 114 // Bits in the flags field of the capsule header 115 // 116 #define EFI_CAPSULE_HEADER_FLAG_SETUP 0x00000001 // supports setup changes 117 // 118 // This is the GUID of the capsule header of the image on disk. 119 // 120 #define EFI_CAPSULE_GUID \ 121 { \ 122 0x3B6686BD, 0x0D76, 0x4030, {0xB7, 0x0E, 0xB5, 0x51, 0x9E, 0x2F, 0xC5, 0xA0} \ 123 } 124 125 // 126 // This is the GUID of the file created by the capsule application that contains 127 // the path to the device(s) to update. 128 // 129 #define EFI_PATH_FILE_NAME_GUID \ 130 { \ 131 0x7644C181, 0xFA6E, 0x46DA, {0x80, 0xCB, 0x04, 0xB9, 0x90, 0x40, 0x62, 0xE8} \ 132 } 133 // 134 // This is the GUID of the configuration results file created by the capsule 135 // application. 136 // 137 #define EFI_CONFIG_FILE_NAME_GUID \ 138 { \ 139 0x98B8D59B, 0xE8BA, 0x48EE, {0x98, 0xDD, 0xC2, 0x95, 0x39, 0x2F, 0x1E, 0xDB} \ 140 } 141 142 #endif // #ifndef _EFI_CAPSULE_H_ 143