From patchwork Wed Jul 5 16:18:55 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 784725 X-Patchwork-Delegate: agraf@suse.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3x2mRp3SHCz9s71 for ; Thu, 6 Jul 2017 02:24:54 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 2CB3AC21EC2; Wed, 5 Jul 2017 16:22:35 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_NONE autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id C7B67C21F2B; Wed, 5 Jul 2017 16:20:34 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id C6116C21F00; Wed, 5 Jul 2017 16:20:27 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by lists.denx.de (Postfix) with ESMTPS id 78A2EC21F04 for ; Wed, 5 Jul 2017 16:20:21 +0000 (UTC) Received: from workstation4.fritz.box ([88.152.145.149]) by mail.gmx.com (mrgmx003 [212.227.17.184]) with ESMTPSA (Nemesis) id 0LgqQQ-1e5zve1dH4-00oEWG; Wed, 05 Jul 2017 18:19:32 +0200 From: Heinrich Schuchardt To: Alexander Graf Date: Wed, 5 Jul 2017 18:18:55 +0200 Message-Id: <20170705161855.20124-10-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170705161855.20124-1-xypron.glpk@gmx.de> References: <20170705161855.20124-1-xypron.glpk@gmx.de> X-Provags-ID: V03:K0:H4KTLsq015eU0LOatNa7XOYJF3bxswuP8WOWRhzxokpP7xBGgZ9 UVGnUK9v9SUYUcNDENtuKfIDLE+HigVn1LRvXtfef5BvLYx8jp2SQBz9/JEVwsTlIWu+mv5 6MC4g0lfZBc6rGZO0g24fWZEiTfz1njadCtRDft9FH2q5HrmIXorpu/N0AVohZxScCn65se wa46pCMzraaa+3xfMO9vg== X-UI-Out-Filterresults: notjunk:1; V01:K0:feJ1JObwoJY=:wf2uwvN4d2g0iXBxlfi7nz UCvlJIweLYIEUK+feN4qvk7NPt816l1CsOb57JBDZK736pi9l/rYDpvabmLy5jWmbh8DAwjaG B9cWuPOJrSY8ylwv36xUix1Cxoq/JITvnOkgHGHPrO8fz6fUMyh4BHeUDUcEUYqFGqM2eKhrl n7n3F0h54qRa9JqaRn6I8DV04XDlhHY4uj+w4sPz9I1D7rsKVitNdKqX0wcPSLNV4EvSVb1Mk 2lfkbmy+DkYxuWxnyzFLYn+qYNj2Cm2dOpPIyjxtAgn8ctd/7PJbg2bnrZs+hJ2OTK5cdgUXA QWNYyODLrAi4Yk3Osg+TntJjmXpTn1Txnntq2lMr8i891Jgz1lBOP38AP5TEk+AqdafFAZ4Wa /jZBWtB5cHsm90qTLknEqVD4+wXwSg9ChFqZHqqjXUSQmYW2AMs5rqGddAPgvRnv7SsXhzR81 zE1wlLOTVBH+SWs/0FRDBOku3j2HjcksHuNZZQPk4AWLDNfdmlF2fcuM/AOMVijO8iBF1KPqv rAhq/lpQv81//Ir0N1U/MndwF4O65KwW5BZRgZNout9kvgArC/sQiw48DAtVBehWxLViS0vPb 4f5iAYzxwlXPvae6CqybCrUsqFF8oq+d8eG21HyspiRXWyM1iPK5Zt4DrL7G+8TfDcgOSMhVX veTzzVRC5wevpjFbyLCM4tG8PTSbyadq0cydRs51cJ7ph9uur9Wih8TYW42/m+kONsZGMHi9f BIObaAdFWoIoovGFYEj1IqIVKBTQDarwfYOOBvZaS+YPHWwfSggD/FuWCs8= Cc: u-boot@lists.denx.de, Heinrich Schuchardt Subject: [U-Boot] [PATCH 9/9] efi_loader: implement LocateHandleBuffer X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" UEFI boot service LocateHandleBuffer is implemented by calling efi_allocate_handle and efi_locate_handle. Signed-off-by: Heinrich Schuchardt --- lib/efi_loader/efi_boottime.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c index 888207681c..3060c25a2a 100644 --- a/lib/efi_loader/efi_boottime.c +++ b/lib/efi_loader/efi_boottime.c @@ -753,9 +753,32 @@ static efi_status_t EFIAPI efi_locate_handle_buffer( efi_guid_t *protocol, void *search_key, unsigned long *no_handles, efi_handle_t **buffer) { + efi_status_t r; + unsigned long buffer_size = 0; + EFI_ENTRY("%d, %p, %p, %p, %p", search_type, protocol, search_key, no_handles, buffer); - return EFI_EXIT(EFI_NOT_FOUND); + + if (!no_handles || !buffer) { + r = EFI_INVALID_PARAMETER; + goto out; + } + *no_handles = 0; + *buffer = NULL; + r = efi_locate_handle(search_type, protocol, search_key, &buffer_size, + *buffer); + if (r != EFI_BUFFER_TOO_SMALL) + goto out; + r = efi_allocate_pool(EFI_ALLOCATE_ANY_PAGES, buffer_size, + (void **)buffer); + if (r != EFI_SUCCESS) + goto out; + r = efi_locate_handle(search_type, protocol, search_key, &buffer_size, + *buffer); + if (r == EFI_SUCCESS) + *no_handles = buffer_size / sizeof(void *); +out: + return EFI_EXIT(r); } static struct efi_class_map efi_class_maps[] = {