xref: /qemu/include/semihosting/console.h (revision 70ce076fa6dff60585c229a4b641b13e64bf03cf)
1 /*
2  * Semihosting Console
3  *
4  * Copyright (c) 2019 Linaro Ltd
5  *
6  * SPDX-License-Identifier: GPL-2.0-or-later
7  */
8 
9 #ifndef SEMIHOST_CONSOLE_H
10 #define SEMIHOST_CONSOLE_H
11 
12 /**
13  * qemu_semihosting_console_read:
14  * @cs: CPUState
15  * @buf: host buffer
16  * @len: buffer size
17  *
18  * Receive at least one character from debug console.  As this call may
19  * block if no data is available we suspend the CPU and will re-execute the
20  * instruction when data is there. Therefore two conditions must be met:
21  *
22  *   - CPUState is synchronized before calling this function
23  *   - pc is only updated once the character is successfully returned
24  *
25  * Returns: number of characters read, OR cpu_loop_exit!
26  */
27 int qemu_semihosting_console_read(CPUState *cs, void *buf, int len);
28 
29 /**
30  * qemu_semihosting_console_write:
31  * @buf: host buffer
32  * @len: buffer size
33  *
34  * Write len bytes from buf to the debug console.
35  *
36  * Returns: number of bytes written -- this should only ever be short
37  * on some sort of i/o error.
38  */
39 int qemu_semihosting_console_write(void *buf, int len);
40 
41 /*
42  * qemu_semihosting_console_block_until_ready:
43  * @cs: CPUState
44  *
45  * If no data is available we suspend the CPU and will re-execute the
46  * instruction when data is available.
47  */
48 void qemu_semihosting_console_block_until_ready(CPUState *cs);
49 
50 /**
51  * qemu_semihosting_console_ready:
52  *
53  * Return true if characters are available for read; does not block.
54  */
55 bool qemu_semihosting_console_ready(void);
56 
57 #endif /* SEMIHOST_CONSOLE_H */
58