semihosting: Create semihost_sys_poll_one
[qemu/rayw.git] / include / semihosting / console.h
blob61b0cb3a9463fb4187ce8d3c1d75246b538aadf0
1 /*
2 * Semihosting Console
4 * Copyright (c) 2019 Linaro Ltd
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
9 #ifndef SEMIHOST_CONSOLE_H
10 #define SEMIHOST_CONSOLE_H
12 #include "cpu.h"
14 /**
15 * qemu_semihosting_console_read:
16 * @cs: CPUState
17 * @buf: host buffer
18 * @len: buffer size
20 * Receive at least one character from debug console. As this call may
21 * block if no data is available we suspend the CPU and will re-execute the
22 * instruction when data is there. Therefore two conditions must be met:
24 * - CPUState is synchronized before calling this function
25 * - pc is only updated once the character is successfully returned
27 * Returns: number of characters read, OR cpu_loop_exit!
29 int qemu_semihosting_console_read(CPUState *cs, void *buf, int len);
31 /**
32 * qemu_semihosting_console_write:
33 * @buf: host buffer
34 * @len: buffer size
36 * Write len bytes from buf to the debug console.
38 * Returns: number of bytes written -- this should only ever be short
39 * on some sort of i/o error.
41 int qemu_semihosting_console_write(void *buf, int len);
43 /**
44 * qemu_semihosting_log_out:
45 * @s: pointer to string
46 * @len: length of string
48 * Send a string to the debug output. Unlike console_out these strings
49 * can't be sent to a remote gdb instance as they don't exist in guest
50 * memory.
52 * Returns: number of bytes written
54 int qemu_semihosting_log_out(const char *s, int len);
57 * qemu_semihosting_console_block_until_ready:
58 * @cs: CPUState
60 * If no data is available we suspend the CPU and will re-execute the
61 * instruction when data is available.
63 void qemu_semihosting_console_block_until_ready(CPUState *cs);
65 /**
66 * qemu_semihosting_console_ready:
68 * Return true if characters are available for read; does not block.
70 bool qemu_semihosting_console_ready(void);
72 #endif /* SEMIHOST_CONSOLE_H */