• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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