1 /* 2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. 3 * Copyright (c) 2020-2023 Huawei Device Co., Ltd. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without modification, 6 * are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, this list of 9 * conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list 12 * of conditions and the following disclaimer in the documentation and/or other materials 13 * provided with the distribution. 14 * 15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used 16 * to endorse or promote products derived from this software without specific prior written 17 * permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 #ifndef _LOS_SYSCALL_H 33 #define _LOS_SYSCALL_H 34 35 #include <sys/statfs.h> 36 #include "los_typedef.h" 37 #include "los_task.h" 38 #include "los_mux.h" 39 #include "los_signal.h" 40 #include "syscall.h" 41 #include "sysinfo.h" 42 #include "time_posix.h" 43 #ifdef LOSCFG_KERNEL_DYNLOAD 44 #include "los_exec_elf.h" 45 #endif 46 #include "sys/resource.h" 47 #include "sys/times.h" 48 #include "sys/utsname.h" 49 #include "sys/shm.h" 50 #include "poll.h" 51 #include "utime.h" 52 #ifdef LOSCFG_COMPAT_POSIX 53 #include "mqueue.h" 54 #endif 55 #include "time.h" 56 #include "sys/time.h" 57 #include "sys/stat.h" 58 #include "sys/kstat.h" 59 #ifdef LOSCFG_FS_VFS 60 #include "sys/socket.h" 61 #include "dirent.h" 62 #include "fs/file.h" 63 #include "epoll.h" 64 #endif 65 #include <sys/wait.h> 66 #ifdef LOSCFG_FS_VFS 67 #include "vnode.h" 68 #endif 69 70 /* process */ 71 extern unsigned int SysGetGroupId(void); 72 extern unsigned int SysGetTid(void); 73 extern void SysSchedYield(int type); 74 extern int SysSchedGetScheduler(int id, int flag); 75 extern int SysSchedSetScheduler(int id, int policy, const LosSchedParam *userParam, int flag); 76 extern int SysSchedGetParam(int id, LosSchedParam *userParam, int flag); 77 extern int SysSchedSetParam(int id, const LosSchedParam *userParam, int flag); 78 extern int SysSetProcessPriority(int which, int who, int prio); 79 extern int SysGetProcessPriority(int which, int who); 80 extern int SysSchedGetPriorityMin(int policy); 81 extern int SysSchedGetPriorityMax(int policy); 82 extern int SysSchedRRGetInterval(int pid, struct timespec *tp); 83 extern int SysWait(int pid, USER int *status, int options, void *rusage); 84 extern int SysWaitid(idtype_t type, int pid, USER siginfo_t *info, int options, void *rusage); 85 extern int SysFork(void); 86 extern int SysVfork(void); 87 extern int SysClone(int flags, void *stack, int *parentTid, unsigned long tls, int *childTid); 88 extern int SysUnshare(int flags); 89 extern int SysSetns(int fd, int type); 90 extern unsigned int SysGetPID(void); 91 extern unsigned int SysGetPPID(void); 92 extern int SysSetGroupID(unsigned int gid); 93 extern int SysGetGroupID(void); 94 extern int SysGetUserID(void); 95 extern int SysGetEffUserID(void); 96 extern int SysGetEffGID(void); 97 extern int SysSetUserID(int uid); 98 extern int SysGetRealEffSaveUserID(int *ruid, int *euid, int *suid); 99 extern int SysGetRealEffSaveGroupID(int *rgid, int *egid, int *sgid); 100 extern int SysSetRealEffUserID(int ruid, int euid); 101 extern int SysSetRealEffGroupID(int rgid, int egid); 102 extern int SysSetRealEffSaveGroupID(int rgid, int egid, int sgid); 103 extern int SysSetRealEffSaveUserID(int ruid, int euid, int suid); 104 extern int SysGetGroups(int size, int list[]); 105 extern int SysSetGroups(int size, int list[]); 106 extern int SysGetCurrProcessGroupID(void); 107 extern int SysGetProcessGroupID(unsigned int pid); 108 extern int SysSetProcessGroupID(unsigned int pid, unsigned int gid); 109 extern unsigned int SysCreateUserThread(const TSK_ENTRY_FUNC func, const UserTaskParam *userParam, bool joinable); 110 extern int SysSetThreadArea(const char *area); 111 extern char *SysGetThreadArea(void); 112 extern int SysUserThreadSetDetach(unsigned int taskID); 113 extern int SysUserThreadDetach(unsigned int taskID); 114 extern int SysThreadJoin(unsigned int taskID); 115 extern void SysUserExitGroup(int status); 116 extern void SysThreadExit(int status); 117 extern int SysFutex(const unsigned int *uAddr, unsigned int flags, int val, 118 unsigned int absTime, const unsigned int *newUserAddr); 119 extern int SysSchedGetAffinity(int id, unsigned int *cpuset, int flag); 120 extern int SysSchedSetAffinity(int id, const unsigned short cpuset, int flag); 121 122 #ifdef LOSCFG_COMPAT_POSIX 123 extern mqd_t SysMqOpen(const char *mqName, int openFlag, mode_t mode, struct mq_attr *attr); 124 extern int SysMqClose(mqd_t personal); 125 extern int SysMqGetSetAttr(mqd_t mqd, const struct mq_attr *new, struct mq_attr *old); 126 extern int SysMqUnlink(const char *mqName); 127 extern int SysMqSend(mqd_t personal, const char *msgPtr, size_t msgLen, unsigned int msgPrio); 128 extern int SysMqTimedSend(mqd_t personal, const char *msg, size_t msgLen, unsigned int msgPrio, 129 const struct timespec *absTimeout); 130 extern ssize_t SysMqTimedReceive(mqd_t personal, char *msg, size_t msgLen, unsigned int *msgPrio, 131 const struct timespec *absTimeout); 132 extern int SysMqNotify(mqd_t personal, const struct sigevent *sigev); 133 #endif 134 135 extern int SysSigAction(int sig, const sigaction_t *restrict sa, sigaction_t *restrict old, size_t sigsetsize); 136 extern int SysSigprocMask(int how, const sigset_t_l *restrict setl, sigset_t_l *restrict oldl, size_t sigsetsize); 137 extern int SysKill(pid_t pid, int sig); 138 extern int SysPthreadKill(pid_t pid, int sig); 139 extern int SysSigTimedWait(const sigset_t_l *setl, siginfo_t *info, 140 const struct timespec *timeout, size_t sigsetsize); 141 extern int SysPause(void); 142 extern int SysSigPending(sigset_t_l *setl); 143 extern int SysSigSuspend(sigset_t_l *setl); 144 extern int SysMkFifo(const char *pathName, mode_t mode); 145 146 /* net */ 147 #ifdef LOSCFG_NET_LWIP_SACK 148 extern int SysSocket(int domain, int type, int protocol); 149 extern int SysBind(int s, const struct sockaddr *name, socklen_t namelen); 150 extern int SysConnect(int s, const struct sockaddr *name, socklen_t namelen); 151 extern int SysListen(int sockfd, int backlog); 152 extern int SysAccept(int socket, struct sockaddr *address, socklen_t *addressLen); 153 extern int SysGetSockName(int s, struct sockaddr *name, socklen_t *namelen); 154 extern int SysGetPeerName(int s, struct sockaddr *name, socklen_t *namelen); 155 extern ssize_t SysSend(int s, const void *dataptr, size_t size, int flags); 156 extern ssize_t SysSendTo(int s, const void *dataptr, size_t size, int flags, 157 const struct sockaddr *to, socklen_t tolen); 158 extern ssize_t SysRecv(int socket, void *buffer, size_t length, int flags); 159 extern ssize_t SysRecvFrom(int socket, void *buffer, size_t length, int flags, 160 struct sockaddr *address, socklen_t *addressLen); 161 extern int SysShutdown(int socket, int how); 162 extern int SysSetSockOpt(int socket, int level, int optName, 163 const void *optValue, socklen_t optLen); 164 extern int SysGetSockOpt(int sockfd, int level, int optName, 165 void *optValue, socklen_t *optLen); 166 extern ssize_t SysSendMsg(int s, const struct msghdr *message, int flags); 167 extern ssize_t SysRecvMsg(int s, struct msghdr *message, int flags); 168 #endif 169 170 /* vmm */ 171 extern void *SysMmap(void *addr, size_t size, int prot, int flags, int fd, size_t offset); 172 extern int SysMunmap(void *addr, size_t size); 173 extern int SysMprotect(void *vaddr, size_t len, int prot); 174 extern void *SysMremap(void *oldAddr, size_t oldLen, size_t newLen, int flags, void *newAddr); 175 extern void *SysBrk(void *addr); 176 extern int SysShmGet(key_t key, size_t size, int shmflg); 177 extern void *SysShmAt(int shmid, const void *shmaddr, int shmflg); 178 extern int SysShmCtl(int shmid, int cmd, struct shmid_ds *buf); 179 extern int SysShmDt(const void *shmaddr); 180 181 /* misc */ 182 #ifdef LOSCFG_UTS_CONTAINER 183 extern int SysSetHostName(const char *name, size_t len); 184 #endif 185 extern int SysUname(struct utsname *name); 186 extern int SysInfo(struct sysinfo *info); 187 188 /* time */ 189 extern int SysNanoSleep(const struct timespec *rqtp, struct timespec *rmtp); 190 extern clock_t SysTimes(struct tms *buf); 191 extern time_t SysTime(time_t *tloc); 192 extern int SysSetiTimer(int which, const struct itimerval *value, struct itimerval *ovalue); 193 extern int SysGetiTimer(int which, struct itimerval *value); 194 extern int SysTimerCreate(clockid_t clockID, struct ksigevent *evp, timer_t *timerID); 195 extern int SysTimerGettime(timer_t timerID, struct itimerspec *value); 196 extern int SysTimerGetoverrun(timer_t timerID); 197 extern int SysTimerDelete(timer_t timerID); 198 extern int SysClockSettime(clockid_t clockID, const struct timespec *tp); 199 extern int SysClockGettime(clockid_t clockID, struct timespec *tp); 200 extern int SysClockGetres(clockid_t clockID, struct timespec *tp); 201 extern int SysClockNanoSleep(clockid_t clk, int flags, const struct timespec *req, struct timespec *rem); 202 extern int SysUtime(const char *path, const struct utimbuf *ptimes); 203 extern int SysTimerSettime(timer_t timerID, int flags, const struct itimerspec *value, struct itimerspec *oldValue); 204 205 extern int SysClockSettime64(clockid_t clockID, const struct timespec64 *tp); 206 extern int SysClockGettime64(clockid_t clockID, struct timespec64 *tp); 207 extern int SysClockGetres64(clockid_t clockID, struct timespec64 *tp); 208 extern int SysClockNanoSleep64(clockid_t clk, int flags, const struct timespec64 *req, struct timespec64 *rem); 209 extern int SysTimerGettime64(timer_t timerID, struct itimerspec64 *value); 210 extern int SysTimerSettime64(timer_t timerID, int flags, const struct itimerspec64 *value, struct itimerspec64 *oldValue); 211 212 /* filesystem */ 213 #ifdef LOSCFG_FS_VFS 214 typedef int (*PollFun)(struct pollfd *fds, nfds_t nfds, int timeout); 215 extern int fp_open(char *fullpath, int oflags, mode_t mode); 216 extern int do_open(int dirfd, const char *path, int oflags, mode_t mode); 217 extern int do_unlink(int dirfd, const char *pathname); 218 extern int do_mkdir(int dirfd, const char *pathname, mode_t mode); 219 extern int do_rmdir(int dirfd, const char *pathname); 220 extern int do_rename(int oldfd, const char *oldpath, int newfd, const char *newpath); 221 extern int do_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, 222 struct timeval *timeout, PollFun poll); 223 extern int do_readdir(int fd, struct dirent **de, unsigned int count); 224 extern ssize_t preadv(int __fd, const struct iovec *__iov, int __count, off_t __offset); 225 extern ssize_t pwritev(int __fd, const struct iovec *__iov, int __count, off_t __offset); 226 extern int chattr(const char *pathname, struct IATTR *attr); 227 228 extern int SysClose(int fd); 229 extern ssize_t SysRead(int fd, void *buf, size_t nbytes); 230 extern ssize_t SysWrite(int fd, const void *buf, size_t nbytes); 231 extern int SysOpen(const char *path, int oflags, ...); 232 extern int SysCreat(const char *pathname, mode_t mode); 233 extern int SysLink(const char *path1, const char *path2); 234 extern ssize_t SysReadlink(const char *pathname, char *buf, size_t bufsize); 235 extern int SysSymlink(const char *target, const char *linkpath); 236 extern int SysLinkat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath, int flags); 237 extern int SysSymlinkat(const char *target, int dirfd, const char *linkpath); 238 extern ssize_t SysReadlinkat(int dirfd, const char *pathname, char *buf, size_t bufsize); 239 extern int SysUnlink( const char *pathname); 240 extern int SysExecve(const char *fileName, char *const *argv, char *const *envp); 241 extern int SysFchdir(int fd); 242 extern int SysChdir(const char *path); 243 extern int SysUtimensat(int fd, const char *path, struct timespec times[2], int flag); 244 extern int SysFchmodat(int fd, const char *path, mode_t mode, int flag); 245 extern int SysFchmod(int fd, mode_t mode); 246 extern int SysChmod(const char *path, mode_t mode); 247 extern int SysFchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); 248 extern int SysFchown(int fd, uid_t owner, gid_t group); 249 extern int SysChown(const char *pathname, uid_t owner, gid_t group); 250 extern off_t SysLseek(int fd, off_t offset, int whence); 251 extern off64_t SysLseek64(int fd, int offsetHigh, int offsetLow, off64_t *result, int whence); 252 extern int SysMount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, 253 const void *data); 254 extern int SysUmount(const char *target); 255 extern int SysAccess(const char *path, int amode); 256 extern int SysFaccessat(int fd, const char *filename, int amode, int flag); 257 extern int SysRename(const char *oldpath, const char *newpath); 258 extern int SysMkdir(const char *pathname, mode_t mode); 259 extern int SysRmdir(const char *pathname); 260 extern int SysDup(int fd); 261 extern int SysUmount2(const char *target, int flags); 262 extern int SysIoctl(int fd, int req, void *arg); 263 extern int SysFcntl(int fd, int cmd, void *arg); 264 extern int SysDup2(int fd1, int fd2); 265 extern int SysSelect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); 266 extern int SysPselect6(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, 267 const struct timespec *timeout, const long data[2]); 268 extern int SysTruncate(const char *path, off_t length); 269 extern int SysFtruncate(int fd, off_t length); 270 extern int SysStatfs(const char *path, struct statfs *buf); 271 extern int SysStatfs64(const char *path, size_t sz, struct statfs *buf); 272 extern int SysFstatfs(int fd, struct statfs *buf); 273 extern int SysFstatfs64(int fd, size_t sz, struct statfs *buf); 274 275 extern int SysStat(const char *path, struct kstat *buf); 276 extern int SysLstat(const char *path, struct kstat *buffer); 277 extern int SysFstat(int fields, struct kstat *buf); 278 extern int SysStatx(int fd, const char *restrict path, int flag, unsigned mask, struct statx *restrict stx); 279 extern int SysFsync(int fd); 280 extern ssize_t SysReadv(int fd, const struct iovec *iov, int iovcnt); 281 extern ssize_t SysWritev(int fd, const struct iovec *iov, int iovcnt); 282 extern int SysPipe(int pipefd[2]); /* 2 : pipe fds for read and write */ 283 extern int SysFormat(const char *dev, int sectors, int option); 284 extern int SysFstat64(int fd, struct kstat *buf); 285 extern int SysFstatat64(int fd, const char *restrict path, struct kstat *restrict buf, int flag); 286 extern int SysFcntl64(int fd, int cmd, void *arg); 287 extern int SysPoll(struct pollfd *fds, nfds_t nfds, int timeout); 288 extern int SysPpoll(struct pollfd *fds, nfds_t nfds, const struct timespec *tmo_p, 289 const sigset_t *sigmask, int nsig); 290 extern int SysPrctl(int option, ...); 291 extern ssize_t SysPread64(int fd, void *buf, size_t nbytes, off64_t offset); 292 extern ssize_t SysPwrite64(int fd, const void *buf, size_t nbytes, off64_t offset); 293 extern int SysEpollCreate(int size); 294 extern int SysEpollCreate1(int size); 295 extern int SysEpollCtl(int epfd, int op, int fd, struct epoll_event *ev); 296 extern int SysEpollWait(int epfd, struct epoll_event *evs, int maxevents, int timeout); 297 extern int SysEpollPwait(int epfd, struct epoll_event *evs, int maxevents, int timeout, const sigset_t *mask); 298 extern char *SysGetcwd(char *buf, size_t n); 299 extern ssize_t SysSendFile(int outfd, int infd, off_t *offset, size_t count); 300 extern int SysTruncate(const char *path, off_t length); 301 extern int SysTruncate64(const char *path, off64_t length); 302 extern int SysFtruncate64(int fd, off64_t length); 303 extern int SysOpenat(int dirfd, const char *path, int oflags, ...); 304 extern int SysMkdirat(int dirfd, const char *pathname, mode_t mode); 305 extern int SysUnlinkat(int dirfd, const char *pathname, int flag); 306 extern int SysRenameat(int oldfd, const char *oldpath, int newdfd, const char *newpath); 307 extern int SysFallocate(int fd, int mode, off_t offset, off_t len); 308 extern int SysFallocate64(int fd, int mode, off64_t offset, off64_t len); 309 extern ssize_t SysPreadv(int fd, const struct iovec *iov, int iovcnt, long loffset, long hoffset); 310 extern ssize_t SysPwritev(int fd, const struct iovec *iov, int iovcnt, long loffset, long hoffset); 311 extern void SysSync(void); 312 extern int SysGetdents64(int fd, struct dirent *de_user, unsigned int count); 313 extern int do_opendir(const char *path, int oflags); 314 extern char *SysRealpath(const char *path, char *resolvedPath); 315 extern int SysUmask(int mask); 316 extern int SysShellExec(const char *msgName, const char *cmdString); 317 extern int SysReboot(int magic, int magic2, int type); 318 extern int SysGetrusage(int what, struct rusage *ru); 319 extern long SysSysconf(int name); 320 extern int SysUgetrlimit(int resource, unsigned long long k_rlim[2]); 321 extern int SysSetrlimit(int resource, unsigned long long k_rlim[2]); 322 #ifdef LOSCFG_CHROOT 323 extern int SysChroot(const char *path); 324 #endif 325 #endif 326 #endif /* _LOS_SYSCALL_H */ 327