xref: /qemu/include/semihosting/syscalls.h (revision 0e3aff9ec34059512d597eacfcf4d1b5d4570c50)
15b3f39cbSRichard Henderson /*
25b3f39cbSRichard Henderson  * Syscall implementations for semihosting.
35b3f39cbSRichard Henderson  *
45b3f39cbSRichard Henderson  * Copyright (c) 2022 Linaro
55b3f39cbSRichard Henderson  *
65b3f39cbSRichard Henderson  * SPDX-License-Identifier: GPL-2.0-or-later
75b3f39cbSRichard Henderson  */
85b3f39cbSRichard Henderson 
95b3f39cbSRichard Henderson #ifndef SEMIHOSTING_SYSCALLS_H
105b3f39cbSRichard Henderson #define SEMIHOSTING_SYSCALLS_H
115b3f39cbSRichard Henderson 
12*056c4059SPhilippe Mathieu-Daudé #include "exec/cpu-defs.h"
13f961773cSPhilippe Mathieu-Daudé #include "gdbstub/syscalls.h"
14f961773cSPhilippe Mathieu-Daudé 
155b3f39cbSRichard Henderson /*
165b3f39cbSRichard Henderson  * Argument loading from the guest is performed by the caller;
175b3f39cbSRichard Henderson  * results are returned via the 'complete' callback.
185b3f39cbSRichard Henderson  *
195b3f39cbSRichard Henderson  * String operands are in address/len pairs.  The len argument may be 0
205b3f39cbSRichard Henderson  * (when the semihosting abi does not already provide the length),
215b3f39cbSRichard Henderson  * or non-zero (where it should include the terminating zero).
225b3f39cbSRichard Henderson  */
235b3f39cbSRichard Henderson 
24af0484b5SRichard Henderson typedef struct GuestFD GuestFD;
25af0484b5SRichard Henderson 
265b3f39cbSRichard Henderson void semihost_sys_open(CPUState *cs, gdb_syscall_complete_cb complete,
275b3f39cbSRichard Henderson                        target_ulong fname, target_ulong fname_len,
285b3f39cbSRichard Henderson                        int gdb_flags, int mode);
295b3f39cbSRichard Henderson 
305eadbbfcSRichard Henderson void semihost_sys_close(CPUState *cs, gdb_syscall_complete_cb complete,
315eadbbfcSRichard Henderson                         int fd);
325eadbbfcSRichard Henderson 
33af0484b5SRichard Henderson void semihost_sys_read(CPUState *cs, gdb_syscall_complete_cb complete,
34af0484b5SRichard Henderson                        int fd, target_ulong buf, target_ulong len);
35af0484b5SRichard Henderson 
36af0484b5SRichard Henderson void semihost_sys_read_gf(CPUState *cs, gdb_syscall_complete_cb complete,
37af0484b5SRichard Henderson                           GuestFD *gf, target_ulong buf, target_ulong len);
38af0484b5SRichard Henderson 
39aa915bd0SRichard Henderson void semihost_sys_write(CPUState *cs, gdb_syscall_complete_cb complete,
40aa915bd0SRichard Henderson                         int fd, target_ulong buf, target_ulong len);
41aa915bd0SRichard Henderson 
42aa915bd0SRichard Henderson void semihost_sys_write_gf(CPUState *cs, gdb_syscall_complete_cb complete,
43aa915bd0SRichard Henderson                            GuestFD *gf, target_ulong buf, target_ulong len);
44aa915bd0SRichard Henderson 
459a894704SRichard Henderson void semihost_sys_lseek(CPUState *cs, gdb_syscall_complete_cb complete,
469a894704SRichard Henderson                         int fd, int64_t off, int gdb_whence);
479a894704SRichard Henderson 
48a2212474SRichard Henderson void semihost_sys_isatty(CPUState *cs, gdb_syscall_complete_cb complete,
49a2212474SRichard Henderson                          int fd);
50a2212474SRichard Henderson 
51a6300ed6SRichard Henderson void semihost_sys_flen(CPUState *cs, gdb_syscall_complete_cb fstat_cb,
52a6300ed6SRichard Henderson                        gdb_syscall_complete_cb flen_cb,
53a6300ed6SRichard Henderson                        int fd, target_ulong fstat_addr);
54a6300ed6SRichard Henderson 
55dffeb775SRichard Henderson void semihost_sys_fstat(CPUState *cs, gdb_syscall_complete_cb complete,
56dffeb775SRichard Henderson                         int fd, target_ulong addr);
57dffeb775SRichard Henderson 
58dffeb775SRichard Henderson void semihost_sys_stat(CPUState *cs, gdb_syscall_complete_cb complete,
59dffeb775SRichard Henderson                        target_ulong fname, target_ulong fname_len,
60dffeb775SRichard Henderson                        target_ulong addr);
61dffeb775SRichard Henderson 
62d49e79b8SRichard Henderson void semihost_sys_remove(CPUState *cs, gdb_syscall_complete_cb complete,
63d49e79b8SRichard Henderson                          target_ulong fname, target_ulong fname_len);
64d49e79b8SRichard Henderson 
6525a95da0SRichard Henderson void semihost_sys_rename(CPUState *cs, gdb_syscall_complete_cb complete,
6625a95da0SRichard Henderson                          target_ulong oname, target_ulong oname_len,
6725a95da0SRichard Henderson                          target_ulong nname, target_ulong nname_len);
6825a95da0SRichard Henderson 
6990d8e0b0SRichard Henderson void semihost_sys_system(CPUState *cs, gdb_syscall_complete_cb complete,
7090d8e0b0SRichard Henderson                          target_ulong cmd, target_ulong cmd_len);
7190d8e0b0SRichard Henderson 
721875dab0SRichard Henderson void semihost_sys_gettimeofday(CPUState *cs, gdb_syscall_complete_cb complete,
731875dab0SRichard Henderson                                target_ulong tv_addr, target_ulong tz_addr);
741875dab0SRichard Henderson 
751b9177f7SRichard Henderson void semihost_sys_poll_one(CPUState *cs, gdb_syscall_complete_cb complete,
761b9177f7SRichard Henderson                            int fd, GIOCondition cond, int timeout);
771b9177f7SRichard Henderson 
785b3f39cbSRichard Henderson #endif /* SEMIHOSTING_SYSCALLS_H */
79