X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=NetworkPkg%2FIScsiDxe%2FIScsiDriver.c;h=6d6f9a13ed8b8f33059872bc1f1dd3b7b27682ca;hp=cc452e711048314fed534522312928d223930013;hb=b7cc5bf180e9deefc91a5e66e0b80fd222503608;hpb=05a300115ab80963e2a722aaaa8adbb3b6c5007c diff --git a/NetworkPkg/IScsiDxe/IScsiDriver.c b/NetworkPkg/IScsiDxe/IScsiDriver.c index cc452e7110..6d6f9a13ed 100644 --- a/NetworkPkg/IScsiDxe/IScsiDriver.c +++ b/NetworkPkg/IScsiDxe/IScsiDriver.c @@ -112,13 +112,16 @@ IScsiSupported ( EFI_STATUS Status; EFI_GUID *IScsiServiceBindingGuid; EFI_GUID *TcpServiceBindingGuid; + EFI_GUID *DhcpServiceBindingGuid; if (IpVersion == IP_VERSION_4) { IScsiServiceBindingGuid = &gIScsiV4PrivateGuid; TcpServiceBindingGuid = &gEfiTcp4ServiceBindingProtocolGuid; + DhcpServiceBindingGuid = &gEfiDhcp4ServiceBindingProtocolGuid; } else { IScsiServiceBindingGuid = &gIScsiV6PrivateGuid; TcpServiceBindingGuid = &gEfiTcp6ServiceBindingProtocolGuid; + DhcpServiceBindingGuid = &gEfiDhcp6ServiceBindingProtocolGuid; } Status = gBS->OpenProtocol ( @@ -131,24 +134,40 @@ IScsiSupported ( ); if (!EFI_ERROR (Status)) { return EFI_ALREADY_STARTED; - } else { + } + + Status = gBS->OpenProtocol ( + ControllerHandle, + TcpServiceBindingGuid, + NULL, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_TEST_PROTOCOL + ); + if (EFI_ERROR (Status)) { + return EFI_UNSUPPORTED; + } + + Status = IScsiIsDevicePathSupported (RemainingDevicePath); + if (EFI_ERROR (Status)) { + return EFI_UNSUPPORTED; + } + + if (IScsiDhcpIsConfigured (ControllerHandle, IpVersion)) { Status = gBS->OpenProtocol ( ControllerHandle, - TcpServiceBindingGuid, + DhcpServiceBindingGuid, NULL, This->DriverBindingHandle, ControllerHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL ); - if (!EFI_ERROR (Status)) { - Status = IScsiIsDevicePathSupported (RemainingDevicePath); - if (!EFI_ERROR (Status)) { - return EFI_SUCCESS; - } + if (EFI_ERROR (Status)) { + return EFI_UNSUPPORTED; } } - - return EFI_UNSUPPORTED; + + return EFI_SUCCESS; }