diff mbox series

[v2,3/5] efi_loader: utility function to check the variable name is "Boot####"

Message ID 20221128124509.6939-4-masahisa.kojima@linaro.org
State Superseded, archived
Delegated to: Heinrich Schuchardt
Headers show
Series miscellaneous fixes of eficonfig | expand

Commit Message

Masahisa Kojima Nov. 28, 2022, 12:45 p.m. UTC
Some commands need to enumerate the existing UEFI load
option variable("Boot####"). This commit transfers some code
from cmd/efidebug.c to lib/efi_loder/, then exposes u16_tohex() and
efi_varname_is_load_option() function to check whether the
UEFI variable name is "Boot####".

Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
---
Newly created in v2

 cmd/efidebug.c              | 23 +----------------------
 include/efi_loader.h        |  2 ++
 lib/efi_loader/efi_helper.c | 33 +++++++++++++++++++++++++++++++++
 3 files changed, 36 insertions(+), 22 deletions(-)

Comments

Ilias Apalodimas Nov. 29, 2022, 7:33 a.m. UTC | #1
On Mon, Nov 28, 2022 at 09:45:07PM +0900, Masahisa Kojima wrote:
> Some commands need to enumerate the existing UEFI load
> option variable("Boot####"). This commit transfers some code
> from cmd/efidebug.c to lib/efi_loder/, then exposes u16_tohex() and
> efi_varname_is_load_option() function to check whether the
> UEFI variable name is "Boot####".
> 
> Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
> ---
> Newly created in v2
> 
>  cmd/efidebug.c              | 23 +----------------------
>  include/efi_loader.h        |  2 ++
>  lib/efi_loader/efi_helper.c | 33 +++++++++++++++++++++++++++++++++
>  3 files changed, 36 insertions(+), 22 deletions(-)
> 
> diff --git a/cmd/efidebug.c b/cmd/efidebug.c
> index ef239bb34b..ceb3aa5cee 100644
> --- a/cmd/efidebug.c
> +++ b/cmd/efidebug.c
> @@ -1010,17 +1010,6 @@ static void show_efi_boot_opt(u16 *varname16)
>  	}
>  }
>  
> -static int u16_tohex(u16 c)
> -{
> -	if (c >= '0' && c <= '9')
> -		return c - '0';
> -	if (c >= 'A' && c <= 'F')
> -		return c - 'A' + 10;
> -
> -	/* not hexadecimal */
> -	return -1;
> -}
> -
>  /**
>   * show_efi_boot_dump() - dump all UEFI load options
>   *
> @@ -1041,7 +1030,6 @@ static int do_efi_boot_dump(struct cmd_tbl *cmdtp, int flag,
>  	u16 *var_name16, *p;
>  	efi_uintn_t buf_size, size;
>  	efi_guid_t guid;
> -	int id, i, digit;
>  	efi_status_t ret;
>  
>  	if (argc > 1)
> @@ -1074,16 +1062,7 @@ static int do_efi_boot_dump(struct cmd_tbl *cmdtp, int flag,
>  			return CMD_RET_FAILURE;
>  		}
>  
> -		if (memcmp(var_name16, u"Boot", 8))
> -			continue;
> -
> -		for (id = 0, i = 0; i < 4; i++) {
> -			digit = u16_tohex(var_name16[4 + i]);
> -			if (digit < 0)
> -				break;
> -			id = (id << 4) + digit;
> -		}
> -		if (i == 4 && !var_name16[8])
> +		if (efi_varname_is_load_option(var_name16, NULL))
>  			show_efi_boot_opt(var_name16);
>  	}
>  
> diff --git a/include/efi_loader.h b/include/efi_loader.h
> index 0c6c95ba46..b1ded811e7 100644
> --- a/include/efi_loader.h
> +++ b/include/efi_loader.h
> @@ -707,6 +707,8 @@ int algo_to_len(const char *algo);
>  
>  int efi_link_dev(efi_handle_t handle, struct udevice *dev);
>  int efi_unlink_dev(efi_handle_t handle);
> +int u16_tohex(u16 c);
> +bool efi_varname_is_load_option(u16 *var_name16, int *index);
>  
>  /**
>   * efi_size_in_pages() - convert size in bytes to size in pages
> diff --git a/lib/efi_loader/efi_helper.c b/lib/efi_loader/efi_helper.c
> index c71e87d118..8a7afcc381 100644
> --- a/lib/efi_loader/efi_helper.c
> +++ b/lib/efi_loader/efi_helper.c
> @@ -190,3 +190,36 @@ int efi_unlink_dev(efi_handle_t handle)
>  
>  	return 0;
>  }
> +
> +int u16_tohex(u16 c)

This needs static

> +{
> +	if (c >= '0' && c <= '9')
> +		return c - '0';
> +	if (c >= 'A' && c <= 'F')
> +		return c - 'A' + 10;
> +
> +	/* not hexadecimal */
> +	return -1;
> +}
> +
> +bool efi_varname_is_load_option(u16 *var_name16, int *index)
> +{
> +	int id, i, digit;
> +
> +	if (memcmp(var_name16, u"Boot", 8))
> +		return false;
> +
> +	for (id = 0, i = 0; i < 4; i++) {
> +		digit = u16_tohex(var_name16[4 + i]);
> +		if (digit < 0)
> +			break;
> +		id = (id << 4) + digit;
> +	}
> +	if (i == 4 && !var_name16[8]) {
> +		if (index)
> +			*index = id;
> +		return true;
> +	}
> +
> +	return false;
> +}
> -- 
> 2.17.1
> 

