/** @file\r
The driver binding and service binding protocol for IP6 driver.\r
\r
- Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>\r
\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
goto ON_ERROR;\r
}\r
\r
- //\r
- // The timer expires every 100 (IP6_TIMER_INTERVAL_IN_MS) milliseconds.\r
- //\r
- Status = gBS->SetTimer (IpSb->FasterTimer, TimerPeriodic, TICKS_PER_MS * IP6_TIMER_INTERVAL_IN_MS);\r
+ Status = NetLibGetMacString (IpSb->Controller, IpSb->Image, &IpSb->MacString);\r
if (EFI_ERROR (Status)) {\r
goto ON_ERROR;\r
}\r
\r
- //\r
- // The timer expires every 1000 (IP6_ONE_SECOND_IN_MS) milliseconds.\r
- //\r
- Status = gBS->SetTimer (IpSb->Timer, TimerPeriodic, TICKS_PER_MS * IP6_ONE_SECOND_IN_MS);\r
+ Status = Ip6ConfigInitInstance (&IpSb->Ip6ConfigInstance);\r
if (EFI_ERROR (Status)) {\r
goto ON_ERROR;\r
}\r
\r
+ IpSb->DefaultInterface = Ip6CreateInterface (IpSb, TRUE);\r
+ if (IpSb->DefaultInterface == NULL) {\r
+ Status = EFI_DEVICE_ERROR;\r
+ goto ON_ERROR;\r
+ }\r
\r
Status = gBS->CreateEvent (\r
EVT_NOTIFY_SIGNAL,\r
goto ON_ERROR;\r
}\r
\r
- Status = Ip6ReceiveFrame (Ip6AcceptFrame, IpSb);\r
- if (EFI_ERROR (Status)) {\r
- goto ON_ERROR;\r
- }\r
-\r
- Status = NetLibGetMacString (IpSb->Controller, IpSb->Image, &IpSb->MacString);\r
- if (EFI_ERROR (Status)) {\r
- goto ON_ERROR;\r
- }\r
-\r
- Status = Ip6ConfigInitInstance (&IpSb->Ip6ConfigInstance);\r
- if (EFI_ERROR (Status)) {\r
- goto ON_ERROR;\r
- }\r
-\r
- IpSb->DefaultInterface = Ip6CreateInterface (IpSb, TRUE);\r
- if (IpSb->DefaultInterface == NULL) {\r
- Status = EFI_DEVICE_ERROR;\r
- goto ON_ERROR;\r
- }\r
-\r
//\r
// If there is any manual address, set it.\r
//\r
NULL\r
);\r
\r
- if (EFI_ERROR (Status)) {\r
+ if (!EFI_ERROR (Status)) {\r
+ //\r
+ // ready to go: start the receiving and timer\r
+ //\r
+ Status = Ip6ReceiveFrame (Ip6AcceptFrame, IpSb);\r
+ if (EFI_ERROR (Status)) {\r
+ goto ON_ERROR;\r
+ }\r
+\r
+ //\r
+ // The timer expires every 100 (IP6_TIMER_INTERVAL_IN_MS) milliseconds.\r
+ //\r
+ Status = gBS->SetTimer (\r
+ IpSb->FasterTimer,\r
+ TimerPeriodic,\r
+ TICKS_PER_MS * IP6_TIMER_INTERVAL_IN_MS\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ goto ON_ERROR;\r
+ }\r
+\r
+ //\r
+ // The timer expires every 1000 (IP6_ONE_SECOND_IN_MS) milliseconds.\r
+ //\r
+ Status = gBS->SetTimer (\r
+ IpSb->Timer,\r
+ TimerPeriodic,\r
+ TICKS_PER_MS * IP6_ONE_SECOND_IN_MS\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ goto ON_ERROR;\r
+ } \r
\r
- Ip6CleanService (IpSb);\r
- FreePool (IpSb);\r
- } else {\r
//\r
// Initialize the IP6 ID\r
//\r
mIp6Id = NET_RANDOM (NetRandomInitSeed ());\r
\r
Ip6SetVariableData (IpSb);\r
+\r
+ return EFI_SUCCESS;\r
}\r
\r
+ON_ERROR:\r
+ Ip6CleanService (IpSb);\r
+ FreePool (IpSb);\r
return Status;\r
}\r
\r