xref: /qemu/include/semihosting/console.h (revision 57792106562417ba03a1ac0f2a5afc3eb63c5d9e)
1a331c6d7SAlex Bennée /*
2a331c6d7SAlex Bennée  * Semihosting Console
3a331c6d7SAlex Bennée  *
4a331c6d7SAlex Bennée  * Copyright (c) 2019 Linaro Ltd
5a331c6d7SAlex Bennée  *
6a331c6d7SAlex Bennée  * SPDX-License-Identifier: GPL-2.0-or-later
7a331c6d7SAlex Bennée  */
8a331c6d7SAlex Bennée 
937677d7dSMarkus Armbruster #ifndef SEMIHOST_CONSOLE_H
1037677d7dSMarkus Armbruster #define SEMIHOST_CONSOLE_H
11a331c6d7SAlex Bennée 
12a331c6d7SAlex Bennée /**
13e7fb6f32SRichard Henderson  * qemu_semihosting_console_read:
143367d452SRichard Henderson  * @cs: CPUState
15e7fb6f32SRichard Henderson  * @buf: host buffer
16e7fb6f32SRichard Henderson  * @len: buffer size
178de702cbSKeith Packard  *
18e7fb6f32SRichard Henderson  * Receive at least one character from debug console.  As this call may
19e7fb6f32SRichard Henderson  * block if no data is available we suspend the CPU and will re-execute the
20675f702fSRichard Henderson  * instruction when data is there. Therefore two conditions must be met:
21675f702fSRichard Henderson  *
228de702cbSKeith Packard  *   - CPUState is synchronized before calling this function
238de702cbSKeith Packard  *   - pc is only updated once the character is successfully returned
248de702cbSKeith Packard  *
25e7fb6f32SRichard Henderson  * Returns: number of characters read, OR cpu_loop_exit!
268de702cbSKeith Packard  */
27e7fb6f32SRichard Henderson int qemu_semihosting_console_read(CPUState *cs, void *buf, int len);
288de702cbSKeith Packard 
298de702cbSKeith Packard /**
30cd66f20fSRichard Henderson  * qemu_semihosting_console_write:
31cd66f20fSRichard Henderson  * @buf: host buffer
32cd66f20fSRichard Henderson  * @len: buffer size
33cd66f20fSRichard Henderson  *
34cd66f20fSRichard Henderson  * Write len bytes from buf to the debug console.
35cd66f20fSRichard Henderson  *
36cd66f20fSRichard Henderson  * Returns: number of bytes written -- this should only ever be short
37cd66f20fSRichard Henderson  * on some sort of i/o error.
38cd66f20fSRichard Henderson  */
39cd66f20fSRichard Henderson int qemu_semihosting_console_write(void *buf, int len);
40cd66f20fSRichard Henderson 
41*1b9177f7SRichard Henderson /*
42*1b9177f7SRichard Henderson  * qemu_semihosting_console_block_until_ready:
43*1b9177f7SRichard Henderson  * @cs: CPUState
44*1b9177f7SRichard Henderson  *
45*1b9177f7SRichard Henderson  * If no data is available we suspend the CPU and will re-execute the
46*1b9177f7SRichard Henderson  * instruction when data is available.
47*1b9177f7SRichard Henderson  */
48*1b9177f7SRichard Henderson void qemu_semihosting_console_block_until_ready(CPUState *cs);
49*1b9177f7SRichard Henderson 
50*1b9177f7SRichard Henderson /**
51*1b9177f7SRichard Henderson  * qemu_semihosting_console_ready:
52*1b9177f7SRichard Henderson  *
53*1b9177f7SRichard Henderson  * Return true if characters are available for read; does not block.
54*1b9177f7SRichard Henderson  */
55*1b9177f7SRichard Henderson bool qemu_semihosting_console_ready(void);
56*1b9177f7SRichard Henderson 
5737677d7dSMarkus Armbruster #endif /* SEMIHOST_CONSOLE_H */
58