TianoCore EDK2 master
Loading...
Searching...
No Matches
VirtioFsDxe.h
Go to the documentation of this file.
1
10#ifndef VIRTIO_FS_DXE_H_
11#define VIRTIO_FS_DXE_H_
12
13#include <Base.h> // SIGNATURE_64()
14#include <Guid/FileInfo.h> // EFI_FILE_INFO
15#include <IndustryStandard/VirtioFs.h> // VIRTIO_FS_TAG_BYTES
16#include <Library/DebugLib.h> // CR()
17#include <Protocol/SimpleFileSystem.h> // EFI_SIMPLE_FILE_SYSTEM_PROTOCOL
18#include <Protocol/VirtioDevice.h> // VIRTIO_DEVICE_PROTOCOL
19#include <Uefi/UefiBaseType.h> // EFI_EVENT
20
21#define VIRTIO_FS_SIG SIGNATURE_64 ('V', 'I', 'R', 'T', 'I', 'O', 'F', 'S')
22
23#define VIRTIO_FS_FILE_SIG \
24 SIGNATURE_64 ('V', 'I', 'O', 'F', 'S', 'F', 'I', 'L')
25
26//
27// The following limit applies to two kinds of pathnames.
28//
29// - The length of a POSIX-style, canonical pathname *at rest* never exceeds
30// VIRTIO_FS_MAX_PATHNAME_LENGTH. (Length is defined as the number of CHAR8
31// elements in the canonical pathname, excluding the terminating '\0'.) This
32// is an invariant that is ensured for canonical pathnames created, and that
33// is assumed about canonical pathname inputs (which all originate
34// internally).
35//
36// - If the length of a UEFI-style pathname *argument*, originating directly or
37// indirectly from the EFI_FILE_PROTOCOL caller, exceeds
38// VIRTIO_FS_MAX_PATHNAME_LENGTH, then the argument is rejected. (Length is
39// defined as the number of CHAR16 elements in the UEFI-style pathname,
40// excluding the terminating L'\0'.) This is a restriction that's checked on
41// external UEFI-style pathname inputs.
42//
43// The limit is not expected to be a practical limitation; it's only supposed
44// to prevent attempts at overflowing size calculations. For both kinds of
45// pathnames, separate limits could be used; a common limit is used purely for
46// simplicity.
47//
48#define VIRTIO_FS_MAX_PATHNAME_LENGTH ((UINTN)65535)
49
50//
51// Maximum value for VIRTIO_FS_FILE.NumFileInfo.
52//
53#define VIRTIO_FS_FILE_MAX_FILE_INFO 256
54
55//
56// Filesystem label encoded in UCS-2, transformed from the UTF-8 representation
57// in "VIRTIO_FS_CONFIG.Tag", and NUL-terminated. Only the printable ASCII code
58// points (U+0020 through U+007E) are supported.
59//
60typedef CHAR16 VIRTIO_FS_LABEL[VIRTIO_FS_TAG_BYTES + 1];
61
62//
63// Main context structure, expressing an EFI_SIMPLE_FILE_SYSTEM_PROTOCOL
64// interface on top of the Virtio Filesystem device.
65//
66typedef struct {
67 //
68 // Parts of this structure are initialized / torn down in various functions
69 // at various call depths. The table to the right should make it easier to
70 // track them.
71 //
72 // field init function init depth
73 // ----------- ------------------ ----------
74 UINT64 Signature; // DriverBindingStart 0
75 VIRTIO_DEVICE_PROTOCOL *Virtio; // DriverBindingStart 0
76 VIRTIO_FS_LABEL Label; // VirtioFsInit 1
77 UINT16 QueueSize; // VirtioFsInit 1
78 VRING Ring; // VirtioRingInit 2
79 VOID *RingMap; // VirtioRingMap 2
80 UINT64 RequestId; // FuseInitSession 1
81 UINT32 MaxWrite; // FuseInitSession 1
82 EFI_EVENT ExitBoot; // DriverBindingStart 0
83 LIST_ENTRY OpenFiles; // DriverBindingStart 0
84 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL SimpleFs; // DriverBindingStart 0
85} VIRTIO_FS;
86
87#define VIRTIO_FS_FROM_SIMPLE_FS(SimpleFsReference) \
88 CR (SimpleFsReference, VIRTIO_FS, SimpleFs, VIRTIO_FS_SIG);
89
90//
91// Structure for describing a contiguous buffer, potentially mapped for Virtio
92// transfer.
93//
94typedef struct {
95 //
96 // The following fields originate from the owner of the buffer.
97 //
98 VOID *Buffer;
99 UINTN Size;
100 //
101 // All of the fields below, until the end of the structure, are
102 // zero-initialized when the structure is initially validated.
103 //
104 // Mapped, MappedAddress and Mapping are updated when the buffer is mapped
105 // for VirtioOperationBusMasterRead or VirtioOperationBusMasterWrite. They
106 // are again updated when the buffer is unmapped.
107 //
108 BOOLEAN Mapped;
109 EFI_PHYSICAL_ADDRESS MappedAddress;
110 VOID *Mapping;
111 //
112 // Transferred is updated after VirtioFlush() returns successfully:
113 // - for VirtioOperationBusMasterRead, Transferred is set to Size;
114 // - for VirtioOperationBusMasterWrite, Transferred is calculated from the
115 // UsedLen output parameter of VirtioFlush().
116 //
117 UINTN Transferred;
119
120//
121// Structure for describing a list of IO Vectors.
122//
123typedef struct {
124 //
125 // The following fields originate from the owner of the buffers.
126 //
127 VIRTIO_FS_IO_VECTOR *IoVec;
128 UINTN NumVec;
129 //
130 // TotalSize is calculated when the scatter-gather list is initially
131 // validated.
132 //
133 UINT32 TotalSize;
135
136//
137// Private context structure that exposes EFI_FILE_PROTOCOL on top of an open
138// FUSE file reference.
139//
140typedef struct {
141 UINT64 Signature;
142 EFI_FILE_PROTOCOL SimpleFile;
143 BOOLEAN IsDirectory;
144 BOOLEAN IsOpenForWriting;
145 VIRTIO_FS *OwnerFs;
146 LIST_ENTRY OpenFilesEntry;
147 CHAR8 *CanonicalPathname;
148 UINT64 FilePosition;
149 //
150 // In the FUSE wire protocol, every request except FUSE_INIT refers to a
151 // file, namely by the "VIRTIO_FS_FUSE_REQUEST.NodeId" field; that is, by the
152 // inode number of the file. However, some of the FUSE requests that we need
153 // for some of the EFI_FILE_PROTOCOL member functions require an open file
154 // handle *in addition* to the inode number. For simplicity, whenever a
155 // VIRTIO_FS_FILE object is created, primarily defined by its NodeId field,
156 // we also *open* the referenced file at once, and save the returned file
157 // handle in the FuseHandle field. This way, when an EFI_FILE_PROTOCOL member
158 // function must send a FUSE request that needs the file handle *in addition*
159 // to the inode number, FuseHandle will be at our disposal at once.
160 //
161 UINT64 NodeId;
162 UINT64 FuseHandle;
163 //
164 // EFI_FILE_INFO objects cached for an in-flight directory read.
165 //
166 // For reading through a directory stream with tolerable performance, we have
167 // to call FUSE_READDIRPLUS each time with such a buffer that can deliver a
168 // good number of variable size records (VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE
169 // elements). Every time we do that, we turn the whole bunch into an array of
170 // EFI_FILE_INFOs immediately. EFI_FILE_PROTOCOL.Read() invocations (on
171 // directories) will be served from this EFI_FILE_INFO cache.
172 //
173 UINT8 *FileInfoArray;
174 UINTN SingleFileInfoSize;
175 UINTN NumFileInfo;
176 UINTN NextFileInfo;
178
179#define VIRTIO_FS_FILE_FROM_SIMPLE_FILE(SimpleFileReference) \
180 CR (SimpleFileReference, VIRTIO_FS_FILE, SimpleFile, VIRTIO_FS_FILE_SIG);
181
182#define VIRTIO_FS_FILE_FROM_OPEN_FILES_ENTRY(OpenFilesEntryReference) \
183 CR (OpenFilesEntryReference, VIRTIO_FS_FILE, OpenFilesEntry, \
184 VIRTIO_FS_FILE_SIG);
185
186//
187// Initialization and helper routines for the Virtio Filesystem device.
188//
189
192 IN OUT VIRTIO_FS *VirtioFs
193 );
194
195VOID
197 IN OUT VIRTIO_FS *VirtioFs
198 );
199
200VOID
201EFIAPI
203 IN EFI_EVENT ExitBootEvent,
204 IN VOID *VirtioFsAsVoid
205 );
206
209 IN VIRTIO_FS *VirtioFs,
210 IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *RequestSgList,
211 IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList OPTIONAL
212 );
213
216 IN OUT VIRTIO_FS *VirtioFs,
217 IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *RequestSgList,
218 IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList OPTIONAL
219 );
220
223 IN OUT VIRTIO_FS *VirtioFs,
225 IN UINT32 RequestSize,
226 IN VIRTIO_FS_FUSE_OPCODE Opcode,
227 IN UINT64 NodeId
228 );
229
232 IN VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList,
233 IN UINT64 RequestId,
234 OUT UINTN *TailBufferFill
235 );
236
239 IN INT32 Errno
240 );
241
244 IN CHAR8 *LhsPath8,
245 IN CHAR16 *RhsPath16,
246 OUT CHAR8 **ResultPath8,
247 OUT BOOLEAN *RootEscape
248 );
249
252 IN OUT VIRTIO_FS *VirtioFs,
253 IN OUT CHAR8 *Path,
254 OUT UINT64 *DirNodeId,
255 OUT CHAR8 **LastComponent
256 );
257
260 IN CHAR8 *Path,
261 OUT CHAR16 *Basename OPTIONAL,
262 IN OUT UINTN *BasenameSize
263 );
264
267 IN CHAR8 *LhsPath8,
268 IN CHAR16 *RhsPath16,
269 OUT CHAR8 **ResultPath8,
270 OUT BOOLEAN *RootEscape
271 );
272
277 );
278
283 );
284
285VOID
287 IN EFI_FILE_INFO *Info,
288 IN EFI_FILE_INFO *NewInfo,
289 OUT BOOLEAN *Update,
290 OUT UINT64 *Size
291 );
292
295 IN EFI_FILE_INFO *Info,
296 IN EFI_FILE_INFO *NewInfo,
297 OUT BOOLEAN *UpdateAtime,
298 OUT BOOLEAN *UpdateMtime,
299 OUT UINT64 *Atime,
300 OUT UINT64 *Mtime
301 );
302
305 IN EFI_FILE_INFO *Info,
306 IN EFI_FILE_INFO *NewInfo,
307 OUT BOOLEAN *Update,
308 OUT UINT32 *Mode
309 );
310
311//
312// Wrapper functions for FUSE commands (primitives).
313//
314
317 IN OUT VIRTIO_FS *VirtioFs,
318 IN UINT64 DirNodeId,
319 IN CHAR8 *Name,
320 OUT UINT64 *NodeId,
322 );
323
326 IN OUT VIRTIO_FS *VirtioFs,
327 IN UINT64 NodeId
328 );
329
332 IN OUT VIRTIO_FS *VirtioFs,
333 IN UINT64 NodeId,
335 );
336
339 IN OUT VIRTIO_FS *VirtioFs,
340 IN UINT64 NodeId,
341 IN UINT64 *Size OPTIONAL,
342 IN UINT64 *Atime OPTIONAL,
343 IN UINT64 *Mtime OPTIONAL,
344 IN UINT32 *Mode OPTIONAL
345 );
346
349 IN OUT VIRTIO_FS *VirtioFs,
350 IN UINT64 ParentNodeId,
351 IN CHAR8 *Name,
352 OUT UINT64 *NodeId
353 );
354
357 IN OUT VIRTIO_FS *VirtioFs,
358 IN UINT64 ParentNodeId,
359 IN CHAR8 *Name,
360 IN BOOLEAN IsDir
361 );
362
365 IN OUT VIRTIO_FS *VirtioFs,
366 IN UINT64 NodeId,
367 IN BOOLEAN ReadWrite,
368 OUT UINT64 *FuseHandle
369 );
370
373 IN OUT VIRTIO_FS *VirtioFs,
374 IN UINT64 NodeId,
375 IN UINT64 FuseHandle,
376 IN BOOLEAN IsDir,
377 IN UINT64 Offset,
378 IN OUT UINT32 *Size,
379 OUT VOID *Data
380 );
381
384 IN OUT VIRTIO_FS *VirtioFs,
385 IN UINT64 NodeId,
386 IN UINT64 FuseHandle,
387 IN UINT64 Offset,
388 IN OUT UINT32 *Size,
389 IN VOID *Data
390 );
391
394 IN OUT VIRTIO_FS *VirtioFs,
395 IN UINT64 NodeId,
397 );
398
401 IN OUT VIRTIO_FS *VirtioFs,
402 IN UINT64 NodeId,
403 IN UINT64 FuseHandle,
404 IN BOOLEAN IsDir
405 );
406
409 IN OUT VIRTIO_FS *VirtioFs,
410 IN UINT64 NodeId,
411 IN UINT64 FuseHandle,
412 IN BOOLEAN IsDir
413 );
414
417 IN OUT VIRTIO_FS *VirtioFs,
418 IN UINT64 NodeId,
419 IN UINT64 FuseHandle
420 );
421
424 IN OUT VIRTIO_FS *VirtioFs
425 );
426
429 IN OUT VIRTIO_FS *VirtioFs,
430 IN UINT64 NodeId,
431 OUT UINT64 *FuseHandle
432 );
433
436 IN OUT VIRTIO_FS *VirtioFs,
437 IN UINT64 ParentNodeId,
438 IN CHAR8 *Name,
439 OUT UINT64 *NodeId,
440 OUT UINT64 *FuseHandle
441 );
442
445 IN OUT VIRTIO_FS *VirtioFs,
446 IN UINT64 OldParentNodeId,
447 IN CHAR8 *OldName,
448 IN UINT64 NewParentNodeId,
449 IN CHAR8 *NewName
450 );
451
452//
453// EFI_SIMPLE_FILE_SYSTEM_PROTOCOL member functions for the Virtio Filesystem
454// driver.
455//
456
458EFIAPI
462 );
463
464//
465// EFI_FILE_PROTOCOL member functions for the Virtio Filesystem driver.
466//
467
469EFIAPI
470VirtioFsSimpleFileClose (
472 );
473
475EFIAPI
476VirtioFsSimpleFileDelete (
478 );
479
481EFIAPI
482VirtioFsSimpleFileFlush (
484 );
485
487EFIAPI
488VirtioFsSimpleFileGetInfo (
489 IN EFI_FILE_PROTOCOL *This,
490 IN EFI_GUID *InformationType,
491 IN OUT UINTN *BufferSize,
492 OUT VOID *Buffer
493 );
494
496EFIAPI
497VirtioFsSimpleFileGetPosition (
498 IN EFI_FILE_PROTOCOL *This,
499 OUT UINT64 *Position
500 );
501
503EFIAPI
504VirtioFsSimpleFileOpen (
505 IN EFI_FILE_PROTOCOL *This,
506 OUT EFI_FILE_PROTOCOL **NewHandle,
507 IN CHAR16 *FileName,
508 IN UINT64 OpenMode,
509 IN UINT64 Attributes
510 );
511
513EFIAPI
514VirtioFsSimpleFileRead (
515 IN EFI_FILE_PROTOCOL *This,
516 IN OUT UINTN *BufferSize,
517 OUT VOID *Buffer
518 );
519
521EFIAPI
522VirtioFsSimpleFileSetInfo (
523 IN EFI_FILE_PROTOCOL *This,
524 IN EFI_GUID *InformationType,
525 IN UINTN BufferSize,
526 IN VOID *Buffer
527 );
528
530EFIAPI
531VirtioFsSimpleFileSetPosition (
532 IN EFI_FILE_PROTOCOL *This,
533 IN UINT64 Position
534 );
535
537EFIAPI
538VirtioFsSimpleFileWrite (
539 IN EFI_FILE_PROTOCOL *This,
540 IN OUT UINTN *BufferSize,
541 IN VOID *Buffer
542 );
543
544#endif // VIRTIO_FS_DXE_H_
UINT64 UINTN
#define IN
Definition: Base.h:279
#define OUT
Definition: Base.h:284
EFI_FILE_INFO * FileInfo(IN EFI_FILE_HANDLE FHand)
UINT64 EFI_PHYSICAL_ADDRESS
Definition: UefiBaseType.h:50
RETURN_STATUS EFI_STATUS
Definition: UefiBaseType.h:29
VOID * EFI_EVENT
Definition: UefiBaseType.h:37
EFI_STATUS VirtioFsFuseOpen(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 NodeId, IN BOOLEAN ReadWrite, OUT UINT64 *FuseHandle)
Definition: FuseOpen.c:40
EFI_STATUS VirtioFsFuseForget(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 NodeId)
Definition: FuseForget.c:36
EFI_STATUS VirtioFsFuseDirentPlusToEfiFileInfo(IN VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE *FuseDirent, IN OUT EFI_FILE_INFO *FileInfo)
Definition: Helpers.c:2219
EFI_STATUS VirtioFsFuseStatFs(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 NodeId, OUT VIRTIO_FS_FUSE_STATFS_RESPONSE *FilesysAttr)
Definition: FuseStatFs.c:38
EFI_STATUS VirtioFsGetFuseModeUpdate(IN EFI_FILE_INFO *Info, IN EFI_FILE_INFO *NewInfo, OUT BOOLEAN *Update, OUT UINT32 *Mode)
Definition: Helpers.c:2459
VOID EFIAPI VirtioFsExitBoot(IN EFI_EVENT ExitBootEvent, IN VOID *VirtioFsAsVoid)
Definition: Helpers.c:312
EFI_STATUS VirtioFsFuseOpenDir(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 NodeId, OUT UINT64 *FuseHandle)
Definition: FuseOpenDir.c:38
VOID VirtioFsGetFuseSizeUpdate(IN EFI_FILE_INFO *Info, IN EFI_FILE_INFO *NewInfo, OUT BOOLEAN *Update, OUT UINT64 *Size)
Definition: Helpers.c:2290
EFI_STATUS VirtioFsFuseReadFileOrDir(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 NodeId, IN UINT64 FuseHandle, IN BOOLEAN IsDir, IN UINT64 Offset, IN OUT UINT32 *Size, OUT VOID *Data)
Definition: FuseRead.c:89
EFI_STATUS VirtioFsGetBasename(IN CHAR8 *Path, OUT CHAR16 *Basename OPTIONAL, IN OUT UINTN *BasenameSize)
Definition: Helpers.c:1823
EFI_STATUS VirtioFsFuseCheckResponse(IN VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList, IN UINT64 RequestId, OUT UINTN *TailBufferFill)
Definition: Helpers.c:873
EFI_STATUS VirtioFsFuseWrite(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 NodeId, IN UINT64 FuseHandle, IN UINT64 Offset, IN OUT UINT32 *Size, IN VOID *Data)
Definition: FuseWrite.c:54
EFI_STATUS VirtioFsFuseInitSession(IN OUT VIRTIO_FS *VirtioFs)
Definition: FuseInit.c:45
EFI_STATUS EFIAPI VirtioFsOpenVolume(IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, OUT EFI_FILE_PROTOCOL **Root)
EFI_STATUS VirtioFsFuseFlush(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 NodeId, IN UINT64 FuseHandle)
Definition: FuseFlush.c:37
VOID VirtioFsUninit(IN OUT VIRTIO_FS *VirtioFs)
Definition: Helpers.c:284
EFI_STATUS VirtioFsLookupMostSpecificParentDir(IN OUT VIRTIO_FS *VirtioFs, IN OUT CHAR8 *Path, OUT UINT64 *DirNodeId, OUT CHAR8 **LastComponent)
Definition: Helpers.c:1701
EFI_STATUS VirtioFsFuseSetAttr(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 NodeId, IN UINT64 *Size OPTIONAL, IN UINT64 *Atime OPTIONAL, IN UINT64 *Mtime OPTIONAL, IN UINT32 *Mode OPTIONAL)
Definition: FuseSetAttr.c:54
EFI_STATUS VirtioFsFuseNewRequest(IN OUT VIRTIO_FS *VirtioFs, OUT VIRTIO_FS_FUSE_REQUEST *Request, IN UINT32 RequestSize, IN VIRTIO_FS_FUSE_OPCODE Opcode, IN UINT64 NodeId)
Definition: Helpers.c:790
EFI_STATUS VirtioFsInit(IN OUT VIRTIO_FS *VirtioFs)
Definition: Helpers.c:80
EFI_STATUS VirtioFsAppendPath(IN CHAR8 *LhsPath8, IN CHAR16 *RhsPath16, OUT CHAR8 **ResultPath8, OUT BOOLEAN *RootEscape)
Definition: Helpers.c:1404
EFI_STATUS VirtioFsSgListsSubmit(IN OUT VIRTIO_FS *VirtioFs, IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *RequestSgList, IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList OPTIONAL)
Definition: Helpers.c:538
EFI_STATUS VirtioFsFuseReleaseFileOrDir(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 NodeId, IN UINT64 FuseHandle, IN BOOLEAN IsDir)
Definition: FuseRelease.c:41
EFI_STATUS VirtioFsGetFuseTimeUpdates(IN EFI_FILE_INFO *Info, IN EFI_FILE_INFO *NewInfo, OUT BOOLEAN *UpdateAtime, OUT BOOLEAN *UpdateMtime, OUT UINT64 *Atime, OUT UINT64 *Mtime)
Definition: Helpers.c:2355
EFI_STATUS VirtioFsFuseAttrToEfiFileInfo(IN VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE *FuseAttr, OUT EFI_FILE_INFO *FileInfo)
Definition: Helpers.c:2090
EFI_STATUS VirtioFsFuseRename(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 OldParentNodeId, IN CHAR8 *OldName, IN UINT64 NewParentNodeId, IN CHAR8 *NewName)
Definition: FuseRename.c:51
EFI_STATUS VirtioFsErrnoToEfiStatus(IN INT32 Errno)
Definition: Helpers.c:991
EFI_STATUS VirtioFsFuseGetAttr(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 NodeId, OUT VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE *FuseAttr)
Definition: FuseGetAttr.c:39
EFI_STATUS VirtioFsSgListsValidate(IN VIRTIO_FS *VirtioFs, IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *RequestSgList, IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList OPTIONAL)
Definition: Helpers.c:398
EFI_STATUS VirtioFsFuseRemoveFileOrDir(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 ParentNodeId, IN CHAR8 *Name, IN BOOLEAN IsDir)
Definition: FuseUnlink.c:43
EFI_STATUS VirtioFsComposeRenameDestination(IN CHAR8 *LhsPath8, IN CHAR16 *RhsPath16, OUT CHAR8 **ResultPath8, OUT BOOLEAN *RootEscape)
Definition: Helpers.c:1918
EFI_STATUS VirtioFsFuseFsyncFileOrDir(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 NodeId, IN UINT64 FuseHandle, IN BOOLEAN IsDir)
Definition: FuseFsync.c:42
EFI_STATUS VirtioFsFuseMkDir(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 ParentNodeId, IN CHAR8 *Name, OUT UINT64 *NodeId)
Definition: FuseMkDir.c:43
EFI_STATUS VirtioFsFuseLookup(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 DirNodeId, IN CHAR8 *Name, OUT UINT64 *NodeId, OUT VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE *FuseAttr)
Definition: FuseLookup.c:54
EFI_STATUS VirtioFsFuseOpenOrCreate(IN OUT VIRTIO_FS *VirtioFs, IN UINT64 ParentNodeId, IN CHAR8 *Name, OUT UINT64 *NodeId, OUT UINT64 *FuseHandle)
Definition: Base.h:213