From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E0A85C6FD1D for ; Thu, 30 Mar 2023 19:53:30 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 5DE7E8615A; Thu, 30 Mar 2023 21:52:44 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=amarulasolutions.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=amarulasolutions.com header.i=@amarulasolutions.com header.b="nfI9FPFb"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id D007A85F6F; Thu, 30 Mar 2023 21:51:53 +0200 (CEST) Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 76144860B1 for ; Thu, 30 Mar 2023 21:49:14 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=amarulasolutions.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=francis.laniel@amarulasolutions.com Received: by mail-wr1-x442.google.com with SMTP id t4so14992911wra.7 for ; Thu, 30 Mar 2023 12:49:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; t=1680205753; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Q2sCKGnArZDq1GWvnBoqSuJrJbjUCGFoLIroz3kxVs0=; b=nfI9FPFbQflKCYEFKEUdUon3VYk9vH5KVduUENDPSg7x4vjCMxOi4u3IxbK7hk3kJD 22WcC6QBaN08rxt1bfibkaTjYNB6iGcNG75JfUVW0TsvEqXv7RD+/W9PqEi7djT+d+F2 VglViakDhzoBmNXxVHEY0+QPDBIJ7AXlpzVHo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680205753; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Q2sCKGnArZDq1GWvnBoqSuJrJbjUCGFoLIroz3kxVs0=; b=C515Jpyh5T7qtmKW/do4ME1WsfCB31kAOsbjG74ecXkohq7n5XkaKejb69pZdczwp8 IWGQ+pQCQLs8/JmbbcTGHyr0NvUlkr/kTJKftkuFL1b0l1sWJBoIX1wtozmf8RtjtODY McJqBA+ad2xUPkOhF2/mPZCNehKqrn1iJfLHPWZPbHLPEreENdlNo34WbLScG2xty1nL o9U7EHyrFmQJV1Uv6G67gKfH+54GTYTCZa81qlcYiYKzguKeThfDvWg4pAboERyYl80v cQ8IWfEzuQoKeLvuWm3LVdsLZ8wFQNhwnAH+JIHHhawOuULY2oaXXb71p8pJmfeg7Prn sn3A== X-Gm-Message-State: AAQBX9crjKTWhQGQI4IZnDuyc9NbwwuvQ0AnXXMZzGzc4bJGW653TPb7 DLLV7hFc4aooMPZrcM+yzso0M7EeLer70BZFBGQJWSdj X-Google-Smtp-Source: AKy350Z5PYNzKd05g6A74ftjjwGD9txUpeN1gT52A7FzniTFZh7/+TBXY9imPe30BxDBQSq8PwpGpQ== X-Received: by 2002:a5d:63d1:0:b0:2d5:b6a9:772a with SMTP id c17-20020a5d63d1000000b002d5b6a9772amr19093394wrw.17.1680205752870; Thu, 30 Mar 2023 12:49:12 -0700 (PDT) Received: from pwmachine.numericable.fr ([78.30.11.60]) by smtp.gmail.com with ESMTPSA id l24-20020a1c7918000000b003e203681b26sm203762wme.29.2023.03.30.12.49.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Mar 2023 12:49:12 -0700 (PDT) From: Francis Laniel To: u-boot@lists.denx.de Cc: Michael Nazzareno Trimarchi , Tom Rini , Simon Glass , Harald Seiler , Francis Laniel , "Albert ARIBAUD (3ADEV)" , Tony Dinh , Sergei Antonov , Ilias Apalodimas , Heinrich Schuchardt , Masahisa Kojima , =?UTF-8?q?Pali=20Roh=C3=A1r?= , Stefan Roese , John Keeping , Roger Knecht , Neil Armstrong , Robert Marko , Alexey Romanov , Fabrice Gasnier , Patrick Delaunay , Marek Vasut , Hector Palacios , Rasmus Villemoes , AKASHI Takahiro , Linus Walleij , Rui Miguel Silva , Andrew Scull Subject: [RFC PATCH v7 11/23] cmd: Add new parser command Date: Thu, 30 Mar 2023 20:46:59 +0100 Message-Id: <20230330194716.23623-12-francis.laniel@amarulasolutions.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230330194716.23623-1-francis.laniel@amarulasolutions.com> References: <20230330194716.23623-1-francis.laniel@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean This command can be used to print the current parser with 'parser print'. It can also be used to set the current parser with 'parser set'. For the moment, only one value is valid for set: old. Signed-off-by: Francis Laniel --- cmd/Makefile | 2 + cmd/parser.c | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++ common/cli.c | 3 +- 3 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 cmd/parser.c diff --git a/cmd/Makefile b/cmd/Makefile index 36d2daf22a..659a64371a 100644 --- a/cmd/Makefile +++ b/cmd/Makefile @@ -220,6 +220,8 @@ obj-$(CONFIG_CMD_AVB) += avb.o # Foundries.IO SCP03 obj-$(CONFIG_CMD_SCP03) += scp03.o +obj-$(CONFIG_HUSH_PARSER) += parser.o + obj-$(CONFIG_ARM) += arm/ obj-$(CONFIG_RISCV) += riscv/ obj-$(CONFIG_SANDBOX) += sandbox/ diff --git a/cmd/parser.c b/cmd/parser.c new file mode 100644 index 0000000000..0a433b7dc6 --- /dev/null +++ b/cmd/parser.c @@ -0,0 +1,120 @@ +// SPDX-License-Identifier: GPL-2.0+ + +#include +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +static const char *gd_flags_to_parser(void) +{ + if (gd->flags & GD_FLG_HUSH_OLD_PARSER) + return "old"; + return NULL; +} + +static int do_parser_get(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + const char *current = gd_flags_to_parser(); + + if (!current) { + printf("current parser value is not valid, this should not happen!\n"); + return CMD_RET_FAILURE; + } + + printf("%s\n", current); + + return CMD_RET_SUCCESS; +} + +static int parser_string_to_gd_flags(const char *parser) +{ + if (!strcmp(parser, "old")) + return GD_FLG_HUSH_OLD_PARSER; + return -1; +} + +static void reset_parser_gd_flags(void) +{ + gd->flags &= ~GD_FLG_HUSH_OLD_PARSER; +} + +static int do_parser_set(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + char *parser_name; + int parser_flag; + + if (argc < 2) + return CMD_RET_USAGE; + + parser_name = argv[1]; + + parser_flag = parser_string_to_gd_flags(parser_name); + if (parser_flag == -1) { + printf("Bad value for parser name: %s\n", parser_name); + return CMD_RET_USAGE; + } + + if (parser_flag == GD_FLG_HUSH_OLD_PARSER && + !CONFIG_IS_ENABLED(HUSH_OLD_PARSER)) { + printf("Want to set current parser to old, but its code was not compiled!\n"); + return CMD_RET_FAILURE; + } + + if (parser_flag == GD_FLG_HUSH_2021_PARSER && + !CONFIG_IS_ENABLED(HUSH_2021_PARSER)) { + printf("Want to set current parser to 2021, but its code was not compiled!\n"); + return CMD_RET_FAILURE; + } + + reset_parser_gd_flags(); + gd->flags |= parser_flag; + + cli_init(); + cli_loop(); + + /* cli_loop() should never return. */ + return CMD_RET_FAILURE; +} + +static struct cmd_tbl parser_sub[] = { + U_BOOT_CMD_MKENT(get, 1, 1, do_parser_get, "", ""), + U_BOOT_CMD_MKENT(set, 2, 1, do_parser_set, "", ""), +}; + +static int do_parser(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + struct cmd_tbl *cp; + + if (argc < 2) + return CMD_RET_USAGE; + + /* drop initial "parser" arg */ + argc--; + argv++; + + cp = find_cmd_tbl(argv[0], parser_sub, ARRAY_SIZE(parser_sub)); + if (cp) + return cp->cmd(cmdtp, flag, argc, argv); + + return CMD_RET_USAGE; +} + +#if CONFIG_IS_ENABLED(SYS_LONGHELP) +static char parser_help_text[] = + "get - print current parser\n" + "set - set the current parser, possible value is: old" + ; +#endif + +U_BOOT_CMD(parser, 3, 1, do_parser, + "parser", +#if CONFIG_IS_ENABLED(SYS_LONGHELP) + parser_help_text +#endif +); diff --git a/common/cli.c b/common/cli.c index 5eef0cad8c..21f98ca99c 100644 --- a/common/cli.c +++ b/common/cli.c @@ -255,7 +255,8 @@ void cli_loop(void) void cli_init(void) { #ifdef CONFIG_HUSH_PARSER - if (!(gd->flags & GD_FLG_HUSH_OLD_PARSER)) + if (!(gd->flags & GD_FLG_HUSH_OLD_PARSER) + && CONFIG_IS_ENABLED(HUSH_OLD_PARSER)) gd->flags |= GD_FLG_HUSH_OLD_PARSER; u_boot_hush_start(); #endif -- 2.34.1