xref: /qemu/include/semihosting/syscalls.h (revision 9a89470449a5171eb1bd06f681361e0888d15cf7)
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 
125b3f39cbSRichard Henderson /*
135b3f39cbSRichard Henderson  * Argument loading from the guest is performed by the caller;
145b3f39cbSRichard Henderson  * results are returned via the 'complete' callback.
155b3f39cbSRichard Henderson  *
165b3f39cbSRichard Henderson  * String operands are in address/len pairs.  The len argument may be 0
175b3f39cbSRichard Henderson  * (when the semihosting abi does not already provide the length),
185b3f39cbSRichard Henderson  * or non-zero (where it should include the terminating zero).
195b3f39cbSRichard Henderson  */
205b3f39cbSRichard Henderson 
21af0484b5SRichard Henderson typedef struct GuestFD GuestFD;
22af0484b5SRichard Henderson 
235b3f39cbSRichard Henderson void semihost_sys_open(CPUState *cs, gdb_syscall_complete_cb complete,
245b3f39cbSRichard Henderson                        target_ulong fname, target_ulong fname_len,
255b3f39cbSRichard Henderson                        int gdb_flags, int mode);
265b3f39cbSRichard Henderson 
275eadbbfcSRichard Henderson void semihost_sys_close(CPUState *cs, gdb_syscall_complete_cb complete,
285eadbbfcSRichard Henderson                         int fd);
295eadbbfcSRichard Henderson 
30af0484b5SRichard Henderson void semihost_sys_read(CPUState *cs, gdb_syscall_complete_cb complete,
31af0484b5SRichard Henderson                        int fd, target_ulong buf, target_ulong len);
32af0484b5SRichard Henderson 
33af0484b5SRichard Henderson void semihost_sys_read_gf(CPUState *cs, gdb_syscall_complete_cb complete,
34af0484b5SRichard Henderson                           GuestFD *gf, target_ulong buf, target_ulong len);
35af0484b5SRichard Henderson 
36aa915bd0SRichard Henderson void semihost_sys_write(CPUState *cs, gdb_syscall_complete_cb complete,
37aa915bd0SRichard Henderson                         int fd, target_ulong buf, target_ulong len);
38aa915bd0SRichard Henderson 
39aa915bd0SRichard Henderson void semihost_sys_write_gf(CPUState *cs, gdb_syscall_complete_cb complete,
40aa915bd0SRichard Henderson                            GuestFD *gf, target_ulong buf, target_ulong len);
41aa915bd0SRichard Henderson 
42*9a894704SRichard Henderson void semihost_sys_lseek(CPUState *cs, gdb_syscall_complete_cb complete,
43*9a894704SRichard Henderson                         int fd, int64_t off, int gdb_whence);
44*9a894704SRichard Henderson 
455b3f39cbSRichard Henderson #endif /* SEMIHOSTING_SYSCALLS_H */
46