From 0b89bd57bb2faca53e958dc4ecbedb884c972ccb Mon Sep 17 00:00:00 2001 From: Mikhail Krichanov Date: Mon, 3 Feb 2025 13:49:40 +0300 Subject: [PATCH] Ring3: Renamed Ring3 as UserSpace. --- MdeModulePkg/Core/Dxe/DxeMain.h | 12 +- MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c | 22 +- .../Core/Dxe/DxeRing3/AARCH64/SysCall.S | 12 +- MdeModulePkg/Core/Dxe/DxeRing3/ARM/SysCall.S | 12 +- MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.c | 160 ++++++------ MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.inf | 4 +- .../Core/Dxe/DxeRing3/IA32/SysCall.nasm | 14 +- MdeModulePkg/Core/Dxe/DxeRing3/Ring3.h | 138 +++++----- .../Core/Dxe/DxeRing3/Ring3Protocols.c | 27 +- .../Core/Dxe/DxeRing3/Ring3UefiBootServices.c | 192 +++++++------- .../Dxe/DxeRing3/Ring3UefiRuntimeServices.c | 62 +++-- .../Core/Dxe/DxeRing3/X64/SysCall.nasm | 16 +- MdeModulePkg/Core/Dxe/Image/Image.c | 22 +- MdeModulePkg/Core/Dxe/Mem/Page.c | 4 +- MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c | 4 +- .../Dxe/SysCall/AARCH64/CoreBootServices.S | 12 +- .../Dxe/SysCall/AARCH64/InitializeAARCH64.c | 22 +- .../Core/Dxe/SysCall/ARM/CoreBootServices.S | 10 +- .../Core/Dxe/SysCall/ARM/InitializeARM.c | 22 +- MdeModulePkg/Core/Dxe/SysCall/BootServices.c | 112 ++++----- .../Dxe/SysCall/IA32/CoreBootServices.nasm | 20 +- .../Core/Dxe/SysCall/IA32/InitializeIA32.c | 4 +- .../Core/Dxe/SysCall/Initialization.c | 78 +++--- .../Core/Dxe/SysCall/SupportedProtocols.c | 238 +++++++++--------- .../Dxe/SysCall/X64/CoreBootServices.nasm | 20 +- .../Core/Dxe/SysCall/X64/InitializeX64.c | 2 +- MdeModulePkg/Include/Library/MemoryPoolLib.h | 2 +- MdePkg/Include/Uefi/UefiMultiPhase.h | 4 +- MdePkg/Include/Uefi/UefiSpec.h | 4 +- 29 files changed, 631 insertions(+), 620 deletions(-) diff --git a/MdeModulePkg/Core/Dxe/DxeMain.h b/MdeModulePkg/Core/Dxe/DxeMain.h index 77270ce692..65bfd1cc16 100644 --- a/MdeModulePkg/Core/Dxe/DxeMain.h +++ b/MdeModulePkg/Core/Dxe/DxeMain.h @@ -115,7 +115,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #define DEPEX_STACK_SIZE_INCREMENT 0x1000 #define STACK_SIZE 0x20000 -#define RING3_INTERFACES_PAGES 20 +#define USER_SPACE_INTERFACES_PAGES 20 typedef struct { EFI_GUID *ProtocolGuid; @@ -279,9 +279,9 @@ extern EFI_LOAD_FIXED_ADDRESS_CONFIGURATION_TABLE gLoadModuleAtFixAddressConfig extern BOOLEAN gLoadFixedAddressCodeMemoryReady; extern LOADED_IMAGE_PRIVATE_DATA * mCurrentImage; -extern RING3_DATA *gRing3Data; -extern VOID *gRing3Interfaces; -extern VOID *gRing3EntryPoint; +extern USER_SPACE_DATA *gUserSpaceData; +extern VOID *gUserSpaceInterfaces; +extern VOID *gUserSpaceEntryPoint; extern UINTN gUserPageTable; extern UINTN gCorePageTable; extern LIST_ENTRY gUserSpaceDriversHead; @@ -2753,7 +2753,7 @@ ForbidSupervisorAccessToUserMemory ( EFI_STATUS EFIAPI -GoToRing3 ( +GoToUserSpace ( IN UINT8 Number, IN VOID *EntryPoint, IN USER_SPACE_DRIVER *UserDriver, @@ -2762,7 +2762,7 @@ GoToRing3 ( EFI_STATUS EFIAPI -InitializeRing3 ( +InitializeUserSpace ( IN EFI_HANDLE ImageHandle, IN LOADED_IMAGE_PRIVATE_DATA *Image ); diff --git a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c index bc55cb3183..26affa32a5 100644 --- a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c +++ b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c @@ -245,7 +245,7 @@ DxeMain ( EFI_VECTOR_HANDOFF_INFO *VectorInfoList; EFI_VECTOR_HANDOFF_INFO *VectorInfo; - gRing3Data = NULL; + gUserSpaceData = NULL; gUserPageTable = 0; // @@ -767,28 +767,28 @@ CoreExitBootServices ( EFI_STATUS Status; // - // Free resources allocated for Ring3. + // Free resources allocated for UserSpace. // - if (gRing3Data != NULL) { + if (gUserSpaceData != NULL) { AllowSupervisorAccessToUserMemory (); - if (gRing3Data->SystemTable.ConfigurationTable != NULL) { + if (gUserSpaceData->SystemTable.ConfigurationTable != NULL) { CoreFreePages ( - (EFI_PHYSICAL_ADDRESS)(UINTN)gRing3Data->SystemTable.ConfigurationTable, - EFI_SIZE_TO_PAGES (gRing3Data->SystemTable.NumberOfTableEntries * sizeof (EFI_CONFIGURATION_TABLE)) + (EFI_PHYSICAL_ADDRESS)(UINTN)gUserSpaceData->SystemTable.ConfigurationTable, + EFI_SIZE_TO_PAGES (gUserSpaceData->SystemTable.NumberOfTableEntries * sizeof (EFI_CONFIGURATION_TABLE)) ); } ForbidSupervisorAccessToUserMemory (); CoreFreePages ( - (EFI_PHYSICAL_ADDRESS)(UINTN)gRing3Data, - EFI_SIZE_TO_PAGES (sizeof (RING3_DATA)) + (EFI_PHYSICAL_ADDRESS)(UINTN)gUserSpaceData, + EFI_SIZE_TO_PAGES (sizeof (USER_SPACE_DATA)) ); - gRing3Data = NULL; + gUserSpaceData = NULL; CoreFreePages ( - (EFI_PHYSICAL_ADDRESS)(UINTN)gRing3Interfaces, - RING3_INTERFACES_PAGES + (EFI_PHYSICAL_ADDRESS)(UINTN)gUserSpaceInterfaces, + USER_SPACE_INTERFACES_PAGES ); FreeProtocolsList (); diff --git a/MdeModulePkg/Core/Dxe/DxeRing3/AARCH64/SysCall.S b/MdeModulePkg/Core/Dxe/DxeRing3/AARCH64/SysCall.S index 47039d2940..1940441d71 100644 --- a/MdeModulePkg/Core/Dxe/DxeRing3/AARCH64/SysCall.S +++ b/MdeModulePkg/Core/Dxe/DxeRing3/AARCH64/SysCall.S @@ -1,11 +1,11 @@ //------------------------------------------------------------------------------ -// Copyright (c) 2024, Mikhail Krichanov. All rights reserved. +// Copyright (c) 2024 - 2025, Mikhail Krichanov. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause //------------------------------------------------------------------------------ #include -.extern ASM_PFX(Ring3Call) +.extern ASM_PFX(UserSpaceCall) //------------------------------------------------------------------------------ // EFI_STATUS @@ -23,11 +23,11 @@ ASM_FUNC(SysCall) //------------------------------------------------------------------------------ // VOID // EFIAPI -// Ring3EntryPoint ( -// IN RING3_CALL_DATA *Data +// UserSpaceEntryPoint ( +// IN USER_SPACE_CALL_DATA *Data // ); // // (x0) Data //------------------------------------------------------------------------------ -ASM_FUNC(Ring3EntryPoint) - b ASM_PFX(Ring3Call) +ASM_FUNC(UserSpaceEntryPoint) + b ASM_PFX(UserSpaceCall) diff --git a/MdeModulePkg/Core/Dxe/DxeRing3/ARM/SysCall.S b/MdeModulePkg/Core/Dxe/DxeRing3/ARM/SysCall.S index dee789fce5..e016a71b16 100644 --- a/MdeModulePkg/Core/Dxe/DxeRing3/ARM/SysCall.S +++ b/MdeModulePkg/Core/Dxe/DxeRing3/ARM/SysCall.S @@ -1,11 +1,11 @@ //------------------------------------------------------------------------------ -// Copyright (c) 2024, Mikhail Krichanov. All rights reserved. +// Copyright (c) 2024 - 2025, Mikhail Krichanov. All rights reserved. // SPDX-License-Identifier: BSD-3-Clause //------------------------------------------------------------------------------ #include -.extern ASM_PFX(Ring3Call) +.extern ASM_PFX(UserSpaceCall) //------------------------------------------------------------------------------ // EFI_STATUS @@ -23,11 +23,11 @@ ASM_FUNC(SysCall) //------------------------------------------------------------------------------ // VOID // EFIAPI -// Ring3EntryPoint ( -// IN RING3_CALL_DATA *Data +// UserSpaceEntryPoint ( +// IN USER_SPACE_CALL_DATA *Data // ); // // (r0) Data //------------------------------------------------------------------------------ -ASM_FUNC(Ring3EntryPoint) - b ASM_PFX(Ring3Call) +ASM_FUNC(UserSpaceEntryPoint) + b ASM_PFX(UserSpaceCall) diff --git a/MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.c b/MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.c index 5bbc706bf5..04dfef8d76 100644 --- a/MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.c +++ b/MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.c @@ -1,6 +1,8 @@ /** @file + This driver constructs User space wrappers for the EFI_BOOT_SERVICES, + EFI_RUNTIME_SERVICES and EFI_*_PROTOCOLs. - Copyright (c) 2024, Mikhail Krichanov. All rights reserved. + Copyright (c) 2024 - 2025, Mikhail Krichanov. All rights reserved. SPDX-License-Identifier: BSD-3-Clause **/ @@ -15,86 +17,86 @@ EFI_BOOT_SERVICES mBootServices = { { - EFI_BOOT_SERVICES_SIGNATURE, // Signature - EFI_BOOT_SERVICES_REVISION, // Revision - sizeof (EFI_BOOT_SERVICES), // HeaderSize - 0, // CRC32 - 0 // Reserved + EFI_BOOT_SERVICES_SIGNATURE, // Signature + EFI_BOOT_SERVICES_REVISION, // Revision + sizeof (EFI_BOOT_SERVICES), // HeaderSize + 0, // CRC32 + 0 // Reserved }, - (EFI_RAISE_TPL)Ring3RaiseTpl, // RaiseTPL - (EFI_RESTORE_TPL)Ring3RestoreTpl, // RestoreTPL - (EFI_ALLOCATE_PAGES)Ring3AllocatePages, // AllocatePages - (EFI_FREE_PAGES)Ring3FreePages, // FreePages - (EFI_GET_MEMORY_MAP)Ring3GetMemoryMap, // GetMemoryMap - (EFI_ALLOCATE_POOL)Ring3AllocatePool, // AllocatePool - (EFI_FREE_POOL)Ring3FreePool, // FreePool - (EFI_CREATE_EVENT)Ring3CreateEvent, // CreateEvent - (EFI_SET_TIMER)Ring3SetTimer, // SetTimer - (EFI_WAIT_FOR_EVENT)Ring3WaitForEvent, // WaitForEvent - (EFI_SIGNAL_EVENT)Ring3SignalEvent, // SignalEvent - (EFI_CLOSE_EVENT)Ring3CloseEvent, // CloseEvent - (EFI_CHECK_EVENT)Ring3CheckEvent, // CheckEvent - (EFI_INSTALL_PROTOCOL_INTERFACE)Ring3InstallProtocolInterface, // InstallProtocolInterface - (EFI_REINSTALL_PROTOCOL_INTERFACE)Ring3ReinstallProtocolInterface, // ReinstallProtocolInterface - (EFI_UNINSTALL_PROTOCOL_INTERFACE)Ring3UninstallProtocolInterface, // UninstallProtocolInterface - (EFI_HANDLE_PROTOCOL)Ring3HandleProtocol, // HandleProtocol - (VOID *)NULL, // Reserved - (EFI_REGISTER_PROTOCOL_NOTIFY)Ring3RegisterProtocolNotify, // RegisterProtocolNotify - (EFI_LOCATE_HANDLE)Ring3LocateHandle, // LocateHandle - (EFI_LOCATE_DEVICE_PATH)Ring3LocateDevicePath, // LocateDevicePath - (EFI_INSTALL_CONFIGURATION_TABLE)Ring3InstallConfigurationTable, // InstallConfigurationTable - (EFI_IMAGE_LOAD)Ring3LoadImage, // LoadImage - (EFI_IMAGE_START)Ring3StartImage, // StartImage - (EFI_EXIT)Ring3Exit, // Exit - (EFI_IMAGE_UNLOAD)Ring3UnloadImage, // UnloadImage - (EFI_EXIT_BOOT_SERVICES)Ring3ExitBootServices, // ExitBootServices - (EFI_GET_NEXT_MONOTONIC_COUNT)Ring3GetNextMonotonicCount, // GetNextMonotonicCount - (EFI_STALL)Ring3Stall, // Stall - (EFI_SET_WATCHDOG_TIMER)Ring3SetWatchdogTimer, // SetWatchdogTimer - (EFI_CONNECT_CONTROLLER)Ring3ConnectController, // ConnectController - (EFI_DISCONNECT_CONTROLLER)Ring3DisconnectController, // DisconnectController - (EFI_OPEN_PROTOCOL)Ring3OpenProtocol, // OpenProtocol - (EFI_CLOSE_PROTOCOL)Ring3CloseProtocol, // CloseProtocol - (EFI_OPEN_PROTOCOL_INFORMATION)Ring3OpenProtocolInformation, // OpenProtocolInformation - (EFI_PROTOCOLS_PER_HANDLE)Ring3ProtocolsPerHandle, // ProtocolsPerHandle - (EFI_LOCATE_HANDLE_BUFFER)Ring3LocateHandleBuffer, // LocateHandleBuffer - (EFI_LOCATE_PROTOCOL)Ring3LocateProtocol, // LocateProtocol - (EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES)Ring3InstallMultipleProtocolInterfaces, // InstallMultipleProtocolInterfaces - (EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES)Ring3UninstallMultipleProtocolInterfaces, // UninstallMultipleProtocolInterfaces - (EFI_CALCULATE_CRC32)Ring3CalculateCrc32, // CalculateCrc32 - (EFI_COPY_MEM)CopyMem, // CopyMem - (EFI_SET_MEM)SetMem, // SetMem - (EFI_CREATE_EVENT_EX)Ring3CreateEventEx, // CreateEventEx + (EFI_RAISE_TPL)UserSpaceRaiseTpl, // RaiseTPL + (EFI_RESTORE_TPL)UserSpaceRestoreTpl, // RestoreTPL + (EFI_ALLOCATE_PAGES)UserSpaceAllocatePages, // AllocatePages + (EFI_FREE_PAGES)UserSpaceFreePages, // FreePages + (EFI_GET_MEMORY_MAP)UserSpaceGetMemoryMap, // GetMemoryMap + (EFI_ALLOCATE_POOL)UserSpaceAllocatePool, // AllocatePool + (EFI_FREE_POOL)UserSpaceFreePool, // FreePool + (EFI_CREATE_EVENT)UserSpaceCreateEvent, // CreateEvent + (EFI_SET_TIMER)UserSpaceSetTimer, // SetTimer + (EFI_WAIT_FOR_EVENT)UserSpaceWaitForEvent, // WaitForEvent + (EFI_SIGNAL_EVENT)UserSpaceSignalEvent, // SignalEvent + (EFI_CLOSE_EVENT)UserSpaceCloseEvent, // CloseEvent + (EFI_CHECK_EVENT)UserSpaceCheckEvent, // CheckEvent + (EFI_INSTALL_PROTOCOL_INTERFACE)UserSpaceInstallProtocolInterface, // InstallProtocolInterface + (EFI_REINSTALL_PROTOCOL_INTERFACE)UserSpaceReinstallProtocolInterface, // ReinstallProtocolInterface + (EFI_UNINSTALL_PROTOCOL_INTERFACE)UserSpaceUninstallProtocolInterface, // UninstallProtocolInterface + (EFI_HANDLE_PROTOCOL)UserSpaceHandleProtocol, // HandleProtocol + (VOID *)NULL, // Reserved + (EFI_REGISTER_PROTOCOL_NOTIFY)UserSpaceRegisterProtocolNotify, // RegisterProtocolNotify + (EFI_LOCATE_HANDLE)UserSpaceLocateHandle, // LocateHandle + (EFI_LOCATE_DEVICE_PATH)UserSpaceLocateDevicePath, // LocateDevicePath + (EFI_INSTALL_CONFIGURATION_TABLE)UserSpaceInstallConfigurationTable, // InstallConfigurationTable + (EFI_IMAGE_LOAD)UserSpaceLoadImage, // LoadImage + (EFI_IMAGE_START)UserSpaceStartImage, // StartImage + (EFI_EXIT)UserSpaceExit, // Exit + (EFI_IMAGE_UNLOAD)UserSpaceUnloadImage, // UnloadImage + (EFI_EXIT_BOOT_SERVICES)UserSpaceExitBootServices, // ExitBootServices + (EFI_GET_NEXT_MONOTONIC_COUNT)UserSpaceGetNextMonotonicCount, // GetNextMonotonicCount + (EFI_STALL)UserSpaceStall, // Stall + (EFI_SET_WATCHDOG_TIMER)UserSpaceSetWatchdogTimer, // SetWatchdogTimer + (EFI_CONNECT_CONTROLLER)UserSpaceConnectController, // ConnectController + (EFI_DISCONNECT_CONTROLLER)UserSpaceDisconnectController, // DisconnectController + (EFI_OPEN_PROTOCOL)UserSpaceOpenProtocol, // OpenProtocol + (EFI_CLOSE_PROTOCOL)UserSpaceCloseProtocol, // CloseProtocol + (EFI_OPEN_PROTOCOL_INFORMATION)UserSpaceOpenProtocolInformation, // OpenProtocolInformation + (EFI_PROTOCOLS_PER_HANDLE)UserSpaceProtocolsPerHandle, // ProtocolsPerHandle + (EFI_LOCATE_HANDLE_BUFFER)UserSpaceLocateHandleBuffer, // LocateHandleBuffer + (EFI_LOCATE_PROTOCOL)UserSpaceLocateProtocol, // LocateProtocol + (EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES)UserSpaceInstallMultipleProtocolInterfaces, // InstallMultipleProtocolInterfaces + (EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES)UserSpaceUninstallMultipleProtocolInterfaces, // UninstallMultipleProtocolInterfaces + (EFI_CALCULATE_CRC32)UserSpaceCalculateCrc32, // CalculateCrc32 + (EFI_COPY_MEM)CopyMem, // CopyMem + (EFI_SET_MEM)SetMem, // SetMem + (EFI_CREATE_EVENT_EX)UserSpaceCreateEventEx, // CreateEventEx }; EFI_RUNTIME_SERVICES mRuntimeServices = { { - EFI_RUNTIME_SERVICES_SIGNATURE, // Signature - EFI_RUNTIME_SERVICES_REVISION, // Revision - sizeof (EFI_RUNTIME_SERVICES), // HeaderSize - 0, // CRC32 - 0 // Reserved + EFI_RUNTIME_SERVICES_SIGNATURE, // Signature + EFI_RUNTIME_SERVICES_REVISION, // Revision + sizeof (EFI_RUNTIME_SERVICES), // HeaderSize + 0, // CRC32 + 0 // Reserved }, - (EFI_GET_TIME)Ring3GetTime, // GetTime - (EFI_SET_TIME)Ring3SetTime, // SetTime - (EFI_GET_WAKEUP_TIME)Ring3GetWakeupTime, // GetWakeupTime - (EFI_SET_WAKEUP_TIME)Ring3SetWakeupTime, // SetWakeupTime - (EFI_SET_VIRTUAL_ADDRESS_MAP)Ring3SetVirtualAddressMap, // SetVirtualAddressMap - (EFI_CONVERT_POINTER)Ring3ConvertPointer, // ConvertPointer - (EFI_GET_VARIABLE)Ring3GetVariable, // GetVariable - (EFI_GET_NEXT_VARIABLE_NAME)Ring3GetNextVariableName, // GetNextVariableName - (EFI_SET_VARIABLE)Ring3SetVariable, // SetVariable - (EFI_GET_NEXT_HIGH_MONO_COUNT)Ring3GetNextHighMonotonicCount, // GetNextHighMonotonicCount - (EFI_RESET_SYSTEM)Ring3ResetSystem, // ResetSystem - (EFI_UPDATE_CAPSULE)Ring3UpdateCapsule, // UpdateCapsule - (EFI_QUERY_CAPSULE_CAPABILITIES)Ring3QueryCapsuleCapabilities, // QueryCapsuleCapabilities - (EFI_QUERY_VARIABLE_INFO)Ring3QueryVariableInfo // QueryVariableInfo + (EFI_GET_TIME)UserSpaceGetTime, // GetTime + (EFI_SET_TIME)UserSpaceSetTime, // SetTime + (EFI_GET_WAKEUP_TIME)UserSpaceGetWakeupTime, // GetWakeupTime + (EFI_SET_WAKEUP_TIME)UserSpaceSetWakeupTime, // SetWakeupTime + (EFI_SET_VIRTUAL_ADDRESS_MAP)UserSpaceSetVirtualAddressMap, // SetVirtualAddressMap + (EFI_CONVERT_POINTER)UserSpaceConvertPointer, // ConvertPointer + (EFI_GET_VARIABLE)UserSpaceGetVariable, // GetVariable + (EFI_GET_NEXT_VARIABLE_NAME)UserSpaceGetNextVariableName, // GetNextVariableName + (EFI_SET_VARIABLE)UserSpaceSetVariable, // SetVariable + (EFI_GET_NEXT_HIGH_MONO_COUNT)UserSpaceGetNextHighMonotonicCount, // GetNextHighMonotonicCount + (EFI_RESET_SYSTEM)UserSpaceResetSystem, // ResetSystem + (EFI_UPDATE_CAPSULE)UserSpaceUpdateCapsule, // UpdateCapsule + (EFI_QUERY_CAPSULE_CAPABILITIES)UserSpaceQueryCapsuleCapabilities, // QueryCapsuleCapabilities + (EFI_QUERY_VARIABLE_INFO)UserSpaceQueryVariableInfo // QueryVariableInfo }; VOID EFIAPI -Ring3EntryPoint ( - IN RING3_CALL_DATA *Data +UserSpaceEntryPoint ( + IN USER_SPACE_CALL_DATA *Data ); typedef @@ -181,8 +183,8 @@ EFI_STATUS VOID EFIAPI -Ring3Call ( - IN RING3_CALL_DATA *Data +UserSpaceCall ( + IN USER_SPACE_CALL_DATA *Data ) { EFI_STATUS Status; @@ -243,18 +245,18 @@ Ring3Call ( EFI_STATUS EFIAPI -Ring3Initialization ( +UserSpaceInitialization ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { - RING3_DATA *Ring3Data; + USER_SPACE_DATA *UserSpaceData; - Ring3Data = (RING3_DATA *)SystemTable; + UserSpaceData = (USER_SPACE_DATA *)SystemTable; - Ring3Data->EntryPoint = (VOID *)Ring3EntryPoint; - Ring3Data->BootServices = &mBootServices; - Ring3Data->RuntimeServices = &mRuntimeServices; + UserSpaceData->EntryPoint = (VOID *)UserSpaceEntryPoint; + UserSpaceData->BootServices = &mBootServices; + UserSpaceData->RuntimeServices = &mRuntimeServices; gBS = &mBootServices; gRT = &mRuntimeServices; diff --git a/MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.inf b/MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.inf index c4ba281f51..fd01cf0795 100644 --- a/MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.inf +++ b/MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.inf @@ -1,6 +1,6 @@ ## @file # -# Ring3 driver for SysCalls. +# UserSpace driver for SysCalls. # # Copyright (c) 2024, Mikhail Krichanov. All rights reserved. # SPDX-License-Identifier: BSD-3-Clause @@ -13,7 +13,7 @@ FILE_GUID = 88EA50C2-0DEA-4F13-B691-B506554E632B MODULE_TYPE = DXE_DRIVER VERSION_STRING = 1.0 - ENTRY_POINT = Ring3Initialization + ENTRY_POINT = UserSpaceInitialization # # The following information is for reference only and not required by the build tools. diff --git a/MdeModulePkg/Core/Dxe/DxeRing3/IA32/SysCall.nasm b/MdeModulePkg/Core/Dxe/DxeRing3/IA32/SysCall.nasm index 7c12e57736..2618836cd4 100644 --- a/MdeModulePkg/Core/Dxe/DxeRing3/IA32/SysCall.nasm +++ b/MdeModulePkg/Core/Dxe/DxeRing3/IA32/SysCall.nasm @@ -1,11 +1,11 @@ ;------------------------------------------------------------------------------ -; Copyright (c) 2024, Mikhail Krichanov. All rights reserved. +; Copyright (c) 2024 - 2025, Mikhail Krichanov. All rights reserved. ; SPDX-License-Identifier: BSD-3-Clause ;------------------------------------------------------------------------------ #include -extern ASM_PFX(Ring3Call) +extern ASM_PFX(UserSpaceCall) DEFAULT REL SECTION .text @@ -49,14 +49,14 @@ userReturnAddress: ;------------------------------------------------------------------------------ ; VOID ; EFIAPI -; Ring3EntryPoint ( -; IN RING3_CALL_DATA *Data +; UserSpaceEntryPoint ( +; IN USER_SPACE_CALL_DATA *Data ; ); ; ; (eax) Data ;------------------------------------------------------------------------------ -global ASM_PFX(Ring3EntryPoint) -ASM_PFX(Ring3EntryPoint): +global ASM_PFX(UserSpaceEntryPoint) +ASM_PFX(UserSpaceEntryPoint): push eax - call ASM_PFX(Ring3Call) + call ASM_PFX(UserSpaceCall) diff --git a/MdeModulePkg/Core/Dxe/DxeRing3/Ring3.h b/MdeModulePkg/Core/Dxe/DxeRing3/Ring3.h index 77ba5e4e70..08fd2c29de 100644 --- a/MdeModulePkg/Core/Dxe/DxeRing3/Ring3.h +++ b/MdeModulePkg/Core/Dxe/DxeRing3/Ring3.h @@ -1,6 +1,6 @@ /** @file - Copyright (c) 2024, Mikhail Krichanov. All rights reserved. + Copyright (c) 2024 - 2025, Mikhail Krichanov. All rights reserved. SPDX-License-Identifier: BSD-3-Clause **/ @@ -30,7 +30,7 @@ SysCall ( **/ EFI_TPL EFIAPI -Ring3RaiseTpl ( +UserSpaceRaiseTpl ( IN EFI_TPL NewTpl ); @@ -43,7 +43,7 @@ Ring3RaiseTpl ( **/ VOID EFIAPI -Ring3RestoreTpl ( +UserSpaceRestoreTpl ( IN EFI_TPL NewTpl ); @@ -67,7 +67,7 @@ Ring3RestoreTpl ( **/ EFI_STATUS EFIAPI -Ring3AllocatePages ( +UserSpaceAllocatePages ( IN EFI_ALLOCATE_TYPE Type, IN EFI_MEMORY_TYPE MemoryType, IN UINTN NumberOfPages, @@ -87,7 +87,7 @@ Ring3AllocatePages ( **/ EFI_STATUS EFIAPI -Ring3FreePages ( +UserSpaceFreePages ( IN EFI_PHYSICAL_ADDRESS Memory, IN UINTN NumberOfPages ); @@ -124,7 +124,7 @@ Ring3FreePages ( **/ EFI_STATUS EFIAPI -Ring3GetMemoryMap ( +UserSpaceGetMemoryMap ( IN OUT UINTN *MemoryMapSize, IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, OUT UINTN *MapKey, @@ -149,7 +149,7 @@ Ring3GetMemoryMap ( **/ EFI_STATUS EFIAPI -Ring3AllocatePool ( +UserSpaceAllocatePool ( IN EFI_MEMORY_TYPE PoolType, IN UINTN Size, OUT VOID **Buffer @@ -166,7 +166,7 @@ Ring3AllocatePool ( **/ EFI_STATUS EFIAPI -Ring3FreePool ( +UserSpaceFreePool ( IN VOID *Buffer ); @@ -190,7 +190,7 @@ Ring3FreePool ( **/ EFI_STATUS EFIAPI -Ring3CreateEvent ( +UserSpaceCreateEvent ( IN UINT32 Type, IN EFI_TPL NotifyTpl, IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, @@ -215,7 +215,7 @@ Ring3CreateEvent ( **/ EFI_STATUS EFIAPI -Ring3SetTimer ( +UserSpaceSetTimer ( IN EFI_EVENT UserEvent, IN EFI_TIMER_DELAY Type, IN UINT64 TriggerTime @@ -237,7 +237,7 @@ Ring3SetTimer ( **/ EFI_STATUS EFIAPI -Ring3WaitForEvent ( +UserSpaceWaitForEvent ( IN UINTN NumberOfEvents, IN EFI_EVENT *UserEvents, OUT UINTN *UserIndex @@ -254,7 +254,7 @@ Ring3WaitForEvent ( **/ EFI_STATUS EFIAPI -Ring3SignalEvent ( +UserSpaceSignalEvent ( IN EFI_EVENT UserEvent ); @@ -269,7 +269,7 @@ Ring3SignalEvent ( **/ EFI_STATUS EFIAPI -Ring3CloseEvent ( +UserSpaceCloseEvent ( IN EFI_EVENT UserEvent ); @@ -285,7 +285,7 @@ Ring3CloseEvent ( **/ EFI_STATUS EFIAPI -Ring3CheckEvent ( +UserSpaceCheckEvent ( IN EFI_EVENT UserEvent ); @@ -305,7 +305,7 @@ Ring3CheckEvent ( **/ EFI_STATUS EFIAPI -Ring3InstallProtocolInterface ( +UserSpaceInstallProtocolInterface ( IN OUT EFI_HANDLE *UserHandle, IN EFI_GUID *Protocol, IN EFI_INTERFACE_TYPE InterfaceType, @@ -328,7 +328,7 @@ Ring3InstallProtocolInterface ( **/ EFI_STATUS EFIAPI -Ring3ReinstallProtocolInterface ( +UserSpaceReinstallProtocolInterface ( IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, IN VOID *OldInterface, @@ -350,7 +350,7 @@ Ring3ReinstallProtocolInterface ( **/ EFI_STATUS EFIAPI -Ring3UninstallProtocolInterface ( +UserSpaceUninstallProtocolInterface ( IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, IN VOID *Interface @@ -369,7 +369,7 @@ Ring3UninstallProtocolInterface ( **/ EFI_STATUS EFIAPI -Ring3HandleProtocol ( +UserSpaceHandleProtocol ( IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, OUT VOID **Interface @@ -390,7 +390,7 @@ Ring3HandleProtocol ( **/ EFI_STATUS EFIAPI -Ring3RegisterProtocolNotify ( +UserSpaceRegisterProtocolNotify ( IN EFI_GUID *Protocol, IN EFI_EVENT Event, OUT VOID **Registration @@ -416,7 +416,7 @@ Ring3RegisterProtocolNotify ( **/ EFI_STATUS EFIAPI -Ring3LocateHandle ( +UserSpaceLocateHandle ( IN EFI_LOCATE_SEARCH_TYPE SearchType, IN EFI_GUID *Protocol OPTIONAL, IN VOID *SearchKey OPTIONAL, @@ -441,7 +441,7 @@ Ring3LocateHandle ( **/ EFI_STATUS EFIAPI -Ring3LocateDevicePath ( +UserSpaceLocateDevicePath ( IN EFI_GUID *Protocol, IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath, OUT EFI_HANDLE *Device @@ -464,7 +464,7 @@ Ring3LocateDevicePath ( **/ EFI_STATUS EFIAPI -Ring3InstallConfigurationTable ( +UserSpaceInstallConfigurationTable ( IN EFI_GUID *Guid, IN VOID *Table ); @@ -505,7 +505,7 @@ Ring3InstallConfigurationTable ( **/ EFI_STATUS EFIAPI -Ring3LoadImage ( +UserSpaceLoadImage ( IN BOOLEAN BootPolicy, IN EFI_HANDLE ParentImageHandle, IN EFI_DEVICE_PATH_PROTOCOL *FilePath, @@ -535,7 +535,7 @@ Ring3LoadImage ( **/ EFI_STATUS EFIAPI -Ring3StartImage ( +UserSpaceStartImage ( IN EFI_HANDLE ImageHandle, OUT UINTN *ExitDataSize, OUT CHAR16 **ExitData OPTIONAL @@ -566,7 +566,7 @@ Ring3StartImage ( **/ EFI_STATUS EFIAPI -Ring3Exit ( +UserSpaceExit ( IN EFI_HANDLE ImageHandle, IN EFI_STATUS Status, IN UINTN ExitDataSize, @@ -587,7 +587,7 @@ Ring3Exit ( **/ EFI_STATUS EFIAPI -Ring3UnloadImage ( +UserSpaceUnloadImage ( IN EFI_HANDLE ImageHandle ); @@ -603,7 +603,7 @@ Ring3UnloadImage ( **/ EFI_STATUS EFIAPI -Ring3ExitBootServices ( +UserSpaceExitBootServices ( IN EFI_HANDLE ImageHandle, IN UINTN MapKey ); @@ -620,7 +620,7 @@ Ring3ExitBootServices ( **/ EFI_STATUS EFIAPI -Ring3GetNextMonotonicCount ( +UserSpaceGetNextMonotonicCount ( OUT UINT64 *Count ); @@ -636,7 +636,7 @@ Ring3GetNextMonotonicCount ( **/ EFI_STATUS EFIAPI -Ring3Stall ( +UserSpaceStall ( IN UINTN Microseconds ); @@ -664,7 +664,7 @@ Ring3Stall ( **/ EFI_STATUS EFIAPI -Ring3SetWatchdogTimer ( +UserSpaceSetWatchdogTimer ( IN UINTN Timeout, IN UINT64 WatchdogCode, IN UINTN DataSize, @@ -699,7 +699,7 @@ Ring3SetWatchdogTimer ( **/ EFI_STATUS EFIAPI -Ring3ConnectController ( +UserSpaceConnectController ( IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE *DriverImageHandle OPTIONAL, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL, @@ -740,7 +740,7 @@ Ring3ConnectController ( **/ EFI_STATUS EFIAPI -Ring3DisconnectController ( +UserSpaceDisconnectController ( IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE DriverImageHandle OPTIONAL, IN EFI_HANDLE ChildHandle OPTIONAL @@ -768,7 +768,7 @@ Ring3DisconnectController ( **/ EFI_STATUS EFIAPI -Ring3OpenProtocol ( +UserSpaceOpenProtocol ( IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, OUT VOID **Interface OPTIONAL, @@ -804,7 +804,7 @@ Ring3OpenProtocol ( **/ EFI_STATUS EFIAPI -Ring3CloseProtocol ( +UserSpaceCloseProtocol ( IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, IN EFI_HANDLE AgentHandle, @@ -824,7 +824,7 @@ Ring3CloseProtocol ( **/ EFI_STATUS EFIAPI -Ring3OpenProtocolInformation ( +UserSpaceOpenProtocolInformation ( IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer, @@ -856,7 +856,7 @@ Ring3OpenProtocolInformation ( **/ EFI_STATUS EFIAPI -Ring3ProtocolsPerHandle ( +UserSpaceProtocolsPerHandle ( IN EFI_HANDLE UserHandle, OUT EFI_GUID ***ProtocolBuffer, OUT UINTN *ProtocolBufferCount @@ -864,7 +864,7 @@ Ring3ProtocolsPerHandle ( /** Function returns an array of handles that support the requested protocol - in a buffer allocated from pool. This is a version of Ring3LocateHandle() + in a buffer allocated from pool. This is a version of UserSpaceLocateHandle() that allocates a buffer for the caller. @param SearchType Specifies which handle(s) are to be returned. @@ -886,7 +886,7 @@ Ring3ProtocolsPerHandle ( **/ EFI_STATUS EFIAPI -Ring3LocateHandleBuffer ( +UserSpaceLocateHandleBuffer ( IN EFI_LOCATE_SEARCH_TYPE SearchType, IN EFI_GUID *Protocol OPTIONAL, IN VOID *SearchKey OPTIONAL, @@ -912,7 +912,7 @@ Ring3LocateHandleBuffer ( **/ EFI_STATUS EFIAPI -Ring3LocateProtocol ( +UserSpaceLocateProtocol ( IN EFI_GUID *Protocol, IN VOID *Registration OPTIONAL, OUT VOID **Interface @@ -941,7 +941,7 @@ Ring3LocateProtocol ( **/ EFI_STATUS EFIAPI -Ring3InstallMultipleProtocolInterfaces ( +UserSpaceInstallMultipleProtocolInterfaces ( IN OUT EFI_HANDLE *Handle, ... ); @@ -962,7 +962,7 @@ Ring3InstallMultipleProtocolInterfaces ( **/ EFI_STATUS EFIAPI -Ring3UninstallMultipleProtocolInterfaces ( +UserSpaceUninstallMultipleProtocolInterfaces ( IN EFI_HANDLE Handle, ... ); @@ -984,7 +984,7 @@ Ring3UninstallMultipleProtocolInterfaces ( **/ EFI_STATUS EFIAPI -Ring3CalculateCrc32 ( +UserSpaceCalculateCrc32 ( IN VOID *Data, IN UINTN DataSize, OUT UINT32 *Crc32 @@ -1012,7 +1012,7 @@ Ring3CalculateCrc32 ( **/ EFI_STATUS EFIAPI -Ring3CreateEventEx ( +UserSpaceCreateEventEx ( IN UINT32 Type, IN EFI_TPL NotifyTpl, IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, @@ -1034,7 +1034,7 @@ Ring3CreateEventEx ( **/ EFI_STATUS EFIAPI -Ring3BlockIoReset ( +UserSpaceBlockIoReset ( IN EFI_BLOCK_IO_PROTOCOL *This, IN BOOLEAN ExtendedVerification ); @@ -1060,7 +1060,7 @@ Ring3BlockIoReset ( **/ EFI_STATUS EFIAPI -Ring3BlockIoRead ( +UserSpaceBlockIoRead ( IN EFI_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, @@ -1090,7 +1090,7 @@ Ring3BlockIoRead ( **/ EFI_STATUS EFIAPI -Ring3BlockIoWrite ( +UserSpaceBlockIoWrite ( IN EFI_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, @@ -1110,7 +1110,7 @@ Ring3BlockIoWrite ( **/ EFI_STATUS EFIAPI -Ring3BlockIoFlush ( +UserSpaceBlockIoFlush ( IN EFI_BLOCK_IO_PROTOCOL *This ); @@ -1133,7 +1133,7 @@ Ring3BlockIoFlush ( **/ EFI_STATUS EFIAPI -Ring3DiskIoRead ( +UserSpaceDiskIoRead ( IN EFI_DISK_IO_PROTOCOL *This, IN UINT32 MediaId, IN UINT64 Offset, @@ -1161,7 +1161,7 @@ Ring3DiskIoRead ( **/ EFI_STATUS EFIAPI -Ring3DiskIoWrite ( +UserSpaceDiskIoWrite ( IN EFI_DISK_IO_PROTOCOL *This, IN UINT32 MediaId, IN UINT64 Offset, @@ -1184,7 +1184,7 @@ Ring3DiskIoWrite ( **/ EFI_STATUS EFIAPI -Ring3GetTime ( +UserSpaceGetTime ( OUT EFI_TIME *Time, OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL ); @@ -1201,7 +1201,7 @@ Ring3GetTime ( **/ EFI_STATUS EFIAPI -Ring3SetTime ( +UserSpaceSetTime ( IN EFI_TIME *Time ); @@ -1222,7 +1222,7 @@ Ring3SetTime ( **/ EFI_STATUS EFIAPI -Ring3GetWakeupTime ( +UserSpaceGetWakeupTime ( OUT BOOLEAN *Enabled, OUT BOOLEAN *Pending, OUT EFI_TIME *Time @@ -1244,7 +1244,7 @@ Ring3GetWakeupTime ( **/ EFI_STATUS EFIAPI -Ring3SetWakeupTime ( +UserSpaceSetWakeupTime ( IN BOOLEAN Enable, IN EFI_TIME *Time OPTIONAL ); @@ -1270,7 +1270,7 @@ Ring3SetWakeupTime ( **/ EFI_STATUS EFIAPI -Ring3SetVirtualAddressMap ( +UserSpaceSetVirtualAddressMap ( IN UINTN MemoryMapSize, IN UINTN DescriptorSize, IN UINT32 DescriptorVersion, @@ -1294,7 +1294,7 @@ Ring3SetVirtualAddressMap ( **/ EFI_STATUS EFIAPI -Ring3ConvertPointer ( +UserSpaceConvertPointer ( IN UINTN DebugDisposition, IN OUT VOID **Address ); @@ -1325,7 +1325,7 @@ Ring3ConvertPointer ( **/ EFI_STATUS EFIAPI -Ring3GetVariable ( +UserSpaceGetVariable ( IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, OUT UINT32 *Attributes OPTIONAL, @@ -1361,7 +1361,7 @@ Ring3GetVariable ( **/ EFI_STATUS EFIAPI -Ring3GetNextVariableName ( +UserSpaceGetNextVariableName ( IN OUT UINTN *VariableNameSize, IN OUT CHAR16 *VariableName, IN OUT EFI_GUID *VendorGuid @@ -1403,7 +1403,7 @@ Ring3GetNextVariableName ( **/ EFI_STATUS EFIAPI -Ring3SetVariable ( +UserSpaceSetVariable ( IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, IN UINT32 Attributes, @@ -1423,7 +1423,7 @@ Ring3SetVariable ( **/ EFI_STATUS EFIAPI -Ring3GetNextHighMonotonicCount ( +UserSpaceGetNextHighMonotonicCount ( OUT UINT32 *HighCount ); @@ -1444,7 +1444,7 @@ Ring3GetNextHighMonotonicCount ( **/ VOID EFIAPI -Ring3ResetSystem ( +UserSpaceResetSystem ( IN EFI_RESET_TYPE ResetType, IN EFI_STATUS ResetStatus, IN UINTN DataSize, @@ -1483,7 +1483,7 @@ Ring3ResetSystem ( **/ EFI_STATUS EFIAPI -Ring3UpdateCapsule ( +UserSpaceUpdateCapsule ( IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, IN UINTN CapsuleCount, IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL @@ -1514,7 +1514,7 @@ Ring3UpdateCapsule ( **/ EFI_STATUS EFIAPI -Ring3QueryCapsuleCapabilities ( +UserSpaceQueryCapsuleCapabilities ( IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, IN UINTN CapsuleCount, OUT UINT64 *MaximumCapsuleSize, @@ -1545,7 +1545,7 @@ Ring3QueryCapsuleCapabilities ( **/ EFI_STATUS EFIAPI -Ring3QueryVariableInfo ( +UserSpaceQueryVariableInfo ( IN UINT32 Attributes, OUT UINT64 *MaximumVariableStorageSize, OUT UINT64 *RemainingVariableStorageSize, @@ -1566,7 +1566,7 @@ Ring3QueryVariableInfo ( **/ INTN EFIAPI -Ring3UnicodeStriColl ( +UserSpaceUnicodeStriColl ( IN EFI_UNICODE_COLLATION_PROTOCOL *This, IN CHAR16 *Str1, IN CHAR16 *Str2 @@ -1586,7 +1586,7 @@ Ring3UnicodeStriColl ( **/ BOOLEAN EFIAPI -Ring3UnicodeMetaiMatch ( +UserSpaceUnicodeMetaiMatch ( IN EFI_UNICODE_COLLATION_PROTOCOL *This, IN CHAR16 *String, IN CHAR16 *Pattern @@ -1602,7 +1602,7 @@ Ring3UnicodeMetaiMatch ( **/ VOID EFIAPI -Ring3UnicodeStrLwr ( +UserSpaceUnicodeStrLwr ( IN EFI_UNICODE_COLLATION_PROTOCOL *This, IN OUT CHAR16 *Str ); @@ -1617,7 +1617,7 @@ Ring3UnicodeStrLwr ( **/ VOID EFIAPI -Ring3UnicodeStrUpr ( +UserSpaceUnicodeStrUpr ( IN EFI_UNICODE_COLLATION_PROTOCOL *This, IN OUT CHAR16 *Str ); @@ -1636,7 +1636,7 @@ Ring3UnicodeStrUpr ( **/ VOID EFIAPI -Ring3UnicodeFatToStr ( +UserSpaceUnicodeFatToStr ( IN EFI_UNICODE_COLLATION_PROTOCOL *This, IN UINTN FatSize, IN CHAR8 *Fat, @@ -1659,7 +1659,7 @@ Ring3UnicodeFatToStr ( **/ BOOLEAN EFIAPI -Ring3UnicodeStrToFat ( +UserSpaceUnicodeStrToFat ( IN EFI_UNICODE_COLLATION_PROTOCOL *This, IN CHAR16 *String, IN UINTN FatSize, diff --git a/MdeModulePkg/Core/Dxe/DxeRing3/Ring3Protocols.c b/MdeModulePkg/Core/Dxe/DxeRing3/Ring3Protocols.c index 4c4c058df3..6408ee1df1 100644 --- a/MdeModulePkg/Core/Dxe/DxeRing3/Ring3Protocols.c +++ b/MdeModulePkg/Core/Dxe/DxeRing3/Ring3Protocols.c @@ -1,6 +1,7 @@ /** @file + This driver constructs User space wrappers for the EFI_*_PROTOCOLs. - Copyright (c) 2024, Mikhail Krichanov. All rights reserved. + Copyright (c) 2024 - 2025, Mikhail Krichanov. All rights reserved. SPDX-License-Identifier: BSD-3-Clause **/ @@ -9,7 +10,7 @@ EFI_STATUS EFIAPI -Ring3BlockIoReset ( +UserSpaceBlockIoReset ( IN EFI_BLOCK_IO_PROTOCOL *This, IN BOOLEAN ExtendedVerification ) @@ -24,7 +25,7 @@ Ring3BlockIoReset ( EFI_STATUS EFIAPI -Ring3BlockIoRead ( +UserSpaceBlockIoRead ( IN EFI_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, @@ -45,7 +46,7 @@ Ring3BlockIoRead ( EFI_STATUS EFIAPI -Ring3BlockIoWrite ( +UserSpaceBlockIoWrite ( IN EFI_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, @@ -66,7 +67,7 @@ Ring3BlockIoWrite ( EFI_STATUS EFIAPI -Ring3BlockIoFlush ( +UserSpaceBlockIoFlush ( IN EFI_BLOCK_IO_PROTOCOL *This ) { @@ -79,7 +80,7 @@ Ring3BlockIoFlush ( EFI_STATUS EFIAPI -Ring3DiskIoRead ( +UserSpaceDiskIoRead ( IN EFI_DISK_IO_PROTOCOL *This, IN UINT32 MediaId, IN UINT64 Offset, @@ -100,7 +101,7 @@ Ring3DiskIoRead ( EFI_STATUS EFIAPI -Ring3DiskIoWrite ( +UserSpaceDiskIoWrite ( IN EFI_DISK_IO_PROTOCOL *This, IN UINT32 MediaId, IN UINT64 Offset, @@ -121,7 +122,7 @@ Ring3DiskIoWrite ( INTN EFIAPI -Ring3UnicodeStriColl ( +UserSpaceUnicodeStriColl ( IN EFI_UNICODE_COLLATION_PROTOCOL *This, IN CHAR16 *Str1, IN CHAR16 *Str2 @@ -138,7 +139,7 @@ Ring3UnicodeStriColl ( BOOLEAN EFIAPI -Ring3UnicodeMetaiMatch ( +UserSpaceUnicodeMetaiMatch ( IN EFI_UNICODE_COLLATION_PROTOCOL *This, IN CHAR16 *String, IN CHAR16 *Pattern @@ -155,7 +156,7 @@ Ring3UnicodeMetaiMatch ( VOID EFIAPI -Ring3UnicodeStrLwr ( +UserSpaceUnicodeStrLwr ( IN EFI_UNICODE_COLLATION_PROTOCOL *This, IN OUT CHAR16 *Str ) @@ -170,7 +171,7 @@ Ring3UnicodeStrLwr ( VOID EFIAPI -Ring3UnicodeStrUpr ( +UserSpaceUnicodeStrUpr ( IN EFI_UNICODE_COLLATION_PROTOCOL *This, IN OUT CHAR16 *Str ) @@ -185,7 +186,7 @@ Ring3UnicodeStrUpr ( VOID EFIAPI -Ring3UnicodeFatToStr ( +UserSpaceUnicodeFatToStr ( IN EFI_UNICODE_COLLATION_PROTOCOL *This, IN UINTN FatSize, IN CHAR8 *Fat, @@ -204,7 +205,7 @@ Ring3UnicodeFatToStr ( BOOLEAN EFIAPI -Ring3UnicodeStrToFat ( +UserSpaceUnicodeStrToFat ( IN EFI_UNICODE_COLLATION_PROTOCOL *This, IN CHAR16 *String, IN UINTN FatSize, diff --git a/MdeModulePkg/Core/Dxe/DxeRing3/Ring3UefiBootServices.c b/MdeModulePkg/Core/Dxe/DxeRing3/Ring3UefiBootServices.c index a68e701aeb..76d74da393 100644 --- a/MdeModulePkg/Core/Dxe/DxeRing3/Ring3UefiBootServices.c +++ b/MdeModulePkg/Core/Dxe/DxeRing3/Ring3UefiBootServices.c @@ -1,7 +1,7 @@ /** @file - This driver constructs Ring 3 wrappers for the EFI_BOOT_SERVICES. + This driver constructs User space wrappers for the EFI_BOOT_SERVICES. - Copyright (c) 2024, Mikhail Krichanov. All rights reserved. + Copyright (c) 2024 - 2025, Mikhail Krichanov. All rights reserved. SPDX-License-Identifier: BSD-3-Clause **/ @@ -73,17 +73,17 @@ FixInterface ( BlockIo = (EFI_BLOCK_IO_PROTOCOL *)*Interface; - BlockIo->Reset = Ring3BlockIoReset; - BlockIo->ReadBlocks = Ring3BlockIoRead; - BlockIo->WriteBlocks = Ring3BlockIoWrite; - BlockIo->FlushBlocks = Ring3BlockIoFlush; + BlockIo->Reset = UserSpaceBlockIoReset; + BlockIo->ReadBlocks = UserSpaceBlockIoRead; + BlockIo->WriteBlocks = UserSpaceBlockIoWrite; + BlockIo->FlushBlocks = UserSpaceBlockIoFlush; } else if (CompareGuid (Protocol, &gEfiDiskIoProtocolGuid)) { DiskIo = (EFI_DISK_IO_PROTOCOL *)*Interface; - DiskIo->ReadDisk = Ring3DiskIoRead; - DiskIo->WriteDisk = Ring3DiskIoWrite; + DiskIo->ReadDisk = UserSpaceDiskIoRead; + DiskIo->WriteDisk = UserSpaceDiskIoWrite; } else if (CompareGuid (Protocol, &gEfiDevicePathUtilitiesProtocolGuid)) { DevicePath = (EFI_DEVICE_PATH_UTILITIES_PROTOCOL *)*Interface; @@ -100,12 +100,12 @@ FixInterface ( } else if (CompareGuid (Protocol, &gEfiUnicodeCollationProtocolGuid)) { Unicode = (EFI_UNICODE_COLLATION_PROTOCOL *)*Interface; - Unicode->StriColl = Ring3UnicodeStriColl; - Unicode->MetaiMatch = Ring3UnicodeMetaiMatch; - Unicode->StrLwr = Ring3UnicodeStrLwr; - Unicode->StrUpr = Ring3UnicodeStrUpr; - Unicode->FatToStr = Ring3UnicodeFatToStr; - Unicode->StrToFat = Ring3UnicodeStrToFat; + Unicode->StriColl = UserSpaceUnicodeStriColl; + Unicode->MetaiMatch = UserSpaceUnicodeMetaiMatch; + Unicode->StrLwr = UserSpaceUnicodeStrLwr; + Unicode->StrUpr = UserSpaceUnicodeStrUpr; + Unicode->FatToStr = UserSpaceUnicodeFatToStr; + Unicode->StrToFat = UserSpaceUnicodeStrToFat; } else { return EFI_UNSUPPORTED; @@ -116,7 +116,7 @@ FixInterface ( EFI_TPL EFIAPI -Ring3RaiseTpl ( +UserSpaceRaiseTpl ( IN EFI_TPL NewTpl ) { @@ -129,7 +129,7 @@ Ring3RaiseTpl ( VOID EFIAPI -Ring3RestoreTpl ( +UserSpaceRestoreTpl ( IN EFI_TPL NewTpl ) { @@ -142,7 +142,7 @@ Ring3RestoreTpl ( EFI_STATUS EFIAPI -Ring3AllocatePages ( +UserSpaceAllocatePages ( IN EFI_ALLOCATE_TYPE Type, IN EFI_MEMORY_TYPE MemoryType, IN UINTN NumberOfPages, @@ -155,12 +155,12 @@ Ring3AllocatePages ( SysCallAllocatePages, 4, Type, - EfiRing3MemoryType, + EfiUserSpaceMemoryType, NumberOfPages, Memory ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "Ring3: Failed to allocate %d pages.\n", NumberOfPages)); + DEBUG ((DEBUG_ERROR, "UserSpace: Failed to allocate %d pages.\n", NumberOfPages)); } return Status; @@ -168,7 +168,7 @@ Ring3AllocatePages ( EFI_STATUS EFIAPI -Ring3FreePages ( +UserSpaceFreePages ( IN EFI_PHYSICAL_ADDRESS Memory, IN UINTN NumberOfPages ) @@ -182,7 +182,7 @@ Ring3FreePages ( Memory ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "Ring3: Failed to free %d pages.\n", NumberOfPages)); + DEBUG ((DEBUG_ERROR, "UserSpace: Failed to free %d pages.\n", NumberOfPages)); } return Status; @@ -190,7 +190,7 @@ Ring3FreePages ( EFI_STATUS EFIAPI -Ring3GetMemoryMap ( +UserSpaceGetMemoryMap ( IN OUT UINTN *MemoryMapSize, IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, OUT UINTN *MapKey, @@ -198,14 +198,14 @@ Ring3GetMemoryMap ( OUT UINT32 *DescriptorVersion ) { - DEBUG ((DEBUG_ERROR, "Ring3: GetMemoryMap is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: GetMemoryMap is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3AllocatePool ( +UserSpaceAllocatePool ( IN EFI_MEMORY_TYPE PoolType, IN UINTN Size, OUT VOID **Buffer @@ -222,7 +222,7 @@ Ring3AllocatePool ( EFI_STATUS EFIAPI -Ring3FreePool ( +UserSpaceFreePool ( IN VOID *Buffer ) { @@ -231,7 +231,7 @@ Ring3FreePool ( EFI_STATUS EFIAPI -Ring3CreateEvent ( +UserSpaceCreateEvent ( IN UINT32 Type, IN EFI_TPL NotifyTpl, IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, @@ -239,114 +239,114 @@ Ring3CreateEvent ( OUT EFI_EVENT *Event ) { - DEBUG ((DEBUG_ERROR, "Ring3: CreateEvent is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: CreateEvent is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3SetTimer ( +UserSpaceSetTimer ( IN EFI_EVENT UserEvent, IN EFI_TIMER_DELAY Type, IN UINT64 TriggerTime ) { - DEBUG ((DEBUG_ERROR, "Ring3: SetTimer is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: SetTimer is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3WaitForEvent ( +UserSpaceWaitForEvent ( IN UINTN NumberOfEvents, IN EFI_EVENT *UserEvents, OUT UINTN *UserIndex ) { - DEBUG ((DEBUG_ERROR, "Ring3: WaitForEvent is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: WaitForEvent is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3SignalEvent ( +UserSpaceSignalEvent ( IN EFI_EVENT UserEvent ) { - DEBUG ((DEBUG_ERROR, "Ring3: SignalEvent is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: SignalEvent is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3CloseEvent ( +UserSpaceCloseEvent ( IN EFI_EVENT UserEvent ) { - DEBUG ((DEBUG_ERROR, "Ring3: CloseEvent is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: CloseEvent is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3CheckEvent ( +UserSpaceCheckEvent ( IN EFI_EVENT UserEvent ) { - DEBUG ((DEBUG_ERROR, "Ring3: CheckEvent is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: CheckEvent is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3InstallProtocolInterface ( +UserSpaceInstallProtocolInterface ( IN OUT EFI_HANDLE *UserHandle, IN EFI_GUID *Protocol, IN EFI_INTERFACE_TYPE InterfaceType, IN VOID *Interface ) { - DEBUG ((DEBUG_ERROR, "Ring3: InstallProtocolInterface is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: InstallProtocolInterface is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3ReinstallProtocolInterface ( +UserSpaceReinstallProtocolInterface ( IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, IN VOID *OldInterface, IN VOID *NewInterface ) { - DEBUG ((DEBUG_ERROR, "Ring3: ReinstallProtocolInterface is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: ReinstallProtocolInterface is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3UninstallProtocolInterface ( +UserSpaceUninstallProtocolInterface ( IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, IN VOID *Interface ) { - DEBUG ((DEBUG_ERROR, "Ring3: UninstallProtocolInterface is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: UninstallProtocolInterface is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3HandleProtocol ( +UserSpaceHandleProtocol ( IN EFI_HANDLE CoreUserHandle, IN EFI_GUID *Protocol, OUT VOID **Interface @@ -362,7 +362,7 @@ Ring3HandleProtocol ( Interface ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "Ring3: Failed to get handle of protocol %g - %r\n", Protocol, Status)); + DEBUG ((DEBUG_ERROR, "UserSpace: Failed to get handle of protocol %g - %r\n", Protocol, Status)); return Status; } @@ -371,20 +371,20 @@ Ring3HandleProtocol ( EFI_STATUS EFIAPI -Ring3RegisterProtocolNotify ( +UserSpaceRegisterProtocolNotify ( IN EFI_GUID *Protocol, IN EFI_EVENT Event, OUT VOID **Registration ) { - DEBUG ((DEBUG_ERROR, "Ring3: RegisterProtocolNotify is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: RegisterProtocolNotify is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3LocateHandle ( +UserSpaceLocateHandle ( IN EFI_LOCATE_SEARCH_TYPE SearchType, IN EFI_GUID *Protocol OPTIONAL, IN VOID *SearchKey OPTIONAL, @@ -392,39 +392,39 @@ Ring3LocateHandle ( OUT EFI_HANDLE *Buffer ) { - DEBUG ((DEBUG_ERROR, "Ring3: LocateHandle is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: LocateHandle is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3LocateDevicePath ( +UserSpaceLocateDevicePath ( IN EFI_GUID *Protocol, IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath, OUT EFI_HANDLE *Device ) { - DEBUG ((DEBUG_ERROR, "Ring3: LocateDevicePath is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: LocateDevicePath is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3InstallConfigurationTable ( +UserSpaceInstallConfigurationTable ( IN EFI_GUID *Guid, IN VOID *Table ) { - DEBUG ((DEBUG_ERROR, "Ring3: InstallConfigurationTable is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: InstallConfigurationTable is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3LoadImage ( +UserSpaceLoadImage ( IN BOOLEAN BootPolicy, IN EFI_HANDLE ParentImageHandle, IN EFI_DEVICE_PATH_PROTOCOL *FilePath, @@ -433,127 +433,127 @@ Ring3LoadImage ( OUT EFI_HANDLE *ImageHandle ) { - DEBUG ((DEBUG_ERROR, "Ring3: LoadImage is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: LoadImage is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3StartImage ( +UserSpaceStartImage ( IN EFI_HANDLE ImageHandle, OUT UINTN *ExitDataSize, OUT CHAR16 **ExitData OPTIONAL ) { - DEBUG ((DEBUG_ERROR, "Ring3: StartImage is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: StartImage is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3Exit ( +UserSpaceExit ( IN EFI_HANDLE ImageHandle, IN EFI_STATUS Status, IN UINTN ExitDataSize, IN CHAR16 *ExitData OPTIONAL ) { - DEBUG ((DEBUG_ERROR, "Ring3: Exit is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: Exit is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3UnloadImage ( +UserSpaceUnloadImage ( IN EFI_HANDLE ImageHandle ) { - DEBUG ((DEBUG_ERROR, "Ring3: UnloadImage is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: UnloadImage is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3ExitBootServices ( +UserSpaceExitBootServices ( IN EFI_HANDLE ImageHandle, IN UINTN MapKey ) { - DEBUG ((DEBUG_ERROR, "Ring3: ExitBootServices is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: ExitBootServices is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3GetNextMonotonicCount ( +UserSpaceGetNextMonotonicCount ( OUT UINT64 *Count ) { - DEBUG ((DEBUG_ERROR, "Ring3: GetNextMonotonicCount is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: GetNextMonotonicCount is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3Stall ( +UserSpaceStall ( IN UINTN Microseconds ) { - DEBUG ((DEBUG_ERROR, "Ring3: Stall is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: Stall is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3SetWatchdogTimer ( +UserSpaceSetWatchdogTimer ( IN UINTN Timeout, IN UINT64 WatchdogCode, IN UINTN DataSize, IN CHAR16 *WatchdogData OPTIONAL ) { - DEBUG ((DEBUG_ERROR, "Ring3: SetWatchdogTimer is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: SetWatchdogTimer is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3ConnectController ( +UserSpaceConnectController ( IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE *DriverImageHandle OPTIONAL, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL, IN BOOLEAN Recursive ) { - DEBUG ((DEBUG_ERROR, "Ring3: ConnectController is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: ConnectController is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3DisconnectController ( +UserSpaceDisconnectController ( IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE DriverImageHandle OPTIONAL, IN EFI_HANDLE ChildHandle OPTIONAL ) { - DEBUG ((DEBUG_ERROR, "Ring3: DisconnectController is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: DisconnectController is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3OpenProtocol ( +UserSpaceOpenProtocol ( IN EFI_HANDLE CoreUserHandle, IN EFI_GUID *Protocol, OUT VOID **Interface OPTIONAL, @@ -583,7 +583,7 @@ Ring3OpenProtocol ( EFI_STATUS EFIAPI -Ring3CloseProtocol ( +UserSpaceCloseProtocol ( IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, IN EFI_HANDLE AgentHandle, @@ -602,34 +602,34 @@ Ring3CloseProtocol ( EFI_STATUS EFIAPI -Ring3OpenProtocolInformation ( +UserSpaceOpenProtocolInformation ( IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer, OUT UINTN *EntryCount ) { - DEBUG ((DEBUG_ERROR, "Ring3: OpenProtocolInformation is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: OpenProtocolInformation is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3ProtocolsPerHandle ( +UserSpaceProtocolsPerHandle ( IN EFI_HANDLE UserHandle, OUT EFI_GUID ***ProtocolBuffer, OUT UINTN *ProtocolBufferCount ) { - DEBUG ((DEBUG_ERROR, "Ring3: ProtocolsPerHandle is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: ProtocolsPerHandle is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3LocateHandleBuffer ( +UserSpaceLocateHandleBuffer ( IN EFI_LOCATE_SEARCH_TYPE SearchType, IN EFI_GUID *Protocol OPTIONAL, IN VOID *SearchKey OPTIONAL, @@ -656,14 +656,14 @@ Ring3LocateHandleBuffer ( && (Buffer != NULL) && (*Buffer != NULL)) { PoolSize = *NumberHandles * sizeof (EFI_HANDLE *); - Status = Ring3AllocatePool (EfiRing3MemoryType, PoolSize, &Pool); + Status = UserSpaceAllocatePool (EfiUserSpaceMemoryType, PoolSize, &Pool); if (EFI_ERROR (Status)) { return Status; } CopyMem (Pool, *Buffer, PoolSize); - Status = Ring3FreePages ( + Status = UserSpaceFreePages ( (EFI_PHYSICAL_ADDRESS)(UINTN)*Buffer, EFI_SIZE_TO_PAGES (PoolSize) ); @@ -679,7 +679,7 @@ Ring3LocateHandleBuffer ( EFI_STATUS EFIAPI -Ring3LocateProtocol ( +UserSpaceLocateProtocol ( IN EFI_GUID *Protocol, IN VOID *CoreRegistration OPTIONAL, OUT VOID **Interface @@ -695,7 +695,7 @@ Ring3LocateProtocol ( Interface ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "Ring3: Failed to loacate protocol %g\n", Protocol)); + DEBUG ((DEBUG_ERROR, "UserSpace: Failed to loacate protocol %g\n", Protocol)); return Status; } @@ -704,7 +704,7 @@ Ring3LocateProtocol ( EFI_STATUS EFIAPI -Ring3InstallMultipleProtocolInterfaces ( +UserSpaceInstallMultipleProtocolInterfaces ( IN OUT EFI_HANDLE *Handle, ... ) @@ -722,8 +722,8 @@ Ring3InstallMultipleProtocolInterfaces ( } VA_END (Marker); - Status = Ring3AllocatePool ( - EfiRing3MemoryType, + Status = UserSpaceAllocatePool ( + EfiUserSpaceMemoryType, NumberOfArguments * sizeof (VOID *), (VOID **)&Arguments ); @@ -745,25 +745,25 @@ Ring3InstallMultipleProtocolInterfaces ( Arguments ); - Ring3FreePool (Arguments); + UserSpaceFreePool (Arguments); return Status; } EFI_STATUS EFIAPI -Ring3UninstallMultipleProtocolInterfaces ( +UserSpaceUninstallMultipleProtocolInterfaces ( IN EFI_HANDLE Handle, ... ) { - DEBUG ((DEBUG_ERROR, "Ring3: UninstallMultipleProtocolInterfaces is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: UninstallMultipleProtocolInterfaces is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3CalculateCrc32 ( +UserSpaceCalculateCrc32 ( IN VOID *Data, IN UINTN DataSize, OUT UINT32 *Crc32 @@ -780,7 +780,7 @@ Ring3CalculateCrc32 ( EFI_STATUS EFIAPI -Ring3CreateEventEx ( +UserSpaceCreateEventEx ( IN UINT32 Type, IN EFI_TPL NotifyTpl, IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, @@ -789,7 +789,7 @@ Ring3CreateEventEx ( OUT EFI_EVENT *Event ) { - DEBUG ((DEBUG_ERROR, "Ring3: CreateEventEx is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: CreateEventEx is not supported\n")); return EFI_UNSUPPORTED; } @@ -835,7 +835,7 @@ CoreAllocatePoolPagesI ( { EFI_PHYSICAL_ADDRESS Memory; - Ring3AllocatePages (AllocateAnyPages, EfiRing3MemoryType, NoPages, &Memory); + UserSpaceAllocatePages (AllocateAnyPages, EfiUserSpaceMemoryType, NoPages, &Memory); return (VOID *)(UINTN)Memory; } @@ -847,7 +847,7 @@ CoreFreePoolPagesI ( IN UINTN NoPages ) { - Ring3FreePages (Memory, NoPages); + UserSpaceFreePages (Memory, NoPages); } VOID @@ -857,5 +857,5 @@ CoreFreePoolPagesWithGuard ( IN UINTN NoPages ) { - CoreFreePoolPagesI (EfiRing3MemoryType, Memory, NoPages); + CoreFreePoolPagesI (EfiUserSpaceMemoryType, Memory, NoPages); } diff --git a/MdeModulePkg/Core/Dxe/DxeRing3/Ring3UefiRuntimeServices.c b/MdeModulePkg/Core/Dxe/DxeRing3/Ring3UefiRuntimeServices.c index e3e787a536..8e86c8511b 100644 --- a/MdeModulePkg/Core/Dxe/DxeRing3/Ring3UefiRuntimeServices.c +++ b/MdeModulePkg/Core/Dxe/DxeRing3/Ring3UefiRuntimeServices.c @@ -1,3 +1,11 @@ +/** @file + This driver constructs User space wrappers for the EFI_RUNTIME_SERVICES. + + Copyright (c) 2024 - 2025, Mikhail Krichanov. All rights reserved. + SPDX-License-Identifier: BSD-3-Clause + +**/ + #include #include @@ -7,81 +15,81 @@ EFI_STATUS EFIAPI -Ring3GetTime ( +UserSpaceGetTime ( OUT EFI_TIME *Time, OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL ) { - DEBUG ((DEBUG_ERROR, "Ring3: GetTime is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: GetTime is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3SetTime ( +UserSpaceSetTime ( IN EFI_TIME *Time ) { - DEBUG ((DEBUG_ERROR, "Ring3: SetTime is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: SetTime is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3GetWakeupTime ( +UserSpaceGetWakeupTime ( OUT BOOLEAN *Enabled, OUT BOOLEAN *Pending, OUT EFI_TIME *Time ) { - DEBUG ((DEBUG_ERROR, "Ring3: GetWakeupTime is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: GetWakeupTime is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3SetWakeupTime ( +UserSpaceSetWakeupTime ( IN BOOLEAN Enable, IN EFI_TIME *Time OPTIONAL ) { - DEBUG ((DEBUG_ERROR, "Ring3: SetWakeupTime is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: SetWakeupTime is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3SetVirtualAddressMap ( +UserSpaceSetVirtualAddressMap ( IN UINTN MemoryMapSize, IN UINTN DescriptorSize, IN UINT32 DescriptorVersion, IN EFI_MEMORY_DESCRIPTOR *VirtualMap ) { - DEBUG ((DEBUG_ERROR, "Ring3: SetVirtualAddressMap is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: SetVirtualAddressMap is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3ConvertPointer ( +UserSpaceConvertPointer ( IN UINTN DebugDisposition, IN OUT VOID **Address ) { - DEBUG ((DEBUG_ERROR, "Ring3: ConvertPointer is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: ConvertPointer is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3GetVariable ( +UserSpaceGetVariable ( IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, OUT UINT32 *Attributes OPTIONAL, @@ -102,20 +110,20 @@ Ring3GetVariable ( EFI_STATUS EFIAPI -Ring3GetNextVariableName ( +UserSpaceGetNextVariableName ( IN OUT UINTN *VariableNameSize, IN OUT CHAR16 *VariableName, IN OUT EFI_GUID *VendorGuid ) { - DEBUG ((DEBUG_ERROR, "Ring3: GetNextVariableName is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: GetNextVariableName is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3SetVariable ( +UserSpaceSetVariable ( IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, IN UINT32 Attributes, @@ -123,73 +131,73 @@ Ring3SetVariable ( IN VOID *Data ) { - DEBUG ((DEBUG_ERROR, "Ring3: SetVariable is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: SetVariable is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3GetNextHighMonotonicCount ( +UserSpaceGetNextHighMonotonicCount ( OUT UINT32 *HighCount ) { - DEBUG ((DEBUG_ERROR, "Ring3: GetNextHighMonotonicCount is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: GetNextHighMonotonicCount is not supported\n")); return EFI_UNSUPPORTED; } VOID EFIAPI -Ring3ResetSystem ( +UserSpaceResetSystem ( IN EFI_RESET_TYPE ResetType, IN EFI_STATUS ResetStatus, IN UINTN DataSize, IN VOID *ResetData OPTIONAL ) { - DEBUG ((DEBUG_ERROR, "Ring3: ResetSystem is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: ResetSystem is not supported\n")); return; } EFI_STATUS EFIAPI -Ring3UpdateCapsule ( +UserSpaceUpdateCapsule ( IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, IN UINTN CapsuleCount, IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL ) { - DEBUG ((DEBUG_ERROR, "Ring3: UpdateCapsule is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: UpdateCapsule is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3QueryCapsuleCapabilities ( +UserSpaceQueryCapsuleCapabilities ( IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, IN UINTN CapsuleCount, OUT UINT64 *MaximumCapsuleSize, OUT EFI_RESET_TYPE *ResetType ) { - DEBUG ((DEBUG_ERROR, "Ring3: QueryCapsuleCapabilities is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: QueryCapsuleCapabilities is not supported\n")); return EFI_UNSUPPORTED; } EFI_STATUS EFIAPI -Ring3QueryVariableInfo ( +UserSpaceQueryVariableInfo ( IN UINT32 Attributes, OUT UINT64 *MaximumVariableStorageSize, OUT UINT64 *RemainingVariableStorageSize, OUT UINT64 *MaximumVariableSize ) { - DEBUG ((DEBUG_ERROR, "Ring3: QueryVariableInfo is not supported\n")); + DEBUG ((DEBUG_ERROR, "UserSpace: QueryVariableInfo is not supported\n")); return EFI_UNSUPPORTED; } diff --git a/MdeModulePkg/Core/Dxe/DxeRing3/X64/SysCall.nasm b/MdeModulePkg/Core/Dxe/DxeRing3/X64/SysCall.nasm index b45253cd8f..8b61f1e311 100644 --- a/MdeModulePkg/Core/Dxe/DxeRing3/X64/SysCall.nasm +++ b/MdeModulePkg/Core/Dxe/DxeRing3/X64/SysCall.nasm @@ -1,9 +1,9 @@ ;------------------------------------------------------------------------------ -; Copyright (c) 2024, Mikhail Krichanov. All rights reserved. +; Copyright (c) 2024 - 2025, Mikhail Krichanov. All rights reserved. ; SPDX-License-Identifier: BSD-3-Clause ;------------------------------------------------------------------------------ -extern ASM_PFX(Ring3Call) +extern ASM_PFX(UserSpaceCall) DEFAULT REL SECTION .text @@ -43,15 +43,15 @@ makecall: ;------------------------------------------------------------------------------ ; VOID ; EFIAPI -; Ring3EntryPoint ( -; IN RING3_CALL_DATA *Data +; UserSpaceEntryPoint ( +; IN USER_SPACE_CALL_DATA *Data ; ); ; -; (rcx) RIP of Ring3EntryPoint saved for SYSRET in CallRing3(). +; (rcx) RIP of UserSpaceEntryPoint saved for SYSRET in CallUserSpace(). ; (rdx) Data ;------------------------------------------------------------------------------ -global ASM_PFX(Ring3EntryPoint) -ASM_PFX(Ring3EntryPoint): +global ASM_PFX(UserSpaceEntryPoint) +ASM_PFX(UserSpaceEntryPoint): mov rcx, rdx - call ASM_PFX(Ring3Call) + call ASM_PFX(UserSpaceCall) diff --git a/MdeModulePkg/Core/Dxe/Image/Image.c b/MdeModulePkg/Core/Dxe/Image/Image.c index 8d37e26e09..956dbab0f0 100644 --- a/MdeModulePkg/Core/Dxe/Image/Image.c +++ b/MdeModulePkg/Core/Dxe/Image/Image.c @@ -23,7 +23,7 @@ typedef struct { STATIC LIST_ENTRY mAvailableEmulators; STATIC EFI_EVENT mPeCoffEmuProtocolRegistrationEvent; STATIC VOID *mPeCoffEmuProtocolNotifyRegistration; -STATIC BOOLEAN mDxeRing3 = TRUE; +STATIC BOOLEAN mDxeUserSpace = TRUE; extern BOOLEAN gBdsStarted; @@ -1349,12 +1349,12 @@ CoreLoadImageCommon ( Image->Info.ParentHandle = ParentImageHandle; Image->IsUserImage = (FileAttributes & EFI_FV_FILE_ATTRIB_USER) != 0; - if ((!PcdGetBool (PcdEnableUserSpace)) && Image->IsUserImage && mDxeRing3) { + if ((!PcdGetBool (PcdEnableUserSpace)) && Image->IsUserImage && mDxeUserSpace) { // - // Do not load DxeRing3 driver, if UserSpace is disabled. + // Do not load DxeUserSpace driver, if UserSpace is disabled. // - mDxeRing3 = FALSE; - Status = EFI_NOT_STARTED; + mDxeUserSpace = FALSE; + Status = EFI_NOT_STARTED; goto Done; } @@ -1454,7 +1454,7 @@ CoreLoadImageCommon ( Status = EFI_SUCCESS; ProtectUefiImage (&Image->Info, ImageOrigin, &ImageContext, Image->IsUserImage); - if (PcdGetBool (PcdEnableUserSpace) && (gRing3Data != NULL) && Image->IsUserImage) { + if (PcdGetBool (PcdEnableUserSpace) && (gUserSpaceData != NULL) && Image->IsUserImage) { Image->UserPageTable = InitializeUserPageTable (Image); } @@ -1708,8 +1708,8 @@ CoreStartImage ( Image->Started = TRUE; if (PcdGetBool (PcdEnableUserSpace) && (Image->IsUserImage)) { - if (gRing3Data == NULL) { - Image->Status = InitializeRing3 (ImageHandle, Image); + if (gUserSpaceData == NULL) { + Image->Status = InitializeUserSpace (ImageHandle, Image); if (EFI_ERROR (Image->Status)) { DEBUG ((DEBUG_ERROR, "Core: Failed to initialize User address space - %r.\n", Image->Status)); CpuDeadLoop (); @@ -1729,12 +1729,12 @@ CoreStartImage ( InsertTailList (&gUserSpaceDriversHead, &UserDriver->Link); - Image->Status = GoToRing3 ( + Image->Status = GoToUserSpace ( 2, (VOID *)Image->EntryPoint, UserDriver, ImageHandle, - gRing3Data + gUserSpaceData ); } else { Image->Status = EFI_OUT_OF_RESOURCES; @@ -1979,7 +1979,7 @@ CoreUnloadImage ( if (Image->Info.Unload != NULL) { // // TODO: If Image->IsUserImage, use FindInterface() to locate UserSpace - // EFI_LOADED_IMAGE_PROTOCOL->Unload() and GoToRing3(). + // EFI_LOADED_IMAGE_PROTOCOL->Unload() and GoToUserSpace(). // Status = Image->Info.Unload (ImageHandle); } diff --git a/MdeModulePkg/Core/Dxe/Mem/Page.c b/MdeModulePkg/Core/Dxe/Mem/Page.c index 6b460d9a80..5078e3e095 100644 --- a/MdeModulePkg/Core/Dxe/Mem/Page.c +++ b/MdeModulePkg/Core/Dxe/Mem/Page.c @@ -63,7 +63,7 @@ EFI_MEMORY_TYPE_STATISTICS mMemoryTypeStatistics[EfiMaxMemoryType + 1] = { { 0, MAX_ALLOC_ADDRESS, 0, 0, EfiMaxMemoryType, TRUE, TRUE }, // EfiPalCode { 0, MAX_ALLOC_ADDRESS, 0, 0, EfiMaxMemoryType, FALSE, FALSE }, // EfiPersistentMemory { 0, MAX_ALLOC_ADDRESS, 0, 0, EfiMaxMemoryType, TRUE, FALSE }, // EfiUnacceptedMemoryType - { 0, MAX_ALLOC_ADDRESS, 0, 0, EfiMaxMemoryType, FALSE, FALSE }, // EfiRing3MemoryType + { 0, MAX_ALLOC_ADDRESS, 0, 0, EfiMaxMemoryType, FALSE, FALSE }, // EfiUserSpaceMemoryType { 0, MAX_ALLOC_ADDRESS, 0, 0, EfiMaxMemoryType, FALSE, FALSE } // EfiMaxMemoryType }; @@ -87,7 +87,7 @@ EFI_MEMORY_TYPE_INFORMATION gMemoryTypeInformation[EfiMaxMemoryType + 1] = { { EfiPalCode, 0 }, { EfiPersistentMemory, 0 }, { EfiGcdMemoryTypeUnaccepted, 0 }, - { EfiRing3MemoryType, 0 }, + { EfiUserSpaceMemoryType, 0 }, { EfiMaxMemoryType, 0 } }; // diff --git a/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c b/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c index eaa10d62a1..9a02cc7548 100644 --- a/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c +++ b/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c @@ -342,7 +342,7 @@ GetPermissionAttributeForMemoryType ( Attributes |= EFI_MEMORY_XP; } - if (MemoryType == EfiRing3MemoryType) { + if (MemoryType == EfiUserSpaceMemoryType) { Attributes |= EFI_MEMORY_USER; } @@ -974,7 +974,7 @@ ApplyMemoryProtectionPolicy ( return EFI_SUCCESS; } - if ((gUserPageTable != 0) && (NewType == EfiRing3MemoryType)) { + if ((gUserPageTable != 0) && (NewType == EfiUserSpaceMemoryType)) { gCpu->SetUserMemoryAttributes (gCpu, gUserPageTable, Memory, Length, NewAttributes); } } else { diff --git a/MdeModulePkg/Core/Dxe/SysCall/AARCH64/CoreBootServices.S b/MdeModulePkg/Core/Dxe/SysCall/AARCH64/CoreBootServices.S index 6feacc9fde..65847f9014 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/AARCH64/CoreBootServices.S +++ b/MdeModulePkg/Core/Dxe/SysCall/AARCH64/CoreBootServices.S @@ -59,17 +59,17 @@ ASM_FUNC_ALIGN(SysCallBase, 4096) //------------------------------------------------------------------------------ // EFI_STATUS // EFIAPI -// CallRing3 ( -// IN RING3_CALL_DATA *Data, -// IN UINTN UserStackTop +// CallUserSpace ( +// IN USER_SPACE_CALL_DATA *Data, +// IN UINTN UserStackTop // ); // // (x0) Data // (x1) UserStackTop -// (x2) gRing3EntryPoint +// (x2) gUserSpaceEntryPoint // (x3) gUserPageTable //------------------------------------------------------------------------------ -ASM_FUNC(ArmCallRing3) +ASM_FUNC(ArmCallUserSpace) // Save registers. sub sp, sp, #0x100 @@ -94,7 +94,7 @@ ASM_FUNC(ArmCallRing3) mrs x6, nzcv mrs x7, pan orr x6, x6, x7 - // Prepare Ring3 SP and EntryPoint. + // Prepare UserSpace SP and EntryPoint. msr sp_el0, x1 EL1_OR_EL2(x1) 1:msr elr_el1, x2 diff --git a/MdeModulePkg/Core/Dxe/SysCall/AARCH64/InitializeAARCH64.c b/MdeModulePkg/Core/Dxe/SysCall/AARCH64/InitializeAARCH64.c index dcdc159d78..13a5e2a983 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/AARCH64/InitializeAARCH64.c +++ b/MdeModulePkg/Core/Dxe/SysCall/AARCH64/InitializeAARCH64.c @@ -21,11 +21,11 @@ STATIC UINTN mUartBaseAddress; EFI_STATUS EFIAPI -ArmCallRing3 ( - IN RING3_CALL_DATA *Data, - IN UINTN UserStackTop, - IN VOID *EntryPoint, - IN UINTN UserPageTable +ArmCallUserSpace ( + IN USER_SPACE_CALL_DATA *Data, + IN UINTN UserStackTop, + IN VOID *EntryPoint, + IN UINTN UserPageTable ); STATIC @@ -119,7 +119,7 @@ InitializePlatform ( Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, + EfiUserSpaceMemoryType, EFI_SIZE_TO_PAGES (mConfigurationTableSize), &Physical ); @@ -221,15 +221,15 @@ ForbidSupervisorAccessToUserMemory ( EFI_STATUS EFIAPI -CallRing3 ( - IN RING3_CALL_DATA *Data, - IN UINTN UserStackTop +CallUserSpace ( + IN USER_SPACE_CALL_DATA *Data, + IN UINTN UserStackTop ) { - return ArmCallRing3 ( + return ArmCallUserSpace ( Data, UserStackTop, - gRing3EntryPoint, + gUserSpaceEntryPoint, gUserPageTable ); } diff --git a/MdeModulePkg/Core/Dxe/SysCall/ARM/CoreBootServices.S b/MdeModulePkg/Core/Dxe/SysCall/ARM/CoreBootServices.S index a1ffb25271..9191e3b0ad 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/ARM/CoreBootServices.S +++ b/MdeModulePkg/Core/Dxe/SysCall/ARM/CoreBootServices.S @@ -55,17 +55,17 @@ ASM_FUNC_ALIGN(SysCallBase, 4096) //------------------------------------------------------------------------------ // EFI_STATUS // EFIAPI -// CallRing3 ( -// IN RING3_CALL_DATA *Data, -// IN UINTN UserStackTop +// CallUserSpace ( +// IN USER_SPACE_CALL_DATA *Data, +// IN UINTN UserStackTop // ); // // (r0) Data // (r1) UserStackTop -// (r2) gRing3EntryPoint +// (r2) gUserSpaceEntryPoint // (r3) gUserPageTable //------------------------------------------------------------------------------ -ASM_FUNC(ArmCallRing3) +ASM_FUNC(ArmCallUserSpace) // Save registers. push {R4-R12, LR} // Save old SP_usr and LR_usr on Core Stack. diff --git a/MdeModulePkg/Core/Dxe/SysCall/ARM/InitializeARM.c b/MdeModulePkg/Core/Dxe/SysCall/ARM/InitializeARM.c index 1b762628c6..e722693962 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/ARM/InitializeARM.c +++ b/MdeModulePkg/Core/Dxe/SysCall/ARM/InitializeARM.c @@ -20,11 +20,11 @@ STATIC UINTN mUartBaseAddress; EFI_STATUS EFIAPI -ArmCallRing3 ( - IN RING3_CALL_DATA *Data, - IN UINTN UserStackTop, - IN VOID *EntryPoint, - IN UINTN UserPageTable +ArmCallUserSpace ( + IN USER_SPACE_CALL_DATA *Data, + IN UINTN UserStackTop, + IN VOID *EntryPoint, + IN UINTN UserPageTable ); STATIC @@ -147,7 +147,7 @@ InitializePlatform ( Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, + EfiUserSpaceMemoryType, EFI_SIZE_TO_PAGES (mConfigurationTableSize), &Physical ); @@ -238,15 +238,15 @@ ForbidSupervisorAccessToUserMemory ( EFI_STATUS EFIAPI -CallRing3 ( - IN RING3_CALL_DATA *Data, - IN UINTN UserStackTop +CallUserSpace ( + IN USER_SPACE_CALL_DATA *Data, + IN UINTN UserStackTop ) { - return ArmCallRing3 ( + return ArmCallUserSpace ( Data, UserStackTop, - gRing3EntryPoint, + gUserSpaceEntryPoint, gUserPageTable ); } diff --git a/MdeModulePkg/Core/Dxe/SysCall/BootServices.c b/MdeModulePkg/Core/Dxe/SysCall/BootServices.c index 7de1460e06..6865771d5d 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/BootServices.c +++ b/MdeModulePkg/Core/Dxe/SysCall/BootServices.c @@ -12,11 +12,11 @@ LIST_ENTRY mProtocolsHead = INITIALIZE_LIST_HEAD_VARIABLE (mProtocolsHead); typedef struct { VOID *Core; - VOID *Ring3; + VOID *UserSpace; LIST_ENTRY Link; } INTERFACE; -UINTN mRing3InterfacePointer = 0; +UINTN mUserSpaceInterfacePointer = 0; CHAR8 *SysCallNames[] = { // @@ -92,76 +92,76 @@ STATIC EFI_STATUS EFIAPI FindGuid ( - IN EFI_GUID *Ring3, + IN EFI_GUID *UserSpace, OUT EFI_GUID **Core, OUT UINT32 *CoreSize ) { - ASSERT (Ring3 != NULL); + ASSERT (UserSpace != NULL); ASSERT (Core != NULL); ASSERT (CoreSize != NULL); - if (CompareGuid (Ring3, &gEfiDevicePathUtilitiesProtocolGuid)) { + if (CompareGuid (UserSpace, &gEfiDevicePathUtilitiesProtocolGuid)) { *Core = &gEfiDevicePathUtilitiesProtocolGuid; *CoreSize = sizeof (EFI_DEVICE_PATH_UTILITIES_PROTOCOL); - } else if (CompareGuid (Ring3, &gEfiLoadedImageProtocolGuid)) { + } else if (CompareGuid (UserSpace, &gEfiLoadedImageProtocolGuid)) { *Core = &gEfiLoadedImageProtocolGuid; *CoreSize = sizeof (EFI_LOADED_IMAGE_PROTOCOL); - } else if (CompareGuid (Ring3, &gEfiBlockIoProtocolGuid)) { + } else if (CompareGuid (UserSpace, &gEfiBlockIoProtocolGuid)) { *Core = &gEfiBlockIoProtocolGuid; *CoreSize = sizeof (EFI_BLOCK_IO_PROTOCOL); - } else if (CompareGuid (Ring3, &gEfiDiskIoProtocolGuid)) { + } else if (CompareGuid (UserSpace, &gEfiDiskIoProtocolGuid)) { *Core = &gEfiDiskIoProtocolGuid; *CoreSize = sizeof (EFI_DISK_IO_PROTOCOL); - } else if (CompareGuid (Ring3, &gEfiDriverBindingProtocolGuid)) { + } else if (CompareGuid (UserSpace, &gEfiDriverBindingProtocolGuid)) { *Core = &gEfiDriverBindingProtocolGuid; *CoreSize = sizeof (EFI_DRIVER_BINDING_PROTOCOL); - } else if (CompareGuid (Ring3, &gEfiComponentNameProtocolGuid)) { + } else if (CompareGuid (UserSpace, &gEfiComponentNameProtocolGuid)) { *Core = &gEfiComponentNameProtocolGuid; *CoreSize = sizeof (EFI_COMPONENT_NAME_PROTOCOL); - } else if (CompareGuid (Ring3, &gEfiComponentName2ProtocolGuid)) { + } else if (CompareGuid (UserSpace, &gEfiComponentName2ProtocolGuid)) { *Core = &gEfiComponentName2ProtocolGuid; *CoreSize = sizeof (EFI_COMPONENT_NAME2_PROTOCOL); - } else if (CompareGuid (Ring3, &gEfiDevicePathProtocolGuid)) { + } else if (CompareGuid (UserSpace, &gEfiDevicePathProtocolGuid)) { *Core = &gEfiDevicePathProtocolGuid; *CoreSize = sizeof (EFI_DEVICE_PATH_PROTOCOL); - } else if (CompareGuid (Ring3, &gEfiSimpleFileSystemProtocolGuid)) { + } else if (CompareGuid (UserSpace, &gEfiSimpleFileSystemProtocolGuid)) { *Core = &gEfiSimpleFileSystemProtocolGuid; *CoreSize = sizeof (EFI_SIMPLE_FILE_SYSTEM_PROTOCOL); - } else if (CompareGuid (Ring3, &gEfiUnicodeCollationProtocolGuid)) { + } else if (CompareGuid (UserSpace, &gEfiUnicodeCollationProtocolGuid)) { *Core = &gEfiUnicodeCollationProtocolGuid; *CoreSize = sizeof (EFI_UNICODE_COLLATION_PROTOCOL); - } else if (CompareGuid (Ring3, &gEfiGlobalVariableGuid)) { + } else if (CompareGuid (UserSpace, &gEfiGlobalVariableGuid)) { *Core = &gEfiGlobalVariableGuid; - } else if (CompareGuid (Ring3, &gEfiUnicodeCollation2ProtocolGuid)) { + } else if (CompareGuid (UserSpace, &gEfiUnicodeCollation2ProtocolGuid)) { *Core = &gEfiUnicodeCollation2ProtocolGuid; *CoreSize = sizeof (EFI_UNICODE_COLLATION_PROTOCOL); } else { - DEBUG ((DEBUG_ERROR, "Ring0: Unknown protocol - %g.\n", Ring3)); + DEBUG ((DEBUG_ERROR, "Core: Unknown protocol - %g.\n", UserSpace)); return EFI_NOT_FOUND; } @@ -172,7 +172,7 @@ STATIC VOID * EFIAPI FindInterface ( - IN BOOLEAN FindRing3, + IN BOOLEAN FindUserSpace, IN VOID *Interface ) { @@ -182,12 +182,12 @@ FindInterface ( for (Link = mProtocolsHead.ForwardLink; Link != &mProtocolsHead; Link = Link->ForwardLink) { Protocol = BASE_CR (Link, INTERFACE, Link); - if (FindRing3) { + if (FindUserSpace) { if (Protocol->Core == Interface) { - return Protocol->Ring3; + return Protocol->UserSpace; } } else { - if (Protocol->Ring3 == Interface) { + if (Protocol->UserSpace == Interface) { return Protocol->Core; } } @@ -199,15 +199,15 @@ FindInterface ( STATIC VOID * EFIAPI -PrepareRing3Interface ( +PrepareUserSpaceInterface ( IN EFI_GUID *Guid, IN VOID *CoreInterface, IN UINT32 CoreSize ) { EFI_STATUS Status; - UINTN Ring3Limit; - VOID *Ring3Interface; + UINTN UserSpaceLimit; + VOID *UserSpaceInterface; EFI_BLOCK_IO_PROTOCOL *BlockIo; EFI_UNICODE_COLLATION_PROTOCOL *Unicode; INTERFACE *Protocol; @@ -215,50 +215,50 @@ PrepareRing3Interface ( ASSERT (Guid != NULL); ASSERT (CoreInterface != NULL); - if (mRing3InterfacePointer == 0) { - mRing3InterfacePointer = (UINTN)gRing3Interfaces; + if (mUserSpaceInterfacePointer == 0) { + mUserSpaceInterfacePointer = (UINTN)gUserSpaceInterfaces; } - Ring3Interface = FindInterface (TRUE, CoreInterface); + UserSpaceInterface = FindInterface (TRUE, CoreInterface); - if (Ring3Interface != NULL) { - return Ring3Interface; + if (UserSpaceInterface != NULL) { + return UserSpaceInterface; } - Ring3Limit = (UINTN)gRing3Interfaces + EFI_PAGES_TO_SIZE (RING3_INTERFACES_PAGES); + UserSpaceLimit = (UINTN)gUserSpaceInterfaces + EFI_PAGES_TO_SIZE (USER_SPACE_INTERFACES_PAGES); - ASSERT ((mRing3InterfacePointer + CoreSize) <= Ring3Limit); + ASSERT ((mUserSpaceInterfacePointer + CoreSize) <= UserSpaceLimit); - Ring3Interface = (VOID *)mRing3InterfacePointer; + UserSpaceInterface = (VOID *)mUserSpaceInterfacePointer; - CopyMem ((VOID *)mRing3InterfacePointer, CoreInterface, CoreSize); - mRing3InterfacePointer += CoreSize; + CopyMem ((VOID *)mUserSpaceInterfacePointer, CoreInterface, CoreSize); + mUserSpaceInterfacePointer += CoreSize; Protocol = AllocatePool (sizeof (INTERFACE)); - Protocol->Core = CoreInterface; - Protocol->Ring3 = Ring3Interface; + Protocol->Core = CoreInterface; + Protocol->UserSpace = UserSpaceInterface; InsertTailList (&mProtocolsHead, &Protocol->Link); if (CompareGuid (Guid, &gEfiBlockIoProtocolGuid)) { - ASSERT ((mRing3InterfacePointer + sizeof (EFI_BLOCK_IO_MEDIA)) <= Ring3Limit); + ASSERT ((mUserSpaceInterfacePointer + sizeof (EFI_BLOCK_IO_MEDIA)) <= UserSpaceLimit); - BlockIo = (EFI_BLOCK_IO_PROTOCOL *)Ring3Interface; + BlockIo = (EFI_BLOCK_IO_PROTOCOL *)UserSpaceInterface; - CopyMem ((VOID *)mRing3InterfacePointer, (VOID *)BlockIo->Media, sizeof (EFI_BLOCK_IO_MEDIA)); + CopyMem ((VOID *)mUserSpaceInterfacePointer, (VOID *)BlockIo->Media, sizeof (EFI_BLOCK_IO_MEDIA)); - BlockIo->Media = (EFI_BLOCK_IO_MEDIA *)mRing3InterfacePointer; + BlockIo->Media = (EFI_BLOCK_IO_MEDIA *)mUserSpaceInterfacePointer; - mRing3InterfacePointer += sizeof (EFI_BLOCK_IO_MEDIA); + mUserSpaceInterfacePointer += sizeof (EFI_BLOCK_IO_MEDIA); } else if (CompareGuid (Guid, &gEfiUnicodeCollationProtocolGuid)) { - Unicode = (EFI_UNICODE_COLLATION_PROTOCOL *)Ring3Interface; + Unicode = (EFI_UNICODE_COLLATION_PROTOCOL *)UserSpaceInterface; - ASSERT ((mRing3InterfacePointer + AsciiStrSize (Unicode->SupportedLanguages)) <= Ring3Limit); + ASSERT ((mUserSpaceInterfacePointer + AsciiStrSize (Unicode->SupportedLanguages)) <= UserSpaceLimit); Status = AsciiStrCpyS ( - (CHAR8 *)mRing3InterfacePointer, + (CHAR8 *)mUserSpaceInterfacePointer, AsciiStrSize (Unicode->SupportedLanguages), Unicode->SupportedLanguages ); @@ -267,12 +267,12 @@ PrepareRing3Interface ( return NULL; } - Unicode->SupportedLanguages = (CHAR8 *)mRing3InterfacePointer; + Unicode->SupportedLanguages = (CHAR8 *)mUserSpaceInterfacePointer; - mRing3InterfacePointer += AsciiStrSize (Unicode->SupportedLanguages); + mUserSpaceInterfacePointer += AsciiStrSize (Unicode->SupportedLanguages); } - return Ring3Interface; + return UserSpaceInterface; } STATIC @@ -347,7 +347,7 @@ CallBootService ( VOID **CoreArgList; EFI_HANDLE CoreHandle; UINT32 PagesNumber; - EFI_PHYSICAL_ADDRESS Ring3Pages; + EFI_PHYSICAL_ADDRESS UserSpacePages; USER_SPACE_DRIVER *NewDriver; UINTN *Arguments; EFI_PHYSICAL_ADDRESS PhysAddr; @@ -415,7 +415,7 @@ CallBootService ( AllowSupervisorAccessToUserMemory (); if (Interface != NULL) { - Interface = PrepareRing3Interface (CoreProtocol, Interface, MemoryCoreSize); + Interface = PrepareUserSpaceInterface (CoreProtocol, Interface, MemoryCoreSize); ASSERT (Interface != NULL); *(VOID **)Arguments[3] = Interface; @@ -462,7 +462,7 @@ CallBootService ( if ((VOID **)Arguments[3] != NULL) { AllowSupervisorAccessToUserMemory (); if (Interface != NULL) { - Interface = PrepareRing3Interface (CoreProtocol, Interface, MemoryCoreSize); + Interface = PrepareUserSpaceInterface (CoreProtocol, Interface, MemoryCoreSize); } *(VOID **)Arguments[3] = Interface; @@ -648,7 +648,7 @@ CallBootService ( AllowSupervisorAccessToUserMemory (); if (Interface != NULL) { - Interface = PrepareRing3Interface (CoreProtocol, Interface, MemoryCoreSize); + Interface = PrepareUserSpaceInterface (CoreProtocol, Interface, MemoryCoreSize); ASSERT (Interface != NULL); *(VOID **)Arguments[3] = Interface; @@ -761,20 +761,20 @@ CallBootService ( Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, + EfiUserSpaceMemoryType, PagesNumber, - &Ring3Pages + &UserSpacePages ); if (EFI_ERROR (Status)) { break; } AllowSupervisorAccessToUserMemory (); - CopyMem ((VOID *)(UINTN)Ring3Pages, (VOID *)Argument5, Argument4 * sizeof (EFI_HANDLE *)); + CopyMem ((VOID *)(UINTN)UserSpacePages, (VOID *)Argument5, Argument4 * sizeof (EFI_HANDLE *)); FreePool ((VOID *)Argument5); - *(EFI_HANDLE **)Arguments[5] = (EFI_HANDLE *)(UINTN)Ring3Pages; + *(EFI_HANDLE **)Arguments[5] = (EFI_HANDLE *)(UINTN)UserSpacePages; ForbidSupervisorAccessToUserMemory (); } @@ -1465,7 +1465,7 @@ CallBootService ( break; default: - DEBUG ((DEBUG_ERROR, "Ring0: Unknown syscall type.\n")); + DEBUG ((DEBUG_ERROR, "Core: Unknown syscall type.\n")); Status = EFI_UNSUPPORTED; break; } diff --git a/MdeModulePkg/Core/Dxe/SysCall/IA32/CoreBootServices.nasm b/MdeModulePkg/Core/Dxe/SysCall/IA32/CoreBootServices.nasm index dfb3f09185..13ffaa9b29 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/IA32/CoreBootServices.nasm +++ b/MdeModulePkg/Core/Dxe/SysCall/IA32/CoreBootServices.nasm @@ -8,7 +8,7 @@ #include extern ASM_PFX(CallBootService) -extern ASM_PFX(gRing3EntryPoint) +extern ASM_PFX(gUserSpaceEntryPoint) extern ASM_PFX(AsmReadMsr64) @@ -81,7 +81,7 @@ copy: ret -%macro SetRing3DataSegmentSelectors 0 +%macro SetUserSpaceDataSegmentSelectors 0 push dword MSR_IA32_SYSENTER_CS call ASM_PFX(AsmReadMsr64) ; eax = RING0_CODE32_SEL @@ -146,7 +146,7 @@ ASM_PFX(CoreBootServices): push eax cli - SetRing3DataSegmentSelectors + SetUserSpaceDataSegmentSelectors mov eax, [ASM_PFX(gUserPageTable)] mov cr3, eax @@ -167,15 +167,15 @@ ASM_PFX(CoreBootServices): ;------------------------------------------------------------------------------ ; EFI_STATUS ; EFIAPI -; CallRing3 ( -; IN RING3_CALL_DATA *Data, -; IN UINTN UserStackTop +; CallUserSpace ( +; IN USER_SPACE_CALL_DATA *Data, +; IN UINTN UserStackTop ; ); ; ; (On User Stack) Data, UserStackTop ;------------------------------------------------------------------------------ -global ASM_PFX(CallRing3) -ASM_PFX(CallRing3): +global ASM_PFX(CallUserSpace) +ASM_PFX(CallUserSpace): cli ; Save nonvolatile registers EBX, EBP, EDI, ESI, ESP. push ebx @@ -194,11 +194,11 @@ ASM_PFX(CallRing3): mov ecx, MSR_IA32_SYSENTER_ESP wrmsr - SetRing3DataSegmentSelectors + SetUserSpaceDataSegmentSelectors ; Prepare SYSEXIT arguments. mov ecx, [esp + 4 * 7] ; UserStackTop - mov edx, [ASM_PFX(gRing3EntryPoint)] + mov edx, [ASM_PFX(gUserSpaceEntryPoint)] mov eax, [esp + 4 * 6] ; Data ; Switch to User Stack. diff --git a/MdeModulePkg/Core/Dxe/SysCall/IA32/InitializeIA32.c b/MdeModulePkg/Core/Dxe/SysCall/IA32/InitializeIA32.c index dd9b34e284..c8cad76327 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/IA32/InitializeIA32.c +++ b/MdeModulePkg/Core/Dxe/SysCall/IA32/InitializeIA32.c @@ -1,6 +1,6 @@ /** @file - Copyright (c) 2024, Mikhail Krichanov. All rights reserved. + Copyright (c) 2024 - 2025, Mikhail Krichanov. All rights reserved. SPDX-License-Identifier: BSD-3-Clause **/ @@ -150,7 +150,7 @@ InitializePlatform ( // // Initialize MSR_IA32_SYSENTER_CS, MSR_IA32_SYSENTER_EIP for SYSENTER and SYSEXIT. - // MSR_IA32_SYSENTER_ESP is set in CallRing3(). + // MSR_IA32_SYSENTER_ESP is set in CallUserSpace(). // Msr = RING0_CODE32_SEL; AsmWriteMsr64 (MSR_IA32_SYSENTER_CS, Msr); diff --git a/MdeModulePkg/Core/Dxe/SysCall/Initialization.c b/MdeModulePkg/Core/Dxe/SysCall/Initialization.c index b3a731ce63..a4ed2cfed5 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/Initialization.c +++ b/MdeModulePkg/Core/Dxe/SysCall/Initialization.c @@ -7,15 +7,15 @@ #include "DxeMain.h" -VOID *gRing3EntryPoint; -RING3_DATA *gRing3Data; -VOID *gRing3Interfaces; +VOID *gUserSpaceEntryPoint; +USER_SPACE_DATA *gUserSpaceData; +VOID *gUserSpaceInterfaces; EXCEPTION_ADDRESSES *mExceptionAddresses; extern UINTN SysCallBase; extern UINTN SysCallEnd; -STATIC UEFI_IMAGE_RECORD *mDxeRing3; +STATIC UEFI_IMAGE_RECORD *mDxeUserSpace; STATIC EFI_PHYSICAL_ADDRESS mCoreStackBase; STATIC UINT64 mCoreStackSize; @@ -40,7 +40,7 @@ MapPlatform ( EFI_STATUS EFIAPI -InitializeRing3 ( +InitializeUserSpace ( IN EFI_HANDLE ImageHandle, IN LOADED_IMAGE_PRIVATE_DATA *Image ) @@ -51,75 +51,75 @@ InitializeRing3 ( EFI_HOB_MEMORY_ALLOCATION *MemoryHob; // - // Set Ring3 EntryPoint and BootServices. + // Set UserSpace EntryPoint and BootServices. // Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, - EFI_SIZE_TO_PAGES (sizeof (RING3_DATA)), + EfiUserSpaceMemoryType, + EFI_SIZE_TO_PAGES (sizeof (USER_SPACE_DATA)), &Physical ); if (EFI_ERROR (Status)) { return Status; } - gRing3Data = (RING3_DATA *)(UINTN)Physical; + gUserSpaceData = (USER_SPACE_DATA *)(UINTN)Physical; - CopyMem ((VOID *)gRing3Data, (VOID *)Image->Info.SystemTable, sizeof (EFI_SYSTEM_TABLE)); + CopyMem ((VOID *)gUserSpaceData, (VOID *)Image->Info.SystemTable, sizeof (EFI_SYSTEM_TABLE)); SetUefiImageMemoryAttributes ( - (UINTN)gRing3Data, - ALIGN_VALUE (sizeof (RING3_DATA), EFI_PAGE_SIZE), + (UINTN)gUserSpaceData, + ALIGN_VALUE (sizeof (USER_SPACE_DATA), EFI_PAGE_SIZE), EFI_MEMORY_XP | EFI_MEMORY_USER ); - Status = InitializePlatform (&gRing3Data->SystemTable); + Status = InitializePlatform (&gUserSpaceData->SystemTable); if (EFI_ERROR (Status)) { CoreFreePages ( - (EFI_PHYSICAL_ADDRESS)(UINTN)gRing3Data, - EFI_SIZE_TO_PAGES (sizeof (RING3_DATA)) + (EFI_PHYSICAL_ADDRESS)(UINTN)gUserSpaceData, + EFI_SIZE_TO_PAGES (sizeof (USER_SPACE_DATA)) ); return Status; } // - // Initialize DxeRing3 with Supervisor privileges. + // Initialize DxeUserSpace with Supervisor privileges. // - mDxeRing3 = GetUefiImageRecord (Image); - ASSERT (mDxeRing3 != NULL); + mDxeUserSpace = GetUefiImageRecord (Image); + ASSERT (mDxeUserSpace != NULL); - SetUefiImageProtectionAttributes (mDxeRing3, FALSE); + SetUefiImageProtectionAttributes (mDxeUserSpace, FALSE); AllowSupervisorAccessToUserMemory (); - Status = Image->EntryPoint (ImageHandle, (EFI_SYSTEM_TABLE *)gRing3Data); + Status = Image->EntryPoint (ImageHandle, (EFI_SYSTEM_TABLE *)gUserSpaceData); - gRing3EntryPoint = gRing3Data->EntryPoint; + gUserSpaceEntryPoint = gUserSpaceData->EntryPoint; - gRing3Data->SystemTable.BootServices = gRing3Data->BootServices; - gRing3Data->SystemTable.RuntimeServices = gRing3Data->RuntimeServices; + gUserSpaceData->SystemTable.BootServices = gUserSpaceData->BootServices; + gUserSpaceData->SystemTable.RuntimeServices = gUserSpaceData->RuntimeServices; ForbidSupervisorAccessToUserMemory (); - SetUefiImageProtectionAttributes (mDxeRing3, TRUE); + SetUefiImageProtectionAttributes (mDxeUserSpace, TRUE); Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, - RING3_INTERFACES_PAGES, + EfiUserSpaceMemoryType, + USER_SPACE_INTERFACES_PAGES, &Physical ); if (EFI_ERROR (Status)) { CoreFreePages ( - (EFI_PHYSICAL_ADDRESS)(UINTN)gRing3Data, - EFI_SIZE_TO_PAGES (sizeof (RING3_DATA)) + (EFI_PHYSICAL_ADDRESS)(UINTN)gUserSpaceData, + EFI_SIZE_TO_PAGES (sizeof (USER_SPACE_DATA)) ); return Status; } - gRing3Interfaces = (VOID *)(UINTN)Physical; + gUserSpaceInterfaces = (VOID *)(UINTN)Physical; SetUefiImageMemoryAttributes ( - (UINTN)gRing3Interfaces, - EFI_PAGES_TO_SIZE (RING3_INTERFACES_PAGES), + (UINTN)gUserSpaceInterfaces, + EFI_PAGES_TO_SIZE (USER_SPACE_INTERFACES_PAGES), EFI_MEMORY_XP | EFI_MEMORY_USER ); @@ -161,27 +161,27 @@ InitializeUserPageTable ( } // - // Map gRing3Data, gRing3Interfaces, DxeRing3 + // Map gUserSpaceData, gUserSpaceInterfaces, DxeUserSpace // gCpu->SetUserMemoryAttributes ( gCpu, UserPageTable, - (UINTN)gRing3Data, - ALIGN_VALUE (sizeof (RING3_DATA), EFI_PAGE_SIZE), + (UINTN)gUserSpaceData, + ALIGN_VALUE (sizeof (USER_SPACE_DATA), EFI_PAGE_SIZE), EFI_MEMORY_XP | EFI_MEMORY_USER ); gCpu->SetUserMemoryAttributes ( gCpu, UserPageTable, - (UINTN)gRing3Interfaces, - EFI_PAGES_TO_SIZE (RING3_INTERFACES_PAGES), + (UINTN)gUserSpaceInterfaces, + EFI_PAGES_TO_SIZE (USER_SPACE_INTERFACES_PAGES), EFI_MEMORY_XP | EFI_MEMORY_USER ); - SectionAddress = mDxeRing3->StartAddress; - for (Index = 0; Index < mDxeRing3->NumSegments; Index++) { - ImageRecordSegment = &mDxeRing3->Segments[Index]; + SectionAddress = mDxeUserSpace->StartAddress; + for (Index = 0; Index < mDxeUserSpace->NumSegments; Index++) { + ImageRecordSegment = &mDxeUserSpace->Segments[Index]; gCpu->SetUserMemoryAttributes ( gCpu, diff --git a/MdeModulePkg/Core/Dxe/SysCall/SupportedProtocols.c b/MdeModulePkg/Core/Dxe/SysCall/SupportedProtocols.c index 448806aad4..92b6dfafcf 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/SupportedProtocols.c +++ b/MdeModulePkg/Core/Dxe/SysCall/SupportedProtocols.c @@ -14,26 +14,26 @@ LIST_ENTRY gUserSpaceDriversHead = INITIALIZE_LIST_HEAD_VARIABLE (gUserSpaceDriv EFI_STATUS EFIAPI -CallRing3 ( - IN RING3_CALL_DATA *Data, - IN UINTN UserStackTop +CallUserSpace ( + IN USER_SPACE_CALL_DATA *Data, + IN UINTN UserStackTop ); EFI_STATUS EFIAPI -GoToRing3 ( +GoToUserSpace ( IN UINT8 Number, IN VOID *EntryPoint, IN USER_SPACE_DRIVER *UserDriver, ... ) { - EFI_STATUS Status; - RING3_CALL_DATA *Input; - VA_LIST Marker; - UINTN Index; - UINTN UserStackTop; - UINTN UserStackBase; + EFI_STATUS Status; + USER_SPACE_CALL_DATA *Input; + VA_LIST Marker; + UINTN Index; + UINTN UserStackTop; + UINTN UserStackBase; if (UserDriver->NumberOfCalls > MAX_CALL) { return EFI_OUT_OF_RESOURCES; @@ -44,9 +44,9 @@ GoToRing3 ( return EFI_OUT_OF_RESOURCES; } - UserStackTop = UserStackBase + STACK_SIZE - (sizeof (RING3_CALL_DATA) + Number * sizeof (UINTN)); + UserStackTop = UserStackBase + STACK_SIZE - (sizeof (USER_SPACE_CALL_DATA) + Number * sizeof (UINTN)); - Input = (RING3_CALL_DATA *)UserStackTop; + Input = (USER_SPACE_CALL_DATA *)UserStackTop; Input->NumberOfArguments = Number; Input->EntryPoint = EntryPoint; @@ -73,7 +73,7 @@ GoToRing3 ( // UserStackTop = ALIGN_VALUE (UserStackTop - 8*4 - CPU_STACK_ALIGNMENT, CPU_STACK_ALIGNMENT); - Status = CallRing3 ( + Status = CallUserSpace ( Input, UserStackTop ); @@ -133,7 +133,7 @@ CoreDriverBindingSupported ( EntryPoint = (VOID *)This->Supported; ForbidSupervisorAccessToUserMemory (); - Status = GoToRing3 ( + Status = GoToUserSpace ( 3, EntryPoint, UserDriver, @@ -169,7 +169,7 @@ CoreDriverBindingStart ( EntryPoint = (VOID *)This->Start; ForbidSupervisorAccessToUserMemory (); - Status = GoToRing3 ( + Status = GoToUserSpace ( 3, EntryPoint, UserDriver, @@ -206,7 +206,7 @@ CoreDriverBindingStop ( EntryPoint = (VOID *)This->Stop; ForbidSupervisorAccessToUserMemory (); - Status = GoToRing3 ( + Status = GoToUserSpace ( 4, EntryPoint, UserDriver, @@ -242,7 +242,7 @@ CoreFileClose ( EntryPoint = (VOID *)This->Close; ForbidSupervisorAccessToUserMemory (); - Status = GoToRing3 ( + Status = GoToUserSpace ( 1, EntryPoint, UserDriver, @@ -278,9 +278,9 @@ CoreFileRead ( ) { EFI_STATUS Status; - UINTN *Ring3BufferSize; - VOID *Ring3Buffer; - EFI_PHYSICAL_ADDRESS Ring3Pages; + UINTN *UserSpaceBufferSize; + VOID *UserSpaceBuffer; + EFI_PHYSICAL_ADDRESS UserSpacePages; UINT32 PagesNumber; USER_SPACE_DRIVER *UserDriver; VOID *EntryPoint; @@ -290,57 +290,57 @@ CoreFileRead ( return EFI_INVALID_PARAMETER; } // - // gUserPageTable must be set before alloctation of EfiRing3MemoryType pages. + // gUserPageTable must be set before alloctation of EfiUserSpaceMemoryType pages. // UserDriver = FindUserSpaceDriver (This, &OldPageTable); ASSERT (UserDriver != NULL); This = UserDriver->UserSpaceDriver; - Ring3Buffer = NULL; - Ring3Pages = 0; - PagesNumber = (UINT32)EFI_SIZE_TO_PAGES (sizeof (UINTN *) + *BufferSize); + UserSpaceBuffer = NULL; + UserSpacePages = 0; + PagesNumber = (UINT32)EFI_SIZE_TO_PAGES (sizeof (UINTN *) + *BufferSize); Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, + EfiUserSpaceMemoryType, PagesNumber, - &Ring3Pages + &UserSpacePages ); if (EFI_ERROR (Status)) { gUserPageTable = OldPageTable; return Status; } - Ring3BufferSize = (UINTN *)(UINTN)Ring3Pages; + UserSpaceBufferSize = (UINTN *)(UINTN)UserSpacePages; AllowSupervisorAccessToUserMemory (); - *Ring3BufferSize = *BufferSize; - EntryPoint = (VOID *)This->Read; + *UserSpaceBufferSize = *BufferSize; + EntryPoint = (VOID *)This->Read; ForbidSupervisorAccessToUserMemory (); if (Buffer != NULL) { - Ring3Buffer = (VOID *)((UINTN *)(UINTN)Ring3Pages + 1); + UserSpaceBuffer = (VOID *)((UINTN *)(UINTN)UserSpacePages + 1); } - Status = GoToRing3 ( + Status = GoToUserSpace ( 3, EntryPoint, UserDriver, This, - Ring3BufferSize, - Ring3Buffer + UserSpaceBufferSize, + UserSpaceBuffer ); AllowSupervisorAccessToUserMemory (); - if ((Ring3Buffer != NULL) && (Buffer != NULL) && (*BufferSize >= *Ring3BufferSize)) { - CopyMem (Buffer, Ring3Buffer, *Ring3BufferSize); + if ((UserSpaceBuffer != NULL) && (Buffer != NULL) && (*BufferSize >= *UserSpaceBufferSize)) { + CopyMem (Buffer, UserSpaceBuffer, *UserSpaceBufferSize); } - *BufferSize = *Ring3BufferSize; + *BufferSize = *UserSpaceBufferSize; ForbidSupervisorAccessToUserMemory (); - CoreFreePages (Ring3Pages, PagesNumber); + CoreFreePages (UserSpacePages, PagesNumber); gUserPageTable = OldPageTable; @@ -382,7 +382,7 @@ CoreFileSetPosition ( ForbidSupervisorAccessToUserMemory (); #if defined (MDE_CPU_X64) || defined (MDE_CPU_AARCH64) - Status = GoToRing3 ( + Status = GoToUserSpace ( 2, EntryPoint, UserDriver, @@ -393,7 +393,7 @@ CoreFileSetPosition ( // // UINT64 Position is passed as 2 double words on stack. // - Status = GoToRing3 ( + Status = GoToUserSpace ( 3, EntryPoint, UserDriver, @@ -405,7 +405,7 @@ CoreFileSetPosition ( // UINT64 Position is passed as 2 words in 2 registers and is aligned on 8 bytes. // R0 == This, R1 == NULL, R2 == Position_Low, R3 == Position_High. // - Status = GoToRing3 ( + Status = GoToUserSpace ( 4, EntryPoint, UserDriver, @@ -430,7 +430,7 @@ CoreFileGetPosition ( ) { EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS Ring3Position; + EFI_PHYSICAL_ADDRESS UserSpacePosition; USER_SPACE_DRIVER *UserDriver; VOID *EntryPoint; UINTN OldPageTable; @@ -446,9 +446,9 @@ CoreFileGetPosition ( Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, + EfiUserSpaceMemoryType, 1, - &Ring3Position + &UserSpacePosition ); if (EFI_ERROR (Status)) { gUserPageTable = OldPageTable; @@ -456,23 +456,23 @@ CoreFileGetPosition ( } AllowSupervisorAccessToUserMemory (); - *(UINT64 *)(UINTN)Ring3Position = *Position; - EntryPoint = (VOID *)This->GetPosition; + *(UINT64 *)(UINTN)UserSpacePosition = *Position; + EntryPoint = (VOID *)This->GetPosition; ForbidSupervisorAccessToUserMemory (); - Status = GoToRing3 ( + Status = GoToUserSpace ( 2, EntryPoint, UserDriver, This, - Ring3Position + UserSpacePosition ); AllowSupervisorAccessToUserMemory (); - *Position = *(UINT64 *)(UINTN)Ring3Position; + *Position = *(UINT64 *)(UINTN)UserSpacePosition; ForbidSupervisorAccessToUserMemory (); - CoreFreePages (Ring3Position, 1); + CoreFreePages (UserSpacePosition, 1); gUserPageTable = OldPageTable; @@ -490,10 +490,10 @@ CoreFileGetInfo ( ) { EFI_STATUS Status; - EFI_GUID *Ring3InformationType; - UINTN *Ring3BufferSize; - VOID *Ring3Buffer; - EFI_PHYSICAL_ADDRESS Ring3Pages; + EFI_GUID *UserSpaceInformationType; + UINTN *UserSpaceBufferSize; + VOID *UserSpaceBuffer; + EFI_PHYSICAL_ADDRESS UserSpacePages; UINT32 PagesNumber; USER_SPACE_DRIVER *UserDriver; VOID *EntryPoint; @@ -508,61 +508,61 @@ CoreFileGetInfo ( This = UserDriver->UserSpaceDriver; - Ring3Buffer = NULL; - Ring3InformationType = NULL; - Ring3Pages = 0; + UserSpaceBuffer = NULL; + UserSpaceInformationType = NULL; + UserSpacePages = 0; PagesNumber = (UINT32)EFI_SIZE_TO_PAGES (sizeof (UINTN *) + *BufferSize + sizeof (EFI_GUID)); Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, + EfiUserSpaceMemoryType, PagesNumber, - &Ring3Pages + &UserSpacePages ); if (EFI_ERROR (Status)) { gUserPageTable = OldPageTable; return Status; } - Ring3BufferSize = (UINTN *)(UINTN)Ring3Pages; + UserSpaceBufferSize = (UINTN *)(UINTN)UserSpacePages; AllowSupervisorAccessToUserMemory (); - *Ring3BufferSize = *BufferSize; - EntryPoint = (VOID *)This->GetInfo; + *UserSpaceBufferSize = *BufferSize; + EntryPoint = (VOID *)This->GetInfo; ForbidSupervisorAccessToUserMemory (); if (Buffer != NULL) { - Ring3Buffer = (VOID *)((UINTN *)(UINTN)Ring3Pages + 1); + UserSpaceBuffer = (VOID *)((UINTN *)(UINTN)UserSpacePages + 1); } if (InformationType != NULL) { - Ring3InformationType = (EFI_GUID *)((UINTN)Ring3Pages + sizeof (UINTN *) + *BufferSize); + UserSpaceInformationType = (EFI_GUID *)((UINTN)UserSpacePages + sizeof (UINTN *) + *BufferSize); AllowSupervisorAccessToUserMemory (); - CopyGuid (Ring3InformationType, InformationType); + CopyGuid (UserSpaceInformationType, InformationType); ForbidSupervisorAccessToUserMemory (); } - Status = GoToRing3 ( + Status = GoToUserSpace ( 4, EntryPoint, UserDriver, This, - Ring3InformationType, - Ring3BufferSize, - Ring3Buffer + UserSpaceInformationType, + UserSpaceBufferSize, + UserSpaceBuffer ); AllowSupervisorAccessToUserMemory (); - if ((Ring3Buffer != NULL) && (Buffer != NULL) && (*BufferSize >= *Ring3BufferSize)) { - CopyMem (Buffer, Ring3Buffer, *Ring3BufferSize); + if ((UserSpaceBuffer != NULL) && (Buffer != NULL) && (*BufferSize >= *UserSpaceBufferSize)) { + CopyMem (Buffer, UserSpaceBuffer, *UserSpaceBufferSize); } - *BufferSize = *Ring3BufferSize; + *BufferSize = *UserSpaceBufferSize; ForbidSupervisorAccessToUserMemory (); - CoreFreePages (Ring3Pages, PagesNumber); + CoreFreePages (UserSpacePages, PagesNumber); gUserPageTable = OldPageTable; @@ -653,9 +653,9 @@ CoreFileOpen ( { EFI_STATUS Status; EFI_FILE_PROTOCOL *NewFile; - EFI_FILE_PROTOCOL **Ring3NewHandle; - CHAR16 *Ring3FileName; - EFI_PHYSICAL_ADDRESS Ring3Pages; + EFI_FILE_PROTOCOL **UserSpaceNewHandle; + CHAR16 *UserSpaceFileName; + EFI_PHYSICAL_ADDRESS UserSpacePages; UINT32 PagesNumber; USER_SPACE_DRIVER *UserDriver; USER_SPACE_DRIVER *NewDriver; @@ -671,17 +671,17 @@ CoreFileOpen ( This = UserDriver->UserSpaceDriver; - Ring3NewHandle = NULL; - Ring3FileName = NULL; - Ring3Pages = 0; + UserSpaceNewHandle = NULL; + UserSpaceFileName = NULL; + UserSpacePages = 0; PagesNumber = (UINT32)EFI_SIZE_TO_PAGES (sizeof (EFI_FILE_PROTOCOL *) + StrSize (FileName)); Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, + EfiUserSpaceMemoryType, PagesNumber, - &Ring3Pages + &UserSpacePages ); if (EFI_ERROR (Status)) { *NewHandle = NULL; @@ -689,28 +689,28 @@ CoreFileOpen ( return Status; } - Ring3NewHandle = (EFI_FILE_PROTOCOL **)(UINTN)Ring3Pages; - Ring3FileName = (CHAR16 *)((EFI_FILE_PROTOCOL **)(UINTN)Ring3Pages + 1); + UserSpaceNewHandle = (EFI_FILE_PROTOCOL **)(UINTN)UserSpacePages; + UserSpaceFileName = (CHAR16 *)((EFI_FILE_PROTOCOL **)(UINTN)UserSpacePages + 1); AllowSupervisorAccessToUserMemory (); - Status = StrCpyS (Ring3FileName, StrLen (FileName) + 1, FileName); + Status = StrCpyS (UserSpaceFileName, StrLen (FileName) + 1, FileName); EntryPoint = (VOID *)This->Open; ForbidSupervisorAccessToUserMemory (); if (EFI_ERROR (Status)) { *NewHandle = NULL; - CoreFreePages (Ring3Pages, PagesNumber); + CoreFreePages (UserSpacePages, PagesNumber); gUserPageTable = OldPageTable; return Status; } #if defined (MDE_CPU_X64) || defined (MDE_CPU_AARCH64) - Status = GoToRing3 ( + Status = GoToUserSpace ( 5, EntryPoint, UserDriver, This, - Ring3NewHandle, - Ring3FileName, + UserSpaceNewHandle, + UserSpaceFileName, OpenMode, Attributes ); @@ -718,13 +718,13 @@ CoreFileOpen ( // // UINT64 OpenMode and Attributes are each passed as 2 double words on stack. // - Status = GoToRing3 ( + Status = GoToUserSpace ( 7, EntryPoint, UserDriver, This, - Ring3NewHandle, - Ring3FileName, + UserSpaceNewHandle, + UserSpaceFileName, OpenMode, Attributes ); @@ -732,16 +732,16 @@ CoreFileOpen ( // // UINT64 OpenMode and Attributes are each passed as 2 words on stack. // Each of them is aligned on 8 bytes. - // R0 == This, R1 == Ring3NewHandle, R2 == Ring3FileName, R3 == NULL, + // R0 == This, R1 == UserSpaceNewHandle, R2 == UserSpaceFileName, R3 == NULL, // [SP] == OpenMode, [SP + 8] == Attributes. // - Status = GoToRing3 ( + Status = GoToUserSpace ( 8, EntryPoint, UserDriver, This, - Ring3NewHandle, - Ring3FileName, + UserSpaceNewHandle, + UserSpaceFileName, NULL, (UINT32)OpenMode, (UINT32)(OpenMode >> 32), @@ -751,7 +751,7 @@ CoreFileOpen ( #endif if (EFI_ERROR (Status)) { *NewHandle = NULL; - CoreFreePages (Ring3Pages, PagesNumber); + CoreFreePages (UserSpacePages, PagesNumber); gUserPageTable = OldPageTable; return Status; } @@ -759,7 +759,7 @@ CoreFileOpen ( NewFile = AllocatePool (sizeof (EFI_FILE_PROTOCOL)); if (NewFile == NULL) { *NewHandle = NULL; - CoreFreePages (Ring3Pages, PagesNumber); + CoreFreePages (UserSpacePages, PagesNumber); gUserPageTable = OldPageTable; return EFI_OUT_OF_RESOURCES; } @@ -768,7 +768,7 @@ CoreFileOpen ( if (NewDriver == NULL) { *NewHandle = NULL; FreePool (NewFile); - CoreFreePages (Ring3Pages, PagesNumber); + CoreFreePages (UserSpacePages, PagesNumber); gUserPageTable = OldPageTable; return EFI_OUT_OF_RESOURCES; } @@ -778,8 +778,8 @@ CoreFileOpen ( NewDriver->NumberOfCalls = 0; AllowSupervisorAccessToUserMemory (); - NewDriver->UserSpaceDriver = *Ring3NewHandle; - NewFile->Revision = (*Ring3NewHandle)->Revision; + NewDriver->UserSpaceDriver = *UserSpaceNewHandle; + NewFile->Revision = (*UserSpaceNewHandle)->Revision; ForbidSupervisorAccessToUserMemory (); InsertTailList (&gUserSpaceDriversHead, &NewDriver->Link); @@ -801,7 +801,7 @@ CoreFileOpen ( *NewHandle = (EFI_FILE_PROTOCOL *)NewFile; - CoreFreePages (Ring3Pages, PagesNumber); + CoreFreePages (UserSpacePages, PagesNumber); gUserPageTable = OldPageTable; @@ -816,7 +816,7 @@ CoreSimpleFileSystemOpenVolume ( ) { EFI_STATUS Status; - EFI_FILE_PROTOCOL **Ring3Root; + EFI_FILE_PROTOCOL **UserSpaceRoot; EFI_FILE_PROTOCOL *File; EFI_PHYSICAL_ADDRESS Physical; USER_SPACE_DRIVER *UserDriver; @@ -839,7 +839,7 @@ CoreSimpleFileSystemOpenVolume ( Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, + EfiUserSpaceMemoryType, 1, &Physical ); @@ -849,14 +849,14 @@ CoreSimpleFileSystemOpenVolume ( return Status; } - Ring3Root = (EFI_FILE_PROTOCOL **)(UINTN)Physical; + UserSpaceRoot = (EFI_FILE_PROTOCOL **)(UINTN)Physical; - Status = GoToRing3 ( + Status = GoToUserSpace ( 2, EntryPoint, UserDriver, This, - Ring3Root + UserSpaceRoot ); if (EFI_ERROR (Status)) { *Root = NULL; @@ -887,8 +887,8 @@ CoreSimpleFileSystemOpenVolume ( NewDriver->NumberOfCalls = 0; AllowSupervisorAccessToUserMemory (); - NewDriver->UserSpaceDriver = *Ring3Root; - File->Revision = (*Ring3Root)->Revision; + NewDriver->UserSpaceDriver = *UserSpaceRoot; + File->Revision = (*UserSpaceRoot)->Revision; ForbidSupervisorAccessToUserMemory (); InsertTailList (&gUserSpaceDriversHead, &NewDriver->Link); @@ -943,7 +943,7 @@ CoreUnicodeCollationStriColl ( Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, + EfiUserSpaceMemoryType, EFI_SIZE_TO_PAGES (Size1 + Size2), &UserMem ); @@ -958,7 +958,7 @@ CoreUnicodeCollationStriColl ( EntryPoint = (VOID *)This->StriColl; ForbidSupervisorAccessToUserMemory (); - Status = GoToRing3 ( + Status = GoToUserSpace ( 3, EntryPoint, UserDriver, @@ -1000,7 +1000,7 @@ CoreUnicodeCollationMetaiMatch ( Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, + EfiUserSpaceMemoryType, EFI_SIZE_TO_PAGES (Size1 + Size2), &UserMem ); @@ -1015,7 +1015,7 @@ CoreUnicodeCollationMetaiMatch ( EntryPoint = (VOID *)This->MetaiMatch; ForbidSupervisorAccessToUserMemory (); - Status = GoToRing3 ( + Status = GoToUserSpace ( 3, EntryPoint, UserDriver, @@ -1054,7 +1054,7 @@ CoreUnicodeCollationStrLwr ( Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, + EfiUserSpaceMemoryType, EFI_SIZE_TO_PAGES (Size1), &UserMem ); @@ -1068,7 +1068,7 @@ CoreUnicodeCollationStrLwr ( EntryPoint = (VOID *)This->StrLwr; ForbidSupervisorAccessToUserMemory (); - Status = GoToRing3 ( + Status = GoToUserSpace ( 2, EntryPoint, UserDriver, @@ -1108,7 +1108,7 @@ CoreUnicodeCollationStrUpr ( Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, + EfiUserSpaceMemoryType, EFI_SIZE_TO_PAGES (Size1), &UserMem ); @@ -1122,7 +1122,7 @@ CoreUnicodeCollationStrUpr ( EntryPoint = (VOID *)This->StrUpr; ForbidSupervisorAccessToUserMemory (); - Status = GoToRing3 ( + Status = GoToUserSpace ( 2, EntryPoint, UserDriver, @@ -1161,7 +1161,7 @@ CoreUnicodeCollationFatToStr ( Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, + EfiUserSpaceMemoryType, EFI_SIZE_TO_PAGES (FatSize * 3), &UserMem ); @@ -1175,7 +1175,7 @@ CoreUnicodeCollationFatToStr ( EntryPoint = (VOID *)This->FatToStr; ForbidSupervisorAccessToUserMemory (); - Status = GoToRing3 ( + Status = GoToUserSpace ( 4, EntryPoint, UserDriver, @@ -1219,7 +1219,7 @@ CoreUnicodeCollationStrToFat ( Status = CoreAllocatePages ( AllocateAnyPages, - EfiRing3MemoryType, + EfiUserSpaceMemoryType, EFI_SIZE_TO_PAGES (FatSize + Size1), &UserMem ); @@ -1233,7 +1233,7 @@ CoreUnicodeCollationStrToFat ( EntryPoint = (VOID *)This->StrToFat; ForbidSupervisorAccessToUserMemory (); - Status = GoToRing3 ( + Status = GoToUserSpace ( 4, EntryPoint, UserDriver, diff --git a/MdeModulePkg/Core/Dxe/SysCall/X64/CoreBootServices.nasm b/MdeModulePkg/Core/Dxe/SysCall/X64/CoreBootServices.nasm index 8d09253158..c827f7c7c1 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/X64/CoreBootServices.nasm +++ b/MdeModulePkg/Core/Dxe/SysCall/X64/CoreBootServices.nasm @@ -8,7 +8,7 @@ #include extern ASM_PFX(CallBootService) -extern ASM_PFX(gRing3EntryPoint) +extern ASM_PFX(gUserSpaceEntryPoint) DEFAULT REL SECTION .text @@ -89,7 +89,7 @@ copy: ret -%macro SetRing3DataSegmentSelectors 0 +%macro SetUserSpaceDataSegmentSelectors 0 mov rcx, MSR_IA32_STAR rdmsr shl rdx, 0x20 @@ -157,7 +157,7 @@ ASM_PFX(CoreBootServices): push rax cli - SetRing3DataSegmentSelectors + SetUserSpaceDataSegmentSelectors pop rax @@ -181,16 +181,16 @@ o64 sysret ;------------------------------------------------------------------------------ ; EFI_STATUS ; EFIAPI -; CallRing3 ( -; IN RING3_CALL_DATA *Data, -; IN UINTN UserStackTop +; CallUserSpace ( +; IN USER_SPACE_CALL_DATA *Data, +; IN UINTN UserStackTop ; ); ; ; (rcx) Data ; (rdx) UserStackTop ;------------------------------------------------------------------------------ -global ASM_PFX(CallRing3) -ASM_PFX(CallRing3): +global ASM_PFX(CallUserSpace) +ASM_PFX(CallUserSpace): pushfq pop r11 cli @@ -211,11 +211,11 @@ ASM_PFX(CallRing3): mov rbx, rdx mov r10, rcx - SetRing3DataSegmentSelectors + SetUserSpaceDataSegmentSelectors ; Prepare SYSRET arguments. mov rdx, r10 - mov rcx, [ASM_PFX(gRing3EntryPoint)] + mov rcx, [ASM_PFX(gUserSpaceEntryPoint)] ; Switch to User Stack. mov rsp, rbx diff --git a/MdeModulePkg/Core/Dxe/SysCall/X64/InitializeX64.c b/MdeModulePkg/Core/Dxe/SysCall/X64/InitializeX64.c index fe87433b83..c8fd6884c5 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/X64/InitializeX64.c +++ b/MdeModulePkg/Core/Dxe/SysCall/X64/InitializeX64.c @@ -1,6 +1,6 @@ /** @file - Copyright (c) 2024, Mikhail Krichanov. All rights reserved. + Copyright (c) 2024 - 2025, Mikhail Krichanov. All rights reserved. SPDX-License-Identifier: BSD-3-Clause **/ diff --git a/MdeModulePkg/Include/Library/MemoryPoolLib.h b/MdeModulePkg/Include/Library/MemoryPoolLib.h index c3ee7c8e62..bf459cdb13 100644 --- a/MdeModulePkg/Include/Library/MemoryPoolLib.h +++ b/MdeModulePkg/Include/Library/MemoryPoolLib.h @@ -43,7 +43,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent @param IsCore Selects between the purposes of mPoolHead array. In DxeCore each element describes EFI_MEMORY_TYPE. - In DxeRing3 each element describes User space. + In DxeUserSpace each element describes User space. **/ VOID diff --git a/MdePkg/Include/Uefi/UefiMultiPhase.h b/MdePkg/Include/Uefi/UefiMultiPhase.h index 591892a1cb..736f3755b0 100644 --- a/MdePkg/Include/Uefi/UefiMultiPhase.h +++ b/MdePkg/Include/Uefi/UefiMultiPhase.h @@ -109,9 +109,9 @@ typedef enum { /// EfiUnacceptedMemoryType, /// - /// Memory allocated for (by) Ring3 Images. + /// Memory allocated for (by) UserSpace Images. /// - EfiRing3MemoryType, + EfiUserSpaceMemoryType, EfiMaxMemoryType } EFI_MEMORY_TYPE; diff --git a/MdePkg/Include/Uefi/UefiSpec.h b/MdePkg/Include/Uefi/UefiSpec.h index e1891c177e..b801afd15f 100644 --- a/MdePkg/Include/Uefi/UefiSpec.h +++ b/MdePkg/Include/Uefi/UefiSpec.h @@ -2151,13 +2151,13 @@ typedef struct { VOID *EntryPoint; EFI_BOOT_SERVICES *BootServices; EFI_RUNTIME_SERVICES *RuntimeServices; -} RING3_DATA; +} USER_SPACE_DATA; typedef struct { UINT8 NumberOfArguments; VOID *EntryPoint; UINTN Arguments[]; -} RING3_CALL_DATA; +} USER_SPACE_CALL_DATA; /** This is the declaration of an EFI image entry point. This entry point is