1 | /** @file
|
---|
2 | Common header file.
|
---|
3 |
|
---|
4 | Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
|
---|
5 | Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
|
---|
6 |
|
---|
7 | SPDX-License-Identifier: BSD-2-Clause-Patent
|
---|
8 |
|
---|
9 | **/
|
---|
10 |
|
---|
11 | #ifndef _CAPSULE_COMMON_HEADER_
|
---|
12 | #define _CAPSULE_COMMON_HEADER_
|
---|
13 |
|
---|
14 | //
|
---|
15 | // 8 extra pages for PF handler.
|
---|
16 | //
|
---|
17 | #define EXTRA_PAGE_TABLE_PAGES 8
|
---|
18 |
|
---|
19 | #define PAGING_1G_ADDRESS_MASK_64 0x000FFFFFC0000000ull
|
---|
20 |
|
---|
21 | //
|
---|
22 | // This capsule PEIM puts its private data at the start of the
|
---|
23 | // coalesced capsule. Here's the structure definition.
|
---|
24 | //
|
---|
25 | #define EFI_CAPSULE_PEIM_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('C', 'a', 'p', 'P')
|
---|
26 |
|
---|
27 | #pragma pack(1)
|
---|
28 | typedef struct {
|
---|
29 | UINT64 Signature;
|
---|
30 | UINT64 CapsuleAllImageSize;
|
---|
31 | UINT64 CapsuleNumber;
|
---|
32 | UINT64 CapsuleOffset[1];
|
---|
33 | } EFI_CAPSULE_PEIM_PRIVATE_DATA;
|
---|
34 | #pragma pack()
|
---|
35 |
|
---|
36 | typedef struct {
|
---|
37 | ///
|
---|
38 | /// The physical start address of the resource region.
|
---|
39 | ///
|
---|
40 | EFI_PHYSICAL_ADDRESS PhysicalStart;
|
---|
41 | ///
|
---|
42 | /// The number of bytes of the resource region.
|
---|
43 | ///
|
---|
44 | UINT64 ResourceLength;
|
---|
45 | } MEMORY_RESOURCE_DESCRIPTOR;
|
---|
46 |
|
---|
47 | #define CAPSULE_TEST_SIGNATURE SIGNATURE_32('T', 'E', 'S', 'T')
|
---|
48 |
|
---|
49 | #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)
|
---|
50 | #pragma pack(1)
|
---|
51 | typedef struct {
|
---|
52 | EFI_PHYSICAL_ADDRESS EntryPoint;
|
---|
53 | EFI_PHYSICAL_ADDRESS StackBufferBase;
|
---|
54 | UINT64 StackBufferLength;
|
---|
55 | EFI_PHYSICAL_ADDRESS JumpBuffer;
|
---|
56 | EFI_PHYSICAL_ADDRESS BlockListAddr;
|
---|
57 | EFI_PHYSICAL_ADDRESS MemoryResource;
|
---|
58 | EFI_PHYSICAL_ADDRESS MemoryBase64Ptr;
|
---|
59 | EFI_PHYSICAL_ADDRESS MemorySize64Ptr;
|
---|
60 | BOOLEAN Page1GSupport;
|
---|
61 | UINT64 AddressEncMask;
|
---|
62 | } SWITCH_32_TO_64_CONTEXT;
|
---|
63 |
|
---|
64 | typedef struct {
|
---|
65 | UINT16 ReturnCs;
|
---|
66 | EFI_PHYSICAL_ADDRESS ReturnEntryPoint;
|
---|
67 | UINT64 ReturnStatus;
|
---|
68 | //
|
---|
69 | // NOTICE:
|
---|
70 | // Be careful about the Base field of IA32_DESCRIPTOR
|
---|
71 | // that is UINTN type.
|
---|
72 | // To extend new field for this structure, add it to
|
---|
73 | // right before this Gdtr field.
|
---|
74 | //
|
---|
75 | IA32_DESCRIPTOR Gdtr;
|
---|
76 | } SWITCH_64_TO_32_CONTEXT;
|
---|
77 | #pragma pack()
|
---|
78 | #endif
|
---|
79 |
|
---|
80 | /**
|
---|
81 | The function to coalesce a fragmented capsule in memory.
|
---|
82 |
|
---|
83 | @param PeiServices General purpose services available to every PEIM.
|
---|
84 | @param BlockListBuffer Point to the buffer of Capsule Descriptor Variables.
|
---|
85 | @param MemoryResource Pointer to the buffer of memory resource descriptor.
|
---|
86 | @param MemoryBase Pointer to the base of a block of memory that we can walk
|
---|
87 | all over while trying to coalesce our buffers.
|
---|
88 | On output, this variable will hold the base address of
|
---|
89 | a coalesced capsule.
|
---|
90 | @param MemorySize Size of the memory region pointed to by MemoryBase.
|
---|
91 | On output, this variable will contain the size of the
|
---|
92 | coalesced capsule.
|
---|
93 |
|
---|
94 | @retval EFI_NOT_FOUND if we can't determine the boot mode
|
---|
95 | if the boot mode is not flash-update
|
---|
96 | if we could not find the capsule descriptors
|
---|
97 |
|
---|
98 | @retval EFI_BUFFER_TOO_SMALL
|
---|
99 | if we could not coalesce the capsule in the memory
|
---|
100 | region provided to us
|
---|
101 |
|
---|
102 | @retval EFI_SUCCESS if there's no capsule, or if we processed the
|
---|
103 | capsule successfully.
|
---|
104 | **/
|
---|
105 | EFI_STATUS
|
---|
106 | EFIAPI
|
---|
107 | CapsuleDataCoalesce (
|
---|
108 | IN EFI_PEI_SERVICES **PeiServices,
|
---|
109 | IN EFI_PHYSICAL_ADDRESS *BlockListBuffer,
|
---|
110 | IN MEMORY_RESOURCE_DESCRIPTOR *MemoryResource,
|
---|
111 | IN OUT VOID **MemoryBase,
|
---|
112 | IN OUT UINTN *MemorySize
|
---|
113 | );
|
---|
114 |
|
---|
115 | #endif
|
---|