]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/IScsiDxe/IScsiDriver.c
MdeModulePkg/FrameBufferBltLib: Fix copying of unaligned memory
[mirror_edk2.git] / NetworkPkg / IScsiDxe / IScsiDriver.c
index ac10fa26d1b94d5a142eee72841115f08007585b..a0ece3ae1fa876ca40108e61526ad2b832354c4c 100644 (file)
@@ -1,7 +1,9 @@
 /** @file\r
   The entry point of IScsi driver.\r
 \r
-Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>\r
+(C) Copyright 2017 Hewlett Packard Enterprise Development LP<BR>\r
+\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
@@ -85,6 +87,7 @@ IScsiIsDevicePathSupported (
 **/\r
 EFI_STATUS\r
 IScsiCheckAip (\r
+  VOID\r
   )\r
 {\r
   UINTN                            AipHandleCount;\r
@@ -252,15 +255,19 @@ IScsiSupported (
   EFI_GUID                  *IScsiServiceBindingGuid;\r
   EFI_GUID                  *TcpServiceBindingGuid;\r
   EFI_GUID                  *DhcpServiceBindingGuid;\r
+  EFI_GUID                  *DnsServiceBindingGuid;\r
 \r
   if (IpVersion == IP_VERSION_4) {\r
     IScsiServiceBindingGuid  = &gIScsiV4PrivateGuid;\r
     TcpServiceBindingGuid    = &gEfiTcp4ServiceBindingProtocolGuid;\r
     DhcpServiceBindingGuid   = &gEfiDhcp4ServiceBindingProtocolGuid;\r
+    DnsServiceBindingGuid    = &gEfiDns4ServiceBindingProtocolGuid;\r
+\r
   } else {\r
     IScsiServiceBindingGuid  = &gIScsiV6PrivateGuid;\r
     TcpServiceBindingGuid    = &gEfiTcp6ServiceBindingProtocolGuid;\r
     DhcpServiceBindingGuid   = &gEfiDhcp6ServiceBindingProtocolGuid;\r
+    DnsServiceBindingGuid    = &gEfiDns6ServiceBindingProtocolGuid;\r
   }\r
 \r
   Status = gBS->OpenProtocol (\r
@@ -305,7 +312,21 @@ IScsiSupported (
       return EFI_UNSUPPORTED;\r
     }\r
   }\r
-  \r
+\r
+  if (IScsiDnsIsConfigured (ControllerHandle)) {\r
+    Status = gBS->OpenProtocol (\r
+                    ControllerHandle,\r
+                    DnsServiceBindingGuid,\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
@@ -353,7 +374,6 @@ IScsiStart (
   EFI_DEVICE_PATH_PROTOCOL        *DevicePath;\r
   EFI_GUID                        *IScsiPrivateGuid;\r
   EFI_GUID                        *TcpServiceBindingGuid;\r
-  CHAR16                          MacString[ISCSI_MAX_MAC_STRING_LEN];\r
   BOOLEAN                         NeedUpdate;\r
   VOID                            *Interface;\r
   EFI_GUID                        *ProtocolGuid;\r
@@ -401,7 +421,11 @@ IScsiStart (
   }\r
 \r
   NetworkBootPolicy = PcdGet8 (PcdIScsiAIPNetworkBootPolicy);\r
-  if (NetworkBootPolicy != ALWAYS_USE_UEFI_ISCSI_AND_IGNORE_AIP) {\r
+  if (NetworkBootPolicy == ALWAYS_USE_ISCSI_HBA_AND_IGNORE_UEFI_ISCSI) {\r
+    return EFI_ABORTED;\r
+  }\r
+\r
+  if (NetworkBootPolicy != ALWAYS_USE_UEFI_ISCSI_AND_IGNORE_ISCSI_HBA) {\r
     //\r
     // Check existing iSCSI AIP.\r
     //\r
@@ -417,7 +441,7 @@ IScsiStart (
   //\r
   // Record the incoming NIC info.\r
   //\r
-  Status = IScsiAddNic (ControllerHandle);\r
+  Status = IScsiAddNic (ControllerHandle, Image);\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
@@ -673,12 +697,10 @@ IScsiStart (
     Session->ConfigData = AttemptConfigData;\r
     Session->AuthType   = AttemptConfigData->AuthenticationType;\r
 \r
-    AsciiStrToUnicodeStrS (AttemptConfigData->MacString, MacString, ARRAY_SIZE (MacString));\r
     UnicodeSPrint (\r
       mPrivate->PortString,\r
       (UINTN) ISCSI_NAME_IFR_MAX_SIZE,\r
-      L"%s%d",\r
-      MacString,\r
+      L"Attempt %d",\r
       (UINTN) AttemptConfigData->AttemptConfigIndex\r
       );\r
 \r
@@ -1779,6 +1801,22 @@ IScsiDriverEntryPoint (
     goto Error4;\r
   }\r
 \r
+  //\r
+  // Create the Maximum Attempts.\r
+  //\r
+  Status = IScsiCreateAttempts (PcdGet8 (PcdMaxIScsiAttemptNumber));\r
+  if (EFI_ERROR (Status)) {\r
+    goto Error5;\r
+  }\r
+\r
+  //\r
+  // Create Keywords for all the Attempts.\r
+  //\r
+  Status = IScsiCreateKeywords (PcdGet8 (PcdMaxIScsiAttemptNumber));\r
+  if (EFI_ERROR (Status)) {\r
+    goto Error6;\r
+  }\r
+\r
   //\r
   // There should be only one EFI_AUTHENTICATION_INFO_PROTOCOL. If already exists,\r
   // do not produce the protocol instance.\r
@@ -1796,17 +1834,23 @@ IScsiDriverEntryPoint (
                     &gIScsiAuthenticationInfo\r
                     );\r
     if (EFI_ERROR (Status)) {\r
-      goto Error5;\r
+      goto Error6;\r
     }    \r
   }\r
 \r
   return EFI_SUCCESS;\r
 \r
+Error6:\r
+  IScsiCleanAttemptVariable ();\r
+\r
 Error5:\r
   IScsiConfigFormUnload (gIScsiIp4DriverBinding.DriverBindingHandle);\r
 \r
 Error4:\r
-  FreePool (mPrivate);\r
+  if (mPrivate != NULL) {\r
+    FreePool (mPrivate);\r
+    mPrivate = NULL;\r
+  }\r
 \r
 Error3:\r
   gBS->UninstallMultipleProtocolInterfaces (\r