]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/IScsiDxe/IScsiDhcp.c
For network dynamic media support:
[mirror_edk2.git] / MdeModulePkg / Universal / Network / IScsiDxe / IScsiDhcp.c
index d0f20892468fb3e9a47142ad0c51aa6482ef7215..c770e27631dc93f6a49e98a0adc7a76d07fdd86c 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   iSCSI DHCP related configuration routines.\r
 \r
-Copyright (c) 2004 - 2009, Intel Corporation.<BR>\r
+Copyright (c) 2004 - 2010, Intel Corporation.<BR>\r
 All rights reserved. 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
@@ -162,7 +162,7 @@ IScsiDhcpExtractRootPath (
 \r
 ON_EXIT:\r
 \r
-  gBS->FreePool (TmpStr);\r
+  FreePool (TmpStr);\r
 \r
   return Status;\r
 }\r
@@ -217,7 +217,7 @@ IScsiDhcpSelectOffer (
 \r
   Status = This->Parse (This, Packet, &OptionCount, OptionList);\r
   if (EFI_ERROR (Status)) {\r
-    gBS->FreePool (OptionList);\r
+    FreePool (OptionList);\r
     return EFI_NOT_READY;\r
   }\r
 \r
@@ -239,7 +239,7 @@ IScsiDhcpSelectOffer (
     Status = EFI_NOT_READY;\r
   }\r
 \r
-  gBS->FreePool (OptionList);\r
+  FreePool (OptionList);\r
 \r
   return Status;\r
 }\r
@@ -295,7 +295,7 @@ IScsiParseDhcpAck (
 \r
   Status = Dhcp4->Parse (Dhcp4, Dhcp4ModeData.ReplyPacket, &OptionCount, OptionList);\r
   if (EFI_ERROR (Status)) {\r
-    gBS->FreePool (OptionList);\r
+    FreePool (OptionList);\r
     return EFI_DEVICE_ERROR;\r
   }\r
 \r
@@ -330,7 +330,7 @@ IScsiParseDhcpAck (
     }\r
   }\r
 \r
-  gBS->FreePool (OptionList);\r
+  FreePool (OptionList);\r
 \r
   return Status;\r
 }\r
@@ -344,7 +344,9 @@ IScsiParseDhcpAck (
 \r
   @retval EFI_SUCCESS           The DNS information is got from the DHCP ACK.\r
   @retval EFI_OUT_OF_RESOURCES  Failed to allocate memory.\r
+  @retval EFI_NO_MEDIA          There was a media error.\r
   @retval Others                Other errors as indicated.\r
+\r
 **/\r
 EFI_STATUS\r
 IScsiDoDhcp (\r
@@ -358,11 +360,21 @@ IScsiDoDhcp (
   EFI_STATUS              Status;\r
   EFI_DHCP4_PACKET_OPTION *ParaList;\r
   EFI_DHCP4_CONFIG_DATA   Dhcp4ConfigData;\r
+  BOOLEAN                 MediaPresent;\r
 \r
   Dhcp4Handle = NULL;\r
   Dhcp4       = NULL;\r
   ParaList    = NULL;\r
 \r
+  //\r
+  // Check media status before do DHCP\r
+  //\r
+  MediaPresent = TRUE;\r
+  NetLibDetectMedia (Controller, &MediaPresent);\r
+  if (!MediaPresent) {\r
+    return EFI_NO_MEDIA;\r
+  }\r
+\r
   //\r
   // Create a DHCP4 child instance and get the protocol.\r
   //\r
@@ -432,7 +444,7 @@ IScsiDoDhcp (
 ON_EXIT:\r
 \r
   if (ParaList != NULL) {\r
-    gBS->FreePool (ParaList);\r
+    FreePool (ParaList);\r
   }\r
 \r
   if (Dhcp4 != NULL) {\r