]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFspWrapperPkg/Library/SecPeiFspPlatformSecLibSample/SaveSecContext.c
IntelFspWrapperPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / IntelFspWrapperPkg / Library / SecPeiFspPlatformSecLibSample / SaveSecContext.c
CommitLineData
a33a2f62
JY
1/** @file\r
2 Sample to provide SaveSecContext function.\r
3\r
4 Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>\r
19486360 5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
a33a2f62
JY
6\r
7**/\r
8\r
9\r
10#include <PiPei.h>\r
11#include <Library/DebugLib.h>\r
12\r
13#include <Ppi/TopOfTemporaryRam.h>\r
14#include <Ppi/SecPlatformInformation.h>\r
15\r
16/**\r
17 Save BIST value before call FspInit.\r
18\r
19 @param[in] Bist BIST value.\r
20**/\r
21VOID\r
22AsmSaveBistValue (\r
23 IN UINT32 Bist\r
24 );\r
25\r
26/**\r
27 Save Ticker value before call FspInit.\r
28\r
29 @param[in] Ticker Ticker value.\r
30**/\r
31VOID\r
32AsmSaveTickerValue (\r
33 IN UINT64 Ticker\r
34 );\r
35\r
36/**\r
37 Save SEC context before call FspInit.\r
38\r
39 @param[in] PeiServices Pointer to PEI Services Table.\r
40**/\r
41VOID\r
42EFIAPI\r
43SaveSecContext (\r
44 IN CONST EFI_PEI_SERVICES **PeiServices\r
45 )\r
46{\r
47 UINT32 *Bist;\r
48 UINT64 *Ticker;\r
49 UINT32 Size;\r
50 UINT32 Count;\r
51 UINT32 TopOfTemporaryRam;\r
52 VOID *TopOfTemporaryRamPpi;\r
53 EFI_STATUS Status;\r
54\r
55 DEBUG ((DEBUG_INFO, "SaveSecContext - 0x%x\n", PeiServices));\r
56\r
57 Status = (*PeiServices)->LocatePpi (\r
58 PeiServices,\r
59 &gTopOfTemporaryRamPpiGuid,\r
60 0,\r
61 NULL,\r
62 (VOID **) &TopOfTemporaryRamPpi\r
63 );\r
64 if (EFI_ERROR (Status)) {\r
65 return ;\r
66 }\r
67\r
68 DEBUG ((DEBUG_INFO, "TopOfTemporaryRamPpi - 0x%x\n", TopOfTemporaryRamPpi));\r
69\r
70 //\r
71 // The entries of BIST information, together with the number of them,\r
72 // reside in the bottom of stack, left untouched by normal stack operation.\r
73 // This routine copies the BIST information to the buffer pointed by\r
74 // PlatformInformationRecord for output.\r
75 //\r
76 // |--------------| <- TopOfTemporaryRam\r
77 // |Number of BSPs|\r
78 // |--------------|\r
79 // | BIST |\r
80 // |--------------|\r
81 // | .... |\r
82 // |--------------|\r
83 // | TSC[63:32] |\r
84 // |--------------|\r
85 // | TSC[31:00] |\r
86 // |--------------|\r
87 //\r
88\r
89 TopOfTemporaryRam = (UINT32)(UINTN)TopOfTemporaryRamPpi - sizeof(UINT32);\r
90 TopOfTemporaryRam -= sizeof(UINT32) * 2;\r
91 DEBUG ((DEBUG_INFO, "TopOfTemporaryRam - 0x%x\n", TopOfTemporaryRam));\r
92 Count = *(UINT32 *)(UINTN)(TopOfTemporaryRam - sizeof(UINT32));\r
93 DEBUG ((DEBUG_INFO, "Count - 0x%x\n", Count));\r
94 Size = Count * sizeof (IA32_HANDOFF_STATUS);\r
95 DEBUG ((DEBUG_INFO, "Size - 0x%x\n", Size));\r
96\r
97 Bist = (UINT32 *)(UINTN)(TopOfTemporaryRam - sizeof(UINT32) - Size);\r
98 DEBUG ((DEBUG_INFO, "Bist - 0x%x\n", *Bist));\r
99 Ticker = (UINT64 *)(UINTN)(TopOfTemporaryRam - sizeof(UINT32) - Size - sizeof(UINT64));\r
100 DEBUG ((DEBUG_INFO, "Ticker - 0x%lx\n", *Ticker));\r
101\r
102 // Just need record BSP\r
103 AsmSaveBistValue (*Bist);\r
104 AsmSaveTickerValue (*Ticker);\r
105}\r