From: Olivier Martin <[email protected]>

When Arp driver starts (with ArpDriverBindingStart()), its service will be 
created
and the Mnp child configured (ArpService->Mnp->Configure() called in 
ArpCreateService()).

It is only at this time the Snp protocol will be initialized (at the end of 
MnpStart()).
So, a valid SnpMode could not be expected prior to ArpService->Mnp->Configure().

Signed-off-by: Olivier Martin <[email protected]>
---
 MdeModulePkg/Universal/Network/ArpDxe/ArpDriver.c |   33 +++++++++++----------
 1 file changed, 17 insertions(+), 16 deletions(-)
 mode change 100644 => 100755 MdeModulePkg/Universal/Network/ArpDxe/ArpDriver.c

diff --git a/MdeModulePkg/Universal/Network/ArpDxe/ArpDriver.c 
b/MdeModulePkg/Universal/Network/ArpDxe/ArpDriver.c
old mode 100644
new mode 100755
index 81ddd62..5cf717f
--- a/MdeModulePkg/Universal/Network/ArpDxe/ArpDriver.c
+++ b/MdeModulePkg/Universal/Network/ArpDxe/ArpDriver.c
@@ -103,22 +103,6 @@ ArpCreateService (
   }
 
   //
-  // Get the underlayer Snp mode data.
-  //
-  Status = ArpService->Mnp->GetModeData (ArpService->Mnp, NULL, 
&ArpService->SnpMode);
-  if ((Status != EFI_NOT_STARTED) && EFI_ERROR (Status)) {
-    goto ERROR_EXIT;
-  }
-
-  if (ArpService->SnpMode.IfType != NET_IFTYPE_ETHERNET) {
-    //
-    // Only support the ethernet.
-    //
-    Status = EFI_UNSUPPORTED;
-    goto ERROR_EXIT;
-  }
-
-  //
   // Set the Mnp config parameters.
   //
   ArpService->MnpConfigData.ReceivedQueueTimeoutValue = 0;
@@ -141,6 +125,23 @@ ArpCreateService (
   }
 
   //
+  // Get the underlayer Snp mode data. Must do this after MNP configuration 
else some parameters
+  // (e.g. current address) may not be set
+  //
+  Status = ArpService->Mnp->GetModeData (ArpService->Mnp, NULL, 
&ArpService->SnpMode);
+  if ((Status != EFI_NOT_STARTED) && EFI_ERROR (Status)) {
+    goto ERROR_EXIT;
+  }
+
+  if (ArpService->SnpMode.IfType != NET_IFTYPE_ETHERNET) {
+    //
+    // Only support the ethernet.
+    //
+    Status = EFI_UNSUPPORTED;
+    goto ERROR_EXIT;
+  }
+
+  //
   // Create the event used in the RxToken.
   //
   Status = gBS->CreateEvent (
-- 
1.7.10.4


------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to