From 441f48f5b0847d35937534d6052f704f19019d2d Mon Sep 17 00:00:00 2001 From: lpleahy Date: Fri, 1 Jun 2012 20:01:30 +0000 Subject: [PATCH] UseEfiSocketLib.c - Only exit for out of resources, otherwise use all network adapters. Service.c - Return EFI_SUCCESS if any of the protocols are present. Return failure only when no protocols are available or no more memory available. Signed-off-by: lpleahy Reviewed-by: vzimmer git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13426 6f19259b-4bc3-4df7-8a09-765794883524 --- StdLib/EfiSocketLib/Service.c | 35 ++++++++------------------- StdLib/EfiSocketLib/UseEfiSocketLib.c | 13 +++++++--- 2 files changed, 20 insertions(+), 28 deletions(-) diff --git a/StdLib/EfiSocketLib/Service.c b/StdLib/EfiSocketLib/Service.c index 927f0e45b4..414cace00b 100644 --- a/StdLib/EfiSocketLib/Service.c +++ b/StdLib/EfiSocketLib/Service.c @@ -29,7 +29,8 @@ @param [in] Controller Handle of device to work with. @retval EFI_SUCCESS This driver is added to Controller. - @retval other This driver does not support this device. + @retval EFI_OUT_OF_RESOURCES No more memory available. + @retval EFI_UNSUPPORTED This driver does not support this device. **/ EFI_STATUS @@ -40,6 +41,7 @@ EslServiceConnect ( ) { BOOLEAN bInUse; + EFI_STATUS ExitStatus; UINTN LengthInBytes; UINT8 * pBuffer; CONST ESL_SOCKET_BINDING * pEnd; @@ -56,7 +58,7 @@ EslServiceConnect ( // // Assume the list is empty // - Status = EFI_UNSUPPORTED; + ExitStatus = EFI_UNSUPPORTED; bInUse = FALSE; // @@ -171,28 +173,9 @@ EslServiceConnect ( RESTORE_TPL ( TplPrevious ); // - // Determine if the initialization was successful + // At least one service was made available // - if ( EFI_ERROR ( Status )) { - DEBUG (( DEBUG_ERROR | DEBUG_POOL | DEBUG_INIT, - "ERROR - Failed to initialize service %s on 0x%08x, Status: %r\r\n", - pSocketBinding->pName, - Controller, - Status )); - - // - // Free the network service binding if necessary - // - gBS->UninstallMultipleProtocolInterfaces ( - Controller, - pSocketBinding->pTagGuid, - pService, - NULL ); - DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO, - "Removed: %s TagGuid from 0x%08x\r\n", - pSocketBinding->pName, - Controller )); - } + ExitStatus = EFI_SUCCESS; } else { DEBUG (( DEBUG_ERROR | DEBUG_POOL | DEBUG_INIT, @@ -241,6 +224,8 @@ EslServiceConnect ( DEBUG (( DEBUG_ERROR | DEBUG_INIT, "ERROR - Failed service allocation, Status: %r\r\n", Status )); + ExitStatus = EFI_OUT_OF_RESOURCES; + break; } } } @@ -254,8 +239,8 @@ EslServiceConnect ( // // Display the driver start status // - DBG_EXIT_STATUS ( Status ); - return Status; + DBG_EXIT_STATUS ( ExitStatus ); + return ExitStatus; } diff --git a/StdLib/EfiSocketLib/UseEfiSocketLib.c b/StdLib/EfiSocketLib/UseEfiSocketLib.c index ed72e8e763..6f4248b3d2 100644 --- a/StdLib/EfiSocketLib/UseEfiSocketLib.c +++ b/StdLib/EfiSocketLib/UseEfiSocketLib.c @@ -196,10 +196,17 @@ EslServiceNetworkConnect ( for ( Index = 0; HandleCount > Index; Index++ ) { Status = EslServiceConnect ( gImageHandle, pHandles[ Index ]); - if ( EFI_ERROR ( Status )) { - break; + if ( !EFI_ERROR ( Status )) { + bSomethingFound = TRUE; + } + else { + if ( EFI_OUT_OF_RESOURCES == Status ) { + // + // Pointless to continue without memory + // + break; + } } - bSomethingFound = TRUE; } // -- 2.39.2