mirror of https://github.com/acidanthera/audk.git
420 lines
6.9 KiB
C
420 lines
6.9 KiB
C
|
/** @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;
|
||
|
}
|
||
|
|