Fix various typos in FatPkg/EnhancedFatDxe comments. Cc: Ray Ni <ray.ni@intel.com> Signed-off-by: Antoine Coeur <coeur@gmx.fr> Reviewed-by: Philippe Mathieu-Daude <philmd@redhat.com> Acked-by: Liming Gao <liming.gao@intel.com> Signed-off-by: Philippe Mathieu-Daude <philmd@redhat.com> Message-Id: <20200207010831.9046-8-philmd@redhat.com>
		
			
				
	
	
		
			526 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			526 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Fat File System driver routines that support EFI driver model.
 | 
						|
 | 
						|
Copyright (c) 2005 - 2014, Intel Corporation. All rights reserved.<BR>
 | 
						|
SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#include "Fat.h"
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  Register Driver Binding protocol for this driver.
 | 
						|
 | 
						|
  @param  ImageHandle           - Handle for the image of this driver.
 | 
						|
  @param  SystemTable           - Pointer to the EFI System Table.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           - Driver loaded.
 | 
						|
  @return other                 - Driver not loaded.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
FatEntryPoint (
 | 
						|
  IN EFI_HANDLE         ImageHandle,
 | 
						|
  IN EFI_SYSTEM_TABLE   *SystemTable
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  Unload function for this image. Uninstall DriverBinding protocol.
 | 
						|
 | 
						|
  @param ImageHandle           - Handle for the image of this driver.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           - Driver unloaded successfully.
 | 
						|
  @return other                 - Driver can not unloaded.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
FatUnload (
 | 
						|
  IN EFI_HANDLE         ImageHandle
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  Test to see if this driver can add a file system to ControllerHandle.
 | 
						|
  ControllerHandle must support both Disk IO and Block IO protocols.
 | 
						|
 | 
						|
  @param  This                  - Protocol instance pointer.
 | 
						|
  @param  ControllerHandle      - Handle of device to test.
 | 
						|
  @param  RemainingDevicePath   - Not used.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           - This driver supports this device.
 | 
						|
  @retval EFI_ALREADY_STARTED   - This driver is already running on this device.
 | 
						|
  @return other                 - This driver does not support this device.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
FatDriverBindingSupported (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   Controller,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  Start this driver on ControllerHandle by opening a Block IO and Disk IO
 | 
						|
  protocol, reading Device Path. Add a Simple File System protocol to
 | 
						|
  ControllerHandle if the media contains a valid file system.
 | 
						|
 | 
						|
  @param  This                  - Protocol instance pointer.
 | 
						|
  @param  ControllerHandle      - Handle of device to bind driver to.
 | 
						|
  @param  RemainingDevicePath   - Not used.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           - This driver is added to DeviceHandle.
 | 
						|
  @retval EFI_ALREADY_STARTED   - This driver is already running on DeviceHandle.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  - Can not allocate the memory.
 | 
						|
  @return other                 - This driver does not support this device.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
FatDriverBindingStart (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   Controller,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  Stop this driver on ControllerHandle.
 | 
						|
 | 
						|
  @param  This                  - Protocol instance pointer.
 | 
						|
  @param  ControllerHandle      - Handle of device to stop driver on.
 | 
						|
  @param  NumberOfChildren      - Not used.
 | 
						|
  @param  ChildHandleBuffer     - Not used.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           - This driver is removed DeviceHandle.
 | 
						|
  @return other                 - This driver was not removed from this device.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
FatDriverBindingStop (
 | 
						|
  IN  EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN  EFI_HANDLE                   Controller,
 | 
						|
  IN  UINTN                        NumberOfChildren,
 | 
						|
  IN  EFI_HANDLE                   *ChildHandleBuffer
 | 
						|
  );
 | 
						|
 | 
						|
//
 | 
						|
// DriverBinding protocol instance
 | 
						|
//
 | 
						|
EFI_DRIVER_BINDING_PROTOCOL gFatDriverBinding = {
 | 
						|
  FatDriverBindingSupported,
 | 
						|
  FatDriverBindingStart,
 | 
						|
  FatDriverBindingStop,
 | 
						|
  0xa,
 | 
						|
  NULL,
 | 
						|
  NULL
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  Register Driver Binding protocol for this driver.
 | 
						|
 | 
						|
  @param  ImageHandle           - Handle for the image of this driver.
 | 
						|
  @param  SystemTable           - Pointer to the EFI System Table.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           - Driver loaded.
 | 
						|
  @return other                 - Driver not loaded.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
FatEntryPoint (
 | 
						|
  IN EFI_HANDLE         ImageHandle,
 | 
						|
  IN EFI_SYSTEM_TABLE   *SystemTable
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS                Status;
 | 
						|
 | 
						|
  //
 | 
						|
  // Initialize the EFI Driver Library
 | 
						|
  //
 | 
						|
  Status = EfiLibInstallDriverBindingComponentName2 (
 | 
						|
             ImageHandle,
 | 
						|
             SystemTable,
 | 
						|
             &gFatDriverBinding,
 | 
						|
             ImageHandle,
 | 
						|
             &gFatComponentName,
 | 
						|
             &gFatComponentName2
 | 
						|
             );
 | 
						|
  ASSERT_EFI_ERROR (Status);
 | 
						|
 | 
						|
  return Status;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  Unload function for this image. Uninstall DriverBinding protocol.
 | 
						|
 | 
						|
  @param ImageHandle           - Handle for the image of this driver.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           - Driver unloaded successfully.
 | 
						|
  @return other                 - Driver can not unloaded.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
FatUnload (
 | 
						|
  IN EFI_HANDLE  ImageHandle
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS  Status;
 | 
						|
  EFI_HANDLE  *DeviceHandleBuffer;
 | 
						|
  UINTN       DeviceHandleCount;
 | 
						|
  UINTN       Index;
 | 
						|
  VOID        *ComponentName;
 | 
						|
  VOID        *ComponentName2;
 | 
						|
 | 
						|
  Status = gBS->LocateHandleBuffer (
 | 
						|
                  AllHandles,
 | 
						|
                  NULL,
 | 
						|
                  NULL,
 | 
						|
                  &DeviceHandleCount,
 | 
						|
                  &DeviceHandleBuffer
 | 
						|
                  );
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    return Status;
 | 
						|
  }
 | 
						|
 | 
						|
  for (Index = 0; Index < DeviceHandleCount; Index++) {
 | 
						|
    Status = EfiTestManagedDevice (DeviceHandleBuffer[Index], ImageHandle, &gEfiDiskIoProtocolGuid);
 | 
						|
    if (!EFI_ERROR (Status)) {
 | 
						|
      Status = gBS->DisconnectController (
 | 
						|
                      DeviceHandleBuffer[Index],
 | 
						|
                      ImageHandle,
 | 
						|
                      NULL
 | 
						|
                      );
 | 
						|
      if (EFI_ERROR (Status)) {
 | 
						|
        break;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (Index == DeviceHandleCount) {
 | 
						|
    //
 | 
						|
    // Driver is stopped successfully.
 | 
						|
    //
 | 
						|
    Status = gBS->HandleProtocol (ImageHandle, &gEfiComponentNameProtocolGuid, &ComponentName);
 | 
						|
    if (EFI_ERROR (Status)) {
 | 
						|
      ComponentName = NULL;
 | 
						|
    }
 | 
						|
 | 
						|
    Status = gBS->HandleProtocol (ImageHandle, &gEfiComponentName2ProtocolGuid, &ComponentName2);
 | 
						|
    if (EFI_ERROR (Status)) {
 | 
						|
      ComponentName2 = NULL;
 | 
						|
    }
 | 
						|
 | 
						|
    if (ComponentName == NULL) {
 | 
						|
      if (ComponentName2 == NULL) {
 | 
						|
        Status = gBS->UninstallMultipleProtocolInterfaces (
 | 
						|
                        ImageHandle,
 | 
						|
                        &gEfiDriverBindingProtocolGuid,  &gFatDriverBinding,
 | 
						|
                        NULL
 | 
						|
                        );
 | 
						|
      } else {
 | 
						|
        Status = gBS->UninstallMultipleProtocolInterfaces (
 | 
						|
                        ImageHandle,
 | 
						|
                        &gEfiDriverBindingProtocolGuid,  &gFatDriverBinding,
 | 
						|
                        &gEfiComponentName2ProtocolGuid, ComponentName2,
 | 
						|
                        NULL
 | 
						|
                        );
 | 
						|
      }
 | 
						|
    } else {
 | 
						|
      if (ComponentName2 == NULL) {
 | 
						|
        Status = gBS->UninstallMultipleProtocolInterfaces (
 | 
						|
                        ImageHandle,
 | 
						|
                        &gEfiDriverBindingProtocolGuid,  &gFatDriverBinding,
 | 
						|
                        &gEfiComponentNameProtocolGuid,  ComponentName,
 | 
						|
                        NULL
 | 
						|
                        );
 | 
						|
      } else {
 | 
						|
        Status = gBS->UninstallMultipleProtocolInterfaces (
 | 
						|
                        ImageHandle,
 | 
						|
                        &gEfiDriverBindingProtocolGuid,  &gFatDriverBinding,
 | 
						|
                        &gEfiComponentNameProtocolGuid,  ComponentName,
 | 
						|
                        &gEfiComponentName2ProtocolGuid, ComponentName2,
 | 
						|
                        NULL
 | 
						|
                        );
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (DeviceHandleBuffer != NULL) {
 | 
						|
    FreePool (DeviceHandleBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  return Status;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  Test to see if this driver can add a file system to ControllerHandle.
 | 
						|
  ControllerHandle must support both Disk IO and Block IO protocols.
 | 
						|
 | 
						|
  @param  This                  - Protocol instance pointer.
 | 
						|
  @param  ControllerHandle      - Handle of device to test.
 | 
						|
  @param  RemainingDevicePath   - Not used.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           - This driver supports this device.
 | 
						|
  @retval EFI_ALREADY_STARTED   - This driver is already running on this device.
 | 
						|
  @return other                 - This driver does not support this device.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
FatDriverBindingSupported (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   ControllerHandle,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS            Status;
 | 
						|
  EFI_DISK_IO_PROTOCOL  *DiskIo;
 | 
						|
 | 
						|
  //
 | 
						|
  // Open the IO Abstraction(s) needed to perform the supported test
 | 
						|
  //
 | 
						|
  Status = gBS->OpenProtocol (
 | 
						|
                  ControllerHandle,
 | 
						|
                  &gEfiDiskIoProtocolGuid,
 | 
						|
                  (VOID **) &DiskIo,
 | 
						|
                  This->DriverBindingHandle,
 | 
						|
                  ControllerHandle,
 | 
						|
                  EFI_OPEN_PROTOCOL_BY_DRIVER
 | 
						|
                  );
 | 
						|
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    return Status;
 | 
						|
  }
 | 
						|
  //
 | 
						|
  // Close the I/O Abstraction(s) used to perform the supported test
 | 
						|
  //
 | 
						|
  gBS->CloseProtocol (
 | 
						|
         ControllerHandle,
 | 
						|
         &gEfiDiskIoProtocolGuid,
 | 
						|
         This->DriverBindingHandle,
 | 
						|
         ControllerHandle
 | 
						|
         );
 | 
						|
 | 
						|
  //
 | 
						|
  // Open the IO Abstraction(s) needed to perform the supported test
 | 
						|
  //
 | 
						|
  Status = gBS->OpenProtocol (
 | 
						|
                  ControllerHandle,
 | 
						|
                  &gEfiBlockIoProtocolGuid,
 | 
						|
                  NULL,
 | 
						|
                  This->DriverBindingHandle,
 | 
						|
                  ControllerHandle,
 | 
						|
                  EFI_OPEN_PROTOCOL_TEST_PROTOCOL
 | 
						|
                  );
 | 
						|
 | 
						|
  return Status;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  Start this driver on ControllerHandle by opening a Block IO and Disk IO
 | 
						|
  protocol, reading Device Path. Add a Simple File System protocol to
 | 
						|
  ControllerHandle if the media contains a valid file system.
 | 
						|
 | 
						|
  @param  This                  - Protocol instance pointer.
 | 
						|
  @param  ControllerHandle      - Handle of device to bind driver to.
 | 
						|
  @param  RemainingDevicePath   - Not used.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           - This driver is added to DeviceHandle.
 | 
						|
  @retval EFI_ALREADY_STARTED   - This driver is already running on DeviceHandle.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  - Can not allocate the memory.
 | 
						|
  @return other                 - This driver does not support this device.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
FatDriverBindingStart (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   ControllerHandle,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS            Status;
 | 
						|
  EFI_BLOCK_IO_PROTOCOL *BlockIo;
 | 
						|
  EFI_DISK_IO_PROTOCOL  *DiskIo;
 | 
						|
  EFI_DISK_IO2_PROTOCOL *DiskIo2;
 | 
						|
  BOOLEAN               LockedByMe;
 | 
						|
 | 
						|
  LockedByMe = FALSE;
 | 
						|
  //
 | 
						|
  // Acquire the lock.
 | 
						|
  // If caller has already acquired the lock, cannot lock it again.
 | 
						|
  //
 | 
						|
  Status = FatAcquireLockOrFail ();
 | 
						|
  if (!EFI_ERROR (Status)) {
 | 
						|
    LockedByMe = TRUE;
 | 
						|
  }
 | 
						|
 | 
						|
  Status = InitializeUnicodeCollationSupport (This->DriverBindingHandle);
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    goto Exit;
 | 
						|
  }
 | 
						|
  //
 | 
						|
  // Open our required BlockIo and DiskIo
 | 
						|
  //
 | 
						|
  Status = gBS->OpenProtocol (
 | 
						|
                  ControllerHandle,
 | 
						|
                  &gEfiBlockIoProtocolGuid,
 | 
						|
                  (VOID **) &BlockIo,
 | 
						|
                  This->DriverBindingHandle,
 | 
						|
                  ControllerHandle,
 | 
						|
                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
 | 
						|
                  );
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    goto Exit;
 | 
						|
  }
 | 
						|
 | 
						|
  Status = gBS->OpenProtocol (
 | 
						|
                  ControllerHandle,
 | 
						|
                  &gEfiDiskIoProtocolGuid,
 | 
						|
                  (VOID **) &DiskIo,
 | 
						|
                  This->DriverBindingHandle,
 | 
						|
                  ControllerHandle,
 | 
						|
                  EFI_OPEN_PROTOCOL_BY_DRIVER
 | 
						|
                  );
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    goto Exit;
 | 
						|
  }
 | 
						|
 | 
						|
  Status = gBS->OpenProtocol (
 | 
						|
                  ControllerHandle,
 | 
						|
                  &gEfiDiskIo2ProtocolGuid,
 | 
						|
                  (VOID **) &DiskIo2,
 | 
						|
                  This->DriverBindingHandle,
 | 
						|
                  ControllerHandle,
 | 
						|
                  EFI_OPEN_PROTOCOL_BY_DRIVER
 | 
						|
                  );
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    DiskIo2 = NULL;
 | 
						|
  }
 | 
						|
 | 
						|
  //
 | 
						|
  // Allocate Volume structure. In FatAllocateVolume(), Resources
 | 
						|
  // are allocated with protocol installed and cached initialized
 | 
						|
  //
 | 
						|
  Status = FatAllocateVolume (ControllerHandle, DiskIo, DiskIo2, BlockIo);
 | 
						|
 | 
						|
  //
 | 
						|
  // When the media changes on a device it will Reinstall the BlockIo interface.
 | 
						|
  // This will cause a call to our Stop(), and a subsequent reentrant call to our
 | 
						|
  // Start() successfully. We should leave the device open when this happen.
 | 
						|
  //
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    Status = gBS->OpenProtocol (
 | 
						|
                    ControllerHandle,
 | 
						|
                    &gEfiSimpleFileSystemProtocolGuid,
 | 
						|
                    NULL,
 | 
						|
                    This->DriverBindingHandle,
 | 
						|
                    ControllerHandle,
 | 
						|
                    EFI_OPEN_PROTOCOL_TEST_PROTOCOL
 | 
						|
                    );
 | 
						|
    if (EFI_ERROR (Status)) {
 | 
						|
      gBS->CloseProtocol (
 | 
						|
             ControllerHandle,
 | 
						|
             &gEfiDiskIoProtocolGuid,
 | 
						|
             This->DriverBindingHandle,
 | 
						|
             ControllerHandle
 | 
						|
             );
 | 
						|
      gBS->CloseProtocol (
 | 
						|
             ControllerHandle,
 | 
						|
             &gEfiDiskIo2ProtocolGuid,
 | 
						|
             This->DriverBindingHandle,
 | 
						|
             ControllerHandle
 | 
						|
             );
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
Exit:
 | 
						|
  //
 | 
						|
  // Unlock if locked by myself.
 | 
						|
  //
 | 
						|
  if (LockedByMe) {
 | 
						|
    FatReleaseLock ();
 | 
						|
  }
 | 
						|
  return Status;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  Stop this driver on ControllerHandle.
 | 
						|
 | 
						|
  @param  This                  - Protocol instance pointer.
 | 
						|
  @param  ControllerHandle      - Handle of device to stop driver on.
 | 
						|
  @param  NumberOfChildren      - Not used.
 | 
						|
  @param  ChildHandleBuffer     - Not used.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           - This driver is removed DeviceHandle.
 | 
						|
  @return other                 - This driver was not removed from this device.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
FatDriverBindingStop (
 | 
						|
  IN  EFI_DRIVER_BINDING_PROTOCOL   *This,
 | 
						|
  IN  EFI_HANDLE                    ControllerHandle,
 | 
						|
  IN  UINTN                         NumberOfChildren,
 | 
						|
  IN  EFI_HANDLE                    *ChildHandleBuffer
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS                      Status;
 | 
						|
  EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FileSystem;
 | 
						|
  FAT_VOLUME                      *Volume;
 | 
						|
  EFI_DISK_IO2_PROTOCOL           *DiskIo2;
 | 
						|
 | 
						|
  DiskIo2 = NULL;
 | 
						|
  //
 | 
						|
  // 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);
 | 
						|
    DiskIo2 = Volume->DiskIo2;
 | 
						|
    Status  = FatAbandonVolume (Volume);
 | 
						|
  }
 | 
						|
 | 
						|
  if (!EFI_ERROR (Status)) {
 | 
						|
    if (DiskIo2 != NULL) {
 | 
						|
      Status = gBS->CloseProtocol (
 | 
						|
        ControllerHandle,
 | 
						|
        &gEfiDiskIo2ProtocolGuid,
 | 
						|
        This->DriverBindingHandle,
 | 
						|
        ControllerHandle
 | 
						|
        );
 | 
						|
      ASSERT_EFI_ERROR (Status);
 | 
						|
    }
 | 
						|
    Status = gBS->CloseProtocol (
 | 
						|
      ControllerHandle,
 | 
						|
      &gEfiDiskIoProtocolGuid,
 | 
						|
      This->DriverBindingHandle,
 | 
						|
      ControllerHandle
 | 
						|
      );
 | 
						|
    ASSERT_EFI_ERROR (Status);
 | 
						|
  }
 | 
						|
 | 
						|
  return Status;
 | 
						|
}
 |