From a550d468a6ca577d9e9c57a0eafcf2fc9fbb8c97 Mon Sep 17 00:00:00 2001 From: Michael Kubacki Date: Sun, 5 Dec 2021 14:53:57 -0800 Subject: EmulatorPkg: Apply uncrustify changes REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the EmulatorPkg package Cc: Andrew Fish Cc: Leif Lindholm Cc: Michael D Kinney Signed-off-by: Michael Kubacki Reviewed-by: Ray Ni --- EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c | 261 +++---- EmulatorPkg/Unix/Host/BlockIo.c | 262 +++---- EmulatorPkg/Unix/Host/EmuThunk.c | 183 +++-- EmulatorPkg/Unix/Host/Gasket.h | 288 ++++--- EmulatorPkg/Unix/Host/Host.c | 400 +++++----- EmulatorPkg/Unix/Host/Host.h | 160 ++-- EmulatorPkg/Unix/Host/Ia32/SwitchStack.c | 12 +- EmulatorPkg/Unix/Host/LinuxPacketFilter.c | 142 ++-- EmulatorPkg/Unix/Host/MemoryAllocationLib.c | 14 +- EmulatorPkg/Unix/Host/PosixFileSystem.c | 637 ++++++++------- EmulatorPkg/Unix/Host/Pthreads.c | 66 +- EmulatorPkg/Unix/Host/X11GraphicsWindow.c | 1076 ++++++++++++++------------ 12 files changed, 1753 insertions(+), 1748 deletions(-) (limited to 'EmulatorPkg/Unix') diff --git a/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c b/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c index 441f1e8d0a..ecfdacc748 100644 --- a/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c +++ b/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c @@ -11,53 +11,48 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ - #include "Host.h" #ifdef __APPLE__ + #include -#include - - -#define EMU_SNP_PRIVATE_SIGNATURE SIGNATURE_32('E', 'M', 's', 'n') +#define EMU_SNP_PRIVATE_SIGNATURE SIGNATURE_32('E', 'M', 's', 'n') typedef struct { - UINTN Signature; + UINTN Signature; - EMU_IO_THUNK_PROTOCOL *Thunk; - EMU_SNP_PROTOCOL EmuSnp; - EFI_SIMPLE_NETWORK_MODE *Mode; + EMU_IO_THUNK_PROTOCOL *Thunk; + EMU_SNP_PROTOCOL EmuSnp; + EFI_SIMPLE_NETWORK_MODE *Mode; - int BpfFd; - char *InterfaceName; - EFI_MAC_ADDRESS MacAddress; - u_int ReadBufferSize; - VOID *ReadBuffer; + int BpfFd; + char *InterfaceName; + EFI_MAC_ADDRESS MacAddress; + u_int ReadBufferSize; + VOID *ReadBuffer; // // Two walking pointers to manage the multiple packets that can be returned // in a single read. // - VOID *CurrentReadPointer; - VOID *EndReadPointer; - - UINT32 ReceivedPackets; - UINT32 DroppedPackets; + VOID *CurrentReadPointer; + VOID *EndReadPointer; + UINT32 ReceivedPackets; + UINT32 DroppedPackets; } EMU_SNP_PRIVATE; #define EMU_SNP_PRIVATE_DATA_FROM_THIS(a) \ CR(a, EMU_SNP_PRIVATE, EmuSnp, EMU_SNP_PRIVATE_SIGNATURE) - // // Strange, but there doesn't appear to be any structure for the Ethernet header in edk2... // typedef struct { - UINT8 DstAddr[NET_ETHER_ADDR_LEN]; - UINT8 SrcAddr[NET_ETHER_ADDR_LEN]; - UINT16 Type; + UINT8 DstAddr[NET_ETHER_ADDR_LEN]; + UINT8 SrcAddr[NET_ETHER_ADDR_LEN]; + UINT16 Type; } ETHERNET_HEADER; /** @@ -76,7 +71,7 @@ EmuSnpCreateMapping ( IN EFI_SIMPLE_NETWORK_MODE *Mode ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -100,40 +95,38 @@ EmuSnpCreateMapping ( return EFI_SUCCESS; } - -static struct bpf_insn mFilterInstructionTemplate[] = { +static struct bpf_insn mFilterInstructionTemplate[] = { // Load 4 bytes from the destination MAC address. - BPF_STMT (BPF_LD + BPF_W + BPF_ABS, OFFSET_OF (ETHERNET_HEADER, DstAddr[0])), + BPF_STMT (BPF_LD + BPF_W + BPF_ABS, OFFSET_OF (ETHERNET_HEADER, DstAddr[0])), // Compare to first 4 bytes of fake MAC address. - BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0x12345678, 0, 3 ), + BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0x12345678, 0, 3), // Load remaining 2 bytes from the destination MAC address. - BPF_STMT (BPF_LD + BPF_H + BPF_ABS, OFFSET_OF( ETHERNET_HEADER, DstAddr[4])), + BPF_STMT (BPF_LD + BPF_H + BPF_ABS, OFFSET_OF (ETHERNET_HEADER, DstAddr[4])), // Compare to remaining 2 bytes of fake MAC address. - BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0x9ABC, 5, 0 ), + BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0x9ABC, 5, 0), // Load 4 bytes from the destination MAC address. - BPF_STMT (BPF_LD + BPF_W + BPF_ABS, OFFSET_OF (ETHERNET_HEADER, DstAddr[0])), + BPF_STMT (BPF_LD + BPF_W + BPF_ABS, OFFSET_OF (ETHERNET_HEADER, DstAddr[0])), // Compare to first 4 bytes of broadcast MAC address. - BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0xFFFFFFFF, 0, 2), + BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0xFFFFFFFF, 0, 2), // Load remaining 2 bytes from the destination MAC address. - BPF_STMT (BPF_LD + BPF_H + BPF_ABS, OFFSET_OF( ETHERNET_HEADER, DstAddr[4])), + BPF_STMT (BPF_LD + BPF_H + BPF_ABS, OFFSET_OF (ETHERNET_HEADER, DstAddr[4])), // Compare to remaining 2 bytes of broadcast MAC address. - BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0xFFFF, 1, 0), + BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 0xFFFF, 1, 0), // Reject packet. - BPF_STMT (BPF_RET + BPF_K, 0), + BPF_STMT (BPF_RET + BPF_K, 0), // Receive entire packet. - BPF_STMT (BPF_RET + BPF_K, -1) + BPF_STMT (BPF_RET + BPF_K, -1) }; - EFI_STATUS OpenBpfFileDescriptor ( IN EMU_SNP_PRIVATE *Private, @@ -171,7 +164,6 @@ OpenBpfFileDescriptor ( return EFI_OUT_OF_RESOURCES; } - /** Changes the state of a network interface from "stopped" to "started". @@ -189,15 +181,15 @@ EmuSnpStart ( IN EMU_SNP_PROTOCOL *This ) { - EFI_STATUS Status; - EMU_SNP_PRIVATE *Private; - struct ifreq BoundIf; - struct bpf_program BpfProgram; - struct bpf_insn *FilterProgram; + EFI_STATUS Status; + EMU_SNP_PRIVATE *Private; + struct ifreq BoundIf; + struct bpf_program BpfProgram; + struct bpf_insn *FilterProgram; u_int Value; u_int ReadBufferSize; - UINT16 Temp16; - UINT32 Temp32; + UINT16 Temp16; + UINT32 Temp32; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -215,7 +207,7 @@ EmuSnpStart ( break; } - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; Private->ReadBuffer = NULL; if (Private->BpfFd == 0) { Status = OpenBpfFileDescriptor (Private, &Private->BpfFd); @@ -282,7 +274,7 @@ EmuSnpStart ( // Allocate read buffer. // Private->ReadBufferSize = ReadBufferSize; - Private->ReadBuffer = malloc (Private->ReadBufferSize); + Private->ReadBuffer = malloc (Private->ReadBufferSize); if (Private->ReadBuffer == NULL) { goto ErrorExit; } @@ -293,7 +285,7 @@ EmuSnpStart ( // Install our packet filter: successful reads should only produce broadcast or unicast // packets directed to our fake MAC address. // - FilterProgram = malloc (sizeof (mFilterInstructionTemplate)) ; + FilterProgram = malloc (sizeof (mFilterInstructionTemplate)); if ( FilterProgram == NULL ) { goto ErrorExit; } @@ -308,7 +300,7 @@ EmuSnpStart ( CopyMem (&Temp16, &Private->Mode->CurrentAddress.Addr[4], sizeof (UINT16)); FilterProgram[3].k = NTOHS (Temp16); - BpfProgram.bf_len = sizeof (mFilterInstructionTemplate) / sizeof (struct bpf_insn); + BpfProgram.bf_len = sizeof (mFilterInstructionTemplate) / sizeof (struct bpf_insn); BpfProgram.bf_insns = FilterProgram; if (ioctl (Private->BpfFd, BIOCSETF, &BpfProgram) < 0) { @@ -324,7 +316,6 @@ EmuSnpStart ( goto DeviceErrorExit; } - Private->Mode->State = EfiSimpleNetworkStarted; } @@ -337,10 +328,10 @@ ErrorExit: free (Private->ReadBuffer); Private->ReadBuffer = NULL; } + return Status; } - /** Changes the state of a network interface from "started" to "stopped". @@ -358,7 +349,7 @@ EmuSnpStop ( IN EMU_SNP_PROTOCOL *This ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -381,7 +372,7 @@ EmuSnpStop ( } if (Private->ReadBuffer != NULL) { - free (Private->ReadBuffer ); + free (Private->ReadBuffer); Private->CurrentReadPointer = Private->EndReadPointer = Private->ReadBuffer = NULL; } @@ -390,7 +381,6 @@ EmuSnpStop ( return EFI_SUCCESS; } - /** Resets a network adapter and allocates the transmit and receive buffers required by the network interface; optionally, also requests allocation @@ -419,12 +409,12 @@ EmuSnpStop ( **/ EFI_STATUS EmuSnpInitialize ( - IN EMU_SNP_PROTOCOL *This, - IN UINTN ExtraRxBufferSize OPTIONAL, - IN UINTN ExtraTxBufferSize OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN UINTN ExtraRxBufferSize OPTIONAL, + IN UINTN ExtraTxBufferSize OPTIONAL ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -441,7 +431,7 @@ EmuSnpInitialize ( break; } - Private->Mode->MCastFilterCount = 0; + Private->Mode->MCastFilterCount = 0; Private->Mode->ReceiveFilterSetting = 0; ZeroMem (Private->Mode->MCastFilter, sizeof (Private->Mode->MCastFilter)); @@ -450,7 +440,6 @@ EmuSnpInitialize ( return EFI_SUCCESS; } - /** Resets a network adapter and re-initializes it with the parameters that were provided in the previous call to Initialize(). @@ -469,11 +458,11 @@ EmuSnpInitialize ( **/ EFI_STATUS EmuSnpReset ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN ExtendedVerification + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -493,7 +482,6 @@ EmuSnpReset ( return EFI_SUCCESS; } - /** Resets a network adapter and leaves it in a state that is safe for another driver to initialize. @@ -512,7 +500,7 @@ EmuSnpShutdown ( IN EMU_SNP_PROTOCOL *This ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -532,7 +520,7 @@ EmuSnpShutdown ( Private->Mode->State = EfiSimpleNetworkStarted; Private->Mode->ReceiveFilterSetting = 0; - Private->Mode->MCastFilterCount = 0; + Private->Mode->MCastFilterCount = 0; ZeroMem (Private->Mode->MCastFilter, sizeof (Private->Mode->MCastFilter)); if (Private->BpfFd != 0) { @@ -574,15 +562,15 @@ EmuSnpShutdown ( **/ EFI_STATUS EmuSnpReceiveFilters ( - IN EMU_SNP_PROTOCOL *This, - IN UINT32 Enable, - IN UINT32 Disable, - IN BOOLEAN ResetMCastFilter, - IN UINTN MCastFilterCnt OPTIONAL, - IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN UINT32 Enable, + IN UINT32 Disable, + IN BOOLEAN ResetMCastFilter, + IN UINTN MCastFilterCnt OPTIONAL, + IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -590,7 +578,6 @@ EmuSnpReceiveFilters ( return EFI_SUCCESS; } - /** Modifies or resets the current station address, if supported. @@ -608,19 +595,18 @@ EmuSnpReceiveFilters ( **/ EFI_STATUS EmuSnpStationAddress ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN Reset, - IN EFI_MAC_ADDRESS *New OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN Reset, + IN EFI_MAC_ADDRESS *New OPTIONAL ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); return EFI_UNSUPPORTED; } - /** Resets or collects the statistics on a network interface. @@ -644,20 +630,19 @@ EmuSnpStationAddress ( **/ EFI_STATUS EmuSnpStatistics ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN Reset, - IN OUT UINTN *StatisticsSize OPTIONAL, - OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN Reset, + IN OUT UINTN *StatisticsSize OPTIONAL, + OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); return EFI_UNSUPPORTED; } - /** Converts a multicast IP address to a multicast HW MAC address. @@ -681,20 +666,19 @@ EmuSnpStatistics ( **/ EFI_STATUS EmuSnpMCastIpToMac ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN IPv6, - IN EFI_IP_ADDRESS *IP, - OUT EFI_MAC_ADDRESS *MAC + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN IPv6, + IN EFI_IP_ADDRESS *IP, + OUT EFI_MAC_ADDRESS *MAC ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); return EFI_UNSUPPORTED; } - /** Performs read and write operations on the NVRAM device attached to a network interface. @@ -717,14 +701,14 @@ EmuSnpMCastIpToMac ( **/ EFI_STATUS EmuSnpNvData ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN ReadWrite, - IN UINTN Offset, - IN UINTN BufferSize, - IN OUT VOID *Buffer + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN ReadWrite, + IN UINTN Offset, + IN UINTN BufferSize, + IN OUT VOID *Buffer ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -758,12 +742,12 @@ EmuSnpNvData ( **/ EFI_STATUS EmuSnpGetStatus ( - IN EMU_SNP_PROTOCOL *This, - OUT UINT32 *InterruptStatus OPTIONAL, - OUT VOID **TxBuf OPTIONAL + IN EMU_SNP_PROTOCOL *This, + OUT UINT32 *InterruptStatus OPTIONAL, + OUT VOID **TxBuf OPTIONAL ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -774,7 +758,6 @@ EmuSnpGetStatus ( return EFI_SUCCESS; } - /** Places a packet in the transmit queue of a network interface. @@ -810,17 +793,17 @@ EmuSnpGetStatus ( **/ EFI_STATUS EmuSnpTransmit ( - IN EMU_SNP_PROTOCOL *This, - IN UINTN HeaderSize, - IN UINTN BufferSize, - IN VOID *Buffer, - IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, - IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, - IN UINT16 *Protocol OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN UINTN HeaderSize, + IN UINTN BufferSize, + IN VOID *Buffer, + IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, + IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, + IN UINT16 *Protocol OPTIONAL ) { - EMU_SNP_PRIVATE *Private; - ETHERNET_HEADER *EnetHeader; + EMU_SNP_PRIVATE *Private; + ETHERNET_HEADER *EnetHeader; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -837,15 +820,15 @@ EmuSnpTransmit ( SrcAddr = &Private->Mode->CurrentAddress; } - EnetHeader = (ETHERNET_HEADER *) Buffer; + EnetHeader = (ETHERNET_HEADER *)Buffer; CopyMem (EnetHeader->DstAddr, DestAddr, NET_ETHER_ADDR_LEN); CopyMem (EnetHeader->SrcAddr, SrcAddr, NET_ETHER_ADDR_LEN); - EnetHeader->Type = HTONS(*Protocol); + EnetHeader->Type = HTONS (*Protocol); } - if (write (Private->BpfFd, Buffer, BufferSize) < 0) { + if (write (Private->BpfFd, Buffer, BufferSize) < 0) { return EFI_DEVICE_ERROR; } @@ -886,20 +869,20 @@ EmuSnpTransmit ( **/ EFI_STATUS EmuSnpReceive ( - IN EMU_SNP_PROTOCOL *This, - OUT UINTN *HeaderSize OPTIONAL, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer, - OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, - OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, - OUT UINT16 *Protocol OPTIONAL + IN EMU_SNP_PROTOCOL *This, + OUT UINTN *HeaderSize OPTIONAL, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer, + OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, + OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, + OUT UINT16 *Protocol OPTIONAL ) { - EMU_SNP_PRIVATE *Private; - struct bpf_hdr *BpfHeader; - struct bpf_stat BpfStats; - ETHERNET_HEADER *EnetHeader; - ssize_t Result; + EMU_SNP_PRIVATE *Private; + struct bpf_hdr *BpfHeader; + struct bpf_stat BpfStats; + ETHERNET_HEADER *EnetHeader; + ssize_t Result; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -907,7 +890,7 @@ EmuSnpReceive ( return EFI_NOT_STARTED; } - ZeroMem (&BpfStats, sizeof( BpfStats)); + ZeroMem (&BpfStats, sizeof (BpfStats)); if (ioctl (Private->BpfFd, BIOCGSTATS, &BpfStats) == 0) { Private->ReceivedPackets += BpfStats.bs_recv; @@ -936,10 +919,10 @@ EmuSnpReceive ( } Private->CurrentReadPointer = Private->ReadBuffer; - Private->EndReadPointer = Private->CurrentReadPointer + Result; + Private->EndReadPointer = Private->CurrentReadPointer + Result; } - BpfHeader = Private->CurrentReadPointer; + BpfHeader = Private->CurrentReadPointer; EnetHeader = Private->CurrentReadPointer + BpfHeader->bh_hdrlen; if (BpfHeader->bh_caplen > *BufferSize) { @@ -972,8 +955,7 @@ EmuSnpReceive ( return EFI_SUCCESS; } - -EMU_SNP_PROTOCOL gEmuSnpProtocol = { +EMU_SNP_PROTOCOL gEmuSnpProtocol = { GasketSnpCreateMapping, GasketSnpStart, GasketSnpStop, @@ -992,7 +974,7 @@ EMU_SNP_PROTOCOL gEmuSnpProtocol = { EFI_STATUS GetInterfaceMacAddr ( - EMU_SNP_PRIVATE *Private + EMU_SNP_PRIVATE *Private ) { EFI_STATUS Status; @@ -1020,12 +1002,12 @@ GetInterfaceMacAddr ( ); Status = EFI_NOT_FOUND; - If = IfAddrs; + If = IfAddrs; while (If != NULL) { IfSdl = (struct sockaddr_dl *)If->ifa_addr; if (IfSdl->sdl_family == AF_LINK) { - if (!AsciiStrCmp( Private->InterfaceName, If->ifa_name)) { + if (!AsciiStrCmp (Private->InterfaceName, If->ifa_name)) { CopyMem (&Private->MacAddress, LLADDR (IfSdl), NET_ETHER_ADDR_LEN); Status = EFI_SUCCESS; @@ -1041,10 +1023,9 @@ Exit: return Status; } - EFI_STATUS EmuSnpThunkOpen ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { EMU_SNP_PRIVATE *Private; @@ -1062,7 +1043,6 @@ EmuSnpThunkOpen ( return EFI_OUT_OF_RESOURCES; } - Private->Signature = EMU_SNP_PRIVATE_SIGNATURE; Private->Thunk = This; CopyMem (&Private->EmuSnp, &gEmuSnpProtocol, sizeof (gEmuSnpProtocol)); @@ -1073,10 +1053,9 @@ EmuSnpThunkOpen ( return EFI_SUCCESS; } - EFI_STATUS EmuSnpThunkClose ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { EMU_SNP_PRIVATE *Private; @@ -1091,9 +1070,7 @@ EmuSnpThunkClose ( return EFI_SUCCESS; } - - -EMU_IO_THUNK_PROTOCOL gSnpThunkIo = { +EMU_IO_THUNK_PROTOCOL gSnpThunkIo = { &gEmuSnpProtocolGuid, NULL, NULL, diff --git a/EmulatorPkg/Unix/Host/BlockIo.c b/EmulatorPkg/Unix/Host/BlockIo.c index e3d7c52a43..cf2d6b4cda 100644 --- a/EmulatorPkg/Unix/Host/BlockIo.c +++ b/EmulatorPkg/Unix/Host/BlockIo.c @@ -7,41 +7,37 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "Host.h" -#define EMU_BLOCK_IO_PRIVATE_SIGNATURE SIGNATURE_32 ('E', 'M', 'b', 'k') +#define EMU_BLOCK_IO_PRIVATE_SIGNATURE SIGNATURE_32 ('E', 'M', 'b', 'k') typedef struct { - UINTN Signature; + UINTN Signature; - EMU_IO_THUNK_PROTOCOL *Thunk; + EMU_IO_THUNK_PROTOCOL *Thunk; - char *Filename; - UINTN ReadMode; - UINTN Mode; + char *Filename; + UINTN ReadMode; + UINTN Mode; - int fd; + int fd; - BOOLEAN RemovableMedia; - BOOLEAN WriteProtected; + BOOLEAN RemovableMedia; + BOOLEAN WriteProtected; - UINT64 NumberOfBlocks; - UINT32 BlockSize; - - EMU_BLOCK_IO_PROTOCOL EmuBlockIo; - EFI_BLOCK_IO_MEDIA *Media; + UINT64 NumberOfBlocks; + UINT32 BlockSize; + EMU_BLOCK_IO_PROTOCOL EmuBlockIo; + EFI_BLOCK_IO_MEDIA *Media; } EMU_BLOCK_IO_PRIVATE; #define EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS(a) \ CR(a, EMU_BLOCK_IO_PRIVATE, EmuBlockIo, EMU_BLOCK_IO_PRIVATE_SIGNATURE) - - EFI_STATUS EmuBlockIoReset ( - IN EMU_BLOCK_IO_PROTOCOL *This, - IN BOOLEAN ExtendedVerification + IN EMU_BLOCK_IO_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ); - /*++ This function extends the capability of SetFilePointer to accept 64 bit parameters @@ -49,18 +45,18 @@ This function extends the capability of SetFilePointer to accept 64 bit paramete **/ EFI_STATUS SetFilePointer64 ( - IN EMU_BLOCK_IO_PRIVATE *Private, - IN INT64 DistanceToMove, - OUT UINT64 *NewFilePointer, - IN INT32 MoveMethod + IN EMU_BLOCK_IO_PRIVATE *Private, + IN INT64 DistanceToMove, + OUT UINT64 *NewFilePointer, + IN INT32 MoveMethod ) { - EFI_STATUS Status; - off_t res; - off_t offset = DistanceToMove; + EFI_STATUS Status; + off_t res; + off_t offset = DistanceToMove; Status = EFI_SUCCESS; - res = lseek (Private->fd, offset, (int)MoveMethod); + res = lseek (Private->fd, offset, (int)MoveMethod); if (res == -1) { Status = EFI_INVALID_PARAMETER; } @@ -72,16 +68,14 @@ SetFilePointer64 ( return Status; } - EFI_STATUS EmuBlockIoOpenDevice ( - IN EMU_BLOCK_IO_PRIVATE *Private + IN EMU_BLOCK_IO_PRIVATE *Private ) { - EFI_STATUS Status; - UINT64 FileSize; - struct statfs buf; - + EFI_STATUS Status; + UINT64 FileSize; + struct statfs buf; // // If the device is already opened, close it @@ -95,9 +89,9 @@ EmuBlockIoOpenDevice ( // Private->fd = open (Private->Filename, Private->Mode, 0644); if (Private->fd < 0) { - printf ("EmuOpenBlock: Could not open %s: %s\n", Private->Filename, strerror(errno)); - Private->Media->MediaPresent = FALSE; - Status = EFI_NO_MEDIA; + printf ("EmuOpenBlock: Could not open %s: %s\n", Private->Filename, strerror (errno)); + Private->Media->MediaPresent = FALSE; + Status = EFI_NO_MEDIA; goto Done; } @@ -120,13 +114,14 @@ EmuBlockIoOpenDevice ( if (FileSize == 0) { // lseek fails on a real device. ioctl calls are OS specific -#if __APPLE__ + #if __APPLE__ { - UINT32 BlockSize; + UINT32 BlockSize; if (ioctl (Private->fd, DKIOCGETBLOCKSIZE, &BlockSize) == 0) { Private->Media->BlockSize = BlockSize; } + if (ioctl (Private->fd, DKIOCGETBLOCKCOUNT, &Private->NumberOfBlocks) == 0) { if ((Private->NumberOfBlocks == 0) && (BlockSize == 0x800)) { // A DVD is ~ 4.37 GB so make up a number @@ -135,34 +130,35 @@ EmuBlockIoOpenDevice ( Private->Media->LastBlock = Private->NumberOfBlocks - 1; } } + ioctl (Private->fd, DKIOCGETMAXBLOCKCOUNTWRITE, &Private->Media->OptimalTransferLengthGranularity); } -#else + #else { - size_t BlockSize; - UINT64 DiskSize; + size_t BlockSize; + UINT64 DiskSize; if (ioctl (Private->fd, BLKSSZGET, &BlockSize) == 0) { Private->Media->BlockSize = BlockSize; } + if (ioctl (Private->fd, BLKGETSIZE64, &DiskSize) == 0) { - Private->NumberOfBlocks = DivU64x32 (DiskSize, (UINT32)BlockSize); + Private->NumberOfBlocks = DivU64x32 (DiskSize, (UINT32)BlockSize); Private->Media->LastBlock = Private->NumberOfBlocks - 1; } } -#endif - + #endif } else { Private->Media->BlockSize = Private->BlockSize; - Private->NumberOfBlocks = DivU64x32 (FileSize, Private->Media->BlockSize); + Private->NumberOfBlocks = DivU64x32 (FileSize, Private->Media->BlockSize); Private->Media->LastBlock = Private->NumberOfBlocks - 1; if (fstatfs (Private->fd, &buf) == 0) { -#if __APPLE__ + #if __APPLE__ Private->Media->OptimalTransferLengthGranularity = buf.f_iosize/buf.f_bsize; -#else + #else Private->Media->OptimalTransferLengthGranularity = buf.f_bsize/buf.f_bsize; -#endif + #endif } } @@ -179,15 +175,14 @@ Done: return Status; } - EFI_STATUS EmuBlockIoCreateMapping ( - IN EMU_BLOCK_IO_PROTOCOL *This, - IN EFI_BLOCK_IO_MEDIA *Media + IN EMU_BLOCK_IO_PROTOCOL *This, + IN EFI_BLOCK_IO_MEDIA *Media ) { - EFI_STATUS Status; - EMU_BLOCK_IO_PRIVATE *Private; + EFI_STATUS Status; + EMU_BLOCK_IO_PRIVATE *Private; Private = EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This); @@ -206,66 +201,61 @@ EmuBlockIoCreateMapping ( Media->LowestAlignedLba = 0; Media->LogicalBlocksPerPhysicalBlock = 0; - // EFI_BLOCK_IO_PROTOCOL_REVISION3 Media->OptimalTransferLengthGranularity = 0; Status = EmuBlockIoOpenDevice (Private); - return Status; } - EFI_STATUS EmuBlockIoError ( - IN EMU_BLOCK_IO_PRIVATE *Private + IN EMU_BLOCK_IO_PRIVATE *Private ) { - EFI_STATUS Status; - BOOLEAN ReinstallBlockIoFlag; - + EFI_STATUS Status; + BOOLEAN ReinstallBlockIoFlag; switch (errno) { - - case EAGAIN: - Status = EFI_NO_MEDIA; - Private->Media->ReadOnly = FALSE; - Private->Media->MediaPresent = FALSE; - ReinstallBlockIoFlag = FALSE; - break; - - case EACCES: - Private->Media->ReadOnly = FALSE; - Private->Media->MediaPresent = TRUE; - Private->Media->MediaId += 1; - ReinstallBlockIoFlag = TRUE; - Status = EFI_MEDIA_CHANGED; - break; - - case EROFS: - Private->Media->ReadOnly = TRUE; - ReinstallBlockIoFlag = FALSE; - Status = EFI_WRITE_PROTECTED; - break; - - default: - ReinstallBlockIoFlag = FALSE; - Status = EFI_DEVICE_ERROR; - break; + case EAGAIN: + Status = EFI_NO_MEDIA; + Private->Media->ReadOnly = FALSE; + Private->Media->MediaPresent = FALSE; + ReinstallBlockIoFlag = FALSE; + break; + + case EACCES: + Private->Media->ReadOnly = FALSE; + Private->Media->MediaPresent = TRUE; + Private->Media->MediaId += 1; + ReinstallBlockIoFlag = TRUE; + Status = EFI_MEDIA_CHANGED; + break; + + case EROFS: + Private->Media->ReadOnly = TRUE; + ReinstallBlockIoFlag = FALSE; + Status = EFI_WRITE_PROTECTED; + break; + + default: + ReinstallBlockIoFlag = FALSE; + Status = EFI_DEVICE_ERROR; + break; } + return Status; } - EFI_STATUS EmuBlockIoReadWriteCommon ( - IN EMU_BLOCK_IO_PRIVATE *Private, - IN UINT32 MediaId, - IN EFI_LBA Lba, - IN UINTN BufferSize, - IN VOID *Buffer, - IN CHAR8 *CallerName + IN EMU_BLOCK_IO_PRIVATE *Private, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSize, + IN VOID *Buffer, + IN CHAR8 *CallerName ) { EFI_STATUS Status; @@ -290,7 +280,7 @@ EmuBlockIoReadWriteCommon ( return EFI_MEDIA_CHANGED; } - if ((UINTN) Buffer % Private->Media->IoAlign != 0) { + if ((UINTN)Buffer % Private->Media->IoAlign != 0) { return EFI_INVALID_PARAMETER; } @@ -313,11 +303,12 @@ EmuBlockIoReadWriteCommon ( DEBUG ((DEBUG_INIT, "ReadBlocks: Attempted to read off end of device\n")); return EFI_INVALID_PARAMETER; } + // // Seek to End of File // DistanceToMove = MultU64x32 (Lba, BlockSize); - Status = SetFilePointer64 (Private, DistanceToMove, &DistanceMoved, SEEK_SET); + Status = SetFilePointer64 (Private, DistanceToMove, &DistanceMoved, SEEK_SET); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_INIT, "WriteBlocks: SetFilePointer failed\n")); @@ -327,7 +318,6 @@ EmuBlockIoReadWriteCommon ( return EFI_SUCCESS; } - /** Read BufferSize bytes from Lba into Buffer. @@ -368,16 +358,16 @@ EmuBlockIoReadBlocks ( IN EFI_LBA LBA, IN OUT EFI_BLOCK_IO2_TOKEN *Token, IN UINTN BufferSize, - OUT VOID *Buffer + OUT VOID *Buffer ) { - EFI_STATUS Status; - EMU_BLOCK_IO_PRIVATE *Private; - ssize_t len; + EFI_STATUS Status; + EMU_BLOCK_IO_PRIVATE *Private; + ssize_t len; Private = EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This); - Status = EmuBlockIoReadWriteCommon (Private, MediaId, LBA, BufferSize, Buffer, "UnixReadBlocks"); + Status = EmuBlockIoReadWriteCommon (Private, MediaId, LBA, BufferSize, Buffer, "UnixReadBlocks"); if (EFI_ERROR (Status)) { goto Done; } @@ -393,7 +383,7 @@ EmuBlockIoReadBlocks ( // If we read then media is present. // Private->Media->MediaPresent = TRUE; - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; Done: if (Token != NULL) { @@ -403,10 +393,10 @@ Done: return EFI_SUCCESS; } } + return Status; } - /** Write BufferSize bytes from Lba into Buffer. @@ -448,14 +438,13 @@ EmuBlockIoWriteBlocks ( IN VOID *Buffer ) { - EMU_BLOCK_IO_PRIVATE *Private; - ssize_t len; - EFI_STATUS Status; - + EMU_BLOCK_IO_PRIVATE *Private; + ssize_t len; + EFI_STATUS Status; Private = EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This); - Status = EmuBlockIoReadWriteCommon (Private, MediaId, LBA, BufferSize, Buffer, "UnixWriteBlocks"); + Status = EmuBlockIoReadWriteCommon (Private, MediaId, LBA, BufferSize, Buffer, "UnixWriteBlocks"); if (EFI_ERROR (Status)) { goto Done; } @@ -472,7 +461,7 @@ EmuBlockIoWriteBlocks ( // Private->Media->MediaPresent = TRUE; Private->Media->ReadOnly = FALSE; - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; Done: if (Token != NULL) { @@ -486,7 +475,6 @@ Done: return Status; } - /** Flush the Block Device. @@ -511,22 +499,21 @@ Done: **/ EFI_STATUS EmuBlockIoFlushBlocks ( - IN EMU_BLOCK_IO_PROTOCOL *This, - IN OUT EFI_BLOCK_IO2_TOKEN *Token + IN EMU_BLOCK_IO_PROTOCOL *This, + IN OUT EFI_BLOCK_IO2_TOKEN *Token ) { - EMU_BLOCK_IO_PRIVATE *Private; + EMU_BLOCK_IO_PRIVATE *Private; Private = EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This); if (Private->fd >= 0) { fsync (Private->fd); -#if __APPLE__ + #if __APPLE__ fcntl (Private->fd, F_FULLFSYNC); -#endif + #endif } - if (Token != NULL) { if (Token->Event != NULL) { // Caller is responsible for signaling EFI Event @@ -538,7 +525,6 @@ EmuBlockIoFlushBlocks ( return EFI_SUCCESS; } - /** Reset the block device hardware. @@ -554,11 +540,11 @@ EmuBlockIoFlushBlocks ( **/ EFI_STATUS EmuBlockIoReset ( - IN EMU_BLOCK_IO_PROTOCOL *This, - IN BOOLEAN ExtendedVerification + IN EMU_BLOCK_IO_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ) { - EMU_BLOCK_IO_PRIVATE *Private; + EMU_BLOCK_IO_PRIVATE *Private; Private = EMU_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This); @@ -570,17 +556,16 @@ EmuBlockIoReset ( return EFI_SUCCESS; } - char * StdDupUnicodeToAscii ( - IN CHAR16 *Str + IN CHAR16 *Str ) { - UINTN Size; - char *Ascii; - char *Ptr; + UINTN Size; + char *Ascii; + char *Ptr; - Size = StrLen (Str) + 1; + Size = StrLen (Str) + 1; Ascii = malloc (Size); if (Ascii == NULL) { return NULL; @@ -589,13 +574,13 @@ StdDupUnicodeToAscii ( for (Ptr = Ascii; *Str != '\0'; Ptr++, Str++) { *Ptr = *Str; } + *Ptr = 0; return Ascii; } - -EMU_BLOCK_IO_PROTOCOL gEmuBlockIoProtocol = { +EMU_BLOCK_IO_PROTOCOL gEmuBlockIoProtocol = { GasketEmuBlockIoReset, GasketEmuBlockIoReadBlocks, GasketEmuBlockIoWriteBlocks, @@ -605,7 +590,7 @@ EMU_BLOCK_IO_PROTOCOL gEmuBlockIoProtocol = { EFI_STATUS EmuBlockIoThunkOpen ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { EMU_BLOCK_IO_PRIVATE *Private; @@ -624,7 +609,6 @@ EmuBlockIoThunkOpen ( return EFI_OUT_OF_RESOURCES; } - Private->Signature = EMU_BLOCK_IO_PRIVATE_SIGNATURE; Private->Thunk = This; CopyMem (&Private->EmuBlockIo, &gEmuBlockIoProtocol, sizeof (gEmuBlockIoProtocol)); @@ -642,12 +626,14 @@ EmuBlockIoThunkOpen ( Private->WriteProtected = FALSE; } else { for (*Str++ = '\0'; *Str != 0; Str++) { - if (*Str == 'R' || *Str == 'F') { - Private->RemovableMedia = (BOOLEAN) (*Str == 'R'); + if ((*Str == 'R') || (*Str == 'F')) { + Private->RemovableMedia = (BOOLEAN)(*Str == 'R'); } - if (*Str == 'O' || *Str == 'W') { - Private->WriteProtected = (BOOLEAN) (*Str == 'O'); + + if ((*Str == 'O') || (*Str == 'W')) { + Private->WriteProtected = (BOOLEAN)(*Str == 'O'); } + if (*Str == ':') { Private->BlockSize = strtol (++Str, NULL, 0); break; @@ -662,10 +648,9 @@ EmuBlockIoThunkOpen ( return EFI_SUCCESS; } - EFI_STATUS EmuBlockIoThunkClose ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { EMU_BLOCK_IO_PRIVATE *Private; @@ -680,6 +665,7 @@ EmuBlockIoThunkClose ( if (Private->Filename != NULL) { free (Private->Filename); } + free (This->Private); This->Private = NULL; } @@ -687,9 +673,7 @@ EmuBlockIoThunkClose ( return EFI_SUCCESS; } - - -EMU_IO_THUNK_PROTOCOL gBlockIoThunkIo = { +EMU_IO_THUNK_PROTOCOL gBlockIoThunkIo = { &gEmuBlockIoProtocolGuid, NULL, NULL, diff --git a/EmulatorPkg/Unix/Host/EmuThunk.c b/EmulatorPkg/Unix/Host/EmuThunk.c index b8b0651c6a..6422f056a6 100644 --- a/EmulatorPkg/Unix/Host/EmuThunk.c +++ b/EmulatorPkg/Unix/Host/EmuThunk.c @@ -18,43 +18,41 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "Host.h" #ifdef __APPLE__ -#define DebugAssert _Mangle__DebugAssert +#define DebugAssert _Mangle__DebugAssert -#include -#include -#include -#include + #include + #include + #include + #include -#undef DebugAssert + #undef DebugAssert #endif -int settimer_initialized; -struct timeval settimer_timeval; -UINTN settimer_callback = 0; - -BOOLEAN gEmulatorInterruptEnabled = FALSE; +int settimer_initialized; +struct timeval settimer_timeval; +UINTN settimer_callback = 0; +BOOLEAN gEmulatorInterruptEnabled = FALSE; UINTN SecWriteStdErr ( - IN UINT8 *Buffer, - IN UINTN NumberOfBytes + IN UINT8 *Buffer, + IN UINTN NumberOfBytes ) { - ssize_t Return; + ssize_t Return; Return = write (STDERR_FILENO, (const void *)Buffer, (size_t)NumberOfBytes); return (Return == -1) ? 0 : Return; } - EFI_STATUS SecConfigStdIn ( VOID ) { - struct termios tty; + struct termios tty; // // Need to turn off line buffering, ECHO, and make it unbuffered. @@ -63,7 +61,7 @@ SecConfigStdIn ( tty.c_lflag &= ~(ICANON | ECHO); tcsetattr (STDIN_FILENO, TCSANOW, &tty); -// setvbuf (STDIN_FILENO, NULL, _IONBF, 0); + // setvbuf (STDIN_FILENO, NULL, _IONBF, 0); // now ioctl FIONREAD will do what we need return EFI_SUCCESS; @@ -71,11 +69,11 @@ SecConfigStdIn ( UINTN SecWriteStdOut ( - IN UINT8 *Buffer, - IN UINTN NumberOfBytes + IN UINT8 *Buffer, + IN UINTN NumberOfBytes ) { - ssize_t Return; + ssize_t Return; Return = write (STDOUT_FILENO, (const void *)Buffer, (size_t)NumberOfBytes); @@ -84,11 +82,11 @@ SecWriteStdOut ( UINTN SecReadStdIn ( - IN UINT8 *Buffer, - IN UINTN NumberOfBytes + IN UINT8 *Buffer, + IN UINTN NumberOfBytes ) { - ssize_t Return; + ssize_t Return; Return = read (STDIN_FILENO, Buffer, (size_t)NumberOfBytes); @@ -100,8 +98,8 @@ SecPollStdIn ( VOID ) { - int Result; - int Bytes; + int Result; + int Bytes; Result = ioctl (STDIN_FILENO, FIONREAD, &Bytes); if (Result == -1) { @@ -111,10 +109,9 @@ SecPollStdIn ( return (BOOLEAN)(Bytes > 0); } - VOID * SecMalloc ( - IN UINTN Size + IN UINTN Size ) { return malloc ((size_t)Size); @@ -122,7 +119,7 @@ SecMalloc ( VOID * SecValloc ( - IN UINTN Size + IN UINTN Size ) { return valloc ((size_t)Size); @@ -130,7 +127,7 @@ SecValloc ( BOOLEAN SecFree ( - IN VOID *Ptr + IN VOID *Ptr ) { if (EfiSystemMemoryRange (Ptr)) { @@ -143,17 +140,18 @@ SecFree ( return TRUE; } - void -settimer_handler (int sig) +settimer_handler ( + int sig + ) { - struct timeval timeval; - UINT64 delta; + struct timeval timeval; + UINT64 delta; gettimeofday (&timeval, NULL); delta = ((UINT64)timeval.tv_sec * 1000) + (timeval.tv_usec / 1000) - - ((UINT64)settimer_timeval.tv_sec * 1000) - - (settimer_timeval.tv_usec / 1000); + - ((UINT64)settimer_timeval.tv_sec * 1000) + - (settimer_timeval.tv_usec / 1000); settimer_timeval = timeval; if (settimer_callback) { @@ -167,37 +165,39 @@ SecSetTimer ( IN EMU_SET_TIMER_CALLBACK CallBack ) { - struct itimerval timerval; - UINT32 remainder; + struct itimerval timerval; + UINT32 remainder; if (!settimer_initialized) { - struct sigaction act; + struct sigaction act; settimer_initialized = 1; - act.sa_handler = settimer_handler; - act.sa_flags = 0; + act.sa_handler = settimer_handler; + act.sa_flags = 0; sigemptyset (&act.sa_mask); gEmulatorInterruptEnabled = TRUE; if (sigaction (SIGALRM, &act, NULL) != 0) { printf ("SetTimer: sigaction error %s\n", strerror (errno)); } + if (gettimeofday (&settimer_timeval, NULL) != 0) { printf ("SetTimer: gettimeofday error %s\n", strerror (errno)); } } - timerval.it_value.tv_sec = DivU64x32(PeriodMs, 1000); - DivU64x32Remainder(PeriodMs, 1000, &remainder); + + timerval.it_value.tv_sec = DivU64x32 (PeriodMs, 1000); + DivU64x32Remainder (PeriodMs, 1000, &remainder); timerval.it_value.tv_usec = remainder * 1000; - timerval.it_value.tv_sec = DivU64x32(PeriodMs, 1000); - timerval.it_interval = timerval.it_value; + timerval.it_value.tv_sec = DivU64x32 (PeriodMs, 1000); + timerval.it_interval = timerval.it_value; if (setitimer (ITIMER_REAL, &timerval, NULL) != 0) { printf ("SetTimer: setitimer error %s\n", strerror (errno)); } + settimer_callback = (UINTN)CallBack; } - VOID SecEnableInterrupt ( VOID @@ -213,7 +213,6 @@ SecEnableInterrupt ( pthread_sigmask (SIG_UNBLOCK, &sigset, NULL); } - VOID SecDisableInterrupt ( VOID @@ -229,14 +228,14 @@ SecDisableInterrupt ( gEmulatorInterruptEnabled = FALSE; } - BOOLEAN -SecInterruptEanbled (void) +SecInterruptEanbled ( + void + ) { return gEmulatorInterruptEnabled; } - UINT64 QueryPerformanceFrequency ( VOID @@ -251,10 +250,9 @@ QueryPerformanceCounter ( VOID ) { -#if __APPLE__ - UINT64 Start; - static mach_timebase_info_data_t sTimebaseInfo; - + #if __APPLE__ + UINT64 Start; + static mach_timebase_info_data_t sTimebaseInfo; Start = mach_absolute_time (); @@ -266,29 +264,27 @@ QueryPerformanceCounter ( // denominator is a fraction. if ( sTimebaseInfo.denom == 0 ) { - (void) mach_timebase_info(&sTimebaseInfo); + (void)mach_timebase_info (&sTimebaseInfo); } // Do the maths. We hope that the multiplication doesn't // overflow; the price you pay for working in fixed point. return (Start * sTimebaseInfo.numer) / sTimebaseInfo.denom; -#else + #else // Need to figure out what to do for Linux? return 0; -#endif + #endif } - - VOID SecSleep ( - IN UINT64 Nanoseconds + IN UINT64 Nanoseconds ) { - struct timespec rq, rm; - struct timeval start, end; - unsigned long MicroSec; + struct timespec rq, rm; + struct timeval start, end; + unsigned long MicroSec; rq.tv_sec = DivU64x32 (Nanoseconds, 1000000000); rq.tv_nsec = ModU64x32 (Nanoseconds, 1000000000); @@ -299,7 +295,7 @@ SecSleep ( // gettimeofday (&start, NULL); end.tv_sec = start.tv_sec + rq.tv_sec; - MicroSec = (start.tv_usec + rq.tv_nsec/1000); + MicroSec = (start.tv_usec + rq.tv_nsec/1000); end.tv_usec = MicroSec % 1000000; if (MicroSec > 1000000) { end.tv_sec++; @@ -309,23 +305,26 @@ SecSleep ( if (errno != EINTR) { break; } + gettimeofday (&start, NULL); if (start.tv_sec > end.tv_sec) { break; - } if ((start.tv_sec == end.tv_sec) && (start.tv_usec > end.tv_usec)) { + } + + if ((start.tv_sec == end.tv_sec) && (start.tv_usec > end.tv_usec)) { break; } + rq = rm; } } - VOID SecCpuSleep ( VOID ) { - struct timespec rq, rm; + struct timespec rq, rm; // nanosleep gets interrupted by the timer tic rq.tv_sec = 1; @@ -334,51 +333,47 @@ SecCpuSleep ( nanosleep (&rq, &rm); } - VOID SecExit ( - UINTN Status + UINTN Status ) { exit (Status); } - VOID SecGetTime ( - OUT EFI_TIME *Time, - OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL + OUT EFI_TIME *Time, + OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL ) { - struct tm *tm; - time_t t; + struct tm *tm; + time_t t; - t = time (NULL); + t = time (NULL); tm = localtime (&t); - Time->Year = 1900 + tm->tm_year; - Time->Month = tm->tm_mon + 1; - Time->Day = tm->tm_mday; - Time->Hour = tm->tm_hour; - Time->Minute = tm->tm_min; - Time->Second = tm->tm_sec; + Time->Year = 1900 + tm->tm_year; + Time->Month = tm->tm_mon + 1; + Time->Day = tm->tm_mday; + Time->Hour = tm->tm_hour; + Time->Minute = tm->tm_min; + Time->Second = tm->tm_sec; Time->Nanosecond = 0; - Time->TimeZone = timezone / 60; - Time->Daylight = (daylight ? EFI_TIME_ADJUST_DAYLIGHT : 0) - | (tm->tm_isdst > 0 ? EFI_TIME_IN_DAYLIGHT : 0); + Time->TimeZone = timezone / 60; + Time->Daylight = (daylight ? EFI_TIME_ADJUST_DAYLIGHT : 0) + | (tm->tm_isdst > 0 ? EFI_TIME_IN_DAYLIGHT : 0); if (Capabilities != NULL) { - Capabilities->Resolution = 1; - Capabilities->Accuracy = 50000000; - Capabilities->SetsToZero = FALSE; + Capabilities->Resolution = 1; + Capabilities->Accuracy = 50000000; + Capabilities->SetsToZero = FALSE; } } - - VOID SecSetTime ( - IN EFI_TIME *Time + IN EFI_TIME *Time ) { // Don't change the time on the system @@ -386,18 +381,16 @@ SecSetTime ( return; } - EFI_STATUS SecGetNextProtocol ( - IN BOOLEAN EmuBusDriver, - OUT EMU_IO_THUNK_PROTOCOL **Instance OPTIONAL + IN BOOLEAN EmuBusDriver, + OUT EMU_IO_THUNK_PROTOCOL **Instance OPTIONAL ) { return GetNextThunkProtocol (EmuBusDriver, Instance); } - -EMU_THUNK_PROTOCOL gEmuThunkProtocol = { +EMU_THUNK_PROTOCOL gEmuThunkProtocol = { GasketSecWriteStdErr, GasketSecConfigStdIn, GasketSecWriteStdOut, @@ -422,7 +415,6 @@ EMU_THUNK_PROTOCOL gEmuThunkProtocol = { GasketSecGetNextProtocol }; - VOID SecInitThunkProtocol ( VOID @@ -431,4 +423,3 @@ SecInitThunkProtocol ( // timezone and daylight lib globals depend on tzset be called 1st. tzset (); } - diff --git a/EmulatorPkg/Unix/Host/Gasket.h b/EmulatorPkg/Unix/Host/Gasket.h index e082397d23..6dafc903cf 100644 --- a/EmulatorPkg/Unix/Host/Gasket.h +++ b/EmulatorPkg/Unix/Host/Gasket.h @@ -17,8 +17,8 @@ UINTN EFIAPI GasketSecWriteStdErr ( - IN UINT8 *Buffer, - IN UINTN NumberOfBytes + IN UINT8 *Buffer, + IN UINTN NumberOfBytes ); EFI_STATUS @@ -30,15 +30,15 @@ GasketSecConfigStdIn ( UINTN EFIAPI GasketSecWriteStdOut ( - IN UINT8 *Buffer, - IN UINTN NumberOfBytes + IN UINT8 *Buffer, + IN UINTN NumberOfBytes ); UINTN EFIAPI GasketSecReadStdIn ( - IN UINT8 *Buffer, - IN UINTN NumberOfBytes + IN UINT8 *Buffer, + IN UINTN NumberOfBytes ); BOOLEAN @@ -50,22 +50,21 @@ GasketSecPollStdIn ( VOID * EFIAPI GasketSecMalloc ( - IN UINTN Size + IN UINTN Size ); VOID * EFIAPI GasketSecValloc ( - IN UINTN Size + IN UINTN Size ); BOOLEAN EFIAPI GasketSecFree ( - IN VOID *Ptr + IN VOID *Ptr ); - RETURN_STATUS EFIAPI GasketSecPeCoffGetEntryPoint ( @@ -116,11 +115,10 @@ GasketQueryPerformanceCounter ( VOID ); - VOID EFIAPI GasketSecSleep ( - IN UINT64 Nanoseconds + IN UINT64 Nanoseconds ); VOID @@ -132,33 +130,31 @@ GasketSecCpuSleep ( VOID EFIAPI GasketSecExit ( - UINTN Status + UINTN Status ); VOID EFIAPI GasketSecGetTime ( - OUT EFI_TIME *Time, - OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL + OUT EFI_TIME *Time, + OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL ); VOID EFIAPI GasketSecSetTime ( - IN EFI_TIME *Time + IN EFI_TIME *Time ); EFI_STATUS EFIAPI GasketSecGetNextProtocol ( - IN BOOLEAN EmuBusDriver, - OUT EMU_IO_THUNK_PROTOCOL **Instance OPTIONAL + IN BOOLEAN EmuBusDriver, + OUT EMU_IO_THUNK_PROTOCOL **Instance OPTIONAL ); - // PPIs produced by SEC - EFI_STATUS EFIAPI GasketSecUnixPeiAutoScan ( @@ -173,7 +169,6 @@ GasketSecEmuThunkAddress ( VOID ); - EFI_STATUS EFIAPI GasketSecUnixUnixFwhAddress ( @@ -181,55 +176,52 @@ GasketSecUnixUnixFwhAddress ( IN OUT EFI_PHYSICAL_ADDRESS *FwhBase ); - - // // Reverse (UNIX to EFIAPI) gaskets // typedef void -(EFIAPI *CALL_BACK) ( +(EFIAPI *CALL_BACK)( UINT64 Delta ); UINTN ReverseGasketUint64 ( - UINTN CallBack, - UINT64 a + UINTN CallBack, + UINT64 a ); UINTN ReverseGasketUint64Uint64 ( - VOID *CallBack, - VOID *Context, - VOID *Key + VOID *CallBack, + VOID *Context, + VOID *Key ); // // Gasket functions for EFI_EMU_UGA_IO_PROTOCOL // - EFI_STATUS EFIAPI GasketX11Size ( - EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo, - UINT32 Width, - UINT32 Height + EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo, + UINT32 Width, + UINT32 Height ); EFI_STATUS EFIAPI GasketX11CheckKey ( - EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo + EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo ); EFI_STATUS EFIAPI GasketX11GetKey ( - EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo, - EFI_KEY_DATA *key + EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo, + EFI_KEY_DATA *key ); EFI_STATUS @@ -242,45 +234,44 @@ GasketX11KeySetState ( EFI_STATUS EFIAPI GasketX11RegisterKeyNotify ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo, - IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack, - IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack, - IN VOID *Context + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo, + IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack, + IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack, + IN VOID *Context ); - EFI_STATUS EFIAPI GasketX11Blt ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows, - IN EFI_UGA_PIXEL *BltBuffer OPTIONAL, - IN EFI_UGA_BLT_OPERATION BltOperation, - IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows, + IN EFI_UGA_PIXEL *BltBuffer OPTIONAL, + IN EFI_UGA_BLT_OPERATION BltOperation, + IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args ); EFI_STATUS EFIAPI GasketX11CheckPointer ( - EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo + EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo ); EFI_STATUS EFIAPI GasketX11GetPointerState ( - EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo, - EFI_SIMPLE_POINTER_STATE *state + EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindowsIo, + EFI_SIMPLE_POINTER_STATE *state ); EFI_STATUS EFIAPI GasketX11GraphicsWindowOpen ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ); EFI_STATUS EFIAPI GasketX11GraphicsWindowClose ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ); // Pthreads @@ -288,55 +279,48 @@ GasketX11GraphicsWindowClose ( UINTN EFIAPI GasketPthreadMutexLock ( - IN VOID *Mutex + IN VOID *Mutex ); - - UINTN EFIAPI GasketPthreadMutexUnLock ( - IN VOID *Mutex + IN VOID *Mutex ); - UINTN EFIAPI GasketPthreadMutexTryLock ( - IN VOID *Mutex + IN VOID *Mutex ); - VOID * EFIAPI GasketPthreadMutexInit ( IN VOID ); - UINTN EFIAPI GasketPthreadMutexDestroy ( - IN VOID *Mutex + IN VOID *Mutex ); - UINTN EFIAPI GasketPthreadCreate ( - IN VOID *Thread, - IN VOID *Attribute, - IN THREAD_THUNK_THREAD_ENTRY Start, - IN VOID *Context + IN VOID *Thread, + IN VOID *Attribute, + IN THREAD_THUNK_THREAD_ENTRY Start, + IN VOID *Context ); VOID EFIAPI GasketPthreadExit ( - IN VOID *ValuePtr + IN VOID *ValuePtr ); - UINTN EFIAPI GasketPthreadSelf ( @@ -346,33 +330,32 @@ GasketPthreadSelf ( EFI_STATUS EFIAPI GasketPthreadOpen ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ); EFI_STATUS EFIAPI GasketPthreadClose ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ); - // PosixFileSystem EFI_STATUS EFIAPI GasketPosixOpenVolume ( - IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **Root + IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **Root ); EFI_STATUS EFIAPI GasketPosixFileOpen ( - IN EFI_FILE_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **NewHandle, - IN CHAR16 *FileName, - IN UINT64 OpenMode, - IN UINT64 Attributes + IN EFI_FILE_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **NewHandle, + IN CHAR16 *FileName, + IN UINT64 OpenMode, + IN UINT64 Attributes ); EFI_STATUS @@ -390,49 +373,49 @@ GasketPosixFileDelete ( EFI_STATUS EFIAPI GasketPosixFileRead ( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ); EFI_STATUS EFIAPI GasketPosixFileWrite ( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + IN VOID *Buffer ); EFI_STATUS EFIAPI GasketPosixFileSetPossition ( - IN EFI_FILE_PROTOCOL *This, - IN UINT64 Position + IN EFI_FILE_PROTOCOL *This, + IN UINT64 Position ); EFI_STATUS EFIAPI GasketPosixFileGetPossition ( - IN EFI_FILE_PROTOCOL *This, - OUT UINT64 *Position + IN EFI_FILE_PROTOCOL *This, + OUT UINT64 *Position ); EFI_STATUS EFIAPI GasketPosixFileGetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ); EFI_STATUS EFIAPI GasketPosixFileSetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN UINTN BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN UINTN BufferSize, + IN VOID *Buffer ); EFI_STATUS @@ -444,20 +427,20 @@ GasketPosixFileFlush ( EFI_STATUS EFIAPI GasketPosixFileSystmeThunkOpen ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ); EFI_STATUS EFIAPI GasketPosixFileSystmeThunkClose ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ); EFI_STATUS EFIAPI GasketEmuBlockIoReset ( - IN EMU_BLOCK_IO_PROTOCOL *This, - IN BOOLEAN ExtendedVerification + IN EMU_BLOCK_IO_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ); EFI_STATUS @@ -468,7 +451,7 @@ GasketEmuBlockIoReadBlocks ( IN EFI_LBA LBA, IN OUT EFI_BLOCK_IO2_TOKEN *Token, IN UINTN BufferSize, - OUT VOID *Buffer + OUT VOID *Buffer ); EFI_STATUS @@ -485,39 +468,39 @@ GasketEmuBlockIoWriteBlocks ( EFI_STATUS EFIAPI GasketEmuBlockIoFlushBlocks ( - IN EMU_BLOCK_IO_PROTOCOL *This, - IN OUT EFI_BLOCK_IO2_TOKEN *Token + IN EMU_BLOCK_IO_PROTOCOL *This, + IN OUT EFI_BLOCK_IO2_TOKEN *Token ); EFI_STATUS EFIAPI GasketEmuBlockIoCreateMapping ( - IN EMU_BLOCK_IO_PROTOCOL *This, - IN EFI_BLOCK_IO_MEDIA *Media + IN EMU_BLOCK_IO_PROTOCOL *This, + IN EFI_BLOCK_IO_MEDIA *Media ); EFI_STATUS EFIAPI GasketBlockIoThunkOpen ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ); EFI_STATUS EFIAPI GasketBlockIoThunkClose ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ); EFI_STATUS EFIAPI GasketSnpThunkOpen ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ); EFI_STATUS EFIAPI GasketSnpThunkClose ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ); EFI_STATUS @@ -542,16 +525,16 @@ GasketSnpStop ( EFI_STATUS EFIAPI GasketSnpInitialize ( - IN EMU_SNP_PROTOCOL *This, - IN UINTN ExtraRxBufferSize OPTIONAL, - IN UINTN ExtraTxBufferSize OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN UINTN ExtraRxBufferSize OPTIONAL, + IN UINTN ExtraTxBufferSize OPTIONAL ); EFI_STATUS EFIAPI GasketSnpReset ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN ExtendedVerification + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ); EFI_STATUS @@ -563,83 +546,80 @@ GasketSnpShutdown ( EFI_STATUS EFIAPI GasketSnpReceiveFilters ( - IN EMU_SNP_PROTOCOL *This, - IN UINT32 Enable, - IN UINT32 Disable, - IN BOOLEAN ResetMCastFilter, - IN UINTN MCastFilterCnt OPTIONAL, - IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN UINT32 Enable, + IN UINT32 Disable, + IN BOOLEAN ResetMCastFilter, + IN UINTN MCastFilterCnt OPTIONAL, + IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL ); EFI_STATUS EFIAPI GasketSnpStationAddress ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN Reset, - IN EFI_MAC_ADDRESS *New OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN Reset, + IN EFI_MAC_ADDRESS *New OPTIONAL ); EFI_STATUS EFIAPI GasketSnpStatistics ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN Reset, - IN OUT UINTN *StatisticsSize OPTIONAL, - OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN Reset, + IN OUT UINTN *StatisticsSize OPTIONAL, + OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL ); EFI_STATUS EFIAPI GasketSnpMCastIpToMac ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN IPv6, - IN EFI_IP_ADDRESS *IP, - OUT EFI_MAC_ADDRESS *MAC + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN IPv6, + IN EFI_IP_ADDRESS *IP, + OUT EFI_MAC_ADDRESS *MAC ); EFI_STATUS EFIAPI GasketSnpNvData ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN ReadWrite, - IN UINTN Offset, - IN UINTN BufferSize, - IN OUT VOID *Buffer + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN ReadWrite, + IN UINTN Offset, + IN UINTN BufferSize, + IN OUT VOID *Buffer ); EFI_STATUS EFIAPI GasketSnpGetStatus ( - IN EMU_SNP_PROTOCOL *This, - OUT UINT32 *InterruptStatus OPTIONAL, - OUT VOID **TxBuf OPTIONAL + IN EMU_SNP_PROTOCOL *This, + OUT UINT32 *InterruptStatus OPTIONAL, + OUT VOID **TxBuf OPTIONAL ); EFI_STATUS EFIAPI GasketSnpTransmit ( - IN EMU_SNP_PROTOCOL *This, - IN UINTN HeaderSize, - IN UINTN BufferSize, - IN VOID *Buffer, - IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, - IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, - IN UINT16 *Protocol OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN UINTN HeaderSize, + IN UINTN BufferSize, + IN VOID *Buffer, + IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, + IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, + IN UINT16 *Protocol OPTIONAL ); EFI_STATUS EFIAPI GasketSnpReceive ( - IN EMU_SNP_PROTOCOL *This, - OUT UINTN *HeaderSize OPTIONAL, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer, - OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, - OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, - OUT UINT16 *Protocol OPTIONAL + IN EMU_SNP_PROTOCOL *This, + OUT UINTN *HeaderSize OPTIONAL, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer, + OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, + OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, + OUT UINT16 *Protocol OPTIONAL ); - #endif - - diff --git a/EmulatorPkg/Unix/Host/Host.c b/EmulatorPkg/Unix/Host/Host.c index b4e5510613..38c01c84af 100644 --- a/EmulatorPkg/Unix/Host/Host.c +++ b/EmulatorPkg/Unix/Host/Host.c @@ -9,23 +9,21 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "Host.h" #ifdef __APPLE__ -#define MAP_ANONYMOUS MAP_ANON +#define MAP_ANONYMOUS MAP_ANON #endif - // // Globals // -EMU_THUNK_PPI mSecEmuThunkPpi = { +EMU_THUNK_PPI mSecEmuThunkPpi = { GasketSecUnixPeiAutoScan, GasketSecUnixFdAddress, GasketSecEmuThunkAddress }; -char *gGdbWorkingFileName = NULL; -unsigned int mScriptSymbolChangesCount = 0; - +char *gGdbWorkingFileName = NULL; +unsigned int mScriptSymbolChangesCount = 0; // // Default information about where the FD is located. @@ -34,8 +32,8 @@ unsigned int mScriptSymbolChangesCount = 0; // The number of array elements is allocated base on parsing // EFI_FIRMWARE_VOLUMES and the memory is never freed. // -UINTN gFdInfoCount = 0; -EMU_FD_INFO *gFdInfo; +UINTN gFdInfoCount = 0; +EMU_FD_INFO *gFdInfo; // // Array that supports separate memory ranges. @@ -46,16 +44,12 @@ EMU_FD_INFO *gFdInfo; UINTN gSystemMemoryCount = 0; EMU_SYSTEM_MEMORY *gSystemMemory; - - UINTN mImageContextModHandleArraySize = 0; -IMAGE_CONTEXT_TO_MOD_HANDLE *mImageContextModHandleArray = NULL; +IMAGE_CONTEXT_TO_MOD_HANDLE *mImageContextModHandleArray = NULL; EFI_PEI_PPI_DESCRIPTOR *gPpiList; - -int gInXcode = 0; - +int gInXcode = 0; /*++ Breakpoint target for Xcode project. Set in the Xcode XML @@ -71,8 +65,6 @@ SecGdbConfigBreak ( { } - - /*++ Routine Description: @@ -121,8 +113,8 @@ main ( // If dlopen doesn't work, then we build a gdb script to allow the // symbols to be loaded. // - Index = strlen (*Argv); - gGdbWorkingFileName = AllocatePool (Index + strlen(".gdb") + 1); + Index = strlen (*Argv); + gGdbWorkingFileName = AllocatePool (Index + strlen (".gdb") + 1); strcpy (gGdbWorkingFileName, *Argv); strcat (gGdbWorkingFileName, ".gdb"); @@ -139,8 +131,8 @@ main ( setbuf (stdout, 0); setbuf (stderr, 0); - MemorySizeStr = (CHAR16 *) PcdGetPtr (PcdEmuMemorySize); - FirmwareVolumesStr = (CHAR16 *) PcdGetPtr (PcdEmuFirmwareVolume); + MemorySizeStr = (CHAR16 *)PcdGetPtr (PcdEmuMemorySize); + FirmwareVolumesStr = (CHAR16 *)PcdGetPtr (PcdEmuFirmwareVolume); // // PPIs pased into PEI_CORE @@ -169,17 +161,18 @@ main ( // // Allocate space for gSystemMemory Array // - gSystemMemoryCount = CountSeparatorsInString (MemorySizeStr, '!') + 1; - gSystemMemory = AllocateZeroPool (gSystemMemoryCount * sizeof (EMU_SYSTEM_MEMORY)); + gSystemMemoryCount = CountSeparatorsInString (MemorySizeStr, '!') + 1; + gSystemMemory = AllocateZeroPool (gSystemMemoryCount * sizeof (EMU_SYSTEM_MEMORY)); if (gSystemMemory == NULL) { printf ("ERROR : Can not allocate memory for system. Exiting.\n"); exit (1); } + // // Allocate space for gSystemMemory Array // - gFdInfoCount = CountSeparatorsInString (FirmwareVolumesStr, '!') + 1; - gFdInfo = AllocateZeroPool (gFdInfoCount * sizeof (EMU_FD_INFO)); + gFdInfoCount = CountSeparatorsInString (FirmwareVolumesStr, '!') + 1; + gFdInfo = AllocateZeroPool (gFdInfoCount * sizeof (EMU_FD_INFO)); if (gFdInfo == NULL) { printf ("ERROR : Can not allocate memory for fd info. Exiting.\n"); exit (1); @@ -192,31 +185,35 @@ main ( // on a real platform this would be SRAM, or using the cache as RAM. // Set InitialStackMemory to zero so UnixOpenFile will allocate a new mapping // - InitialStackMemorySize = STACK_SIZE; - InitialStackMemory = (UINTN)MapMemory ( - 0, (UINT32) InitialStackMemorySize, - PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANONYMOUS | MAP_PRIVATE - ); + InitialStackMemorySize = STACK_SIZE; + InitialStackMemory = (UINTN)MapMemory ( + 0, + (UINT32)InitialStackMemorySize, + PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_ANONYMOUS | MAP_PRIVATE + ); if (InitialStackMemory == 0) { printf ("ERROR : Can not open SecStack Exiting\n"); exit (1); } - printf (" OS Emulator passing in %u KB of temp RAM at 0x%08lx to SEC\n", + printf ( + " OS Emulator passing in %u KB of temp RAM at 0x%08lx to SEC\n", (unsigned int)(InitialStackMemorySize / 1024), (unsigned long)InitialStackMemory ); - for (StackPointer = (UINTN*) (UINTN) InitialStackMemory; - StackPointer < (UINTN*)(UINTN)((UINTN) InitialStackMemory + (UINT64) InitialStackMemorySize); - StackPointer ++) { + for (StackPointer = (UINTN *)(UINTN)InitialStackMemory; + StackPointer < (UINTN *)(UINTN)((UINTN)InitialStackMemory + (UINT64)InitialStackMemorySize); + StackPointer++) + { *StackPointer = 0x5AA55AA5; } // // Open All the firmware volumes and remember the info in the gFdInfo global // - FileName = (CHAR8 *) AllocatePool (StrLen (FirmwareVolumesStr) + 1); + FileName = (CHAR8 *)AllocatePool (StrLen (FirmwareVolumesStr) + 1); if (FileName == NULL) { printf ("ERROR : Can not allocate memory for firmware volume string\n"); exit (1); @@ -225,39 +222,43 @@ main ( Index2 = 0; for (Done = FALSE, Index = 0, PeiIndex = 0, SecFile = NULL; FirmwareVolumesStr[Index2] != 0; - Index++) { + Index++) + { for (Index1 = 0; (FirmwareVolumesStr[Index2] != '!') && (FirmwareVolumesStr[Index2] != 0); Index2++) { FileName[Index1++] = FirmwareVolumesStr[Index2]; } + if (FirmwareVolumesStr[Index2] == '!') { Index2++; } - FileName[Index1] = '\0'; + + FileName[Index1] = '\0'; if (Index == 0) { // Map FV Recovery Read Only and other areas Read/Write Status = MapFd0 ( - FileName, - &gFdInfo[0].Address, - &gFdInfo[0].Size - ); + FileName, + &gFdInfo[0].Address, + &gFdInfo[0].Size + ); } else { // // Open the FD and remember where it got mapped into our processes address space // Maps Read Only // Status = MapFile ( - FileName, - &gFdInfo[Index].Address, - &gFdInfo[Index].Size - ); + FileName, + &gFdInfo[Index].Address, + &gFdInfo[Index].Size + ); } + if (EFI_ERROR (Status)) { printf ("ERROR : Can not open Firmware Device File %s (%x). Exiting.\n", FileName, (unsigned int)Status); exit (1); } - printf (" FD loaded from %s at 0x%08lx",FileName, (unsigned long)gFdInfo[Index].Address); + printf (" FD loaded from %s at 0x%08lx", FileName, (unsigned long)gFdInfo[Index].Address); if (SecFile == NULL) { // @@ -265,11 +266,11 @@ main ( // Load the first one we find. // FileHandle = NULL; - Status = PeiServicesFfsFindNextFile ( - EFI_FV_FILETYPE_SECURITY_CORE, - (EFI_PEI_FV_HANDLE)(UINTN)gFdInfo[Index].Address, - &FileHandle - ); + Status = PeiServicesFfsFindNextFile ( + EFI_FV_FILETYPE_SECURITY_CORE, + (EFI_PEI_FV_HANDLE)(UINTN)gFdInfo[Index].Address, + &FileHandle + ); if (!EFI_ERROR (Status)) { Status = PeiServicesFfsFindSectionData (EFI_SECTION_PE32, FileHandle, &SecFile); if (!EFI_ERROR (Status)) { @@ -293,9 +294,9 @@ main ( // map this memory into the SEC process memory space. // Index1 = 0; - Index = 0; + Index = 0; while (1) { - UINTN val = 0; + UINTN val = 0; // // Save the size of the memory. // @@ -303,10 +304,12 @@ main ( val = val * 10 + MemorySizeStr[Index1] - '0'; Index1++; } + gSystemMemory[Index++].Size = val * 0x100000; if (MemorySizeStr[Index1] == 0) { break; } + Index1++; } @@ -315,7 +318,7 @@ main ( // // Hand off to SEC // - SecLoadFromCore ((UINTN) InitialStackMemory, (UINTN) InitialStackMemorySize, (UINTN) gFdInfo[0].Address, SecFile); + SecLoadFromCore ((UINTN)InitialStackMemory, (UINTN)InitialStackMemorySize, (UINTN)gFdInfo[0].Address, SecFile); // // If we get here, then the SEC Core returned. This is an error as SEC should @@ -325,40 +328,40 @@ main ( exit (1); } - EFI_PHYSICAL_ADDRESS * MapMemory ( - IN INTN fd, - IN UINT64 length, - IN INTN prot, - IN INTN flags + IN INTN fd, + IN UINT64 length, + IN INTN prot, + IN INTN flags ) { - STATIC UINTN base = 0x40000000; - CONST UINTN align = (1 << 24); - VOID *res = NULL; - BOOLEAN isAligned = 0; + STATIC UINTN base = 0x40000000; + CONST UINTN align = (1 << 24); + VOID *res = NULL; + BOOLEAN isAligned = 0; // // Try to get an aligned block somewhere in the address space of this // process. // - while((!isAligned) && (base != 0)) { + while ((!isAligned) && (base != 0)) { res = mmap ((void *)base, length, prot, flags, fd, 0); if (res == MAP_FAILED) { return NULL; } + if ((((UINTN)res) & ~(align-1)) == (UINTN)res) { - isAligned=1; + isAligned = 1; } else { - munmap(res, length); + munmap (res, length); base += align; } } + return res; } - /*++ Routine Description: @@ -389,16 +392,16 @@ MapFile ( OUT UINT64 *Length ) { - int fd; - VOID *res; - UINTN FileSize; + int fd; + VOID *res; + UINTN FileSize; fd = open (FileName, O_RDWR); if (fd < 0) { return EFI_NOT_FOUND; } - FileSize = lseek (fd, 0, SEEK_END); + FileSize = lseek (fd, 0, SEEK_END); res = MapMemory (fd, FileSize, PROT_READ | PROT_EXEC, MAP_PRIVATE); @@ -409,8 +412,8 @@ MapFile ( return EFI_DEVICE_ERROR; } - *Length = (UINT64) FileSize; - *BaseAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) res; + *Length = (UINT64)FileSize; + *BaseAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)res; return EFI_SUCCESS; } @@ -422,16 +425,17 @@ MapFd0 ( OUT UINT64 *Length ) { - int fd; - void *res, *res2, *res3; - UINTN FileSize; - UINTN FvSize; - void *EmuMagicPage; + int fd; + void *res, *res2, *res3; + UINTN FileSize; + UINTN FvSize; + void *EmuMagicPage; fd = open (FileName, O_RDWR); if (fd < 0) { return EFI_NOT_FOUND; } + FileSize = lseek (fd, 0, SEEK_END); FvSize = FixedPcdGet64 (PcdEmuFlashFvRecoverySize); @@ -469,13 +473,13 @@ MapFd0 ( // Map the rest of the FD as read/write res2 = mmap ( - (void *)(UINTN)(FixedPcdGet64 (PcdEmuFlashFvRecoveryBase) + FvSize), - FileSize - FvSize, - PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_SHARED, - fd, - FvSize - ); + (void *)(UINTN)(FixedPcdGet64 (PcdEmuFlashFvRecoveryBase) + FvSize), + FileSize - FvSize, + PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_SHARED, + fd, + FvSize + ); close (fd); if (res2 == MAP_FAILED) { perror ("MapFd0() Failed res2 ="); @@ -504,13 +508,12 @@ MapFd0 ( } } - *Length = (UINT64) FileSize; - *BaseAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) res; + *Length = (UINT64)FileSize; + *BaseAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)res; return EFI_SUCCESS; } - /*++ Routine Description: @@ -528,24 +531,24 @@ Returns: **/ VOID SecLoadFromCore ( - IN UINTN LargestRegion, - IN UINTN LargestRegionSize, - IN UINTN BootFirmwareVolumeBase, - IN VOID *PeiCorePe32File + IN UINTN LargestRegion, + IN UINTN LargestRegionSize, + IN UINTN BootFirmwareVolumeBase, + IN VOID *PeiCorePe32File ) { - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS TopOfMemory; - VOID *TopOfStack; - EFI_PHYSICAL_ADDRESS PeiCoreEntryPoint; - EFI_SEC_PEI_HAND_OFF *SecCoreData; - UINTN PeiStackSize; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS TopOfMemory; + VOID *TopOfStack; + EFI_PHYSICAL_ADDRESS PeiCoreEntryPoint; + EFI_SEC_PEI_HAND_OFF *SecCoreData; + UINTN PeiStackSize; // // Compute Top Of Memory for Stack and PEI Core Allocations // TopOfMemory = LargestRegion + LargestRegionSize; - PeiStackSize = (UINTN)RShiftU64((UINT64)STACK_SIZE,1); + PeiStackSize = (UINTN)RShiftU64 ((UINT64)STACK_SIZE, 1); // // |-----------| <---- TemporaryRamBase + TemporaryRamSize @@ -562,22 +565,21 @@ SecLoadFromCore ( // // Reservet space for storing PeiCore's parament in stack. // - TopOfStack = (VOID *)((UINTN)TopOfStack - sizeof (EFI_SEC_PEI_HAND_OFF) - CPU_STACK_ALIGNMENT); - TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT); - + TopOfStack = (VOID *)((UINTN)TopOfStack - sizeof (EFI_SEC_PEI_HAND_OFF) - CPU_STACK_ALIGNMENT); + TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT); // // Bind this information into the SEC hand-off state // - SecCoreData = (EFI_SEC_PEI_HAND_OFF*)(UINTN) TopOfStack; - SecCoreData->DataSize = sizeof(EFI_SEC_PEI_HAND_OFF); - SecCoreData->BootFirmwareVolumeBase = (VOID*)BootFirmwareVolumeBase; + SecCoreData = (EFI_SEC_PEI_HAND_OFF *)(UINTN)TopOfStack; + SecCoreData->DataSize = sizeof (EFI_SEC_PEI_HAND_OFF); + SecCoreData->BootFirmwareVolumeBase = (VOID *)BootFirmwareVolumeBase; SecCoreData->BootFirmwareVolumeSize = PcdGet32 (PcdEmuFirmwareFdSize); - SecCoreData->TemporaryRamBase = (VOID*)(UINTN)LargestRegion; + SecCoreData->TemporaryRamBase = (VOID *)(UINTN)LargestRegion; SecCoreData->TemporaryRamSize = STACK_SIZE; SecCoreData->StackBase = SecCoreData->TemporaryRamBase; SecCoreData->StackSize = PeiStackSize; - SecCoreData->PeiTemporaryRamBase = (VOID*) ((UINTN) SecCoreData->TemporaryRamBase + PeiStackSize); + SecCoreData->PeiTemporaryRamBase = (VOID *)((UINTN)SecCoreData->TemporaryRamBase + PeiStackSize); SecCoreData->PeiTemporaryRamSize = STACK_SIZE - PeiStackSize; // @@ -585,14 +587,14 @@ SecLoadFromCore ( // Status = SecPeCoffGetEntryPoint (PeiCorePe32File, (VOID **)&PeiCoreEntryPoint); if (EFI_ERROR (Status)) { - return ; + return; } // // Transfer control to the SEC Core // PeiSwitchStacks ( - (SWITCH_STACK_ENTRY_POINT) (UINTN) PeiCoreEntryPoint, + (SWITCH_STACK_ENTRY_POINT)(UINTN)PeiCoreEntryPoint, SecCoreData, (VOID *)gPpiList, TopOfStack @@ -600,10 +602,9 @@ SecLoadFromCore ( // // If we get here, then the SEC Core returned. This is an error // - return ; + return; } - /*++ Routine Description: @@ -631,29 +632,30 @@ SecUnixPeiAutoScan ( OUT UINT64 *MemorySize ) { - void *res; + void *res; if (Index >= gSystemMemoryCount) { return EFI_UNSUPPORTED; } *MemoryBase = 0; - res = MapMemory ( - 0, gSystemMemory[Index].Size, - PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANONYMOUS - ); + res = MapMemory ( + 0, + gSystemMemory[Index].Size, + PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANONYMOUS + ); if (res == MAP_FAILED) { return EFI_DEVICE_ERROR; } - *MemorySize = gSystemMemory[Index].Size; - *MemoryBase = (UINTN)res; + + *MemorySize = gSystemMemory[Index].Size; + *MemoryBase = (UINTN)res; gSystemMemory[Index].Memory = *MemoryBase; return EFI_SUCCESS; } - /*++ Routine Description: @@ -675,7 +677,7 @@ Returns: **/ BOOLEAN EfiSystemMemoryRange ( - IN VOID *MemoryAddress + IN VOID *MemoryAddress ) { UINTN Index; @@ -684,7 +686,8 @@ EfiSystemMemoryRange ( MemoryBase = (EFI_PHYSICAL_ADDRESS)(UINTN)MemoryAddress; for (Index = 0; Index < gSystemMemoryCount; Index++) { if ((MemoryBase >= gSystemMemory[Index].Memory) && - (MemoryBase < (gSystemMemory[Index].Memory + gSystemMemory[Index].Size)) ) { + (MemoryBase < (gSystemMemory[Index].Memory + gSystemMemory[Index].Size))) + { return TRUE; } } @@ -692,7 +695,6 @@ EfiSystemMemoryRange ( return FALSE; } - /*++ Routine Description: @@ -715,8 +717,6 @@ SecEmuThunkAddress ( return &gEmuThunkProtocol; } - - RETURN_STATUS EFIAPI SecPeCoffGetEntryPoint ( @@ -728,10 +728,10 @@ SecPeCoffGetEntryPoint ( PE_COFF_LOADER_IMAGE_CONTEXT ImageContext; ZeroMem (&ImageContext, sizeof (ImageContext)); - ImageContext.Handle = Pe32Data; - ImageContext.ImageRead = (PE_COFF_LOADER_READ_FILE) SecImageRead; + ImageContext.Handle = Pe32Data; + ImageContext.ImageRead = (PE_COFF_LOADER_READ_FILE)SecImageRead; - Status = PeCoffLoaderGetImageInfo (&ImageContext); + Status = PeCoffLoaderGetImageInfo (&ImageContext); if (EFI_ERROR (Status)) { return Status; } @@ -741,7 +741,7 @@ SecPeCoffGetEntryPoint ( // Relocate image to match the address where it resides // ImageContext.ImageAddress = (UINTN)Pe32Data; - Status = PeCoffLoaderLoadImage (&ImageContext); + Status = PeCoffLoaderLoadImage (&ImageContext); if (EFI_ERROR (Status)) { return Status; } @@ -755,10 +755,11 @@ SecPeCoffGetEntryPoint ( // Or just return image entry point // ImageContext.PdbPointer = PeCoffLoaderGetPdbPointer (Pe32Data); - Status = PeCoffLoaderGetEntryPoint (Pe32Data, EntryPoint); + Status = PeCoffLoaderGetEntryPoint (Pe32Data, EntryPoint); if (EFI_ERROR (Status)) { return Status; } + ImageContext.EntryPoint = (UINTN)*EntryPoint; } @@ -769,8 +770,6 @@ SecPeCoffGetEntryPoint ( return Status; } - - /*++ Routine Description: @@ -804,7 +803,7 @@ SecUnixFdAddress ( *FdSize = gFdInfo[Index].Size; *FixUp = 0; - if (*FdBase == 0 && *FdSize == 0) { + if ((*FdBase == 0) && (*FdSize == 0)) { return EFI_UNSUPPORTED; } @@ -820,7 +819,6 @@ SecUnixFdAddress ( return EFI_SUCCESS; } - /*++ Routine Description: @@ -836,11 +834,11 @@ Returns: **/ UINTN CountSeparatorsInString ( - IN const CHAR16 *String, - IN CHAR16 Separator + IN const CHAR16 *String, + IN CHAR16 Separator ) { - UINTN Count; + UINTN Count; for (Count = 0; *String != '\0'; String++) { if (*String == Separator) { @@ -851,15 +849,15 @@ CountSeparatorsInString ( return Count; } - EFI_STATUS EFIAPI SecImageRead ( - IN VOID *FileHandle, - IN UINTN FileOffset, - IN OUT UINTN *ReadSize, - OUT VOID *Buffer + IN VOID *FileHandle, + IN UINTN FileOffset, + IN OUT UINTN *ReadSize, + OUT VOID *Buffer ) + /*++ Routine Description: @@ -876,13 +874,13 @@ Returns: **/ { - CHAR8 *Destination8; - CHAR8 *Source8; - UINTN Length; + CHAR8 *Destination8; + CHAR8 *Source8; + UINTN Length; - Destination8 = Buffer; - Source8 = (CHAR8 *) ((UINTN) FileHandle + FileOffset); - Length = *ReadSize; + Destination8 = Buffer; + Source8 = (CHAR8 *)((UINTN)FileHandle + FileOffset); + Length = *ReadSize; while (Length--) { *(Destination8++) = *(Source8++); } @@ -890,7 +888,6 @@ Returns: return EFI_SUCCESS; } - /*++ Routine Description: @@ -909,14 +906,13 @@ Returns: **/ EFI_STATUS AddHandle ( - IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext, - IN VOID *ModHandle + IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext, + IN VOID *ModHandle ) { - UINTN Index; - IMAGE_CONTEXT_TO_MOD_HANDLE *Array; - UINTN PreviousSize; - + UINTN Index; + IMAGE_CONTEXT_TO_MOD_HANDLE *Array; + UINTN PreviousSize; Array = mImageContextModHandleArray; for (Index = 0; Index < mImageContextModHandleArraySize; Index++, Array++) { @@ -936,7 +932,7 @@ AddHandle ( // copy the old values to the new location. But it does // not zero the new memory area. // - PreviousSize = mImageContextModHandleArraySize * sizeof (IMAGE_CONTEXT_TO_MOD_HANDLE); + PreviousSize = mImageContextModHandleArraySize * sizeof (IMAGE_CONTEXT_TO_MOD_HANDLE); mImageContextModHandleArraySize += MAX_IMAGE_CONTEXT_TO_MOD_HANDLE_ARRAY_SIZE; mImageContextModHandleArray = ReallocatePool ( @@ -954,7 +950,6 @@ AddHandle ( return AddHandle (ImageContext, ModHandle); } - /*++ Routine Description: @@ -971,7 +966,7 @@ Returns: **/ VOID * RemoveHandle ( - IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext ) { UINTN Index; @@ -998,60 +993,60 @@ RemoveHandle ( return NULL; } - - BOOLEAN IsPdbFile ( - IN CHAR8 *PdbFileName + IN CHAR8 *PdbFileName ) { - UINTN Len; + UINTN Len; if (PdbFileName == NULL) { return FALSE; } Len = strlen (PdbFileName); - if ((Len < 5)|| (PdbFileName[Len - 4] != '.')) { + if ((Len < 5) || (PdbFileName[Len - 4] != '.')) { return FALSE; } - if ((PdbFileName[Len - 3] == 'P' || PdbFileName[Len - 3] == 'p') && - (PdbFileName[Len - 2] == 'D' || PdbFileName[Len - 2] == 'd') && - (PdbFileName[Len - 1] == 'B' || PdbFileName[Len - 1] == 'b')) { + if (((PdbFileName[Len - 3] == 'P') || (PdbFileName[Len - 3] == 'p')) && + ((PdbFileName[Len - 2] == 'D') || (PdbFileName[Len - 2] == 'd')) && + ((PdbFileName[Len - 1] == 'B') || (PdbFileName[Len - 1] == 'b'))) + { return TRUE; } return FALSE; } - -#define MAX_SPRINT_BUFFER_SIZE 0x200 +#define MAX_SPRINT_BUFFER_SIZE 0x200 void PrintLoadAddress ( - IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext ) { if (ImageContext->PdbPointer == NULL) { - fprintf (stderr, + fprintf ( + stderr, "0x%08lx Loading NO DEBUG with entry point 0x%08lx\n", (unsigned long)(ImageContext->ImageAddress), (unsigned long)ImageContext->EntryPoint ); } else { - fprintf (stderr, + fprintf ( + stderr, "0x%08lx Loading %s with entry point 0x%08lx\n", (unsigned long)(ImageContext->ImageAddress + ImageContext->SizeOfHeaders), ImageContext->PdbPointer, (unsigned long)ImageContext->EntryPoint ); } + // Keep output synced up fflush (stderr); } - /** Loads the image using dlopen so symbols will be automatically loaded by gdb. @@ -1064,18 +1059,17 @@ PrintLoadAddress ( **/ BOOLEAN DlLoadImage ( - IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext ) { - -#ifdef __APPLE__ + #ifdef __APPLE__ return FALSE; -#else + #else - void *Handle = NULL; - void *Entry = NULL; + void *Handle = NULL; + void *Entry = NULL; if (ImageContext->PdbPointer == NULL) { return FALSE; @@ -1086,19 +1080,19 @@ DlLoadImage ( } fprintf ( - stderr, - "Loading %s 0x%08lx - entry point 0x%08lx\n", - ImageContext->PdbPointer, - (unsigned long)ImageContext->ImageAddress, - (unsigned long)ImageContext->EntryPoint - ); + stderr, + "Loading %s 0x%08lx - entry point 0x%08lx\n", + ImageContext->PdbPointer, + (unsigned long)ImageContext->ImageAddress, + (unsigned long)ImageContext->EntryPoint + ); Handle = dlopen (ImageContext->PdbPointer, RTLD_NOW); if (Handle != NULL) { Entry = dlsym (Handle, "_ModuleEntryPoint"); AddHandle (ImageContext, Handle); } else { - printf("%s\n", dlerror()); + printf ("%s\n", dlerror ()); } if (Entry != NULL) { @@ -1109,25 +1103,23 @@ DlLoadImage ( return FALSE; } -#endif + #endif } - #ifdef __APPLE__ -__attribute__((noinline)) +__attribute__ ((noinline)) #endif VOID SecGdbScriptBreak ( - char *FileName, - int FileNameLength, - long unsigned int LoadAddress, - int AddSymbolFlag + char *FileName, + int FileNameLength, + long unsigned int LoadAddress, + int AddSymbolFlag ) { return; } - /** Adds the image to a gdb script so its symbols can be loaded. The AddFirmwareSymbolFile helper macro is used. @@ -1137,18 +1129,17 @@ SecGdbScriptBreak ( **/ VOID GdbScriptAddImage ( - IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext ) { - PrintLoadAddress (ImageContext); - if (ImageContext->PdbPointer != NULL && !IsPdbFile (ImageContext->PdbPointer)) { + if ((ImageContext->PdbPointer != NULL) && !IsPdbFile (ImageContext->PdbPointer)) { FILE *GdbTempFile; if (FeaturePcdGet (PcdEmulatorLazyLoadSymbols)) { GdbTempFile = fopen (gGdbWorkingFileName, "a"); if (GdbTempFile != NULL) { - long unsigned int SymbolsAddr = (long unsigned int)(ImageContext->ImageAddress + ImageContext->SizeOfHeaders); + long unsigned int SymbolsAddr = (long unsigned int)(ImageContext->ImageAddress + ImageContext->SizeOfHeaders); mScriptSymbolChangesCount++; fprintf ( GdbTempFile, @@ -1188,11 +1179,10 @@ GdbScriptAddImage ( } } - VOID EFIAPI SecPeCoffRelocateImageExtraAction ( - IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext ) { if (!DlLoadImage (ImageContext)) { @@ -1200,7 +1190,6 @@ SecPeCoffRelocateImageExtraAction ( } } - /** Adds the image to a gdb script so its symbols can be unloaded. The RemoveFirmwareSymbolFile helper macro is used. @@ -1210,7 +1199,7 @@ SecPeCoffRelocateImageExtraAction ( **/ VOID GdbScriptRemoveImage ( - IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext ) { FILE *GdbTempFile; @@ -1257,27 +1246,24 @@ GdbScriptRemoveImage ( } } - VOID EFIAPI SecPeCoffUnloadImageExtraAction ( - IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext ) { - VOID *Handle; + VOID *Handle; // // Check to see if the image symbols were loaded with gdb script, or dlopen // Handle = RemoveHandle (ImageContext); if (Handle != NULL) { -#ifndef __APPLE__ + #ifndef __APPLE__ dlclose (Handle); -#endif + #endif return; } GdbScriptRemoveImage (ImageContext); } - - diff --git a/EmulatorPkg/Unix/Host/Host.h b/EmulatorPkg/Unix/Host/Host.h index a372ecaadb..0c81cdfc01 100644 --- a/EmulatorPkg/Unix/Host/Host.h +++ b/EmulatorPkg/Unix/Host/Host.h @@ -30,9 +30,9 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #if __CYGWIN__ -#include + #include #else -#include + #include #endif #include @@ -56,19 +56,19 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #ifdef __APPLE__ -#include -#include -#include -#include -#include + #include + #include + #include + #include + #include #define _XOPEN_SOURCE -#ifndef _Bool - #define _Bool char // for clang debug -#endif + #ifndef _Bool +#define _Bool char // for clang debug + #endif #else -#include -#include -#include + #include + #include + #include #endif #include @@ -120,31 +120,27 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #include - #include "Gasket.h" - -#define STACK_SIZE 0x20000 +#define STACK_SIZE 0x20000 typedef struct { - EFI_PHYSICAL_ADDRESS Address; - UINT64 Size; + EFI_PHYSICAL_ADDRESS Address; + UINT64 Size; } EMU_FD_INFO; typedef struct { - EFI_PHYSICAL_ADDRESS Memory; - UINT64 Size; + EFI_PHYSICAL_ADDRESS Memory; + UINT64 Size; } EMU_SYSTEM_MEMORY; - -#define MAX_IMAGE_CONTEXT_TO_MOD_HANDLE_ARRAY_SIZE 0x100 +#define MAX_IMAGE_CONTEXT_TO_MOD_HANDLE_ARRAY_SIZE 0x100 typedef struct { - PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext; - VOID *ModHandle; + PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext; + VOID *ModHandle; } IMAGE_CONTEXT_TO_MOD_HANDLE; - EFI_STATUS EFIAPI SecUnixPeiLoadFile ( @@ -163,18 +159,18 @@ main ( VOID SecLoadFromCore ( - IN UINTN LargestRegion, - IN UINTN LargestRegionSize, - IN UINTN BootFirmwareVolumeBase, - IN VOID *PeiCoreFile + IN UINTN LargestRegion, + IN UINTN LargestRegionSize, + IN UINTN BootFirmwareVolumeBase, + IN VOID *PeiCoreFile ); EFI_STATUS SecLoadFile ( - IN VOID *Pe32Data, - IN EFI_PHYSICAL_ADDRESS *ImageAddress, - IN UINT64 *ImageSize, - IN EFI_PHYSICAL_ADDRESS *EntryPoint + IN VOID *Pe32Data, + IN EFI_PHYSICAL_ADDRESS *ImageAddress, + IN UINT64 *ImageSize, + IN EFI_PHYSICAL_ADDRESS *EntryPoint ); EFI_STATUS @@ -192,23 +188,23 @@ SecFfsFindNextFile ( EFI_STATUS SecFfsFindSectionData ( - IN EFI_SECTION_TYPE SectionType, - IN EFI_FFS_FILE_HEADER *FfsFileHeader, - IN OUT VOID **SectionData + IN EFI_SECTION_TYPE SectionType, + IN EFI_FFS_FILE_HEADER *FfsFileHeader, + IN OUT VOID **SectionData ); EFI_STATUS EFIAPI SecUnixPeCoffLoaderLoadAsDll ( - IN CHAR8 *PdbFileName, - IN VOID **ImageEntryPoint, - OUT VOID **ModHandle + IN CHAR8 *PdbFileName, + IN VOID **ImageEntryPoint, + OUT VOID **ModHandle ); EFI_STATUS EFIAPI SecUnixPeCoffLoaderFreeLibrary ( - OUT VOID *ModHandle + OUT VOID *ModHandle ); EFI_STATUS @@ -230,53 +226,51 @@ GasketSecUnixFdAddress ( ) ; - EFI_STATUS GetImageReadFunction ( - IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext, - IN EFI_PHYSICAL_ADDRESS *TopOfMemory + IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext, + IN EFI_PHYSICAL_ADDRESS *TopOfMemory ); EFI_STATUS EFIAPI SecImageRead ( - IN VOID *FileHandle, - IN UINTN FileOffset, - IN OUT UINTN *ReadSize, - OUT VOID *Buffer + IN VOID *FileHandle, + IN UINTN FileOffset, + IN OUT UINTN *ReadSize, + OUT VOID *Buffer ); CHAR16 * AsciiToUnicode ( - IN CHAR8 *Ascii, - IN UINTN *StrLen OPTIONAL + IN CHAR8 *Ascii, + IN UINTN *StrLen OPTIONAL ); UINTN CountSeparatorsInString ( - IN const CHAR16 *String, - IN CHAR16 Separator + IN const CHAR16 *String, + IN CHAR16 Separator ); EFI_STATUS EFIAPI SecTemporaryRamSupport ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, - IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, - IN UINTN CopySize + IN CONST EFI_PEI_SERVICES **PeiServices, + IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, + IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, + IN UINTN CopySize ); EFI_STATUS EFIAPI GasketSecTemporaryRamSupport ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, - IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, - IN UINTN CopySize + IN CONST EFI_PEI_SERVICES **PeiServices, + IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, + IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, + IN UINTN CopySize ); - RETURN_STATUS EFIAPI SecPeCoffGetEntryPoint ( @@ -296,7 +290,6 @@ SecPeCoffLoaderUnloadImageExtraAction ( IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext ); - VOID PeiSwitchStacks ( IN SWITCH_STACK_ENTRY_POINT EntryPoint, @@ -310,13 +303,13 @@ SecInitThunkProtocol ( VOID ); - EFI_PHYSICAL_ADDRESS * MapMemory ( - INTN fd, - UINT64 length, - INTN prot, - INTN flags); + INTN fd, + UINT64 length, + INTN prot, + INTN flags + ); EFI_STATUS MapFile ( @@ -334,21 +327,34 @@ MapFd0 ( BOOLEAN EfiSystemMemoryRange ( - IN VOID *MemoryAddress + IN VOID *MemoryAddress + ); + +VOID +SecSleep ( + UINT64 Nanoseconds ); +VOID +SecEnableInterrupt ( + VOID + ); -VOID SecSleep (UINT64 Nanoseconds); -VOID SecEnableInterrupt (VOID); -VOID SecDisableInterrupt (VOID); -BOOLEAN SecInterruptEanbled (VOID); +VOID +SecDisableInterrupt ( + VOID + ); +BOOLEAN +SecInterruptEanbled ( + VOID + ); -extern EMU_THUNK_PROTOCOL gEmuThunkProtocol; -extern EMU_IO_THUNK_PROTOCOL gX11ThunkIo; -extern EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo; -extern EMU_IO_THUNK_PROTOCOL gPthreadThunkIo; -extern EMU_IO_THUNK_PROTOCOL gBlockIoThunkIo; -extern EMU_IO_THUNK_PROTOCOL gSnpThunkIo; +extern EMU_THUNK_PROTOCOL gEmuThunkProtocol; +extern EMU_IO_THUNK_PROTOCOL gX11ThunkIo; +extern EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo; +extern EMU_IO_THUNK_PROTOCOL gPthreadThunkIo; +extern EMU_IO_THUNK_PROTOCOL gBlockIoThunkIo; +extern EMU_IO_THUNK_PROTOCOL gSnpThunkIo; #endif diff --git a/EmulatorPkg/Unix/Host/Ia32/SwitchStack.c b/EmulatorPkg/Unix/Host/Ia32/SwitchStack.c index 0184de2894..18028f3791 100644 --- a/EmulatorPkg/Unix/Host/Ia32/SwitchStack.c +++ b/EmulatorPkg/Unix/Host/Ia32/SwitchStack.c @@ -9,7 +9,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "Host.h" - /** Transfers control to a function starting with a new stack. @@ -49,15 +48,14 @@ PeiSwitchStacks ( // ASSERT (((UINTN)NewStack & (CPU_STACK_ALIGNMENT - 1)) == 0); - JumpBuffer.Eip = (UINTN)EntryPoint; - JumpBuffer.Esp = (UINTN)NewStack - sizeof (VOID*); - JumpBuffer.Esp -= sizeof (Context1) + sizeof (Context2); - ((VOID**)JumpBuffer.Esp)[1] = Context1; - ((VOID**)JumpBuffer.Esp)[2] = Context2; + JumpBuffer.Eip = (UINTN)EntryPoint; + JumpBuffer.Esp = (UINTN)NewStack - sizeof (VOID *); + JumpBuffer.Esp -= sizeof (Context1) + sizeof (Context2); + ((VOID **)JumpBuffer.Esp)[1] = Context1; + ((VOID **)JumpBuffer.Esp)[2] = Context2; LongJump (&JumpBuffer, (UINTN)-1); - // // PeiSwitchStacks () will never return // diff --git a/EmulatorPkg/Unix/Host/LinuxPacketFilter.c b/EmulatorPkg/Unix/Host/LinuxPacketFilter.c index 2b772ab884..87c3dd6be4 100644 --- a/EmulatorPkg/Unix/Host/LinuxPacketFilter.c +++ b/EmulatorPkg/Unix/Host/LinuxPacketFilter.c @@ -12,21 +12,18 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ - #include "Host.h" #ifndef __APPLE__ -#define EMU_SNP_PRIVATE_SIGNATURE SIGNATURE_32('E', 'M', 's', 'n') +#define EMU_SNP_PRIVATE_SIGNATURE SIGNATURE_32('E', 'M', 's', 'n') typedef struct { - UINTN Signature; - - EMU_IO_THUNK_PROTOCOL *Thunk; - + UINTN Signature; - EMU_SNP_PROTOCOL EmuSnp; - EFI_SIMPLE_NETWORK_MODE *Mode; + EMU_IO_THUNK_PROTOCOL *Thunk; + EMU_SNP_PROTOCOL EmuSnp; + EFI_SIMPLE_NETWORK_MODE *Mode; } EMU_SNP_PRIVATE; #define EMU_SNP_PRIVATE_DATA_FROM_THIS(a) \ @@ -48,7 +45,7 @@ EmuSnpCreateMapping ( IN EFI_SIMPLE_NETWORK_MODE *Mode ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -74,7 +71,7 @@ EmuSnpStart ( IN EMU_SNP_PROTOCOL *This ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -98,7 +95,7 @@ EmuSnpStop ( IN EMU_SNP_PROTOCOL *This ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -133,12 +130,12 @@ EmuSnpStop ( **/ EFI_STATUS EmuSnpInitialize ( - IN EMU_SNP_PROTOCOL *This, - IN UINTN ExtraRxBufferSize OPTIONAL, - IN UINTN ExtraTxBufferSize OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN UINTN ExtraRxBufferSize OPTIONAL, + IN UINTN ExtraTxBufferSize OPTIONAL ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -163,11 +160,11 @@ EmuSnpInitialize ( **/ EFI_STATUS EmuSnpReset ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN ExtendedVerification + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -192,7 +189,7 @@ EmuSnpShutdown ( IN EMU_SNP_PROTOCOL *This ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -225,15 +222,15 @@ EmuSnpShutdown ( **/ EFI_STATUS EmuSnpReceiveFilters ( - IN EMU_SNP_PROTOCOL *This, - IN UINT32 Enable, - IN UINT32 Disable, - IN BOOLEAN ResetMCastFilter, - IN UINTN MCastFilterCnt OPTIONAL, - IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN UINT32 Enable, + IN UINT32 Disable, + IN BOOLEAN ResetMCastFilter, + IN UINTN MCastFilterCnt OPTIONAL, + IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -257,12 +254,12 @@ EmuSnpReceiveFilters ( **/ EFI_STATUS EmuSnpStationAddress ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN Reset, - IN EFI_MAC_ADDRESS *New OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN Reset, + IN EFI_MAC_ADDRESS *New OPTIONAL ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -292,13 +289,13 @@ EmuSnpStationAddress ( **/ EFI_STATUS EmuSnpStatistics ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN Reset, - IN OUT UINTN *StatisticsSize OPTIONAL, - OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN Reset, + IN OUT UINTN *StatisticsSize OPTIONAL, + OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -328,13 +325,13 @@ EmuSnpStatistics ( **/ EFI_STATUS EmuSnpMCastIpToMac ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN IPv6, - IN EFI_IP_ADDRESS *IP, - OUT EFI_MAC_ADDRESS *MAC + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN IPv6, + IN EFI_IP_ADDRESS *IP, + OUT EFI_MAC_ADDRESS *MAC ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -363,14 +360,14 @@ EmuSnpMCastIpToMac ( **/ EFI_STATUS EmuSnpNvData ( - IN EMU_SNP_PROTOCOL *This, - IN BOOLEAN ReadWrite, - IN UINTN Offset, - IN UINTN BufferSize, - IN OUT VOID *Buffer + IN EMU_SNP_PROTOCOL *This, + IN BOOLEAN ReadWrite, + IN UINTN Offset, + IN UINTN BufferSize, + IN OUT VOID *Buffer ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -404,12 +401,12 @@ EmuSnpNvData ( **/ EFI_STATUS EmuSnpGetStatus ( - IN EMU_SNP_PROTOCOL *This, - OUT UINT32 *InterruptStatus OPTIONAL, - OUT VOID **TxBuf OPTIONAL + IN EMU_SNP_PROTOCOL *This, + OUT UINT32 *InterruptStatus OPTIONAL, + OUT VOID **TxBuf OPTIONAL ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -451,16 +448,16 @@ EmuSnpGetStatus ( **/ EFI_STATUS EmuSnpTransmit ( - IN EMU_SNP_PROTOCOL *This, - IN UINTN HeaderSize, - IN UINTN BufferSize, - IN VOID *Buffer, - IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, - IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, - IN UINT16 *Protocol OPTIONAL + IN EMU_SNP_PROTOCOL *This, + IN UINTN HeaderSize, + IN UINTN BufferSize, + IN VOID *Buffer, + IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, + IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, + IN UINT16 *Protocol OPTIONAL ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); @@ -501,24 +498,23 @@ EmuSnpTransmit ( **/ EFI_STATUS EmuSnpReceive ( - IN EMU_SNP_PROTOCOL *This, - OUT UINTN *HeaderSize OPTIONAL, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer, - OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, - OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, - OUT UINT16 *Protocol OPTIONAL + IN EMU_SNP_PROTOCOL *This, + OUT UINTN *HeaderSize OPTIONAL, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer, + OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, + OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, + OUT UINT16 *Protocol OPTIONAL ) { - EMU_SNP_PRIVATE *Private; + EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); return EFI_UNSUPPORTED; } - -EMU_SNP_PROTOCOL gEmuSnpProtocol = { +EMU_SNP_PROTOCOL gEmuSnpProtocol = { GasketSnpCreateMapping, GasketSnpStart, GasketSnpStop, @@ -537,7 +533,7 @@ EMU_SNP_PROTOCOL gEmuSnpProtocol = { EFI_STATUS EmuSnpThunkOpen ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { EMU_SNP_PRIVATE *Private; @@ -555,7 +551,6 @@ EmuSnpThunkOpen ( return EFI_OUT_OF_RESOURCES; } - Private->Signature = EMU_SNP_PRIVATE_SIGNATURE; Private->Thunk = This; CopyMem (&Private->EmuSnp, &gEmuSnpProtocol, sizeof (gEmuSnpProtocol)); @@ -565,10 +560,9 @@ EmuSnpThunkOpen ( return EFI_SUCCESS; } - EFI_STATUS EmuSnpThunkClose ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { EMU_SNP_PRIVATE *Private; @@ -583,9 +577,7 @@ EmuSnpThunkClose ( return EFI_SUCCESS; } - - -EMU_IO_THUNK_PROTOCOL gSnpThunkIo = { +EMU_IO_THUNK_PROTOCOL gSnpThunkIo = { &gEmuSnpProtocolGuid, NULL, NULL, diff --git a/EmulatorPkg/Unix/Host/MemoryAllocationLib.c b/EmulatorPkg/Unix/Host/MemoryAllocationLib.c index 456f451c16..4e3c8faa3c 100644 --- a/EmulatorPkg/Unix/Host/MemoryAllocationLib.c +++ b/EmulatorPkg/Unix/Host/MemoryAllocationLib.c @@ -30,10 +30,9 @@ AllocatePool ( IN UINTN AllocationSize ) { - return (VOID*) malloc (AllocationSize); + return (VOID *)malloc (AllocationSize); } - /** Allocates and zeros a buffer of type EfiBootServicesData. @@ -53,7 +52,7 @@ AllocateZeroPool ( IN UINTN AllocationSize ) { - VOID *Buffer; + VOID *Buffer; Buffer = AllocatePool (AllocationSize); if (Buffer == NULL) { @@ -65,7 +64,6 @@ AllocateZeroPool ( return Buffer; } - /** Reallocates a buffer of type EfiBootServicesData. @@ -95,7 +93,7 @@ ReallocatePool ( IN VOID *OldBuffer OPTIONAL ) { - VOID *NewBuffer; + VOID *NewBuffer; NewBuffer = AllocatePool (NewSize); if (NewBuffer == NULL) { @@ -113,7 +111,6 @@ ReallocatePool ( return NewBuffer; } - /** Frees a buffer that was previously allocated with one of the pool allocation functions in the Memory Allocation Library. @@ -131,9 +128,8 @@ ReallocatePool ( VOID EFIAPI FreePool ( - IN VOID *Buffer + IN VOID *Buffer ) { - free ((void *) Buffer); + free ((void *)Buffer); } - diff --git a/EmulatorPkg/Unix/Host/PosixFileSystem.c b/EmulatorPkg/Unix/Host/PosixFileSystem.c index 0a618abcd8..ae3fe72a05 100644 --- a/EmulatorPkg/Unix/Host/PosixFileSystem.c +++ b/EmulatorPkg/Unix/Host/PosixFileSystem.c @@ -10,16 +10,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "Host.h" - -#define EMU_SIMPLE_FILE_SYSTEM_PRIVATE_SIGNATURE SIGNATURE_32 ('E', 'P', 'f', 's') +#define EMU_SIMPLE_FILE_SYSTEM_PRIVATE_SIGNATURE SIGNATURE_32 ('E', 'P', 'f', 's') typedef struct { - UINTN Signature; - EMU_IO_THUNK_PROTOCOL *Thunk; - EFI_SIMPLE_FILE_SYSTEM_PROTOCOL SimpleFileSystem; - CHAR8 *FilePath; - CHAR16 *VolumeLabel; - BOOLEAN FileHandlesOpen; + UINTN Signature; + EMU_IO_THUNK_PROTOCOL *Thunk; + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL SimpleFileSystem; + CHAR8 *FilePath; + CHAR16 *VolumeLabel; + BOOLEAN FileHandlesOpen; } EMU_SIMPLE_FILE_SYSTEM_PRIVATE; #define EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS(a) \ @@ -29,21 +28,20 @@ typedef struct { EMU_SIMPLE_FILE_SYSTEM_PRIVATE_SIGNATURE \ ) - -#define EMU_EFI_FILE_PRIVATE_SIGNATURE SIGNATURE_32 ('E', 'P', 'f', 'i') +#define EMU_EFI_FILE_PRIVATE_SIGNATURE SIGNATURE_32 ('E', 'P', 'f', 'i') typedef struct { - UINTN Signature; - EMU_IO_THUNK_PROTOCOL *Thunk; - EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFileSystem; - EFI_FILE_PROTOCOL EfiFile; - int fd; - DIR *Dir; - BOOLEAN IsRootDirectory; - BOOLEAN IsDirectoryPath; - BOOLEAN IsOpenedByRead; - char *FileName; - struct dirent *Dirent; + UINTN Signature; + EMU_IO_THUNK_PROTOCOL *Thunk; + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFileSystem; + EFI_FILE_PROTOCOL EfiFile; + int fd; + DIR *Dir; + BOOLEAN IsRootDirectory; + BOOLEAN IsDirectoryPath; + BOOLEAN IsOpenedByRead; + char *FileName; + struct dirent *Dirent; } EMU_EFI_FILE_PRIVATE; #define EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS(a) \ @@ -55,22 +53,21 @@ typedef struct { EFI_STATUS PosixFileGetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ); EFI_STATUS PosixFileSetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN UINTN BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN UINTN BufferSize, + IN VOID *Buffer ); - -EFI_FILE_PROTOCOL gPosixFileProtocol = { +EFI_FILE_PROTOCOL gPosixFileProtocol = { EFI_FILE_REVISION, GasketPosixFileOpen, GasketPosixFileCLose, @@ -84,12 +81,11 @@ EFI_FILE_PROTOCOL gPosixFileProtocol = { GasketPosixFileFlush }; -EFI_SIMPLE_FILE_SYSTEM_PROTOCOL gPosixFileSystemProtocol = { +EFI_SIMPLE_FILE_SYSTEM_PROTOCOL gPosixFileSystemProtocol = { EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION, GasketPosixOpenVolume, }; - /** Open the root directory on a volume. @@ -107,17 +103,17 @@ EFI_SIMPLE_FILE_SYSTEM_PROTOCOL gPosixFileSystemProtocol = { **/ EFI_STATUS PosixOpenVolume ( - IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **Root + IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **Root ) { - EFI_STATUS Status; - EMU_SIMPLE_FILE_SYSTEM_PRIVATE *Private; - EMU_EFI_FILE_PRIVATE *PrivateFile; + EFI_STATUS Status; + EMU_SIMPLE_FILE_SYSTEM_PRIVATE *Private; + EMU_EFI_FILE_PRIVATE *PrivateFile; - Private = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (This); + Private = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (This); - Status = EFI_OUT_OF_RESOURCES; + Status = EFI_OUT_OF_RESOURCES; PrivateFile = malloc (sizeof (EMU_EFI_FILE_PRIVATE)); if (PrivateFile == NULL) { goto Done; @@ -127,24 +123,25 @@ PosixOpenVolume ( if (PrivateFile->FileName == NULL) { goto Done; } + AsciiStrCpyS ( PrivateFile->FileName, AsciiStrSize (Private->FilePath), Private->FilePath ); - PrivateFile->Signature = EMU_EFI_FILE_PRIVATE_SIGNATURE; - PrivateFile->Thunk = Private->Thunk; - PrivateFile->SimpleFileSystem = This; - PrivateFile->IsRootDirectory = TRUE; - PrivateFile->IsDirectoryPath = TRUE; - PrivateFile->IsOpenedByRead = TRUE; + PrivateFile->Signature = EMU_EFI_FILE_PRIVATE_SIGNATURE; + PrivateFile->Thunk = Private->Thunk; + PrivateFile->SimpleFileSystem = This; + PrivateFile->IsRootDirectory = TRUE; + PrivateFile->IsDirectoryPath = TRUE; + PrivateFile->IsOpenedByRead = TRUE; CopyMem (&PrivateFile->EfiFile, &gPosixFileProtocol, sizeof (EFI_FILE_PROTOCOL)); - PrivateFile->fd = -1; - PrivateFile->Dir = NULL; - PrivateFile->Dirent = NULL; + PrivateFile->fd = -1; + PrivateFile->Dir = NULL; + PrivateFile->Dirent = NULL; *Root = &PrivateFile->EfiFile; @@ -171,27 +168,27 @@ Done: return Status; } - EFI_STATUS -ErrnoToEfiStatus () +ErrnoToEfiStatus ( + ) { switch (errno) { - case EACCES: - return EFI_ACCESS_DENIED; + case EACCES: + return EFI_ACCESS_DENIED; - case EDQUOT: - case ENOSPC: - return EFI_VOLUME_FULL; + case EDQUOT: + case ENOSPC: + return EFI_VOLUME_FULL; - default: - return EFI_DEVICE_ERROR; + default: + return EFI_DEVICE_ERROR; } } VOID CutPrefix ( IN CHAR8 *Str, - IN UINTN Count + IN UINTN Count ) { CHAR8 *Pointer; @@ -207,53 +204,51 @@ CutPrefix ( *Pointer = *(Pointer + Count); } - VOID PosixSystemTimeToEfiTime ( - IN time_t SystemTime, - OUT EFI_TIME *Time + IN time_t SystemTime, + OUT EFI_TIME *Time ) { - struct tm *tm; - - tm = gmtime (&SystemTime); - Time->Year = tm->tm_year; - Time->Month = tm->tm_mon + 1; - Time->Day = tm->tm_mday; - Time->Hour = tm->tm_hour; - Time->Minute = tm->tm_min; - Time->Second = tm->tm_sec; + struct tm *tm; + + tm = gmtime (&SystemTime); + Time->Year = tm->tm_year; + Time->Month = tm->tm_mon + 1; + Time->Day = tm->tm_mday; + Time->Hour = tm->tm_hour; + Time->Minute = tm->tm_min; + Time->Second = tm->tm_sec; Time->Nanosecond = 0; Time->TimeZone = timezone / 60; Time->Daylight = (daylight ? EFI_TIME_ADJUST_DAYLIGHT : 0) | (tm->tm_isdst > 0 ? EFI_TIME_IN_DAYLIGHT : 0); } - EFI_STATUS UnixSimpleFileSystemFileInfo ( - EMU_EFI_FILE_PRIVATE *PrivateFile, - IN CHAR8 *FileName, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + EMU_EFI_FILE_PRIVATE *PrivateFile, + IN CHAR8 *FileName, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ) { - EFI_STATUS Status; - UINTN Size; - UINTN NameSize; - UINTN ResultSize; - EFI_FILE_INFO *Info; - CHAR8 *RealFileName; - CHAR8 *TempPointer; - CHAR16 *BufferFileName; - struct stat buf; + EFI_STATUS Status; + UINTN Size; + UINTN NameSize; + UINTN ResultSize; + EFI_FILE_INFO *Info; + CHAR8 *RealFileName; + CHAR8 *TempPointer; + CHAR16 *BufferFileName; + struct stat buf; if (FileName != NULL) { RealFileName = FileName; } else if (PrivateFile->IsRootDirectory) { RealFileName = ""; } else { - RealFileName = PrivateFile->FileName; + RealFileName = PrivateFile->FileName; } TempPointer = RealFileName; @@ -265,26 +260,27 @@ UnixSimpleFileSystemFileInfo ( TempPointer++; } - Size = SIZE_OF_EFI_FILE_INFO; - NameSize = AsciiStrSize (RealFileName) * 2; - ResultSize = Size + NameSize; + Size = SIZE_OF_EFI_FILE_INFO; + NameSize = AsciiStrSize (RealFileName) * 2; + ResultSize = Size + NameSize; if (*BufferSize < ResultSize) { *BufferSize = ResultSize; return EFI_BUFFER_TOO_SMALL; } - if (stat (FileName == NULL ? PrivateFile->FileName : FileName, &buf) < 0) { + + if (stat ((FileName == NULL) ? PrivateFile->FileName : FileName, &buf) < 0) { return EFI_DEVICE_ERROR; } - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; - Info = Buffer; + Info = Buffer; ZeroMem (Info, ResultSize); - Info->Size = ResultSize; - Info->FileSize = buf.st_size; - Info->PhysicalSize = MultU64x32 (buf.st_blocks, buf.st_blksize); + Info->Size = ResultSize; + Info->FileSize = buf.st_size; + Info->PhysicalSize = MultU64x32 (buf.st_blocks, buf.st_blksize); PosixSystemTimeToEfiTime (buf.st_ctime, &Info->CreateTime); PosixSystemTimeToEfiTime (buf.st_atime, &Info->LastAccessTime); @@ -294,15 +290,15 @@ UnixSimpleFileSystemFileInfo ( Info->Attribute |= EFI_FILE_READ_ONLY; } - if (S_ISDIR(buf.st_mode)) { + if (S_ISDIR (buf.st_mode)) { Info->Attribute |= EFI_FILE_DIRECTORY; } - - BufferFileName = (CHAR16 *)((CHAR8 *) Buffer + Size); + BufferFileName = (CHAR16 *)((CHAR8 *)Buffer + Size); while (*RealFileName) { *BufferFileName++ = *RealFileName++; } + *BufferFileName = 0; *BufferSize = ResultSize; @@ -315,16 +311,16 @@ IsZero ( IN UINTN Length ) { - if (Buffer == NULL || Length == 0) { + if ((Buffer == NULL) || (Length == 0)) { return FALSE; } - if (*(UINT8 *) Buffer != 0) { + if (*(UINT8 *)Buffer != 0) { return FALSE; } if (Length > 1) { - if (!CompareMem (Buffer, (UINT8 *) Buffer + 1, Length - 1)) { + if (!CompareMem (Buffer, (UINT8 *)Buffer + 1, Length - 1)) { return FALSE; } } @@ -332,8 +328,6 @@ IsZero ( return TRUE; } - - /** Opens a new file relative to the source file's location. @@ -356,37 +350,37 @@ IsZero ( **/ EFI_STATUS PosixFileOpen ( - IN EFI_FILE_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **NewHandle, - IN CHAR16 *FileName, - IN UINT64 OpenMode, - IN UINT64 Attributes + IN EFI_FILE_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **NewHandle, + IN CHAR16 *FileName, + IN UINT64 OpenMode, + IN UINT64 Attributes ) { - EFI_FILE_PROTOCOL *Root; - EMU_EFI_FILE_PRIVATE *PrivateFile; - EMU_EFI_FILE_PRIVATE *NewPrivateFile; - EMU_SIMPLE_FILE_SYSTEM_PRIVATE *PrivateRoot; - EFI_STATUS Status; - CHAR16 *Src; - char *Dst; - CHAR8 *RealFileName; - char *ParseFileName; - char *GuardPointer; - CHAR8 TempChar; - UINTN Count; - BOOLEAN TrailingDash; - BOOLEAN LoopFinish; - UINTN InfoSize; - EFI_FILE_INFO *Info; - struct stat finfo; - int res; - UINTN Size; - - PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); - PrivateRoot = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (PrivateFile->SimpleFileSystem); - NewPrivateFile = NULL; - Status = EFI_OUT_OF_RESOURCES; + EFI_FILE_PROTOCOL *Root; + EMU_EFI_FILE_PRIVATE *PrivateFile; + EMU_EFI_FILE_PRIVATE *NewPrivateFile; + EMU_SIMPLE_FILE_SYSTEM_PRIVATE *PrivateRoot; + EFI_STATUS Status; + CHAR16 *Src; + char *Dst; + CHAR8 *RealFileName; + char *ParseFileName; + char *GuardPointer; + CHAR8 TempChar; + UINTN Count; + BOOLEAN TrailingDash; + BOOLEAN LoopFinish; + UINTN InfoSize; + EFI_FILE_INFO *Info; + struct stat finfo; + int res; + UINTN Size; + + PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); + PrivateRoot = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (PrivateFile->SimpleFileSystem); + NewPrivateFile = NULL; + Status = EFI_OUT_OF_RESOURCES; // // BUGBUG: assume an open of root @@ -394,16 +388,17 @@ PosixFileOpen ( // TrailingDash = FALSE; if ((StrCmp (FileName, L"\\") == 0) || - (StrCmp (FileName, L".") == 0 && PrivateFile->IsRootDirectory)) { + ((StrCmp (FileName, L".") == 0) && PrivateFile->IsRootDirectory)) + { OpenRoot: - Status = PosixOpenVolume (PrivateFile->SimpleFileSystem, &Root); - NewPrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (Root); + Status = PosixOpenVolume (PrivateFile->SimpleFileSystem, &Root); + NewPrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (Root); goto Done; } if (FileName[StrLen (FileName) - 1] == L'\\') { - TrailingDash = TRUE; - FileName[StrLen (FileName) - 1] = 0; + TrailingDash = TRUE; + FileName[StrLen (FileName) - 1] = 0; } // @@ -416,7 +411,7 @@ OpenRoot: CopyMem (NewPrivateFile, PrivateFile, sizeof (EMU_EFI_FILE_PRIVATE)); - Size = AsciiStrSize (PrivateFile->FileName) + 1 + StrLen (FileName) + 1; + Size = AsciiStrSize (PrivateFile->FileName) + 1 + StrLen (FileName) + 1; NewPrivateFile->FileName = malloc (Size); if (NewPrivateFile->FileName == NULL) { goto Done; @@ -430,9 +425,10 @@ OpenRoot: AsciiStrCpyS (NewPrivateFile->FileName, Size, PrivateFile->FileName); Src = FileName; } - Dst = NewPrivateFile->FileName + AsciiStrLen (NewPrivateFile->FileName); + + Dst = NewPrivateFile->FileName + AsciiStrLen (NewPrivateFile->FileName); GuardPointer = NewPrivateFile->FileName + AsciiStrLen (PrivateRoot->FilePath); - *Dst++ = '/'; + *Dst++ = '/'; // Convert unicode to ascii and '\' to '/' while (*Src) { if (*Src == '\\') { @@ -440,10 +436,11 @@ OpenRoot: } else { *Dst++ = *Src; } + Src++; } - *Dst = 0; + *Dst = 0; // // Get rid of . and .., except leading . or .. @@ -453,16 +450,16 @@ OpenRoot: // GuardPointer protect simplefilesystem root path not be destroyed // - LoopFinish = FALSE; + LoopFinish = FALSE; while (!LoopFinish) { LoopFinish = TRUE; for (ParseFileName = GuardPointer; *ParseFileName; ParseFileName++) { - if (*ParseFileName == '.' && - (*(ParseFileName + 1) == 0 || *(ParseFileName + 1) == '/') && - *(ParseFileName - 1) == '/' - ) { - + if ((*ParseFileName == '.') && + ((*(ParseFileName + 1) == 0) || (*(ParseFileName + 1) == '/')) && + (*(ParseFileName - 1) == '/') + ) + { // // cut /. // @@ -471,12 +468,12 @@ OpenRoot: break; } - if (*ParseFileName == '.' && - *(ParseFileName + 1) == '.' && - (*(ParseFileName + 2) == 0 || *(ParseFileName + 2) == '/') && - *(ParseFileName - 1) == '/' - ) { - + if ((*ParseFileName == '.') && + (*(ParseFileName + 1) == '.') && + ((*(ParseFileName + 2) == 0) || (*(ParseFileName + 2) == '/')) && + (*(ParseFileName - 1) == '/') + ) + { ParseFileName--; Count = 3; @@ -505,7 +502,7 @@ OpenRoot: goto OpenRoot; } - RealFileName = NewPrivateFile->FileName + AsciiStrLen(NewPrivateFile->FileName) - 1; + RealFileName = NewPrivateFile->FileName + AsciiStrLen (NewPrivateFile->FileName) - 1; while (RealFileName > NewPrivateFile->FileName && *RealFileName != '/') { RealFileName--; } @@ -514,13 +511,12 @@ OpenRoot: *(RealFileName - 1) = 0; *(RealFileName - 1) = TempChar; - // // Test whether file or directory // NewPrivateFile->IsRootDirectory = FALSE; - NewPrivateFile->fd = -1; - NewPrivateFile->Dir = NULL; + NewPrivateFile->fd = -1; + NewPrivateFile->Dir = NULL; if (OpenMode & EFI_FILE_MODE_CREATE) { if (Attributes & EFI_FILE_DIRECTORY) { NewPrivateFile->IsDirectoryPath = TRUE; @@ -529,7 +525,7 @@ OpenRoot: } } else { res = stat (NewPrivateFile->FileName, &finfo); - if (res == 0 && S_ISDIR(finfo.st_mode)) { + if ((res == 0) && S_ISDIR (finfo.st_mode)) { NewPrivateFile->IsDirectoryPath = TRUE; } else { NewPrivateFile->IsDirectoryPath = FALSE; @@ -554,7 +550,7 @@ OpenRoot: // if (mkdir (NewPrivateFile->FileName, 0777) != 0) { if (errno != EEXIST) { - //free (TempFileName); + // free (TempFileName); Status = EFI_ACCESS_DENIED; goto Done; } @@ -571,16 +567,15 @@ OpenRoot: goto Done; } - } else { // // deal with file // NewPrivateFile->fd = open ( - NewPrivateFile->FileName, - ((OpenMode & EFI_FILE_MODE_CREATE) ? O_CREAT : 0) | (NewPrivateFile->IsOpenedByRead ? O_RDONLY : O_RDWR), - 0666 - ); + NewPrivateFile->FileName, + ((OpenMode & EFI_FILE_MODE_CREATE) ? O_CREAT : 0) | (NewPrivateFile->IsOpenedByRead ? O_RDONLY : O_RDWR), + 0666 + ); if (NewPrivateFile->fd < 0) { if (errno == ENOENT) { Status = EFI_NOT_FOUND; @@ -590,13 +585,13 @@ OpenRoot: } } - if ((OpenMode & EFI_FILE_MODE_CREATE) && Status == EFI_SUCCESS) { + if ((OpenMode & EFI_FILE_MODE_CREATE) && (Status == EFI_SUCCESS)) { // // Set the attribute // - InfoSize = 0; - Info = NULL; - Status = PosixFileGetInfo (&NewPrivateFile->EfiFile, &gEfiFileInfoGuid, &InfoSize, Info); + InfoSize = 0; + Info = NULL; + Status = PosixFileGetInfo (&NewPrivateFile->EfiFile, &gEfiFileInfoGuid, &InfoSize, Info); if (Status != EFI_BUFFER_TOO_SMALL) { Status = EFI_DEVICE_ERROR; goto Done; @@ -618,10 +613,10 @@ OpenRoot: free (Info); } -Done: ; +Done:; if (TrailingDash) { - FileName[StrLen (FileName) + 1] = 0; - FileName[StrLen (FileName)] = L'\\'; + FileName[StrLen (FileName) + 1] = 0; + FileName[StrLen (FileName)] = L'\\'; } if (EFI_ERROR (Status)) { @@ -639,8 +634,6 @@ Done: ; return Status; } - - /** Close the file handle @@ -654,18 +647,19 @@ PosixFileCLose ( IN EFI_FILE_PROTOCOL *This ) { - EMU_EFI_FILE_PRIVATE *PrivateFile; + EMU_EFI_FILE_PRIVATE *PrivateFile; PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); if (PrivateFile->fd >= 0) { close (PrivateFile->fd); } + if (PrivateFile->Dir != NULL) { closedir (PrivateFile->Dir); } - PrivateFile->fd = -1; + PrivateFile->fd = -1; PrivateFile->Dir = NULL; if (PrivateFile->FileName) { @@ -677,7 +671,6 @@ PosixFileCLose ( return EFI_SUCCESS; } - /** Close and delete the file handle. @@ -692,8 +685,8 @@ PosixFileDelete ( IN EFI_FILE_PROTOCOL *This ) { - EFI_STATUS Status; - EMU_EFI_FILE_PRIVATE *PrivateFile; + EFI_STATUS Status; + EMU_EFI_FILE_PRIVATE *PrivateFile; PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); Status = EFI_WARN_DELETE_FAILURE; @@ -724,7 +717,6 @@ PosixFileDelete ( return Status; } - /** Read data from the file. @@ -741,19 +733,19 @@ PosixFileDelete ( **/ EFI_STATUS PosixFileRead ( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ) { - EMU_EFI_FILE_PRIVATE *PrivateFile; - EFI_STATUS Status; - int Res; - UINTN Size; - UINTN NameSize; - UINTN ResultSize; - CHAR8 *FullFileName; - UINTN FullFileNameSize; + EMU_EFI_FILE_PRIVATE *PrivateFile; + EFI_STATUS Status; + int Res; + UINTN Size; + UINTN NameSize; + UINTN ResultSize; + CHAR8 *FullFileName; + UINTN FullFileNameSize; PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); @@ -768,8 +760,9 @@ PosixFileRead ( Status = EFI_DEVICE_ERROR; goto Done; } + *BufferSize = Res; - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; goto Done; } @@ -785,26 +778,27 @@ PosixFileRead ( PrivateFile->Dirent = readdir (PrivateFile->Dir); if (PrivateFile->Dirent == NULL) { *BufferSize = 0; - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; goto Done; } } - Size = SIZE_OF_EFI_FILE_INFO; - NameSize = AsciiStrLen (PrivateFile->Dirent->d_name) + 1; - ResultSize = Size + 2 * NameSize; + Size = SIZE_OF_EFI_FILE_INFO; + NameSize = AsciiStrLen (PrivateFile->Dirent->d_name) + 1; + ResultSize = Size + 2 * NameSize; if (*BufferSize < ResultSize) { *BufferSize = ResultSize; - Status = EFI_BUFFER_TOO_SMALL; + Status = EFI_BUFFER_TOO_SMALL; goto Done; } - Status = EFI_SUCCESS; + + Status = EFI_SUCCESS; *BufferSize = ResultSize; - FullFileNameSize = AsciiStrLen(PrivateFile->FileName) + 1 + NameSize; - FullFileName = malloc (FullFileNameSize); + FullFileNameSize = AsciiStrLen (PrivateFile->FileName) + 1 + NameSize; + FullFileName = malloc (FullFileNameSize); if (FullFileName == NULL) { Status = EFI_OUT_OF_RESOURCES; goto Done; @@ -814,11 +808,11 @@ PosixFileRead ( AsciiStrCatS (FullFileName, FullFileNameSize, "/"); AsciiStrCatS (FullFileName, FullFileNameSize, PrivateFile->Dirent->d_name); Status = UnixSimpleFileSystemFileInfo ( - PrivateFile, - FullFileName, - BufferSize, - Buffer - ); + PrivateFile, + FullFileName, + BufferSize, + Buffer + ); free (FullFileName); PrivateFile->Dirent = NULL; @@ -827,8 +821,6 @@ Done: return Status; } - - /** Write data to a file. @@ -849,15 +841,14 @@ Done: **/ EFI_STATUS PosixFileWrite ( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + IN VOID *Buffer ) { EMU_EFI_FILE_PRIVATE *PrivateFile; int Res; - PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); if (PrivateFile->fd < 0) { @@ -881,8 +872,6 @@ PosixFileWrite ( return EFI_SUCCESS; } - - /** Set a files current position @@ -895,12 +884,12 @@ PosixFileWrite ( **/ EFI_STATUS PosixFileSetPossition ( - IN EFI_FILE_PROTOCOL *This, - IN UINT64 Position + IN EFI_FILE_PROTOCOL *This, + IN UINT64 Position ) { - EMU_EFI_FILE_PRIVATE *PrivateFile; - off_t Pos; + EMU_EFI_FILE_PRIVATE *PrivateFile; + off_t Pos; PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); @@ -912,23 +901,24 @@ PosixFileSetPossition ( if (PrivateFile->Dir == NULL) { return EFI_DEVICE_ERROR; } + rewinddir (PrivateFile->Dir); return EFI_SUCCESS; } else { - if (Position == (UINT64) -1) { + if (Position == (UINT64)-1) { Pos = lseek (PrivateFile->fd, 0, SEEK_END); } else { Pos = lseek (PrivateFile->fd, Position, SEEK_SET); } + if (Pos == (off_t)-1) { return ErrnoToEfiStatus (); } + return EFI_SUCCESS; } } - - /** Get a file's current position @@ -941,26 +931,25 @@ PosixFileSetPossition ( **/ EFI_STATUS PosixFileGetPossition ( - IN EFI_FILE_PROTOCOL *This, - OUT UINT64 *Position + IN EFI_FILE_PROTOCOL *This, + OUT UINT64 *Position ) { EFI_STATUS Status; EMU_EFI_FILE_PRIVATE *PrivateFile; - PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); + PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); if (PrivateFile->IsDirectoryPath) { Status = EFI_UNSUPPORTED; } else { *Position = (UINT64)lseek (PrivateFile->fd, 0, SEEK_CUR); - Status = (*Position == (UINT64) -1) ? ErrnoToEfiStatus () : EFI_SUCCESS; + Status = (*Position == (UINT64)-1) ? ErrnoToEfiStatus () : EFI_SUCCESS; } return Status; } - /** Get information about a file. @@ -981,18 +970,18 @@ PosixFileGetPossition ( **/ EFI_STATUS PosixFileGetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ) { - EFI_STATUS Status; - EMU_EFI_FILE_PRIVATE *PrivateFile; - EFI_FILE_SYSTEM_INFO *FileSystemInfoBuffer; - int UnixStatus; - EMU_SIMPLE_FILE_SYSTEM_PRIVATE *PrivateRoot; - struct statfs buf; + EFI_STATUS Status; + EMU_EFI_FILE_PRIVATE *PrivateFile; + EFI_FILE_SYSTEM_INFO *FileSystemInfoBuffer; + int UnixStatus; + EMU_SIMPLE_FILE_SYSTEM_PRIVATE *PrivateRoot; + struct statfs buf; PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); PrivateRoot = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (PrivateFile->SimpleFileSystem); @@ -1011,25 +1000,23 @@ PosixFileGetInfo ( return EFI_DEVICE_ERROR; } - FileSystemInfoBuffer = (EFI_FILE_SYSTEM_INFO *) Buffer; - FileSystemInfoBuffer->Size = SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (PrivateRoot->VolumeLabel); - FileSystemInfoBuffer->ReadOnly = FALSE; + FileSystemInfoBuffer = (EFI_FILE_SYSTEM_INFO *)Buffer; + FileSystemInfoBuffer->Size = SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (PrivateRoot->VolumeLabel); + FileSystemInfoBuffer->ReadOnly = FALSE; // // Succeeded // - FileSystemInfoBuffer->VolumeSize = MultU64x32 (buf.f_blocks, buf.f_bsize); - FileSystemInfoBuffer->FreeSpace = MultU64x32 (buf.f_bavail, buf.f_bsize); - FileSystemInfoBuffer->BlockSize = buf.f_bsize; - + FileSystemInfoBuffer->VolumeSize = MultU64x32 (buf.f_blocks, buf.f_bsize); + FileSystemInfoBuffer->FreeSpace = MultU64x32 (buf.f_bavail, buf.f_bsize); + FileSystemInfoBuffer->BlockSize = buf.f_bsize; StrCpyS ( - (CHAR16 *) FileSystemInfoBuffer->VolumeLabel, + (CHAR16 *)FileSystemInfoBuffer->VolumeLabel, (*BufferSize - SIZE_OF_EFI_FILE_SYSTEM_INFO) / sizeof (CHAR16), PrivateRoot->VolumeLabel ); *BufferSize = SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (PrivateRoot->VolumeLabel); - } else if (CompareGuid (InformationType, &gEfiFileSystemVolumeLabelInfoIdGuid)) { if (*BufferSize < StrSize (PrivateRoot->VolumeLabel)) { *BufferSize = StrSize (PrivateRoot->VolumeLabel); @@ -1037,18 +1024,16 @@ PosixFileGetInfo ( } StrCpyS ( - (CHAR16 *) Buffer, + (CHAR16 *)Buffer, *BufferSize / sizeof (CHAR16), PrivateRoot->VolumeLabel ); *BufferSize = StrSize (PrivateRoot->VolumeLabel); - } return Status; } - /** Set information about a file @@ -1068,42 +1053,42 @@ PosixFileGetInfo ( **/ EFI_STATUS PosixFileSetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN UINTN BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN UINTN BufferSize, + IN VOID *Buffer ) { - EMU_SIMPLE_FILE_SYSTEM_PRIVATE *PrivateRoot; - EMU_EFI_FILE_PRIVATE *PrivateFile; - EFI_FILE_INFO *OldFileInfo; - EFI_FILE_INFO *NewFileInfo; - EFI_STATUS Status; - UINTN OldInfoSize; - mode_t NewAttr; - struct stat OldAttr; - CHAR8 *OldFileName; - CHAR8 *NewFileName; - CHAR8 *CharPointer; - BOOLEAN AttrChangeFlag; - BOOLEAN NameChangeFlag; - BOOLEAN SizeChangeFlag; - BOOLEAN TimeChangeFlag; - struct tm NewLastAccessSystemTime; - struct tm NewLastWriteSystemTime; - EFI_FILE_SYSTEM_INFO *NewFileSystemInfo; - CHAR8 *AsciiFilePtr; - CHAR16 *UnicodeFilePtr; - int UnixStatus; - struct utimbuf Utime; - UINTN Size; - - PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); - PrivateRoot = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (PrivateFile->SimpleFileSystem); - errno = 0; - Status = EFI_UNSUPPORTED; - OldFileInfo = NewFileInfo = NULL; - OldFileName = NewFileName = NULL; + EMU_SIMPLE_FILE_SYSTEM_PRIVATE *PrivateRoot; + EMU_EFI_FILE_PRIVATE *PrivateFile; + EFI_FILE_INFO *OldFileInfo; + EFI_FILE_INFO *NewFileInfo; + EFI_STATUS Status; + UINTN OldInfoSize; + mode_t NewAttr; + struct stat OldAttr; + CHAR8 *OldFileName; + CHAR8 *NewFileName; + CHAR8 *CharPointer; + BOOLEAN AttrChangeFlag; + BOOLEAN NameChangeFlag; + BOOLEAN SizeChangeFlag; + BOOLEAN TimeChangeFlag; + struct tm NewLastAccessSystemTime; + struct tm NewLastWriteSystemTime; + EFI_FILE_SYSTEM_INFO *NewFileSystemInfo; + CHAR8 *AsciiFilePtr; + CHAR16 *UnicodeFilePtr; + int UnixStatus; + struct utimbuf Utime; + UINTN Size; + + PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); + PrivateRoot = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (PrivateFile->SimpleFileSystem); + errno = 0; + Status = EFI_UNSUPPORTED; + OldFileInfo = NewFileInfo = NULL; + OldFileName = NewFileName = NULL; AttrChangeFlag = NameChangeFlag = SizeChangeFlag = TimeChangeFlag = FALSE; // @@ -1115,7 +1100,7 @@ PosixFileSetInfo ( goto Done; } - NewFileSystemInfo = (EFI_FILE_SYSTEM_INFO *) Buffer; + NewFileSystemInfo = (EFI_FILE_SYSTEM_INFO *)Buffer; free (PrivateRoot->VolumeLabel); @@ -1146,7 +1131,7 @@ PosixFileSetInfo ( StrCpyS ( PrivateRoot->VolumeLabel, StrSize (PrivateRoot->VolumeLabel) / sizeof (CHAR16), - (CHAR16 *) Buffer + (CHAR16 *)Buffer ); Status = EFI_SUCCESS; @@ -1170,11 +1155,12 @@ PosixFileSetInfo ( // // Check for invalid set file information parameters. // - NewFileInfo = (EFI_FILE_INFO *) Buffer; - if (NewFileInfo->Size <= sizeof (EFI_FILE_INFO) || + NewFileInfo = (EFI_FILE_INFO *)Buffer; + if ((NewFileInfo->Size <= sizeof (EFI_FILE_INFO)) || (NewFileInfo->Attribute &~(EFI_FILE_VALID_ATTR)) || - (sizeof (UINTN) == 4 && NewFileInfo->Size > 0xFFFFFFFF) - ) { + ((sizeof (UINTN) == 4) && (NewFileInfo->Size > 0xFFFFFFFF)) + ) + { Status = EFI_INVALID_PARAMETER; goto Done; } @@ -1184,7 +1170,7 @@ PosixFileSetInfo ( // of change request this is. // OldInfoSize = 0; - Status = UnixSimpleFileSystemFileInfo (PrivateFile, NULL, &OldInfoSize, NULL); + Status = UnixSimpleFileSystemFileInfo (PrivateFile, NULL, &OldInfoSize, NULL); if (Status != EFI_BUFFER_TOO_SMALL) { Status = EFI_DEVICE_ERROR; goto Done; @@ -1215,37 +1201,40 @@ PosixFileSetInfo ( // Make full pathname from new filename and rootpath. // if (NewFileInfo->FileName[0] == '\\') { - Size = AsciiStrLen (PrivateRoot->FilePath) + 1 + StrLen (NewFileInfo->FileName) + 1; + Size = AsciiStrLen (PrivateRoot->FilePath) + 1 + StrLen (NewFileInfo->FileName) + 1; NewFileName = malloc (Size); if (NewFileName == NULL) { goto Done; } AsciiStrCpyS (NewFileName, Size, PrivateRoot->FilePath); - AsciiFilePtr = NewFileName + AsciiStrLen(NewFileName); - UnicodeFilePtr = NewFileInfo->FileName + 1; - *AsciiFilePtr++ ='/'; + AsciiFilePtr = NewFileName + AsciiStrLen (NewFileName); + UnicodeFilePtr = NewFileInfo->FileName + 1; + *AsciiFilePtr++ = '/'; } else { - Size = AsciiStrLen (PrivateFile->FileName) + 2 + StrLen (NewFileInfo->FileName) + 1; + Size = AsciiStrLen (PrivateFile->FileName) + 2 + StrLen (NewFileInfo->FileName) + 1; NewFileName = malloc (Size); if (NewFileName == NULL) { goto Done; } AsciiStrCpyS (NewFileName, Size, PrivateRoot->FilePath); - AsciiFilePtr = NewFileName + AsciiStrLen(NewFileName); + AsciiFilePtr = NewFileName + AsciiStrLen (NewFileName); if ((AsciiFilePtr[-1] != '/') && (NewFileInfo->FileName[0] != '/')) { // make sure there is a / between Root FilePath and NewFileInfo Filename AsciiFilePtr[0] = '/'; AsciiFilePtr[1] = '\0'; AsciiFilePtr++; } + UnicodeFilePtr = NewFileInfo->FileName; } + // Convert to ascii. while (*UnicodeFilePtr) { *AsciiFilePtr++ = *UnicodeFilePtr++; } + *AsciiFilePtr = 0; // @@ -1280,15 +1269,18 @@ PosixFileSetInfo ( // if (!IsZero (&NewFileInfo->CreateTime, sizeof (EFI_TIME)) && CompareMem (&NewFileInfo->CreateTime, &OldFileInfo->CreateTime, sizeof (EFI_TIME)) - ) { + ) + { TimeChangeFlag = TRUE; } else if (!IsZero (&NewFileInfo->LastAccessTime, sizeof (EFI_TIME)) && CompareMem (&NewFileInfo->LastAccessTime, &OldFileInfo->LastAccessTime, sizeof (EFI_TIME)) - ) { + ) + { TimeChangeFlag = TRUE; } else if (!IsZero (&NewFileInfo->ModificationTime, sizeof (EFI_TIME)) && CompareMem (&NewFileInfo->ModificationTime, &OldFileInfo->ModificationTime, sizeof (EFI_TIME)) - ) { + ) + { TimeChangeFlag = TRUE; } @@ -1346,7 +1338,7 @@ PosixFileSetInfo ( NewFileName ); } else { - Status = EFI_DEVICE_ERROR; + Status = EFI_DEVICE_ERROR; goto Done; } } @@ -1369,34 +1361,33 @@ PosixFileSetInfo ( Status = ErrnoToEfiStatus (); goto Done; } - } // // Time change // if (TimeChangeFlag) { - NewLastAccessSystemTime.tm_year = NewFileInfo->LastAccessTime.Year; - NewLastAccessSystemTime.tm_mon = NewFileInfo->LastAccessTime.Month; - NewLastAccessSystemTime.tm_mday = NewFileInfo->LastAccessTime.Day; - NewLastAccessSystemTime.tm_hour = NewFileInfo->LastAccessTime.Hour; - NewLastAccessSystemTime.tm_min = NewFileInfo->LastAccessTime.Minute; - NewLastAccessSystemTime.tm_sec = NewFileInfo->LastAccessTime.Second; - NewLastAccessSystemTime.tm_isdst = 0; + NewLastAccessSystemTime.tm_year = NewFileInfo->LastAccessTime.Year; + NewLastAccessSystemTime.tm_mon = NewFileInfo->LastAccessTime.Month; + NewLastAccessSystemTime.tm_mday = NewFileInfo->LastAccessTime.Day; + NewLastAccessSystemTime.tm_hour = NewFileInfo->LastAccessTime.Hour; + NewLastAccessSystemTime.tm_min = NewFileInfo->LastAccessTime.Minute; + NewLastAccessSystemTime.tm_sec = NewFileInfo->LastAccessTime.Second; + NewLastAccessSystemTime.tm_isdst = 0; Utime.actime = mktime (&NewLastAccessSystemTime); - NewLastWriteSystemTime.tm_year = NewFileInfo->ModificationTime.Year; - NewLastWriteSystemTime.tm_mon = NewFileInfo->ModificationTime.Month; - NewLastWriteSystemTime.tm_mday = NewFileInfo->ModificationTime.Day; - NewLastWriteSystemTime.tm_hour = NewFileInfo->ModificationTime.Hour; - NewLastWriteSystemTime.tm_min = NewFileInfo->ModificationTime.Minute; - NewLastWriteSystemTime.tm_sec = NewFileInfo->ModificationTime.Second; - NewLastWriteSystemTime.tm_isdst = 0; + NewLastWriteSystemTime.tm_year = NewFileInfo->ModificationTime.Year; + NewLastWriteSystemTime.tm_mon = NewFileInfo->ModificationTime.Month; + NewLastWriteSystemTime.tm_mday = NewFileInfo->ModificationTime.Day; + NewLastWriteSystemTime.tm_hour = NewFileInfo->ModificationTime.Hour; + NewLastWriteSystemTime.tm_min = NewFileInfo->ModificationTime.Minute; + NewLastWriteSystemTime.tm_sec = NewFileInfo->ModificationTime.Second; + NewLastWriteSystemTime.tm_isdst = 0; Utime.modtime = mktime (&NewLastWriteSystemTime); - if (Utime.actime == (time_t)-1 || Utime.modtime == (time_t)-1) { + if ((Utime.actime == (time_t)-1) || (Utime.modtime == (time_t)-1)) { goto Done; } @@ -1438,7 +1429,6 @@ Done: return Status; } - /** Flush data back for the file handle. @@ -1459,8 +1449,7 @@ PosixFileFlush ( IN EFI_FILE_PROTOCOL *This ) { - EMU_EFI_FILE_PRIVATE *PrivateFile; - + EMU_EFI_FILE_PRIVATE *PrivateFile; PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); @@ -1483,11 +1472,9 @@ PosixFileFlush ( return EFI_SUCCESS; } - - EFI_STATUS PosixFileSystmeThunkOpen ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { EMU_SIMPLE_FILE_SYSTEM_PRIVATE *Private; @@ -1516,8 +1503,8 @@ PosixFileSystmeThunkOpen ( for (i = 0; This->ConfigString[i] != 0; i++) { Private->FilePath[i] = This->ConfigString[i]; } - Private->FilePath[i] = 0; + Private->FilePath[i] = 0; Private->VolumeLabel = malloc (StrSize (L"EFI_EMULATED")); if (Private->VolumeLabel == NULL) { @@ -1525,6 +1512,7 @@ PosixFileSystmeThunkOpen ( free (Private); return EFI_OUT_OF_RESOURCES; } + StrCpyS ( Private->VolumeLabel, StrSize (L"EFI_EMULATED") / sizeof (CHAR16), @@ -1541,10 +1529,9 @@ PosixFileSystmeThunkOpen ( return EFI_SUCCESS; } - EFI_STATUS PosixFileSystmeThunkClose ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { EMU_SIMPLE_FILE_SYSTEM_PRIVATE *Private; @@ -1566,6 +1553,7 @@ PosixFileSystmeThunkClose ( if (Private->VolumeLabel != NULL) { free (Private->VolumeLabel); } + free (This->Private); This->Private = NULL; } @@ -1573,8 +1561,7 @@ PosixFileSystmeThunkClose ( return EFI_SUCCESS; } - -EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo = { +EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo = { &gEfiSimpleFileSystemProtocolGuid, NULL, NULL, @@ -1583,5 +1570,3 @@ EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo = { GasketPosixFileSystmeThunkClose, NULL }; - - diff --git a/EmulatorPkg/Unix/Host/Pthreads.c b/EmulatorPkg/Unix/Host/Pthreads.c index 025687c356..ec3a38e573 100644 --- a/EmulatorPkg/Unix/Host/Pthreads.c +++ b/EmulatorPkg/Unix/Host/Pthreads.c @@ -12,48 +12,43 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "Host.h" #include - UINTN EFIAPI PthreadMutexLock ( - IN VOID *Mutex + IN VOID *Mutex ) { return (UINTN)pthread_mutex_lock ((pthread_mutex_t *)Mutex); } - - UINTN EFIAPI PthreadMutexUnLock ( - IN VOID *Mutex + IN VOID *Mutex ) { return (UINTN)pthread_mutex_unlock ((pthread_mutex_t *)Mutex); } - UINTN EFIAPI PthreadMutexTryLock ( - IN VOID *Mutex + IN VOID *Mutex ) { return (UINTN)pthread_mutex_trylock ((pthread_mutex_t *)Mutex); } - VOID * PthreadMutexInit ( IN VOID ) { - pthread_mutex_t *Mutex; - int err; + pthread_mutex_t *Mutex; + int err; Mutex = malloc (sizeof (pthread_mutex_t)); - err = pthread_mutex_init (Mutex, NULL); + err = pthread_mutex_init (Mutex, NULL); if (err == 0) { return Mutex; } @@ -61,10 +56,9 @@ PthreadMutexInit ( return NULL; } - UINTN PthreadMutexDestroy ( - IN VOID *Mutex + IN VOID *Mutex ) { if (Mutex != NULL) { @@ -76,11 +70,11 @@ PthreadMutexDestroy ( // Can't store this data on PthreadCreate stack so we need a global typedef struct { - pthread_mutex_t Mutex; - THREAD_THUNK_THREAD_ENTRY Start; + pthread_mutex_t Mutex; + THREAD_THUNK_THREAD_ENTRY Start; } THREAD_MANGLE; -THREAD_MANGLE mThreadMangle = { +THREAD_MANGLE mThreadMangle = { PTHREAD_MUTEX_INITIALIZER, NULL }; @@ -90,11 +84,11 @@ SecFakePthreadStart ( VOID *Context ) { - THREAD_THUNK_THREAD_ENTRY Start; - sigset_t SigMask; + THREAD_THUNK_THREAD_ENTRY Start; + sigset_t SigMask; // Save global on the stack before we unlock - Start = mThreadMangle.Start; + Start = mThreadMangle.Start; pthread_mutex_unlock (&mThreadMangle.Mutex); // Mask all signals to the APs @@ -109,19 +103,19 @@ SecFakePthreadStart ( // This is a great example of how all problems in computer // science can be solved by adding another level of indirection // - return (VOID *)ReverseGasketUint64 ((UINTN)Start, (UINTN)Context); + return (VOID *)ReverseGasketUint64 ((UINTN)Start, (UINTN)Context); } UINTN PthreadCreate ( - IN VOID *Thread, - IN VOID *Attribute, - IN THREAD_THUNK_THREAD_ENTRY Start, - IN VOID *Context + IN VOID *Thread, + IN VOID *Attribute, + IN THREAD_THUNK_THREAD_ENTRY Start, + IN VOID *Context ) { - int err; - BOOLEAN EnabledOnEntry; + int err; + BOOLEAN EnabledOnEntry; // // Threads inherit interrupt state so disable interrupts before we start thread @@ -135,7 +129,7 @@ PthreadCreate ( // Acquire lock for global, SecFakePthreadStart runs in a different thread. pthread_mutex_lock (&mThreadMangle.Mutex); - mThreadMangle.Start = Start; + mThreadMangle.Start = Start; err = pthread_create (Thread, Attribute, SecFakePthreadStart, Context); if (err != 0) { @@ -151,17 +145,15 @@ PthreadCreate ( return err; } - VOID PthreadExit ( - IN VOID *ValuePtr + IN VOID *ValuePtr ) { pthread_exit (ValuePtr); return; } - UINTN PthreadSelf ( VOID @@ -173,8 +165,7 @@ PthreadSelf ( return (UINTN)pthread_self (); } - -EMU_THREAD_THUNK_PROTOCOL gPthreadThunk = { +EMU_THREAD_THUNK_PROTOCOL gPthreadThunk = { GasketPthreadMutexLock, GasketPthreadMutexUnLock, GasketPthreadMutexTryLock, @@ -185,10 +176,9 @@ EMU_THREAD_THUNK_PROTOCOL gPthreadThunk = { GasketPthreadSelf }; - EFI_STATUS PthreadOpen ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { if (This->Instance != 0) { @@ -206,17 +196,15 @@ PthreadOpen ( return EFI_SUCCESS; } - EFI_STATUS PthreadClose ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { return EFI_SUCCESS; } - -EMU_IO_THUNK_PROTOCOL gPthreadThunkIo = { +EMU_IO_THUNK_PROTOCOL gPthreadThunkIo = { &gEmuThreadThunkProtocolGuid, NULL, NULL, @@ -225,5 +213,3 @@ EMU_IO_THUNK_PROTOCOL gPthreadThunkIo = { GasketPthreadClose, NULL }; - - diff --git a/EmulatorPkg/Unix/Host/X11GraphicsWindow.c b/EmulatorPkg/Unix/Host/X11GraphicsWindow.c index 5325a0e35b..a30cc19dbe 100644 --- a/EmulatorPkg/Unix/Host/X11GraphicsWindow.c +++ b/EmulatorPkg/Unix/Host/X11GraphicsWindow.c @@ -22,140 +22,147 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #define KEYSYM_LOWER 0 #define KEYSYM_UPPER 1 - struct uga_drv_shift_mask { - unsigned char shift; - unsigned char size; - unsigned char csize; + unsigned char shift; + unsigned char size; + unsigned char csize; }; -#define NBR_KEYS 32 +#define NBR_KEYS 32 typedef struct { - EMU_GRAPHICS_WINDOW_PROTOCOL GraphicsIo; + EMU_GRAPHICS_WINDOW_PROTOCOL GraphicsIo; - Display *display; - int screen; // values for window_size in main - Window win; - GC gc; - Visual *visual; + Display *display; + int screen; // values for window_size in main + Window win; + GC gc; + Visual *visual; - int depth; - unsigned int width; - unsigned int height; - unsigned int line_bytes; - unsigned int pixel_shift; - unsigned char *image_data; + int depth; + unsigned int width; + unsigned int height; + unsigned int line_bytes; + unsigned int pixel_shift; + unsigned char *image_data; - struct uga_drv_shift_mask r, g, b; + struct uga_drv_shift_mask r, g, b; - int use_shm; - XShmSegmentInfo xshm_info; - XImage *image; - char *Title; + int use_shm; + XShmSegmentInfo xshm_info; + XImage *image; + char *Title; - unsigned int key_rd; - unsigned int key_wr; - unsigned int key_count; - EFI_KEY_DATA keys[NBR_KEYS]; + unsigned int key_rd; + unsigned int key_wr; + unsigned int key_count; + EFI_KEY_DATA keys[NBR_KEYS]; - EFI_KEY_STATE KeyState; + EFI_KEY_STATE KeyState; EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeRegisterdKeyCallback; EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakRegisterdKeyCallback; VOID *RegisterdKeyCallbackContext; - int previous_x; - int previous_y; - EFI_SIMPLE_POINTER_STATE pointer_state; - int pointer_state_changed; + int previous_x; + int previous_y; + EFI_SIMPLE_POINTER_STATE pointer_state; + int pointer_state_changed; } GRAPHICS_IO_PRIVATE; void -HandleEvents( - IN GRAPHICS_IO_PRIVATE *Drv +HandleEvents ( + IN GRAPHICS_IO_PRIVATE *Drv ); void fill_shift_mask ( - IN struct uga_drv_shift_mask *sm, - IN unsigned long mask + IN struct uga_drv_shift_mask *sm, + IN unsigned long mask ) { sm->shift = 0; - sm->size = 0; + sm->size = 0; while ((mask & 1) == 0) { mask >>= 1; sm->shift++; } + while (mask & 1) { sm->size++; mask >>= 1; } + sm->csize = 8 - sm->size; } int TryCreateShmImage ( - IN GRAPHICS_IO_PRIVATE *Drv + IN GRAPHICS_IO_PRIVATE *Drv ) { Drv->image = XShmCreateImage ( - Drv->display, Drv->visual, - Drv->depth, ZPixmap, NULL, &Drv->xshm_info, - Drv->width, Drv->height + Drv->display, + Drv->visual, + Drv->depth, + ZPixmap, + NULL, + &Drv->xshm_info, + Drv->width, + Drv->height ); if (Drv->image == NULL) { return 0; } switch (Drv->image->bitmap_unit) { - case 32: - Drv->pixel_shift = 2; - break; - case 16: - Drv->pixel_shift = 1; - break; - case 8: - Drv->pixel_shift = 0; - break; + case 32: + Drv->pixel_shift = 2; + break; + case 16: + Drv->pixel_shift = 1; + break; + case 8: + Drv->pixel_shift = 0; + break; } Drv->xshm_info.shmid = shmget ( - IPC_PRIVATE, Drv->image->bytes_per_line * Drv->image->height, - IPC_CREAT | 0777 - ); + IPC_PRIVATE, + Drv->image->bytes_per_line * Drv->image->height, + IPC_CREAT | 0777 + ); if (Drv->xshm_info.shmid < 0) { - XDestroyImage(Drv->image); + XDestroyImage (Drv->image); return 0; } Drv->image_data = shmat (Drv->xshm_info.shmid, NULL, 0); - if(!Drv->image_data) { + if (!Drv->image_data) { shmctl (Drv->xshm_info.shmid, IPC_RMID, NULL); - XDestroyImage(Drv->image); + XDestroyImage (Drv->image); return 0; } -#ifndef __APPLE__ + #ifndef __APPLE__ // // This closes shared memory in real time on OS X. Only closes after folks quit using // it on Linux. // shmctl (Drv->xshm_info.shmid, IPC_RMID, NULL); -#endif + #endif - Drv->xshm_info.shmaddr = (char*)Drv->image_data; - Drv->image->data = (char*)Drv->image_data; + Drv->xshm_info.shmaddr = (char *)Drv->image_data; + Drv->image->data = (char *)Drv->image_data; if (!XShmAttach (Drv->display, &Drv->xshm_info)) { shmdt (Drv->image_data); - XDestroyImage(Drv->image); + XDestroyImage (Drv->image); return 0; } + return 1; } - EFI_STATUS X11Size ( IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, @@ -163,8 +170,8 @@ X11Size ( IN UINT32 Height ) { - GRAPHICS_IO_PRIVATE *Drv; - XSizeHints size_hints; + GRAPHICS_IO_PRIVATE *Drv; + XSizeHints size_hints; // Destroy current buffer if created. Drv = (GRAPHICS_IO_PRIVATE *)GraphicsIo; @@ -177,15 +184,15 @@ X11Size ( } Drv->image_data = NULL; - Drv->image = NULL; + Drv->image = NULL; } - Drv->width = Width; + Drv->width = Width; Drv->height = Height; XResizeWindow (Drv->display, Drv->win, Width, Height); // Allocate image. - if (XShmQueryExtension(Drv->display) && TryCreateShmImage(Drv)) { + if (XShmQueryExtension (Drv->display) && TryCreateShmImage (Drv)) { Drv->use_shm = 1; } else { Drv->use_shm = 0; @@ -198,12 +205,18 @@ X11Size ( } Drv->image_data = malloc ((Drv->width * Drv->height) << Drv->pixel_shift); - Drv->image = XCreateImage ( - Drv->display, Drv->visual, Drv->depth, - ZPixmap, 0, (char *)Drv->image_data, - Drv->width, Drv->height, - 8 << Drv->pixel_shift, 0 - ); + Drv->image = XCreateImage ( + Drv->display, + Drv->visual, + Drv->depth, + ZPixmap, + 0, + (char *)Drv->image_data, + Drv->width, + Drv->height, + 8 << Drv->pixel_shift, + 0 + ); } Drv->line_bytes = Drv->image->bytes_per_line; @@ -213,8 +226,8 @@ X11Size ( fill_shift_mask (&Drv->b, Drv->image->blue_mask); // Set WM hints. - size_hints.flags = PSize | PMinSize | PMaxSize; - size_hints.min_width = size_hints.max_width = size_hints.base_width = Width; + size_hints.flags = PSize | PMinSize | PMaxSize; + size_hints.min_width = size_hints.max_width = size_hints.base_width = Width; size_hints.min_height = size_hints.max_height = size_hints.base_height = Height; XSetWMNormalHints (Drv->display, Drv->win, &size_hints); @@ -225,9 +238,9 @@ X11Size ( void handleKeyEvent ( - IN GRAPHICS_IO_PRIVATE *Drv, - IN XEvent *ev, - IN BOOLEAN Make + IN GRAPHICS_IO_PRIVATE *Drv, + IN XEvent *ev, + IN BOOLEAN Make ) { KeySym *KeySym; @@ -250,8 +263,8 @@ handleKeyEvent ( // KeySym = XGetKeyboardMapping (Drv->display, ev->xkey.keycode, 1, &KeySymArraySize); - KeyData.Key.ScanCode = 0; - KeyData.Key.UnicodeChar = 0; + KeyData.Key.ScanCode = 0; + KeyData.Key.UnicodeChar = 0; KeyData.KeyState.KeyShiftState = 0; // @@ -268,186 +281,250 @@ handleKeyEvent ( // Skipping EFI_MENU_KEY_PRESSED and EFI_SYS_REQ_PRESSED switch (*KeySym) { - case XK_Control_R: - if (Make) { - Drv->KeyState.KeyShiftState |= EFI_RIGHT_CONTROL_PRESSED; - } else { - Drv->KeyState.KeyShiftState &= ~EFI_RIGHT_CONTROL_PRESSED; - } - break; - case XK_Control_L: - if (Make) { - Drv->KeyState.KeyShiftState |= EFI_LEFT_CONTROL_PRESSED; - } else { - Drv->KeyState.KeyShiftState &= ~EFI_LEFT_CONTROL_PRESSED; - } - break; - - case XK_Shift_R: - if (Make) { - Drv->KeyState.KeyShiftState |= EFI_RIGHT_SHIFT_PRESSED; - } else { - Drv->KeyState.KeyShiftState &= ~EFI_RIGHT_SHIFT_PRESSED; - } - break; - case XK_Shift_L: - if (Make) { - Drv->KeyState.KeyShiftState |= EFI_LEFT_SHIFT_PRESSED; - } else { - Drv->KeyState.KeyShiftState &= ~EFI_LEFT_SHIFT_PRESSED; - } - break; - - case XK_Mode_switch: - if (Make) { - Drv->KeyState.KeyShiftState |= EFI_LEFT_ALT_PRESSED; - } else { - Drv->KeyState.KeyShiftState &= ~EFI_LEFT_ALT_PRESSED; - } - break; - - case XK_Meta_R: - if (Make) { - Drv->KeyState.KeyShiftState |= EFI_RIGHT_LOGO_PRESSED; - } else { - Drv->KeyState.KeyShiftState &= ~EFI_RIGHT_LOGO_PRESSED; - } - break; - case XK_Meta_L: - if (Make) { - Drv->KeyState.KeyShiftState |= EFI_LEFT_LOGO_PRESSED; - } else { - Drv->KeyState.KeyShiftState &= ~EFI_LEFT_LOGO_PRESSED; - } - break; - - case XK_KP_Home: - case XK_Home: KeyData.Key.ScanCode = SCAN_HOME; break; - - case XK_KP_End: - case XK_End: KeyData.Key.ScanCode = SCAN_END; break; - - case XK_KP_Left: - case XK_Left: KeyData.Key.ScanCode = SCAN_LEFT; break; - - case XK_KP_Right: - case XK_Right: KeyData.Key.ScanCode = SCAN_RIGHT; break; - - case XK_KP_Up: - case XK_Up: KeyData.Key.ScanCode = SCAN_UP; break; - - case XK_KP_Down: - case XK_Down: KeyData.Key.ScanCode = SCAN_DOWN; break; - - case XK_KP_Delete: - case XK_Delete: KeyData.Key.ScanCode = SCAN_DELETE; break; - - case XK_KP_Insert: - case XK_Insert: KeyData.Key.ScanCode = SCAN_INSERT; break; - - case XK_KP_Page_Up: - case XK_Page_Up: KeyData.Key.ScanCode = SCAN_PAGE_UP; break; - - case XK_KP_Page_Down: - case XK_Page_Down: KeyData.Key.ScanCode = SCAN_PAGE_DOWN; break; - - case XK_Escape: KeyData.Key.ScanCode = SCAN_ESC; break; - - case XK_Pause: KeyData.Key.ScanCode = SCAN_PAUSE; break; - - case XK_KP_F1: - case XK_F1: KeyData.Key.ScanCode = SCAN_F1; break; - - case XK_KP_F2: - case XK_F2: KeyData.Key.ScanCode = SCAN_F2; break; - - case XK_KP_F3: - case XK_F3: KeyData.Key.ScanCode = SCAN_F3; break; - - case XK_KP_F4: - case XK_F4: KeyData.Key.ScanCode = SCAN_F4; break; + case XK_Control_R: + if (Make) { + Drv->KeyState.KeyShiftState |= EFI_RIGHT_CONTROL_PRESSED; + } else { + Drv->KeyState.KeyShiftState &= ~EFI_RIGHT_CONTROL_PRESSED; + } - case XK_F5: KeyData.Key.ScanCode = SCAN_F5; break; - case XK_F6: KeyData.Key.ScanCode = SCAN_F6; break; - case XK_F7: KeyData.Key.ScanCode = SCAN_F7; break; + break; + case XK_Control_L: + if (Make) { + Drv->KeyState.KeyShiftState |= EFI_LEFT_CONTROL_PRESSED; + } else { + Drv->KeyState.KeyShiftState &= ~EFI_LEFT_CONTROL_PRESSED; + } - // Don't map into X11 by default on a Mac - // System Preferences->Keyboard->Keyboard Shortcuts can be configured - // to not use higher function keys as shortcuts and the will show up - // in X11. - case XK_F8: KeyData.Key.ScanCode = SCAN_F8; break; - case XK_F9: KeyData.Key.ScanCode = SCAN_F9; break; - case XK_F10: KeyData.Key.ScanCode = SCAN_F10; break; + break; - case XK_F11: KeyData.Key.ScanCode = SCAN_F11; break; - case XK_F12: KeyData.Key.ScanCode = SCAN_F12; break; + case XK_Shift_R: + if (Make) { + Drv->KeyState.KeyShiftState |= EFI_RIGHT_SHIFT_PRESSED; + } else { + Drv->KeyState.KeyShiftState &= ~EFI_RIGHT_SHIFT_PRESSED; + } - case XK_F13: KeyData.Key.ScanCode = SCAN_F13; break; - case XK_F14: KeyData.Key.ScanCode = SCAN_F14; break; - case XK_F15: KeyData.Key.ScanCode = SCAN_F15; break; - case XK_F16: KeyData.Key.ScanCode = SCAN_F16; break; - case XK_F17: KeyData.Key.ScanCode = SCAN_F17; break; - case XK_F18: KeyData.Key.ScanCode = SCAN_F18; break; - case XK_F19: KeyData.Key.ScanCode = SCAN_F19; break; - case XK_F20: KeyData.Key.ScanCode = SCAN_F20; break; - case XK_F21: KeyData.Key.ScanCode = SCAN_F21; break; - case XK_F22: KeyData.Key.ScanCode = SCAN_F22; break; - case XK_F23: KeyData.Key.ScanCode = SCAN_F23; break; - case XK_F24: KeyData.Key.ScanCode = SCAN_F24; break; + break; + case XK_Shift_L: + if (Make) { + Drv->KeyState.KeyShiftState |= EFI_LEFT_SHIFT_PRESSED; + } else { + Drv->KeyState.KeyShiftState &= ~EFI_LEFT_SHIFT_PRESSED; + } - // No mapping in X11 - //case XK_: KeyData.Key.ScanCode = SCAN_MUTE; break; - //case XK_: KeyData.Key.ScanCode = SCAN_VOLUME_UP; break; - //case XK_: KeyData.Key.ScanCode = SCAN_VOLUME_DOWN; break; - //case XK_: KeyData.Key.ScanCode = SCAN_BRIGHTNESS_UP; break; - //case XK_: KeyData.Key.ScanCode = SCAN_BRIGHTNESS_DOWN; break; - //case XK_: KeyData.Key.ScanCode = SCAN_SUSPEND; break; - //case XK_: KeyData.Key.ScanCode = SCAN_HIBERNATE; break; - //case XK_: KeyData.Key.ScanCode = SCAN_TOGGLE_DISPLAY; break; - //case XK_: KeyData.Key.ScanCode = SCAN_RECOVERY; break; - //case XK_: KeyData.Key.ScanCode = SCAN_EJECT; break; + break; - case XK_BackSpace: KeyData.Key.UnicodeChar = 0x0008; break; + case XK_Mode_switch: + if (Make) { + Drv->KeyState.KeyShiftState |= EFI_LEFT_ALT_PRESSED; + } else { + Drv->KeyState.KeyShiftState &= ~EFI_LEFT_ALT_PRESSED; + } - case XK_KP_Tab: - case XK_Tab: KeyData.Key.UnicodeChar = 0x0009; break; + break; - case XK_Linefeed: KeyData.Key.UnicodeChar = 0x000a; break; + case XK_Meta_R: + if (Make) { + Drv->KeyState.KeyShiftState |= EFI_RIGHT_LOGO_PRESSED; + } else { + Drv->KeyState.KeyShiftState &= ~EFI_RIGHT_LOGO_PRESSED; + } - case XK_KP_Enter: - case XK_Return: KeyData.Key.UnicodeChar = 0x000d; break; + break; + case XK_Meta_L: + if (Make) { + Drv->KeyState.KeyShiftState |= EFI_LEFT_LOGO_PRESSED; + } else { + Drv->KeyState.KeyShiftState &= ~EFI_LEFT_LOGO_PRESSED; + } - case XK_KP_Equal : KeyData.Key.UnicodeChar = L'='; break; - case XK_KP_Multiply : KeyData.Key.UnicodeChar = L'*'; break; - case XK_KP_Add : KeyData.Key.UnicodeChar = L'+'; break; - case XK_KP_Separator : KeyData.Key.UnicodeChar = L'~'; break; - case XK_KP_Subtract : KeyData.Key.UnicodeChar = L'-'; break; - case XK_KP_Decimal : KeyData.Key.UnicodeChar = L'.'; break; - case XK_KP_Divide : KeyData.Key.UnicodeChar = L'/'; break; - - case XK_KP_0 : KeyData.Key.UnicodeChar = L'0'; break; - case XK_KP_1 : KeyData.Key.UnicodeChar = L'1'; break; - case XK_KP_2 : KeyData.Key.UnicodeChar = L'2'; break; - case XK_KP_3 : KeyData.Key.UnicodeChar = L'3'; break; - case XK_KP_4 : KeyData.Key.UnicodeChar = L'4'; break; - case XK_KP_5 : KeyData.Key.UnicodeChar = L'5'; break; - case XK_KP_6 : KeyData.Key.UnicodeChar = L'6'; break; - case XK_KP_7 : KeyData.Key.UnicodeChar = L'7'; break; - case XK_KP_8 : KeyData.Key.UnicodeChar = L'8'; break; - case XK_KP_9 : KeyData.Key.UnicodeChar = L'9'; break; - - default: - ; + break; + + case XK_KP_Home: + case XK_Home: KeyData.Key.ScanCode = SCAN_HOME; + break; + + case XK_KP_End: + case XK_End: KeyData.Key.ScanCode = SCAN_END; + break; + + case XK_KP_Left: + case XK_Left: KeyData.Key.ScanCode = SCAN_LEFT; + break; + + case XK_KP_Right: + case XK_Right: KeyData.Key.ScanCode = SCAN_RIGHT; + break; + + case XK_KP_Up: + case XK_Up: KeyData.Key.ScanCode = SCAN_UP; + break; + + case XK_KP_Down: + case XK_Down: KeyData.Key.ScanCode = SCAN_DOWN; + break; + + case XK_KP_Delete: + case XK_Delete: KeyData.Key.ScanCode = SCAN_DELETE; + break; + + case XK_KP_Insert: + case XK_Insert: KeyData.Key.ScanCode = SCAN_INSERT; + break; + + case XK_KP_Page_Up: + case XK_Page_Up: KeyData.Key.ScanCode = SCAN_PAGE_UP; + break; + + case XK_KP_Page_Down: + case XK_Page_Down: KeyData.Key.ScanCode = SCAN_PAGE_DOWN; + break; + + case XK_Escape: KeyData.Key.ScanCode = SCAN_ESC; + break; + + case XK_Pause: KeyData.Key.ScanCode = SCAN_PAUSE; + break; + + case XK_KP_F1: + case XK_F1: KeyData.Key.ScanCode = SCAN_F1; + break; + + case XK_KP_F2: + case XK_F2: KeyData.Key.ScanCode = SCAN_F2; + break; + + case XK_KP_F3: + case XK_F3: KeyData.Key.ScanCode = SCAN_F3; + break; + + case XK_KP_F4: + case XK_F4: KeyData.Key.ScanCode = SCAN_F4; + break; + + case XK_F5: KeyData.Key.ScanCode = SCAN_F5; + break; + case XK_F6: KeyData.Key.ScanCode = SCAN_F6; + break; + case XK_F7: KeyData.Key.ScanCode = SCAN_F7; + break; + + // Don't map into X11 by default on a Mac + // System Preferences->Keyboard->Keyboard Shortcuts can be configured + // to not use higher function keys as shortcuts and the will show up + // in X11. + case XK_F8: KeyData.Key.ScanCode = SCAN_F8; + break; + case XK_F9: KeyData.Key.ScanCode = SCAN_F9; + break; + case XK_F10: KeyData.Key.ScanCode = SCAN_F10; + break; + + case XK_F11: KeyData.Key.ScanCode = SCAN_F11; + break; + case XK_F12: KeyData.Key.ScanCode = SCAN_F12; + break; + + case XK_F13: KeyData.Key.ScanCode = SCAN_F13; + break; + case XK_F14: KeyData.Key.ScanCode = SCAN_F14; + break; + case XK_F15: KeyData.Key.ScanCode = SCAN_F15; + break; + case XK_F16: KeyData.Key.ScanCode = SCAN_F16; + break; + case XK_F17: KeyData.Key.ScanCode = SCAN_F17; + break; + case XK_F18: KeyData.Key.ScanCode = SCAN_F18; + break; + case XK_F19: KeyData.Key.ScanCode = SCAN_F19; + break; + case XK_F20: KeyData.Key.ScanCode = SCAN_F20; + break; + case XK_F21: KeyData.Key.ScanCode = SCAN_F21; + break; + case XK_F22: KeyData.Key.ScanCode = SCAN_F22; + break; + case XK_F23: KeyData.Key.ScanCode = SCAN_F23; + break; + case XK_F24: KeyData.Key.ScanCode = SCAN_F24; + break; + + // No mapping in X11 + // case XK_: KeyData.Key.ScanCode = SCAN_MUTE; break; + // case XK_: KeyData.Key.ScanCode = SCAN_VOLUME_UP; break; + // case XK_: KeyData.Key.ScanCode = SCAN_VOLUME_DOWN; break; + // case XK_: KeyData.Key.ScanCode = SCAN_BRIGHTNESS_UP; break; + // case XK_: KeyData.Key.ScanCode = SCAN_BRIGHTNESS_DOWN; break; + // case XK_: KeyData.Key.ScanCode = SCAN_SUSPEND; break; + // case XK_: KeyData.Key.ScanCode = SCAN_HIBERNATE; break; + // case XK_: KeyData.Key.ScanCode = SCAN_TOGGLE_DISPLAY; break; + // case XK_: KeyData.Key.ScanCode = SCAN_RECOVERY; break; + // case XK_: KeyData.Key.ScanCode = SCAN_EJECT; break; + + case XK_BackSpace: KeyData.Key.UnicodeChar = 0x0008; + break; + + case XK_KP_Tab: + case XK_Tab: KeyData.Key.UnicodeChar = 0x0009; + break; + + case XK_Linefeed: KeyData.Key.UnicodeChar = 0x000a; + break; + + case XK_KP_Enter: + case XK_Return: KeyData.Key.UnicodeChar = 0x000d; + break; + + case XK_KP_Equal: KeyData.Key.UnicodeChar = L'='; + break; + case XK_KP_Multiply: KeyData.Key.UnicodeChar = L'*'; + break; + case XK_KP_Add: KeyData.Key.UnicodeChar = L'+'; + break; + case XK_KP_Separator: KeyData.Key.UnicodeChar = L'~'; + break; + case XK_KP_Subtract: KeyData.Key.UnicodeChar = L'-'; + break; + case XK_KP_Decimal: KeyData.Key.UnicodeChar = L'.'; + break; + case XK_KP_Divide: KeyData.Key.UnicodeChar = L'/'; + break; + + case XK_KP_0: KeyData.Key.UnicodeChar = L'0'; + break; + case XK_KP_1: KeyData.Key.UnicodeChar = L'1'; + break; + case XK_KP_2: KeyData.Key.UnicodeChar = L'2'; + break; + case XK_KP_3: KeyData.Key.UnicodeChar = L'3'; + break; + case XK_KP_4: KeyData.Key.UnicodeChar = L'4'; + break; + case XK_KP_5: KeyData.Key.UnicodeChar = L'5'; + break; + case XK_KP_6: KeyData.Key.UnicodeChar = L'6'; + break; + case XK_KP_7: KeyData.Key.UnicodeChar = L'7'; + break; + case XK_KP_8: KeyData.Key.UnicodeChar = L'8'; + break; + case XK_KP_9: KeyData.Key.UnicodeChar = L'9'; + break; + + default: + ; } // The global state is our state - KeyData.KeyState.KeyShiftState = Drv->KeyState.KeyShiftState; + KeyData.KeyState.KeyShiftState = Drv->KeyState.KeyShiftState; KeyData.KeyState.KeyToggleState = Drv->KeyState.KeyToggleState; if (*KeySym < XK_BackSpace) { if (((Drv->KeyState.KeyShiftState & (EFI_LEFT_SHIFT_PRESSED | EFI_RIGHT_SHIFT_PRESSED)) != 0) || - ((Drv->KeyState.KeyToggleState & EFI_CAPS_LOCK_ACTIVE) != 0) ) { - + ((Drv->KeyState.KeyToggleState & EFI_CAPS_LOCK_ACTIVE) != 0)) + { KeyData.Key.UnicodeChar = (CHAR16)KeySym[KEYSYM_UPPER]; // Per UEFI spec since we converted the Unicode clear the shift bits we pass up @@ -457,7 +534,6 @@ handleKeyEvent ( } } else { // XK_BackSpace is the start of XK_MISCELLANY. These are the XK_? keys we process in this file - ; } if (Make) { @@ -465,32 +541,31 @@ handleKeyEvent ( Drv->key_wr = (Drv->key_wr + 1) % NBR_KEYS; Drv->key_count++; if (Drv->MakeRegisterdKeyCallback != NULL) { - ReverseGasketUint64Uint64 (Drv->MakeRegisterdKeyCallback ,Drv->RegisterdKeyCallbackContext, &KeyData); + ReverseGasketUint64Uint64 (Drv->MakeRegisterdKeyCallback, Drv->RegisterdKeyCallbackContext, &KeyData); } } else { if (Drv->BreakRegisterdKeyCallback != NULL) { - ReverseGasketUint64Uint64 (Drv->BreakRegisterdKeyCallback ,Drv->RegisterdKeyCallbackContext, &KeyData); + ReverseGasketUint64Uint64 (Drv->BreakRegisterdKeyCallback, Drv->RegisterdKeyCallbackContext, &KeyData); } } } - void -handleMouseMoved( - IN GRAPHICS_IO_PRIVATE *Drv, - IN XEvent *ev +handleMouseMoved ( + IN GRAPHICS_IO_PRIVATE *Drv, + IN XEvent *ev ) { if (ev->xmotion.x != Drv->previous_x) { - Drv->pointer_state.RelativeMovementX += ( ev->xmotion.x - Drv->previous_x ); - Drv->previous_x = ev->xmotion.x; - Drv->pointer_state_changed = 1; + Drv->pointer_state.RelativeMovementX += (ev->xmotion.x - Drv->previous_x); + Drv->previous_x = ev->xmotion.x; + Drv->pointer_state_changed = 1; } if (ev->xmotion.y != Drv->previous_y) { - Drv->pointer_state.RelativeMovementY += ( ev->xmotion.y - Drv->previous_y ); - Drv->previous_y = ev->xmotion.y; - Drv->pointer_state_changed = 1; + Drv->pointer_state.RelativeMovementY += (ev->xmotion.y - Drv->previous_y); + Drv->previous_y = ev->xmotion.y; + Drv->pointer_state_changed = 1; } Drv->pointer_state.RelativeMovementZ = 0; @@ -498,90 +573,124 @@ handleMouseMoved( void handleMouseDown ( - IN GRAPHICS_IO_PRIVATE *Drv, - IN XEvent *ev, - IN BOOLEAN Pressed + IN GRAPHICS_IO_PRIVATE *Drv, + IN XEvent *ev, + IN BOOLEAN Pressed ) { if (ev->xbutton.button == Button1) { - Drv->pointer_state_changed = (Drv->pointer_state.LeftButton != Pressed); + Drv->pointer_state_changed = (Drv->pointer_state.LeftButton != Pressed); Drv->pointer_state.LeftButton = Pressed; } + if ( ev->xbutton.button == Button2 ) { - Drv->pointer_state_changed = (Drv->pointer_state.RightButton != Pressed); + Drv->pointer_state_changed = (Drv->pointer_state.RightButton != Pressed); Drv->pointer_state.RightButton = Pressed; } } void Redraw ( - IN GRAPHICS_IO_PRIVATE *Drv, - IN UINTN X, - IN UINTN Y, - IN UINTN Width, - IN UINTN Height + IN GRAPHICS_IO_PRIVATE *Drv, + IN UINTN X, + IN UINTN Y, + IN UINTN Width, + IN UINTN Height ) { if (Drv->use_shm) { XShmPutImage ( - Drv->display, Drv->win, Drv->gc, Drv->image, X, Y, X, Y, Width, Height, False + Drv->display, + Drv->win, + Drv->gc, + Drv->image, + X, + Y, + X, + Y, + Width, + Height, + False ); } else { XPutImage ( - Drv->display, Drv->win, Drv->gc, Drv->image, X, Y, X, Y, Width, Height + Drv->display, + Drv->win, + Drv->gc, + Drv->image, + X, + Y, + X, + Y, + Width, + Height ); } - XFlush(Drv->display); + + XFlush (Drv->display); } void -HandleEvent(GRAPHICS_IO_PRIVATE *Drv, XEvent *ev) +HandleEvent ( + GRAPHICS_IO_PRIVATE *Drv, + XEvent *ev + ) { switch (ev->type) { - case Expose: - Redraw (Drv, ev->xexpose.x, ev->xexpose.y, - ev->xexpose.width, ev->xexpose.height); - break; - case GraphicsExpose: - Redraw (Drv, ev->xgraphicsexpose.x, ev->xgraphicsexpose.y, - ev->xgraphicsexpose.width, ev->xgraphicsexpose.height); - break; - case KeyPress: - handleKeyEvent (Drv, ev, TRUE); - break; - case KeyRelease: - handleKeyEvent (Drv, ev, FALSE); - break; - case MappingNotify: - XRefreshKeyboardMapping (&ev->xmapping); - break; - case MotionNotify: - handleMouseMoved (Drv, ev); - break; - case ButtonPress: - handleMouseDown (Drv, ev, TRUE); - break; - case ButtonRelease: - handleMouseDown (Drv, ev, FALSE); - break; -#if 0 - case DestroyNotify: - XCloseDisplay (Drv->display); - exit (1); - break; -#endif - case NoExpose: - default: - break; + case Expose: + Redraw ( + Drv, + ev->xexpose.x, + ev->xexpose.y, + ev->xexpose.width, + ev->xexpose.height + ); + break; + case GraphicsExpose: + Redraw ( + Drv, + ev->xgraphicsexpose.x, + ev->xgraphicsexpose.y, + ev->xgraphicsexpose.width, + ev->xgraphicsexpose.height + ); + break; + case KeyPress: + handleKeyEvent (Drv, ev, TRUE); + break; + case KeyRelease: + handleKeyEvent (Drv, ev, FALSE); + break; + case MappingNotify: + XRefreshKeyboardMapping (&ev->xmapping); + break; + case MotionNotify: + handleMouseMoved (Drv, ev); + break; + case ButtonPress: + handleMouseDown (Drv, ev, TRUE); + break; + case ButtonRelease: + handleMouseDown (Drv, ev, FALSE); + break; + #if 0 + case DestroyNotify: + XCloseDisplay (Drv->display); + exit (1); + break; + #endif + case NoExpose: + default: + break; } } void HandleEvents ( - IN GRAPHICS_IO_PRIVATE *Drv + IN GRAPHICS_IO_PRIVATE *Drv ) { - XEvent ev; + XEvent ev; while (XPending (Drv->display) != 0) { XNextEvent (Drv->display, &ev); @@ -591,37 +700,36 @@ HandleEvents ( unsigned long X11PixelToColor ( - IN GRAPHICS_IO_PRIVATE *Drv, - IN EFI_UGA_PIXEL pixel + IN GRAPHICS_IO_PRIVATE *Drv, + IN EFI_UGA_PIXEL pixel ) { return ((pixel.Red >> Drv->r.csize) << Drv->r.shift) - | ((pixel.Green >> Drv->g.csize) << Drv->g.shift) - | ((pixel.Blue >> Drv->b.csize) << Drv->b.shift); + | ((pixel.Green >> Drv->g.csize) << Drv->g.shift) + | ((pixel.Blue >> Drv->b.csize) << Drv->b.shift); } EFI_UGA_PIXEL X11ColorToPixel ( - IN GRAPHICS_IO_PRIVATE *Drv, - IN unsigned long val + IN GRAPHICS_IO_PRIVATE *Drv, + IN unsigned long val ) { - EFI_UGA_PIXEL Pixel; + EFI_UGA_PIXEL Pixel; memset (&Pixel, 0, sizeof (EFI_UGA_PIXEL)); // Truncation not an issue since X11 and EFI are both using 8 bits per color - Pixel.Red = (val >> Drv->r.shift) << Drv->r.csize; + Pixel.Red = (val >> Drv->r.shift) << Drv->r.csize; Pixel.Green = (val >> Drv->g.shift) << Drv->g.csize; - Pixel.Blue = (val >> Drv->b.shift) << Drv->b.csize; + Pixel.Blue = (val >> Drv->b.shift) << Drv->b.csize; return Pixel; } - EFI_STATUS X11CheckKey ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo ) { GRAPHICS_IO_PRIVATE *Drv; @@ -643,8 +751,8 @@ X11GetKey ( IN EFI_KEY_DATA *KeyData ) { - EFI_STATUS EfiStatus; - GRAPHICS_IO_PRIVATE *Drv; + EFI_STATUS EfiStatus; + GRAPHICS_IO_PRIVATE *Drv; Drv = (GRAPHICS_IO_PRIVATE *)GraphicsIo; @@ -660,11 +768,10 @@ X11GetKey ( return EFI_SUCCESS; } - EFI_STATUS X11KeySetState ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, - IN EFI_KEY_TOGGLE_STATE *KeyToggleState + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, + IN EFI_KEY_TOGGLE_STATE *KeyToggleState ) { GRAPHICS_IO_PRIVATE *Drv; @@ -684,13 +791,12 @@ X11KeySetState ( return EFI_SUCCESS; } - EFI_STATUS X11RegisterKeyNotify ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, - IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack, - IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack, - IN VOID *Context + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, + IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack, + IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack, + IN VOID *Context ) { GRAPHICS_IO_PRIVATE *Drv; @@ -704,36 +810,35 @@ X11RegisterKeyNotify ( return EFI_SUCCESS; } - EFI_STATUS X11Blt ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, - IN EFI_UGA_PIXEL *BltBuffer OPTIONAL, - IN EFI_UGA_BLT_OPERATION BltOperation, - IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, + IN EFI_UGA_PIXEL *BltBuffer OPTIONAL, + IN EFI_UGA_BLT_OPERATION BltOperation, + IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args ) { - GRAPHICS_IO_PRIVATE *Private; - UINTN DstY; - UINTN SrcY; - UINTN DstX; - UINTN SrcX; - UINTN Index; - EFI_UGA_PIXEL *Blt; - UINT8 *Dst; - UINT8 *Src; - UINTN Nbr; - unsigned long Color; - XEvent ev; + GRAPHICS_IO_PRIVATE *Private; + UINTN DstY; + UINTN SrcY; + UINTN DstX; + UINTN SrcX; + UINTN Index; + EFI_UGA_PIXEL *Blt; + UINT8 *Dst; + UINT8 *Src; + UINTN Nbr; + unsigned long Color; + XEvent ev; Private = (GRAPHICS_IO_PRIVATE *)GraphicsIo; - // // Check bounds // - if (BltOperation == EfiUgaVideoToBltBuffer - || BltOperation == EfiUgaVideoToVideo) { + if ( (BltOperation == EfiUgaVideoToBltBuffer) + || (BltOperation == EfiUgaVideoToVideo)) + { // // Source is Video. // @@ -746,9 +851,10 @@ X11Blt ( } } - if (BltOperation == EfiUgaBltBufferToVideo - || BltOperation == EfiUgaVideoToVideo - || BltOperation == EfiUgaVideoFill) { + if ( (BltOperation == EfiUgaBltBufferToVideo) + || (BltOperation == EfiUgaVideoToVideo) + || (BltOperation == EfiUgaVideoFill)) + { // // Destination is Video // @@ -762,106 +868,125 @@ X11Blt ( } switch (BltOperation) { - case EfiUgaVideoToBltBuffer: - Blt = (EFI_UGA_PIXEL *)((UINT8 *)BltBuffer + (Args->DestinationY * Args->Delta) + Args->DestinationX * sizeof (EFI_UGA_PIXEL)); - Args->Delta -= Args->Width * sizeof (EFI_UGA_PIXEL); - for (SrcY = Args->SourceY; SrcY < (Args->Height + Args->SourceY); SrcY++) { - for (SrcX = Args->SourceX; SrcX < (Args->Width + Args->SourceX); SrcX++) { - *Blt++ = X11ColorToPixel (Private, XGetPixel (Private->image, SrcX, SrcY)); + case EfiUgaVideoToBltBuffer: + Blt = (EFI_UGA_PIXEL *)((UINT8 *)BltBuffer + (Args->DestinationY * Args->Delta) + Args->DestinationX * sizeof (EFI_UGA_PIXEL)); + Args->Delta -= Args->Width * sizeof (EFI_UGA_PIXEL); + for (SrcY = Args->SourceY; SrcY < (Args->Height + Args->SourceY); SrcY++) { + for (SrcX = Args->SourceX; SrcX < (Args->Width + Args->SourceX); SrcX++) { + *Blt++ = X11ColorToPixel (Private, XGetPixel (Private->image, SrcX, SrcY)); + } + + Blt = (EFI_UGA_PIXEL *)((UINT8 *)Blt + Args->Delta); } - Blt = (EFI_UGA_PIXEL *) ((UINT8 *) Blt + Args->Delta); - } - break; - case EfiUgaBltBufferToVideo: - Blt = (EFI_UGA_PIXEL *)((UINT8 *)BltBuffer + (Args->SourceY * Args->Delta) + Args->SourceX * sizeof (EFI_UGA_PIXEL)); - Args->Delta -= Args->Width * sizeof (EFI_UGA_PIXEL); - for (DstY = Args->DestinationY; DstY < (Args->Height + Args->DestinationY); DstY++) { - for (DstX = Args->DestinationX; DstX < (Args->Width + Args->DestinationX); DstX++) { - XPutPixel(Private->image, DstX, DstY, X11PixelToColor(Private, *Blt)); - Blt++; - } - Blt = (EFI_UGA_PIXEL *) ((UINT8 *) Blt + Args->Delta); - } - break; - case EfiUgaVideoToVideo: - Dst = Private->image_data + (Args->DestinationX << Private->pixel_shift) - + Args->DestinationY * Private->line_bytes; - Src = Private->image_data + (Args->SourceX << Private->pixel_shift) - + Args->SourceY * Private->line_bytes; - Nbr = Args->Width << Private->pixel_shift; - if (Args->DestinationY < Args->SourceY) { - for (Index = 0; Index < Args->Height; Index++) { - memcpy (Dst, Src, Nbr); - Dst += Private->line_bytes; - Src += Private->line_bytes; + + break; + case EfiUgaBltBufferToVideo: + Blt = (EFI_UGA_PIXEL *)((UINT8 *)BltBuffer + (Args->SourceY * Args->Delta) + Args->SourceX * sizeof (EFI_UGA_PIXEL)); + Args->Delta -= Args->Width * sizeof (EFI_UGA_PIXEL); + for (DstY = Args->DestinationY; DstY < (Args->Height + Args->DestinationY); DstY++) { + for (DstX = Args->DestinationX; DstX < (Args->Width + Args->DestinationX); DstX++) { + XPutPixel (Private->image, DstX, DstY, X11PixelToColor (Private, *Blt)); + Blt++; + } + + Blt = (EFI_UGA_PIXEL *)((UINT8 *)Blt + Args->Delta); } - } else { - Dst += (Args->Height - 1) * Private->line_bytes; - Src += (Args->Height - 1) * Private->line_bytes; - for (Index = 0; Index < Args->Height; Index++) { - // - // Source and Destination Y may be equal, therefore Dst and Src may - // overlap. - // - memmove (Dst, Src, Nbr); - Dst -= Private->line_bytes; - Src -= Private->line_bytes; + + break; + case EfiUgaVideoToVideo: + Dst = Private->image_data + (Args->DestinationX << Private->pixel_shift) + + Args->DestinationY * Private->line_bytes; + Src = Private->image_data + (Args->SourceX << Private->pixel_shift) + + Args->SourceY * Private->line_bytes; + Nbr = Args->Width << Private->pixel_shift; + if (Args->DestinationY < Args->SourceY) { + for (Index = 0; Index < Args->Height; Index++) { + memcpy (Dst, Src, Nbr); + Dst += Private->line_bytes; + Src += Private->line_bytes; + } + } else { + Dst += (Args->Height - 1) * Private->line_bytes; + Src += (Args->Height - 1) * Private->line_bytes; + for (Index = 0; Index < Args->Height; Index++) { + // + // Source and Destination Y may be equal, therefore Dst and Src may + // overlap. + // + memmove (Dst, Src, Nbr); + Dst -= Private->line_bytes; + Src -= Private->line_bytes; + } } - } - break; - case EfiUgaVideoFill: - Color = X11PixelToColor(Private, *BltBuffer); - for (DstY = Args->DestinationY; DstY < (Args->Height + Args->DestinationY); DstY++) { - for (DstX = Args->DestinationX; DstX < (Args->Width + Args->DestinationX); DstX++) { - XPutPixel(Private->image, DstX, DstY, Color); + + break; + case EfiUgaVideoFill: + Color = X11PixelToColor (Private, *BltBuffer); + for (DstY = Args->DestinationY; DstY < (Args->Height + Args->DestinationY); DstY++) { + for (DstX = Args->DestinationX; DstX < (Args->Width + Args->DestinationX); DstX++) { + XPutPixel (Private->image, DstX, DstY, Color); + } } - } - break; - default: - return EFI_INVALID_PARAMETER; + + break; + default: + return EFI_INVALID_PARAMETER; } // // Refresh screen. // switch (BltOperation) { - case EfiUgaVideoToVideo: - XCopyArea( - Private->display, Private->win, Private->win, Private->gc, - Args->SourceX, Args->SourceY, Args->Width, Args->Height, - Args->DestinationX, Args->DestinationY - ); - - while (1) { - XNextEvent (Private->display, &ev); - HandleEvent (Private, &ev); - if (ev.type == NoExpose || ev.type == GraphicsExpose) { - break; + case EfiUgaVideoToVideo: + XCopyArea ( + Private->display, + Private->win, + Private->win, + Private->gc, + Args->SourceX, + Args->SourceY, + Args->Width, + Args->Height, + Args->DestinationX, + Args->DestinationY + ); + + while (1) { + XNextEvent (Private->display, &ev); + HandleEvent (Private, &ev); + if ((ev.type == NoExpose) || (ev.type == GraphicsExpose)) { + break; + } } - } - break; - case EfiUgaVideoFill: - Color = X11PixelToColor (Private, *BltBuffer); - XSetForeground (Private->display, Private->gc, Color); - XFillRectangle ( - Private->display, Private->win, Private->gc, - Args->DestinationX, Args->DestinationY, Args->Width, Args->Height - ); - XFlush (Private->display); - break; - case EfiUgaBltBufferToVideo: - Redraw (Private, Args->DestinationX, Args->DestinationY, Args->Width, Args->Height); - break; - default: - break; + + break; + case EfiUgaVideoFill: + Color = X11PixelToColor (Private, *BltBuffer); + XSetForeground (Private->display, Private->gc, Color); + XFillRectangle ( + Private->display, + Private->win, + Private->gc, + Args->DestinationX, + Args->DestinationY, + Args->Width, + Args->Height + ); + XFlush (Private->display); + break; + case EfiUgaBltBufferToVideo: + Redraw (Private, Args->DestinationX, Args->DestinationY, Args->Width, Args->Height); + break; + default: + break; } + return EFI_SUCCESS; } - EFI_STATUS X11CheckPointer ( - IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo + IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo ) { GRAPHICS_IO_PRIVATE *Drv; @@ -876,15 +1001,14 @@ X11CheckPointer ( return EFI_NOT_READY; } - EFI_STATUS X11GetPointerState ( IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, IN EFI_SIMPLE_POINTER_STATE *State ) { - EFI_STATUS EfiStatus; - GRAPHICS_IO_PRIVATE *Drv; + EFI_STATUS EfiStatus; + GRAPHICS_IO_PRIVATE *Drv; Drv = (GRAPHICS_IO_PRIVATE *)GraphicsIo; @@ -898,60 +1022,62 @@ X11GetPointerState ( Drv->pointer_state.RelativeMovementX = 0; Drv->pointer_state.RelativeMovementY = 0; Drv->pointer_state.RelativeMovementZ = 0; - Drv->pointer_state_changed = 0; + Drv->pointer_state_changed = 0; return EFI_SUCCESS; } - - EFI_STATUS X11GraphicsWindowOpen ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { - GRAPHICS_IO_PRIVATE *Drv; - unsigned int border_width = 0; - char *display_name = NULL; + GRAPHICS_IO_PRIVATE *Drv; + unsigned int border_width = 0; + char *display_name = NULL; Drv = (GRAPHICS_IO_PRIVATE *)calloc (1, sizeof (GRAPHICS_IO_PRIVATE)); if (Drv == NULL) { return EFI_OUT_OF_RESOURCES; } - Drv->GraphicsIo.Size = GasketX11Size; - Drv->GraphicsIo.CheckKey = GasketX11CheckKey; - Drv->GraphicsIo.GetKey = GasketX11GetKey; - Drv->GraphicsIo.KeySetState = GasketX11KeySetState; - Drv->GraphicsIo.RegisterKeyNotify = GasketX11RegisterKeyNotify; - Drv->GraphicsIo.Blt = GasketX11Blt; - Drv->GraphicsIo.CheckPointer = GasketX11CheckPointer; - Drv->GraphicsIo.GetPointerState = GasketX11GetPointerState; - - - Drv->key_count = 0; - Drv->key_rd = 0; - Drv->key_wr = 0; + Drv->GraphicsIo.Size = GasketX11Size; + Drv->GraphicsIo.CheckKey = GasketX11CheckKey; + Drv->GraphicsIo.GetKey = GasketX11GetKey; + Drv->GraphicsIo.KeySetState = GasketX11KeySetState; + Drv->GraphicsIo.RegisterKeyNotify = GasketX11RegisterKeyNotify; + Drv->GraphicsIo.Blt = GasketX11Blt; + Drv->GraphicsIo.CheckPointer = GasketX11CheckPointer; + Drv->GraphicsIo.GetPointerState = GasketX11GetPointerState; + + Drv->key_count = 0; + Drv->key_rd = 0; + Drv->key_wr = 0; Drv->KeyState.KeyShiftState = EFI_SHIFT_STATE_VALID; Drv->KeyState.KeyToggleState = EFI_TOGGLE_STATE_VALID; Drv->MakeRegisterdKeyCallback = NULL; Drv->BreakRegisterdKeyCallback = NULL; Drv->RegisterdKeyCallbackContext = NULL; - Drv->display = XOpenDisplay (display_name); if (Drv->display == NULL) { fprintf (stderr, "uga: cannot connect to X server %s\n", XDisplayName (display_name)); free (Drv); return EFI_DEVICE_ERROR; } + Drv->screen = DefaultScreen (Drv->display); Drv->visual = DefaultVisual (Drv->display, Drv->screen); - Drv->win = XCreateSimpleWindow ( - Drv->display, RootWindow (Drv->display, Drv->screen), - 0, 0, 4, 4, border_width, - WhitePixel (Drv->display, Drv->screen), - BlackPixel (Drv->display, Drv->screen) - ); + Drv->win = XCreateSimpleWindow ( + Drv->display, + RootWindow (Drv->display, Drv->screen), + 0, + 0, + 4, + 4, + border_width, + WhitePixel (Drv->display, Drv->screen), + BlackPixel (Drv->display, Drv->screen) + ); Drv->depth = DefaultDepth (Drv->display, Drv->screen); XDefineCursor (Drv->display, Drv->win, XCreateFontCursor (Drv->display, XC_pirate)); @@ -960,9 +1086,10 @@ X11GraphicsWindowOpen ( UnicodeStrToAsciiStrS (This->ConfigString, Drv->Title, StrSize (This->ConfigString)); XStoreName (Drv->display, Drv->win, Drv->Title); -// XAutoRepeatOff (Drv->display); + // XAutoRepeatOff (Drv->display); XSelectInput ( - Drv->display, Drv->win, + Drv->display, + Drv->win, ExposureMask | KeyPressMask | KeyReleaseMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask ); Drv->gc = DefaultGC (Drv->display, Drv->screen); @@ -972,13 +1099,12 @@ X11GraphicsWindowOpen ( return EFI_SUCCESS; } - EFI_STATUS X11GraphicsWindowClose ( - IN EMU_IO_THUNK_PROTOCOL *This + IN EMU_IO_THUNK_PROTOCOL *This ) { - GRAPHICS_IO_PRIVATE *Drv; + GRAPHICS_IO_PRIVATE *Drv; Drv = (GRAPHICS_IO_PRIVATE *)This->Private; @@ -987,29 +1113,29 @@ X11GraphicsWindowClose ( } if (Drv->image != NULL) { - XDestroyImage(Drv->image); + XDestroyImage (Drv->image); if (Drv->use_shm) { shmdt (Drv->image_data); } Drv->image_data = NULL; - Drv->image = NULL; + Drv->image = NULL; } + XDestroyWindow (Drv->display, Drv->win); XCloseDisplay (Drv->display); -#ifdef __APPLE__ + #ifdef __APPLE__ // Free up the shared memory shmctl (Drv->xshm_info.shmid, IPC_RMID, NULL); -#endif + #endif free (Drv); return EFI_SUCCESS; } - -EMU_IO_THUNK_PROTOCOL gX11ThunkIo = { +EMU_IO_THUNK_PROTOCOL gX11ThunkIo = { &gEmuGraphicsWindowProtocolGuid, NULL, NULL, @@ -1018,5 +1144,3 @@ EMU_IO_THUNK_PROTOCOL gX11ThunkIo = { GasketX11GraphicsWindowClose, NULL }; - - -- cgit v1.2.3