mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-27 01:03:45 +01:00 
			
		
		
		
	Add library classes which are required by StdLib, but not commonly defined in Platform DSC files, to StdLib.inc. Modify MB_LEN_MAX to be 4, the maximum length of UTF-8 characters. Adjust size of internal buffers to be multiples of MB_LEN_MAX instead of assuming 1-byte characters. Make the XYoffset object public and move its declaration into EfiSysCall.h. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: daryl.mcdaniel@intel.com Reviewed-by: erik.c.bjorge@intel.com Reviewed-by: lee.g.rosenbaum@intel.com Reviewed-by: leroy.p.leahy@intel.com git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13457 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			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 */
 |