From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) by mx.groups.io with SMTP id smtpd.web11.7995.1633794641012591516 for ; Sat, 09 Oct 2021 08:50:41 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20210112 header.b=G8K88FTl; spf=pass (domain: gmail.com, ip: 209.85.214.177, mailfrom: retrage01@gmail.com) Received: by mail-pl1-f177.google.com with SMTP id x4so8189106pln.5 for ; Sat, 09 Oct 2021 08:50:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=fu4T1i2TlZETY3bQlEgIplQJhpNrNIxpAtL7hRks19I=; b=G8K88FTlkoIPK9AqL+RdZ50w4+0bQ5StXWm49WiIP9K38G17UnHdsDqLls0Bn/lwbK c96HM9KDttca17TWxs+umuTZJq24F4fhJFIcKyVa/xrbvB3dRW8YLu3n4aQxXVyPVEvN kwt65Qn36tmRIFrIu8YoUGyHIuNQ9kAxVfoUwNMgKKG1bVBAODCrOs27xl0GySOpoctY EtwQYkDaUFqbwuxUdAb1uiEkT7dP/qObwlCpnVUXN9rCOm6h6jneXq7RLPBq30ata6Qk tp5IkoE0NsXGVlABhqio/vvuIRpZRluSYhfd9XnRwuA6j7avtyL5PL4AqnFgLD2bX6jn djHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fu4T1i2TlZETY3bQlEgIplQJhpNrNIxpAtL7hRks19I=; b=NeUjGyTK4hSF23mHDtYsTJQNi3NTpYOCYKwO2htV5KzBEr/ioVB66/24okf4eCPSRs 6minNIkZkfLP13+l9EHE1bpfZk391XU7H4r8zqEZIbkALC+Z8evuwLkfpUFaqwc/ZdXN TYyc7/2Qp24137k67VBpLH4sgvRqzL5D9Wla4SZDDQbbv6nK+pf642mHG3FDGpVyJvRP o3MtGPNPW8mWN/D0dhKJ+HTuEBXPJV/uQdLc1W6i6ZIskbjPeDd0UYu44GK6908Cw1h7 KrqAruc4FUuyRTC946LWR4b+ycg6r5mn4M8RTTgNxFuMHQXsywum8bIHX+ryBmK+rb8d JkEA== X-Gm-Message-State: AOAM532lvzv58AYbLiHnA+xiDI8KnIZoJuHOjA/W21GEk3vJ+KK1MrUN Q/9HipvrZaM0/cBWAoFtcmEFKhqLh3fkIME= X-Google-Smtp-Source: ABdhPJyslnFNQ63d0uChjCeXdRKgtKkbpiSXpbTDyVNTXWVqpd60gP8rtF/E85QMqgwentkTablaQw== X-Received: by 2002:a17:90a:9509:: with SMTP id t9mr18890349pjo.149.1633794640459; Sat, 09 Oct 2021 08:50:40 -0700 (PDT) Return-Path: Received: from localhost.localdomain ([240d:1a:ada:4400:d496:915d:ba15:739a]) by smtp.gmail.com with ESMTPSA id z2sm2633255pfe.210.2021.10.09.08.50.38 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 09 Oct 2021 08:50:40 -0700 (PDT) From: "Akira Moroo" To: devel@edk2.groups.io Cc: afish@apple.com, ray.ni@intel.com, Akira Moroo Subject: [RFC PATCH 3/4] EmulatorPkg/Unix/Host: Add AArch64 support Date: Sun, 10 Oct 2021 00:49:17 +0900 Message-Id: X-Mailer: git-send-email 2.33.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Since there is no difference in calling convention between the Unix host and the UEFI environment on AArch64, it does not require gaskets. In this commit, it defines EmulatorPkg protocols that calls the host functions without gaskets and adds AArch64 specific stack switch logic. Signed-off-by: Akira Moroo --- EmulatorPkg/Unix/Host/AArch64/Gasket.c | 50 +++++++++++ EmulatorPkg/Unix/Host/AArch64/SwitchStack.S | 42 +++++++++ EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c | 37 ++++++++ EmulatorPkg/Unix/Host/BlockIo.c | 26 ++++++ EmulatorPkg/Unix/Host/EmuThunk.c | 29 ++++++ EmulatorPkg/Unix/Host/Host.c | 32 +++++++ EmulatorPkg/Unix/Host/Host.inf | 5 +- EmulatorPkg/Unix/Host/LinuxPacketFilter.c | 38 ++++++++ EmulatorPkg/Unix/Host/PosixFileSystem.c | 94 +++++++++++++++++++- EmulatorPkg/Unix/Host/Pthreads.c | 30 ++++++- EmulatorPkg/Unix/Host/X11GraphicsWindow.c | 26 +++++- 11 files changed, 405 insertions(+), 4 deletions(-) create mode 100644 EmulatorPkg/Unix/Host/AArch64/Gasket.c create mode 100644 EmulatorPkg/Unix/Host/AArch64/SwitchStack.S diff --git a/EmulatorPkg/Unix/Host/AArch64/Gasket.c b/EmulatorPkg/Unix/Host= /AArch64/Gasket.c new file mode 100644 index 0000000000..69a728d408 --- /dev/null +++ b/EmulatorPkg/Unix/Host/AArch64/Gasket.c @@ -0,0 +1,50 @@ +/** @file=0D +=0D + Copyright (c) 2008 - 2011, Apple Inc. All rights reserved.
=0D + Copyright (c) 2011 - 2019, Intel Corporation. All rights reserved.
=0D +=0D + SPDX-License-Identifier: BSD-2-Clause-Patent=0D +=0D +**/=0D +=0D +#include "Host.h"=0D +=0D +//=0D +// Reverse (UNIX to EFIAPI) gaskets=0D +//=0D +=0D +typedef=0D +UINTN=0D +(EFIAPI *CALL_BACK_1) (=0D + UINT64 Delta=0D + );=0D +=0D +UINTN=0D +ReverseGasketUint64 (=0D + UINTN CallBack,=0D + UINT64 a=0D + )=0D +{=0D + return ((CALL_BACK_1) CallBack) (a);=0D +}=0D +=0D +//=0D +// UNIX ABI to EFI ABI call=0D +//=0D +=0D +typedef=0D +UINTN=0D +(EFIAPI *CALL_BACK_2) (=0D + VOID *Context,=0D + VOID *Key=0D + );=0D +=0D +UINTN=0D +ReverseGasketUint64Uint64 (=0D + VOID *CallBack,=0D + VOID *Context,=0D + VOID *Key=0D + )=0D +{=0D + return ((CALL_BACK_2) CallBack) (Context, Key);=0D +}=0D diff --git a/EmulatorPkg/Unix/Host/AArch64/SwitchStack.S b/EmulatorPkg/Unix= /Host/AArch64/SwitchStack.S new file mode 100644 index 0000000000..6e903b94ef --- /dev/null +++ b/EmulatorPkg/Unix/Host/AArch64/SwitchStack.S @@ -0,0 +1,42 @@ +#-------------------------------------------------------------------------= -----=0D +#=0D +# Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.
=0D +# Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
= =0D +# Portions copyright (c) 2011 - 2013, ARM Limited. All rights reserved.=0D +# SPDX-License-Identifier: BSD-2-Clause-Patent=0D +#=0D +#-------------------------------------------------------------------------= -----=0D +=0D +.text=0D +.align 5=0D +=0D +GCC_ASM_EXPORT(PeiSwitchStacks)=0D +=0D +#/**=0D +#=0D +# This allows the caller to switch the stack and goes to the new entry po= int=0D +#=0D +# @param EntryPoint The pointer to the location to enter=0D +# @param Context Parameter to pass in=0D +# @param Context2 Parameter2 to pass in=0D +# @param NewStack New Location of the stack=0D +#=0D +# @return Nothing. Goes to the Entry Point passing in the new paramete= rs=0D +#=0D +#**/=0D +#VOID=0D +#EFIAPI=0D +#PeiSwitchStacks (=0D +# SWITCH_STACK_ENTRY_POINT EntryPoint,=0D +# VOID *Context,=0D +# VOID *Context2,=0D +# VOID *NewStack=0D +# );=0D +#=0D +ASM_PFX(PeiSwitchStacks):=0D + mov x29, #0=0D + mov x30, x0=0D + mov sp, x3=0D + mov x0, x1=0D + mov x1, x2=0D + ret=0D diff --git a/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c b/EmulatorPkg/Uni= x/Host/BerkeleyPacketFilter.c index 441f1e8d0a..f591d94f4e 100644 --- a/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c +++ b/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c @@ -972,6 +972,26 @@ EmuSnpReceive ( return EFI_SUCCESS;=0D }=0D =0D +#if defined(__aarch64__)=0D +=0D +EMU_SNP_PROTOCOL gEmuSnpProtocol =3D {=0D + EmuSnpCreateMapping,=0D + EmuSnpStart,=0D + EmuSnpStop,=0D + EmuSnpInitialize,=0D + EmuSnpReset,=0D + EmuSnpShutdown,=0D + EmuSnpReceiveFilters,=0D + EmuSnpStationAddress,=0D + EmuSnpStatistics,=0D + EmuSnpMCastIpToMac,=0D + EmuSnpNvData,=0D + EmuSnpGetStatus,=0D + EmuSnpTransmit,=0D + EmuSnpReceive=0D +};=0D +=0D +#else=0D =0D EMU_SNP_PROTOCOL gEmuSnpProtocol =3D {=0D GasketSnpCreateMapping,=0D @@ -990,6 +1010,8 @@ EMU_SNP_PROTOCOL gEmuSnpProtocol =3D { GasketSnpReceive=0D };=0D =0D +#endif=0D +=0D EFI_STATUS=0D GetInterfaceMacAddr (=0D EMU_SNP_PRIVATE *Private=0D @@ -1092,6 +1114,19 @@ EmuSnpThunkClose ( }=0D =0D =0D +#if defined(__aarch64__)=0D +=0D +EMU_IO_THUNK_PROTOCOL gSnpThunkIo =3D {=0D + &gEmuSnpProtocolGuid,=0D + NULL,=0D + NULL,=0D + 0,=0D + EmuSnpThunkOpen,=0D + EmuSnpThunkClose,=0D + NULL=0D +};=0D +=0D +#else=0D =0D EMU_IO_THUNK_PROTOCOL gSnpThunkIo =3D {=0D &gEmuSnpProtocolGuid,=0D @@ -1104,3 +1139,5 @@ EMU_IO_THUNK_PROTOCOL gSnpThunkIo =3D { };=0D =0D #endif=0D +=0D +#endif=0D diff --git a/EmulatorPkg/Unix/Host/BlockIo.c b/EmulatorPkg/Unix/Host/BlockI= o.c index 18368060d5..b335db192e 100644 --- a/EmulatorPkg/Unix/Host/BlockIo.c +++ b/EmulatorPkg/Unix/Host/BlockIo.c @@ -594,6 +594,17 @@ StdDupUnicodeToAscii ( return Ascii;=0D }=0D =0D +#if defined(__aarch64__)=0D +=0D +EMU_BLOCK_IO_PROTOCOL gEmuBlockIoProtocol =3D {=0D + EmuBlockIoReset,=0D + EmuBlockIoReadBlocks,=0D + EmuBlockIoWriteBlocks,=0D + EmuBlockIoFlushBlocks,=0D + EmuBlockIoCreateMapping=0D +};=0D +=0D +#else=0D =0D EMU_BLOCK_IO_PROTOCOL gEmuBlockIoProtocol =3D {=0D GasketEmuBlockIoReset,=0D @@ -603,6 +614,8 @@ EMU_BLOCK_IO_PROTOCOL gEmuBlockIoProtocol =3D { GasketEmuBlockIoCreateMapping=0D };=0D =0D +#endif=0D +=0D EFI_STATUS=0D EmuBlockIoThunkOpen (=0D IN EMU_IO_THUNK_PROTOCOL *This=0D @@ -687,7 +700,19 @@ EmuBlockIoThunkClose ( return EFI_SUCCESS;=0D }=0D =0D +#if defined(__aarch64__)=0D =0D +EMU_IO_THUNK_PROTOCOL gBlockIoThunkIo =3D {=0D + &gEmuBlockIoProtocolGuid,=0D + NULL,=0D + NULL,=0D + 0,=0D + EmuBlockIoThunkOpen,=0D + EmuBlockIoThunkClose,=0D + NULL=0D +};=0D +=0D +#else=0D =0D EMU_IO_THUNK_PROTOCOL gBlockIoThunkIo =3D {=0D &gEmuBlockIoProtocolGuid,=0D @@ -699,4 +724,5 @@ EMU_IO_THUNK_PROTOCOL gBlockIoThunkIo =3D { NULL=0D };=0D =0D +#endif=0D =0D diff --git a/EmulatorPkg/Unix/Host/EmuThunk.c b/EmulatorPkg/Unix/Host/EmuTh= unk.c index b8b0651c6a..bd78232f9c 100644 --- a/EmulatorPkg/Unix/Host/EmuThunk.c +++ b/EmulatorPkg/Unix/Host/EmuThunk.c @@ -396,6 +396,34 @@ SecGetNextProtocol ( return GetNextThunkProtocol (EmuBusDriver, Instance);=0D }=0D =0D +#if defined(__aarch64__)=0D +=0D +EMU_THUNK_PROTOCOL gEmuThunkProtocol =3D {=0D + SecWriteStdErr,=0D + SecConfigStdIn,=0D + SecWriteStdOut,=0D + SecReadStdIn,=0D + SecPollStdIn,=0D + SecMalloc,=0D + SecValloc,=0D + SecFree,=0D + SecPeCoffGetEntryPoint,=0D + SecPeCoffRelocateImageExtraAction,=0D + SecPeCoffUnloadImageExtraAction,=0D + SecEnableInterrupt,=0D + SecDisableInterrupt,=0D + QueryPerformanceFrequency,=0D + QueryPerformanceCounter,=0D + SecSleep,=0D + SecCpuSleep,=0D + SecExit,=0D + SecGetTime,=0D + SecSetTime,=0D + SecSetTimer,=0D + SecGetNextProtocol=0D +};=0D +=0D +#else=0D =0D EMU_THUNK_PROTOCOL gEmuThunkProtocol =3D {=0D GasketSecWriteStdErr,=0D @@ -422,6 +450,7 @@ EMU_THUNK_PROTOCOL gEmuThunkProtocol =3D { GasketSecGetNextProtocol=0D };=0D =0D +#endif=0D =0D VOID=0D SecInitThunkProtocol (=0D diff --git a/EmulatorPkg/Unix/Host/Host.c b/EmulatorPkg/Unix/Host/Host.c index b4e5510613..bba6282738 100644 --- a/EmulatorPkg/Unix/Host/Host.c +++ b/EmulatorPkg/Unix/Host/Host.c @@ -12,17 +12,49 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #define MAP_ANONYMOUS MAP_ANON=0D #endif=0D =0D +EFI_STATUS=0D +SecUnixPeiAutoScan (=0D + IN UINTN Index,=0D + OUT EFI_PHYSICAL_ADDRESS *MemoryBase,=0D + OUT UINT64 *MemorySize=0D + );=0D +=0D +EFI_STATUS=0D +SecUnixFdAddress (=0D + IN UINTN Index,=0D + IN OUT EFI_PHYSICAL_ADDRESS *FdBase,=0D + IN OUT UINT64 *FdSize,=0D + IN OUT EFI_PHYSICAL_ADDRESS *FixUp=0D + );=0D +=0D +VOID *=0D +SecEmuThunkAddress (=0D + VOID=0D + );=0D +=0D =0D //=0D // Globals=0D //=0D =0D +#if defined(__aarch64__)=0D +=0D +EMU_THUNK_PPI mSecEmuThunkPpi =3D {=0D + SecUnixPeiAutoScan,=0D + SecUnixFdAddress,=0D + SecEmuThunkAddress=0D +};=0D +=0D +#else=0D +=0D EMU_THUNK_PPI mSecEmuThunkPpi =3D {=0D GasketSecUnixPeiAutoScan,=0D GasketSecUnixFdAddress,=0D GasketSecEmuThunkAddress=0D };=0D =0D +#endif=0D +=0D char *gGdbWorkingFileName =3D NULL;=0D unsigned int mScriptSymbolChangesCount =3D 0;=0D =0D diff --git a/EmulatorPkg/Unix/Host/Host.inf b/EmulatorPkg/Unix/Host/Host.inf index c479d2b7d0..43cb55aa21 100644 --- a/EmulatorPkg/Unix/Host/Host.inf +++ b/EmulatorPkg/Unix/Host/Host.inf @@ -20,7 +20,7 @@ #=0D # The following information is for reference only and not required by the = build tools.=0D #=0D -# VALID_ARCHITECTURES =3D IA32 X64 EBC=0D +# VALID_ARCHITECTURES =3D IA32 X64 AARCH64 EBC=0D #=0D =0D [Sources]=0D @@ -42,6 +42,9 @@ Ia32/Gasket.S # enforce 16-byte stack alignment for Mac OS X=0D Ia32/SwitchStack.c=0D =0D +[Sources.AARCH64]=0D + AArch64/Gasket.c=0D + AArch64/SwitchStack.S=0D =0D [Packages]=0D MdePkg/MdePkg.dec=0D diff --git a/EmulatorPkg/Unix/Host/LinuxPacketFilter.c b/EmulatorPkg/Unix/H= ost/LinuxPacketFilter.c index 2b772ab884..9c696a8774 100644 --- a/EmulatorPkg/Unix/Host/LinuxPacketFilter.c +++ b/EmulatorPkg/Unix/Host/LinuxPacketFilter.c @@ -518,6 +518,27 @@ EmuSnpReceive ( }=0D =0D =0D +#if defined(__aarch64__)=0D +=0D +EMU_SNP_PROTOCOL gEmuSnpProtocol =3D {=0D + EmuSnpCreateMapping,=0D + EmuSnpStart,=0D + EmuSnpStop,=0D + EmuSnpInitialize,=0D + EmuSnpReset,=0D + EmuSnpShutdown,=0D + EmuSnpReceiveFilters,=0D + EmuSnpStationAddress,=0D + EmuSnpStatistics,=0D + EmuSnpMCastIpToMac,=0D + EmuSnpNvData,=0D + EmuSnpGetStatus,=0D + EmuSnpTransmit,=0D + EmuSnpReceive=0D +};=0D +=0D +#else=0D +=0D EMU_SNP_PROTOCOL gEmuSnpProtocol =3D {=0D GasketSnpCreateMapping,=0D GasketSnpStart,=0D @@ -535,6 +556,8 @@ EMU_SNP_PROTOCOL gEmuSnpProtocol =3D { GasketSnpReceive=0D };=0D =0D +#endif=0D +=0D EFI_STATUS=0D EmuSnpThunkOpen (=0D IN EMU_IO_THUNK_PROTOCOL *This=0D @@ -584,6 +607,19 @@ EmuSnpThunkClose ( }=0D =0D =0D +#if defined(__aarch64__)=0D +=0D +EMU_IO_THUNK_PROTOCOL gSnpThunkIo =3D {=0D + &gEmuSnpProtocolGuid,=0D + NULL,=0D + NULL,=0D + 0,=0D + EmuSnpThunkOpen,=0D + EmuSnpThunkClose,=0D + NULL=0D +};=0D +=0D +#else=0D =0D EMU_IO_THUNK_PROTOCOL gSnpThunkIo =3D {=0D &gEmuSnpProtocolGuid,=0D @@ -596,3 +632,5 @@ EMU_IO_THUNK_PROTOCOL gSnpThunkIo =3D { };=0D =0D #endif=0D +=0D +#endif=0D diff --git a/EmulatorPkg/Unix/Host/PosixFileSystem.c b/EmulatorPkg/Unix/Hos= t/PosixFileSystem.c index 0a618abcd8..4676f2f933 100644 --- a/EmulatorPkg/Unix/Host/PosixFileSystem.c +++ b/EmulatorPkg/Unix/Host/PosixFileSystem.c @@ -53,6 +53,51 @@ typedef struct { EMU_EFI_FILE_PRIVATE_SIGNATURE \=0D )=0D =0D +EFI_STATUS=0D +PosixFileOpen (=0D + IN EFI_FILE_PROTOCOL *This,=0D + OUT EFI_FILE_PROTOCOL **NewHandle,=0D + IN CHAR16 *FileName,=0D + IN UINT64 OpenMode,=0D + IN UINT64 Attributes=0D + );=0D +=0D +EFI_STATUS=0D +PosixFileCLose (=0D + IN EFI_FILE_PROTOCOL *This=0D + );=0D +=0D +EFI_STATUS=0D +PosixFileDelete (=0D + IN EFI_FILE_PROTOCOL *This=0D + );=0D +=0D +EFI_STATUS=0D +PosixFileRead (=0D + IN EFI_FILE_PROTOCOL *This,=0D + IN OUT UINTN *BufferSize,=0D + OUT VOID *Buffer=0D + );=0D +=0D +EFI_STATUS=0D +PosixFileWrite (=0D + IN EFI_FILE_PROTOCOL *This,=0D + IN OUT UINTN *BufferSize,=0D + IN VOID *Buffer=0D + );=0D +=0D +EFI_STATUS=0D +PosixFileGetPossition (=0D + IN EFI_FILE_PROTOCOL *This,=0D + OUT UINT64 *Position=0D + );=0D +=0D +EFI_STATUS=0D +PosixFileSetPossition (=0D + IN EFI_FILE_PROTOCOL *This,=0D + IN UINT64 Position=0D + );=0D +=0D EFI_STATUS=0D PosixFileGetInfo (=0D IN EFI_FILE_PROTOCOL *This,=0D @@ -69,6 +114,39 @@ PosixFileSetInfo ( IN VOID *Buffer=0D );=0D =0D +EFI_STATUS=0D +PosixFileFlush (=0D + IN EFI_FILE_PROTOCOL *This=0D + );=0D +=0D +EFI_STATUS=0D +PosixOpenVolume (=0D + IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This,=0D + OUT EFI_FILE_PROTOCOL **Root=0D + );=0D +=0D +#if defined(__aarch64__)=0D +=0D +EFI_FILE_PROTOCOL gPosixFileProtocol =3D {=0D + EFI_FILE_REVISION,=0D + PosixFileOpen,=0D + PosixFileCLose,=0D + PosixFileDelete,=0D + PosixFileRead,=0D + PosixFileWrite,=0D + PosixFileGetPossition,=0D + PosixFileSetPossition,=0D + PosixFileGetInfo,=0D + PosixFileSetInfo,=0D + PosixFileFlush=0D +};=0D +=0D +EFI_SIMPLE_FILE_SYSTEM_PROTOCOL gPosixFileSystemProtocol =3D {=0D + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION,=0D + PosixOpenVolume,=0D +};=0D +=0D +#else=0D =0D EFI_FILE_PROTOCOL gPosixFileProtocol =3D {=0D EFI_FILE_REVISION,=0D @@ -89,6 +167,7 @@ EFI_SIMPLE_FILE_SYSTEM_PROTOCOL gPosixFileSystemProtocol= =3D { GasketPosixOpenVolume,=0D };=0D =0D +#endif=0D =0D /**=0D Open the root directory on a volume.=0D @@ -1573,6 +1652,19 @@ PosixFileSystmeThunkClose ( return EFI_SUCCESS;=0D }=0D =0D +#if defined(__aarch64__)=0D +=0D +EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo =3D {=0D + &gEfiSimpleFileSystemProtocolGuid,=0D + NULL,=0D + NULL,=0D + 0,=0D + PosixFileSystmeThunkOpen,=0D + PosixFileSystmeThunkClose,=0D + NULL=0D +};=0D +=0D +#else=0D =0D EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo =3D {=0D &gEfiSimpleFileSystemProtocolGuid,=0D @@ -1584,4 +1676,4 @@ EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo =3D { NULL=0D };=0D =0D -=0D +#endif=0D diff --git a/EmulatorPkg/Unix/Host/Pthreads.c b/EmulatorPkg/Unix/Host/Pthre= ads.c index 025687c356..3613e4cf60 100644 --- a/EmulatorPkg/Unix/Host/Pthreads.c +++ b/EmulatorPkg/Unix/Host/Pthreads.c @@ -173,6 +173,20 @@ PthreadSelf ( return (UINTN)pthread_self ();=0D }=0D =0D +#if defined(__aarch64__)=0D +=0D +EMU_THREAD_THUNK_PROTOCOL gPthreadThunk =3D {=0D + PthreadMutexLock,=0D + PthreadMutexUnLock,=0D + PthreadMutexTryLock,=0D + PthreadMutexInit,=0D + PthreadMutexDestroy,=0D + PthreadCreate,=0D + PthreadExit,=0D + PthreadSelf=0D +};=0D +=0D +#else=0D =0D EMU_THREAD_THUNK_PROTOCOL gPthreadThunk =3D {=0D GasketPthreadMutexLock,=0D @@ -185,6 +199,7 @@ EMU_THREAD_THUNK_PROTOCOL gPthreadThunk =3D { GasketPthreadSelf=0D };=0D =0D +#endif=0D =0D EFI_STATUS=0D PthreadOpen (=0D @@ -215,6 +230,19 @@ PthreadClose ( return EFI_SUCCESS;=0D }=0D =0D +#if defined(__aarch64__)=0D +=0D +EMU_IO_THUNK_PROTOCOL gPthreadThunkIo =3D {=0D + &gEmuThreadThunkProtocolGuid,=0D + NULL,=0D + NULL,=0D + 0,=0D + PthreadOpen,=0D + PthreadClose,=0D + NULL=0D +};=0D +=0D +#else=0D =0D EMU_IO_THUNK_PROTOCOL gPthreadThunkIo =3D {=0D &gEmuThreadThunkProtocolGuid,=0D @@ -226,4 +254,4 @@ EMU_IO_THUNK_PROTOCOL gPthreadThunkIo =3D { NULL=0D };=0D =0D -=0D +#endif=0D diff --git a/EmulatorPkg/Unix/Host/X11GraphicsWindow.c b/EmulatorPkg/Unix/H= ost/X11GraphicsWindow.c index 5325a0e35b..cff8a6f7b9 100644 --- a/EmulatorPkg/Unix/Host/X11GraphicsWindow.c +++ b/EmulatorPkg/Unix/Host/X11GraphicsWindow.c @@ -918,6 +918,16 @@ X11GraphicsWindowOpen ( return EFI_OUT_OF_RESOURCES;=0D }=0D =0D +#if defined(__aarch64__)=0D + Drv->GraphicsIo.Size =3D X11Size;=0D + Drv->GraphicsIo.CheckKey =3D X11CheckKey;=0D + Drv->GraphicsIo.GetKey =3D X11GetKey;=0D + Drv->GraphicsIo.KeySetState =3D X11KeySetState;=0D + Drv->GraphicsIo.RegisterKeyNotify =3D X11RegisterKeyNotify;=0D + Drv->GraphicsIo.Blt =3D X11Blt;=0D + Drv->GraphicsIo.CheckPointer =3D X11CheckPointer;=0D + Drv->GraphicsIo.GetPointerState =3D X11GetPointerState;=0D +#else=0D Drv->GraphicsIo.Size =3D GasketX11Size;=0D Drv->GraphicsIo.CheckKey =3D GasketX11CheckKey;=0D Drv->GraphicsIo.GetKey =3D GasketX11GetKey;=0D @@ -926,6 +936,7 @@ X11GraphicsWindowOpen ( Drv->GraphicsIo.Blt =3D GasketX11Blt;=0D Drv->GraphicsIo.CheckPointer =3D GasketX11CheckPointer;=0D Drv->GraphicsIo.GetPointerState =3D GasketX11GetPointerState;=0D +#endif=0D =0D =0D Drv->key_count =3D 0;=0D @@ -1008,6 +1019,19 @@ X11GraphicsWindowClose ( return EFI_SUCCESS;=0D }=0D =0D +#if defined(__aarch64__)=0D +=0D +EMU_IO_THUNK_PROTOCOL gX11ThunkIo =3D {=0D + &gEmuGraphicsWindowProtocolGuid,=0D + NULL,=0D + NULL,=0D + 0,=0D + X11GraphicsWindowOpen,=0D + X11GraphicsWindowClose,=0D + NULL=0D +};=0D +=0D +#else=0D =0D EMU_IO_THUNK_PROTOCOL gX11ThunkIo =3D {=0D &gEmuGraphicsWindowProtocolGuid,=0D @@ -1019,4 +1043,4 @@ EMU_IO_THUNK_PROTOCOL gX11ThunkIo =3D { NULL=0D };=0D =0D -=0D +#endif=0D --=20 2.33.0