]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/VirtioFsDxe/SimpleFsOpenVolume.c
OvmfPkg: Apply uncrustify changes
[mirror_edk2.git] / OvmfPkg / VirtioFsDxe / SimpleFsOpenVolume.c
CommitLineData
b55d6622
LE
1/** @file\r
2 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL.OpenVolume() member function for the Virtio\r
3 Filesystem driver.\r
4\r
5 Copyright (C) 2020, Red Hat, Inc.\r
6\r
7 SPDX-License-Identifier: BSD-2-Clause-Patent\r
8**/\r
9\r
334c13e1
LE
10#include <Library/BaseLib.h> // InsertTailList()\r
11#include <Library/MemoryAllocationLib.h> // AllocatePool()\r
12\r
b55d6622
LE
13#include "VirtioFsDxe.h"\r
14\r
15/**\r
16 Open the root directory on the Virtio Filesystem.\r
17\r
18 Refer to EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME for the interface\r
19 contract.\r
20**/\r
21EFI_STATUS\r
22EFIAPI\r
23VirtioFsOpenVolume (\r
ac0a286f
MK
24 IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This,\r
25 OUT EFI_FILE_PROTOCOL **Root\r
b55d6622
LE
26 )\r
27{\r
ac0a286f
MK
28 VIRTIO_FS *VirtioFs;\r
29 VIRTIO_FS_FILE *VirtioFsFile;\r
30 EFI_STATUS Status;\r
31 CHAR8 *CanonicalPathname;\r
32 UINT64 RootDirHandle;\r
334c13e1
LE
33\r
34 VirtioFs = VIRTIO_FS_FROM_SIMPLE_FS (This);\r
35\r
36 VirtioFsFile = AllocatePool (sizeof *VirtioFsFile);\r
37 if (VirtioFsFile == NULL) {\r
38 return EFI_OUT_OF_RESOURCES;\r
39 }\r
40\r
7e8c83f7
LE
41 CanonicalPathname = AllocateCopyPool (sizeof "/", "/");\r
42 if (CanonicalPathname == NULL) {\r
43 Status = EFI_OUT_OF_RESOURCES;\r
44 goto FreeVirtioFsFile;\r
45 }\r
46\r
334c13e1
LE
47 //\r
48 // Open the root directory.\r
49 //\r
ac0a286f
MK
50 Status = VirtioFsFuseOpenDir (\r
51 VirtioFs,\r
52 VIRTIO_FS_FUSE_ROOT_DIR_NODE_ID,\r
53 &RootDirHandle\r
54 );\r
334c13e1 55 if (EFI_ERROR (Status)) {\r
7e8c83f7 56 goto FreeCanonicalPathname;\r
334c13e1
LE
57 }\r
58\r
59 //\r
60 // Populate the new VIRTIO_FS_FILE object.\r
61 //\r
62 VirtioFsFile->Signature = VIRTIO_FS_FILE_SIG;\r
63 VirtioFsFile->SimpleFile.Revision = EFI_FILE_PROTOCOL_REVISION;\r
64 VirtioFsFile->SimpleFile.Open = VirtioFsSimpleFileOpen;\r
65 VirtioFsFile->SimpleFile.Close = VirtioFsSimpleFileClose;\r
66 VirtioFsFile->SimpleFile.Delete = VirtioFsSimpleFileDelete;\r
67 VirtioFsFile->SimpleFile.Read = VirtioFsSimpleFileRead;\r
68 VirtioFsFile->SimpleFile.Write = VirtioFsSimpleFileWrite;\r
69 VirtioFsFile->SimpleFile.GetPosition = VirtioFsSimpleFileGetPosition;\r
70 VirtioFsFile->SimpleFile.SetPosition = VirtioFsSimpleFileSetPosition;\r
71 VirtioFsFile->SimpleFile.GetInfo = VirtioFsSimpleFileGetInfo;\r
72 VirtioFsFile->SimpleFile.SetInfo = VirtioFsSimpleFileSetInfo;\r
73 VirtioFsFile->SimpleFile.Flush = VirtioFsSimpleFileFlush;\r
74 VirtioFsFile->IsDirectory = TRUE;\r
28092a39 75 VirtioFsFile->IsOpenForWriting = FALSE;\r
334c13e1 76 VirtioFsFile->OwnerFs = VirtioFs;\r
7e8c83f7 77 VirtioFsFile->CanonicalPathname = CanonicalPathname;\r
c4edb49b 78 VirtioFsFile->FilePosition = 0;\r
334c13e1
LE
79 VirtioFsFile->NodeId = VIRTIO_FS_FUSE_ROOT_DIR_NODE_ID;\r
80 VirtioFsFile->FuseHandle = RootDirHandle;\r
b845de89
LE
81 VirtioFsFile->FileInfoArray = NULL;\r
82 VirtioFsFile->SingleFileInfoSize = 0;\r
83 VirtioFsFile->NumFileInfo = 0;\r
84 VirtioFsFile->NextFileInfo = 0;\r
334c13e1
LE
85\r
86 //\r
87 // One more file open for the filesystem.\r
88 //\r
89 InsertTailList (&VirtioFs->OpenFiles, &VirtioFsFile->OpenFilesEntry);\r
90\r
91 *Root = &VirtioFsFile->SimpleFile;\r
92 return EFI_SUCCESS;\r
93\r
7e8c83f7
LE
94FreeCanonicalPathname:\r
95 FreePool (CanonicalPathname);\r
96\r
334c13e1
LE
97FreeVirtioFsFile:\r
98 FreePool (VirtioFsFile);\r
99\r
100 return Status;\r
b55d6622 101}\r