With that 
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Masahisa Kojima Nov. 29, 2022, 9:57 a.m. UTC | #2
Hi Ilias,

On Tue, 29 Nov 2022 at 16:33, Ilias Apalodimas
<ilias.apalodimas@linaro.org> wrote:
>
> On Mon, Nov 28, 2022 at 09:45:07PM +0900, Masahisa Kojima wrote:
> > Some commands need to enumerate the existing UEFI load
> > option variable("Boot####"). This commit transfers some code
> > from cmd/efidebug.c to lib/efi_loder/, then exposes u16_tohex() and
> > efi_varname_is_load_option() function to check whether the
> > UEFI variable name is "Boot####".
> >
> > Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
> > ---
> > Newly created in v2
> >
> >  cmd/efidebug.c              | 23 +----------------------
> >  include/efi_loader.h        |  2 ++
> >  lib/efi_loader/efi_helper.c | 33 +++++++++++++++++++++++++++++++++
> >  3 files changed, 36 insertions(+), 22 deletions(-)
> >
> > diff --git a/cmd/efidebug.c b/cmd/efidebug.c
> > index ef239bb34b..ceb3aa5cee 100644
> > --- a/cmd/efidebug.c
> > +++ b/cmd/efidebug.c
> > @@ -1010,17 +1010,6 @@ static void show_efi_boot_opt(u16 *varname16)
> >       }
> >  }
> >
> > -static int u16_tohex(u16 c)
> > -{
> > -     if (c >= '0' && c <= '9')
> > -             return c - '0';
> > -     if (c >= 'A' && c <= 'F')
> > -             return c - 'A' + 10;
> > -
> > -     /* not hexadecimal */
> > -     return -1;
> > -}
> > -
> >  /**
> >   * show_efi_boot_dump() - dump all UEFI load options
> >   *
> > @@ -1041,7 +1030,6 @@ static int do_efi_boot_dump(struct cmd_tbl *cmdtp, int flag,
> >       u16 *var_name16, *p;
> >       efi_uintn_t buf_size, size;
> >       efi_guid_t guid;
> > -     int id, i, digit;
> >       efi_status_t ret;
> >
> >       if (argc > 1)
> > @@ -1074,16 +1062,7 @@ static int do_efi_boot_dump(struct cmd_tbl *cmdtp, int flag,
> >                       return CMD_RET_FAILURE;
> >               }
> >
> > -             if (memcmp(var_name16, u"Boot", 8))
> > -                     continue;
> > -
> > -             for (id = 0, i = 0; i < 4; i++) {
> > -                     digit = u16_tohex(var_name16[4 + i]);
> > -                     if (digit < 0)
> > -                             break;
> > -                     id = (id << 4) + digit;
> > -             }
> > -             if (i == 4 && !var_name16[8])
> > +             if (efi_varname_is_load_option(var_name16, NULL))
> >                       show_efi_boot_opt(var_name16);
> >       }
> >
> > diff --git a/include/efi_loader.h b/include/efi_loader.h
> > index 0c6c95ba46..b1ded811e7 100644
> > --- a/include/efi_loader.h
> > +++ b/include/efi_loader.h
> > @@ -707,6 +707,8 @@ int algo_to_len(const char *algo);
> >
> >  int efi_link_dev(efi_handle_t handle, struct udevice *dev);
> >  int efi_unlink_dev(efi_handle_t handle);
> > +int u16_tohex(u16 c);
> > +bool efi_varname_is_load_option(u16 *var_name16, int *index);
> >
> >  /**
> >   * efi_size_in_pages() - convert size in bytes to size in pages
> > diff --git a/lib/efi_loader/efi_helper.c b/lib/efi_loader/efi_helper.c
> > index c71e87d118..8a7afcc381 100644
> > --- a/lib/efi_loader/efi_helper.c
> > +++ b/lib/efi_loader/efi_helper.c
> > @@ -190,3 +190,36 @@ int efi_unlink_dev(efi_handle_t handle)
> >
> >       return 0;
> >  }
> > +
> > +int u16_tohex(u16 c)
>
> This needs static

OK, I will fix it.

>
> > +{
> > +     if (c >= '0' && c <= '9')
> > +             return c - '0';
> > +     if (c >= 'A' && c <= 'F')
> > +             return c - 'A' + 10;
> > +
> > +     /* not hexadecimal */
> > +     return -1;
> > +}
> > +
> > +bool efi_varname_is_load_option(u16 *var_name16, int *index)
> > +{
> > +     int id, i, digit;
> > +
> > +     if (memcmp(var_name16, u"Boot", 8))
> > +             return false;
> > +
> > +     for (id = 0, i = 0; i < 4; i++) {
> > +             digit = u16_tohex(var_name16[4 + i]);
> > +             if (digit < 0)
> > +                     break;
> > +             id = (id << 4) + digit;
> > +     }
> > +     if (i == 4 && !var_name16[8]) {
> > +             if (index)
> > +                     *index = id;
> > +             return true;
> > +     }
> > +
> > +     return false;
> > +}
> > --
> > 2.17.1
> >
>
> With that
> Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>

