mirror of https://github.com/acidanthera/audk.git
SysCall: Refactored ReturnToCore() for AARCH64, ARM.
This commit is contained in:
parent
32768e43f3
commit
3cab34a4ba
|
@ -113,11 +113,13 @@ ASM_FUNC(ArmCallRing3)
|
|||
// VOID
|
||||
// EFIAPI
|
||||
// ReturnToCore (
|
||||
// IN EFI_STATUS Status,
|
||||
// IN UINTN CoreSp
|
||||
// IN EFI_STATUS Status
|
||||
// );
|
||||
//
|
||||
// (x0) Status
|
||||
// (x1) mCoreSp
|
||||
//------------------------------------------------------------------------------
|
||||
ASM_FUNC(ReturnToCore)
|
||||
ASM_FUNC(ArmReturnToCore)
|
||||
// Switch to Core Stack.
|
||||
mov sp, x1
|
||||
// Restore registers and Stack.
|
||||
|
|
|
@ -26,11 +26,20 @@ ArmCallRing3 (
|
|||
|
||||
VOID
|
||||
EFIAPI
|
||||
ReturnToCore (
|
||||
ArmReturnToCore (
|
||||
IN EFI_STATUS Status,
|
||||
IN UINTN CoreSp
|
||||
);
|
||||
|
||||
VOID
|
||||
EFIAPI
|
||||
ReturnToCore (
|
||||
IN EFI_STATUS Status
|
||||
)
|
||||
{
|
||||
ArmReturnToCore (Status, mCoreSp);
|
||||
}
|
||||
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
|
@ -43,13 +52,6 @@ SysCallBootService (
|
|||
EFI_STATUS Status;
|
||||
EFI_PHYSICAL_ADDRESS Physical;
|
||||
|
||||
if (Type == SysCallReturnToCore) {
|
||||
//
|
||||
// TODO: Refactoring
|
||||
//
|
||||
ReturnToCore (*(EFI_STATUS *)CoreRbp, mCoreSp);
|
||||
}
|
||||
|
||||
Status = CoreAllocatePages (
|
||||
AllocateAnyPages,
|
||||
EfiRing3MemoryType,
|
||||
|
|
|
@ -102,11 +102,13 @@ ASM_FUNC(ArmCallRing3)
|
|||
// VOID
|
||||
// EFIAPI
|
||||
// ReturnToCore (
|
||||
// IN EFI_STATUS Status,
|
||||
// IN UINTN CoreSp
|
||||
// IN EFI_STATUS Status
|
||||
// );
|
||||
//
|
||||
// (r0) Status
|
||||
// (r1) mCoreSp
|
||||
//------------------------------------------------------------------------------
|
||||
ASM_FUNC(ReturnToCore)
|
||||
ASM_FUNC(ArmReturnToCore)
|
||||
// Switch to Core Stack.
|
||||
mov SP, R1
|
||||
|
||||
|
|
|
@ -25,11 +25,20 @@ ArmCallRing3 (
|
|||
|
||||
VOID
|
||||
EFIAPI
|
||||
ReturnToCore (
|
||||
ArmReturnToCore (
|
||||
IN EFI_STATUS Status,
|
||||
IN UINTN CoreSp
|
||||
);
|
||||
|
||||
VOID
|
||||
EFIAPI
|
||||
ReturnToCore (
|
||||
IN EFI_STATUS Status
|
||||
)
|
||||
{
|
||||
ArmReturnToCore (Status, mCoreSp);
|
||||
}
|
||||
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
|
@ -42,10 +51,6 @@ SysCallBootService (
|
|||
EFI_STATUS Status;
|
||||
EFI_PHYSICAL_ADDRESS Physical;
|
||||
|
||||
if (Type == SysCallReturnToCore) {
|
||||
ReturnToCore (*(EFI_STATUS *)CoreRbp, mCoreSp);
|
||||
}
|
||||
|
||||
Status = CoreAllocatePages (
|
||||
AllocateAnyPages,
|
||||
EfiRing3MemoryType,
|
||||
|
@ -78,14 +83,16 @@ SysCallBootService (
|
|||
(CORE_STACK *)CoreRbp,
|
||||
(RING3_STACK *)(UINTN)Physical
|
||||
);
|
||||
//
|
||||
// TODO: Fix memory leak for ReturnToCore().
|
||||
//
|
||||
CoreFreePages (Physical, EFI_SIZE_TO_PAGES (9 * sizeof (UINTN)));
|
||||
|
||||
CoreFreePages (Physical, EFI_SIZE_TO_PAGES (9 * sizeof (UINTN)));
|
||||
|
||||
SetUefiImageMemoryAttributes (
|
||||
gUartBaseAddress,
|
||||
EFI_PAGE_SIZE,
|
||||
EFI_MEMORY_XP | EFI_MEMORY_USER
|
||||
);
|
||||
SetUefiImageMemoryAttributes (
|
||||
gUartBaseAddress,
|
||||
EFI_PAGE_SIZE,
|
||||
EFI_MEMORY_XP | EFI_MEMORY_USER
|
||||
);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue