]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Include/AsmMacroIoLib.inc
ArmPlatformPkg/ArmPlatformStackLib: Introduced helper library to initialize stacks
[mirror_edk2.git] / ArmPkg / Include / AsmMacroIoLib.inc
CommitLineData
2ef2b01e
A
1;%HEADER%\r
2;/** @file\r
3; Macros to work around lack of Apple support for LDR register, =expr\r
4;\r
d6ebcab7 5; Copyright (c) 2009, Apple Inc. All rights reserved.<BR>\r
1377db63 6; Copyright (c) 2011-2012, ARM Ltd. All rights reserved.<BR>\r
7;\r
d6ebcab7
HT
8; This program and the accompanying materials \r
9; are licensed and made available under the terms and conditions of the BSD License \r
10; which accompanies this distribution. The full text of the license may be found at \r
11; http://opensource.org/licenses/bsd-license.php \r
12; \r
13; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
14; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
2ef2b01e
A
15;\r
16;**/\r
17\r
18\r
19 MACRO \r
20 MmioWrite32Macro $Address, $Data \r
21 ldr r1, = ($Address) \r
22 ldr r0, = ($Data) \r
23 str r0, [r1] \r
24 MEND\r
25 \r
26 MACRO \r
27 MmioOr32Macro $Address, $OrData \r
28 ldr r1, =($Address) \r
29 ldr r2, =($OrData) \r
30 ldr r0, [r1] \r
31 orr r0, r0, r2 \r
32 str r0, [r1] \r
33 MEND\r
34\r
35 MACRO \r
36 MmioAnd32Macro $Address, $AndData \r
37 ldr r1, =($Address) \r
38 ldr r2, =($AndData) \r
39 ldr r0, [r1] \r
40 and r0, r0, r2 \r
41 str r0, [r1] \r
42 MEND\r
43\r
44 MACRO \r
45 MmioAndThenOr32Macro $Address, $AndData, $OrData \r
46 ldr r1, =($Address) \r
47 ldr r0, [r1] \r
48 ldr r2, =($AndData) \r
49 and r0, r0, r2 \r
50 ldr r2, =($OrData) \r
51 orr r0, r0, r2 \r
52 str r0, [r1] \r
53 MEND\r
54\r
55 MACRO \r
56 MmioWriteFromReg32Macro $Address, $Reg \r
57 ldr r1, =($Address) \r
58 str $Reg, [r1] \r
59 MEND\r
60\r
61 MACRO \r
62 MmioRead32Macro $Address \r
63 ldr r1, =($Address) \r
64 ldr r0, [r1] \r
65 MEND\r
66\r
67 MACRO \r
68 MmioReadToReg32Macro $Address, $Reg \r
69 ldr r1, =($Address) \r
70 ldr $Reg, [r1] \r
71 MEND\r
72\r
73 MACRO \r
74 LoadConstantMacro $Data \r
75 ldr r0, =($Data) \r
76 MEND\r
77\r
78 MACRO \r
79 LoadConstantToRegMacro $Data, $Reg \r
80 ldr $Reg, =($Data) \r
81 MEND \r
2dbcb8f0 82 \r
83 MACRO\r
a32dae48 84 GetCorePositionFromMpId $Pos, $MpId, $Tmp\r
2dbcb8f0 85 lsr $Pos, $MpId, #6\r
86 and $Tmp, $MpId, #3\r
87 add $Pos, $Pos, $Tmp\r
88 MEND\r
89 \r
90 ; The reserved place must be 8-bytes aligned for pushing 64-bit variable on the stack\r
1377db63 91 ; Note: Global Size will be modified\r
2dbcb8f0 92 MACRO\r
93 SetPrimaryStack $StackTop, $GlobalSize, $Tmp\r
94 and $Tmp, $GlobalSize, #7\r
95 rsbne $Tmp, $Tmp, #8\r
96 add $GlobalSize, $GlobalSize, $Tmp\r
97 sub sp, $StackTop, $GlobalSize\r
1377db63 98\r
99 ; Set all the global variables to 0\r
100 mov $Tmp, sp\r
101 mov $GlobalSize, #0x0\r
102_SetPrimaryStackInitGlobals\r
103 cmp $Tmp, $StackTop\r
104 beq _SetPrimaryStackEnd\r
105 str $GlobalSize, [$Tmp], #4\r
106 b _SetPrimaryStackInitGlobals\r
1377db63 107_SetPrimaryStackEnd\r
2dbcb8f0 108 MEND\r
2ef2b01e 109\r
17839a45 110 MACRO\r
111 InitializePrimaryStack $GlobalSize, $Tmp1\r
112 and $Tmp1, $GlobalSize, #7\r
113 rsbne $Tmp1, $Tmp1, #8\r
114 add $GlobalSize, $GlobalSize, $Tmp1\r
115\r
116 mov $Tmp1, sp\r
117 sub sp, $GlobalSize\r
118 ; Set all the global variables to 0\r
119 mov $GlobalSize, #0x0\r
120_InitializePrimaryStackLoop\r
121 cmp $Tmp1, sp\r
122 bls _InitializePrimaryStackEnd\r
123 str $GlobalSize, [$Tmp1], #-4\r
124 b _InitializePrimaryStackLoop\r
125_InitializePrimaryStackEnd\r
126 MEND\r
127\r
2ef2b01e 128 END\r