--- /dev/null
+/*++\r
+\r
+Copyright (c) 2004, Intel Corporation \r
+All rights reserved. This program and the accompanying materials \r
+are licensed and made available under the terms and conditions of the BSD License \r
+which accompanies this distribution. The full text of the license may be found at \r
+http://opensource.org/licenses/bsd-license.php \r
+ \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+\r
+Module Name:\r
+\r
+ UnixThunk.h\r
+\r
+Abstract:\r
+\r
+ This protocol allows an EFI driver in the Unix emulation environment\r
+ to make Posix calls.\r
+\r
+ NEVER make an Unix call directly, always make the call via this protocol.\r
+\r
+ There are no This pointers on the protocol member functions as they map\r
+ exactly into Unix system calls.\r
+\r
+--*/\r
+\r
+#ifndef _UNIX_THUNK_H_\r
+#define _UNIX_THUNK_H_\r
+\r
+
+#define EFI_UNIX_THUNK_PROTOCOL_GUID \\r
+ { \\r
+ 0xf2e98868, 0x8985, 0x11db, {0x9a, 0x59, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \
+ }\r
+\r
+typedef\r
+VOID\r
+(*UnixSleep) (\r
+ unsigned long Milliseconds\r
+ );\r
+\r
+typedef\r
+VOID\r
+(*UnixExit) (\r
+ int status // exit code for all threads\r
+ );\r
+\r
+typedef
+VOID
+(*UnixSetTimer) (UINT64 PeriodMs, VOID (*CallBack)(UINT64 DeltaMs));
+typedef
+VOID
+(*UnixGetLocalTime) (EFI_TIME *Time);
+typedef
+struct tm *
+(*UnixGmTime)(const time_t *timep);
+typedef
+long
+(*UnixGetTimeZone)(void);
+typedef
+int
+(*UnixGetDayLight)(void);
+typedef
+int
+(*UnixPoll)(struct pollfd *pfd, int nfds, int timeout);
+typedef
+int
+(*UnixRead) (int fd, void *buf, int count);
+typedef
+int
+(*UnixWrite) (int fd, const void *buf, int count);
+typedef
+char *
+(*UnixGetenv) (const char *var);
+typedef
+int
+(*UnixOpen) (const char *name, int flags, int mode);
+typedef
+long int
+(*UnixSeek) (int fd, long int off, int whence);
+typedef
+int
+(*UnixFtruncate) (int fd, long int len);
+typedef
+int
+(*UnixClose) (int fd);
+
+typedef
+int
+(*UnixMkdir)(const char *pathname, mode_t mode);
+typedef
+int
+(*UnixRmDir)(const char *pathname);
+typedef
+int
+(*UnixUnLink)(const char *pathname);
+typedef
+int
+(*UnixGetErrno)(VOID);
+typedef
+DIR *
+(*UnixOpenDir)(const char *pathname);
+typedef
+void
+(*UnixRewindDir)(DIR *dir);
+typedef
+struct dirent *
+(*UnixReadDir)(DIR *dir);
+typedef
+int
+(*UnixCloseDir)(DIR *dir);
+typedef
+int
+(*UnixStat)(const char *path, struct stat *buf);
+typedef
+int
+(*UnixStatFs)(const char *path, struct statfs *buf);
+typedef
+int
+(*UnixRename)(const char *oldpath, const char *newpath);
+typedef
+time_t
+(*UnixMkTime)(struct tm *tm);
+typedef
+int
+(*UnixFSync)(int fd);
+typedef
+int
+(*UnixChmod)(const char *path, mode_t mode);
+typedef
+int
+(*UnixUTime)(const char *filename, const struct utimbuf *buf);
+
+struct _EFI_UNIX_UGA_IO_PROTOCOL;
+typedef
+EFI_STATUS
+(*UnixUgaCreate)(struct _EFI_UNIX_UGA_IO_PROTOCOL **UgaIo,
+ CONST CHAR16 *Title);
+
+//\r
+//\r
+//\r
+\r
+#define EFI_UNIX_THUNK_PROTOCOL_SIGNATURE EFI_SIGNATURE_32 ('L', 'N', 'X', 'T')\r
+\r
+typedef struct _EFI_UNIX_THUNK_PROTOCOL {\r
+ UINT64 Signature;\r
+
+ UnixSleep Sleep;\r
+ UnixExit Exit;\r
+ UnixSetTimer SetTimer;
+ UnixGetLocalTime GetLocalTime;
+ UnixGmTime GmTime;
+ UnixGetTimeZone GetTimeZone;
+ UnixGetDayLight GetDayLight;
+ UnixPoll Poll;
+ UnixRead Read;
+ UnixWrite Write;
+ UnixGetenv Getenv;
+ UnixOpen Open;
+ UnixSeek Lseek;
+ UnixFtruncate FTruncate;
+ UnixClose Close;
+ UnixMkdir MkDir;
+ UnixRmDir RmDir;
+ UnixUnLink UnLink;
+ UnixGetErrno GetErrno;
+ UnixOpenDir OpenDir;
+ UnixRewindDir RewindDir;
+ UnixReadDir ReadDir;
+ UnixCloseDir CloseDir;
+ UnixStat Stat;
+ UnixStatFs StatFs;
+ UnixRename Rename;
+ UnixMkTime MkTime;
+ UnixFSync FSync;
+ UnixChmod Chmod;
+ UnixUTime UTime;
+
+ UnixUgaCreate UgaCreate;
+
+} EFI_UNIX_THUNK_PROTOCOL;
+\r
+extern EFI_GUID gEfiUnixThunkProtocolGuid;\r
+\r
+#endif\r