git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11297 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			457 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			457 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
| 
 | |
|   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
 | |
|   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.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifdef __APPLE__
 | |
| 
 | |
| #include "SecMain.h"
 | |
| #include "Gasket.h"
 | |
| 
 | |
| //
 | |
| // Gasket functions for EFI_UNIX_THUNK_PROTOCOL
 | |
| //
 | |
| 
 | |
| void 
 | |
| GasketmsSleep (unsigned long Milliseconds)
 | |
| { 
 | |
|   GasketUintn (msSleep, Milliseconds);
 | |
|   return;
 | |
| }
 | |
| 
 | |
| void 
 | |
| Gasketexit (int status)
 | |
| {
 | |
|  GasketUintn (exit, status);
 | |
|   return;
 | |
| }
 | |
| 
 | |
| 
 | |
| void 
 | |
| GasketSetTimer (UINT64 PeriodMs, VOID (*CallBack)(UINT64 DeltaMs))
 | |
| {
 | |
|  GasketUint64Uintn (SetTimer, PeriodMs, (UINTN)CallBack);
 | |
|   return;
 | |
| }
 | |
| 
 | |
| 
 | |
| void 
 | |
| GasketGetLocalTime (EFI_TIME *Time)
 | |
| {
 | |
|   GasketUintn (GetLocalTime, (UINTN)Time);
 | |
|   return;
 | |
| }
 | |
| 
 | |
| 
 | |
| struct tm *
 | |
| Gasketgmtime (const time_t *clock)
 | |
| {
 | |
|   return (struct tm *)(UINTN)GasketUintn (localtime, (UINTN)clock);
 | |
| }
 | |
| 
 | |
| 
 | |
| long 
 | |
| GasketGetTimeZone (void)
 | |
