]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/MnpDxe/MnpConfig.c
fix code style issue and add function header
[mirror_edk2.git] / MdeModulePkg / Universal / Network / MnpDxe / MnpConfig.c
index 88158ea50baaabc142f826c42f1978af152ce860..e29f0978f13fc5dbc788d07fb8fecde2d3ba9b3b 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
-Copyright (c) 2005 - 2007, Intel Corporation\r
+Copyright (c) 2005 - 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
@@ -52,62 +52,162 @@ EFI_MANAGED_NETWORK_CONFIG_DATA mMnpDefaultConfigData = {
   FALSE\r
 };\r
 \r
-STATIC\r
-EFI_STATUS\r
-MnpAddFreeNbuf (\r
-  IN MNP_SERVICE_DATA  *MnpServiceData,\r
-  IN UINTN             Count\r
-  );\r
-\r
-STATIC\r
-EFI_STATUS\r
-MnpStartSnp (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL  *Snp\r
-  );\r
-\r
-STATIC\r
-EFI_STATUS\r
-MnpStopSnp (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL  *Snp\r
-  );\r
+/**\r
+  Configure the Snp receive filters according to the instances' receive filter\r
+  settings.\r
 \r
-STATIC\r
-EFI_STATUS\r
-MnpStart (\r
-  IN MNP_SERVICE_DATA  *MnpServiceData,\r
-  IN BOOLEAN           IsConfigUpdate,\r
-  IN BOOLEAN           EnableSystemPoll\r
-  );\r
+  @param  MnpServiceData        Pointer to the mnp service context data.\r
 \r
-STATIC\r
-EFI_STATUS\r
-MnpStop (\r
-  IN MNP_SERVICE_DATA  *MnpServiceData\r
-  );\r
+  @retval EFI_SUCCESS           The receive filters is configured.\r
+  @retval EFI_OUT_OF_RESOURCES  The receive filters can't be configured due to lack\r
+                                of memory resource.\r
 \r
-STATIC\r
+**/\r
 EFI_STATUS\r
 MnpConfigReceiveFilters (\r
   IN MNP_SERVICE_DATA  *MnpServiceData\r
-  );\r
+  )\r
+{\r
+  EFI_STATUS                  Status;\r
+  EFI_SIMPLE_NETWORK_PROTOCOL *Snp;\r
+  EFI_MAC_ADDRESS             *MCastFilter;\r
+  UINT32                      MCastFilterCnt;\r
+  UINT32                      EnableFilterBits;\r
+  UINT32                      DisableFilterBits;\r
+  BOOLEAN                     ResetMCastFilters;\r
+  LIST_ENTRY                  *Entry;\r
+  UINT32                      Index;\r
+  MNP_GROUP_ADDRESS           *GroupAddress;\r
 \r
-STATIC\r
-EFI_STATUS\r
-MnpGroupOpAddCtrlBlk (\r
-  IN MNP_INSTANCE_DATA        *Instance,\r
-  IN MNP_GROUP_CONTROL_BLOCK  *CtrlBlk,\r
-  IN MNP_GROUP_ADDRESS        *GroupAddress OPTIONAL,\r
-  IN EFI_MAC_ADDRESS          *MacAddress,\r
-  IN UINT32                   HwAddressSize\r
-  );\r
+  NET_CHECK_SIGNATURE (MnpServiceData, MNP_SERVICE_DATA_SIGNATURE);\r
 \r
-STATIC\r
-BOOLEAN\r
-MnpGroupOpDelCtrlBlk (\r
-  IN MNP_INSTANCE_DATA        *Instance,\r
-  IN MNP_GROUP_CONTROL_BLOCK  *CtrlBlk\r
+  Snp = MnpServiceData->Snp;\r
+\r
+  //\r
+  // Initialize the enable filter and disable filter.\r
+  //\r
+  EnableFilterBits  = 0;\r
+  DisableFilterBits = Snp->Mode->ReceiveFilterMask;\r
+\r
+  if (MnpServiceData->UnicastCount != 0) {\r
+    //\r
+    // Enable unicast if any instance wants to receive unicast.\r
+    //\r
+    EnableFilterBits |= EFI_SIMPLE_NETWORK_RECEIVE_UNICAST;\r
+  }\r
+\r
+  if (MnpServiceData->BroadcastCount != 0) {\r
+    //\r
+    // Enable broadcast if any instance wants to receive broadcast.\r
+    //\r
+    EnableFilterBits |= EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST;\r
+  }\r
+\r
+  MCastFilter       = NULL;\r
+  MCastFilterCnt    = 0;\r
+  ResetMCastFilters = TRUE;\r
+\r
+  if ((MnpServiceData->MulticastCount != 0) && (MnpServiceData->GroupAddressCount != 0)) {\r
+    //\r
+    // There are instances configured to receive multicast and already some group\r
+    // addresses are joined.\r
+    //\r
+\r
+    ResetMCastFilters = FALSE;\r
+\r
+    if (MnpServiceData->GroupAddressCount <= Snp->Mode->MaxMCastFilterCount) {\r
+      //\r
+      // The joind group address is less than simple network's maximum count.\r
+      // Just configure the snp to do the multicast filtering.\r
+      //\r
+\r
+      EnableFilterBits |= EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST;\r
+\r
+      //\r
+      // Allocate pool for the mulicast addresses.\r
+      //\r
+      MCastFilterCnt  = MnpServiceData->GroupAddressCount;\r
+      MCastFilter     = AllocatePool (sizeof (EFI_MAC_ADDRESS) * MCastFilterCnt);\r
+      if (MCastFilter == NULL) {\r
+\r
+        DEBUG ((EFI_D_ERROR, "MnpConfigReceiveFilters: Failed to allocate memory resource for MCastFilter.\n"));\r
+        return EFI_OUT_OF_RESOURCES;\r
+      }\r
+\r
+      //\r
+      // Fill the multicast HW address buffer.\r
+      //\r
+      Index = 0;\r
+      NET_LIST_FOR_EACH (Entry, &MnpServiceData->GroupAddressList) {\r
+\r
+        GroupAddress            = NET_LIST_USER_STRUCT (Entry, MNP_GROUP_ADDRESS, AddrEntry);\r
+        CopyMem (MCastFilter + Index, &GroupAddress->Address, sizeof (*(MCastFilter + Index)));\r
+        Index++;\r
+\r
+        ASSERT (Index <= MCastFilterCnt);\r
+      }\r
+    } else {\r
+      //\r
+      // The maximum multicast is reached, set the filter to be promiscuous\r
+      // multicast.\r
+      //\r
+\r
+      if (Snp->Mode->ReceiveFilterMask & EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST) {\r
+        EnableFilterBits |= EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST;\r
+      } else {\r
+        //\r
+        // Either MULTICAST or PROMISCUOUS_MULTICAST is not supported by Snp,\r
+        // set the NIC to be promiscuous although this will tremendously degrade\r
+        // the performance.\r
+        //\r
+        EnableFilterBits |= EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS;\r
+      }\r
+    }\r
+  }\r
+\r
+  if (MnpServiceData->PromiscuousCount != 0) {\r
+    //\r
+    // Enable promiscuous if any instance wants to receive promiscuous.\r
+    //\r
+    EnableFilterBits |= EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS;\r
+  }\r
+\r
+  //\r
+  // Set the disable filter.\r
+  //\r
+  DisableFilterBits ^= EnableFilterBits;\r
+\r
+  //\r
+  // Configure the receive filters of SNP.\r
+  //\r
+  Status = Snp->ReceiveFilters (\r
+                  Snp,\r
+                  EnableFilterBits,\r
+                  DisableFilterBits,\r
+                  ResetMCastFilters,\r
+                  MCastFilterCnt,\r
+                  MCastFilter\r
+                  );\r
+  DEBUG_CODE (\r
+    if (EFI_ERROR (Status)) {\r
+\r
+    DEBUG (\r
+      (EFI_D_ERROR,\r
+      "MnpConfigReceiveFilters: Snp->ReceiveFilters failed, %r.\n",\r
+      Status)\r
+      );\r
+  }\r
   );\r
 \r
+  if (MCastFilter != NULL) {\r
+    //\r
+    // Free the buffer used to hold the group addresses.\r
+    //\r
+    gBS->FreePool (MCastFilter);\r
+  }\r
+\r
+  return Status;\r
+}\r
 \r
 /**\r
   Add some NET_BUF into MnpServiceData->FreeNbufQue. The buffer length of\r
@@ -121,7 +221,6 @@ MnpGroupOpDelCtrlBlk (
   @retval EFI_OUT_OF_RESOURCES  Failed to allocate a NET_BUF structure.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 MnpAddFreeNbuf (\r
   IN MNP_SERVICE_DATA  *MnpServiceData,\r
@@ -142,7 +241,7 @@ MnpAddFreeNbuf (
     Nbuf = NetbufAlloc (MnpServiceData->BufferLength + MnpServiceData->PaddingSize);\r
     if (Nbuf == NULL) {\r
 \r
-      MNP_DEBUG_ERROR (("MnpAddFreeNbuf: NetBufAlloc failed.\n"));\r
+      DEBUG ((EFI_D_ERROR, "MnpAddFreeNbuf: NetBufAlloc failed.\n"));\r
       Status = EFI_OUT_OF_RESOURCES;\r
       break;\r
     }\r
@@ -188,7 +287,7 @@ MnpAllocNbuf (
 \r
   FreeNbufQue = &MnpServiceData->FreeNbufQue;\r
 \r
-  OldTpl = NET_RAISE_TPL (NET_TPL_RECYCLE);\r
+  OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
 \r
   //\r
   // Check whether there are available buffers, or else try to add some.\r
@@ -197,8 +296,9 @@ MnpAllocNbuf (
 \r
     if ((MnpServiceData->NbufCnt + MNP_NET_BUFFER_INCREASEMENT) > MNP_MAX_NET_BUFFER_NUM) {\r
 \r
-      MNP_DEBUG_ERROR (\r
-        ("MnpAllocNbuf: The maximum NET_BUF size is reached for MNP driver instance %p.\n",\r
+      DEBUG (\r
+        (EFI_D_ERROR,\r
+        "MnpAllocNbuf: The maximum NET_BUF size is reached for MNP driver instance %p.\n",\r
         MnpServiceData)\r
         );\r
 \r
@@ -209,8 +309,9 @@ MnpAllocNbuf (
     Status = MnpAddFreeNbuf (MnpServiceData, MNP_NET_BUFFER_INCREASEMENT);\r
     if (EFI_ERROR (Status)) {\r
 \r
-      MNP_DEBUG_ERROR (\r
-        ("MnpAllocNbuf: Failed to add NET_BUFs into the FreeNbufQue, %r.\n",\r
+      DEBUG (\r
+        (EFI_D_ERROR,\r
+        "MnpAllocNbuf: Failed to add NET_BUFs into the FreeNbufQue, %r.\n",\r
         Status)\r
         );\r
       //\r
@@ -230,7 +331,7 @@ MnpAllocNbuf (
   }\r
 \r
 ON_EXIT:\r
-  NET_RESTORE_TPL (OldTpl);\r
+  gBS->RestoreTPL (OldTpl);\r
 \r
   return Nbuf;\r
 }\r
@@ -242,8 +343,6 @@ ON_EXIT:
   @param  MnpServiceData        Pointer to the mnp service context data.\r
   @param  Nbuf                  Pointer to the NET_BUF to free.\r
 \r
-  @return None.\r
-\r
 **/\r
 VOID\r
 MnpFreeNbuf (\r
@@ -256,7 +355,7 @@ MnpFreeNbuf (
   NET_CHECK_SIGNATURE (MnpServiceData, MNP_SERVICE_DATA_SIGNATURE);\r
   ASSERT (Nbuf->RefCnt > 1);\r
 \r
-  OldTpl = NET_RAISE_TPL (NET_TPL_RECYCLE);\r
+  OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
 \r
   NET_PUT_REF (Nbuf);\r
 \r
@@ -268,7 +367,7 @@ MnpFreeNbuf (
     NetbufQueAppend (&MnpServiceData->FreeNbufQue, Nbuf);\r
   }\r
 \r
-  NET_RESTORE_TPL (OldTpl);\r
+  gBS->RestoreTPL (OldTpl);\r
 }\r
 \r
 \r
@@ -276,7 +375,8 @@ MnpFreeNbuf (
   Initialize the mnp service context data.\r
 \r
   @param  MnpServiceData        Pointer to the mnp service context data.\r
-  @param  Snp                   Pointer to the simple network protocol.\r
+  @param  ImageHandle           The driver image handle.\r
+  @param  ControllerHandle      Handle of device to bind driver to.\r
 \r
   @retval EFI_SUCCESS           The mnp service context is initialized.\r
   @retval Other                 Some error occurs.\r
@@ -327,8 +427,8 @@ MnpInitializeServiceData (
   //\r
   // Initialize the lists.\r
   //\r
-  NetListInit (&MnpServiceData->GroupAddressList);\r
-  NetListInit (&MnpServiceData->ChildrenList);\r
+  InitializeListHead (&MnpServiceData->GroupAddressList);\r
+  InitializeListHead (&MnpServiceData->ChildrenList);\r
 \r
   //\r
   // Get the buffer length used to allocate NET_BUF to hold data received\r
@@ -337,7 +437,7 @@ MnpInitializeServiceData (
   MnpServiceData->BufferLength = MnpServiceData->Mtu + SnpMode->MediaHeaderSize + NET_ETHER_FCS_SIZE;\r
 \r
   //\r
-  // Make sure the protocol headers immediately following the media header \r
+  // Make sure the protocol headers immediately following the media header\r
   // 4-byte aligned\r
   //\r
   MnpServiceData->PaddingSize = (4 - SnpMode->MediaHeaderSize) & 0x3;\r
@@ -349,7 +449,7 @@ MnpInitializeServiceData (
   Status = MnpAddFreeNbuf (MnpServiceData, MNP_INIT_NET_BUFFER_NUM);\r
   if (EFI_ERROR (Status)) {\r
 \r
-    MNP_DEBUG_ERROR (("MnpInitializeServiceData: MnpAddFreeNbuf failed, %r.\n", Status));\r
+    DEBUG ((EFI_D_ERROR, "MnpInitializeServiceData: MnpAddFreeNbuf failed, %r.\n", Status));\r
     goto ERROR;\r
   }\r
   //\r
@@ -365,10 +465,10 @@ MnpInitializeServiceData (
   //\r
   // Allocate buffer pool for tx.\r
   //\r
-  MnpServiceData->TxBuf = NetAllocatePool (MnpServiceData->Mtu + SnpMode->MediaHeaderSize);\r
+  MnpServiceData->TxBuf = AllocatePool (MnpServiceData->Mtu + SnpMode->MediaHeaderSize);\r
   if (MnpServiceData->TxBuf == NULL) {\r
 \r
-    MNP_DEBUG_ERROR (("MnpInitializeServiceData: NetAllocatePool failed.\n"));\r
+    DEBUG ((EFI_D_ERROR, "MnpInitializeServiceData: AllocatePool failed.\n"));\r
     Status = EFI_OUT_OF_RESOURCES;\r
 \r
     goto ERROR;\r
@@ -379,14 +479,14 @@ MnpInitializeServiceData (
   //\r
   Status = gBS->CreateEvent (\r
                   EVT_NOTIFY_SIGNAL | EVT_TIMER,\r
-                  NET_TPL_LOCK,\r
+                  TPL_CALLBACK,\r
                   MnpSystemPoll,\r
                   MnpServiceData,\r
                   &MnpServiceData->PollTimer\r
                   );\r
   if (EFI_ERROR (Status)) {\r
 \r
-    MNP_DEBUG_ERROR (("MnpInitializeServiceData: CreateEvent for poll timer failed.\n"));\r
+    DEBUG ((EFI_D_ERROR, "MnpInitializeServiceData: CreateEvent for poll timer failed.\n"));\r
     goto ERROR;\r
   }\r
 \r
@@ -395,14 +495,14 @@ MnpInitializeServiceData (
   //\r
   Status = gBS->CreateEvent (\r
                   EVT_NOTIFY_SIGNAL | EVT_TIMER,\r
-                  NET_TPL_EVENT,\r
+                  TPL_CALLBACK,\r
                   MnpCheckPacketTimeout,\r
                   MnpServiceData,\r
                   &MnpServiceData->TimeoutCheckTimer\r
                   );\r
   if (EFI_ERROR (Status)) {\r
 \r
-    MNP_DEBUG_ERROR (("MnpInitializeServiceData: CreateEvent for packet timeout check failed.\n"));\r
+    DEBUG ((EFI_D_ERROR, "MnpInitializeServiceData: CreateEvent for packet timeout check failed.\n"));\r
     goto ERROR;\r
   }\r
 \r
@@ -411,14 +511,14 @@ MnpInitializeServiceData (
   //\r
   Status = gBS->CreateEvent (\r
                   EVT_TIMER,\r
-                  NET_TPL_SLOW_TIMER,\r
+                  TPL_CALLBACK,\r
                   NULL,\r
                   NULL,\r
                   &MnpServiceData->TxTimeoutEvent\r
                   );\r
   if (EFI_ERROR (Status)) {\r
 \r
-    MNP_DEBUG_ERROR (("MnpInitializeServiceData: CreateEvent for tx timeout event failed.\n"));\r
+    DEBUG ((EFI_D_ERROR, "MnpInitializeServiceData: CreateEvent for tx timeout event failed.\n"));\r
   }\r
 \r
 ERROR:\r
@@ -439,7 +539,7 @@ ERROR:
 \r
     if (MnpServiceData->TxBuf != NULL) {\r
 \r
-      NetFreePool (MnpServiceData->TxBuf);\r
+      gBS->FreePool (MnpServiceData->TxBuf);\r
     }\r
 \r
     if (MnpServiceData->RxNbufCache != NULL) {\r
@@ -461,13 +561,13 @@ ERROR:
   Flush the mnp service context data.\r
 \r
   @param  MnpServiceData        Pointer to the mnp service context data.\r
-\r
-  @return None.\r
+  @param  ImageHandle           The driver image handle.\r
 \r
 **/\r
 VOID\r
 MnpFlushServiceData (\r
-  MNP_SERVICE_DATA  *MnpServiceData\r
+  IN MNP_SERVICE_DATA  *MnpServiceData,\r
+  IN EFI_HANDLE        ImageHandle\r
   )\r
 {\r
   NET_CHECK_SIGNATURE (MnpServiceData, MNP_SERVICE_DATA_SIGNATURE);\r
@@ -475,7 +575,7 @@ MnpFlushServiceData (
   //\r
   // The GroupAddressList must be empty.\r
   //\r
-  ASSERT (NetListIsEmpty (&MnpServiceData->GroupAddressList));\r
+  ASSERT (IsListEmpty (&MnpServiceData->GroupAddressList));\r
 \r
   //\r
   // Close the event.\r
@@ -487,7 +587,7 @@ MnpFlushServiceData (
   //\r
   // Free the tx buffer.\r
   //\r
-  NetFreePool (MnpServiceData->TxBuf);\r
+  gBS->FreePool (MnpServiceData->TxBuf);\r
 \r
   //\r
   // Free the RxNbufCache.\r
@@ -502,11 +602,21 @@ MnpFlushServiceData (
 \r
   DEBUG_CODE (\r
 \r
-    if (MnpServiceData->NbufCnt != 0) {\r
+  if (MnpServiceData->NbufCnt != 0) {\r
 \r
-    MNP_DEBUG_WARN (("MnpFlushServiceData: Memory leak, MnpServiceData->NbufCnt != 0.\n"));\r
+    DEBUG ((EFI_D_WARN, "MnpFlushServiceData: Memory leak, MnpServiceData->NbufCnt != 0.\n"));\r
   }\r
   );\r
+\r
+  //\r
+  // Close the Simple Network Protocol.\r
+  //\r
+  gBS->CloseProtocol (\r
+        MnpServiceData->ControllerHandle,\r
+        &gEfiSimpleNetworkProtocolGuid,\r
+        ImageHandle,\r
+        MnpServiceData->ControllerHandle\r
+        );\r
 }\r
 \r
 \r
@@ -517,8 +627,6 @@ MnpFlushServiceData (
   @param  Instance              Pointer to the mnp instance context data to\r
                                 initialize.\r
 \r
-  @return None.\r
-\r
 **/\r
 VOID\r
 MnpInitializeInstanceData (\r
@@ -547,9 +655,9 @@ MnpInitializeInstanceData (
   //\r
   // Initialize the lists.\r
   //\r
-  NetListInit (&Instance->GroupCtrlBlkList);\r
-  NetListInit (&Instance->RcvdPacketQueue);\r
-  NetListInit (&Instance->RxDeliveredPacketQueue);\r
+  InitializeListHead (&Instance->GroupCtrlBlkList);\r
+  InitializeListHead (&Instance->RcvdPacketQueue);\r
+  InitializeListHead (&Instance->RxDeliveredPacketQueue);\r
 \r
   //\r
   // Initialize the RxToken Map.\r
@@ -601,7 +709,6 @@ MnpTokenExist (
   return EFI_SUCCESS;\r
 }\r
 \r
-\r
 /**\r
   Cancel the token specified by Arg if it matches the token in Item.\r
 \r
@@ -636,15 +743,15 @@ MnpCancelTokens (
   TokenToCancel         = (EFI_MANAGED_NETWORK_COMPLETION_TOKEN *) Item->Key;\r
 \r
   //\r
-  // Cancel this token with status set to EFI_ABORTED.\r
+  // Remove the item from the map.\r
   //\r
-  TokenToCancel->Status = EFI_ABORTED;\r
-  gBS->SignalEvent (TokenToCancel->Event);\r
+  NetMapRemoveItem (Map, Item, NULL);\r
 \r
   //\r
-  // Remove the item from the map.\r
+  // Cancel this token with status set to EFI_ABORTED.\r
   //\r
-  NetMapRemoveItem (Map, Item, NULL);\r
+  TokenToCancel->Status = EFI_ABORTED;\r
+  gBS->SignalEvent (TokenToCancel->Event);\r
 \r
   if (Arg != NULL) {\r
     //\r
@@ -666,7 +773,6 @@ MnpCancelTokens (
   @retval Other                 Some error occurs.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 MnpStartSnp (\r
   IN EFI_SIMPLE_NETWORK_PROTOCOL  *Snp\r
@@ -701,7 +807,6 @@ MnpStartSnp (
   @retval Other                 Some error occurs.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 MnpStopSnp (\r
   IN EFI_SIMPLE_NETWORK_PROTOCOL  *Snp\r
@@ -741,7 +846,6 @@ MnpStopSnp (
   @retval Other                 Some error occurs.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 MnpStart (\r
   IN MNP_SERVICE_DATA  *MnpServiceData,\r
@@ -769,7 +873,7 @@ MnpStart (
       Status = MnpStartSnp (MnpServiceData->Snp);\r
       if (EFI_ERROR (Status)) {\r
 \r
-        MNP_DEBUG_ERROR (("MnpStart: MnpStartSnp failed, %r.\n", Status));\r
+        DEBUG ((EFI_D_ERROR, "MnpStart: MnpStartSnp failed, %r.\n", Status));\r
         goto ErrorExit;\r
       }\r
 \r
@@ -783,8 +887,9 @@ MnpStart (
                       );\r
       if (EFI_ERROR (Status)) {\r
 \r
-        MNP_DEBUG_ERROR (\r
-          ("MnpStart, gBS->SetTimer for TimeoutCheckTimer %r.\n",\r
+        DEBUG (\r
+          (EFI_D_ERROR,\r
+          "MnpStart, gBS->SetTimer for TimeoutCheckTimer %r.\n",\r
           Status)\r
           );\r
         goto ErrorExit;\r
@@ -802,7 +907,7 @@ MnpStart (
     Status      = gBS->SetTimer (MnpServiceData->PollTimer, TimerOpType, MNP_SYS_POLL_INTERVAL);\r
     if (EFI_ERROR (Status)) {\r
 \r
-      MNP_DEBUG_ERROR (("MnpStart: gBS->SetTimer for PollTimer failed, %r.\n", Status));\r
+      DEBUG ((EFI_D_ERROR, "MnpStart: gBS->SetTimer for PollTimer failed, %r.\n", Status));\r
       goto ErrorExit;\r
     }\r
 \r
@@ -829,7 +934,6 @@ ErrorExit:
   @retval Other                 Some error occurs.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 MnpStop (\r
   IN MNP_SERVICE_DATA  *MnpServiceData\r
@@ -889,8 +993,6 @@ MnpStop (
 \r
   @param  Instance              Pointer to the mnp instance context data.\r
 \r
-  @return None.\r
-\r
 **/\r
 VOID\r
 MnpFlushRcvdDataQueue (\r
@@ -902,9 +1004,9 @@ MnpFlushRcvdDataQueue (
 \r
   NET_CHECK_SIGNATURE (Instance, MNP_INSTANCE_DATA_SIGNATURE);\r
 \r
-  OldTpl = NET_RAISE_TPL (NET_TPL_RECYCLE);\r
+  OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
 \r
-  while (!NetListIsEmpty (&Instance->RcvdPacketQueue)) {\r
+  while (!IsListEmpty (&Instance->RcvdPacketQueue)) {\r
     //\r
     // Remove all the Wraps.\r
     //\r
@@ -919,7 +1021,7 @@ MnpFlushRcvdDataQueue (
 \r
   ASSERT (Instance->RcvdPacketQueueSize == 0);\r
 \r
-  NET_RESTORE_TPL (OldTpl);\r
+  gBS->RestoreTPL (OldTpl);\r
 }\r
 \r
 \r
@@ -1027,7 +1129,7 @@ MnpConfigureInstance (
 \r
   if (ConfigData == NULL) {\r
 \r
-    NetMapIterate (&Instance->RxTokenMap, MnpCancelTokens, NULL);\r
+    Instance->ManagedNetwork.Cancel (&Instance->ManagedNetwork, NULL);\r
   }\r
 \r
   if (!NewConfigData->EnableMulticastReceive) {\r
@@ -1062,163 +1164,6 @@ MnpConfigureInstance (
 }\r
 \r
 \r
-/**\r
-  Configure the Snp receive filters according to the instances' receive filter\r
-  settings.\r
-\r
-  @param  MnpServiceData        Pointer to the mnp service context data.\r
-\r
-  @retval EFI_SUCCESS           The receive filters is configured.\r
-  @retval EFI_OUT_OF_RESOURCES  The receive filters can't be configured due to lack\r
-                                of memory resource.\r
-\r
-**/\r
-STATIC\r
-EFI_STATUS\r
-MnpConfigReceiveFilters (\r
-  IN MNP_SERVICE_DATA  *MnpServiceData\r
-  )\r
-{\r
-  EFI_STATUS                  Status;\r
-  EFI_SIMPLE_NETWORK_PROTOCOL *Snp;\r
-  EFI_MAC_ADDRESS             *MCastFilter;\r
-  UINT32                      MCastFilterCnt;\r
-  UINT32                      EnableFilterBits;\r
-  UINT32                      DisableFilterBits;\r
-  BOOLEAN                     ResetMCastFilters;\r
-  NET_LIST_ENTRY              *Entry;\r
-  UINT32                      Index;\r
-  MNP_GROUP_ADDRESS           *GroupAddress;\r
-\r
-  NET_CHECK_SIGNATURE (MnpServiceData, MNP_SERVICE_DATA_SIGNATURE);\r
-\r
-  Snp = MnpServiceData->Snp;\r
-\r
-  //\r
-  // Initialize the enable filter and disable filter.\r
-  //\r
-  EnableFilterBits  = 0;\r
-  DisableFilterBits = Snp->Mode->ReceiveFilterMask;\r
-\r
-  if (MnpServiceData->UnicastCount != 0) {\r
-    //\r
-    // Enable unicast if any instance wants to receive unicast.\r
-    //\r
-    EnableFilterBits |= EFI_SIMPLE_NETWORK_RECEIVE_UNICAST;\r
-  }\r
-\r
-  if (MnpServiceData->BroadcastCount != 0) {\r
-    //\r
-    // Enable broadcast if any instance wants to receive broadcast.\r
-    //\r
-    EnableFilterBits |= EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST;\r
-  }\r
-\r
-  MCastFilter       = NULL;\r
-  MCastFilterCnt    = 0;\r
-  ResetMCastFilters = TRUE;\r
-\r
-  if ((MnpServiceData->MulticastCount != 0) && (MnpServiceData->GroupAddressCount != 0)) {\r
-    //\r
-    // There are instances configured to receive multicast and already some group\r
-    // addresses are joined.\r
-    //\r
-\r
-    ResetMCastFilters = FALSE;\r
-\r
-    if (MnpServiceData->GroupAddressCount <= Snp->Mode->MaxMCastFilterCount) {\r
-      //\r
-      // The joind group address is less than simple network's maximum count.\r
-      // Just configure the snp to do the multicast filtering.\r
-      //\r
-\r
-      EnableFilterBits |= EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST;\r
-\r
-      //\r
-      // Allocate pool for the mulicast addresses.\r
-      //\r
-      MCastFilterCnt  = MnpServiceData->GroupAddressCount;\r
-      MCastFilter     = NetAllocatePool (sizeof (EFI_MAC_ADDRESS) * MCastFilterCnt);\r
-      if (MCastFilter == NULL) {\r
-\r
-        MNP_DEBUG_ERROR (("MnpConfigReceiveFilters: Failed to allocate memory resource for MCastFilter.\n"));\r
-        return EFI_OUT_OF_RESOURCES;\r
-      }\r
-\r
-      //\r
-      // Fill the multicast HW address buffer.\r
-      //\r
-      Index = 0;\r
-      NET_LIST_FOR_EACH (Entry, &MnpServiceData->GroupAddressList) {\r
-\r
-        GroupAddress            = NET_LIST_USER_STRUCT (Entry, MNP_GROUP_ADDRESS, AddrEntry);\r
-        CopyMem (MCastFilter + Index, &GroupAddress->Address, sizeof (*(MCastFilter + Index)));\r
-        Index++;\r
-\r
-        ASSERT (Index <= MCastFilterCnt);\r
-      }\r
-    } else {\r
-      //\r
-      // The maximum multicast is reached, set the filter to be promiscuous\r
-      // multicast.\r
-      //\r
-\r
-      if (Snp->Mode->ReceiveFilterMask & EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST) {\r
-        EnableFilterBits |= EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST;\r
-      } else {\r
-        //\r
-        // Either MULTICAST or PROMISCUOUS_MULTICAST is not supported by Snp,\r
-        // set the NIC to be promiscuous although this will tremendously degrade\r
-        // the performance.\r
-        //\r
-        EnableFilterBits |= EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS;\r
-      }\r
-    }\r
-  }\r
-\r
-  if (MnpServiceData->PromiscuousCount != 0) {\r
-    //\r
-    // Enable promiscuous if any instance wants to receive promiscuous.\r
-    //\r
-    EnableFilterBits |= EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS;\r
-  }\r
-\r
-  //\r
-  // Set the disable filter.\r
-  //\r
-  DisableFilterBits ^= EnableFilterBits;\r
-\r
-  //\r
-  // Configure the receive filters of SNP.\r
-  //\r
-  Status = Snp->ReceiveFilters (\r
-                  Snp,\r
-                  EnableFilterBits,\r
-                  DisableFilterBits,\r
-                  ResetMCastFilters,\r
-                  MCastFilterCnt,\r
-                  MCastFilter\r
-                  );\r
-  DEBUG_CODE (\r
-    if (EFI_ERROR (Status)) {\r
-\r
-    MNP_DEBUG_ERROR (\r
-      ("MnpConfigReceiveFilters: Snp->ReceiveFilters failed, %r.\n",\r
-      Status)\r
-      );\r
-  }\r
-  );\r
-\r
-  if (MCastFilter != NULL) {\r
-    //\r
-    // Free the buffer used to hold the group addresses.\r
-    //\r
-    NetFreePool (MCastFilter);\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
 \r
 /**\r
   Add a group address control block which controls the MacAddress for\r
@@ -1234,7 +1179,6 @@ MnpConfigReceiveFilters (
   @retval EFI_OUT_OF_RESOURCE   Failed due to lack of memory resources.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 MnpGroupOpAddCtrlBlk (\r
   IN MNP_INSTANCE_DATA        *Instance,\r
@@ -1258,17 +1202,17 @@ MnpGroupOpAddCtrlBlk (
     //\r
     // Allocate a new GroupAddress to be added into MNP's GroupAddressList.\r
     //\r
-    GroupAddress = NetAllocatePool (sizeof (MNP_GROUP_ADDRESS));\r
+    GroupAddress = AllocatePool (sizeof (MNP_GROUP_ADDRESS));\r
     if (GroupAddress == NULL) {\r
 \r
-      MNP_DEBUG_ERROR (("MnpGroupOpFormCtrlBlk: Failed to allocate memory resource.\n"));\r
+      DEBUG ((EFI_D_ERROR, "MnpGroupOpFormCtrlBlk: Failed to allocate memory resource.\n"));\r
 \r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
 \r
     CopyMem (&GroupAddress->Address, MacAddress, sizeof (GroupAddress->Address));\r
     GroupAddress->RefCnt  = 0;\r
-    NetListInsertTail (\r
+    InsertTailList (\r
       &MnpServiceData->GroupAddressList,\r
       &GroupAddress->AddrEntry\r
       );\r
@@ -1284,7 +1228,7 @@ MnpGroupOpAddCtrlBlk (
   // Add the CtrlBlk into the instance's GroupCtrlBlkList.\r
   //\r
   CtrlBlk->GroupAddress = GroupAddress;\r
-  NetListInsertTail (&Instance->GroupCtrlBlkList, &CtrlBlk->CtrlBlkEntry);\r
+  InsertTailList (&Instance->GroupCtrlBlkList, &CtrlBlk->CtrlBlkEntry);\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -1300,7 +1244,6 @@ MnpGroupOpAddCtrlBlk (
   @return The group address controlled by the control block is no longer used or not.\r
 \r
 **/\r
-STATIC\r
 BOOLEAN\r
 MnpGroupOpDelCtrlBlk (\r
   IN MNP_INSTANCE_DATA        *Instance,\r
@@ -1319,8 +1262,8 @@ MnpGroupOpDelCtrlBlk (
   // Remove and free the CtrlBlk.\r
   //\r
   GroupAddress = CtrlBlk->GroupAddress;\r
-  NetListRemoveEntry (&CtrlBlk->CtrlBlkEntry);\r
-  NetFreePool (CtrlBlk);\r
+  RemoveEntryList (&CtrlBlk->CtrlBlkEntry);\r
+  gBS->FreePool (CtrlBlk);\r
 \r
   ASSERT (GroupAddress->RefCnt > 0);\r
 \r
@@ -1334,8 +1277,8 @@ MnpGroupOpDelCtrlBlk (
     // Free this GroupAddress entry if no instance uses it.\r
     //\r
     MnpServiceData->GroupAddressCount--;\r
-    NetListRemoveEntry (&GroupAddress->AddrEntry);\r
-    NetFreePool (GroupAddress);\r
+    RemoveEntryList (&GroupAddress->AddrEntry);\r
+    gBS->FreePool (GroupAddress);\r
 \r
     return TRUE;\r
   }\r
@@ -1367,8 +1310,8 @@ MnpGroupOp (
   )\r
 {\r
   MNP_SERVICE_DATA        *MnpServiceData;\r
-  NET_LIST_ENTRY          *Entry;\r
-  NET_LIST_ENTRY          *NextEntry;\r
+  LIST_ENTRY              *Entry;\r
+  LIST_ENTRY              *NextEntry;\r
   MNP_GROUP_ADDRESS       *GroupAddress;\r
   EFI_SIMPLE_NETWORK_MODE *SnpMode;\r
   MNP_GROUP_CONTROL_BLOCK *NewCtrlBlk;\r
@@ -1392,10 +1335,10 @@ MnpGroupOp (
     //\r
     // Allocate memory for the control block.\r
     //\r
-    NewCtrlBlk    = NetAllocatePool (sizeof (MNP_GROUP_CONTROL_BLOCK));\r
+    NewCtrlBlk    = AllocatePool (sizeof (MNP_GROUP_CONTROL_BLOCK));\r
     if (NewCtrlBlk == NULL) {\r
 \r
-      MNP_DEBUG_ERROR (("MnpGroupOp: Failed to allocate memory resource.\n"));\r
+      DEBUG ((EFI_D_ERROR, "MnpGroupOp: Failed to allocate memory resource.\n"));\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
 \r
@@ -1404,7 +1347,7 @@ MnpGroupOp (
       // Check whether the MacAddress is already joined by other instances.\r
       //\r
       GroupAddress = NET_LIST_USER_STRUCT (Entry, MNP_GROUP_ADDRESS, AddrEntry);\r
-      if (0 == NetCompareMem (\r
+      if (0 == CompareMem (\r
                 MacAddress,\r
                 &GroupAddress->Address,\r
                 SnpMode->HwAddressSize\r