summaryrefslogtreecommitdiff
path: root/UnixPkg/Include/Protocol
diff options
context:
space:
mode:
authorandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>2010-11-30 23:38:40 +0000
committerandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>2010-11-30 23:38:40 +0000
commit2ff79f2eda16f8219140d3dae188d2b341f610e1 (patch)
tree693b0c0223c7f3a312f292a3a5ba9eff0def4dbe /UnixPkg/Include/Protocol
parente23a349aaec2ba7fd4218c6dabaf42da0aa9aa8e (diff)
downloadedk2-2ff79f2eda16f8219140d3dae188d2b341f610e1.zip
edk2-2ff79f2eda16f8219140d3dae188d2b341f610e1.tar.gz
edk2-2ff79f2eda16f8219140d3dae188d2b341f610e1.tar.bz2
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
Diffstat (limited to 'UnixPkg/Include/Protocol')
-rw-r--r--UnixPkg/Include/Protocol/UnixIo.h12
-rw-r--r--UnixPkg/Include/Protocol/UnixThunk.h68
-rw-r--r--UnixPkg/Include/Protocol/UnixUgaIo.h65
3 files changed, 135 insertions, 10 deletions
diff --git a/UnixPkg/Include/Protocol/UnixIo.h b/UnixPkg/Include/Protocol/UnixIo.h
index 7bb9a46..c9b91ef 100644
--- a/UnixPkg/Include/Protocol/UnixIo.h
+++ b/UnixPkg/Include/Protocol/UnixIo.h
@@ -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
diff --git a/UnixPkg/Include/Protocol/UnixThunk.h b/UnixPkg/Include/Protocol/UnixThunk.h
index 307da1f..a5383be 100644
--- a/UnixPkg/Include/Protocol/UnixThunk.h
+++ b/UnixPkg/Include/Protocol/UnixThunk.h
@@ -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;
diff --git a/UnixPkg/Include/Protocol/UnixUgaIo.h b/UnixPkg/Include/Protocol/UnixUgaIo.h
index 3b32795..5200e4c 100644
--- a/UnixPkg/Include/Protocol/UnixUgaIo.h
+++ b/UnixPkg/Include/Protocol/UnixUgaIo.h
@@ -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;
};