• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3  * Copyright (c) 2020-2021 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, int prio, int flag);
76 extern int SysSchedGetParam(int id, int flag);
77 extern int SysSchedSetParam(int id, unsigned int prio, int flag);
78 extern int SysSetProcessPriority(int which, int who, unsigned 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 unsigned int SysGetPID(void);
88 extern unsigned int SysGetPPID(void);
89 extern int SysSetGroupID(unsigned int gid);
90 extern int SysGetGroupID(void);
91 extern int SysGetUserID(void);
92 extern int SysGetEffUserID(void);
93 extern int SysGetEffGID(void);
94 extern int SysSetUserID(int uid);
95 extern int SysGetRealEffSaveUserID(int *ruid, int *euid, int *suid);
96 extern int SysGetRealEffSaveGroupID(int *rgid, int *egid, int *sgid);
97 extern int SysSetRealEffUserID(int ruid, int euid);
98 extern int SysSetRealEffGroupID(int rgid, int egid);
99 extern int SysSetRealEffSaveGroupID(int rgid, int egid, int sgid);
100 extern int SysSetRealEffSaveUserID(int ruid, int euid, int suid);
101 extern int SysGetGroups(int size, int list[]);
102 extern int SysSetGroups(int size, int list[]);
103 extern int SysGetCurrProcessGroupID(void);
104 extern int SysGetProcessGroupID(unsigned int pid);
105 extern int SysSetProcessGroupID(unsigned int pid, unsigned int gid);
106 extern unsigned int SysCreateUserThread(const TSK_ENTRY_FUNC func, const UserTaskParam *userParam, bool joinable);
107 extern int SysSetThreadArea(const char *area);
108 extern char *SysGetThreadArea(void);
109 extern int SysUserThreadSetDetach(unsigned int taskID);
110 extern int SysUserThreadDetach(unsigned int taskID);
111 extern int SysThreadJoin(unsigned int taskID);
112 extern void SysUserExitGroup(int status);
113 extern void SysThreadExit(int status);
114 extern int SysFutex(const unsigned int *uAddr, unsigned int flags, int val,
115                     unsigned int absTime, const unsigned int *newUserAddr);
116 extern int SysSchedGetAffinity(int id, unsigned int *cpuset, int flag);
117 extern int SysSchedSetAffinity(int id, const unsigned short cpuset, int flag);
118 
119 #ifdef LOSCFG_COMPAT_POSIX
120 extern mqd_t SysMqOpen(const char *mqName, int openFlag, mode_t mode, struct mq_attr *attr);
121 extern int SysMqClose(mqd_t personal);
122 extern int SysMqGetSetAttr(mqd_t mqd, const struct mq_attr *new, struct mq_attr *old);
123 extern int SysMqUnlink(const char *mqName);
124 extern int SysMqSend(mqd_t personal, const char *msgPtr, size_t msgLen, unsigned int msgPrio);
125 extern int SysMqTimedSend(mqd_t personal, const char *msg, size_t msgLen, unsigned int msgPrio,
126                           const struct timespec *absTimeout);
127 extern ssize_t SysMqTimedReceive(mqd_t personal, char *msg, size_t msgLen, unsigned int *msgPrio,
128                                  const struct timespec *absTimeout);
129 extern int SysMqNotify(mqd_t personal, const struct sigevent *sigev);
130 #endif
131 
132 extern int SysSigAction(int sig, const sigaction_t *restrict sa, sigaction_t *restrict old, size_t sigsetsize);
133 extern int SysSigprocMask(int how, const sigset_t_l *restrict setl, sigset_t_l *restrict oldl, size_t sigsetsize);
134 extern int SysKill(pid_t pid, int sig);
135 extern int SysPthreadKill(pid_t pid, int sig);
136 extern int SysSigTimedWait(const sigset_t_l *setl, siginfo_t *info,
137                            const struct timespec *timeout, size_t sigsetsize);
138 extern int SysPause(void);
139 extern int SysSigPending(sigset_t_l *setl);
140 extern int SysSigSuspend(sigset_t_l *setl);
141 extern int SysMkFifo(const char *pathName, mode_t mode);
142 
143 /* net */
144 #ifdef LOSCFG_NET_LWIP_SACK
145 extern int SysSocket(int domain, int type, int protocol);
146 extern int SysBind(int s, const struct sockaddr *name, socklen_t namelen);
147 extern int SysConnect(int s, const struct sockaddr *name, socklen_t namelen);
148 extern int SysListen(int sockfd, int backlog);
149 extern int SysAccept(int socket, struct sockaddr *address, socklen_t *addressLen);
150 extern int SysGetSockName(int s, struct sockaddr *name, socklen_t *namelen);
151 extern int SysGetPeerName(int s, struct sockaddr *name, socklen_t *namelen);
152 extern ssize_t SysSend(int s, const void *dataptr, size_t size, int flags);
153 extern ssize_t SysSendTo(int s, const void *dataptr, size_t size, int flags,
154                          const struct sockaddr *to, socklen_t tolen);
155 extern ssize_t SysRecv(int socket, void *buffer, size_t length, int flags);
156 extern ssize_t SysRecvFrom(int socket, void *buffer, size_t length, int flags,
157                            struct sockaddr *address, socklen_t *addressLen);
158 extern int SysShutdown(int socket, int how);
159 extern int SysSetSockOpt(int socket, int level, int optName,
160                          const void *optValue, socklen_t optLen);
161 extern int SysGetSockOpt(int sockfd, int level, int optName,
162                          void *optValue, socklen_t *optLen);
163 extern ssize_t SysSendMsg(int s, const struct msghdr *message, int flags);
164 extern ssize_t SysRecvMsg(int s, struct msghdr *message, int flags);
165 #endif
166 
167 /* vmm */
168 extern void *SysMmap(void *addr, size_t size, int prot, int flags, int fd, size_t offset);
169 extern int SysMunmap(void *addr, size_t size);
170 extern int SysMprotect(void *vaddr, size_t len, int prot);
171 extern void *SysMremap(void *oldAddr, size_t oldLen, size_t newLen, int flags, void *newAddr);
172 extern void *SysBrk(void *addr);
173 extern int SysShmGet(key_t key, size_t size, int shmflg);
174 extern void *SysShmAt(int shmid, const void *shmaddr, int shmflg);
175 extern int SysShmCtl(int shmid, int cmd, struct shmid_ds *buf);
176 extern int SysShmDt(const void *shmaddr);
177 
178 /* misc */
179 extern int SysUname(struct utsname *name);
180 extern int SysInfo(struct sysinfo *info);
181 
182 /* time */
183 extern int SysNanoSleep(const struct timespec *rqtp, struct timespec *rmtp);
184 extern clock_t SysTimes(struct tms *buf);
185 extern time_t SysTime(time_t *tloc);
186 extern int SysSetiTimer(int which, const struct itimerval *value, struct itimerval *ovalue);
187 extern int SysGetiTimer(int which, struct itimerval *value);
188 extern int SysTimerCreate(clockid_t clockID, struct ksigevent *evp, timer_t *timerID);
189 extern int SysTimerGettime(timer_t timerID, struct itimerspec *value);
190 extern int SysTimerGetoverrun(timer_t timerID);
191 extern int SysTimerDelete(timer_t timerID);
192 extern int SysClockSettime(clockid_t clockID, const struct timespec *tp);
193 extern int SysClockGettime(clockid_t clockID, struct timespec *tp);
194 extern int SysClockGetres(clockid_t clockID, struct timespec *tp);
195 extern int SysClockNanoSleep(clockid_t clk, int flags, const struct timespec *req, struct timespec *rem);
196 extern int SysUtime(const char *path, const struct utimbuf *ptimes);
197 extern int SysTimerSettime(timer_t timerID, int flags, const struct itimerspec *value, struct itimerspec *oldValue);
198 
199 extern int SysClockSettime64(clockid_t clockID, const struct timespec64 *tp);
200 extern int SysClockGettime64(clockid_t clockID, struct timespec64 *tp);
201 extern int SysClockGetres64(clockid_t clockID, struct timespec64 *tp);
202 extern int SysClockNanoSleep64(clockid_t clk, int flags, const struct timespec64 *req, struct timespec64 *rem);
203 extern int SysTimerGettime64(timer_t timerID, struct itimerspec64 *value);
204 extern int SysTimerSettime64(timer_t timerID, int flags, const struct itimerspec64 *value, struct itimerspec64 *oldValue);
205 
206 /* filesystem */
207 #ifdef LOSCFG_FS_VFS
208 typedef int (*PollFun)(struct pollfd *fds, nfds_t nfds, int timeout);
209 extern int fp_open(char *fullpath, int oflags, mode_t mode);
210 extern int do_open(int dirfd, const char *path, int oflags, mode_t mode);
211 extern int do_unlink(int dirfd, const char *pathname);
212 extern int do_mkdir(int dirfd, const char *pathname, mode_t mode);
213 extern int do_rmdir(int dirfd, const char *pathname);
214 extern int do_rename(int oldfd, const char *oldpath, int newfd, const char *newpath);
215 extern int do_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
216     struct timeval *timeout, PollFun poll);
217 extern int do_readdir(int fd, struct dirent **de, unsigned int count);
218 extern ssize_t preadv(int __fd, const struct iovec *__iov, int __count, off_t __offset);
219 extern ssize_t pwritev(int __fd, const struct iovec *__iov, int __count, off_t __offset);
220 extern int chattr(const char *pathname, struct IATTR *attr);
221 
222 extern int SysClose(int fd);
223 extern ssize_t SysRead(int fd, void *buf, size_t nbytes);
224 extern ssize_t SysWrite(int fd, const void *buf, size_t nbytes);
225 extern int SysOpen(const char *path, int oflags, ...);
226 extern int SysCreat(const char *pathname, mode_t mode);
227 extern int SysLink(const char *path1, const char *path2);
228 extern ssize_t SysReadlink(const char *pathname, char *buf, size_t bufsize);
229 extern int SysSymlink(const char *target, const char *linkpath);
230 extern int SysLinkat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath, int flags);
231 extern int SysSymlinkat(const char *target, int dirfd, const char *linkpath);
232 extern ssize_t SysReadlinkat(int dirfd, const char *pathname, char *buf, size_t bufsize);
233 extern int SysUnlink( const char *pathname);
234 extern int SysExecve(const char *fileName, char *const *argv, char *const *envp);
235 extern int SysFchdir(int fd);
236 extern int SysChdir(const char *path);
237 extern int SysUtimensat(int fd, const char *path, struct timespec times[2], int flag);
238 extern int SysFchmodat(int fd, const char *path, mode_t mode, int flag);
239 extern int SysFchmod(int fd, mode_t mode);
240 extern int SysChmod(const char *path, mode_t mode);
241 extern int SysFchownat(int fd, const char *path, uid_t owner, gid_t group, int flag);
242 extern int SysFchown(int fd, uid_t owner, gid_t group);
243 extern int SysChown(const char *pathname, uid_t owner, gid_t group);
244 extern off_t SysLseek(int fd, off_t offset, int whence);
245 extern off64_t SysLseek64(int fd, int offsetHigh, int offsetLow, off64_t *result, int whence);
246 extern int SysMount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags,
247                     const void *data);
248 extern int SysUmount(const char *target);
249 extern int SysAccess(const char *path, int amode);
250 extern int SysFaccessat(int fd, const char *filename, int amode, int flag);
251 extern int SysRename(const char *oldpath, const char *newpath);
252 extern int SysMkdir(const char *pathname, mode_t mode);
253 extern int SysRmdir(const char *pathname);
254 extern int SysDup(int fd);
255 extern int SysUmount2(const char *target, int flags);
256 extern int SysIoctl(int fd, int req, void *arg);
257 extern int SysFcntl(int fd, int cmd, void *arg);
258 extern int SysDup2(int fd1, int fd2);
259 extern int SysSelect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
260 extern int SysPselect6(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
261                     const struct timespec *timeout, const long data[2]);
262 extern int SysTruncate(const char *path, off_t length);
263 extern int SysFtruncate(int fd, off_t length);
264 extern int SysStatfs(const char *path, struct statfs *buf);
265 extern int SysStatfs64(const char *path, size_t sz, struct statfs *buf);
266 extern int SysFstatfs(int fd, struct statfs *buf);
267 extern int SysFstatfs64(int fd, size_t sz, struct statfs *buf);
268 
269 extern int SysStat(const char *path, struct kstat *buf);
270 extern int SysLstat(const char *path, struct kstat *buffer);
271 extern int SysFstat(int fields, struct kstat *buf);
272 extern int SysStatx(int fd, const char *restrict path, int flag, unsigned mask, struct statx *restrict stx);
273 extern int SysFsync(int fd);
274 extern ssize_t SysReadv(int fd, const struct iovec *iov, int iovcnt);
275 extern ssize_t SysWritev(int fd, const struct iovec *iov, int iovcnt);
276 extern int SysPipe(int pipefd[2]); /* 2 : pipe fds for read and write */
277 extern int SysFormat(const char *dev, int sectors, int option);
278 extern int SysFstat64(int fd, struct kstat *buf);
279 extern int SysFstatat64(int fd, const char *restrict path, struct kstat *restrict buf, int flag);
280 extern int SysFcntl64(int fd, int cmd, void *arg);
281 extern int SysPoll(struct pollfd *fds, nfds_t nfds, int timeout);
282 extern int SysPpoll(struct pollfd *fds, nfds_t nfds, const struct timespec *tmo_p,
283 		                    const sigset_t *sigmask, int nsig);
284 extern int SysPrctl(int option, ...);
285 extern ssize_t SysPread64(int fd, void *buf, size_t nbytes, off64_t offset);
286 extern ssize_t SysPwrite64(int fd, const void *buf, size_t nbytes, off64_t offset);
287 extern int SysEpollCreate(int size);
288 extern int SysEpollCreate1(int size);
289 extern int SysEpollCtl(int epfd, int op, int fd, struct epoll_event *ev);
290 extern int SysEpollWait(int epfd, struct epoll_event *evs, int maxevents, int timeout);
291 extern int SysEpollPwait(int epfd, struct epoll_event *evs, int maxevents, int timeout, const sigset_t *mask);
292 extern char *SysGetcwd(char *buf, size_t n);
293 extern ssize_t SysSendFile(int outfd, int infd, off_t *offset, size_t count);
294 extern int SysTruncate(const char *path, off_t length);
295 extern int SysTruncate64(const char *path, off64_t length);
296 extern int SysFtruncate64(int fd, off64_t length);
297 extern int SysOpenat(int dirfd, const char *path, int oflags, ...);
298 extern int SysMkdirat(int dirfd, const char *pathname, mode_t mode);
299 extern int SysUnlinkat(int dirfd, const char *pathname, int flag);
300 extern int SysRenameat(int oldfd, const char *oldpath, int newdfd, const char *newpath);
301 extern int SysFallocate(int fd, int mode, off_t offset, off_t len);
302 extern int SysFallocate64(int fd, int mode, off64_t offset, off64_t len);
303 extern ssize_t SysPreadv(int fd, const struct iovec *iov, int iovcnt, long loffset, long hoffset);
304 extern ssize_t SysPwritev(int fd, const struct iovec *iov, int iovcnt, long loffset, long hoffset);
305 extern void SysSync(void);
306 extern int SysGetdents64(int fd, struct dirent *de_user, unsigned int count);
307 extern int do_opendir(const char *path, int oflags);
308 extern char *SysRealpath(const char *path, char *resolvedPath);
309 extern int SysUmask(int mask);
310 extern int SysShellExec(const char *msgName, const char *cmdString);
311 extern int SysReboot(int magic, int magic2, int type);
312 extern int SysGetrusage(int what, struct rusage *ru);
313 extern long SysSysconf(int name);
314 extern int SysUgetrlimit(int resource, unsigned long long k_rlim[2]);
315 extern int SysSetrlimit(int resource, unsigned long long k_rlim[2]);
316 #endif
317 #endif /* _LOS_SYSCALL_H */
318