Ring3: Added dummy functions for ARM, AARCH64.

This commit is contained in:
Mikhail Krichanov 2024-05-13 12:57:58 +03:00
parent 149fb5719b
commit bdd577e887
12 changed files with 291 additions and 8 deletions

View File

@ -233,6 +233,7 @@
ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf
CpuArchLib|ArmPkg/Library/CpuArchLib/CpuArchLib.inf
MemoryPoolLib|MdeModulePkg/Library/MemoryPoolLib/MemoryPoolLib.inf
[LibraryClasses.common.DXE_DRIVER]
SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf

View File

@ -465,6 +465,10 @@
MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
FatPkg/EnhancedFatDxe/Fat.inf
MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.inf {
<LibraryClasses>
MemoryPoolLib|MdeModulePkg/Library/MemoryPoolLib/MemoryPoolLib.inf
}
MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf
OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf

View File

@ -38,6 +38,10 @@ READ_STATUS = TRUE
READ_LOCK_CAP = TRUE
READ_LOCK_STATUS = TRUE
APRIORI DXE {
INF MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.inf
}
INF MdeModulePkg/Core/Dxe/DxeMain.inf
INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
INF OvmfPkg/Fdt/VirtioFdtDxe/VirtioFdtDxe.inf
@ -82,6 +86,7 @@ READ_LOCK_STATUS = TRUE
INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
INF FatPkg/EnhancedFatDxe/Fat.inf
INF MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.inf
INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
INF MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf
INF OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf

View File

@ -22,7 +22,7 @@
#
# The following information is for reference only and not required by the build tools.
#
# VALID_ARCHITECTURES = IA32 X64 EBC (EBC is for build only)
# VALID_ARCHITECTURES = IA32 X64 EBC (EBC is for build only) ARM AARCH64
#
[Sources]
@ -78,11 +78,20 @@
SysCall/X64/InitializeMsr.c
SysCall/X64/CoreBootServices.nasm
[Sources.ARM]
SysCall/ARM/InitializeMsr.c
SysCall/ARM/CoreBootServices.S
[Sources.AARCH64]
SysCall/AARCH64/InitializeMsr.c
SysCall/AARCH64/CoreBootServices.S
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
UefiCpuPkg/UefiCpuPkg.dec
OvmfPkg/OvmfPkg.dec
ArmPkg/ArmPkg.dec
[LibraryClasses]
BaseMemoryLib

View File

@ -0,0 +1,32 @@
//------------------------------------------------------------------------------
// Copyright (c) 2024, Mikhail Krichanov. All rights reserved.
// SPDX-License-Identifier: BSD-3-Clause
//------------------------------------------------------------------------------
#include <AsmMacroIoLibV8.h>
//------------------------------------------------------------------------------
// EFI_STATUS
// EFIAPI
// SysCall (
// IN UINT8 Type,
// ...
// );
//------------------------------------------------------------------------------
ASM_FUNC(SysCall)
ret
//------------------------------------------------------------------------------
// VOID
// EFIAPI
// Ring3EntryPoint (
// IN RING3_CALL_DATA *Data
// );
//
// (rcx) RIP of Ring3EntryPoint saved for SYSRET in CallRing3().
// (rdx) Data
//------------------------------------------------------------------------------
ASM_FUNC(Ring3EntryPoint)
ret

View File

@ -0,0 +1,32 @@
//------------------------------------------------------------------------------
// Copyright (c) 2024, Mikhail Krichanov. All rights reserved.
// SPDX-License-Identifier: BSD-3-Clause
//------------------------------------------------------------------------------
#include <AsmMacroIoLib.h>
//------------------------------------------------------------------------------
// EFI_STATUS
// EFIAPI
// SysCall (
// IN UINT8 Type,
// ...
// );
//------------------------------------------------------------------------------
ASM_FUNC(SysCall)
bx LR
//------------------------------------------------------------------------------
// VOID
// EFIAPI
// Ring3EntryPoint (
// IN RING3_CALL_DATA *Data
// );
//
// (rcx) RIP of Ring3EntryPoint saved for SYSRET in CallRing3().
// (rdx) Data
//------------------------------------------------------------------------------
ASM_FUNC(Ring3EntryPoint)
bx LR

View File

@ -18,7 +18,7 @@
#
# The following information is for reference only and not required by the build tools.
#
# VALID_ARCHITECTURES = IA32 X64
# VALID_ARCHITECTURES = IA32 X64 ARM AARCH64
#
[Sources]
@ -34,9 +34,16 @@
[Sources.X64]
X64/SysCall.nasm
[Sources.ARM]
ARM/SysCall.S
[Sources.AARCH64]
AARCH64/SysCall.S
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
ArmPkg/ArmPkg.dec
[LibraryClasses]
BaseLib

View File

