From patchwork Tue Jul 11 20:06:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 786846 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 3x6YDl6wJYz9s81 for ; Wed, 12 Jul 2017 06:13:27 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id B54B5C21C73; Tue, 11 Jul 2017 20:08:59 +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 5852CC21EE5; Tue, 11 Jul 2017 20:07:51 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 3D842C21E93; Tue, 11 Jul 2017 20:07:34 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) by lists.denx.de (Postfix) with ESMTPS id B81ABC21EC7 for ; Tue, 11 Jul 2017 20:07:30 +0000 (UTC) Received: from workstation4.fritz.box ([88.152.145.149]) by mail.gmx.com (mrgmx001 [212.227.17.184]) with ESMTPSA (Nemesis) id 0Lq9oW-1e8m230vNQ-00dpEw; Tue, 11 Jul 2017 22:06:39 +0200 From: Heinrich Schuchardt To: Alexander Graf Date: Tue, 11 Jul 2017 22:06:22 +0200 Message-Id: <20170711200625.7108-10-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170711200625.7108-1-xypron.glpk@gmx.de> References: <20170711200625.7108-1-xypron.glpk@gmx.de> X-Provags-ID: V03:K0:bGlC/Nd4dgZQMHhpX3tNlJH/om5CRkZffvbEVgjS+hKS3he6mUB t/4x6dArvNK+KY8Ss6BjrK+HFYmC0IWURhxOzJk1Z8Yt17APzbekOSqqI/JKj4XNe5PuZJo NRTBKDpewZVrg47CqGGr6A1PTq8jg9GccyKdwQA+xDTuCCUjAehCWQQ5Rsk9sr178Q38Gx9 Mn+1Zbj+Y/i9RD0LaN6eQ== X-UI-Out-Filterresults: notjunk:1; V01:K0:uylAVdSTLbo=:4lcPMDYk+zQZ4pzccXZpD3 XR9iIIyNT2/zCXqpa4eQ/wwXiiDE1rsoN7oNG6P0oAj7WAu/mKY3feL1Rm/tLrTO8kV+CaTcg S+OZCMn4fPpnYHyjsD6OPJLWHUIMAx+GQb7/BNpG3w/0I7jjaBkbaGsQdA1HwE3v/FiJwojTf VXK7aLNxDe1EGes2XDb+PWNmsIjxm69XLIfYlrCNJg5tAfQYJoCd0s/2dUOpnQ9I2YKnSflH2 +QhwEwsJk9nm+qS0JMZHw9Nu0bdaIYAUhjv1260elgJovUdF2GAYpmo/z8FqqnLbsqETZdsvU 9JZ1TNYnhKWb/HtvW7qyBsmssUCS6llgzXgo5j6x4k4uSiQ6cot1Fy8I8gRE6kq2AkxgkQXfZ +vnBrZl329tKY3NVpgncRntqtTej4OXgqP9x3wetOmBJTesKXFlxx00GE0vWTiQNvysXbPZJF JYp+DAL8Jp4e0dxUsZ1hwNm0E9sWCWh2lGXpGIZy5qat1pDM6Je3+DI10xv8wYSm37mM44PQI IYGTFvtYxzic/oUlejfWhf+ZS6rYWtNTEDawx6hY52mWcxPHPvwxDi+vY8q/27qaEN8tpRx3V GEz80dDo6nIcrvht2DTXzlGfLpqJD9JhHJ2TuA3X3LuAWhys9ar3fq+SahMpOXLFk5KN2E1WO m51edQqfS1IfV+jhQ7kyNUOgUSv+FqwNGDSx34EyqHugcmFfMGkNQwsROP0sSFwhPnSeo/DW/ rMTGKGC18K859z0/CCVKbVJbtxrtKPJfg8IKefZZZ9+8MTNjAxk9N8KpkxA= Cc: Heinrich Schuchardt , u-boot@lists.denx.de Subject: [U-Boot] [PATCH v2 09/12] 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 --- v2 no change --- 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[] = {