| /* |
| * 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_read: |
| * @cs: CPUState |
| * @buf: host buffer |
| * @len: buffer size |
| * |
| * Receive at least one character from debug console. 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: number of characters read, OR cpu_loop_exit! |
| */ |
| int qemu_semihosting_console_read(CPUState *cs, void *buf, int len); |
| |
| /** |
| * qemu_semihosting_console_write: |
| * @buf: host buffer |
| * @len: buffer size |
| * |
| * Write len bytes from buf to the debug console. |
| * |
| * Returns: number of bytes written -- this should only ever be short |
| * on some sort of i/o error. |
| */ |
| int qemu_semihosting_console_write(void *buf, int len); |
| |
| /* |
| * qemu_semihosting_console_block_until_ready: |
| * @cs: CPUState |
| * |
| * If no data is available we suspend the CPU and will re-execute the |
| * instruction when data is available. |
| */ |
| void qemu_semihosting_console_block_until_ready(CPUState *cs); |
| |
| /** |
| * qemu_semihosting_console_ready: |
| * |
| * Return true if characters are available for read; does not block. |
| */ |
| bool qemu_semihosting_console_ready(void); |
| |
| #endif /* SEMIHOST_CONSOLE_H */ |