summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Martin <olivier.martin@arm.com>2013-01-10 11:43:23 +0000
committerReece R. Pollack <reece.pollack@linaro.org>2013-09-25 22:40:46 -0400
commitf514468cea92785403c4b40b3678e72d3a6b0e34 (patch)
treef70b4c357a1be7cb5b0619063372094649515703
parente1e78a61254a56dd093c04b1465b335476b4f8ea (diff)
MdeModulePkg//ArpDxe: Retrieved SnpMode only after configuring Snp
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>
-rwxr-xr-x[-rw-r--r--]MdeModulePkg/Universal/Network/ArpDxe/ArpDriver.c33
1 files changed, 17 insertions, 16 deletions
diff --git a/MdeModulePkg/Universal/Network/ArpDxe/ArpDriver.c b/MdeModulePkg/Universal/Network/ArpDxe/ArpDriver.c
index 81ddd6263..5cf717f94 100644..100755
--- 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 (