xref: /aosp_15_r20/external/arm-trusted-firmware/include/lib/semihosting.h (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park #ifndef SEMIHOSTING_H
8*54fd6939SJiyong Park #define SEMIHOSTING_H
9*54fd6939SJiyong Park 
10*54fd6939SJiyong Park #include <stdint.h>
11*54fd6939SJiyong Park #include <stdio.h> /* For ssize_t */
12*54fd6939SJiyong Park 
13*54fd6939SJiyong Park 
14*54fd6939SJiyong Park #define SEMIHOSTING_SYS_OPEN            0x01
15*54fd6939SJiyong Park #define SEMIHOSTING_SYS_CLOSE           0x02
16*54fd6939SJiyong Park #define SEMIHOSTING_SYS_WRITE0          0x04
17*54fd6939SJiyong Park #define SEMIHOSTING_SYS_WRITEC          0x03
18*54fd6939SJiyong Park #define SEMIHOSTING_SYS_WRITE           0x05
19*54fd6939SJiyong Park #define SEMIHOSTING_SYS_READ            0x06
20*54fd6939SJiyong Park #define SEMIHOSTING_SYS_READC           0x07
21*54fd6939SJiyong Park #define SEMIHOSTING_SYS_SEEK            0x0A
22*54fd6939SJiyong Park #define SEMIHOSTING_SYS_FLEN            0x0C
23*54fd6939SJiyong Park #define SEMIHOSTING_SYS_REMOVE          0x0E
24*54fd6939SJiyong Park #define SEMIHOSTING_SYS_SYSTEM          0x12
25*54fd6939SJiyong Park #define SEMIHOSTING_SYS_ERRNO           0x13
26*54fd6939SJiyong Park #define SEMIHOSTING_SYS_EXIT            0x18
27*54fd6939SJiyong Park 
28*54fd6939SJiyong Park #define FOPEN_MODE_R			0x0
29*54fd6939SJiyong Park #define FOPEN_MODE_RB			0x1
30*54fd6939SJiyong Park #define FOPEN_MODE_RPLUS		0x2
31*54fd6939SJiyong Park #define FOPEN_MODE_RPLUSB		0x3
32*54fd6939SJiyong Park #define FOPEN_MODE_W			0x4
33*54fd6939SJiyong Park #define FOPEN_MODE_WB			0x5
34*54fd6939SJiyong Park #define FOPEN_MODE_WPLUS		0x6
35*54fd6939SJiyong Park #define FOPEN_MODE_WPLUSB		0x7
36*54fd6939SJiyong Park #define FOPEN_MODE_A			0x8
37*54fd6939SJiyong Park #define FOPEN_MODE_AB			0x9
38*54fd6939SJiyong Park #define FOPEN_MODE_APLUS		0xa
39*54fd6939SJiyong Park #define FOPEN_MODE_APLUSB		0xb
40*54fd6939SJiyong Park 
41*54fd6939SJiyong Park long semihosting_connection_supported(void);
42*54fd6939SJiyong Park long semihosting_file_open(const char *file_name, size_t mode);
43*54fd6939SJiyong Park long semihosting_file_seek(long file_handle, ssize_t offset);
44*54fd6939SJiyong Park long semihosting_file_read(long file_handle, size_t *length, uintptr_t buffer);
45*54fd6939SJiyong Park long semihosting_file_write(long file_handle,
46*54fd6939SJiyong Park 			    size_t *length,
47*54fd6939SJiyong Park 			    const uintptr_t buffer);
48*54fd6939SJiyong Park long semihosting_file_close(long file_handle);
49*54fd6939SJiyong Park long semihosting_file_length(long file_handle);
50*54fd6939SJiyong Park long semihosting_system(char *command_line);
51*54fd6939SJiyong Park long semihosting_get_flen(const char *file_name);
52*54fd6939SJiyong Park long semihosting_download_file(const char *file_name,
53*54fd6939SJiyong Park 			       size_t buf_size,
54*54fd6939SJiyong Park 			       uintptr_t buf);
55*54fd6939SJiyong Park void semihosting_write_char(char character);
56*54fd6939SJiyong Park void semihosting_write_string(char *string);
57*54fd6939SJiyong Park char semihosting_read_char(void);
58*54fd6939SJiyong Park void semihosting_exit(uint32_t reason, uint32_t subcode);
59*54fd6939SJiyong Park 
60*54fd6939SJiyong Park #endif /* SEMIHOSTING_H */
61