@ -0,0 +1,73 @@
//------------------------------------------------------------------------------
//
// Copyright (c) 2024, Mikhail Krichanov. All rights reserved.
// SPDX-License-Identifier: BSD-3-Clause
//
//------------------------------------------------------------------------------
#include <AsmMacroIoLibV8.h>
//------------------------------------------------------------------------------
// VOID
// EFIAPI
// DisableSMAP (
// VOID
// );
//------------------------------------------------------------------------------
ASM_FUNC(DisableSMAP)
ret
//------------------------------------------------------------------------------
// VOID
// EFIAPI
// EnableSMAP (
// VOID
// );
//------------------------------------------------------------------------------
ASM_FUNC(EnableSMAP)
ret
//------------------------------------------------------------------------------
// EFI_STATUS
// EFIAPI
// CallInstallMultipleProtocolInterfaces (
// IN EFI_HANDLE *Handle,
// IN VOID **ArgList,
// IN UINT32 ArgListSize,
// IN VOID *Function
// );
//------------------------------------------------------------------------------
ASM_FUNC(CallInstallMultipleProtocolInterfaces)
ret
//------------------------------------------------------------------------------
// EFI_STATUS
// EFIAPI
// CoreBootServices (
// IN UINT8 Type,
// ...
// );
//
// (rcx) RIP of the next instruction saved by SYSCALL in SysCall().
// (rdx) Argument 1 of the called function.
// (r8) Argument 2 of the called function.
// (r9) Argument 3 of the called function.
// (r10) Type.
// (r11) RFLAGS saved by SYSCALL in SysCall().
//
// (On User Stack) Argument 4, 5, ...
//------------------------------------------------------------------------------
ASM_FUNC(CoreBootServices)
ret
//------------------------------------------------------------------------------
// EFI_STATUS
// EFIAPI
// CallRing3 (
// IN RING3_CALL_DATA *Data
// );
//
// (rcx) Data
//------------------------------------------------------------------------------
ASM_FUNC(CallRing3)
ret

View File

@ -0,0 +1,17 @@
/** @file
Copyright (c) 2024, Mikhail Krichanov. All rights reserved.
SPDX-License-Identifier: BSD-3-Clause
**/
#include "DxeMain.h"
VOID
EFIAPI
InitializeMsr (
VOID
)
{
}

View File

@ -0,0 +1,73 @@
//------------------------------------------------------------------------------
//
// Copyright (c) 2024, Mikhail Krichanov. All rights reserved.
// SPDX-License-Identifier: BSD-3-Clause
//
//------------------------------------------------------------------------------
#include <AsmMacroIoLib.h>
//------------------------------------------------------------------------------
// VOID
// EFIAPI
// DisableSMAP (
// VOID
// );
//------------------------------------------------------------------------------
ASM_FUNC(DisableSMAP)
bx LR
//------------------------------------------------------------------------------
// VOID
// EFIAPI
// EnableSMAP (
// VOID
// );
//------------------------------------------------------------------------------
ASM_FUNC(EnableSMAP)
bx LR
//------------------------------------------------------------------------------
// EFI_STATUS
// EFIAPI
// CallInstallMultipleProtocolInterfaces (
// IN EFI_HANDLE *Handle,
// IN VOID **ArgList,
// IN UINT32 ArgListSize,
// IN VOID *Function
// );
//------------------------------------------------------------------------------
ASM_FUNC(CallInstallMultipleProtocolInterfaces)
bx LR
//------------------------------------------------------------------------------
// EFI_STATUS
// EFIAPI
// CoreBootServices (
// IN UINT8 Type,
// ...
// );
//
// (rcx) RIP of the next instruction saved by SYSCALL in SysCall().
// (rdx) Argument 1 of the called function.
// (r8) Argument 2 of the called function.
// (r9) Argument 3 of the called function.
// (r10) Type.
// (r11) RFLAGS saved by SYSCALL in SysCall().
//
// (On User Stack) Argument 4, 5, ...
//------------------------------------------------------------------------------
ASM_FUNC(CoreBootServices)
bx LR
//------------------------------------------------------------------------------
// EFI_STATUS
// EFIAPI
// CallRing3 (
// IN RING3_CALL_DATA *Data
// );
//
// (rcx) Data
//------------------------------------------------------------------------------
ASM_FUNC(CallRing3)
bx LR

View File

@ -0,0 +1,17 @@
/** @file
Copyright (c) 2024, Mikhail Krichanov. All rights reserved.
SPDX-License-Identifier: BSD-3-Clause
**/
#include "DxeMain.h"
VOID
EFIAPI
InitializeMsr (
VOID
)
{
}

View File

@ -329,9 +329,7 @@ CoreFileSetPosition (
File->Ring3File,
Position
);
#endif
#if defined (MDE_CPU_IA32)
#elif defined (MDE_CPU_IA32)
//
// UINT64 Position is passed as 2 double words on stack.
//
@ -341,6 +339,13 @@ CoreFileSetPosition (
File->Ring3File,
Position
);
#else
return GoToRing3 (
2,
(VOID *)mRing3FileProtocol.SetPosition,
File->Ring3File,
Position
);
#endif
}
@ -607,9 +612,7 @@ CoreFileOpen (
OpenMode,
Attributes
);
#endif
#if defined (MDE_CPU_IA32)
#elif defined (MDE_CPU_IA32)
//
// UINT64 OpenMode and Attributes are each passed as 2 double words on stack.
//
@ -622,6 +625,16 @@ CoreFileOpen (
OpenMode,
Attributes
);
#else
Status = GoToRing3 (
5,
(VOID *)mRing3FileProtocol.Open,
File->Ring3File,
Ring3NewHandle,
Ring3FileName,
OpenMode,
Attributes
);
#endif
if (EFI_ERROR (Status)) {
*NewHandle = NULL;