diff mbox series

[U-Boot,v2,1/2] efi_loader: typedef struct efi_object *efi_handle_t

Message ID 20180925101918.2524-2-xypron.glpk@gmx.de
State Superseded, archived
Delegated to: Alexander Graf
Headers show
Series efi_loader: eliminate handle member | expand

Commit Message

Heinrich Schuchardt Sept. 25, 2018, 10:19 a.m. UTC
All our handles point to a struct efi_object. So let's define the
efi_handle_t accordingly. This helps us to discover coding errors much
more easily. This becomes evident by the corrections to the usage of
handles in this patch.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
---
v2
	no change
---
 cmd/bootefi.c                              |  4 ++--
 include/efi.h                              |  2 +-
 include/efi_api.h                          |  8 ++++----
 lib/efi/efi.c                              |  2 +-
 lib/efi_loader/efi_boottime.c              | 18 +++++++++---------
 lib/efi_selftest/efi_selftest_devicepath.c |  2 +-
 6 files changed, 18 insertions(+), 18 deletions(-)

Comments

Mark Kettenis Sept. 25, 2018, 11:15 a.m. UTC | #1
> From: Heinrich Schuchardt <xypron.glpk@gmx.de>
> Date: Tue, 25 Sep 2018 12:19:17 +0200
> 
> All our handles point to a struct efi_object. So let's define the
> efi_handle_t accordingly. This helps us to discover coding errors much
> more easily. This becomes evident by the corrections to the usage of
> handles in this patch.
> 
> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> ---
> v2
> 	no change
> ---
>  cmd/bootefi.c                              |  4 ++--
>  include/efi.h                              |  2 +-
>  include/efi_api.h                          |  8 ++++----
>  lib/efi/efi.c                              |  2 +-
>  lib/efi_loader/efi_boottime.c              | 18 +++++++++---------
>  lib/efi_selftest/efi_selftest_devicepath.c |  2 +-
>  6 files changed, 18 insertions(+), 18 deletions(-)
> 
> diff --git a/cmd/bootefi.c b/cmd/bootefi.c
> index 9c51a2cbd1..05eb168e4a 100644
> --- a/cmd/bootefi.c
> +++ b/cmd/bootefi.c
> @@ -447,7 +447,7 @@ static efi_status_t do_bootefi_exec(void *efi,
>  	}
>  #endif
>  
> -	ret = efi_do_enter(image_handle, &systab, entry);
> +	ret = efi_do_enter(&image_handle->parent, &systab, entry);

