1 /*
2 * include/asm-xtensa/platform-iss/simcall.h
3 *
4 * This file is subject to the terms and conditions of the GNU General Public
5 * License. See the file "COPYING" in the main directory of this archive
6 * for more details.
7 *
8 * Copyright (C) 2001 Tensilica Inc.
9 * Copyright (C) 2017 - 2021 Cadence Design Systems Inc.
10 */
11
12 #ifndef _XTENSA_PLATFORM_ISS_SIMCALL_H
13 #define _XTENSA_PLATFORM_ISS_SIMCALL_H
14
15 #include <linux/bug.h>
16
17 #ifdef CONFIG_XTENSA_SIMCALL_ISS
18 #include <platform/simcall-iss.h>
19 #endif
20 #ifdef CONFIG_XTENSA_SIMCALL_GDBIO
21 #include <platform/simcall-gdbio.h>
22 #endif
23
simc_exit(int exit_code)24 static inline int simc_exit(int exit_code)
25 {
26 #ifdef SYS_exit
27 return __simc(SYS_exit, exit_code, 0, 0);
28 #else
29 WARN_ONCE(1, "%s: not implemented\n", __func__);
30 return -1;
31 #endif
32 }
33
simc_open(const char * file,int flags,int mode)34 static inline int simc_open(const char *file, int flags, int mode)
35 {
36 return __simc(SYS_open, (int) file, flags, mode);
37 }
38
simc_close(int fd)39 static inline int simc_close(int fd)
40 {
41 return __simc(SYS_close, fd, 0, 0);
42 }
43
simc_ioctl(int fd,int request,void * arg)44 static inline int simc_ioctl(int fd, int request, void *arg)
45 {
46 #ifdef SYS_ioctl
47 return __simc(SYS_ioctl, fd, request, (int) arg);
48 #else
49 WARN_ONCE(1, "%s: not implemented\n", __func__);
50 return -1;
51 #endif
52 }
53
simc_read(int fd,void * buf,size_t count)54 static inline int simc_read(int fd, void *buf, size_t count)
55 {
56 return __simc(SYS_read, fd, (int) buf, count);
57 }
58
simc_write(int fd,const void * buf,size_t count)59 static inline int simc_write(int fd, const void *buf, size_t count)
60 {
61 return __simc(SYS_write, fd, (int) buf, count);
62 }
63
simc_poll(int fd)64 static inline int simc_poll(int fd)
65 {
66 #ifdef SYS_select_one
67 long timeval[2] = { 0, 0 };
68
69 return __simc(SYS_select_one, fd, XTISS_SELECT_ONE_READ, (int)&timeval);
70 #else
71 WARN_ONCE(1, "%s: not implemented\n", __func__);
72 return -1;
73 #endif
74 }
75
simc_lseek(int fd,uint32_t off,int whence)76 static inline int simc_lseek(int fd, uint32_t off, int whence)
77 {
78 return __simc(SYS_lseek, fd, off, whence);
79 }
80
simc_argc(void)81 static inline int simc_argc(void)
82 {
83 #ifdef SYS_iss_argc
84 return __simc(SYS_iss_argc, 0, 0, 0);
85 #else
86 WARN_ONCE(1, "%s: not implemented\n", __func__);
87 return 0;
88 #endif
89 }
90
simc_argv_size(void)91 static inline int simc_argv_size(void)
92 {
93 #ifdef SYS_iss_argv_size
94 return __simc(SYS_iss_argv_size, 0, 0, 0);
95 #else
96 WARN_ONCE(1, "%s: not implemented\n", __func__);
97 return 0;
98 #endif
99 }
100
simc_argv(void * buf)101 static inline void simc_argv(void *buf)
102 {
103 #ifdef SYS_iss_set_argv
104 __simc(SYS_iss_set_argv, (int)buf, 0, 0);
105 #else
106 WARN_ONCE(1, "%s: not implemented\n", __func__);
107 #endif
108 }
109
110 #endif /* _XTENSA_PLATFORM_ISS_SIMCALL_H */
111