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 <afish@apple.com>
Cc: Leif Lindholm <leif@nuviainc.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
This commit is contained in:
Michael Kubacki
2021-12-05 14:53:57 -08:00
committed by mergify[bot]
parent e7108d0e96
commit a550d468a6
111 changed files with 6170 additions and 6345 deletions

View File

@ -11,53 +11,48 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "Host.h"
#ifdef __APPLE__
#include <Library/NetLib.h>
#include <Library/NetLib.h>
#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,

View File

@ -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 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 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;
case EROFS:
Private->Media->ReadOnly = TRUE;
ReinstallBlockIoFlag = FALSE;
Status = EFI_WRITE_PROTECTED;
break;
default:
ReinstallBlockIoFlag = FALSE;
Status = EFI_DEVICE_ERROR;
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,

View File

@ -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 <assert.h>
#include <CoreServices/CoreServices.h>
#include <mach/mach.h>
#include <mach/mach_time.h>
#include <assert.h>
#include <CoreServices/CoreServices.h>
#include <mach/mach.h>
#include <mach/mach_time.h>
#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 ();
}

View File

@ -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

View File

@ -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);
}

View File

@ -30,9 +30,9 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <sys/time.h>
#if __CYGWIN__
#include <sys/dirent.h>
#include <sys/dirent.h>
#else
#include <sys/dir.h>
#include <sys/dir.h>
#endif
#include <sys/mman.h>
@ -56,19 +56,19 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <ifaddrs.h>
#ifdef __APPLE__
#include <net/if_dl.h>
#include <net/bpf.h>
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/disk.h>
#include <net/if_dl.h>
#include <net/bpf.h>
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/disk.h>
#define _XOPEN_SOURCE
#ifndef _Bool
#define _Bool char // for clang debug
#endif
#ifndef _Bool
#define _Bool char // for clang debug
#endif
#else
#include <termio.h>
#include <sys/vfs.h>
#include <linux/fs.h>
#include <termio.h>
#include <sys/vfs.h>
#include <linux/fs.h>
#endif
#include <utime.h>
@ -120,31 +120,27 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Guid/FileSystemInfo.h>
#include <Guid/FileSystemVolumeLabelInfo.h>
#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 SecSleep (UINT64 Nanoseconds);
VOID SecEnableInterrupt (VOID);
VOID SecDisableInterrupt (VOID);
BOOLEAN SecInterruptEanbled (VOID);
VOID
SecEnableInterrupt (
VOID
);
VOID
SecDisableInterrupt (
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;
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;
#endif

View File

@ -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
//

View File

@ -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;
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;
} 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,

View File

@ -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);
}

File diff suppressed because it is too large Load Diff

View File

@ -12,48 +12,43 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Host.h"
#include <pthread.h>
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
};

File diff suppressed because it is too large Load Diff