]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4Config.c
sync comments, fix function header, rename variable name to follow coding style.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Ip4ConfigDxe / Ip4Config.c
index 326fb4dc335c3b0e602a073655430a29a8602660..736299bec026fa1ff9caa1410ce14c31080aab5e 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
-Copyright (c) 2006 - 2007, Intel Corporation\r
+Copyright (c) 2006 - 2008, Intel Corporation                                                         \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
@@ -24,6 +24,16 @@ Abstract:
 \r
 IP4_CONFIG_INSTANCE *mIp4ConfigNicList[MAX_IP4_CONFIG_IN_VARIABLE];\r
 \r
+/**\r
+  Callback function when DHCP process finished. It will save the\r
+  retrieved IP configure parameter from DHCP to the NVRam.\r
+\r
+  @param  Event                  The callback event\r
+  @param  Context                Opaque context to the callback\r
+\r
+  @return None\r
+\r
+**/\r
 VOID\r
 EFIAPI\r
 Ip4ConfigOnDhcp4Complete (\r
@@ -44,7 +54,6 @@ Ip4ConfigOnDhcp4Complete (
   @retval EFI_SUCCESS            The name or address of the NIC are returned.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 EFIAPI\r
 EfiNicIp4ConfigGetName (\r
@@ -62,11 +71,11 @@ EfiNicIp4ConfigGetName (
   Instance = IP4_CONFIG_INSTANCE_FROM_NIC_IP4CONFIG (This);\r
 \r
   if (Name != NULL) {\r
-    NetCopyMem (Name, Instance->NicName, IP4_NIC_NAME_LENGTH);\r
+    CopyMem (Name, Instance->NicName, IP4_NIC_NAME_LENGTH);\r
   }\r
 \r
   if (NicAddr != NULL) {\r
-    CopyMem (NicAddr, &Instance->NicAddr, sizeof (NIC_ADDR));\r
+    CopyMem (NicAddr, &Instance->NicAddr, sizeof (*NicAddr));\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -105,7 +114,7 @@ Ip4ConfigGetNicInfo (
   Config = Ip4ConfigFindNicVariable (Variable, NicAddr);\r
 \r
   if (Config == NULL) {\r
-    NetFreePool (Variable);\r
+    gBS->FreePool (Variable);\r
     return NULL;\r
   }\r
 \r
@@ -118,14 +127,14 @@ Ip4ConfigGetNicInfo (
     Ip4ConfigWriteVariable (NewVariable);\r
 \r
     if (NewVariable != NULL) {\r
-      NetFreePool (NewVariable);\r
+      gBS->FreePool (NewVariable);\r
     };\r
 \r
-    NetFreePool (Config);\r
+    gBS->FreePool (Config);\r
     Config = NULL;\r
   }\r
 \r
-  NetFreePool (Variable);\r
+  gBS->FreePool (Variable);\r
   return Config;\r
 }\r
 \r
@@ -179,12 +188,13 @@ EfiNicIp4ConfigGetInfo (
     Status = EFI_BUFFER_TOO_SMALL;\r
   } else {\r
     Status = EFI_SUCCESS;\r
-    NetCopyMem (NicConfig, Config, Len);\r
+    CopyMem (NicConfig, Config, Len);\r
+    Ip4ConfigFixRouteTablePointer (&NicConfig->Ip4Info);\r
   }\r
 \r
   *ConfigLen = Len;\r
 \r
-  NetFreePool (Config);\r
+  gBS->FreePool (Config);\r
   return Status;\r
 }\r
 \r
@@ -253,14 +263,14 @@ EfiNicIp4ConfigSetInfo (
   Status      = Ip4ConfigWriteVariable (NewVariable);\r
 \r
   if (NewVariable != NULL) {\r
-    NetFreePool (NewVariable);\r
+    gBS->FreePool (NewVariable);\r
   }\r
 \r
   //\r
   // Variable is NULL when saving the first configure parameter\r
   //\r
   if (Variable != NULL) {\r
-    NetFreePool (Variable);\r
+    gBS->FreePool (Variable);\r
   }\r
 \r
   if (EFI_ERROR (Status)) {\r
@@ -272,6 +282,7 @@ EfiNicIp4ConfigSetInfo (
   //\r
   if (Reconfig && (Instance->ReconfigEvent != NULL)) {\r
     Status = gBS->SignalEvent (Instance->ReconfigEvent);\r
+    NetLibDispatchDpc ();\r
   }\r
 \r
   return Status;\r
@@ -313,7 +324,7 @@ EfiIp4ConfigStart (
 \r
   Instance = IP4_CONFIG_INSTANCE_FROM_IP4CONFIG (This);\r
 \r
-  OldTpl = NET_RAISE_TPL (NET_TPL_LOCK);\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   if (Instance->State != IP4_CONFIG_STATE_IDLE) {\r
     Status = EFI_ALREADY_STARTED;\r
@@ -415,7 +426,7 @@ EfiIp4ConfigStart (
   //\r
   Status = gBS->CreateEvent (\r
                   EVT_NOTIFY_SIGNAL,\r
-                  NET_TPL_EVENT,\r
+                  TPL_CALLBACK,\r
                   Ip4ConfigOnDhcp4Complete,\r
                   Instance,\r
                   &Instance->Dhcp4Event\r
@@ -440,7 +451,9 @@ ON_ERROR:
   }\r
 \r
 ON_EXIT:\r
-  NET_RESTORE_TPL (OldTpl);\r
+  gBS->RestoreTPL (OldTpl);\r
+\r
+  NetLibDispatchDpc ();\r
 \r
   return Status;\r
 }\r
@@ -473,7 +486,7 @@ EfiIp4ConfigStop (
   Instance = IP4_CONFIG_INSTANCE_FROM_IP4CONFIG (This);\r
 \r
   Status = EFI_SUCCESS;\r
-  OldTpl = NET_RAISE_TPL (NET_TPL_LOCK);\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   if (Instance->State == IP4_CONFIG_STATE_IDLE) {\r
     Status = EFI_NOT_STARTED;\r
@@ -488,7 +501,7 @@ EfiIp4ConfigStop (
   Ip4ConfigCleanConfig (Instance);\r
 \r
 ON_EXIT:\r
-  NET_RESTORE_TPL (OldTpl);\r
+  gBS->RestoreTPL (OldTpl);\r
 \r
   return Status;\r
 }\r
@@ -528,7 +541,7 @@ EfiIp4ConfigGetData (
   Instance  = IP4_CONFIG_INSTANCE_FROM_IP4CONFIG (This);\r
 \r
   Status = EFI_SUCCESS;\r
-  OldTpl = NET_RAISE_TPL (NET_TPL_LOCK);\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   if (Instance->State == IP4_CONFIG_STATE_IDLE) {\r
     Status = EFI_NOT_STARTED;\r
@@ -554,14 +567,15 @@ EfiIp4ConfigGetData (
     if ((*ConfigDataSize < Len) || (ConfigData == NULL)) {\r
       Status = EFI_BUFFER_TOO_SMALL;\r
     } else {\r
-      NetCopyMem (ConfigData, &NicConfig->Ip4Info, Len);\r
+      CopyMem (ConfigData, &NicConfig->Ip4Info, Len);\r
+      Ip4ConfigFixRouteTablePointer (ConfigData);\r
     }\r
 \r
     *ConfigDataSize = Len;\r
   }\r
 \r
 ON_EXIT:\r
-  NET_RESTORE_TPL (OldTpl);\r
+  gBS->RestoreTPL (OldTpl);\r
 \r
   return Status;\r
 }\r
@@ -590,6 +604,8 @@ Ip4ConfigOnDhcp4Complete (
   EFI_STATUS                Status;\r
   BOOLEAN                   Perment;\r
   IP4_ADDR                  Subnet;\r
+  IP4_ADDR                  Ip1;\r
+  IP4_ADDR                  Ip2;\r
 \r
   Instance = (IP4_CONFIG_INSTANCE *) Context;\r
   ASSERT (Instance->Dhcp4 != NULL);\r
@@ -617,18 +633,19 @@ Ip4ConfigOnDhcp4Complete (
     if (Instance->NicConfig != NULL) {\r
       ASSERT (Instance->NicConfig->Source == IP4_CONFIG_SOURCE_DHCP);\r
       Perment = Instance->NicConfig->Perment;\r
-      NetFreePool (Instance->NicConfig);\r
+      gBS->FreePool (Instance->NicConfig);\r
     }\r
 \r
-    Instance->NicConfig = NetAllocatePool (sizeof (NIC_IP4_CONFIG_INFO) +\r
-                                           sizeof (EFI_IP4_ROUTE_TABLE));\r
+    Instance->NicConfig = AllocatePool (sizeof (NIC_IP4_CONFIG_INFO) + 2* sizeof (EFI_IP4_ROUTE_TABLE));\r
 \r
     if (Instance->NicConfig == NULL) {\r
       Instance->Result = EFI_OUT_OF_RESOURCES;\r
       goto ON_EXIT;\r
     }\r
 \r
-    CopyMem (&Instance->NicConfig->NicAddr, &Instance->NicAddr, sizeof (NIC_ADDR));\r
+    Instance->NicConfig->Ip4Info.RouteTable = (EFI_IP4_ROUTE_TABLE *) (Instance->NicConfig + 1);\r
+\r
+    CopyMem (&Instance->NicConfig->NicAddr, &Instance->NicAddr, sizeof (Instance->NicConfig->NicAddr));\r
     Instance->NicConfig->Source  = IP4_CONFIG_SOURCE_DHCP;\r
     Instance->NicConfig->Perment = Perment;\r
 \r
@@ -641,20 +658,24 @@ Ip4ConfigOnDhcp4Complete (
     //\r
     Ip4Config->RouteTableSize    = 1;\r
 \r
-    Subnet = EFI_NTOHL (Dhcp4Mode.ClientAddress) & EFI_NTOHL (Dhcp4Mode.SubnetMask);\r
+    CopyMem (&Ip1, &Dhcp4Mode.ClientAddress, sizeof (IP4_ADDR));\r
+    CopyMem (&Ip2, &Dhcp4Mode.SubnetMask, sizeof (IP4_ADDR));\r
 \r
-    EFI_IP4 (Ip4Config->RouteTable[0].SubnetAddress)  = HTONL (Subnet);\r
-    Ip4Config->RouteTable[0].SubnetMask               = Dhcp4Mode.SubnetMask;\r
-    EFI_IP4 (Ip4Config->RouteTable[0].GatewayAddress) = 0;\r
+    Subnet = Ip1 & Ip2;\r
+\r
+    CopyMem (&Ip4Config->RouteTable[0].SubnetAddress, &Subnet, sizeof (EFI_IPv4_ADDRESS));\r
+    CopyMem (&Ip4Config->RouteTable[0].SubnetMask, &Dhcp4Mode.SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
+    ZeroMem (&Ip4Config->RouteTable[0].GatewayAddress, sizeof (EFI_IPv4_ADDRESS));\r
 \r
     //\r
     // Create a route if there is a default router.\r
     //\r
-    if (EFI_IP4 (Dhcp4Mode.RouterAddress) != 0) {\r
-      Ip4Config->RouteTableSize                         = 2;\r
-      EFI_IP4 (Ip4Config->RouteTable[1].SubnetAddress)  = 0;\r
-      EFI_IP4 (Ip4Config->RouteTable[1].SubnetMask)     = 0;\r
-      Ip4Config->RouteTable[1].GatewayAddress           = Dhcp4Mode.RouterAddress;\r
+    if (!EFI_IP4_EQUAL (&Dhcp4Mode.RouterAddress, &mZeroIp4Addr)) {\r
+      Ip4Config->RouteTableSize = 2;\r
+\r
+      ZeroMem (&Ip4Config->RouteTable[1].SubnetAddress, sizeof (EFI_IPv4_ADDRESS));\r
+      ZeroMem (&Ip4Config->RouteTable[1].SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
+      CopyMem (&Ip4Config->RouteTable[1].GatewayAddress, &Dhcp4Mode.RouterAddress, sizeof (EFI_IPv4_ADDRESS));\r
     }\r
 \r
     Instance->Result = EFI_SUCCESS;\r
@@ -669,6 +690,9 @@ Ip4ConfigOnDhcp4Complete (
 ON_EXIT:\r
   gBS->SignalEvent (Instance->DoneEvent);\r
   Ip4ConfigCleanDhcp4 (Instance);\r
+\r
+  NetLibDispatchDpc ();\r
+\r
   return ;\r
 }\r
 \r
@@ -718,7 +742,7 @@ Ip4ConfigCleanDhcp4 (
 \r
 \r
 /**\r
-  Clean up all the configuration parameters\r
+  Clean up all the configuration parameters.\r
 \r
   @param  Instance               The IP4 configure instance\r
 \r
@@ -731,7 +755,7 @@ Ip4ConfigCleanConfig (
   )\r
 {\r
   if (Instance->NicConfig != NULL) {\r
-    NetFreePool (Instance->NicConfig);\r
+    gBS->FreePool (Instance->NicConfig);\r
     Instance->NicConfig = NULL;\r
   }\r
 \r