]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPlatformPkg/Library/ArmPlatformGlobalVariableLib/Pei/PeiArmPlatformGlobalVariableLib.c
ArmPlatformPkg: remove PeiServicesTablePointerLib implementation
[mirror_edk2.git] / ArmPlatformPkg / Library / ArmPlatformGlobalVariableLib / Pei / PeiArmPlatformGlobalVariableLib.c
CommitLineData
1e57a462 1/** @file\r
2*\r
3* Copyright (c) 2011-2012, ARM Limited. All rights reserved.\r
4*\r
5* This program and the accompanying materials\r
6* are licensed and made available under the terms and conditions of the BSD License\r
7* which accompanies this distribution. The full text of the license may be found at\r
8* http://opensource.org/licenses/bsd-license.php\r
9*\r
10* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12*\r
13**/\r
14\r
15#include <Uefi.h>\r
16#include <Library/ArmPlatformGlobalVariableLib.h>\r
17#include <Library/BaseLib.h>\r
18#include <Library/BaseMemoryLib.h>\r
19#include <Library/PcdLib.h>\r
20#include <Library/DebugLib.h>\r
21\r
22// Declared by ArmPlatformPkg/PrePi Module\r
23extern UINTN mGlobalVariableBase;\r
24\r
25VOID\r
26ArmPlatformGetGlobalVariable (\r
27 IN UINTN VariableOffset,\r
28 IN UINTN VariableSize,\r
29 OUT VOID* Variable\r
30 )\r
31{\r
32 UINTN GlobalVariableBase;\r
33\r
34 // Ensure the Global Variable Size have been initialized\r
35 ASSERT (VariableOffset < PcdGet32 (PcdPeiGlobalVariableSize));\r
36\r
bb5420bb 37 GlobalVariableBase = PcdGet64 (PcdCPUCoresStackBase) + PcdGet32 (PcdCPUCorePrimaryStackSize) - PcdGet32 (PcdPeiGlobalVariableSize);\r
1e57a462 38\r
39 if (VariableSize == 4) {\r
40 *(UINT32*)Variable = ReadUnaligned32 ((CONST UINT32*)(GlobalVariableBase + VariableOffset));\r
41 } else if (VariableSize == 8) {\r
42 *(UINT64*)Variable = ReadUnaligned64 ((CONST UINT64*)(GlobalVariableBase + VariableOffset));\r
43 } else {\r
44 CopyMem (Variable, (VOID*)(GlobalVariableBase + VariableOffset), VariableSize);\r
45 }\r
46}\r
47\r
48VOID\r
49ArmPlatformSetGlobalVariable (\r
50 IN UINTN VariableOffset,\r
51 IN UINTN VariableSize,\r
52 OUT VOID* Variable\r
53 )\r
54{\r
55 UINTN GlobalVariableBase;\r
56\r
57 // Ensure the Global Variable Size have been initialized\r
58 ASSERT (VariableOffset < PcdGet32 (PcdPeiGlobalVariableSize));\r
59\r
bb5420bb 60 GlobalVariableBase = PcdGet64 (PcdCPUCoresStackBase) + PcdGet32 (PcdCPUCorePrimaryStackSize) - PcdGet32 (PcdPeiGlobalVariableSize);\r
1e57a462 61\r
62 if (VariableSize == 4) {\r
63 WriteUnaligned32 ((UINT32*)(GlobalVariableBase + VariableOffset), *(UINT32*)Variable);\r
64 } else if (VariableSize == 8) {\r
65 WriteUnaligned64 ((UINT64*)(GlobalVariableBase + VariableOffset), *(UINT64*)Variable);\r
66 } else {\r
67 CopyMem ((VOID*)(GlobalVariableBase + VariableOffset), Variable, VariableSize);\r
68 }\r
69}\r
70\r
71VOID*\r
72ArmPlatformGetGlobalVariableAddress (\r
73 IN UINTN VariableOffset\r
74 )\r
75{\r
76 UINTN GlobalVariableBase;\r
77\r
78 // Ensure the Global Variable Size have been initialized\r
79 ASSERT (VariableOffset < PcdGet32 (PcdPeiGlobalVariableSize));\r
80\r
bb5420bb 81 GlobalVariableBase = PcdGet64 (PcdCPUCoresStackBase) + PcdGet32 (PcdCPUCorePrimaryStackSize) - PcdGet32 (PcdPeiGlobalVariableSize);\r
1e57a462 82\r
83 return (VOID*)(GlobalVariableBase + VariableOffset);\r
84}\r