]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Impl.c
Patch to remove STATIC modifier. This is on longer recommended by EFI Framework codin...
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Udp4Dxe / Udp4Impl.c
index dd7522e91f85a2dd53ae3dd42cd2396b6b97dc9c..ab50830b680281d7281502ad4caa2b0f899ad743 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
@@ -25,7 +25,6 @@ Abstract:
 \r
 UINT16  mUdp4RandomPort;\r
 \r
-STATIC\r
 VOID\r
 EFIAPI\r
 Udp4CheckTimeout (\r
@@ -33,15 +32,13 @@ Udp4CheckTimeout (
   IN VOID       *Context\r
   );\r
 \r
-STATIC\r
 BOOLEAN\r
 Udp4FindInstanceByPort (\r
-  IN NET_LIST_ENTRY    *InstanceList,\r
+  IN LIST_ENTRY        *InstanceList,\r
   IN EFI_IPv4_ADDRESS  *Address,\r
   IN UINT16            Port\r
   );\r
 \r
-STATIC\r
 VOID\r
 Udp4DgramSent (\r
   IN EFI_STATUS  Status,\r
@@ -50,7 +47,6 @@ Udp4DgramSent (
   IN VOID        *NotifyData\r
   );\r
 \r
-STATIC\r
 VOID\r
 Udp4DgramRcvd (\r
   IN EFI_STATUS            Status,\r
@@ -60,7 +56,6 @@ Udp4DgramRcvd (
   IN VOID                  *Context\r
   );\r
 \r
-STATIC\r
 EFI_STATUS\r
 Udp4CancelTokens (\r
   IN NET_MAP       *Map,\r
@@ -68,14 +63,12 @@ Udp4CancelTokens (
   IN VOID          *Arg OPTIONAL\r
   );\r
 \r
-STATIC\r
 BOOLEAN\r
 Udp4MatchDgram (\r
   IN UDP4_INSTANCE_DATA     *Instance,\r
   IN EFI_UDP4_SESSION_DATA  *Udp4Session\r
   );\r
 \r
-STATIC\r
 VOID\r
 EFIAPI\r
 Udp4RecycleRxDataWrap (\r
@@ -83,7 +76,6 @@ Udp4RecycleRxDataWrap (
   IN VOID       *Context\r
   );\r
 \r
-STATIC\r
 UDP4_RXDATA_WRAP *\r
 Udp4WrapRxData (\r
   IN UDP4_INSTANCE_DATA     *Instance,\r
@@ -91,7 +83,6 @@ Udp4WrapRxData (
   IN EFI_UDP4_RECEIVE_DATA  *RxData\r
   );\r
 \r
-STATIC\r
 UINTN\r
 Udp4EnqueueDgram (\r
   IN UDP4_SERVICE_DATA      *Udp4Service,\r
@@ -99,13 +90,11 @@ Udp4EnqueueDgram (
   IN EFI_UDP4_RECEIVE_DATA  *RxData\r
   );\r
 \r
-STATIC\r
 VOID\r
 Udp4DeliverDgram (\r
   IN UDP4_SERVICE_DATA  *Udp4Service\r
   );\r
 \r
-STATIC\r
 VOID\r
 Udp4Demultiplex (\r
   IN UDP4_SERVICE_DATA     *Udp4Service,\r
@@ -113,7 +102,6 @@ Udp4Demultiplex (
   IN NET_BUF               *Packet\r
   );\r
 \r
-STATIC\r
 VOID\r
 Udp4IcmpHandler (\r
   IN UDP4_SERVICE_DATA     *Udp4Service,\r
@@ -122,7 +110,6 @@ Udp4IcmpHandler (
   IN NET_BUF               *Packet\r
   );\r
 \r
-STATIC\r
 VOID\r
 Udp4SendPortUnreach (\r
   IN IP_IO                 *IpIo,\r
@@ -153,13 +140,15 @@ Udp4CreateService (
   EFI_STATUS       Status;\r
   IP_IO_OPEN_DATA  OpenData;\r
 \r
+  ZeroMem (Udp4Service, sizeof (UDP4_SERVICE_DATA));\r
+\r
   Udp4Service->Signature        = UDP4_SERVICE_DATA_SIGNATURE;\r
   Udp4Service->ServiceBinding   = mUdp4ServiceBinding;\r
   Udp4Service->ImageHandle      = ImageHandle;\r
   Udp4Service->ControllerHandle = ControllerHandle;\r
   Udp4Service->ChildrenNumber   = 0;\r
 \r
-  NetListInit (&Udp4Service->ChildrenList);\r
+  InitializeListHead (&Udp4Service->ChildrenList);\r
 \r
   //\r
   // Create the IpIo for this service context.\r
@@ -172,7 +161,7 @@ Udp4CreateService (
   //\r
   // Set the OpenData used to open the IpIo.\r
   //\r
-  OpenData.IpConfigData                 = mIpIoDefaultIpConfigData;\r
+  CopyMem (&OpenData.IpConfigData, &mIpIoDefaultIpConfigData, sizeof (OpenData.IpConfigData));\r
   OpenData.IpConfigData.AcceptBroadcast = TRUE;\r
   OpenData.RcvdContext                  = (VOID *) Udp4Service;\r
   OpenData.SndContext                   = NULL;\r
@@ -184,7 +173,7 @@ Udp4CreateService (
   //\r
   Status = IpIoOpen (Udp4Service->IpIo, &OpenData);\r
   if (EFI_ERROR (Status)) {\r
-    goto RELEASE_IPIO;\r
+    goto ON_ERROR;\r
   }\r
 \r
   //\r
@@ -192,13 +181,13 @@ Udp4CreateService (
   //\r
   Status = gBS->CreateEvent (\r
                   EVT_TIMER | EVT_NOTIFY_SIGNAL,\r
-                  NET_TPL_FAST_TIMER,\r
+                  TPL_CALLBACK,\r
                   Udp4CheckTimeout,\r
                   Udp4Service,\r
                   &Udp4Service->TimeoutEvent\r
                   );\r
   if (EFI_ERROR (Status)) {\r
-    goto RELEASE_IPIO;\r
+    goto ON_ERROR;\r
   }\r
 \r
   //\r
@@ -210,18 +199,16 @@ Udp4CreateService (
                   UDP4_TIMEOUT_INTERVAL\r
                   );\r
   if (EFI_ERROR (Status)) {\r
-    goto RELEASE_ALL;\r
+    goto ON_ERROR;\r
   }\r
 \r
-  Udp4Service->MacString = NULL;\r
-\r
   return EFI_SUCCESS;\r
 \r
-RELEASE_ALL:\r
-\r
-  gBS->CloseEvent (Udp4Service->TimeoutEvent);\r
+ON_ERROR:\r
 \r
-RELEASE_IPIO:\r
+  if (Udp4Service->TimeoutEvent != NULL) {\r
+    gBS->CloseEvent (Udp4Service->TimeoutEvent);\r
+  }\r
 \r
   IpIoDestroy (Udp4Service->IpIo);\r
 \r
@@ -270,7 +257,6 @@ Udp4CleanService (
   @return None.\r
 \r
 **/\r
-STATIC\r
 VOID\r
 EFIAPI\r
 Udp4CheckTimeout (\r
@@ -279,10 +265,10 @@ Udp4CheckTimeout (
   )\r
 {\r
   UDP4_SERVICE_DATA   *Udp4Service;\r
-  NET_LIST_ENTRY      *Entry;\r
+  LIST_ENTRY          *Entry;\r
   UDP4_INSTANCE_DATA  *Instance;\r
-  NET_LIST_ENTRY      *WrapEntry;\r
-  NET_LIST_ENTRY      *NextEntry;\r
+  LIST_ENTRY          *WrapEntry;\r
+  LIST_ENTRY          *NextEntry;\r
   UDP4_RXDATA_WRAP    *Wrap;\r
 \r
   Udp4Service = (UDP4_SERVICE_DATA *) Context;\r
@@ -306,7 +292,7 @@ Udp4CheckTimeout (
       //\r
       // Iterate all the rxdatas belonging to this udp instance.\r
       //\r
-      Wrap = NET_LIST_USER_STRUCT (Entry, UDP4_RXDATA_WRAP, Link);\r
+      Wrap = NET_LIST_USER_STRUCT (WrapEntry, UDP4_RXDATA_WRAP, Link);\r
 \r
       if (Wrap->TimeoutTick <= UDP4_TIMEOUT_INTERVAL / 1000) {\r
         //\r
@@ -344,9 +330,9 @@ Udp4InitInstance (
   //\r
   // Init the lists.\r
   //\r
-  NetListInit (&Instance->Link);\r
-  NetListInit (&Instance->RcvdDgramQue);\r
-  NetListInit (&Instance->DeliveredDgramQue);\r
+  InitializeListHead (&Instance->Link);\r
+  InitializeListHead (&Instance->RcvdDgramQue);\r
+  InitializeListHead (&Instance->DeliveredDgramQue);\r
 \r
   //\r
   // Init the NET_MAPs.\r
@@ -359,7 +345,7 @@ Udp4InitInstance (
   // Save the pointer to the UDP4_SERVICE_DATA, and initialize other members.\r
   //\r
   Instance->Udp4Service = Udp4Service;\r
-  Instance->Udp4Proto   = mUdp4Protocol;\r
+  CopyMem (&Instance->Udp4Proto, &mUdp4Protocol, sizeof (Instance->Udp4Proto));\r
   Instance->IcmpError   = EFI_SUCCESS;\r
   Instance->Configured  = FALSE;\r
   Instance->IsNoMapping = FALSE;\r
@@ -397,15 +383,14 @@ Udp4CleanInstance (
   @return Is the specified <Address, Port> pair found or not.\r
 \r
 **/\r
-STATIC\r
 BOOLEAN\r
 Udp4FindInstanceByPort (\r
-  IN NET_LIST_ENTRY    *InstanceList,\r
+  IN LIST_ENTRY        *InstanceList,\r
   IN EFI_IPv4_ADDRESS  *Address,\r
   IN UINT16            Port\r
   )\r
 {\r
-  NET_LIST_ENTRY        *Entry;\r
+  LIST_ENTRY            *Entry;\r
   UDP4_INSTANCE_DATA    *Instance;\r
   EFI_UDP4_CONFIG_DATA  *ConfigData;\r
 \r
@@ -424,7 +409,7 @@ Udp4FindInstanceByPort (
       continue;\r
     }\r
 \r
-    if (EFI_IP_EQUAL (ConfigData->StationAddress, *Address) &&\r
+    if (EFI_IP4_EQUAL (&ConfigData->StationAddress, Address) &&\r
       (ConfigData->StationPort == Port)) {\r
       //\r
       // if both the address and the port are the same, return TRUE.\r
@@ -457,7 +442,7 @@ Udp4FindInstanceByPort (
 **/\r
 EFI_STATUS\r
 Udp4Bind (\r
-  IN NET_LIST_ENTRY        *InstanceList,\r
+  IN LIST_ENTRY            *InstanceList,\r
   IN EFI_UDP4_CONFIG_DATA  *ConfigData\r
   )\r
 {\r
@@ -566,8 +551,8 @@ Udp4IsReconfigurable (
     }\r
 \r
     if (!NewConfigData->UseDefaultAddress &&\r
-      (!EFI_IP_EQUAL (NewConfigData->StationAddress, OldConfigData->StationAddress) ||\r
-      !EFI_IP_EQUAL (NewConfigData->SubnetMask, OldConfigData->SubnetMask))) {\r
+      (!EFI_IP4_EQUAL (&NewConfigData->StationAddress, &OldConfigData->StationAddress) ||\r
+      !EFI_IP4_EQUAL (&NewConfigData->SubnetMask, &OldConfigData->SubnetMask))) {\r
       //\r
       // If the instance doesn't use the default address, and the new address or\r
       // new subnet mask is different from the old values.\r
@@ -576,15 +561,14 @@ Udp4IsReconfigurable (
     }\r
   }\r
 \r
-  if (!EFI_IP_EQUAL (NewConfigData->RemoteAddress, OldConfigData->RemoteAddress)) {\r
+  if (!EFI_IP4_EQUAL (&NewConfigData->RemoteAddress, &OldConfigData->RemoteAddress)) {\r
     //\r
     // The remoteaddress is not the same.\r
     //\r
     return FALSE;\r
   }\r
 \r
-  if ((EFI_IP4 (NewConfigData->RemoteAddress) != 0) &&\r
-    (NewConfigData->RemotePort != OldConfigData->RemotePort)) {\r
+  if (!EFI_IP4_EQUAL (&NewConfigData->RemoteAddress, &mZeroIp4Addr) && (NewConfigData->RemotePort != OldConfigData->RemotePort)) {\r
     //\r
     // The RemotePort differs if it's designated in the configdata.\r
     //\r
@@ -613,13 +597,14 @@ Udp4BuildIp4ConfigData (
   IN EFI_IP4_CONFIG_DATA   *Ip4ConfigData\r
   )\r
 {\r
-  *Ip4ConfigData                   = mIpIoDefaultIpConfigData;\r
+  CopyMem (Ip4ConfigData, &mIpIoDefaultIpConfigData, sizeof (*Ip4ConfigData));\r
+\r
   Ip4ConfigData->DefaultProtocol   = EFI_IP_PROTO_UDP;\r
   Ip4ConfigData->AcceptBroadcast   = Udp4ConfigData->AcceptBroadcast;\r
   Ip4ConfigData->AcceptPromiscuous = Udp4ConfigData->AcceptPromiscuous;\r
   Ip4ConfigData->UseDefaultAddress = Udp4ConfigData->UseDefaultAddress;\r
-  Ip4ConfigData->StationAddress    = Udp4ConfigData->StationAddress;\r
-  Ip4ConfigData->SubnetMask        = Udp4ConfigData->SubnetMask;\r
+  CopyMem (&Ip4ConfigData->StationAddress, &Udp4ConfigData->StationAddress, sizeof (EFI_IPv4_ADDRESS));\r
+  CopyMem (&Ip4ConfigData->SubnetMask, &Udp4ConfigData->SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
 \r
   //\r
   // use the -1 magic number to disable the receiving process of the ip instance.\r
@@ -666,6 +651,7 @@ Udp4ValidateTxToken (
   EFI_UDP4_CONFIG_DATA    *ConfigData;\r
   EFI_UDP4_SESSION_DATA   *UdpSessionData;\r
   IP4_ADDR                SourceAddress;\r
+  IP4_ADDR                GatewayAddress;\r
 \r
   if (TxToken->Event == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -699,12 +685,15 @@ Udp4ValidateTxToken (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  if ((TxData->GatewayAddress != NULL) &&\r
-    !Ip4IsUnicast(EFI_NTOHL (*(TxData->GatewayAddress)), 0)) {\r
-    //\r
-    // The specified GatewayAddress is not a unicast IPv4 address while it's not 0.\r
-    //\r
-    return EFI_INVALID_PARAMETER;\r
+  if (TxData->GatewayAddress != NULL) {\r
+    CopyMem (&GatewayAddress, TxData->GatewayAddress, sizeof (IP4_ADDR));\r
+\r
+    if (!Ip4IsUnicast (NTOHL (GatewayAddress), 0)) {\r
+      //\r
+      // The specified GatewayAddress is not a unicast IPv4 address while it's not 0.\r
+      //\r
+      return EFI_INVALID_PARAMETER;\r
+    }\r
   }\r
 \r
   ConfigData     = &Instance->ConfigData;\r
@@ -712,9 +701,9 @@ Udp4ValidateTxToken (
 \r
   if (UdpSessionData != NULL) {\r
 \r
-    SourceAddress = EFI_NTOHL (UdpSessionData->SourceAddress);\r
+    CopyMem (&SourceAddress, &UdpSessionData->SourceAddress, sizeof (IP4_ADDR));\r
 \r
-    if ((SourceAddress != 0) && !Ip4IsUnicast (SourceAddress, 0)) {\r
+    if ((SourceAddress != 0) && !Ip4IsUnicast (HTONL (SourceAddress), 0)) {\r
       //\r
       // Check whether SourceAddress is a valid IPv4 address in case it's not zero.\r
       // The configured station address is used if SourceAddress is zero.\r
@@ -729,13 +718,13 @@ Udp4ValidateTxToken (
       return EFI_INVALID_PARAMETER;\r
     }\r
 \r
-    if (EFI_IP4 (UdpSessionData->DestinationAddress) == 0) {\r
+    if (EFI_IP4_EQUAL (&UdpSessionData->DestinationAddress, &mZeroIp4Addr)) {\r
       //\r
       // The DestinationAddress specified in the UdpSessionData is 0.\r
       //\r
       return EFI_INVALID_PARAMETER;\r
     }\r
-  } else if (EFI_IP4 (ConfigData->RemoteAddress) == 0) {\r
+  } else if (EFI_IP4_EQUAL (&ConfigData->RemoteAddress, &mZeroIp4Addr)) {\r
     //\r
     // the configured RemoteAddress is all zero, and the user doens't override the\r
     // destination address.\r
@@ -813,7 +802,7 @@ Udp4Checksum (
 \r
   Checksum  = NetAddChecksum (Checksum, HTONS ((UINT16) Packet->TotalSize));\r
 \r
-  return ~Checksum;\r
+  return (UINT16) ~Checksum;\r
 }\r
 \r
 \r
@@ -866,7 +855,6 @@ Udp4RemoveToken (
   @return None.\r
 \r
 **/\r
-STATIC\r
 VOID\r
 Udp4DgramSent (\r
   IN EFI_STATUS  Status,\r
@@ -887,6 +875,7 @@ Udp4DgramSent (
     //\r
     Token->Status = Status;\r
     gBS->SignalEvent (Token->Event);\r
+    NetLibDispatchDpc ();\r
   }\r
 }\r
 \r
@@ -905,7 +894,6 @@ Udp4DgramSent (
   @return None.\r
 \r
 **/\r
-STATIC\r
 VOID\r
 Udp4DgramRcvd (\r
   IN EFI_STATUS            Status,\r
@@ -931,6 +919,12 @@ Udp4DgramRcvd (
     //\r
     Udp4IcmpHandler ((UDP4_SERVICE_DATA *) Context, IcmpError, NetSession, Packet);\r
   }\r
+\r
+  //\r
+  // Dispatch the DPC queued by the NotifyFunction of the rx token's events\r
+  // which are signaled with received data.\r
+  //\r
+  NetLibDispatchDpc ();\r
 }\r
 \r
 \r
@@ -958,7 +952,7 @@ Udp4LeaveGroup (
 \r
   McastIp = Arg;\r
 \r
-  if ((McastIp != NULL) && ((UINTN) EFI_IP4 (*McastIp) != (UINTN) (Item->Key))) {\r
+  if ((McastIp != NULL) && (!EFI_IP4_EQUAL (McastIp, &(Item->Key)))) {\r
     //\r
     // McastIp is not NULL and the multicast address contained in the Item\r
     // is not the same as McastIp.\r
@@ -997,7 +991,6 @@ Udp4LeaveGroup (
                                  cancelled.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 Udp4CancelTokens (\r
   IN NET_MAP       *Map,\r
@@ -1029,11 +1022,10 @@ Udp4CancelTokens (
     // The token is a receive token. Abort it and remove it from the Map.\r
     //\r
     TokenToCancel = (EFI_UDP4_COMPLETION_TOKEN *) Item->Key;\r
+    NetMapRemoveItem (Map, Item, NULL);\r
 \r
     TokenToCancel->Status = EFI_ABORTED;\r
     gBS->SignalEvent (TokenToCancel->Event);\r
-\r
-    NetMapRemoveItem (Map, Item, NULL);\r
   }\r
 \r
   if (Arg != NULL) {\r
@@ -1053,28 +1045,23 @@ Udp4CancelTokens (
 \r
 **/\r
 VOID\r
-Udp4FlushRxData (\r
-  IN NET_LIST_ENTRY  *RcvdDgramQue\r
+Udp4FlushRcvdDgram (\r
+  IN UDP4_INSTANCE_DATA  *Instance\r
   )\r
 {\r
   UDP4_RXDATA_WRAP  *Wrap;\r
-  EFI_TPL           OldTpl;\r
-\r
-  OldTpl = NET_RAISE_TPL (NET_TPL_RECYCLE);\r
 \r
-  while (!NetListIsEmpty (RcvdDgramQue)) {\r
+  while (!IsListEmpty (&Instance->RcvdDgramQue)) {\r
     //\r
     // Iterate all the Wraps in the RcvdDgramQue.\r
     //\r
-    Wrap = NET_LIST_HEAD (RcvdDgramQue, UDP4_RXDATA_WRAP, Link);\r
+    Wrap = NET_LIST_HEAD (&Instance->RcvdDgramQue, UDP4_RXDATA_WRAP, Link);\r
 \r
     //\r
     // The Wrap will be removed from the RcvdDgramQue by this function call.\r
     //\r
     Udp4RecycleRxDataWrap (NULL, (VOID *) Wrap);\r
   }\r
-\r
-  NET_RESTORE_TPL (OldTpl);\r
 }\r
 \r
 \r
@@ -1141,7 +1128,6 @@ Udp4InstanceCancelToken (
   @return The udp datagram matches the receiving requirments of the Instance or not.\r
 \r
 **/\r
-STATIC\r
 BOOLEAN\r
 Udp4MatchDgram (\r
   IN UDP4_INSTANCE_DATA     *Instance,\r
@@ -1168,16 +1154,16 @@ Udp4MatchDgram (
     return FALSE;\r
   }\r
 \r
-  if ((EFI_IP4 (ConfigData->RemoteAddress) != 0) &&\r
-    !EFI_IP_EQUAL (ConfigData->RemoteAddress, Udp4Session->SourceAddress)) {\r
+  if (!EFI_IP4_EQUAL (&ConfigData->RemoteAddress, &mZeroIp4Addr) &&\r
+    !EFI_IP4_EQUAL (&ConfigData->RemoteAddress, &Udp4Session->SourceAddress)) {\r
     //\r
     // This datagram doesn't come from the instance's specified sender.\r
     //\r
     return FALSE;\r
   }\r
 \r
-  if ((EFI_IP4 (ConfigData->StationAddress) == 0) ||\r
-    EFI_IP_EQUAL (Udp4Session->DestinationAddress, ConfigData->StationAddress)) {\r
+  if (EFI_IP4_EQUAL (&ConfigData->StationAddress, &mZeroIp4Addr) ||\r
+    EFI_IP4_EQUAL (&Udp4Session->DestinationAddress, &ConfigData->StationAddress)) {\r
     //\r
     // The instance is configured to receive datagrams destinated to any station IP or\r
     // the destination address of this datagram matches the configured station IP.\r
@@ -1185,7 +1171,7 @@ Udp4MatchDgram (
     return TRUE;\r
   }\r
 \r
-  Destination = EFI_IP4 (Udp4Session->DestinationAddress);\r
+  CopyMem (&Destination, &Udp4Session->DestinationAddress, sizeof (IP4_ADDR));\r
 \r
   if (IP4_IS_LOCAL_BROADCAST (Destination) && ConfigData->AcceptBroadcast) {\r
     //\r
@@ -1215,7 +1201,6 @@ Udp4MatchDgram (
   @return None.\r
 \r
 **/\r
-STATIC\r
 VOID\r
 EFIAPI\r
 Udp4RecycleRxDataWrap (\r
@@ -1230,7 +1215,7 @@ Udp4RecycleRxDataWrap (
   //\r
   // Remove the Wrap from the list it belongs to.\r
   //\r
-  NetListRemoveEntry (&Wrap->Link);\r
+  RemoveEntryList (&Wrap->Link);\r
 \r
   //\r
   // Free the Packet associated with this Wrap.\r
@@ -1242,7 +1227,7 @@ Udp4RecycleRxDataWrap (
   //\r
   gBS->CloseEvent (Wrap->RxData.RecycleSignal);\r
 \r
-  NetFreePool (Wrap);\r
+  gBS->FreePool (Wrap);\r
 }\r
 \r
 \r
@@ -1258,7 +1243,6 @@ Udp4RecycleRxDataWrap (
   @return Pointer to the structure wrapping the RxData and the Packet.\r
 \r
 **/\r
-STATIC\r
 UDP4_RXDATA_WRAP *\r
 Udp4WrapRxData (\r
   IN UDP4_INSTANCE_DATA     *Instance,\r
@@ -1272,28 +1256,28 @@ Udp4WrapRxData (
   //\r
   // Allocate buffer for the Wrap.\r
   //\r
-  Wrap = NetAllocatePool (sizeof (UDP4_RXDATA_WRAP) +\r
+  Wrap = AllocatePool (sizeof (UDP4_RXDATA_WRAP) +\r
          (Packet->BlockOpNum - 1) * sizeof (EFI_UDP4_FRAGMENT_DATA));\r
   if (Wrap == NULL) {\r
     return NULL;\r
   }\r
 \r
-  NetListInit (&Wrap->Link);\r
+  InitializeListHead (&Wrap->Link);\r
 \r
-  Wrap->RxData = *RxData;\r
+  CopyMem (&Wrap->RxData, RxData, sizeof (Wrap->RxData));\r
 \r
   //\r
   // Create the Recycle event.\r
   //\r
   Status = gBS->CreateEvent (\r
                   EVT_NOTIFY_SIGNAL,\r
-                  NET_TPL_RECYCLE,\r
+                  TPL_NOTIFY,\r
                   Udp4RecycleRxDataWrap,\r
                   Wrap,\r
                   &Wrap->RxData.RecycleSignal\r
                   );\r
   if (EFI_ERROR (Status)) {\r
-    NetFreePool (Wrap);\r
+    gBS->FreePool (Wrap);\r
     return NULL;\r
   }\r
 \r
@@ -1316,7 +1300,6 @@ Udp4WrapRxData (
   @return The times this datagram is enqueued.\r
 \r
 **/\r
-STATIC\r
 UINTN\r
 Udp4EnqueueDgram (\r
   IN UDP4_SERVICE_DATA      *Udp4Service,\r
@@ -1324,7 +1307,7 @@ Udp4EnqueueDgram (
   IN EFI_UDP4_RECEIVE_DATA  *RxData\r
   )\r
 {\r
-  NET_LIST_ENTRY      *Entry;\r
+  LIST_ENTRY          *Entry;\r
   UDP4_INSTANCE_DATA  *Instance;\r
   UDP4_RXDATA_WRAP    *Wrap;\r
   UINTN               Enqueued;\r
@@ -1352,7 +1335,7 @@ Udp4EnqueueDgram (
 \r
       NET_GET_REF (Packet);\r
 \r
-      NetListInsertTail (&Instance->RcvdDgramQue, &Wrap->Link);\r
+      InsertTailList (&Instance->RcvdDgramQue, &Wrap->Link);\r
 \r
       Enqueued++;\r
     }\r
@@ -1379,8 +1362,9 @@ Udp4InstanceDeliverDgram (
   EFI_UDP4_COMPLETION_TOKEN  *Token;\r
   NET_BUF                    *Dup;\r
   EFI_UDP4_RECEIVE_DATA      *RxData;\r
+  EFI_TPL                    OldTpl;\r
 \r
-  if (!NetListIsEmpty (&Instance->RcvdDgramQue) &&\r
+  if (!IsListEmpty (&Instance->RcvdDgramQue) &&\r
     !NetMapIsEmpty (&Instance->RxTokens)) {\r
 \r
     Wrap = NET_LIST_HEAD (&Instance->RcvdDgramQue, UDP4_RXDATA_WRAP, Link);\r
@@ -1397,7 +1381,7 @@ Udp4InstanceDeliverDgram (
       NetbufFree (Wrap->Packet);\r
 \r
       Wrap->Packet = Dup;\r
-    }\r
+    } \r
 \r
     NetListRemoveHead (&Instance->RcvdDgramQue);\r
 \r
@@ -1418,9 +1402,11 @@ Udp4InstanceDeliverDgram (
     Token->Status        = EFI_SUCCESS;\r
     Token->Packet.RxData = &Wrap->RxData;\r
 \r
-    gBS->SignalEvent (Token->Event);\r
+    OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+    InsertTailList (&Instance->DeliveredDgramQue, &Wrap->Link);\r
+    gBS->RestoreTPL (OldTpl);\r
 \r
-    NetListInsertTail (&Instance->DeliveredDgramQue, &Wrap->Link);\r
+    gBS->SignalEvent (Token->Event);\r
   }\r
 }\r
 \r
@@ -1433,13 +1419,12 @@ Udp4InstanceDeliverDgram (
   @return None.\r
 \r
 **/\r
-STATIC\r
 VOID\r
 Udp4DeliverDgram (\r
   IN UDP4_SERVICE_DATA  *Udp4Service\r
   )\r
 {\r
-  NET_LIST_ENTRY      *Entry;\r
+  LIST_ENTRY          *Entry;\r
   UDP4_INSTANCE_DATA  *Instance;\r
 \r
   NET_LIST_FOR_EACH (Entry, &Udp4Service->ChildrenList) {\r
@@ -1472,7 +1457,6 @@ Udp4DeliverDgram (
   @return None.\r
 \r
 **/\r
-STATIC\r
 VOID\r
 Udp4Demultiplex (\r
   IN UDP4_SERVICE_DATA     *Udp4Service,\r
@@ -1512,11 +1496,12 @@ Udp4Demultiplex (
 \r
   gRT->GetTime (&RxData.TimeStamp, NULL);\r
 \r
-  Udp4Session                               = &RxData.UdpSession;\r
-  EFI_IP4 (Udp4Session->SourceAddress)      = NetSession->Source;\r
-  EFI_IP4 (Udp4Session->DestinationAddress) = NetSession->Dest;\r
-  Udp4Session->SourcePort                   = NTOHS (Udp4Header->SrcPort);\r
-  Udp4Session->DestinationPort              = NTOHS (Udp4Header->DstPort);\r
+  Udp4Session                  = &RxData.UdpSession;\r
+  Udp4Session->SourcePort      = NTOHS (Udp4Header->SrcPort);\r
+  Udp4Session->DestinationPort = NTOHS (Udp4Header->DstPort);\r
+\r
+  CopyMem (&Udp4Session->SourceAddress, &NetSession->Source, sizeof (EFI_IPv4_ADDRESS));\r
+  CopyMem (&Udp4Session->DestinationAddress, &NetSession->Dest, sizeof (EFI_IPv4_ADDRESS));\r
 \r
   //\r
   // Trim the UDP header.\r
@@ -1563,7 +1548,6 @@ Udp4Demultiplex (
   @return None.\r
 \r
 **/\r
-STATIC\r
 VOID\r
 Udp4SendPortUnreach (\r
   IN IP_IO                 *IpIo,\r
@@ -1620,28 +1604,29 @@ Udp4SendPortUnreach (
   //\r
   // Copy the IP header of the datagram tragged the error.\r
   //\r
-  NetCopyMem (&IcmpErrHdr->IpHead, IpHdr, EFI_IP4_HEADER_LEN (IpHdr));\r
+  CopyMem (&IcmpErrHdr->IpHead, IpHdr, EFI_IP4_HEADER_LEN (IpHdr));\r
 \r
   //\r
   // Copy the UDP header.\r
   //\r
   Ptr = (UINT8 *) &IcmpErrHdr->IpHead + EFI_IP4_HEADER_LEN (IpHdr);\r
-  NetCopyMem (Ptr, Udp4Header, ICMP_ERROR_PACKET_LENGTH);\r
+  CopyMem (Ptr, Udp4Header, ICMP_ERROR_PACKET_LENGTH);\r
 \r
   //\r
   // Calculate the checksum.\r
   //\r
-  IcmpErrHdr->Head.Checksum = ~(NetbufChecksum (Packet));\r
+  IcmpErrHdr->Head.Checksum = (UINT16) ~(NetbufChecksum (Packet));\r
 \r
   //\r
   // Fill the override data.\r
   //\r
-  Override.DoNotFragment            = FALSE;\r
-  Override.TypeOfService            = 0;\r
-  Override.TimeToLive               = 255;\r
-  Override.Protocol                 = EFI_IP_PROTO_ICMP;\r
-  EFI_IP4 (Override.SourceAddress)  = NetSession->Dest;\r
-  EFI_IP4 (Override.GatewayAddress) = 0;\r
+  Override.DoNotFragment = FALSE;\r
+  Override.TypeOfService = 0;\r
+  Override.TimeToLive    = 255;\r
+  Override.Protocol      = EFI_IP_PROTO_ICMP;\r
+\r
+  CopyMem (&Override.SourceAddress, &NetSession->Dest, sizeof (EFI_IPv4_ADDRESS));\r
+  ZeroMem (&Override.GatewayAddress, sizeof (EFI_IPv4_ADDRESS));\r
 \r
   //\r
   // Send out this icmp packet.\r
@@ -1665,7 +1650,6 @@ Udp4SendPortUnreach (
   @return None.\r
 \r
 **/\r
-STATIC\r
 VOID\r
 Udp4IcmpHandler (\r
   IN UDP4_SERVICE_DATA     *Udp4Service,\r
@@ -1676,15 +1660,16 @@ Udp4IcmpHandler (
 {\r
   EFI_UDP4_HEADER        *Udp4Header;\r
   EFI_UDP4_SESSION_DATA  Udp4Session;\r
-  NET_LIST_ENTRY         *Entry;\r
+  LIST_ENTRY             *Entry;\r
   UDP4_INSTANCE_DATA     *Instance;\r
 \r
   Udp4Header = (EFI_UDP4_HEADER *) NetbufGetByte (Packet, 0, NULL);\r
 \r
-  EFI_IP4 (Udp4Session.SourceAddress)      = NetSession->Source;\r
-  EFI_IP4 (Udp4Session.DestinationAddress) = NetSession->Dest;\r
-  Udp4Session.SourcePort                   = NTOHS (Udp4Header->DstPort);\r
-  Udp4Session.DestinationPort              = NTOHS (Udp4Header->SrcPort);\r
+  CopyMem (&Udp4Session.SourceAddress, &NetSession->Source, sizeof (EFI_IPv4_ADDRESS));\r
+  CopyMem (&Udp4Session.DestinationAddress, &NetSession->Dest, sizeof (EFI_IPv4_ADDRESS));\r
+\r
+  Udp4Session.SourcePort      = NTOHS (Udp4Header->DstPort);\r
+  Udp4Session.DestinationPort = NTOHS (Udp4Header->SrcPort);\r
 \r
   NET_LIST_FOR_EACH (Entry, &Udp4Service->ChildrenList) {\r
     //\r
@@ -1695,7 +1680,7 @@ Udp4IcmpHandler (
     if (!Instance->Configured ||\r
       Instance->ConfigData.AcceptPromiscuous ||\r
       Instance->ConfigData.AcceptAnyPort ||\r
-      (EFI_IP4 (Instance->ConfigData.StationAddress) == 0)) {\r
+      EFI_IP4_EQUAL (&Instance->ConfigData.StationAddress, &mZeroIp4Addr)) {\r
       //\r
       // Don't try to deliver the ICMP error to this instance if it is not configured,\r
       // or it's configured to be promiscuous or accept any port or accept all the\r
@@ -1804,7 +1789,7 @@ Udp4SetVariableData (
   )\r
 {\r
   UINT32                  NumConfiguredInstance;\r
-  NET_LIST_ENTRY          *Entry;\r
+  LIST_ENTRY              *Entry;\r
   UINTN                   VariableDataSize;\r
   EFI_UDP4_VARIABLE_DATA  *Udp4VariableData;\r
   EFI_UDP4_SERVICE_POINT  *Udp4ServicePoint;\r
@@ -1841,7 +1826,7 @@ Udp4SetVariableData (
     VariableDataSize += sizeof (EFI_UDP4_SERVICE_POINT) * (NumConfiguredInstance - 1);\r
   }\r
 \r
-  Udp4VariableData = NetAllocatePool (VariableDataSize);\r
+  Udp4VariableData = AllocatePool (VariableDataSize);\r
   if (Udp4VariableData == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
@@ -1902,7 +1887,7 @@ Udp4SetVariableData (
              );\r
     }\r
 \r
-    NetFreePool (Udp4Service->MacString);\r
+    gBS->FreePool (Udp4Service->MacString);\r
   }\r
 \r
   Udp4Service->MacString = NewMacString;\r
@@ -1917,7 +1902,7 @@ Udp4SetVariableData (
 \r
 ON_ERROR:\r
 \r
-  NetFreePool (Udp4VariableData);\r
+  gBS->FreePool (Udp4VariableData);\r
 \r
   return Status;\r
 }\r
@@ -1946,6 +1931,6 @@ Udp4ClearVariableData (
          NULL\r
          );\r
 \r
-  NetFreePool (Udp4Service->MacString);\r
+  gBS->FreePool (Udp4Service->MacString);\r
   Udp4Service->MacString = NULL;\r
 }\r