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