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