]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPkg/Filesystem/SemihostFs/Arm/SemihostFs.h
ArmPkg/SemihostFs: Implement SetInfo() and handle seeking past the end of a file
[mirror_edk2.git] / ArmPkg / Filesystem / SemihostFs / Arm / SemihostFs.h
1 /** @file
2 Support a Semi Host file system over a debuggers JTAG
3
4 Copyright (c) 2008 - 2009, Apple Inc. 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 __SEMIHOST_FS_H__
17 #define __SEMIHOST_FS_H__
18
19 EFI_STATUS
20 VolumeOpen (
21 IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This,
22 OUT EFI_FILE **Root
23 );
24
25 /**
26 Open a file on the host system by means of the semihosting interface.
27
28 @param[in] This A pointer to the EFI_FILE_PROTOCOL instance that is
29 the file handle to source location.
30 @param[out] NewHandle A pointer to the location to return the opened
31 handle for the new file.
32 @param[in] FileName The Null-terminated string of the name of the file
33 to be opened.
34 @param[in] OpenMode The mode to open the file : Read or Read/Write or
35 Read/Write/Create
36 @param[in] Attributes Only valid for EFI_FILE_MODE_CREATE, in which case these
37 are the attribute bits for the newly created file. The
38 mnemonics of the attribute bits are : EFI_FILE_READ_ONLY,
39 EFI_FILE_HIDDEN, EFI_FILE_SYSTEM, EFI_FILE_RESERVED,
40 EFI_FILE_DIRECTORY and EFI_FILE_ARCHIVE.
41
42 @retval EFI_SUCCESS The file was open.
43 @retval EFI_NOT_FOUND The specified file could not be found.
44 @retval EFI_DEVICE_ERROR The last issued semi-hosting operation failed.
45 @retval EFI_WRITE_PROTECTED Attempt to create a directory. This is not possible
46 with the semi-hosting interface.
47 @retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the file.
48 @retval EFI_INVALID_PARAMETER At least one of the parameters is invalid.
49
50 **/
51 EFI_STATUS
52 FileOpen (
53 IN EFI_FILE *This,
54 OUT EFI_FILE **NewHandle,
55 IN CHAR16 *FileName,
56 IN UINT64 OpenMode,
57 IN UINT64 Attributes
58 );
59
60 /**
61 Close a specified file handle.
62
63 @param[in] This A pointer to the EFI_FILE_PROTOCOL instance that is the file
64 handle to close.
65
66 @retval EFI_SUCCESS The file was closed.
67 @retval EFI_INVALID_PARAMETER The parameter "This" is NULL.
68
69 **/
70 EFI_STATUS
71 FileClose (
72 IN EFI_FILE *This
73 );
74
75 /**
76 Close and delete a file.
77
78 @param[in] This A pointer to the EFI_FILE_PROTOCOL instance that is the file
79 handle to delete.
80
81 @retval EFI_SUCCESS The file was closed and deleted.
82 @retval EFI_WARN_DELETE_FAILURE The handle was closed, but the file was not deleted.
83 @retval EFI_INVALID_PARAMETER The parameter "This" is NULL.
84
85 **/
86 EFI_STATUS
87 FileDelete (
88 IN EFI_FILE *This
89 );
90
91 /**
92 Read data from an open file.
93
94 @param[in] This A pointer to the EFI_FILE_PROTOCOL instance that
95 is the file handle to read data from.
96 @param[in out] BufferSize On input, the size of the Buffer. On output, the
97 amount of data returned in Buffer. In both cases,
98 the size is measured in bytes.
99 @param[out] Buffer The buffer into which the data is read.
100
101 @retval EFI_SUCCESS The data was read.
102 @retval EFI_DEVICE_ERROR On entry, the current file position is
103 beyond the end of the file, or the semi-hosting
104 interface reported an error while performing the
105 read operation.
106 @retval EFI_INVALID_PARAMETER The parameter "This" or the parameter "Buffer"
107 is NULL.
108 **/
109 EFI_STATUS
110 FileRead (
111 IN EFI_FILE *This,
112 IN OUT UINTN *BufferSize,
113 OUT VOID *Buffer
114 );
115
116 /**
117 Write data to an open file.
118
119 @param[in] This A pointer to the EFI_FILE_PROTOCOL instance that
120 is the file handle to write data to.
121 @param[in out] BufferSize On input, the size of the Buffer. On output, the
122 size of the data actually written. In both cases,
123 the size is measured in bytes.
124 @param[in] Buffer The buffer of data to write.
125
126 @retval EFI_SUCCESS The data was written.
127 @retval EFI_ACCESS_DENIED Attempt to write into a read only file or
128 in a file opened in read only mode.
129 @retval EFI_DEVICE_ERROR The last issued semi-hosting operation failed.
130 @retval EFI_INVALID_PARAMETER The parameter "This" or the parameter "Buffer"
131 is NULL.
132
133 **/
134 EFI_STATUS
135 FileWrite (
136 IN EFI_FILE *This,
137 IN OUT UINTN *BufferSize,
138 IN VOID *Buffer
139 );
140
141 /**
142 Return a file's current position.
143
144 @param[in] This A pointer to the EFI_FILE_PROTOCOL instance that is
145 the file handle to get the current position on.
146 @param[out] Position The address to return the file's current position value.
147
148 @retval EFI_SUCCESS The position was returned.
149 @retval EFI_INVALID_PARAMETER Position is a NULL pointer.
150
151 **/
152 EFI_STATUS
153 FileGetPosition (
154 IN EFI_FILE *File,
155 OUT UINT64 *Position
156 );
157
158 /**
159 Set a file's current position.
160
161 @param[in] This A pointer to the EFI_FILE_PROTOCOL instance that is
162 the file handle to set the requested position on.
163 @param[in] Position The byte position from the start of the file to set.
164
165 @retval EFI_SUCCESS The position was set.
166 @retval EFI_DEVICE_ERROR The semi-hosting positionning operation failed.
167 @retval EFI_UNSUPPORTED The seek request for nonzero is not valid on open
168 directories.
169
170 **/
171 EFI_STATUS
172 FileSetPosition (
173 IN EFI_FILE *File,
174 IN UINT64 Position
175 );
176
177 /**
178 Return information about a file or a file system.
179
180 @param[in] This A pointer to the EFI_FILE_PROTOCOL instance that
181 is the file handle the requested information is for.
182 @param[in] InformationType The type identifier for the information being requested :
183 EFI_FILE_INFO_ID or EFI_FILE_SYSTEM_INFO_ID or
184 EFI_FILE_SYSTEM_VOLUME_LABEL_ID
185 @param[in out] BufferSize The size, in bytes, of Buffer.
186 @param[out] Buffer A pointer to the data buffer to return. The type of the
187 data inside the buffer is indicated by InformationType.
188
189 @retval EFI_SUCCESS The information was returned.
190 @retval EFI_UNSUPPORTED The InformationType is not known.
191 @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small to return the information.
192 BufferSize has been updated with the size needed to
193 complete the request.
194 @retval EFI_INVALID_PARAMETER The parameter "This" or the parameter "Buffer"
195 is NULL.
196
197 **/
198 EFI_STATUS
199 FileGetInfo (
200 IN EFI_FILE *This,
201 IN EFI_GUID *InformationType,
202 IN OUT UINTN *BufferSize,
203 OUT VOID *Buffer
204 );
205
206 /**
207 Set information about a file or a file system.
208
209 @param[in] This A pointer to the EFI_FILE_PROTOCOL instance that
210 is the file handle the information is for.
211 @param[in] InformationType The type identifier for the information being set :
212 EFI_FILE_INFO_ID or EFI_FILE_SYSTEM_INFO_ID or
213 EFI_FILE_SYSTEM_VOLUME_LABEL_ID
214 @param[in] BufferSize The size, in bytes, of Buffer.
215 @param[in] Buffer A pointer to the data buffer to write. The type of the
216 data inside the buffer is indicated by InformationType.
217
218 @retval EFI_SUCCESS The information was set.
219 @retval EFI_UNSUPPORTED The InformationType is not known.
220 @retval EFI_DEVICE_ERROR The last issued semi-hosting operation failed.
221 @retval EFI_ACCESS_DENIED An attempt is being made to change the
222 EFI_FILE_DIRECTORY Attribute.
223 @retval EFI_ACCESS_DENIED InformationType is EFI_FILE_INFO_ID and
224 the file is a read-only file or has been
225 opened in read-only mode and an attempt is
226 being made to modify a field other than
227 Attribute.
228 @retval EFI_ACCESS_DENIED An attempt is made to change the name of a file
229 to a file that is already present.
230 @retval EFI_WRITE_PROTECTED An attempt is being made to modify a
231 read-only attribute.
232 @retval EFI_BAD_BUFFER_SIZE The size of the buffer is lower than that indicated by
233 the data inside the buffer.
234 @retval EFI_OUT_OF_RESOURCES An allocation needed to process the request failed.
235 @retval EFI_INVALID_PARAMETER At least one of the parameters is invalid.
236
237 **/
238 EFI_STATUS
239 FileSetInfo (
240 IN EFI_FILE *This,
241 IN EFI_GUID *InformationType,
242 IN UINTN BufferSize,
243 IN VOID *Buffer
244 );
245
246 EFI_STATUS
247 FileFlush (
248 IN EFI_FILE *File
249 );
250
251 #endif // __SEMIHOST_FS_H__
252