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
24static 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
34static inline int simc_open(const char *file, int flags, int mode)
35{
36	return __simc(SYS_open, (int) file, flags, mode);
37}
38
39static inline int simc_close(int fd)
40{
41	return __simc(SYS_close, fd, 0, 0);
42}
43
44static 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
54static inline int simc_read(int fd, void *buf, size_t count)
55{
56	return __simc(SYS_read, fd, (int) buf, count);
57}
58
59static inline int simc_write(int fd, const void *buf, size_t count)
60{
61	return __simc(SYS_write, fd, (int) buf, count);
62}
63
64static 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
76static inline int simc_lseek(int fd, uint32_t off, int whence)
77{
78	return __simc(SYS_lseek, fd, off, whence);
79}
80
81static 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
91static 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
101static 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