Thank you for the review.

Regards,
Masahisa Kojima

>
diff mbox series

Patch

diff --git a/cmd/efidebug.c b/cmd/efidebug.c
index ef239bb34b..ceb3aa5cee 100644
--- a/cmd/efidebug.c
+++ b/cmd/efidebug.c
@@ -1010,17 +1010,6 @@  static void show_efi_boot_opt(u16 *varname16)
 	}
 }
 
-static int u16_tohex(u16 c)
-{
-	if (c >= '0' && c <= '9')
-		return c - '0';
-	if (c >= 'A' && c <= 'F')
-		return c - 'A' + 10;
-
-	/* not hexadecimal */
-	return -1;
-}
-
 /**
  * show_efi_boot_dump() - dump all UEFI load options
  *
@@ -1041,7 +1030,6 @@  static int do_efi_boot_dump(struct cmd_tbl *cmdtp, int flag,
 	u16 *var_name16, *p;
 	efi_uintn_t buf_size, size;
 	efi_guid_t guid;
-	int id, i, digit;
 	efi_status_t ret;
 
 	if (argc > 1)
@@ -1074,16 +1062,7 @@  static int do_efi_boot_dump(struct cmd_tbl *cmdtp, int flag,
 			return CMD_RET_FAILURE;
 		}
 
-		if (memcmp(var_name16, u"Boot", 8))
-			continue;
-
-		for (id = 0, i = 0; i < 4; i++) {
-			digit = u16_tohex(var_name16[4 + i]);
-			if (digit < 0)
-				break;
-			id = (id << 4) + digit;
-		}
-		if (i == 4 && !var_name16[8])
+		if (efi_varname_is_load_option(var_name16, NULL))
 			show_efi_boot_opt(var_name16);
 	}
 
diff --git a/include/efi_loader.h b/include/efi_loader.h
index 0c6c95ba46..b1ded811e7 100644
--- a/include/efi_loader.h
+++ b/include/efi_loader.h
@@ -707,6 +707,8 @@  int algo_to_len(const char *algo);
 
 int efi_link_dev(efi_handle_t handle, struct udevice *dev);
 int efi_unlink_dev(efi_handle_t handle);
+int u16_tohex(u16 c);
+bool efi_varname_is_load_option(u16 *var_name16, int *index);
 
 /**
  * efi_size_in_pages() - convert size in bytes to size in pages
diff --git a/lib/efi_loader/efi_helper.c b/lib/efi_loader/efi_helper.c
index c71e87d118..8a7afcc381 100644
--- a/lib/efi_loader/efi_helper.c
+++ b/lib/efi_loader/efi_helper.c
@@ -190,3 +190,36 @@  int efi_unlink_dev(efi_handle_t handle)
 
 	return 0;
 }
+
+int u16_tohex(u16 c)
+{
+	if (c >= '0' && c <= '9')
+		return c - '0';
+	if (c >= 'A' && c <= 'F')
+		return c - 'A' + 10;
+
+	/* not hexadecimal */
+	return -1;
+}
+
+bool efi_varname_is_load_option(u16 *var_name16, int *index)
+{
+	int id, i, digit;
+
+	if (memcmp(var_name16, u"Boot", 8))
+		return false;
+
+	for (id = 0, i = 0; i < 4; i++) {
+		digit = u16_tohex(var_name16[4 + i]);
+		if (digit < 0)
+			break;
+		id = (id << 4) + digit;
+	}
+	if (i == 4 && !var_name16[8]) {
+		if (index)
+			*index = id;
+		return true;
+	}
+
+	return false;
+}