This bit makes absolutely no sense to me :(.  What about the other
efi_do_enter() calls?  And why is the variable called image_handle if
it isn't a handle?

>  
>  exit:
>  	/* image has returned, loaded-image obj goes *poof*: */
> @@ -561,7 +561,7 @@ static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>  		/* Transfer environment variable efi_selftest as load options */
>  		set_load_options(loaded_image_info, "efi_selftest");
>  		/* Execute the test */
> -		r = efi_selftest(image_handle, &systab);
> +		r = efi_selftest(&image_handle->parent, &systab);
>  		efi_restore_gd();
>  		free(loaded_image_info->load_options);
>  		efi_delete_handle(&image_handle->parent);
> diff --git a/include/efi.h b/include/efi.h
> index b1deb609b4..b5e2c64f38 100644
> --- a/include/efi.h
> +++ b/include/efi.h
> @@ -96,7 +96,7 @@ typedef struct {
>  typedef unsigned long efi_status_t;
>  typedef u64 efi_physical_addr_t;
>  typedef u64 efi_virtual_addr_t;
> -typedef void *efi_handle_t;
> +typedef struct efi_object *efi_handle_t;
>  
>  #define EFI_GUID(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) \
>  	{{ (a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, \
> diff --git a/include/efi_api.h b/include/efi_api.h
> index c42df6900a..e6566bb358 100644
> --- a/include/efi_api.h
> +++ b/include/efi_api.h
> @@ -86,10 +86,10 @@ struct efi_boot_services {
>  	efi_status_t (EFIAPI *check_event)(struct efi_event *event);
>  #define EFI_NATIVE_INTERFACE	0x00000000
>  	efi_status_t (EFIAPI *install_protocol_interface)(
> -			void **handle, const efi_guid_t *protocol,
> +			efi_handle_t *handle, const efi_guid_t *protocol,
>  			int protocol_interface_type, void *protocol_interface);
>  	efi_status_t (EFIAPI *reinstall_protocol_interface)(
> -			void *handle, const efi_guid_t *protocol,
> +			efi_handle_t handle, const efi_guid_t *protocol,
>  			void *old_interface, void *new_interface);
>  	efi_status_t (EFIAPI *uninstall_protocol_interface)(
>  			efi_handle_t handle, const efi_guid_t *protocol,
> @@ -165,9 +165,9 @@ struct efi_boot_services {
>  	efi_status_t (EFIAPI *locate_protocol)(const efi_guid_t *protocol,
>  			void *registration, void **protocol_interface);
>  	efi_status_t (EFIAPI *install_multiple_protocol_interfaces)(
> -			void **handle, ...);
> +			efi_handle_t *handle, ...);
>  	efi_status_t (EFIAPI *uninstall_multiple_protocol_interfaces)(
> -			void *handle, ...);
> +			efi_handle_t handle, ...);
>  	efi_status_t (EFIAPI *calculate_crc32)(const void *data,
>  					       efi_uintn_t data_size,
>  					       u32 *crc32);
> diff --git a/lib/efi/efi.c b/lib/efi/efi.c
> index c6639f96cc..2c6a50824f 100644
> --- a/lib/efi/efi.c
> +++ b/lib/efi/efi.c
> @@ -69,7 +69,7 @@ int efi_init(struct efi_priv *priv, const char *banner, efi_handle_t image,
>  	efi_putc(priv, ' ');
>  
>  	ret = boot->open_protocol(priv->parent_image, &loaded_image_guid,
> -				  (void **)&loaded_image, &priv->parent_image,
> +				  (void **)&loaded_image, priv->parent_image,
>  				  NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);
>  	if (ret) {
>  		efi_puts(priv, "Failed to get loaded image protocol\n");
> diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
> index 8e3c7456e1..bc6ad84495 100644
> --- a/lib/efi_loader/efi_boottime.c
> +++ b/lib/efi_loader/efi_boottime.c
> @@ -1019,7 +1019,7 @@ efi_status_t efi_add_protocol(const efi_handle_t handle,
>   * Return: status code
>   */
>  static efi_status_t EFIAPI efi_install_protocol_interface(
> -			void **handle, const efi_guid_t *protocol,
> +			efi_handle_t *handle, const efi_guid_t *protocol,
>  			int protocol_interface_type, void *protocol_interface)
>  {
>  	efi_status_t r;
> @@ -2279,8 +2279,8 @@ out:
>   *
>   * Return: status code
>   */
> -static efi_status_t EFIAPI efi_install_multiple_protocol_interfaces(
> -			void **handle, ...)
> +static efi_status_t EFIAPI efi_install_multiple_protocol_interfaces
> +				(efi_handle_t *handle, ...)
>  {
>  	EFI_ENTRY("%p", handle);
>  
> @@ -2316,7 +2316,7 @@ static efi_status_t EFIAPI efi_install_multiple_protocol_interfaces(
>  	for (; i; --i) {
>  		protocol = efi_va_arg(argptr, efi_guid_t*);
>  		protocol_interface = efi_va_arg(argptr, void*);
> -		EFI_CALL(efi_uninstall_protocol_interface(handle, protocol,
> +		EFI_CALL(efi_uninstall_protocol_interface(*handle, protocol,
>  							  protocol_interface));
>  	}
>  	efi_va_end(argptr);
> @@ -2339,7 +2339,7 @@ static efi_status_t EFIAPI efi_install_multiple_protocol_interfaces(
>   * Return: status code
>   */
>  static efi_status_t EFIAPI efi_uninstall_multiple_protocol_interfaces(
> -			void *handle, ...)
> +			efi_handle_t handle, ...)
>  {
>  	EFI_ENTRY("%p", handle);
>  
> @@ -2554,10 +2554,10 @@ out:
>   *
>   * Return: status code
>   */
> -static efi_status_t EFIAPI efi_open_protocol(
> -			void *handle, const efi_guid_t *protocol,
> -			void **protocol_interface, void *agent_handle,
> -			void *controller_handle, uint32_t attributes)
> +static efi_status_t EFIAPI efi_open_protocol
> +			(efi_handle_t handle, const efi_guid_t *protocol,
> +			 void **protocol_interface, efi_handle_t agent_handle,
> +			 efi_handle_t controller_handle, uint32_t attributes)
>  {
>  	struct efi_handler *handler;
>  	efi_status_t r = EFI_INVALID_PARAMETER;
> diff --git a/lib/efi_selftest/efi_selftest_devicepath.c b/lib/efi_selftest/efi_selftest_devicepath.c
> index adcf531e90..105ce2c92b 100644
> --- a/lib/efi_selftest/efi_selftest_devicepath.c
> +++ b/lib/efi_selftest/efi_selftest_devicepath.c
> @@ -257,7 +257,7 @@ static int teardown(void)
>  static int execute(void)
>  {
>  	struct efi_device_path *remaining_dp;
> -	void *handle;
> +	efi_handle_t handle;
>  	/*
>  	 * This device path node ends with the letter 't' of 'u-boot'.
>  	 * The following '.bin' does not belong to the node but is
> -- 
> 2.19.0
> 
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> https://lists.denx.de/listinfo/u-boot
>
Heinrich Schuchardt Sept. 25, 2018, noon UTC | #2
On 09/25/2018 01:15 PM, Mark Kettenis wrote:
>> From: Heinrich Schuchardt <xypron.glpk@gmx.de>
>> Date: Tue, 25 Sep 2018 12:19:17 +0200
>>
>> All our handles point to a struct efi_object. So let's define the
>> efi_handle_t accordingly. This helps us to discover coding errors much
>> more easily. This becomes evident by the corrections to the usage of
>> handles in this patch.
>>
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
>> ---
>> v2
>> 	no change
>> ---
>>  cmd/bootefi.c                              |  4 ++--
>>  include/efi.h                              |  2 +-
>>  include/efi_api.h                          |  8 ++++----
>>  lib/efi/efi.c                              |  2 +-
>>  lib/efi_loader/efi_boottime.c              | 18 +++++++++---------
>>  lib/efi_selftest/efi_selftest_devicepath.c |  2 +-
>>  6 files changed, 18 insertions(+), 18 deletions(-)
>>
>> diff --git a/cmd/bootefi.c b/cmd/bootefi.c
>> index 9c51a2cbd1..05eb168e4a 100644
>> --- a/cmd/bootefi.c
>> +++ b/cmd/bootefi.c
>> @@ -447,7 +447,7 @@ static efi_status_t do_bootefi_exec(void *efi,
>>  	}
>>  #endif
>>  
>> -	ret = efi_do_enter(image_handle, &systab, entry);
>> +	ret = efi_do_enter(&image_handle->parent, &systab, entry);
> This bit makes absolutely no sense to me :(.  What about the other
> efi_do_enter() calls?  And why is the variable called image_handle if
> it isn't a handle?
> 
>>  

Thanks for pointing to this misnomer. We should rename image_handle to
image_obj in this function.

And we should be consistent about how we pass the address.

Regards

Heinrich
diff mbox series

Patch

diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index 9c51a2cbd1..05eb168e4a 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -447,7 +447,7 @@  static efi_status_t do_bootefi_exec(void *efi,
 	}
 #endif
 
-	ret = efi_do_enter(image_handle, &systab, entry);
+	ret = efi_do_enter(&image_handle->parent, &systab, entry);
 
 exit:
 	/* image has returned, loaded-image obj goes *poof*: */
@@ -561,7 +561,7 @@  static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		/* Transfer environment variable efi_selftest as load options */
 		set_load_options(loaded_image_info, "efi_selftest");
 		/* Execute the test */
-		r = efi_selftest(image_handle, &systab);
+		r = efi_selftest(&image_handle->parent, &systab);
 		efi_restore_gd();
 		free(loaded_image_info->load_options);
 		efi_delete_handle(&image_handle->parent);
diff --git a/include/efi.h b/include/efi.h
index b1deb609b4..b5e2c64f38 100644
--- a/include/efi.h
+++ b/include/efi.h
@@ -96,7 +96,7 @@  typedef struct {
 typedef unsigned long efi_status_t;
 typedef u64 efi_physical_addr_t;
 typedef u64 efi_virtual_addr_t;
-typedef void *efi_handle_t;
+typedef struct efi_object *efi_handle_t;
 
 #define EFI_GUID(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) \
 	{{ (a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, \
diff --git a/include/efi_api.h b/include/efi_api.h
index c42df6900a..e6566bb358 100644
--- a/include/efi_api.h
+++ b/include/efi_api.h
@@ -86,10 +86,10 @@  struct efi_boot_services {
 	efi_status_t (EFIAPI *check_event)(struct efi_event *event);
 #define EFI_NATIVE_INTERFACE	0x00000000
 	efi_status_t (EFIAPI *install_protocol_interface)(
-			void **handle, const efi_guid_t *protocol,
+			efi_handle_t *handle, const efi_guid_t *protocol,
 			int protocol_interface_type, void *protocol_interface);
 	efi_status_t (EFIAPI *reinstall_protocol_interface)(
-			void *handle, const efi_guid_t *protocol,
+			efi_handle_t handle, const efi_guid_t *protocol,
 			void *old_interface, void *new_interface);
 	efi_status_t (EFIAPI *uninstall_protocol_interface)(
 			efi_handle_t handle, const efi_guid_t *protocol,
@@ -165,9 +165,9 @@  struct efi_boot_services {
 	efi_status_t (EFIAPI *locate_protocol)(const efi_guid_t *protocol,
 			void *registration, void **protocol_interface);
 	efi_status_t (EFIAPI *install_multiple_protocol_interfaces)(
-			void **handle, ...);
+			efi_handle_t *handle, ...);
 	efi_status_t (EFIAPI *uninstall_multiple_protocol_interfaces)(
-			void *handle, ...);
+			efi_handle_t handle, ...);
 	efi_status_t (EFIAPI *calculate_crc32)(const void *data,
 					       efi_uintn_t data_size,
 					       u32 *crc32);
diff --git a/lib/efi/efi.c b/lib/efi/efi.c
index c6639f96cc..2c6a50824f 100644
--- a/lib/efi/efi.c
+++ b/lib/efi/efi.c
@@ -69,7 +69,7 @@  int efi_init(struct efi_priv *priv, const char *banner, efi_handle_t image,
 	efi_putc(priv, ' ');
 
 	ret = boot->open_protocol(priv->parent_image, &loaded_image_guid,
-				  (void **)&loaded_image, &priv->parent_image,
+				  (void **)&loaded_image, priv->parent_image,
 				  NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);
 	if (ret) {
 		efi_puts(priv, "Failed to get loaded image protocol\n");
diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
index 8e3c7456e1..bc6ad84495 100644
--- a/lib/efi_loader/efi_boottime.c
+++ b/lib/efi_loader/efi_boottime.c
@@ -1019,7 +1019,7 @@  efi_status_t efi_add_protocol(const efi_handle_t handle,
  * Return: status code
  */
 static efi_status_t EFIAPI efi_install_protocol_interface(
-			void **handle, const efi_guid_t *protocol,
+			efi_handle_t *handle, const efi_guid_t *protocol,
 			int protocol_interface_type, void *protocol_interface)
 {
 	efi_status_t r;
@@ -2279,8 +2279,8 @@  out:
  *
  * Return: status code
  */
-static efi_status_t EFIAPI efi_install_multiple_protocol_interfaces(
-			void **handle, ...)
+static efi_status_t EFIAPI efi_install_multiple_protocol_interfaces
+				(efi_handle_t *handle, ...)
 {
 	EFI_ENTRY("%p", handle);
 
@@ -2316,7 +2316,7 @@  static efi_status_t EFIAPI efi_install_multiple_protocol_interfaces(
 	for (; i; --i) {
 		protocol = efi_va_arg(argptr, efi_guid_t*);
 		protocol_interface = efi_va_arg(argptr, void*);
-		EFI_CALL(efi_uninstall_protocol_interface(handle, protocol,
+		EFI_CALL(efi_uninstall_protocol_interface(*handle, protocol,
 							  protocol_interface));
 	}
 	efi_va_end(argptr);
@@ -2339,7 +2339,7 @@  static efi_status_t EFIAPI efi_install_multiple_protocol_interfaces(
  * Return: status code
  */
 static efi_status_t EFIAPI efi_uninstall_multiple_protocol_interfaces(
-			void *handle, ...)
+			efi_handle_t handle, ...)
 {
 	EFI_ENTRY("%p", handle);
 
@@ -2554,10 +2554,10 @@  out:
  *
  * Return: status code
  */
-static efi_status_t EFIAPI efi_open_protocol(
-			void *handle, const efi_guid_t *protocol,
-			void **protocol_interface, void *agent_handle,
-			void *controller_handle, uint32_t attributes)
+static efi_status_t EFIAPI efi_open_protocol
+			(efi_handle_t handle, const efi_guid_t *protocol,
+			 void **protocol_interface, efi_handle_t agent_handle,
+			 efi_handle_t controller_handle, uint32_t attributes)
 {
 	struct efi_handler *handler;
 	efi_status_t r = EFI_INVALID_PARAMETER;
diff --git a/lib/efi_selftest/efi_selftest_devicepath.c b/lib/efi_selftest/efi_selftest_devicepath.c
index adcf531e90..105ce2c92b 100644
--- a/lib/efi_selftest/efi_selftest_devicepath.c
+++ b/lib/efi_selftest/efi_selftest_devicepath.c
@@ -257,7 +257,7 @@  static int teardown(void)
 static int execute(void)
 {
 	struct efi_device_path *remaining_dp;
-	void *handle;
+	efi_handle_t handle;
 	/*
 	 * This device path node ends with the letter 't' of 'u-boot'.
 	 * The following '.bin' does not belong to the node but is