From patchwork Fri Aug 10 17:29:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geoff Levand X-Patchwork-Id: 956356 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41nBvk56btz9s4Z for ; Sat, 11 Aug 2018 03:29:54 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=infradead.org header.i=@infradead.org header.b="UHVIPU5k"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 41nBvk2z7SzF0WK for ; Sat, 11 Aug 2018 03:29:54 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=infradead.org header.i=@infradead.org header.b="UHVIPU5k"; dkim-atps=neutral X-Original-To: Petitboot@lists.ozlabs.org Delivered-To: Petitboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=none (mailfrom) smtp.mailfrom=infradead.org (client-ip=2001:8b0:10b:1231::1; helo=merlin.infradead.org; envelope-from=geoff@infradead.org; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=infradead.org header.i=@infradead.org header.b="UHVIPU5k"; dkim-atps=neutral Received: from merlin.infradead.org (merlin.infradead.org [IPv6:2001:8b0:10b:1231::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 41nBv31lZ3zDqrN for ; Sat, 11 Aug 2018 03:29:19 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=merlin.20170209; h=Date:Cc:To:Subject:From:References: In-Reply-To:Message-Id:Sender:Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=zZPxAGW+TnzIhMSkaILCvyNADudKCEyjfrfJ6MpiBBk=; b=UHVIPU5kLr9LzpD73YYrZWu6F F60bMWYZXmhm6J4pP8b/mn/sGgmRCagJdFV4DmzK0/9sx7HyOXGi5iRWDp39TArTLmQ7kRb7QNQ1/ P8A1aC581JYFBiY7fEboA2f1yR+3dqI039NQ3QxvwDXHSwS3qCiPn3VVoG5iPCtSV0YTb47eKDJRE 0AUSIZaeKGV6dmx/xFz4Wb4bA4OaXSBUHGzgUzivfSY1uZGuKMoaukrnDPafOWOPp7D4Fs+gYdU2W V8a1S8ZDIpIrIAqF2vyDOUPuyzge7cYp312fqdlnmQskqfPAkKrVR15j568elU1bHj98Q7ewkX7Uz VeafmpYUw==; Received: from geoff by merlin.infradead.org with local (Exim 4.90_1 #2 (Red Hat Linux)) id 1foBDv-0002QN-CD; Fri, 10 Aug 2018 17:29:15 +0000 Message-Id: <491ae2a9dd807e5d93bc8e6c1ec27f5e5ce7a33d.1533921283.git.geoff@infradead.org> In-Reply-To: References: From: Geoff Levand Patch-Date: Fri, 10 Aug 2018 10:00:12 -0700 Subject: [PATCH v1 6/6] discover/arm64: Update to struct efi_mount To: Samuel Mendoza-Jonas Date: Fri, 10 Aug 2018 17:29:15 +0000 X-BeenThere: petitboot@lists.ozlabs.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: Petitboot bootloader development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Petitboot@lists.ozlabs.org MIME-Version: 1.0 Errors-To: petitboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Petitboot" Signed-off-by: Geoff Levand --- discover/platform-arm64.c | 57 +++++++++++++++++++++-------------------------- 1 file changed, 25 insertions(+), 32 deletions(-) diff --git a/discover/platform-arm64.c b/discover/platform-arm64.c index 0eb2579..6fefa74 100644 --- a/discover/platform-arm64.c +++ b/discover/platform-arm64.c @@ -22,7 +22,6 @@ #include #include #include -#include #include "efi/efivar.h" #include "file/file.h" @@ -32,13 +31,11 @@ #include "talloc/talloc.h" #include "types/types.h" - #include "ipmi.h" #include "platform.h" -static const char *efi_vars_guid = "fb78ab4b-bd43-41a0-99a2-4e74bef9169b"; - struct platform_arm64 { + const struct efi_mount *efi_mount; struct param_list *params; struct ipmi *ipmi; }; @@ -48,28 +45,34 @@ static inline struct platform_arm64 *to_platform_arm64(struct platform *p) return (struct platform_arm64 *)(p->platform_data); } -static void parse_nvram(struct param_list *pl) +static void read_efivars(const struct efi_mount *efi_mount, + struct param_list *pl) { const char** known; + if (!efi_mount) + return; + param_list_for_each_known_param(pl, known) { struct efi_data *efi_data; - if (efi_get_variable(NULL, efi_vars_guid, *known, &efi_data)) + if (efi_get_variable(NULL, efi_mount, *known, &efi_data)) continue; - param_list_set(pl, *known, efi_data->data, - true); - + param_list_set(pl, *known, efi_data->data, true); talloc_free(efi_data); } } -static void write_nvram(const struct param_list *pl) +static void write_efivars(const struct efi_mount *efi_mount, + const struct param_list *pl) { struct efi_data efi_data; struct param *param; + if (!efi_mount) + return; + efi_data.attributes = EFI_DEFALT_ATTRIBUTES; param_list_for_each(pl, param) { @@ -78,7 +81,7 @@ static void write_nvram(const struct param_list *pl) efi_data.data = param->value; efi_data.data_size = strlen(param->value) + 1; - efi_set_variable(efi_vars_guid, param->name, &efi_data); + efi_set_variable(efi_mount, param->name, &efi_data); } } @@ -100,9 +103,10 @@ static void get_active_consoles(struct config *config) static int load_config(struct platform *p, struct config *config) { + const struct efi_mount *efi_mount = to_platform_arm64(p)->efi_mount; struct param_list *pl = to_platform_arm64(p)->params; - parse_nvram(pl); + read_efivars(efi_mount, pl); config_populate_all(config, pl); get_active_consoles(config); @@ -218,6 +222,7 @@ static void params_update_all(struct param_list *pl, static int save_config(struct platform *p, struct config *config) { + const struct efi_mount *efi_mount = to_platform_arm64(p)->efi_mount; struct param_list *pl = to_platform_arm64(p)->params; struct config *defaults; @@ -227,38 +232,26 @@ static int save_config(struct platform *p, struct config *config) params_update_all(pl, config, defaults); talloc_free(defaults); - write_nvram(pl); + write_efivars(efi_mount, pl); return 0; } static bool probe(struct platform *p, void *ctx) { - static const char *efivars = "/sys/firmware/efi/efivars"; + static const struct efi_mount efi_mount = { + .path = "/sys/firmware/efi/efivars", + .guid = "fb78ab4b-bd43-41a0-99a2-4e74bef9169b", + }; struct platform_arm64 *platform; - struct statfs buf; - - if (access(efivars, R_OK | W_OK)) { - pb_debug_fn("Can't access %s\n", efivars); - return false; - } - - memset(&buf, '\0', sizeof(buf)); - if (statfs(efivars, &buf)) { - pb_debug_fn("statfs failed: %s: %s\n", efivars, - strerror(errno)); - return false; - } - - if (buf.f_type != EFIVARFS_MAGIC) { - pb_debug_fn("Bad magic = 0x%lx\n", (unsigned long)buf.f_type); - return false; - } platform = talloc_zero(ctx, struct platform_arm64); platform->params = talloc_zero(platform, struct param_list); param_list_init(platform->params, common_known_params()); + if (efi_check_mount(&efi_mount)) + platform->efi_mount = &efi_mount; + p->platform_data = platform; return true;