EFI_STATUS EFIAPI FatDriverBindingStop ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer ) /*++ Routine Description: Stop this driver on ControllerHandle. Arguments: This - Protocol instance pointer. ControllerHandle - Handle of device to stop driver on. NumberOfChildren - Not used. ChildHandleBuffer - Not used. Returns: EFI_SUCCESS - This driver is removed DeviceHandle. other - This driver was not removed from this device. --*/ { EFI_STATUS Status; EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FileSystem; FAT_VOLUME *Volume; // // Get our context back // Status = gBS->OpenProtocol ( ControllerHandle, &gEfiSimpleFileSystemProtocolGuid, (VOID **) &FileSystem, This->DriverBindingHandle, ControllerHandle, EFI_OPEN_PROTOCOL_GET_PROTOCOL ); if (!EFI_ERROR (Status)) { Volume = VOLUME_FROM_VOL_INTERFACE (FileSystem); Status = FatAbandonVolume (Volume); if (EFI_ERROR (Status)) { return Status; } } Status = gBS->CloseProtocol ( ControllerHandle, &gEfiDiskIoProtocolGuid, This->DriverBindingHandle, ControllerHandle ); return Status; }
EFI_STATUS EFIAPI FatOpenVolume ( IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, OUT EFI_FILE_PROTOCOL **File ) /*++ Routine Description: Implements Simple File System Protocol interface function OpenVolume(). Arguments: This - Calling context. File - the Root Directory of the volume. Returns: EFI_OUT_OF_RESOURCES - Can not allocate the memory. EFI_VOLUME_CORRUPTED - The FAT type is error. EFI_SUCCESS - Open the volume successfully. --*/ { EFI_STATUS Status; FAT_VOLUME *Volume; FAT_IFILE *IFile; Volume = VOLUME_FROM_VOL_INTERFACE (This); FatAcquireLock (); // // Open Root file // Status = FatOpenDirEnt (NULL, &Volume->RootDirEnt); if (EFI_ERROR (Status)) { goto Done; } // // Open a new instance to the root // Status = FatAllocateIFile (Volume->Root, &IFile); if (!EFI_ERROR (Status)) { *File = &IFile->Handle; } Done: Status = FatCleanupVolume (Volume, Volume->Root, Status, NULL); FatReleaseLock (); return Status; }
/** Implements Simple File System Protocol interface function OpenVolume(). @param This - Calling context. @param File - the Root Directory of the volume. @retval EFI_OUT_OF_RESOURCES - Can not allocate the memory. @retval EFI_VOLUME_CORRUPTED - The FAT type is error. @retval EFI_SUCCESS - Open the volume successfully. **/ EFI_STATUS EFIAPI FatOpenVolume ( IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, OUT EFI_FILE_PROTOCOL **File ) { EFI_STATUS Status; FAT_VOLUME *Volume; FAT_IFILE *IFile; Volume = VOLUME_FROM_VOL_INTERFACE (This); FatAcquireLock (); // // Open Root file // Status = FatOpenDirEnt (NULL, &Volume->RootDirEnt); if (EFI_ERROR (Status)) { goto Done; } // // Open a new instance to the root // Status = FatAllocateIFile (Volume->Root, &IFile); if (!EFI_ERROR (Status)) { *File = &IFile->Handle; } Done: Status = FatCleanupVolume (Volume, Volume->Root, Status, NULL); FatReleaseLock (); return Status; }