]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/ArpDxe/ArpDriver.c
Use Mde library and definition instead of some native definitions in NetLib, to simpl...
[mirror_edk2.git] / MdeModulePkg / Universal / Network / ArpDxe / ArpDriver.c
index 924028531ae01bd998442b1687f7bfa675ac9b3e..c33ce4d98a712b4b171b8f1d8abe44ef3a6db9eb 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
-Copyright (c) 2006, Intel Corporation\r
+Copyright (c) 2006 - 2007, 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
@@ -142,7 +142,7 @@ ArpCreateService (
   //\r
   Status = gBS->CreateEvent (\r
                   EVT_NOTIFY_SIGNAL,\r
-                  NET_TPL_EVENT,\r
+                  TPL_NOTIFY,\r
                   ArpOnFrameRcvd,\r
                   ArpService,\r
                   &ArpService->RxToken.Event\r
@@ -156,7 +156,7 @@ ArpCreateService (
   //\r
   Status = gBS->CreateEvent (\r
                   EVT_NOTIFY_SIGNAL | EVT_TIMER,\r
-                  NET_TPL_TIMER,\r
+                  TPL_CALLBACK,\r
                   ArpTimerHandler,\r
                   ArpService,\r
                   &ArpService->PeriodicTimer\r
@@ -177,18 +177,13 @@ ArpCreateService (
     goto ERROR_EXIT;\r
   }\r
 \r
-  //\r
-  // Init the lock.\r
-  //\r
-  NET_LOCK_INIT (&ArpService->Lock);\r
-\r
   //\r
   // Init the lists.\r
   //\r
-  NetListInit (&ArpService->ChildrenList);\r
-  NetListInit (&ArpService->PendingRequestTable);\r
-  NetListInit (&ArpService->DeniedCacheTable);\r
-  NetListInit (&ArpService->ResolvedCacheTable);\r
+  InitializeListHead (&ArpService->ChildrenList);\r
+  InitializeListHead (&ArpService->PendingRequestTable);\r
+  InitializeListHead (&ArpService->DeniedCacheTable);\r
+  InitializeListHead (&ArpService->ResolvedCacheTable);\r
 \r
 ERROR_EXIT:\r
 \r
@@ -337,7 +332,7 @@ ArpDriverBindingStart (
   //\r
   // Allocate a zero pool for ArpService.\r
   //\r
-  ArpService = NetAllocateZeroPool (sizeof(ARP_SERVICE_DATA));\r
+  ArpService = AllocateZeroPool (sizeof(ARP_SERVICE_DATA));\r
   if (ArpService == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
@@ -379,7 +374,7 @@ ERROR:
   // On error, clean the arp service context data, and free the memory allocated.\r
   //\r
   ArpCleanService (ArpService);\r
-  NetFreePool (ArpService);\r
+  gBS->FreePool (ArpService);\r
 \r
   return Status;\r
 }\r
@@ -418,7 +413,7 @@ ArpDriverBindingStop (
   //\r
   NicHandle = NetLibGetNicHandle (ControllerHandle, &gEfiManagedNetworkProtocolGuid);\r
   if (NicHandle == NULL) {\r
-    return EFI_SUCCESS;\r
+    return EFI_DEVICE_ERROR;\r
   }\r
 \r
   //\r
@@ -433,51 +428,44 @@ ArpDriverBindingStop (
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
                   );\r
   if (EFI_ERROR (Status)) {\r
-    ARP_DEBUG_ERROR (("ArpDriverBindingStop: Open ArpSb failed, %r.\n", Status));\r
-    return Status;\r
+    DEBUG ((EFI_D_ERROR, "ArpDriverBindingStop: Open ArpSb failed, %r.\n", Status));\r
+    return EFI_DEVICE_ERROR;\r
   }\r
 \r
   ArpService = ARP_SERVICE_DATA_FROM_THIS (ServiceBinding);\r
 \r
-  while (!NetListIsEmpty (&ArpService->ChildrenList)) {\r
+  if (NumberOfChildren == 0) {\r
     //\r
-    // Iterate all the instances.\r
+    // Uninstall the ARP ServiceBinding protocol.\r
     //\r
-    Instance = NET_LIST_HEAD (&ArpService->ChildrenList, ARP_INSTANCE_DATA, List);\r
+    gBS->UninstallMultipleProtocolInterfaces (\r
+           NicHandle,\r
+           &gEfiArpServiceBindingProtocolGuid,\r
+           &ArpService->ServiceBinding,\r
+           NULL\r
+           );\r
 \r
     //\r
-    // Destroy this arp child.\r
+    // Clean the arp servicebinding context data and free the memory allocated.\r
     //\r
-    ServiceBinding->DestroyChild (ServiceBinding, Instance->Handle);\r
-  }\r
+    ArpCleanService (ArpService);\r
 \r
-  ASSERT (NetListIsEmpty (&ArpService->PendingRequestTable));\r
-  ASSERT (NetListIsEmpty (&ArpService->DeniedCacheTable));\r
-  ASSERT (NetListIsEmpty (&ArpService->ResolvedCacheTable));\r
+    gBS->FreePool (ArpService);\r
+  } else {\r
 \r
-  //\r
-  // Uninstall the ARP ServiceBinding protocol.\r
-  //\r
-  Status = gBS->UninstallMultipleProtocolInterfaces (\r
-                  NicHandle,\r
-                  &gEfiArpServiceBindingProtocolGuid,\r
-                  &ArpService->ServiceBinding,\r
-                  NULL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    ARP_DEBUG_ERROR (("ArpDriverBindingStop: Failed to uninstall ArpSb, %r.\n", Status));\r
-    return Status;\r
-  }\r
+    while (!IsListEmpty (&ArpService->ChildrenList)) {\r
+      Instance = NET_LIST_HEAD (&ArpService->ChildrenList, ARP_INSTANCE_DATA, List);\r
 \r
-  //\r
-  // Clean the arp servicebinding context data and free the memory allocated.\r
-  //\r
-  ArpCleanService (ArpService);\r
-  NetFreePool (ArpService);\r
+      ServiceBinding->DestroyChild (ServiceBinding, Instance->Handle);\r
+    }\r
 \r
-  return Status;\r
-}\r
+    ASSERT (IsListEmpty (&ArpService->PendingRequestTable));\r
+    ASSERT (IsListEmpty (&ArpService->DeniedCacheTable));\r
+    ASSERT (IsListEmpty (&ArpService->ResolvedCacheTable));\r
+  }\r
 \r
+  return EFI_SUCCESS;\r
+}\r
 \r
 /**\r
   Creates a child handle with a set of I/O services.\r
@@ -506,6 +494,7 @@ ArpServiceBindingCreateChild (
   ARP_SERVICE_DATA   *ArpService;\r
   ARP_INSTANCE_DATA  *Instance;\r
   VOID               *Mnp;\r
+  EFI_TPL            OldTpl;\r
 \r
   if ((This == NULL) || (ChildHandle == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -516,9 +505,9 @@ ArpServiceBindingCreateChild (
   //\r
   // Allocate memory for the instance context data.\r
   //\r
-  Instance = NetAllocateZeroPool (sizeof(ARP_INSTANCE_DATA));\r
+  Instance = AllocateZeroPool (sizeof(ARP_INSTANCE_DATA));\r
   if (Instance == NULL) {\r
-    ARP_DEBUG_ERROR (("ArpSBCreateChild: Failed to allocate memory for Instance.\n"));\r
+    DEBUG ((EFI_D_ERROR, "ArpSBCreateChild: Failed to allocate memory for Instance.\n"));\r
 \r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
@@ -538,9 +527,9 @@ ArpServiceBindingCreateChild (
                   NULL\r
                   );\r
   if (EFI_ERROR (Status)) {\r
-    ARP_DEBUG_ERROR (("ArpSBCreateChild: faild to install ARP protocol, %r.\n", Status));\r
+    DEBUG ((EFI_D_ERROR, "ArpSBCreateChild: faild to install ARP protocol, %r.\n", Status));\r
 \r
-    NetFreePool (Instance);\r
+    gBS->FreePool (Instance);\r
     return Status;\r
   }\r
 \r
@@ -564,19 +553,15 @@ ArpServiceBindingCreateChild (
     goto ERROR;\r
   }\r
 \r
-  if (EFI_ERROR (NET_TRYLOCK (&ArpService->Lock))) {\r
-\r
-    Status = EFI_ACCESS_DENIED;\r
-    goto ERROR;\r
-  }\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   //\r
   // Insert the instance into children list managed by the arp service context data.\r
   //\r
-  NetListInsertTail (&ArpService->ChildrenList, &Instance->List);\r
+  InsertTailList (&ArpService->ChildrenList, &Instance->List);\r
   ArpService->ChildrenNumber++;\r
 \r
-  NET_UNLOCK (&ArpService->Lock);\r
+  gBS->RestoreTPL (OldTpl);\r
 \r
 ERROR:\r
 \r
@@ -599,7 +584,7 @@ ERROR:
     //\r
     // Free the allocated memory.\r
     //\r
-    NetFreePool (Instance);\r
+    gBS->FreePool (Instance);\r
   }\r
 \r
   return Status;\r
@@ -633,6 +618,7 @@ ArpServiceBindingDestroyChild (
   ARP_SERVICE_DATA   *ArpService;\r
   ARP_INSTANCE_DATA  *Instance;\r
   EFI_ARP_PROTOCOL   *Arp;\r
+  EFI_TPL            OldTpl;\r
 \r
   if ((This == NULL) || (ChildHandle == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -686,17 +672,14 @@ ArpServiceBindingDestroyChild (
                   NULL\r
                   );\r
   if (EFI_ERROR (Status)) {\r
-    ARP_DEBUG_ERROR (("ArpSBDestroyChild: Failed to uninstall the arp protocol, %r.\n",\r
+    DEBUG ((EFI_D_ERROR, "ArpSBDestroyChild: Failed to uninstall the arp protocol, %r.\n",\r
       Status));\r
 \r
     Instance->Destroyed = FALSE;\r
     return Status;\r
   }\r
 \r
-  if (EFI_ERROR (NET_TRYLOCK (&ArpService->Lock))) {\r
-    Instance->Destroyed = FALSE;\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   if (Instance->Configured) {\r
     //\r
@@ -713,12 +696,12 @@ ArpServiceBindingDestroyChild (
   //\r
   // Remove this instance from the ChildrenList.\r
   //\r
-  NetListRemoveEntry (&Instance->List);\r
+  RemoveEntryList (&Instance->List);\r
   ArpService->ChildrenNumber--;\r
 \r
-  NET_UNLOCK (&ArpService->Lock);\r
+  gBS->RestoreTPL (OldTpl);\r
 \r
-  NetFreePool (Instance);\r
+  gBS->FreePool (Instance);\r
 \r
   return Status;\r
 }\r
@@ -749,14 +732,13 @@ Returns:
 \r
 --*/\r
 {\r
-  return EfiLibInstallAllDriverProtocols (\r
+  return EfiLibInstallDriverBindingComponentName2 (\r
            ImageHandle,\r
            SystemTable,\r
            &gArpDriverBinding,\r
            ImageHandle,\r
            &gArpComponentName,\r
-           NULL,\r
-           NULL\r
+           &gArpComponentName2\r
            );\r
 }\r
 \r