/* * Semihosting Console * * Copyright (c) 2019 Linaro Ltd * * SPDX-License-Identifier: GPL-2.0-or-later */ #ifndef SEMIHOST_CONSOLE_H #define SEMIHOST_CONSOLE_H #include "cpu.h" /** * qemu_semihosting_console_outs: * @env: CPUArchState * @s: host address of null terminated guest string * * Send a null terminated guest string to the debug console. This may * be the remote gdb session if a softmmu guest is currently being * debugged. * * Returns: number of bytes written. */ int qemu_semihosting_console_outs(CPUArchState *env, target_ulong s); /** * qemu_semihosting_console_outc: * @env: CPUArchState * @s: host address of null terminated guest string * * Send single character from guest memory to the debug console. This * may be the remote gdb session if a softmmu guest is currently being * debugged. * * Returns: nothing */ void qemu_semihosting_console_outc(CPUArchState *env, target_ulong c); /** * qemu_semihosting_console_inc: * @env: CPUArchState * * Receive single character from debug console. This may be the remote * gdb session if a softmmu guest is currently being debugged. As this * call may block if no data is available we suspend the CPU and will * re-execute the instruction when data is there. Therefore two * conditions must be met: * - CPUState is synchronized before calling this function * - pc is only updated once the character is successfully returned * * Returns: character read OR cpu_loop_exit! */ target_ulong qemu_semihosting_console_inc(CPUArchState *env); /** * qemu_semihosting_log_out: * @s: pointer to string * @len: length of string * * Send a string to the debug output. Unlike console_out these strings * can't be sent to a remote gdb instance as they don't exist in guest * memory. * * Returns: number of bytes written */ int qemu_semihosting_log_out(const char *s, int len); #endif /* SEMIHOST_CONSOLE_H */