]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/ArpDxe/ArpMain.c
sync comments, fix function header, rename variable name to follow coding style.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / ArpDxe / ArpMain.c
index eb1b082a21c0b2b9f39eb5976f0e1c83a348bd40..2d607fbf02569dfb4c88ceef11dec9cb8b064501 100644 (file)
@@ -51,6 +51,7 @@ ArpConfigure (
 {\r
   EFI_STATUS         Status;\r
   ARP_INSTANCE_DATA  *Instance;\r
+  EFI_TPL            OldTpl;\r
 \r
   if (This == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -65,16 +66,14 @@ ArpConfigure (
 \r
   Instance = ARP_INSTANCE_DATA_FROM_THIS (This);\r
 \r
-  if (EFI_ERROR (NET_TRYLOCK (&Instance->ArpService->Lock))) {\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   //\r
   // Configure this instance, the ConfigData has already passed the basic checks.\r
   //\r
   Status = ArpConfigureInstance (Instance, ConfigData);\r
 \r
-  NET_UNLOCK (&Instance->ArpService->Lock);\r
+  gBS->RestoreTPL (OldTpl);\r
 \r
   return Status;\r
 }\r
@@ -131,6 +130,7 @@ ArpAdd (
   ARP_CACHE_ENTRY          *CacheEntry;\r
   EFI_SIMPLE_NETWORK_MODE  *SnpMode;\r
   NET_ARP_ADDRESS          MatchAddress[2];\r
+  EFI_TPL                  OldTpl;\r
 \r
   if (This == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -166,9 +166,7 @@ ArpAdd (
   MatchAddress[Protocol].Length     = Instance->ConfigData.SwAddressLength;\r
   MatchAddress[Protocol].AddressPtr = TargetSwAddress;\r
 \r
-  if (EFI_ERROR (NET_TRYLOCK (&ArpService->Lock))) {\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   //\r
   // See whether the entry to add exists. Check the DeinedCacheTable first.\r
@@ -217,7 +215,7 @@ ArpAdd (
     //\r
     // Remove it from the Table.\r
     //\r
-    NetListRemoveEntry (&CacheEntry->List);\r
+    RemoveEntryList (&CacheEntry->List);\r
   } else {\r
     //\r
     // It's a new entry, allocate memory for the entry.\r
@@ -225,7 +223,7 @@ ArpAdd (
     CacheEntry = ArpAllocCacheEntry (Instance);\r
 \r
     if (CacheEntry == NULL) {\r
-      ARP_DEBUG_ERROR (("ArpAdd: Failed to allocate pool for CacheEntry.\n"));\r
+      DEBUG ((EFI_D_ERROR, "ArpAdd: Failed to allocate pool for CacheEntry.\n"));\r
       Status = EFI_OUT_OF_RESOURCES;\r
       goto UNLOCK_EXIT;\r
     }\r
@@ -255,14 +253,14 @@ ArpAdd (
   // Add this CacheEntry to the corresponding CacheTable.\r
   //\r
   if (DenyFlag) {\r
-    NetListInsertHead (&ArpService->DeniedCacheTable, &CacheEntry->List);\r
+    InsertHeadList (&ArpService->DeniedCacheTable, &CacheEntry->List);\r
   } else {\r
-    NetListInsertHead (&ArpService->ResolvedCacheTable, &CacheEntry->List);\r
+    InsertHeadList (&ArpService->ResolvedCacheTable, &CacheEntry->List);\r
   }\r
 \r
 UNLOCK_EXIT:\r
 \r
-  NET_UNLOCK (&ArpService->Lock);\r
+  gBS->RestoreTPL (OldTpl);\r
 \r
   return Status;\r
 }\r
@@ -309,7 +307,7 @@ ArpFind (
 {\r
   EFI_STATUS         Status;\r
   ARP_INSTANCE_DATA  *Instance;\r
-  ARP_SERVICE_DATA   *ArpService;\r
+  EFI_TPL            OldTpl;\r
 \r
   if ((This == NULL) ||\r
     (!Refresh && (EntryCount == NULL) && (EntryLength == NULL)) ||\r
@@ -318,15 +316,12 @@ ArpFind (
   }\r
 \r
   Instance   = ARP_INSTANCE_DATA_FROM_THIS (This);\r
-  ArpService = Instance->ArpService;\r
 \r
   if (!Instance->Configured) {\r
     return EFI_NOT_STARTED;\r
   }\r
 \r
-  if (EFI_ERROR (NET_TRYLOCK (&ArpService->Lock))) {\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   //\r
   // All the check passed, find the cache entries now.\r
@@ -341,7 +336,7 @@ ArpFind (
              Refresh\r
              );\r
 \r
-  NET_UNLOCK (&ArpService->Lock);\r
+  gBS->RestoreTPL (OldTpl);\r
 \r
   return Status;\r
 }\r
@@ -373,8 +368,8 @@ ArpDelete (
   )\r
 {\r
   ARP_INSTANCE_DATA  *Instance;\r
-  ARP_SERVICE_DATA   *ArpService;\r
   UINTN              Count;\r
+  EFI_TPL            OldTpl;\r
 \r
   if (This == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -386,18 +381,14 @@ ArpDelete (
     return EFI_NOT_STARTED;\r
   }\r
 \r
-  ArpService = Instance->ArpService;\r
-\r
-  if (EFI_ERROR (NET_TRYLOCK (&ArpService->Lock))) {\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   //\r
   // Delete the specified cache entries.\r
   //\r
   Count = ArpDeleteCacheEntry (Instance, BySwAddress, AddressBuffer, TRUE);\r
 \r
-  NET_UNLOCK (&ArpService->Lock);\r
+  gBS->RestoreTPL (OldTpl);\r
 \r
   return (Count == 0) ? EFI_NOT_FOUND : EFI_SUCCESS;\r
 }\r
@@ -422,8 +413,8 @@ ArpFlush (
   )\r
 {\r
   ARP_INSTANCE_DATA  *Instance;\r
-  ARP_SERVICE_DATA   *ArpService;\r
   UINTN              Count;\r
+  EFI_TPL            OldTpl;\r
 \r
   if (This == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -435,18 +426,14 @@ ArpFlush (
     return EFI_NOT_STARTED;\r
   }\r
 \r
-  ArpService = Instance->ArpService;\r
-\r
-  if (EFI_ERROR (NET_TRYLOCK (&ArpService->Lock))) {\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   //\r
   // Delete the dynamic entries from the cache table.\r
   //\r
   Count = ArpDeleteCacheEntry (Instance, FALSE, NULL, FALSE);\r
 \r
-  NET_UNLOCK (&ArpService->Lock);\r
+  gBS->RestoreTPL (OldTpl);\r
 \r
   return (Count == 0) ? EFI_NOT_FOUND : EFI_SUCCESS;\r
 }\r
@@ -491,6 +478,7 @@ ArpRequest (
   NET_ARP_ADDRESS          HardwareAddress;\r
   NET_ARP_ADDRESS          ProtocolAddress;\r
   USER_REQUEST_CONTEXT     *RequestContext;\r
+  EFI_TPL                  OldTpl;\r
 \r
   if ((This == NULL) || (TargetHwAddress == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -507,17 +495,17 @@ ArpRequest (
   SnpMode    = &ArpService->SnpMode;\r
 \r
   if ((TargetSwAddress == NULL) ||\r
-    ((Instance->ConfigData.SwAddressType == IPv4_ETHER_PROTO_TYPE) &&\r
+    ((Instance->ConfigData.SwAddressType == IPV4_ETHER_PROTO_TYPE) &&\r
     IP4_IS_LOCAL_BROADCAST (*((UINT32 *)TargetSwAddress)))) {\r
     //\r
     // Return the hardware broadcast address.\r
     //\r
-    NetCopyMem (TargetHwAddress, &SnpMode->BroadcastAddress, SnpMode->HwAddressSize);\r
+    CopyMem (TargetHwAddress, &SnpMode->BroadcastAddress, SnpMode->HwAddressSize);\r
 \r
     goto SIGNAL_USER;\r
   }\r
 \r
-  if ((Instance->ConfigData.SwAddressType == IPv4_ETHER_PROTO_TYPE) &&\r
+  if ((Instance->ConfigData.SwAddressType == IPV4_ETHER_PROTO_TYPE) &&\r
     IP4_IS_MULTICAST (NTOHL (*((UINT32 *)TargetSwAddress)))) {\r
     //\r
     // If the software address is an IPv4 multicast address, invoke Mnp to\r
@@ -543,11 +531,9 @@ ArpRequest (
   //\r
   // Initialize the TargetHwAddrss to a zero address.\r
   //\r
-  NetZeroMem (TargetHwAddress, SnpMode->HwAddressSize);\r
+  ZeroMem (TargetHwAddress, SnpMode->HwAddressSize);\r
 \r
-  if (EFI_ERROR (NET_TRYLOCK (&ArpService->Lock))) {\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   //\r
   // Check whether the software address is in the denied table.\r
@@ -572,7 +558,7 @@ ArpRequest (
     //\r
     // Resolved, copy the address into the user buffer.\r
     //\r
-    NetCopyMem (\r
+    CopyMem (\r
       TargetHwAddress,\r
       CacheEntry->Addresses[Hardware].AddressPtr,\r
       CacheEntry->Addresses[Hardware].Length\r
@@ -589,9 +575,9 @@ ArpRequest (
   //\r
   // Create a request context for this arp request.\r
   //\r
-  RequestContext = NetAllocatePool (sizeof(USER_REQUEST_CONTEXT));\r
+  RequestContext = AllocatePool (sizeof(USER_REQUEST_CONTEXT));\r
   if (RequestContext == NULL) {\r
-    ARP_DEBUG_ERROR (("ArpRequest: Allocate memory for RequestContext failed.\n"));\r
+    DEBUG ((EFI_D_ERROR, "ArpRequest: Allocate memory for RequestContext failed.\n"));\r
 \r
     Status = EFI_OUT_OF_RESOURCES;\r
     goto UNLOCK_EXIT;\r
@@ -600,7 +586,7 @@ ArpRequest (
   RequestContext->Instance         = Instance;\r
   RequestContext->UserRequestEvent = ResolvedEvent;\r
   RequestContext->UserHwAddrBuffer = TargetHwAddress;\r
-  NetListInit (&RequestContext->List);\r
+  InitializeListHead (&RequestContext->List);\r
 \r
   //\r
   // Check whether there is a same request.\r
@@ -622,8 +608,8 @@ ArpRequest (
     //\r
     CacheEntry = ArpAllocCacheEntry (Instance);\r
     if (CacheEntry == NULL) {\r
-      ARP_DEBUG_ERROR (("ArpRequest: Allocate memory for CacheEntry failed.\n"));\r
-      NetFreePool (RequestContext);\r
+      DEBUG ((EFI_D_ERROR, "ArpRequest: Allocate memory for CacheEntry failed.\n"));\r
+      gBS->FreePool (RequestContext);\r
 \r
       Status = EFI_OUT_OF_RESOURCES;\r
       goto UNLOCK_EXIT;\r
@@ -637,13 +623,13 @@ ArpRequest (
     //\r
     // Add this entry into the PendingRequestTable.\r
     //\r
-    NetListInsertTail (&ArpService->PendingRequestTable, &CacheEntry->List);\r
+    InsertTailList (&ArpService->PendingRequestTable, &CacheEntry->List);\r
   }\r
 \r
   //\r
   // Link this request context into the cache entry.\r
   //\r
-  NetListInsertHead (&CacheEntry->UserRequestList, &RequestContext->List);\r
+  InsertHeadList (&CacheEntry->UserRequestList, &RequestContext->List);\r
 \r
   //\r
   // Send out the ARP Request frame.\r
@@ -653,12 +639,17 @@ ArpRequest (
 \r
 UNLOCK_EXIT:\r
 \r
-  NET_UNLOCK (&ArpService->Lock);\r
+  gBS->RestoreTPL (OldTpl);\r
 \r
 SIGNAL_USER:\r
 \r
   if ((ResolvedEvent != NULL) && (Status == EFI_SUCCESS)) {\r
     gBS->SignalEvent (ResolvedEvent);\r
+\r
+    //\r
+    // Dispatch the DPC queued by the NotifyFunction of ResolvedEvent.\r
+    //\r
+    NetLibDispatchDpc ();\r
   }\r
 \r
   return Status;\r
@@ -695,8 +686,8 @@ ArpCancel (
   )\r
 {\r
   ARP_INSTANCE_DATA  *Instance;\r
-  ARP_SERVICE_DATA   *ArpService;\r
   UINTN              Count;\r
+  EFI_TPL            OldTpl;\r
 \r
   if ((This == NULL) ||\r
     ((TargetSwAddress != NULL) && (ResolvedEvent == NULL)) ||\r
@@ -710,18 +701,20 @@ ArpCancel (
     return EFI_NOT_STARTED;\r
   }\r
 \r
-  ArpService = Instance->ArpService;\r
-\r
-  if (EFI_ERROR (NET_TRYLOCK (&ArpService->Lock))) {\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   //\r
   // Cancel the specified request.\r
   //\r
   Count = ArpCancelRequest (Instance, TargetSwAddress, ResolvedEvent);\r
 \r
-  NET_UNLOCK (&ArpService->Lock);\r
+  //\r
+  // Dispatch the DPCs queued by the NotifyFunction of the events signaled\r
+  // by ArpCancleRequest.\r
+  //\r
+  NetLibDispatchDpc ();\r
+\r
+  gBS->RestoreTPL (OldTpl);\r
 \r
   return (Count == 0) ? EFI_NOT_FOUND : EFI_SUCCESS;\r
 }\r