summaryrefslogtreecommitdiff
path: root/UnixPkg/Sec/X64/GasketEfiTemplate.c
diff options
context:
space:
mode:
Diffstat (limited to 'UnixPkg/Sec/X64/GasketEfiTemplate.c')
-rw-r--r--UnixPkg/Sec/X64/GasketEfiTemplate.c419
1 files changed, 419 insertions, 0 deletions
diff --git a/UnixPkg/Sec/X64/GasketEfiTemplate.c b/UnixPkg/Sec/X64/GasketEfiTemplate.c
new file mode 100644
index 0000000000..708692b6fe
--- /dev/null
+++ b/UnixPkg/Sec/X64/GasketEfiTemplate.c
@@ -0,0 +1,419 @@
+/** @file
+
+ Copyright (c) 2008 - 2009, 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
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#include "SecMain.h"
+#include "Gasket.h"
+
+//
+// OS X Posix does some strange name mangling on these names in C.
+// If you call from assembler you get the wrong version of the function
+// So these globals get you the correct name mangled functions that can
+// be accessed from assembly
+//
+extern UnixRmDir gUnixRmDir;
+extern UnixOpenDir gUnixOpenDir;
+extern UnixStat gUnixStat;
+extern UnixStatFs gUnixStatFs;
+
+//
+// Gasket functions for EFI_UNIX_THUNK_PROTOCOL
+//
+
+int
+Gasketrmdir (const char *pathname)
+{
+ return gUnixRmDir (pathname);
+}
+
+
+DIR *
+Gasketopendir (const char *pathname)
+{
+ return gUnixOpenDir (pathname);
+}
+
+
+int
+Gasketstat (const char *path, STAT_FIX *buf)
+{
+ return gUnixStat (path, buf);
+}
+
+
+int
+Gasketstatfs (const char *path, struct statfs *buf)
+{
+ return gUnixStatFs (path, buf);
+}
+
+/////
+
+
+void
+GasketmsSleep (unsigned long Milliseconds)
+{
+ msSleep (Milliseconds);
+ return;
+}
+
+void
+Gasketexit (int status)
+{
+ exit (status);
+ return;
+}
+
+
+void
+GasketSetTimer (UINT64 PeriodMs, VOID (*CallBack)(UINT64 DeltaMs))
+{
+ SetTimer (PeriodMs, CallBack);
+ return;
+}
+
+
+void
+GasketGetLocalTime (EFI_TIME *Time)
+{
+ GetLocalTime (Time);
+ return;
+}
+
+
+struct tm *
+Gasketgmtime (const time_t *clock)
+{
+ return localtime (clock);
+}
+
+
+long
+GasketGetTimeZone (void)
+{
+ return GetTimeZone ();
+}
+
+
+int
+GasketGetDayLight (void)
+{
+ return GetDayLight ();
+}
+
+
+int
+Gasketpoll (struct pollfd *pfd, unsigned int nfds, int timeout)
+{
+ return poll (pfd, nfds, timeout);
+}
+
+
+long
+Gasketread (int fd, void *buf, int count)
+{
+ return read (fd, buf, count);
+}
+
+
+long
+Gasketwrite (int fd, const void *buf, int count)
+{
+ return write (fd, buf, count);
+}
+
+
+char *
+Gasketgetenv (const char *name)
+{
+ return getenv (name);
+}
+
+
+int
+Gasketopen (const char *name, int flags, int mode)
+{
+ return open (name, flags, mode);
+}
+
+
+off_t
+Gasketlseek (int fd, off_t off, int whence)
+{
+ return lseek (fd, off, whence);
+}
+
+
+int
+Gasketftruncate (int fd, long int len)
+{
+ return ftruncate (fd, len);
+}
+
+
+int
+Gasketclose (int fd)
+{
+ return close (fd);
+}
+
+
+int
+Gasketmkdir (const char *pathname, mode_t mode)
+{
+ return mkdir (pathname, mode);
+}
+
+
+int
+Gasketunlink (const char *pathname)
+{
+ return unlink (pathname);
+}
+
+
+int
+GasketGetErrno (void)
+{
+ return GetErrno ();
+}
+
+
+void
+Gasketrewinddir (DIR *dir)
+{
+ rewinddir (dir);
+ return;
+}
+
+
+struct dirent *
+Gasketreaddir (DIR *dir)
+{
+ return readdir (dir);
+}
+
+
+int
+Gasketclosedir (DIR *dir)
+{
+ return closedir (dir);
+}
+
+
+int
+Gasketrename (const char *oldpath, const char *newpath)
+{
+ return rename (oldpath, newpath);
+}
+
+
+time_t
+Gasketmktime (struct tm *tm)
+{
+ return mktime (tm);
+}
+
+
+int
+Gasketfsync (int fd)
+{
+ return fsync (fd);
+}
+
+
+int
+Gasketchmod (const char *path, mode_t mode)
+{
+ return chmod (path, mode);
+}
+
+
+int
+Gasketutime (const char *filename, const struct utimbuf *buf)
+{
+ return utime (filename, buf);
+}
+
+
+int
+Gaskettcflush (int fildes, int queue_selector)
+{
+ return tcflush (fildes, queue_selector);
+}
+
+
+EFI_STATUS
+GasketUgaCreate (struct _EFI_UNIX_UGA_IO_PROTOCOL **UgaIo, CONST CHAR16 *Title)
+{
+ return UgaCreate (UgaIo, Title);
+}
+
+
+void
+Gasketperror (__const char *__s)
+{
+ perror (__s);
+ return;
+}
+
+
+
+//
+// ... is always an int or pointer to device specific data structure
+//
+int
+Gasketioctl (int fd, unsigned long int __request, ...)
+{
+ VA_LIST Marker;
+
+ VA_START (Marker, __request);
+ return ioctl (fd, __request, VA_ARG (Marker, UINTN));
+}
+
+
+int
+Gasketfcntl (int __fd, int __cmd, ...)
+{
+ VA_LIST Marker;
+
+ VA_START (Marker, __cmd);
+ return fcntl (__fd, __cmd, VA_ARG (Marker, UINTN));
+}
+
+
+
+int
+Gasketcfsetispeed (struct termios *__termios_p, speed_t __speed)
+{
+ return cfsetispeed (__termios_p, __speed);
+}
+
+
+int
+Gasketcfsetospeed (struct termios *__termios_p, speed_t __speed)
+{
+ return cfsetospeed (__termios_p, __speed);
+}
+
+
+int
+Gaskettcgetattr (int __fd, struct termios *__termios_p)
+{
+ return tcgetattr (__fd, __termios_p);
+}
+
+
+int
+Gaskettcsetattr (int __fd, int __optional_actions, __const struct termios *__termios_p)
+{
+ return tcsetattr (__fd, __optional_actions, __termios_p);
+}
+
+
+
+
+RETURN_STATUS
+GasketUnixPeCoffGetEntryPoint (
+ IN VOID *Pe32Data,
+ IN OUT VOID **EntryPoint
+ )
+{
+ return SecPeCoffGetEntryPoint (Pe32Data, EntryPoint);
+}
+
+
+
+VOID
+GasketUnixPeCoffRelocateImageExtraAction (
+ IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
+ )
+{
+ SecPeCoffRelocateImageExtraAction (ImageContext);
+ return;
+}
+
+
+
+VOID
+GasketUnixPeCoffUnloadImageExtraAction (
+ IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
+ )
+{
+ SecPeCoffLoaderUnloadImageExtraAction (ImageContext);
+ return;
+}
+
+
+//
+// Gasket functions for EFI_UNIX_UGA_IO_PROTOCOL
+//
+
+EFI_STATUS
+EFIAPI
+GasketUgaClose (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo)
+{
+ return UgaClose (UgaIo);
+}
+
+EFI_STATUS
+EFIAPI
+GasketUgaSize (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, UINT32 Width, UINT32 Height)
+{
+ return UgaSize (UgaIo, Width, Height);
+}
+
+EFI_STATUS
+EFIAPI
+GasketUgaCheckKey (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo)
+{
+ return UgaCheckKey (UgaIo);
+}
+
+EFI_STATUS
+EFIAPI
+GasketUgaGetKey (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, EFI_INPUT_KEY *key)
+{
+ return UgaGetKey (UgaIo, key);
+}
+
+EFI_STATUS
+EFIAPI
+GasketUgaBlt (
+ EFI_UNIX_UGA_IO_PROTOCOL *UgaIo,
+ IN EFI_UGA_PIXEL *BltBuffer OPTIONAL,
+ IN EFI_UGA_BLT_OPERATION BltOperation,
+ IN UINTN SourceX,
+ IN UINTN SourceY,
+ IN UINTN DestinationX,
+ IN UINTN DestinationY,
+ IN UINTN Width,
+ IN UINTN Height,
+ IN UINTN Delta OPTIONAL
+ )
+{
+ return UgaBlt (UgaIo, BltBuffer, BltOperation, SourceX, SourceY, DestinationX, DestinationY, Width, Height, Delta);
+}
+
+typedef void (*SET_TIMER_CALLBACK)(UINT64 delta);
+
+
+UINTN
+ReverseGasketUint64 (void *api, UINT64 a)
+{
+ SET_TIMER_CALLBACK settimer_callback = (SET_TIMER_CALLBACK)api;
+
+ (*settimer_callback)(a);
+ return 0;
+}
+