1 /** @file
2 OpenVolume() function of Simple File System Protocol.
3
4 Copyright (c) 2005 - 2013, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials are licensed and made available
6 under the terms and conditions of the BSD License which accompanies this
7 distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #include "Fat.h"
16
17 /**
18
19 Implements Simple File System Protocol interface function OpenVolume().
20
21 @param This - Calling context.
22 @param File - the Root Directory of the volume.
23
24 @retval EFI_OUT_OF_RESOURCES - Can not allocate the memory.
25 @retval EFI_VOLUME_CORRUPTED - The FAT type is error.
26 @retval EFI_SUCCESS - Open the volume successfully.
27
28 **/
29 EFI_STATUS
30 EFIAPI
FatOpenVolume(IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL * This,OUT EFI_FILE_PROTOCOL ** File)31 FatOpenVolume (
32 IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This,
33 OUT EFI_FILE_PROTOCOL **File
34 )
35 {
36 EFI_STATUS Status;
37 FAT_VOLUME *Volume;
38 FAT_IFILE *IFile;
39
40 Volume = VOLUME_FROM_VOL_INTERFACE (This);
41 FatAcquireLock ();
42
43 //
44 // Open Root file
45 //
46 Status = FatOpenDirEnt (NULL, &Volume->RootDirEnt);
47 if (EFI_ERROR (Status)) {
48 goto Done;
49 }
50 //
51 // Open a new instance to the root
52 //
53 Status = FatAllocateIFile (Volume->Root, &IFile);
54 if (!EFI_ERROR (Status)) {
55 *File = &IFile->Handle;
56 }
57
58 Done:
59
60 Status = FatCleanupVolume (Volume, Volume->Root, Status, NULL);
61 FatReleaseLock ();
62
63 return Status;
64 }
65