Adding Simple Pointer, GOP, SimpleTextInEx, and Networking protocols to the emulator. Cleaned up POSIX include situation by centralizing it in a single file, like NT32. Fixed TPL issue with TPL High not being emulated correctly, it was possible to take a timer tick when the locks in the DXE core should have prevented this. Remove some unused files to make things easier to maintain.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11105 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -20,6 +20,8 @@ Abstract:
|
||||
#ifndef _UNIX_IO_H_
|
||||
#define _UNIX_IO_H_
|
||||
|
||||
#include <Protocol/UnixThunk.h>
|
||||
|
||||
#define EFI_UNIX_IO_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xf2e23f54, 0x8985, 0x11db, {0xac, 0x79, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \
|
||||
@@ -139,4 +141,14 @@ extern EFI_GUID gEfiUnixCPUModelGuid;
|
||||
|
||||
extern EFI_GUID gEfiUnixCPUSpeedGuid;
|
||||
|
||||
//
|
||||
// EFI_UNIX_NETWORK
|
||||
//
|
||||
#define EFI_UNIX_NETWORK_GUID \
|
||||
{ \
|
||||
0x081603B4, 0x0F1D, 0x4022, {0xB6, 0xFD, 0x4C, 0xE3, 0x5E, 0x09, 0xA1, 0xA6 } \
|
||||
}
|
||||
|
||||
extern EFI_GUID gEfiUnixNetworkGuid;
|
||||
|
||||
#endif
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2009, Intel Corporation. All rights reserved.<BR>
|
||||
Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
|
||||
Portions copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -51,10 +51,21 @@ Abstract:
|
||||
#include <stdlib.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <netdb.h>
|
||||
#include <netinet/in.h>
|
||||
#include <net/if.h>
|
||||
#include <net/if_dl.h>
|
||||
#include <ifaddrs.h>
|
||||
#include <net/bpf.h>
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include <sys/param.h>
|
||||
#include <sys/mount.h>
|
||||
#define _XOPEN_SOURCE
|
||||
#ifndef _Bool
|
||||
#define _Bool char // for clang debug
|
||||
#endif
|
||||
#else
|
||||
#include <termio.h>
|
||||
#include <sys/vfs.h>
|
||||
@@ -76,7 +87,15 @@ Abstract:
|
||||
#pragma pack(4)
|
||||
#endif
|
||||
|
||||
#if __DARWIN_64_BIT_INO_T
|
||||
#if defined(__DARWIN_64_BIT_INO_T)
|
||||
|
||||
|
||||
typedef struct {
|
||||
UINTN tv_sec; /* seconds */
|
||||
UINTN tv_nsec; /* and nanoseconds */
|
||||
} EFI_timespec;
|
||||
|
||||
|
||||
|
||||
typedef struct stat_fix { \
|
||||
dev_t st_dev; /* [XSI] ID of device containing file */
|
||||
@@ -86,7 +105,15 @@ typedef struct stat_fix { \
|
||||
uid_t st_uid; /* [XSI] User ID of the file */
|
||||
gid_t st_gid; /* [XSI] Group ID of the file */
|
||||
dev_t st_rdev; /* [XSI] Device ID */
|
||||
__DARWIN_STRUCT_STAT64_TIMES
|
||||
|
||||
// clang for X64 ABI follows Windows and a long is 32-bits
|
||||
// this breaks system inlcude files so that is why we need
|
||||
// to redefine timespec as EFI_timespec
|
||||
EFI_timespec st_atimespec;
|
||||
EFI_timespec st_mtimespec;
|
||||
EFI_timespec st_ctimespec;
|
||||
EFI_timespec st_birthtimespec;
|
||||
|
||||
off_t st_size; /* [XSI] file size, in bytes */
|
||||
blkcnt_t st_blocks; /* [XSI] blocks allocated for file */
|
||||
blksize_t st_blksize; /* [XSI] optimal blocksize for I/O */
|
||||
@@ -358,6 +385,35 @@ VOID
|
||||
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||
);
|
||||
|
||||
typedef
|
||||
int
|
||||
(EFIAPI *UnixGetIfAddrs) (
|
||||
struct ifaddrs **ifap
|
||||
);
|
||||
|
||||
typedef
|
||||
void
|
||||
(EFIAPI *UnixFreeIfAddrs) (
|
||||
struct ifaddrs *ifap
|
||||
);
|
||||
|
||||
typedef
|
||||
int
|
||||
(EFIAPI *UnixSocket) (
|
||||
int domain,
|
||||
int type,
|
||||
int protocol
|
||||
);
|
||||
|
||||
typedef
|
||||
void
|
||||
(EFIAPI *UnixDisableInterruptEmulation) (void);
|
||||
|
||||
typedef
|
||||
void
|
||||
(EFIAPI *UnixEnableInterruptEmulation) (void);
|
||||
|
||||
|
||||
|
||||
|
||||
#define EFI_UNIX_THUNK_PROTOCOL_SIGNATURE SIGNATURE_32 ('L', 'N', 'X', 'T')
|
||||
@@ -407,8 +463,12 @@ typedef struct _EFI_UNIX_THUNK_PROTOCOL {
|
||||
UnixPeCoffGetEntryPoint PeCoffGetEntryPoint;
|
||||
UnixPeCoffRelocateImageExtraAction PeCoffRelocateImageExtraAction;
|
||||
UnixPeCoffLoaderUnloadImageExtraAction PeCoffUnloadImageExtraAction;
|
||||
UnixEnableInterruptEmulation EnableInterrupt;
|
||||
UnixDisableInterruptEmulation DisableInterrupt;
|
||||
|
||||
|
||||
UnixGetIfAddrs GetIfAddrs;
|
||||
UnixFreeIfAddrs FreeIfAddrs;
|
||||
UnixSocket Socket;
|
||||
} EFI_UNIX_THUNK_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiUnixThunkProtocolGuid;
|
||||
|
@@ -20,19 +20,24 @@ Abstract:
|
||||
#ifndef _UNIX_UGA_IO_H_
|
||||
#define _UNIX_UGA_IO_H_
|
||||
|
||||
#include <Protocol/SimplePointer.h>
|
||||
#include <Protocol/SimpleTextIn.h>
|
||||
#include <Protocol/SimpleTextInEx.h>
|
||||
#include <Protocol/UgaDraw.h>
|
||||
|
||||
#define EFI_UNIX_UGA_IO_PROTOCOL_GUID {0xf2e5e2c6, 0x8985, 0x11db, {0xa1, 0x91, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } }
|
||||
|
||||
typedef struct _EFI_UNIX_UGA_IO_PROTOCOL EFI_UNIX_UGA_IO_PROTOCOL;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(*UGAClose)(
|
||||
(EFIAPI *UGAClose)(
|
||||
EFI_UNIX_UGA_IO_PROTOCOL *Uga
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(*UGASize)(
|
||||
(EFIAPI *UGASize)(
|
||||
EFI_UNIX_UGA_IO_PROTOCOL *Uga,
|
||||
UINT32 Width,
|
||||
UINT32 Height
|
||||
@@ -40,15 +45,38 @@ EFI_STATUS
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(*UGACheckKey)(
|
||||
(EFIAPI *UGACheckKey)(
|
||||
EFI_UNIX_UGA_IO_PROTOCOL *Uga
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(*UGAGetKey)(
|
||||
(EFIAPI *UGAGetKey)(
|
||||
EFI_UNIX_UGA_IO_PROTOCOL *Uga,
|
||||
EFI_INPUT_KEY *key
|
||||
EFI_KEY_DATA *key
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *UGAKeySetState) (
|
||||
IN EFI_UNIX_UGA_IO_PROTOCOL *UgaIo,
|
||||
IN EFI_KEY_TOGGLE_STATE *KeyToggleState
|
||||
);
|
||||
|
||||
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *UGA_REGISTER_KEY_NOTIFY_CALLBACK) (
|
||||
IN VOID *Context,
|
||||
IN EFI_KEY_DATA *KeyData
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *UGARegisterKeyNotify) (
|
||||
IN EFI_UNIX_UGA_IO_PROTOCOL *UgaIo,
|
||||
IN UGA_REGISTER_KEY_NOTIFY_CALLBACK CallBack,
|
||||
IN VOID *Context
|
||||
);
|
||||
|
||||
|
||||
@@ -64,20 +92,45 @@ typedef struct {
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(*UGABlt)(
|
||||
(EFIAPI *UGABlt)(
|
||||
IN EFI_UNIX_UGA_IO_PROTOCOL *Uga,
|
||||
IN EFI_UGA_PIXEL *BltBuffer OPTIONAL,
|
||||
IN EFI_UGA_BLT_OPERATION BltOperation,
|
||||
IN UGA_BLT_ARGS *Args
|
||||
);
|
||||
|
||||
typedef
|
||||
BOOLEAN
|
||||
(EFIAPI *UGAIsKeyPressed) (
|
||||
IN EFI_UNIX_UGA_IO_PROTOCOL *UgaIo,
|
||||
IN EFI_KEY_DATA *KeyData
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *UGACheckPointer)(
|
||||
EFI_UNIX_UGA_IO_PROTOCOL *Uga
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *UGAGetPointerState)(
|
||||
EFI_UNIX_UGA_IO_PROTOCOL *Uga,
|
||||
EFI_SIMPLE_POINTER_STATE *state
|
||||
);
|
||||
|
||||
struct _EFI_UNIX_UGA_IO_PROTOCOL {
|
||||
VOID *Private;
|
||||
UGAClose UgaClose;
|
||||
UGASize UgaSize;
|
||||
UGACheckKey UgaCheckKey;
|
||||
UGAKeySetState UgaKeySetState;
|
||||
UGAGetKey UgaGetKey;
|
||||
UGARegisterKeyNotify UgaRegisterKeyNotify;
|
||||
UGABlt UgaBlt;
|
||||
UGAIsKeyPressed UgaIsKeyPressed;
|
||||
UGACheckPointer UgaCheckPointer;
|
||||
UGAGetPointerState UgaGetPointerState;
|
||||
};
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user