ArmPlatformPkg/ArmPlatformStackLib: Introduced helper library to initialize stacks

The new functions are:
- ArmPlatformStackSet(IN UINTN StackBase, IN UINTN MpId, IN UINTN PrimaryStackSize, IN UINTN SecondaryStackSize);
- ArmPlatformStackSetPrimary(IN UINTN StackBase, IN UINTN MpId, IN UINTN PrimaryStackSize, IN UINTN SecondaryStackSize);
- ArmPlatformStackSetSecondary(IN UINTN StackBase, IN UINTN MpId, IN UINTN PrimaryStackSize, IN UINTN SecondaryStackSize);

The stack topology can be changed by implementing a new ArmPlatformStackLib

Signed-off-by: Olivier Martin <olivier.martin@arm.com>




git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13774 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
oliviermartin
2012-09-28 11:01:36 +00:00
parent 7d49ced0cf
commit 17839a45b8
11 changed files with 360 additions and 122 deletions

View File

@ -144,6 +144,21 @@ _SetPrimaryStackInitGlobals: ; \
b _SetPrimaryStackInitGlobals ; \
_SetPrimaryStackEnd:
// Initialize the Global Variable with '0'
#define InitializePrimaryStack(GlobalSize, Tmp1) \
and Tmp1, GlobalSize, #7 ; \
rsbne Tmp1, Tmp1, #8 ; \
add GlobalSize, GlobalSize, Tmp1 ; \
; \
mov Tmp1, sp ; \
sub sp, GlobalSize ; \
mov GlobalSize, #0x0 ; \
_InitializePrimaryStackLoop: ; \
cmp Tmp1, sp ; \
bls _InitializePrimaryStackEnd ; \
str GlobalSize, [Tmp1], #-4 ; \
b _InitializePrimaryStackLoop ; \
_InitializePrimaryStackEnd:
#elif defined (__GNUC__)
@ -213,6 +228,22 @@ _SetPrimaryStackInitGlobals: ; \
b _SetPrimaryStackInitGlobals ; \
_SetPrimaryStackEnd:
// Initialize the Global Variable with '0'
#define InitializePrimaryStack(GlobalSize, Tmp1) \
and Tmp1, GlobalSize, #7 ; \
rsbne Tmp1, Tmp1, #8 ; \
add GlobalSize, GlobalSize, Tmp1 ; \
; \
mov Tmp1, sp ; \
sub sp, GlobalSize ; \
mov GlobalSize, #0x0 ; \
_InitializePrimaryStackLoop: ; \
cmp Tmp1, sp ; \
bls _InitializePrimaryStackEnd ; \
str GlobalSize, [Tmp1], #-4 ; \
b _InitializePrimaryStackLoop ; \
_InitializePrimaryStackEnd:
#else
//
@ -278,6 +309,9 @@ _SetPrimaryStackEnd:
#define SetPrimaryStack(StackTop,GlobalSize,Tmp) SetPrimaryStack StackTop, GlobalSize, Tmp
// Initialize the Global Variable with '0'
#define InitializePrimaryStack(GlobalSize, Tmp1) InitializePrimaryStack GlobalSize, Tmp1
#endif
#endif