xref: /openbmc/qemu/include/semihosting/console.h (revision d0bf492f)
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 #include "cpu.h"
13 
14 /**
15  * qemu_semihosting_console_read:
16  * @cs: CPUState
17  * @buf: host buffer
18  * @len: buffer size
19  *
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:
23  *
24  *   - CPUState is synchronized before calling this function
25  *   - pc is only updated once the character is successfully returned
26  *
27  * Returns: number of characters read, OR cpu_loop_exit!
28  */
29 int qemu_semihosting_console_read(CPUState *cs, void *buf, int len);
30 
31 /**
32  * qemu_semihosting_console_write:
33  * @buf: host buffer
34  * @len: buffer size
35  *
36  * Write len bytes from buf to the debug console.
37  *
38  * Returns: number of bytes written -- this should only ever be short
39  * on some sort of i/o error.
40  */
41 int qemu_semihosting_console_write(void *buf, int len);
42 
43 /*
44  * qemu_semihosting_console_block_until_ready:
45  * @cs: CPUState
46  *
47  * If no data is available we suspend the CPU and will re-execute the
48  * instruction when data is available.
49  */
50 void qemu_semihosting_console_block_until_ready(CPUState *cs);
51 
52 /**
53  * qemu_semihosting_console_ready:
54  *
55  * Return true if characters are available for read; does not block.
56  */
57 bool qemu_semihosting_console_ready(void);
58 
59 #endif /* SEMIHOST_CONSOLE_H */
60