/** @file Copyright (c) 2024, Mikhail Krichanov. All rights reserved. SPDX-License-Identifier: BSD-3-Clause **/ #include #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); }