1 /** @file
2 
3   Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
4   Portions copyright (c) 2011, 2012, ARM Ltd. All rights reserved.<BR>
5 
6   This program and the accompanying materials
7   are licensed and made available under the terms and conditions of the BSD License
8   which accompanies this distribution.  The full text of the license may be found at
9   http://opensource.org/licenses/bsd-license.php
10 
11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 
14 **/
15 
16 #ifndef __SEMIHOSTING_H__
17 #define __SEMIHOSTING_H__
18 
19 /*
20  *
21  *  Please refer to ARM RVDS 3.0 Compiler and Libraries Guide for more information
22  *  about the semihosting interface.
23  *
24  */
25 
26 #define SEMIHOST_FILE_MODE_READ     (0 << 2)
27 #define SEMIHOST_FILE_MODE_WRITE    (1 << 2)
28 #define SEMIHOST_FILE_MODE_APPEND   (2 << 2)
29 #define SEMIHOST_FILE_MODE_UPDATE   (1 << 1)
30 #define SEMIHOST_FILE_MODE_BINARY   (1 << 0)
31 #define SEMIHOST_FILE_MODE_ASCII    (0 << 0)
32 
33 BOOLEAN
34 SemihostConnectionSupported (
35   VOID
36   );
37 
38 RETURN_STATUS
39 SemihostFileOpen (
40   IN  CHAR8  *FileName,
41   IN  UINT32 Mode,
42   OUT UINTN  *FileHandle
43   );
44 
45 RETURN_STATUS
46 SemihostFileSeek (
47   IN UINTN  FileHandle,
48   IN UINTN  Offset
49   );
50 
51 RETURN_STATUS
52 SemihostFileRead (
53   IN     UINTN  FileHandle,
54   IN OUT UINTN  *Length,
55   OUT    VOID   *Buffer
56   );
57 
58 RETURN_STATUS
59 SemihostFileWrite (
60   IN     UINTN  FileHandle,
61   IN OUT UINTN  *Length,
62   IN     VOID   *Buffer
63   );
64 
65 RETURN_STATUS
66 SemihostFileClose (
67   IN UINTN  FileHandle
68   );
69 
70 RETURN_STATUS
71 SemihostFileLength (
72   IN  UINTN  FileHandle,
73   OUT UINTN  *Length
74   );
75 
76 /**
77   Get a temporary name for a file from the host running the debug agent.
78 
79   @param[out]  Buffer      Pointer to the buffer where the temporary name has to
80                            be stored
81   @param[in]   Identifier  File name identifier (integer in the range 0 to 255)
82   @param[in]   Length      Length of the buffer to store the temporary name
83 
84   @retval  RETURN_SUCCESS            Temporary name returned
85   @retval  RETURN_INVALID_PARAMETER  Invalid buffer address
86   @retval  RETURN_ABORTED            Temporary name not returned
87 
88 **/
89 RETURN_STATUS
90 SemihostFileTmpName(
91   OUT  VOID   *Buffer,
92   IN   UINT8  Identifier,
93   IN   UINTN  Length
94   );
95 
96 RETURN_STATUS
97 SemihostFileRemove (
98   IN CHAR8 *FileName
99   );
100 
101 /**
102   Rename a specified file.
103 
104   @param[in]  FileName     Name of the file to rename.
105   @param[in]  NewFileName  The new name of the file.
106 
107   @retval  RETURN_SUCCESS            File Renamed
108   @retval  RETURN_INVALID_PARAMETER  Either the current or the new name is not specified
109   @retval  RETURN_ABORTED            Rename failed
110 
111 **/
112 RETURN_STATUS
113 SemihostFileRename(
114   IN  CHAR8  *FileName,
115   IN  CHAR8  *NewFileName
116   );
117 
118 CHAR8
119 SemihostReadCharacter (
120   VOID
121   );
122 
123 VOID
124 SemihostWriteCharacter (
125   IN CHAR8 Character
126   );
127 
128 VOID
129 SemihostWriteString (
130   IN CHAR8 *String
131   );
132 
133 UINT32
134 SemihostSystem (
135   IN CHAR8 *CommandLine
136   );
137 
138 #endif // __SEMIHOSTING_H__
139