]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Core/Pei/Hob/Hob.c
Fix function comment to follows doxygen format.
[mirror_edk2.git] / MdeModulePkg / Core / Pei / Hob / Hob.c
CommitLineData
615c6dd0 1/** @file\r
b1f6a7c6 2 This module provide Hand-Off Block manupulation.\r
3 \r
192f6d4c 4Copyright (c) 2006, Intel Corporation \r
5All rights reserved. This program and the accompanying materials \r
6are licensed and made available under the terms and conditions of the BSD License \r
7which accompanies this distribution. The full text of the license may be found at \r
8http://opensource.org/licenses/bsd-license.php \r
9 \r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
12\r
b1f6a7c6 13**/\r
192f6d4c 14\r
b1f6a7c6 15#include <PeiMain.h>\r
192f6d4c 16\r
b1f6a7c6 17/**\r
192f6d4c 18\r
b1f6a7c6 19 Gets the pointer to the HOB List.\r
192f6d4c 20\r
192f6d4c 21\r
b1f6a7c6 22 @param PeiServices The PEI core services table.\r
23 @param HobList Pointer to the HOB List.\r
24\r
25 @retval EFI_SUCCESS Get the pointer of HOB List\r
26 @retval EFI_NOT_AVAILABLE_YET the HOB List is not yet published\r
27 @retval EFI_INVALID_PARAMETER HobList is NULL (in debug mode)\r
192f6d4c 28\r
b1f6a7c6 29**/\r
192f6d4c 30EFI_STATUS\r
31EFIAPI\r
32PeiGetHobList (\r
0c2b5da8 33 IN CONST EFI_PEI_SERVICES **PeiServices,\r
192f6d4c 34 IN OUT VOID **HobList\r
35 )\r
192f6d4c 36{\r
37 PEI_CORE_INSTANCE *PrivateData;\r
38\r
39 \r
40 //\r
41 // Only check this parameter in debug mode\r
42 //\r
43 \r
44 DEBUG_CODE_BEGIN (); \r
45 if (HobList == NULL) {\r
46 return EFI_INVALID_PARAMETER;\r
47 }\r
48 DEBUG_CODE_END ();\r
49 \r
50 PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS(PeiServices);\r
51\r
52 *HobList = PrivateData->HobList.Raw;\r
53\r
54\r
55 return EFI_SUCCESS; \r
56}\r
57\r
58\r
b1f6a7c6 59/**\r
60 Add a new HOB to the HOB List.\r
61\r
62 @param PeiServices - The PEI core services table.\r
63 @param Type - Type of the new HOB.\r
64 @param Length - Length of the new HOB to allocate.\r
65 @param Hob - Pointer to the new HOB.\r
66\r
67 @return EFI_SUCCESS Success to create hob.\r
68 @retval EFI_INVALID_PARAMETER if Hob is NULL\r
69 @retval EFI_NOT_AVAILABLE_YET if HobList is still not available.\r
70 @retval EFI_OUT_OF_RESOURCES if there is no more memory to grow the Hoblist.\r
71\r
72**/\r
192f6d4c 73EFI_STATUS\r
74EFIAPI\r
75PeiCreateHob (\r
0c2b5da8 76 IN CONST EFI_PEI_SERVICES **PeiServices,\r
192f6d4c 77 IN UINT16 Type,\r
78 IN UINT16 Length,\r
79 IN OUT VOID **Hob\r
80 )\r
192f6d4c 81{\r
82 EFI_STATUS Status;\r
83 EFI_HOB_HANDOFF_INFO_TABLE *HandOffHob;\r
84 EFI_HOB_GENERIC_HEADER *HobEnd;\r
85 EFI_PHYSICAL_ADDRESS FreeMemory;\r
86\r
87\r
88 Status = PeiGetHobList (PeiServices, Hob);\r
89 if (EFI_ERROR(Status)) {\r
90 return Status;\r
91 }\r
92\r
93 HandOffHob = *Hob;\r
94\r
95 Length = (UINT16)((Length + 0x7) & (~0x7));\r
96\r
97 FreeMemory = HandOffHob->EfiFreeMemoryTop -\r
98 HandOffHob->EfiFreeMemoryBottom;\r
99\r
100 if (FreeMemory < Length) {\r
101 DEBUG ((EFI_D_ERROR, "PeiCreateHob fail: Length - 0x%08x\n", (UINTN)Length));\r
102 DEBUG ((EFI_D_ERROR, " FreeMemoryTop - 0x%08x\n", (UINTN)HandOffHob->EfiFreeMemoryTop));\r
103 DEBUG ((EFI_D_ERROR, " FreeMemoryBottom - 0x%08x\n", (UINTN)HandOffHob->EfiFreeMemoryBottom));\r
104 return EFI_OUT_OF_RESOURCES;\r
105 }\r
106 \r
107 *Hob = (VOID*) (UINTN) HandOffHob->EfiEndOfHobList;\r
108 ((EFI_HOB_GENERIC_HEADER*) *Hob)->HobType = Type;\r
109 ((EFI_HOB_GENERIC_HEADER*) *Hob)->HobLength = Length;\r
110 ((EFI_HOB_GENERIC_HEADER*) *Hob)->Reserved = 0;\r
111\r
112 HobEnd = (EFI_HOB_GENERIC_HEADER*) ((UINTN) *Hob + Length);\r
113 HandOffHob->EfiEndOfHobList = (EFI_PHYSICAL_ADDRESS) (UINTN) HobEnd;\r
114 \r
115 HobEnd->HobType = EFI_HOB_TYPE_END_OF_HOB_LIST;\r
116 HobEnd->HobLength = sizeof(EFI_HOB_GENERIC_HEADER);\r
117 HobEnd->Reserved = 0;\r
118 HobEnd++;\r
119 HandOffHob->EfiFreeMemoryBottom = (EFI_PHYSICAL_ADDRESS) (UINTN) HobEnd;\r
120\r
121\r
122 return EFI_SUCCESS; \r
123}\r
124\r
125\r
b1f6a7c6 126/**\r
127\r
128 Builds a Handoff Information Table HOB\r
129\r
130 @param BootMode - Current Bootmode\r
131 @param MemoryBegin - Start Memory Address.\r
132 @param MemoryLength - Length of Memory.\r
133\r
134 @return EFI_SUCCESS Always success to initialize HOB.\r
135\r
136**/\r
192f6d4c 137EFI_STATUS\r
138PeiCoreBuildHobHandoffInfoTable (\r
139 IN EFI_BOOT_MODE BootMode,\r
140 IN EFI_PHYSICAL_ADDRESS MemoryBegin,\r
141 IN UINT64 MemoryLength\r
142 )\r
192f6d4c 143{\r
144 EFI_HOB_HANDOFF_INFO_TABLE *Hob;\r
145 EFI_HOB_GENERIC_HEADER *HobEnd;\r
146\r
147 Hob = (VOID *)(UINTN)MemoryBegin;\r
148 HobEnd = (EFI_HOB_GENERIC_HEADER*) (Hob+1);\r
149 Hob->Header.HobType = EFI_HOB_TYPE_HANDOFF;\r
150 Hob->Header.HobLength = sizeof(EFI_HOB_HANDOFF_INFO_TABLE);\r
151 Hob->Header.Reserved = 0;\r
152 \r
153 HobEnd->HobType = EFI_HOB_TYPE_END_OF_HOB_LIST;\r
154 HobEnd->HobLength = sizeof(EFI_HOB_GENERIC_HEADER);\r
155 HobEnd->Reserved = 0;\r
156\r
157 Hob->Version = EFI_HOB_HANDOFF_TABLE_VERSION;\r
158 Hob->BootMode = BootMode;\r
159 \r
160 Hob->EfiMemoryTop = MemoryBegin + MemoryLength;\r
161 Hob->EfiMemoryBottom = MemoryBegin;\r
162 Hob->EfiFreeMemoryTop = MemoryBegin + MemoryLength;\r
163 Hob->EfiFreeMemoryBottom = (EFI_PHYSICAL_ADDRESS) (UINTN) (HobEnd+1);\r
164 Hob->EfiEndOfHobList = (EFI_PHYSICAL_ADDRESS) (UINTN) HobEnd;\r
165\r
166 return EFI_SUCCESS;\r
167}\r