\r
--*/\r
{\r
- return NetLibInstallAllDriverProtocols (\r
+ return EfiLibInstallDriverBindingComponentName2 (\r
ImageHandle,\r
SystemTable,\r
&gDhcp4DriverBinding,\r
ImageHandle,\r
&gDhcp4ComponentName,\r
- NULL,\r
- NULL\r
+ &gDhcp4ComponentName2\r
);\r
}\r
\r
//\r
Status = gBS->CreateEvent (\r
EVT_NOTIFY_SIGNAL | EVT_TIMER,\r
- TPL_CALLBACK,\r
+ NET_TPL_TIMER,\r
DhcpOnTimerTick,\r
DhcpSb,\r
&DhcpSb->Timer\r
NicHandle = NetLibGetNicHandle (ControllerHandle, &gEfiUdp4ProtocolGuid);\r
\r
if (NicHandle == NULL) {\r
- return EFI_SUCCESS;\r
+ return EFI_DEVICE_ERROR;\r
}\r
\r
Status = gBS->OpenProtocol (\r
return EFI_SUCCESS;\r
}\r
\r
- OldTpl = NET_RAISE_TPL (NET_TPL_LOCK);\r
- DhcpSb->InDestory = TRUE;\r
-\r
- //\r
- // Don't use NET_LIST_FOR_EACH_SAFE here, Dhcp4ServiceBindingDestoryChild\r
- // may cause other child to be deleted.\r
- //\r
- while (!NetListIsEmpty (&DhcpSb->Children)) {\r
- Instance = NET_LIST_HEAD (&DhcpSb->Children, DHCP_PROTOCOL, Link);\r
- Dhcp4ServiceBindingDestroyChild (ServiceBinding, Instance->Handle);\r
- }\r
+ OldTpl = NET_RAISE_TPL (NET_TPL_LOCK);\r
\r
- if (DhcpSb->NumChildren != 0) {\r
- Status = EFI_DEVICE_ERROR;\r
- goto ON_ERROR;\r
- }\r
+ if (NumberOfChildren == 0) {\r
\r
- DhcpSb->ServiceState = DHCP_DESTORY;\r
+ DhcpSb->InDestory = TRUE;\r
+ DhcpSb->ServiceState = DHCP_DESTORY;\r
\r
- Status = gBS->UninstallProtocolInterface (\r
- NicHandle,\r
- &gEfiDhcp4ServiceBindingProtocolGuid,\r
- ServiceBinding\r
- );\r
+ gBS->UninstallProtocolInterface (\r
+ NicHandle,\r
+ &gEfiDhcp4ServiceBindingProtocolGuid,\r
+ ServiceBinding\r
+ );\r
\r
- if (EFI_ERROR (Status)) {\r
- goto ON_ERROR;\r
+ Dhcp4CloseService (DhcpSb);\r
+\r
+ NetFreePool (DhcpSb);\r
+ } else {\r
+ //\r
+ // Don't use NET_LIST_FOR_EACH_SAFE here, Dhcp4ServiceBindingDestoryChild\r
+ // may cause other child to be deleted.\r
+ //\r
+ while (!NetListIsEmpty (&DhcpSb->Children)) {\r
+ Instance = NET_LIST_HEAD (&DhcpSb->Children, DHCP_PROTOCOL, Link);\r
+ ServiceBinding->DestroyChild (ServiceBinding, Instance->Handle);\r
+ }\r
+\r
+ if (DhcpSb->NumChildren != 0) {\r
+ Status = EFI_DEVICE_ERROR;\r
+ }\r
}\r
\r
- Dhcp4CloseService (DhcpSb);\r
NET_RESTORE_TPL (OldTpl);\r
\r
- NetFreePool (DhcpSb);\r
- return EFI_SUCCESS;\r
-\r
-ON_ERROR:\r
- DhcpSb->InDestory = FALSE;\r
- NET_RESTORE_TPL (OldTpl);\r
return Status;\r
}\r
\r
Instance->CompletionEvent = NULL;\r
Instance->RenewRebindEvent = NULL;\r
Instance->Token = NULL;\r
+ Instance->UdpIo = NULL;\r
+ NetbufQueInit (&Instance->ResponseQueue);\r
}\r
\r
\r