Home | History | Annotate | Download | only in EnhancedFatDxe
      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
     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