]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Application/CapsuleApp/CapsuleApp.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Application / CapsuleApp / CapsuleApp.h
1 /** @file
2 A shell application that triggers capsule update process.
3
4 Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7 **/
8
9 #ifndef _CAPSULE_APP_H_
10 #define _CAPSULE_APP_H_
11
12 #include <Uefi.h>
13 #include <Library/BaseLib.h>
14 #include <Library/DebugLib.h>
15 #include <Library/BaseMemoryLib.h>
16 #include <Library/MemoryAllocationLib.h>
17 #include <Library/UefiBootServicesTableLib.h>
18 #include <Library/UefiRuntimeServicesTableLib.h>
19 #include <Library/UefiLib.h>
20 #include <Library/PrintLib.h>
21 #include <Library/BmpSupportLib.h>
22 #include <Library/FileHandleLib.h>
23 #include <Library/SortLib.h>
24 #include <Library/UefiBootManagerLib.h>
25 #include <Library/DevicePathLib.h>
26 #include <Protocol/GraphicsOutput.h>
27 #include <Protocol/SimpleFileSystem.h>
28 #include <Protocol/ShellParameters.h>
29 #include <Protocol/Shell.h>
30 #include <Protocol/FirmwareManagement.h>
31 #include <Guid/GlobalVariable.h>
32 #include <Guid/CapsuleReport.h>
33 #include <Guid/SystemResourceTable.h>
34 #include <Guid/FmpCapsule.h>
35 #include <Guid/FileInfo.h>
36 #include <Guid/ImageAuthentication.h>
37 #include <Guid/CapsuleVendor.h>
38 #include <Guid/Gpt.h>
39 #include <IndustryStandard/WindowsUxCapsule.h>
40
41 #define CAPSULE_HEADER_SIZE 0x20
42
43 #define NESTED_CAPSULE_HEADER_SIZE SIZE_4KB
44 #define SYSTEM_FIRMWARE_FLAG 0x50000
45 #define DEVICE_FIRMWARE_FLAG 0x78010
46
47 #define MAJOR_VERSION 1
48 #define MINOR_VERSION 0
49
50 #define MAX_CAPSULE_NUM 10
51
52 //
53 // (20 * (6+5+2))+1) unicode characters from EFI FAT spec (doubled for bytes)
54 //
55 #define MAX_FILE_NAME_SIZE 522
56 #define MAX_FILE_NAME_LEN (MAX_FILE_NAME_SIZE / sizeof(CHAR16))
57
58 extern UINTN Argc;
59 extern CHAR16 **Argv;
60
61 /**
62
63 This function parse application ARG.
64
65 @return Status
66 **/
67 EFI_STATUS
68 GetArg (
69 VOID
70 );
71
72 /**
73 Get shell protocol.
74
75 @return Pointer to shell protocol.
76
77 **/
78 EFI_SHELL_PROTOCOL *
79 GetShellProtocol (
80 VOID
81 );
82
83 /**
84 Read a file.
85
86 @param[in] FileName The file to be read.
87 @param[out] BufferSize The file buffer size
88 @param[out] Buffer The file buffer
89
90 @retval EFI_SUCCESS Read file successfully
91 @retval EFI_NOT_FOUND Shell protocol or file not found
92 @retval others Read file failed
93 **/
94 EFI_STATUS
95 ReadFileToBuffer (
96 IN CHAR16 *FileName,
97 OUT UINTN *BufferSize,
98 OUT VOID **Buffer
99 );
100
101 /**
102 Write a file.
103
104 @param[in] FileName The file to be written.
105 @param[in] BufferSize The file buffer size
106 @param[in] Buffer The file buffer
107
108 @retval EFI_SUCCESS Write file successfully
109 @retval EFI_NOT_FOUND Shell protocol not found
110 @retval others Write file failed
111 **/
112 EFI_STATUS
113 WriteFileFromBuffer (
114 IN CHAR16 *FileName,
115 IN UINTN BufferSize,
116 IN VOID *Buffer
117 );
118
119 /**
120 Dump capsule information
121
122 @param[in] CapsuleName The name of the capsule image.
123
124 @retval EFI_SUCCESS The capsule information is dumped.
125 @retval EFI_UNSUPPORTED Input parameter is not valid.
126 **/
127 EFI_STATUS
128 DumpCapsule (
129 IN CHAR16 *CapsuleName
130 );
131
132 /**
133 Dump capsule status variable.
134
135 @retval EFI_SUCCESS The capsule status variable is dumped.
136 @retval EFI_UNSUPPORTED Input parameter is not valid.
137 **/
138 EFI_STATUS
139 DumpCapsuleStatusVariable (
140 VOID
141 );
142
143 /**
144 Dump FMP protocol info.
145 **/
146 VOID
147 DumpFmpData (
148 VOID
149 );
150
151 /**
152 Dump FMP image data.
153
154 @param[in] ImageTypeId The ImageTypeId of the FMP image.
155 It is used to identify the FMP protocol.
156 @param[in] ImageIndex The ImageIndex of the FMP image.
157 It is the input parameter for FMP->GetImage().
158 @param[in] ImageName The file name to hold the output FMP image.
159 **/
160 VOID
161 DumpFmpImage (
162 IN EFI_GUID *ImageTypeId,
163 IN UINTN ImageIndex,
164 IN CHAR16 *ImageName
165 );
166
167 /**
168 Dump ESRT info.
169 **/
170 VOID
171 DumpEsrtData (
172 VOID
173 );
174
175 /**
176 Dump Provisioned Capsule.
177
178 @param[in] DumpCapsuleInfo The flag to indicate whether to dump the capsule inforomation.
179 **/
180 VOID
181 DumpProvisionedCapsule (
182 IN BOOLEAN DumpCapsuleInfo
183 );
184
185 /**
186 Dump all EFI System Partition.
187 **/
188 VOID
189 DumpAllEfiSysPartition (
190 VOID
191 );
192
193 /**
194 Get SimpleFileSystem from boot option file path.
195
196 @param[in] DevicePath The file path of boot option
197 @param[out] FullPath The full device path of boot device
198 @param[out] Fs The file system within EfiSysPartition
199
200 @retval EFI_SUCCESS Get file system successfully
201 @retval EFI_NOT_FOUND No valid file system found
202 @retval others Get file system failed
203
204 **/
205 EFI_STATUS
206 GetEfiSysPartitionFromBootOptionFilePath (
207 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
208 OUT EFI_DEVICE_PATH_PROTOCOL **FullPath,
209 OUT EFI_SIMPLE_FILE_SYSTEM_PROTOCOL **Fs
210 );
211
212 /**
213 Process Capsule On Disk.
214
215 @param[in] CapsuleBuffer An array of pointer to capsule images
216 @param[in] CapsuleBufferSize An array of UINTN to capsule images size
217 @param[in] FilePath An array of capsule images file path
218 @param[in] Map File system mapping string
219 @param[in] CapsuleNum The count of capsule images
220
221 @retval EFI_SUCCESS Capsule on disk success.
222 @retval others Capsule on disk fail.
223
224 **/
225 EFI_STATUS
226 ProcessCapsuleOnDisk (
227 IN VOID **CapsuleBuffer,
228 IN UINTN *CapsuleBufferSize,
229 IN CHAR16 **FilePath,
230 IN CHAR16 *Map,
231 IN UINTN CapsuleNum
232 );
233
234 #endif