diff mbox

[02/10] MdeModulePkg//ArpDxe: Retrieved SnpMode only after configuring Snp

Message ID 1381174801-17221-3-git-send-email-reece.pollack@linaro.org
State New
Headers show

Commit Message

Reece R. Pollack Oct. 7, 2013, 7:39 p.m. UTC
From: Olivier Martin <olivier.martin@arm.com>

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 <olivier.martin@arm.com>
---
 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 mbox

Patch

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 (