@retval 1 Callbacks are not active on the handle\r
\r
**/\r
-STATIC\r
BOOLEAN\r
SetMakeCallback (\r
IN PXE_BASECODE_DEVICE *Private\r
return EFI_ALREADY_STARTED;\r
}\r
\r
-#if !SUPPORT_IPV6\r
//\r
// Fail if IPv6 is requested and not supported.\r
//\r
EfiReleaseLock (&Private->Lock);\r
return EFI_UNSUPPORTED;\r
}\r
-#endif\r
//\r
// Setup shortcuts to SNP protocol and data structure.\r
//\r
if (EFI_ERROR (Status)) {\r
goto PxeBcError;\r
}\r
- \r
+\r
//\r
// Get the Snp interface\r
//\r
// implementation supports IPv6.\r
//\r
Private->EfiBc.Mode->Ipv6Supported = SUPPORT_IPV6;\r
-\r
-#if SUPPORT_IPV6\r
- Private->EfiBc.Mode->Ipv6Available = Private->NiiPtr->Ipv6Supported;\r
-#else\r
Private->EfiBc.Mode->Ipv6Available = FALSE;\r
-#endif\r
+\r
//\r
// Set to TRUE by the BC constructor if this BC\r
// implementation supports BIS.\r
return Status;\r
}\r
\r
+EFI_STATUS\r
+EFIAPI\r
+PxeBcUnload (\r
+ IN EFI_HANDLE ImageHandle\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ UINTN DeviceHandleCount;\r
+ EFI_HANDLE *DeviceHandleBuffer;\r
+ UINTN Index;\r
+\r
+ Status = gBS->LocateHandleBuffer (\r
+ AllHandles,\r
+ NULL,\r
+ NULL,\r
+ &DeviceHandleCount,\r
+ &DeviceHandleBuffer\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+ for (Index = 0; Index < DeviceHandleCount; Index++) {\r
+ Status = gBS->DisconnectController (\r
+ DeviceHandleBuffer[Index],\r
+ mPxeBcDriverBinding.DriverBindingHandle,\r
+ NULL\r
+ );\r
+ }\r
+\r
+ if (DeviceHandleBuffer != NULL) {\r
+ gBS->FreePool (DeviceHandleBuffer);\r
+ }\r
+ }\r
+\r
+ return Status;\r
+}\r
+\r
\r
/**\r
Initialize the base code drivers and install the driver binding\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
+ EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;\r
\r
//\r
// Initialize EFI library\r
&gPxeBcComponentName2\r
);\r
\r
+ Status = gBS->HandleProtocol (\r
+ ImageHandle,\r
+ &gEfiLoadedImageProtocolGuid,\r
+ (VOID **) &LoadedImage\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ } else {\r
+ LoadedImage->Unload = PxeBcUnload;\r
+ }\r
+\r
InitArpHeader ();\r
OptionsStrucInit ();\r
\r