In the previous version, every cores had the same stack size. To avoid to waste memory with secondary core stacks, the primary core stack size is now different from the secondary cores stack size. These are the Stack PCDs and their default values: gArmPlatformTokenSpaceGuid.PcdCPUCoresSecStackBase|0 gArmPlatformTokenSpaceGuid.PcdCPUCoreSecPrimaryStackSize|0x10000 gArmPlatformTokenSpaceGuid.PcdCPUCoreSecSecondaryStackSize|0x1000 gArmPlatformTokenSpaceGuid.PcdCPUCoresSecMonStackBase|0 gArmPlatformTokenSpaceGuid.PcdCPUCoreSecMonStackSize|0x1000 gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0 gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize|0x10000 gArmPlatformTokenSpaceGuid.PcdCPUCoreSecondaryStackSize|0x1000 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12415 6f19259b-4bc3-4df7-8a09-765794883524
98 lines
2.8 KiB
PHP
98 lines
2.8 KiB
PHP
;%HEADER%
|
|
;/** @file
|
|
; Macros to work around lack of Apple support for LDR register, =expr
|
|
;
|
|
; Copyright (c) 2009, Apple Inc. All rights reserved.<BR>
|
|
; This program and the accompanying materials
|
|
; are licensed and made available under the terms and conditions of the BSD License
|
|
; which accompanies this distribution. The full text of the license may be found at
|
|
; http://opensource.org/licenses/bsd-license.php
|
|
;
|
|
; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
;
|
|
;**/
|
|
|
|
|
|
MACRO
|
|
MmioWrite32Macro $Address, $Data
|
|
ldr r1, = ($Address)
|
|
ldr r0, = ($Data)
|
|
str r0, [r1]
|
|
MEND
|
|
|
|
MACRO
|
|
MmioOr32Macro $Address, $OrData
|
|
ldr r1, =($Address)
|
|
ldr r2, =($OrData)
|
|
ldr r0, [r1]
|
|
orr r0, r0, r2
|
|
str r0, [r1]
|
|
MEND
|
|
|
|
MACRO
|
|
MmioAnd32Macro $Address, $AndData
|
|
ldr r1, =($Address)
|
|
ldr r2, =($AndData)
|
|
ldr r0, [r1]
|
|
and r0, r0, r2
|
|
str r0, [r1]
|
|
MEND
|
|
|
|
MACRO
|
|
MmioAndThenOr32Macro $Address, $AndData, $OrData
|
|
ldr r1, =($Address)
|
|
ldr r0, [r1]
|
|
ldr r2, =($AndData)
|
|
and r0, r0, r2
|
|
ldr r2, =($OrData)
|
|
orr r0, r0, r2
|
|
str r0, [r1]
|
|
MEND
|
|
|
|
MACRO
|
|
MmioWriteFromReg32Macro $Address, $Reg
|
|
ldr r1, =($Address)
|
|
str $Reg, [r1]
|
|
MEND
|
|
|
|
MACRO
|
|
MmioRead32Macro $Address
|
|
ldr r1, =($Address)
|
|
ldr r0, [r1]
|
|
MEND
|
|
|
|
MACRO
|
|
MmioReadToReg32Macro $Address, $Reg
|
|
ldr r1, =($Address)
|
|
ldr $Reg, [r1]
|
|
MEND
|
|
|
|
MACRO
|
|
LoadConstantMacro $Data
|
|
ldr r0, =($Data)
|
|
MEND
|
|
|
|
MACRO
|
|
LoadConstantToRegMacro $Data, $Reg
|
|
ldr $Reg, =($Data)
|
|
MEND
|
|
|
|
MACRO
|
|
GetCorePositionInStack $Pos, $MpId, $Tmp
|
|
lsr $Pos, $MpId, #6
|
|
and $Tmp, $MpId, #3
|
|
add $Pos, $Pos, $Tmp
|
|
MEND
|
|
|
|
; The reserved place must be 8-bytes aligned for pushing 64-bit variable on the stack
|
|
MACRO
|
|
SetPrimaryStack $StackTop, $GlobalSize, $Tmp
|
|
and $Tmp, $GlobalSize, #7
|
|
rsbne $Tmp, $Tmp, #8
|
|
add $GlobalSize, $GlobalSize, $Tmp
|
|
sub sp, $StackTop, $GlobalSize
|
|
MEND
|
|
|
|
END
|