mirror of
https://github.com/acidanthera/audk.git
synced 2025-09-30 04:58:40 +02:00
84 lines
1.1 KiB
C
84 lines
1.1 KiB
C
/** @file
|
|
|
|
Copyright (c) 2024, Mikhail Krichanov. All rights reserved.
|
|
SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
**/
|
|
|
|
#include <Library/ArmLib.h>
|
|
|
|
#include "DxeMain.h"
|
|
|
|
STATIC UINTN mCoreSp;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
ArmCallRing3 (
|
|
IN RING3_CALL_DATA *Data,
|
|
IN VOID *StackPointer,
|
|
IN VOID *EntryPoint,
|
|
IN VOID *SysCallStack,
|
|
IN VOID *CoreStack
|
|
);
|
|
|
|
VOID
|
|
EFIAPI
|
|
ArmSetPan (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
EFIAPI
|
|
ArmClearPan (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
EFIAPI
|
|
InitializeMsr (
|
|
IN OUT EFI_CONFIGURATION_TABLE *Table,
|
|
IN UINTN NumberOfEntries
|
|
)
|
|
{
|
|
if (ArmHasPan ()) {
|
|
//
|
|
// Enable Privileged Access Never feature.
|
|
//
|
|
ArmSetPan ();
|
|
} else {
|
|
DEBUG ((DEBUG_ERROR, "Core: Failed to initialize MSRs for Ring3.\n"));
|
|
// ASSERT (FALSE);
|
|
}
|
|
}
|
|
|
|
VOID
|
|
EFIAPI
|
|
DisableSMAP (
|
|
VOID
|
|
)
|
|
{
|
|
if (ArmHasPan ()) {
|
|
ArmClearPan ();
|
|
}
|
|
}
|
|
|
|
VOID
|
|
EFIAPI
|
|
EnableSMAP (
|
|
VOID
|
|
)
|
|
{
|
|
if (ArmHasPan ()) {
|
|
ArmSetPan ();
|
|
}
|
|
}
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
CallRing3 (
|
|
IN RING3_CALL_DATA *Data
|
|
)
|
|
{
|
|
return ArmCallRing3 (Data, gRing3CallStackTop, gRing3EntryPoint, gCoreSysCallStackTop, &mCoreSp);
|
|
}
|