From patchwork Wed Jul 26 11:41:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Graf X-Patchwork-Id: 108754 Delivered-To: patch@linaro.org Received: by 10.140.101.44 with SMTP id t41csp692045qge; Wed, 26 Jul 2017 04:41:15 -0700 (PDT) X-Received: by 10.80.214.89 with SMTP id c25mr595904edj.232.1501069275652; Wed, 26 Jul 2017 04:41:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1501069275; cv=none; d=google.com; s=arc-20160816; b=Zld19iMQQMpGlnq1PpCKB02R6hT9xMmdeJ6k1LO819Eu+4YjrWfd2JVbS9FN6+bAC3 peDYdpZ9jVstMHqHHD+aPA44FzZn7atQAjHtnWrUnHIDKeNAPHGdhCpHBCG6XdoZwUSc btsRKcoAAT6GvNMRxVh3Qcf1mmny43JFoC8CXvlEIGM+aAEDNXFnyo0W3rR5y/ICAbbH qIyv28ecReE2NKgQ1P77LWEk54TKgc022YfPr1niTTcBGmrykUuyXaHfOAd/YvjxBnQ2 4a6QDfDi6VWlJqfpm4s+vo1Yyl5A28s1IzfaKHUrafLSQWxKePYDZnNRy3I8t3kpLtaH 152Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:cc:message-id:date:to:from :arc-authentication-results; bh=s9rdscZohTm0c5bfWFuoWwNz8yvVRUmdqqecWcRdULY=; b=FEX84VOy74baZtPXXmmSsI8AmFu9jztz9vcvRUpSirv7JF1oNEBk6fN+k5uKwymplw XRLG4Cd44wD8KmnT1HpkYWiqOsu/B3MldqD9VgjAwgrSn1kjOVfHIj00Wh/2D5oysu+R mWX4CGtvu9JTOZlIBQASwbLU/LIAlaWQKaR6V52LjC5WH91gL1PRY9l7bW6uteYRFjSk 6inh10yMUMusd3HAb8BU61y8Ie4zxYiFbmNdAfb59ukv40COt3/AZL8gYAeFb1fTQiyE ZhFekgJA0cJrg8xQPtB6uKA+9GjYCOw23wdPKvvhMHm4FSEUVRc4Snu3kVXg5lpvLmhl qTXQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Return-Path: Received: from lists.denx.de (dione.denx.de. [81.169.180.215]) by mx.google.com with ESMTP id g30si11256162ede.335.2017.07.26.04.41.14; Wed, 26 Jul 2017 04:41:15 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) client-ip=81.169.180.215; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by lists.denx.de (Postfix, from userid 105) id ADC05C21F88; Wed, 26 Jul 2017 11:41:10 +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=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED 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 8413BC21E31; Wed, 26 Jul 2017 11:41:08 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 38C15C21E31; Wed, 26 Jul 2017 11:41:07 +0000 (UTC) Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by lists.denx.de (Postfix) with ESMTPS id DE1B4C21DA3 for ; Wed, 26 Jul 2017 11:41:06 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 664B7AB1E; Wed, 26 Jul 2017 11:41:06 +0000 (UTC) From: Alexander Graf To: u-boot@lists.denx.de Date: Wed, 26 Jul 2017 13:41:04 +0200 Message-Id: <20170726114105.51159-1-agraf@suse.de> X-Mailer: git-send-email 2.12.3 Cc: Heinrich Schuchardt Subject: [U-Boot] [PATCH 1/2] efi_loader: Improve install_configuration_table 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" The INSTALL_CONFIGURATION_TABLE callback also provides the ability to remove table entries. This patch adds that functionality. Signed-off-by: Alexander Graf --- lib/efi_loader/efi_boottime.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c index 9a1a93fade..17c531a480 100644 --- a/lib/efi_loader/efi_boottime.c +++ b/lib/efi_loader/efi_boottime.c @@ -630,6 +630,17 @@ static efi_status_t EFIAPI efi_locate_device_path(efi_guid_t *protocol, return EFI_EXIT(EFI_NOT_FOUND); } +/* Collapses configuration table entries, removing index i */ +static void efi_remove_configuration_table(int i) +{ + struct efi_configuration_table *this = &efi_conf_table[i]; + struct efi_configuration_table *next = &efi_conf_table[i+1]; + struct efi_configuration_table *end = &efi_conf_table[systab.nr_tables]; + + memmove(this, next, (ulong)end - (ulong)next); + systab.nr_tables--; +} + efi_status_t efi_install_configuration_table(const efi_guid_t *guid, void *table) { int i; @@ -637,11 +648,17 @@ efi_status_t efi_install_configuration_table(const efi_guid_t *guid, void *table /* Check for guid override */ for (i = 0; i < systab.nr_tables; i++) { if (!guidcmp(guid, &efi_conf_table[i].guid)) { - efi_conf_table[i].table = table; + if (table) + efi_conf_table[i].table = table; + else + efi_remove_configuration_table(i); return EFI_SUCCESS; } } + if (!table) + return EFI_NOT_FOUND; + /* No override, check for overflow */ if (i >= ARRAY_SIZE(efi_conf_table)) return EFI_OUT_OF_RESOURCES;