The CPUState structure is declared in "hw/core/cpu.h",
the EXCP_HALTED definition in "exec/cpu-common.h".
Both headers are indirectly include by "cpu.h". In
order to remove "cpu.h" from "semihosting/console.h",
explicitly include them in console.c, otherwise we'd
get:
  ../semihosting/console.c:88:11: error: incomplete definition of type 'struct CPUState'
     88 |         cs->exception_index = EXCP_HALTED;
        |         ~~^
  ../semihosting/console.c:88:31: error: use of undeclared identifier 'EXCP_HALTED'
     88 |         cs->exception_index = EXCP_HALTED;
        |                               ^
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20250103171037.11265-5-philmd@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20250116160306.1709518-7-alex.bennee@linaro.org>
		
	
			
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Semihosting Console
 | 
						|
 *
 | 
						|
 * Copyright (c) 2019 Linaro Ltd
 | 
						|
 *
 | 
						|
 * SPDX-License-Identifier: GPL-2.0-or-later
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef SEMIHOST_CONSOLE_H
 | 
						|
#define SEMIHOST_CONSOLE_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 */
 |