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