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