]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/IScsiDxe/IScsiDriver.c
MdeModulePkg: Delete IScsiDxe in MdeModulePkg.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / IScsiDxe / IScsiDriver.c
diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDriver.c b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDriver.c
deleted file mode 100644 (file)
index 730f3e5..0000000
+++ /dev/null
@@ -1,676 +0,0 @@
-/** @file\r
-  The entry point of IScsi driver.\r
-\r
-Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "IScsiImpl.h"\r
-\r
-EFI_DRIVER_BINDING_PROTOCOL gIScsiDriverBinding = {\r
-  IScsiDriverBindingSupported,\r
-  IScsiDriverBindingStart,\r
-  IScsiDriverBindingStop,\r
-  0xa,\r
-  NULL,\r
-  NULL\r
-};\r
-\r
-/**\r
-  Tests to see if this driver supports the RemainingDevicePath.\r
-\r
-  @param[in]  RemainingDevicePath  A pointer to the remaining portion of a device path.  This\r
-                                   parameter is ignored by device drivers, and is optional for bus\r
-                                   drivers. For bus drivers, if this parameter is not NULL, then\r
-                                   the bus driver must determine if the bus controller specified\r
-                                   by ControllerHandle and the child controller specified\r
-                                   by RemainingDevicePath are both supported by this\r
-                                   bus driver.\r
-\r
-  @retval EFI_SUCCESS              The RemainingDevicePath is supported or NULL.\r
-  @retval EFI_UNSUPPORTED          The device specified by ControllerHandle and\r
-                                   RemainingDevicePath is not supported by the driver specified by This.\r
-**/\r
-EFI_STATUS\r
-IScsiIsDevicePathSupported (\r
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath OPTIONAL\r
-  )\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *CurrentDevicePath;\r
-\r
-  CurrentDevicePath = RemainingDevicePath;\r
-  if (CurrentDevicePath != NULL) {\r
-    while (!IsDevicePathEnd (CurrentDevicePath)) {\r
-      if ((CurrentDevicePath->Type == MESSAGING_DEVICE_PATH) && (CurrentDevicePath->SubType == MSG_ISCSI_DP)) {\r
-        return EFI_SUCCESS;\r
-      }\r
-\r
-      CurrentDevicePath = NextDevicePathNode (CurrentDevicePath);\r
-    }\r
-\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Tests to see if this driver supports a given controller. If a child device is provided,\r
-  it further tests to see if this driver supports creating a handle for the specified child device.\r
-\r
-  @param[in]  This                 A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
-  @param[in]  ControllerHandle     The handle of the controller to test. This handle\r
-                                   must support a protocol interface that supplies\r
-                                   an I/O abstraction to the driver.\r
-  @param[in]  RemainingDevicePath  A pointer to the remaining portion of a device path.\r
-                                   This parameter is ignored by device drivers, and is optional for bus drivers.\r
-\r
-\r
-  @retval EFI_SUCCESS              The device specified by ControllerHandle and\r
-                                   RemainingDevicePath is supported by the driver specified by This.\r
-  @retval EFI_ALREADY_STARTED      The device specified by ControllerHandle and\r
-                                   RemainingDevicePath is already being managed by the driver\r
-                                   specified by This.\r
-  @retval EFI_ACCESS_DENIED        The device specified by ControllerHandle and\r
-                                   RemainingDevicePath is already being managed by a different\r
-                                   driver or an application that requires exclusive acces.\r
-                                   Currently not implemented.\r
-  @retval EFI_UNSUPPORTED          The device specified by ControllerHandle and\r
-                                   RemainingDevicePath is not supported by the driver specified by This.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-IScsiDriverBindingSupported (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
-  IN EFI_HANDLE                   ControllerHandle,\r
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath OPTIONAL\r
-  )\r
-{\r
-  EFI_STATUS                Status;\r
-\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiCallerIdGuid,\r
-                  NULL,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
-                  );\r
-  if (!EFI_ERROR (Status)) {\r
-    return EFI_ALREADY_STARTED;\r
-  }\r
-\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiTcp4ServiceBindingProtocolGuid,\r
-                  NULL,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-\r
-  Status = IScsiIsDevicePathSupported (RemainingDevicePath);\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-\r
-  if (IScsiDhcpIsConfigured (ControllerHandle)) {\r
-    Status = gBS->OpenProtocol (\r
-                    ControllerHandle,\r
-                    &gEfiDhcp4ServiceBindingProtocolGuid,\r
-                    NULL,\r
-                    This->DriverBindingHandle,\r
-                    ControllerHandle,\r
-                    EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      return EFI_UNSUPPORTED;\r
-    }\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Start this driver on ControllerHandle.\r
-\r
-  The Start() function is designed to be invoked from the EFI boot service ConnectController().\r
-  As a result, much of the error checking on the parameters to Start() has been moved into this\r
-  common boot service. It is legal to call Start() from other locations, but the following calling\r
-  restrictions must be followed or the system behavior will not be deterministic.\r
-  1. ControllerHandle must be a valid EFI_HANDLE.\r
-  2. If RemainingDevicePath is not NULL, then it must be a pointer to a naturally aligned\r
-     EFI_DEVICE_PATH_PROTOCOL.\r
-  3. Prior to calling Start(), the Supported() function for the driver specified by This must\r
-     have been called with the same calling parameters, and Supported() must have returned EFI_SUCCESS.\r
-\r
-  @param[in]  This                 A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
-  @param[in]  ControllerHandle     The handle of the controller to start. This handle\r
-                                   must support a protocol interface that supplies\r
-                                   an I/O abstraction to the driver.\r
-  @param[in]  RemainingDevicePath  A pointer to the remaining portion of a device path.\r
-                                   This parameter is ignored by device drivers, and is optional for bus drivers.\r
-\r
-  @retval EFI_SUCCESS              The device was started.\r
-  @retval EFI_DEVICE_ERROR         The device could not be started due to a device error.\r
-                                   Currently not implemented.\r
-  @retval EFI_OUT_OF_RESOURCES     The request could not be completed due to a lack of resources.\r
-  @retval Others                   The driver failded to start the device.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-IScsiDriverBindingStart (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
-  IN EFI_HANDLE                   ControllerHandle,\r
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath OPTIONAL\r
-  )\r
-{\r
-  EFI_STATUS        Status;\r
-  ISCSI_DRIVER_DATA *Private;\r
-  VOID              *Interface;\r
-\r
-  Private = IScsiCreateDriverData (This->DriverBindingHandle, ControllerHandle);\r
-  if (Private == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  //\r
-  // Create a underlayer child instance, but not need to configure it. Just open ChildHandle\r
-  // via BY_DRIVER. That is, establishing the relationship between ControllerHandle and ChildHandle.\r
-  // Therefore, when DisconnectController(), especially VLAN virtual controller handle,\r
-  // IScsiDriverBindingStop() will be called.\r
-  //\r
-  Status = NetLibCreateServiceChild (\r
-             ControllerHandle,\r
-             This->DriverBindingHandle,\r
-             &gEfiTcp4ServiceBindingProtocolGuid,\r
-             &Private->ChildHandle\r
-             );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  Status = gBS->OpenProtocol (\r
-                  Private->ChildHandle,\r
-                  &gEfiTcp4ProtocolGuid,\r
-                  &Interface,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  //\r
-  // Always install private protocol no matter what happens later. We need to\r
-  // keep the relationship between ControllerHandle and ChildHandle.\r
-  //\r
-  Status = gBS->InstallProtocolInterface (\r
-                  &ControllerHandle,\r
-                  &gEfiCallerIdGuid,\r
-                  EFI_NATIVE_INTERFACE,\r
-                  &Private->IScsiIdentifier\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  //\r
-  // Try to add a port configuration page for this controller.\r
-  //\r
-  IScsiConfigUpdateForm (This->DriverBindingHandle, ControllerHandle, TRUE);\r
-\r
-  //\r
-  // Get the iSCSI configuration data of this controller.\r
-  //\r
-  Status = IScsiGetConfigData (Private);\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-  //\r
-  // Try to login and create an iSCSI session according to the configuration.\r
-  //\r
-  Status = IScsiSessionLogin (Private);\r
-  if (Status == EFI_MEDIA_CHANGED) {\r
-    //\r
-    // The specified target is not available and the redirection information is\r
-    // got, login the session again with the updated target address.\r
-    //\r
-    Status = IScsiSessionLogin (Private);\r
-  }\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-  //\r
-  // Duplicate the Session's tcp connection device path. The source port field\r
-  // will be set to zero as one iSCSI session is comprised of several iSCSI\r
-  // connections.\r
-  //\r
-  Private->DevicePath = IScsiGetTcpConnDevicePath (Private);\r
-  if (Private->DevicePath == NULL) {\r
-    goto ON_ERROR;\r
-  }\r
-  //\r
-  // Install the updated device path onto the ExtScsiPassThruHandle.\r
-  //\r
-  Status = gBS->InstallProtocolInterface (\r
-                  &Private->ExtScsiPassThruHandle,\r
-                  &gEfiDevicePathProtocolGuid,\r
-                  EFI_NATIVE_INTERFACE,\r
-                  Private->DevicePath\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  //\r
-  // ISCSI children should share the default Tcp child, just open the default Tcp child via BY_CHILD_CONTROLLER.\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  Private->ChildHandle, /// Default Tcp child\r
-                  &gEfiTcp4ProtocolGuid,\r
-                  &Interface,\r
-                  This->DriverBindingHandle,\r
-                  Private->ExtScsiPassThruHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    gBS->UninstallMultipleProtocolInterfaces (\r
-           Private->ExtScsiPassThruHandle,\r
-           &gEfiExtScsiPassThruProtocolGuid,\r
-           &Private->IScsiExtScsiPassThru,\r
-           &gEfiDevicePathProtocolGuid,\r
-           Private->DevicePath,\r
-           NULL\r
-           );\r
-\r
-    goto ON_ERROR;\r
-  }\r
-\r
-  //\r
-  // Update/Publish the iSCSI Boot Firmware Table.\r
-  //\r
-  IScsiPublishIbft ();\r
-\r
-  return EFI_SUCCESS;\r
-\r
-ON_ERROR:\r
-\r
-  IScsiSessionAbort (&Private->Session);\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Stop this driver on ControllerHandle.\r
-\r
-  Release the control of this controller and remove the IScsi functions. The Stop()\r
-  function is designed to be invoked from the EFI boot service DisconnectController().\r
-  As a result, much of the error checking on the parameters to Stop() has been moved\r
-  into this common boot service. It is legal to call Stop() from other locations,\r
-  but the following calling restrictions must be followed or the system behavior will not be deterministic.\r
-  1. ControllerHandle must be a valid EFI_HANDLE that was used on a previous call to this\r
-     same driver's Start() function.\r
-  2. The first NumberOfChildren handles of ChildHandleBuffer must all be a valid\r
-     EFI_HANDLE. In addition, all of these handles must have been created in this driver's\r
-     Start() function, and the Start() function must have called OpenProtocol() on\r
-     ControllerHandle with an Attribute of EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.\r
-\r
-  @param[in]  This              A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
-  @param[in]  ControllerHandle  A handle to the device being stopped. The handle must\r
-                                support a bus specific I/O protocol for the driver\r
-                                to use to stop the device.\r
-  @param[in]  NumberOfChildren  The number of child device handles in ChildHandleBuffer.Not used.\r
-  @param[in]  ChildHandleBuffer An array of child handles to be freed. May be NULL\r
-                                if NumberOfChildren is 0.Not used.\r
-\r
-  @retval EFI_SUCCESS           The device was stopped.\r
-  @retval EFI_DEVICE_ERROR      The device could not be stopped due to a device error.\r
-  @retval EFI_INVALID_PARAMETER Child handle is NULL.\r
-  @retval EFI_ACCESS_DENIED     The protocol could not be removed from the Handle\r
-                                because its interfaces are being used.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-IScsiDriverBindingStop (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
-  IN EFI_HANDLE                   ControllerHandle,\r
-  IN UINTN                        NumberOfChildren,\r
-  IN EFI_HANDLE                   *ChildHandleBuffer OPTIONAL\r
-  )\r
-{\r
-  EFI_HANDLE                      IScsiController;\r
-  EFI_STATUS                      Status;\r
-  ISCSI_PRIVATE_PROTOCOL          *IScsiIdentifier;\r
-  ISCSI_DRIVER_DATA               *Private;\r
-  EFI_EXT_SCSI_PASS_THRU_PROTOCOL *PassThru;\r
-  ISCSI_CONNECTION                *Conn;\r
-\r
-  if (NumberOfChildren != 0) {\r
-    //\r
-    // We should have only one child.\r
-    //\r
-    Status = gBS->OpenProtocol (\r
-                    ChildHandleBuffer[0],\r
-                    &gEfiExtScsiPassThruProtocolGuid,\r
-                    (VOID **) &PassThru,\r
-                    This->DriverBindingHandle,\r
-                    ControllerHandle,\r
-                    EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      return EFI_DEVICE_ERROR;\r
-    }\r
-\r
-    Private = ISCSI_DRIVER_DATA_FROM_EXT_SCSI_PASS_THRU (PassThru);\r
-    Conn    = NET_LIST_HEAD (&Private->Session.Conns, ISCSI_CONNECTION, Link);\r
-\r
-    //\r
-    // Previously the TCP4 protocol is opened BY_CHILD_CONTROLLER. Just close\r
-    // the protocol here but not uninstall the device path protocol and\r
-    // EXT SCSI PASS THRU protocol installed on ExtScsiPassThruHandle.\r
-    //\r
-    gBS->CloseProtocol (\r
-           Private->ChildHandle,\r
-           &gEfiTcp4ProtocolGuid,\r
-           Private->Image,\r
-           Private->ExtScsiPassThruHandle\r
-           );\r
-\r
-    gBS->CloseProtocol (\r
-          Conn->Tcp4Io.Handle,\r
-          &gEfiTcp4ProtocolGuid,\r
-          Private->Image,\r
-          Private->ExtScsiPassThruHandle\r
-          );\r
-\r
-    return EFI_SUCCESS;\r
-  }\r
-  //\r
-  // Get the handle of the controller we are controling.\r
-  //\r
-  IScsiController = NetLibGetNicHandle (ControllerHandle, &gEfiTcp4ProtocolGuid);\r
-\r
-  Status = gBS->OpenProtocol (\r
-                  IScsiController,\r
-                  &gEfiCallerIdGuid,\r
-                  (VOID **)&IScsiIdentifier,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_DEVICE_ERROR;\r
-  }\r
-\r
-  Private = ISCSI_DRIVER_DATA_FROM_IDENTIFIER (IScsiIdentifier);\r
-\r
-  if (Private->ChildHandle != NULL) {\r
-    Status = gBS->CloseProtocol (\r
-                    Private->ChildHandle,\r
-                    &gEfiTcp4ProtocolGuid,\r
-                    This->DriverBindingHandle,\r
-                    IScsiController\r
-                    );\r
-\r
-    ASSERT (!EFI_ERROR (Status));\r
-\r
-    Status = NetLibDestroyServiceChild (\r
-               IScsiController,\r
-               This->DriverBindingHandle,\r
-               &gEfiTcp4ServiceBindingProtocolGuid,\r
-               Private->ChildHandle\r
-               );\r
-    ASSERT (!EFI_ERROR (Status));\r
-  }\r
-\r
-  IScsiConfigUpdateForm (This->DriverBindingHandle, IScsiController, FALSE);\r
-\r
-  //\r
-  // Uninstall the private protocol.\r
-  //\r
-  gBS->UninstallProtocolInterface (\r
-        IScsiController,\r
-        &gEfiCallerIdGuid,\r
-        &Private->IScsiIdentifier\r
-        );\r
-\r
-  //\r
-  // Update the iSCSI Boot Firware Table.\r
-  //\r
-  IScsiPublishIbft ();\r
-\r
-  IScsiSessionAbort (&Private->Session);\r
-  Status = IScsiCleanDriverData (Private);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Unloads an image(the iSCSI driver).\r
-\r
-  @param[in]  ImageHandle       Handle that identifies the image to be unloaded.\r
-\r
-  @retval EFI_SUCCESS           The image has been unloaded.\r
-  @retval Others                Other errors as indicated.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-EfiIScsiUnload (\r
-  IN EFI_HANDLE  ImageHandle\r
-  )\r
-{\r
-  EFI_STATUS                        Status;\r
-  UINTN                             DeviceHandleCount;\r
-  EFI_HANDLE                        *DeviceHandleBuffer;\r
-  UINTN                             Index;\r
-  EFI_COMPONENT_NAME_PROTOCOL       *ComponentName;\r
-  EFI_COMPONENT_NAME2_PROTOCOL      *ComponentName2;\r
-\r
-  //\r
-  // Try to disonnect the driver from the devices it's controlling.\r
-  //\r
-  Status = gBS->LocateHandleBuffer (\r
-                  AllHandles,\r
-                  NULL,\r
-                  NULL,\r
-                  &DeviceHandleCount,\r
-                  &DeviceHandleBuffer\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  for (Index = 0; Index < DeviceHandleCount; Index++) {\r
-    Status = IScsiTestManagedDevice (\r
-               DeviceHandleBuffer[Index],\r
-               gIScsiDriverBinding.DriverBindingHandle,\r
-               &gEfiTcp4ProtocolGuid\r
-               );\r
-    if (EFI_ERROR (Status)) {\r
-      continue;\r
-    }\r
-    Status = gBS->DisconnectController (\r
-                    DeviceHandleBuffer[Index],\r
-                    gIScsiDriverBinding.DriverBindingHandle,\r
-                    NULL\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      goto ON_EXIT;\r
-    }\r
-  }\r
-\r
-  //\r
-  // Unload the iSCSI configuration form.\r
-  //\r
-  Status = IScsiConfigFormUnload (gIScsiDriverBinding.DriverBindingHandle);\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_EXIT;\r
-  }\r
-\r
-  //\r
-  // Uninstall the ComponentName and ComponentName2 protocol from iSCSI4 driver binding handle\r
-  // if it has been installed.\r
-  //\r
-  Status = gBS->HandleProtocol (\r
-                  gIScsiDriverBinding.DriverBindingHandle,\r
-                  &gEfiComponentNameProtocolGuid,\r
-                  (VOID **) &ComponentName\r
-                  );\r
-  if (!EFI_ERROR (Status)) {\r
-    Status = gBS->UninstallMultipleProtocolInterfaces (\r
-           gIScsiDriverBinding.DriverBindingHandle,\r
-           &gEfiComponentNameProtocolGuid,\r
-           ComponentName,\r
-           NULL\r
-           );\r
-    if (EFI_ERROR (Status)) {\r
-      goto ON_EXIT;\r
-    }\r
-  }\r
-\r
-  Status = gBS->HandleProtocol (\r
-                  gIScsiDriverBinding.DriverBindingHandle,\r
-                  &gEfiComponentName2ProtocolGuid,\r
-                  (VOID **) &ComponentName2\r
-                  );\r
-  if (!EFI_ERROR (Status)) {\r
-    gBS->UninstallMultipleProtocolInterfaces (\r
-           gIScsiDriverBinding.DriverBindingHandle,\r
-           &gEfiComponentName2ProtocolGuid,\r
-           ComponentName2,\r
-           NULL\r
-           );\r
-    if (EFI_ERROR (Status)) {\r
-      goto ON_EXIT;\r
-    }\r
-  }\r
-\r
-  Status = gBS->UninstallMultipleProtocolInterfaces (\r
-                  ImageHandle,\r
-                  &gEfiDriverBindingProtocolGuid,\r
-                  &gIScsiDriverBinding,\r
-                  &gEfiIScsiInitiatorNameProtocolGuid,\r
-                  &gIScsiInitiatorName,\r
-                  NULL\r
-                  );\r
-ON_EXIT:\r
-\r
-  if (DeviceHandleBuffer != NULL) {\r
-    FreePool (DeviceHandleBuffer);\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  This is the declaration of an EFI image entry point. This entry point is\r
-  the same for UEFI Applications, UEFI OS Loaders, and UEFI Drivers including\r
-  both device drivers and bus drivers. It initialize the global variables and\r
-  publish the driver binding protocol.\r
-\r
-  @param[in]   ImageHandle      The firmware allocated handle for the UEFI image.\r
-  @param[in]   SystemTable      A pointer to the EFI System Table.\r
-\r
-  @retval EFI_SUCCESS           The operation completed successfully.\r
-  @retval EFI_ACCESS_DENIED     EFI_ISCSI_INITIATOR_NAME_PROTOCOL was installed unexpectedly.\r
-  @retval Others                Other errors as indicated.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-IScsiDriverEntryPoint (\r
-  IN EFI_HANDLE         ImageHandle,\r
-  IN EFI_SYSTEM_TABLE   *SystemTable\r
-  )\r
-{\r
-  EFI_STATUS                         Status;\r
-  EFI_ISCSI_INITIATOR_NAME_PROTOCOL  *IScsiInitiatorName;\r
-\r
-  //\r
-  // There should be only one EFI_ISCSI_INITIATOR_NAME_PROTOCOL.\r
-  //\r
-  Status = gBS->LocateProtocol (\r
-                   &gEfiIScsiInitiatorNameProtocolGuid,\r
-                   NULL,\r
-                   (VOID**) &IScsiInitiatorName\r
-                   );\r
-\r
-  if (!EFI_ERROR (Status)) {\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
-\r
-  //\r
-  // Initialize the EFI Driver Library\r
-  //\r
-  Status = EfiLibInstallDriverBindingComponentName2 (\r
-             ImageHandle,\r
-             SystemTable,\r
-             &gIScsiDriverBinding,\r
-             ImageHandle,\r
-             &gIScsiComponentName,\r
-             &gIScsiComponentName2\r
-           );\r
-\r
-  if (!EFI_ERROR (Status)) {\r
-    //\r
-    // Install the iSCSI Initiator Name Protocol.\r
-    //\r
-    Status = gBS->InstallProtocolInterface (\r
-                    &ImageHandle,\r
-                    &gEfiIScsiInitiatorNameProtocolGuid,\r
-                    EFI_NATIVE_INTERFACE,\r
-                    &gIScsiInitiatorName\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      gBS->UninstallMultipleProtocolInterfaces (\r
-            ImageHandle,\r
-            &gEfiDriverBindingProtocolGuid,\r
-            &gIScsiDriverBinding,\r
-            &gEfiComponentName2ProtocolGuid,\r
-            &gIScsiComponentName2,\r
-            &gEfiComponentNameProtocolGuid,\r
-            &gIScsiComponentName,\r
-            NULL\r
-            );\r
-      return Status;\r
-    }\r
-\r
-    //\r
-    // Initialize the configuration form of iSCSI.\r
-    //\r
-    Status = IScsiConfigFormInit ();\r
-    if (EFI_ERROR (Status)) {\r
-      gBS->UninstallMultipleProtocolInterfaces (\r
-            ImageHandle,\r
-            &gEfiDriverBindingProtocolGuid,\r
-            &gIScsiDriverBinding,\r
-            &gEfiComponentName2ProtocolGuid,\r
-            &gIScsiComponentName2,\r
-            &gEfiComponentNameProtocolGuid,\r
-            &gIScsiComponentName,\r
-            &gEfiIScsiInitiatorNameProtocolGuid,\r
-            &gIScsiInitiatorName,\r
-            NULL\r
-            );\r
-    }\r
-  }\r
-  return Status;\r
-}\r
-\r