| /** @file | |
| Function declarations for UEFI "system calls". | |
| The following macros are defined in this file:<BR> | |
| @verbatim | |
| STDIN_FILENO 0 standard input file descriptor | |
| STDOUT_FILENO 1 standard output file descriptor | |
| STDERR_FILENO 2 standard error file descriptor | |
| SEEK_SET 0 set file offset to offset | |
| SEEK_CUR 1 set file offset to current plus offset | |
| SEEK_END 2 set file offset to EOF plus offset | |
| VALID_OPEN 1 | |
| VALID_CLOSED 0 | |
| VALID_DONT_CARE -1 | |
| @endverbatim | |
| The following types are defined in this file:<BR> | |
| @verbatim | |
| struct stat; Structure declared in <sys/stat.h> | |
| @endverbatim | |
| The following functions are declared in this file:<BR> | |
| @verbatim | |
| ############### System Calls used in stdio. | |
| int close (int fd); | |
| ssize_t read (int fd, void *buf, size_t n); | |
| ssize_t write (int fd, const void *buf, size_t n); | |
| int unlink (const char *name); | |
| int dup2 (int, int); | |
| int rmdir (const char *); | |
| int isatty (int); | |
| ############### System Calls which are also declared in sys/fcntl.h. | |
| int open (const char *name, int oflags, int mode); | |
| int creat (const char *, mode_t); | |
| int fcntl (int, int, ...); | |
| ############### System Calls which are also declared in stat.h. | |
| int mkdir (const char *, mode_t); | |
| int fstat (int, struct stat *); | |
| int lstat (const char *, struct stat *); | |
| int stat (const char *, void *); | |
| int chmod (const char *, mode_t); | |
| ############### System Calls which are also declared in sys/types.h. | |
| off_t lseek (int, off_t, int); | |
| int truncate (const char *, off_t); | |
| int ftruncate (int, off_t); // IEEE Std 1003.1b-93 | |
| ############### EFI-specific Functions. | |
| int DeleteOnClose (int fd); Mark an open file to be deleted when closed. | |
| int FindFreeFD (int MinFd); | |
| BOOLEAN ValidateFD (int fd, int IsOpen); | |
| @endverbatim | |
| Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials are licensed and made available under | |
| the terms and conditions of the BSD License that accompanies this distribution. | |
| The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license. | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #ifndef _EFI_SYS_CALL_H | |
| #define _EFI_SYS_CALL_H | |
| #include <sys/EfiCdefs.h> | |
| #include <sys/types.h> | |
| struct stat; /* Structure declared in <sys/stat.h> */ | |
| #define STDIN_FILENO 0 /**< standard input file descriptor */ | |
| #define STDOUT_FILENO 1 /**< standard output file descriptor */ | |
| #define STDERR_FILENO 2 /**< standard error file descriptor */ | |
| /* whence values for lseek(2) | |
| Always ensure that these are consistent with <stdio.h> and <unistd.h>! | |
| */ | |
| #ifndef SEEK_SET | |
| #define SEEK_SET 0 /**< set file offset to offset */ | |
| #endif | |
| #ifndef SEEK_CUR | |
| #define SEEK_CUR 1 /**< set file offset to current plus offset */ | |
| #endif | |
| #ifndef SEEK_END | |
| #define SEEK_END 2 /**< set file offset to EOF plus offset */ | |
| #endif | |
| // Parameters for the ValidateFD function. | |
| #define VALID_OPEN 1 | |
| #define VALID_CLOSED 0 | |
| #define VALID_DONT_CARE -1 | |
| __BEGIN_DECLS | |
| /* EFI versions of BSD system calls used in stdio */ | |
| /** Close a file or device. | |
| @param[in] fd File Descriptor for the file or device to close. | |
| @retval 0 Successful completion. | |
| @retval -1 An error occurred, identified by errno. | |
| - EBADF fd is not a valid File Descriptor. | |
| - EINTR The function was interrupted by a signal. | |
| - EIO An I/O error occurred. | |
| **/ | |
| int close (int fd); | |
| /** Read from a file or device. | |
| @param[in] fd File Descriptor for the file or device to read. | |
| @param[in] buf Buffer to read data into. | |
| @param[in] N Maximum number of bytes to read. | |
| @return On successful completion, read returns a non-negative integer | |
| indicating the number of bytes actually read. Otherwise, it | |
| returns -1 and sets errno as follows: | |
| - EAGAIN | |
| - EWOULDBLOCK | |
| - EBADF | |
| - EBADMSG | |
| - EINTR | |
| - EINVAL | |
| - EIO | |
| - EISDIR | |
| - EOVERFLOW | |
| - ECONNRESET | |
| - ENOTCONN | |
| - ETIMEDOUT | |
| - ENOBUFS | |
| - ENOMEM | |
| - ENXIO | |
| **/ | |
| ssize_t read (int fd, void *buf, size_t n); | |
| /** Write to a file or device. | |
| @param[in] fd File Descriptor for the file or device to write. | |
| @param[in] buf Buffer to write data from. | |
| @param[in] N Maximum number of bytes to write. | |
| @return On successful completion, write returns a non-negative integer | |
| indicating the number of bytes actually written. Otherwise, it | |
| returns -1 and sets errno as follows: | |
| - EAGAIN | |
| - EWOULDBLOCK | |
| - EBADF | |
| - EFBIG | |
| - EINTR | |
| - EINVAL | |
| - EIO | |
| - ENOSPC | |
| - EPIPE | |
| - ERANGE | |
| - ECONNRESET | |
| - ENOBUFS | |
| - ENXIO | |
| - ENETDOWN | |
| - ENETUNREACH | |
| **/ | |
| ssize_t write (int fd, const void *buf, size_t n); | |
| /** Unlink (delete) a file. | |
| @param[in] name The name of the file to be deleted. | |
| @retval 0 Successful completion. | |
| @retval -1 Unable to perform operation, errno contains further | |
| information. The file name is unchanged. | |
| **/ | |
| int unlink (const char *name); | |
| /** Make file descriptor Fd2 a duplicate of file descriptor Fd1. | |
| @param[in] Fd1 File descriptor to be duplicated | |
| @param[in] Fd2 File descriptor to become a duplicate of Fd1. | |
| @retval 0 Successful completion. | |
| @retval -1 Unable to perform operation, errno contains further | |
| information. | |
| **/ | |
| int dup2 (int Fd1, int Fd2); | |
| /** Remove a directory. | |
| @param[in] Path Path to the directory to be deleted. | |
| @retval 0 Successful completion. | |
| @retval -1 Unable to perform operation, errno contains further | |
| information. The named directory remains unchanged. | |
| **/ | |
| int rmdir (const char *Path); | |
| /** Determine if fd refers to an interactive terminal device. | |
| @param[in] fd The file descriptor to be tested. | |
| @retval 0 The file descriptor, fd, is not for a terminal. errno is set | |
| indicating the cause for failure. | |
| - EBADF fd is not a valid open file descriptor. | |
| - ENOTTY fd does not refer to a terminal. | |
| @retval 1 The file descriptor, fd, is for a terminal. | |
| **/ | |
| int isatty (int fd); | |
| /* These system calls are also declared in sys/fcntl.h */ | |
| #ifndef __FCNTL_SYSCALLS_DECLARED | |
| #define __FCNTL_SYSCALLS_DECLARED | |
| /** Open or create a file named by name. | |
| The file name may be one of: | |
| - An absolute path beginning with '/'. | |
| - A relative path beginning with "." or ".." or a directory name | |
| - A file name | |
| - A mapped path which begins with a name followed by a colon, ':'. | |
| Mapped paths are use to refer to specific mass storage volumes or devices. | |
| In a Shell-hosted environment, the map command will list valid map names | |
| for both file system and block devices. Mapped paths can also refer to | |
| devices such as the UEFI console. Supported UEFI console mapped paths are: | |
| - stdin: Standard Input (from the System Table) | |
| - stdout: Standard Output (from the System Table) | |
| - stderr: Standard Error Output (from the System Table) | |
| @param[in] name Name of file to open. | |
| @param[in] oflags Flags as defined in fcntl.h. | |
| @param[in] mode Access mode to use if creating the file. | |
| @return Returns -1 on failure, otherwise the file descriptor for the open file. | |
| **/ | |
| int open (const char *name, int oflags, int mode); | |
| /** Create a new file or rewrite an existing one. | |
| The creat() function behaves as if it is implemented as follows: | |
| int creat(const char *path, mode_t mode) | |
| { | |
| return open(path, O_WRONLY|O_CREAT|O_TRUNC, mode); | |
| } | |
| @param[in] Path The name of the file to create. | |
| @param[in] Mode Access mode (permissions) for the new file. | |
| @return Returns -1 on failure, otherwise the file descriptor for the open file. | |
| **/ | |
| int creat (const char *Path, mode_t Mode); | |
| /** File control | |
| This function performs the operations described below and defined in <fcntl.h>. | |
| - F_DUPFD: Return the lowest numbered file descriptor available that is >= the third argument. | |
| The new file descriptor refers to the same open file as Fd. | |
| - F_SETFD: Set the file descriptor flags to the value specified by the third argument. | |
| - F_GETFD: Get the file descriptor flags associated with Fd. | |
| - F_SETFL: Set the file status flags based upon the value of the third argument. | |
| - F_GETFL: Get the file status flags and access modes for file Fd. | |
| @param[in] Fd File descriptor associated with the file to be controlled. | |
| @param[in] Cmd Command to execute. | |
| @param[in] ... Additional arguments, as needed by Cmd. | |
| @return A -1 is returned to indicate failure, otherwise the value | |
| returned is positive and depends upon Cmd as follows: | |
| - F_DUPFD: A new file descriptor. | |
| - F_SETFD: files previous file descriptor flags. | |
| - F_GETFD: The files file descriptor flags. | |
| - F_SETFL: The old status flags and access mode of the file. | |
| - F_GETFL: The status flags and access mode of the file. | |
| **/ | |
| int fcntl (int Fd, int Cmd, ...); | |
| #endif // __FCNTL_SYSCALLS_DECLARED | |
| /* These system calls are also declared in stat.h */ | |
| #ifndef __STAT_SYSCALLS_DECLARED | |
| #define __STAT_SYSCALLS_DECLARED | |
| int mkdir (const char *, mode_t); | |
| int fstat (int, struct stat *); | |
| int lstat (const char *, struct stat *); | |
| int stat (const char *, struct stat *); | |
| int chmod (const char *, mode_t); | |
| mode_t umask (mode_t cmask); | |
| #endif // __STAT_SYSCALLS_DECLARED | |
| // These are also declared in sys/types.h | |
| #ifndef __OFF_T_SYSCALLS_DECLARED | |
| #define __OFF_T_SYSCALLS_DECLARED | |
| off_t lseek (int, off_t, int); | |
| int truncate (const char *, off_t); | |
| int ftruncate (int, off_t); // IEEE Std 1003.1b-93 | |
| #endif /* __OFF_T_SYSCALLS_DECLARED */ | |
| /* EFI-specific Functions. */ | |
| /** Mark an open file to be deleted when it is closed. | |
| @param[in] fd File descriptor for the open file. | |
| @retval 0 The flag was set successfully. | |
| @retval -1 An invalid fd was specified. | |
| **/ | |
| int DeleteOnClose(int fd); | |
| /** Find and reserve a free File Descriptor. | |
| Returns the first free File Descriptor greater than or equal to the, | |
| already validated, fd specified by Minfd. | |
| @return Returns -1 if there are no free FDs. Otherwise returns the | |
| found fd. | |
| */ | |
| int FindFreeFD (int MinFd); | |
| /** Validate that fd refers to a valid file descriptor. | |
| IsOpen is interpreted as follows: | |
| - Positive fd must be OPEN | |
| - Zero fd must be CLOSED | |
| - Negative fd may be OPEN or CLOSED | |
| @retval TRUE fd is VALID | |
| @retval FALSE fd is INVALID | |
| */ | |
| BOOLEAN ValidateFD (int fd, int IsOpen); | |
| /* These system calls don't YET have EFI implementations. */ | |
| int reboot (int, char *); | |
| __END_DECLS | |
| /* The console output stream, stdout, supports cursor positioning via the | |
| lseek() function call. The following entities facilitate packing the | |
| X and Y coordinates into the offset parameter of the lseek call. | |
| */ | |
| typedef struct { | |
| UINT32 Column; | |
| UINT32 Row; | |
| } CURSOR_XY; | |
| typedef union { | |
| UINT64 Offset; | |
| CURSOR_XY XYpos; | |
| } XY_OFFSET; | |
| #endif /* _EFI_SYS_CALL_H */ |