| {
 | |
|   return  GasketVoid (GetTimeZone);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| GasketGetDayLight (void)
 | |
| {
 | |
|   return  GasketVoid (GetDayLight);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketpoll (struct pollfd *pfd, unsigned int nfds, int timeout)
 | |
| {
 | |
|   return GasketUintnUintnUintn (poll, (UINTN)pfd, nfds, timeout);
 | |
| }
 | |
| 
 | |
| 
 | |
| long
 | |
| Gasketread (int fd, void *buf, int count)
 | |
| {
 | |
|   return  GasketUintnUintnUintn (read, fd, (UINTN)buf, count);
 | |
| }
 | |
| 
 | |
| 
 | |
| long
 | |
| Gasketwrite (int fd, const void *buf, int count)
 | |
| {
 | |
|   return  GasketUintnUintnUintn (write, fd, (UINTN)buf, count);
 | |
| }
 | |
| 
 | |
| 
 | |
| char *
 | |
| Gasketgetenv (const char *name)
 | |
| {
 | |
|   return (char *)(UINTN)GasketUintn (getenv, (UINTN)name);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketopen (const char *name, int flags, int mode)
 | |
| {
 | |
|   return  GasketUintnUintnUintn (open, (UINTN)name, flags, mode);
 | |
| }
 | |
| 
 | |
| 
 | |
| off_t 
 | |
| Gasketlseek (int fd, off_t off, int whence)
 | |
| {
 | |
|   if (sizeof off == 8) {
 | |
|     return GasketUintnUint64Uintn (lseek, fd, off, whence);
 | |
|   } else if (sizeof off == 4) {
 | |
|     return GasketUintnUintnUintn (lseek, fd, off, whence);
 | |
|   }
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketftruncate (int fd, long int len)
 | |
| {
 | |
|   return GasketUintnUintn (ftruncate, fd, len);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketclose (int fd)
 | |
| {
 | |
|   return GasketUintn (close, fd);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketmkdir (const char *pathname, mode_t mode)
 | |
| {
 | |
|   return GasketUintnUint16 (mkdir, (UINTN)pathname, mode);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketrmdir (const char *pathname)
 | |
| {
 | |
|   return GasketUintn (rmdir, (UINTN)pathname);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketunlink (const char *pathname)
 | |
| {
 | |
|   return GasketUintn (unlink, (UINTN)pathname);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| GasketGetErrno (void)
 | |
| {
 | |
|   return  GasketVoid (GetErrno);
 | |
| }
 | |
| 
 | |
| 
 | |
| DIR *
 | |
| Gasketopendir (const char *pathname)
 | |
| {
 | |
|   return (DIR *)(UINTN)GasketUintn (opendir, (UINTN)pathname);
 | |
| }
 | |
| 
 | |
| 
 | |
| void 
 | |
| Gasketrewinddir (DIR *dir)
 | |
| {
 | |
|   GasketUintn (rewinddir, (UINTN)dir);
 | |
|   return;
 | |
| }
 | |
| 
 | |
| 
 | |
| struct dirent *
 | |
| Gasketreaddir (DIR *dir)
 | |
| {
 | |
|   return (struct dirent *)(UINTN)GasketUintn (readdir, (UINTN)dir);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketclosedir (DIR *dir)
 | |
| {
 | |
|   return GasketUintn (closedir,  (UINTN)dir);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketstat (const char *path, STAT_FIX *buf)
 | |
| {
 | |
|   return GasketUintnUintn (stat, (UINTN)path, (UINTN)buf);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketstatfs (const char *path, struct statfs *buf)
 | |
| {
 | |
|   return GasketUintnUintn (statfs, (UINTN)path, (UINTN)buf);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketrename (const char *oldpath, const char *newpath)
 | |
| {
 | |
|   return GasketUintnUintn (rename, (UINTN)oldpath, (UINTN)newpath);
 | |
| }
 | |
| 
 | |
| 
 | |
| time_t 
 | |
| Gasketmktime (struct tm *tm)
 | |
| {
 | |
|   return GasketUintn (mktime, (UINTN)tm);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketfsync (int fd)
 | |
| {
 | |
|   return GasketUintn (fsync, fd);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketchmod (const char *path, mode_t mode)
 | |
| {
 | |
|   return GasketUintnUint16 (chmod, (UINTN)path, mode);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketutime (const char *filename, const struct utimbuf *buf)
 | |
| {
 | |
|   return GasketUintnUintn (utime, (UINTN)filename, (UINTN)buf);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gaskettcflush (int fildes, int queue_selector)
 | |
| {
 | |
|   return GasketUintnUintn (tcflush, fildes, queue_selector);
 | |
| }
 | |
| 
 | |
| 
 | |
| EFI_STATUS 
 | |
| GasketUgaCreate (struct _EFI_UNIX_UGA_IO_PROTOCOL **UgaIo, CONST CHAR16 *Title)
 | |
| {
 | |
|   return GasketUintnUintn (UgaCreate, (UINTN)UgaIo, (UINTN)Title);
 | |
| }
 | |
| 
 | |
| 
 | |
| void 
 | |
| Gasketperror (__const char *__s)
 | |
| {
 | |
|   GasketUintn (perror, (UINTN)__s);
 | |
|   return;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| //
 | |
| // ... is always an int or pointer to device specific data structure
 | |
| //
 | |
| int 
 | |
| Gasketioctl (int fd, unsigned long int __request, void *Arg)
 | |
| {
 | |
|   return GasketUintnUintnUintn (ioctl, fd, __request, (UINTN)Arg);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketfcntl (int __fd, int __cmd, void  *Arg)
 | |
| {
 | |
|   return GasketUintnUintnUintn (fcntl, __fd, __cmd, (UINTN)Arg);
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketcfsetispeed (struct termios *__termios_p, speed_t __speed)
 | |
| {
 | |
|   return GasketUintnUintn (cfsetispeed, (UINTN)__termios_p, __speed);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gasketcfsetospeed (struct termios *__termios_p, speed_t __speed)
 | |
| {
 | |
|   return GasketUintnUintn (cfsetospeed, (UINTN)__termios_p, __speed);
 | |
| }
 | |
| 
 | |
| 
 | |
| int 
 | |
| Gaskettcgetattr (int __fd, struct termios *__termios_p)
 | |
| {
 | |
|   return GasketUintnUintn (tcgetattr, __fd, (UINTN)__termios_p);
 | |
| }
 | |
| 
 | |
|  
 | |
| int 
 | |
| Gaskettcsetattr (int __fd, int __optional_actions, __const struct termios *__termios_p)
 | |
| {
 | |
|   return GasketUintnUintnUintn (tcsetattr, __fd, __optional_actions, (UINTN)__termios_p);
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| RETURN_STATUS
 | |
| GasketUnixPeCoffGetEntryPoint (
 | |
|   IN     VOID  *Pe32Data,
 | |
|   IN OUT VOID  **EntryPoint
 | |
|   )
 | |
| {
 | |
|   return GasketUintnUintn (SecPeCoffGetEntryPoint, (UINTN)Pe32Data, (UINTN)EntryPoint);
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| VOID
 | |
| GasketUnixPeCoffRelocateImageExtraAction (
 | |
|   IN OUT PE_COFF_LOADER_IMAGE_CONTEXT  *ImageContext
 | |
|   )
 | |
| {
 | |
|   GasketUintn (SecPeCoffRelocateImageExtraAction, (UINTN)ImageContext);
 | |
|   return;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| VOID
 | |
| GasketUnixPeCoffUnloadImageExtraAction (
 | |
|   IN OUT PE_COFF_LOADER_IMAGE_CONTEXT  *ImageContext
 | |
|   )
 | |
| {
 | |
|   GasketUintn (SecPeCoffLoaderUnloadImageExtraAction, (UINTN)ImageContext);
 | |
|   return;
 | |
| }
 | |
| 
 | |
| 
 | |
| //
 | |
| // Gasket functions for EFI_UNIX_UGA_IO_PROTOCOL
 | |
| //
 | |
| 
 | |
| EFI_STATUS 
 | |
| EFIAPI 
 | |
| GasketUgaClose (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo)
 | |
| {
 | |
|   return GasketUintn (UgaClose, (UINTN)UgaIo);
 | |
| }
 | |
| 
 | |
| EFI_STATUS 
 | |
| EFIAPI 
 | |
| GasketUgaSize (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, UINT32 Width, UINT32 Height)
 | |
| {
 | |
|   return GasketUintnUintnUintn (UgaSize, (UINTN)UgaIo, Width, Height);
 | |
| }
 | |
| 
 | |
| EFI_STATUS 
 | |
| EFIAPI 
 | |
| GasketUgaCheckKey (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo)
 | |
| {
 | |
|   return GasketUintn (UgaCheckKey, (UINTN)UgaIo);
 | |
| }
 | |
| 
 | |
| EFI_STATUS 
 | |
| EFIAPI 
 | |
| GasketUgaKeySetState (EFI_UNIX_UGA_IO_PROTOCOL   *UgaIo, EFI_KEY_TOGGLE_STATE *KeyToggleState)
 | |
| {
 | |
|   return GasketUintnUintn (UgaGetKey, (UINTN)UgaIo, (UINTN)KeyToggleState);
 | |
| }
 | |
| 
 | |
| EFI_STATUS 
 | |
| EFIAPI 
 | |
| GasketUgaGetKey (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, EFI_KEY_DATA *key)
 | |
| {
 | |
|   return GasketUintnUintn (UgaGetKey, (UINTN)UgaIo, (UINTN)key);
 | |
| }
 | |
| 
 | |
| EFI_STATUS 
 | |
| EFIAPI 
 | |
| GasketUgaRegisterKeyNotify (
 | |
|   IN EFI_UNIX_UGA_IO_PROTOCOL           *UgaIo, 
 | |
|   IN UGA_REGISTER_KEY_NOTIFY_CALLBACK   CallBack,
 | |
|   IN VOID                               *Context
 | |
|   )
 | |
| {
 | |
|   return GasketUintnUintnUintn (UgaRegisterKeyNotify, (UINTN)UgaIo, (UINTN)CallBack, (UINTN)Context);  
 | |
| }
 | |
| 
 | |
| EFI_STATUS 
 | |
| EFIAPI 
 | |
| GasketUgaBlt (
 | |
|    EFI_UNIX_UGA_IO_PROTOCOL *UgaIo,
 | |
|    IN  EFI_UGA_PIXEL                           *BltBuffer OPTIONAL,
 | |
|    IN  EFI_UGA_BLT_OPERATION                   BltOperation,
 | |
|    IN  UGA_BLT_ARGS                            *Args
 | |
|    )
 | |
| {
 | |
|   return GasketUintnUintnUintnUintn (UgaBlt, (UINTN)UgaIo, (UINTN)BltBuffer, (UINTN)BltOperation, (UINTN)Args);
 | |
| }
 | |
| 
 | |
| EFI_STATUS 
 | |
| EFIAPI 
 | |
| GasketUgaCheckPointer (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo)
 | |
| {
 | |
|   return GasketUintn (UgaCheckPointer, (UINTN)UgaIo);
 | |
| }
 | |
| 
 | |
| EFI_STATUS 
 | |
| EFIAPI 
 | |
| GasketUgaGetPointerState (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, EFI_SIMPLE_POINTER_STATE *state)
 | |
| {
 | |
|   return GasketUintnUintn (UgaGetPointerState, (UINTN)UgaIo, (UINTN)state);
 | |
| }
 | |
| 
 | |
| void
 | |
| GasketUnixEnableInterrupt (void)
 | |
| {
 | |
|   GasketVoid (UnixEnableInterrupt);
 | |
| }
 | |
| 
 | |
| void
 | |
| GasketUnixDisableInterrupt (void)
 | |
| {
 | |
|   GasketVoid (UnixDisableInterrupt);
 | |
| }
 | |
| 
 | |
| 
 | |
| int
 | |
| Gasketgetifaddrs (struct ifaddrs **ifap)
 | |
| {
 | |
|   return( GasketUintn( getifaddrs, ( UINTN ) ifap ) );
 | |
| }
 | |
| 
 | |
| 
 | |
| void
 | |
| Gasketfreeifaddrs (struct ifaddrs *ifap)
 | |
| {
 | |
|   GasketUintn( freeifaddrs, ( UINTN ) ifap );
 | |
| }
 | |
| 
 | |
| 
 | |
| int
 | |
| Gasketsocket (int domain, int type, int protocol )
 | |
| {
 | |
|   return( GasketUintnUintnUintn( socket, domain, type, protocol ) );
 | |
| }
 | |
| 
 | |
| 
 | |
| #endif
 | |
| 
 |