xref: /linux/arch/xtensa/platforms/iss/include/platform/simcall.h (revision 8be98d2f2a0a262f8bf8a0bc1fdf522b3c7aab17)
1367b8112SChris Zankel /*
2367b8112SChris Zankel  * include/asm-xtensa/platform-iss/simcall.h
3367b8112SChris Zankel  *
4367b8112SChris Zankel  * This file is subject to the terms and conditions of the GNU General Public
5367b8112SChris Zankel  * License.  See the file "COPYING" in the main directory of this archive
6367b8112SChris Zankel  * for more details.
7367b8112SChris Zankel  *
8367b8112SChris Zankel  * Copyright (C) 2001 Tensilica Inc.
954467c12SMax Filippov  * Copyright (C) 2017 - 2021 Cadence Design Systems Inc.
10367b8112SChris Zankel  */
11367b8112SChris Zankel 
12367b8112SChris Zankel #ifndef _XTENSA_PLATFORM_ISS_SIMCALL_H
13367b8112SChris Zankel #define _XTENSA_PLATFORM_ISS_SIMCALL_H
14367b8112SChris Zankel 
15*6a8eb99eSMax Filippov #include <linux/bug.h>
16*6a8eb99eSMax Filippov 
17*6a8eb99eSMax Filippov #ifdef CONFIG_XTENSA_SIMCALL_ISS
1854467c12SMax Filippov #include <platform/simcall-iss.h>
19*6a8eb99eSMax Filippov #endif
20*6a8eb99eSMax Filippov #ifdef CONFIG_XTENSA_SIMCALL_GDBIO
21*6a8eb99eSMax Filippov #include <platform/simcall-gdbio.h>
22*6a8eb99eSMax Filippov #endif
23717460eeSMax Filippov 
simc_exit(int exit_code)24feec273aSMax Filippov static inline int simc_exit(int exit_code)
25feec273aSMax Filippov {
26*6a8eb99eSMax Filippov #ifdef SYS_exit
27feec273aSMax Filippov 	return __simc(SYS_exit, exit_code, 0, 0);
28*6a8eb99eSMax Filippov #else
29*6a8eb99eSMax Filippov 	WARN_ONCE(1, "%s: not implemented\n", __func__);
30*6a8eb99eSMax Filippov 	return -1;
31*6a8eb99eSMax Filippov #endif
32feec273aSMax Filippov }
33feec273aSMax Filippov 
simc_open(const char * file,int flags,int mode)3450c08f8eSMax Filippov static inline int simc_open(const char *file, int flags, int mode)
35717460eeSMax Filippov {
36f4b93ba9SMax Filippov 	return __simc(SYS_open, (int) file, flags, mode);
37717460eeSMax Filippov }
38717460eeSMax Filippov 
simc_close(int fd)39717460eeSMax Filippov static inline int simc_close(int fd)
40717460eeSMax Filippov {
41f4b93ba9SMax Filippov 	return __simc(SYS_close, fd, 0, 0);
42717460eeSMax Filippov }
43717460eeSMax Filippov 
simc_ioctl(int fd,int request,void * arg)44717460eeSMax Filippov static inline int simc_ioctl(int fd, int request, void *arg)
45717460eeSMax Filippov {
46*6a8eb99eSMax Filippov #ifdef SYS_ioctl
47f4b93ba9SMax Filippov 	return __simc(SYS_ioctl, fd, request, (int) arg);
48*6a8eb99eSMax Filippov #else
49*6a8eb99eSMax Filippov 	WARN_ONCE(1, "%s: not implemented\n", __func__);
50*6a8eb99eSMax Filippov 	return -1;
51*6a8eb99eSMax Filippov #endif
52717460eeSMax Filippov }
53717460eeSMax Filippov 
simc_read(int fd,void * buf,size_t count)54717460eeSMax Filippov static inline int simc_read(int fd, void *buf, size_t count)
55717460eeSMax Filippov {
56f4b93ba9SMax Filippov 	return __simc(SYS_read, fd, (int) buf, count);
57717460eeSMax Filippov }
58717460eeSMax Filippov 
simc_write(int fd,const void * buf,size_t count)5950c08f8eSMax Filippov static inline int simc_write(int fd, const void *buf, size_t count)
60717460eeSMax Filippov {
61f4b93ba9SMax Filippov 	return __simc(SYS_write, fd, (int) buf, count);
62717460eeSMax Filippov }
63717460eeSMax Filippov 
simc_poll(int fd)64717460eeSMax Filippov static inline int simc_poll(int fd)
65717460eeSMax Filippov {
66*6a8eb99eSMax Filippov #ifdef SYS_select_one
6737e86e0fSArnd Bergmann 	long timeval[2] = { 0, 0 };
68717460eeSMax Filippov 
6937e86e0fSArnd Bergmann 	return __simc(SYS_select_one, fd, XTISS_SELECT_ONE_READ, (int)&timeval);
70*6a8eb99eSMax Filippov #else
71*6a8eb99eSMax Filippov 	WARN_ONCE(1, "%s: not implemented\n", __func__);
72*6a8eb99eSMax Filippov 	return -1;
73*6a8eb99eSMax Filippov #endif
74f4b93ba9SMax Filippov }
75f4b93ba9SMax Filippov 
simc_lseek(int fd,uint32_t off,int whence)76f4b93ba9SMax Filippov static inline int simc_lseek(int fd, uint32_t off, int whence)
77f4b93ba9SMax Filippov {
78f4b93ba9SMax Filippov 	return __simc(SYS_lseek, fd, off, whence);
79717460eeSMax Filippov }
80367b8112SChris Zankel 
simc_argc(void)81e8cd8da9SMax Filippov static inline int simc_argc(void)
82e8cd8da9SMax Filippov {
83*6a8eb99eSMax Filippov #ifdef SYS_iss_argc
84e8cd8da9SMax Filippov 	return __simc(SYS_iss_argc, 0, 0, 0);
85*6a8eb99eSMax Filippov #else
86*6a8eb99eSMax Filippov 	WARN_ONCE(1, "%s: not implemented\n", __func__);
87*6a8eb99eSMax Filippov 	return 0;
88*6a8eb99eSMax Filippov #endif
89e8cd8da9SMax Filippov }
90e8cd8da9SMax Filippov 
simc_argv_size(void)91e8cd8da9SMax Filippov static inline int simc_argv_size(void)
92e8cd8da9SMax Filippov {
93*6a8eb99eSMax Filippov #ifdef SYS_iss_argv_size
94e8cd8da9SMax Filippov 	return __simc(SYS_iss_argv_size, 0, 0, 0);
95*6a8eb99eSMax Filippov #else
96*6a8eb99eSMax Filippov 	WARN_ONCE(1, "%s: not implemented\n", __func__);
97*6a8eb99eSMax Filippov 	return 0;
98*6a8eb99eSMax Filippov #endif
99e8cd8da9SMax Filippov }
100e8cd8da9SMax Filippov 
simc_argv(void * buf)101e8cd8da9SMax Filippov static inline void simc_argv(void *buf)
102e8cd8da9SMax Filippov {
103*6a8eb99eSMax Filippov #ifdef SYS_iss_set_argv
104e8cd8da9SMax Filippov 	__simc(SYS_iss_set_argv, (int)buf, 0, 0);
105*6a8eb99eSMax Filippov #else
106*6a8eb99eSMax Filippov 	WARN_ONCE(1, "%s: not implemented\n", __func__);
107*6a8eb99eSMax Filippov #endif
108e8cd8da9SMax Filippov }
109e8cd8da9SMax Filippov 
110367b8112SChris Zankel #endif /* _XTENSA_PLATFORM_ISS_SIMCALL_H */
111