diff options
Diffstat (limited to 'lib/efi_loader/efi_gop.c')
| -rw-r--r-- | lib/efi_loader/efi_gop.c | 34 | 
1 files changed, 21 insertions, 13 deletions
| diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c index 411a8c92261..3caddd5f844 100644 --- a/lib/efi_loader/efi_gop.c +++ b/lib/efi_loader/efi_gop.c @@ -32,7 +32,7 @@ struct efi_gop_obj {  };  static efi_status_t EFIAPI gop_query_mode(struct efi_gop *this, u32 mode_number, -					  unsigned long *size_of_info, +					  efi_uintn_t *size_of_info,  					  struct efi_gop_mode_info **info)  {  	struct efi_gop_obj *gopobj; @@ -56,17 +56,17 @@ static efi_status_t EFIAPI gop_set_mode(struct efi_gop *this, u32 mode_number)  	return EFI_EXIT(EFI_SUCCESS);  } -static efi_status_t EFIAPI gop_blt(struct efi_gop *this, void *buffer, -				   unsigned long operation, unsigned long sx, -				   unsigned long sy, unsigned long dx, -				   unsigned long dy, unsigned long width, -				   unsigned long height, unsigned long delta) +efi_status_t EFIAPI gop_blt(struct efi_gop *this, void *buffer, +			    u32 operation, efi_uintn_t sx, +			    efi_uintn_t sy, efi_uintn_t dx, +			    efi_uintn_t dy, efi_uintn_t width, +			    efi_uintn_t height, efi_uintn_t delta)  {  	struct efi_gop_obj *gopobj = container_of(this, struct efi_gop_obj, ops);  	int i, j, line_len16, line_len32;  	void *fb; -	EFI_ENTRY("%p, %p, %lx, %lx, %lx, %lx, %lx, %lx, %lx, %lx", this, +	EFI_ENTRY("%p, %p, %u, %zu, %zu, %zu, %zu, %zu, %zu, %zu", this,  		  buffer, operation, sx, sy, dx, dy, width, height, delta);  	if (operation != EFI_BLT_BUFFER_TO_VIDEO) @@ -132,6 +132,7 @@ int efi_gop_register(void)  	u32 bpix, col, row;  	u64 fb_base, fb_size;  	void *fb; +	efi_status_t ret;  #ifdef CONFIG_DM_VIDEO  	struct udevice *vdev; @@ -173,11 +174,21 @@ int efi_gop_register(void)  	}  	gopobj = calloc(1, sizeof(*gopobj)); +	if (!gopobj) { +		printf("ERROR: Out of memory\n"); +		return 1; +	} + +	/* Hook up to the device list */ +	efi_add_handle(&gopobj->parent);  	/* Fill in object data */ -	gopobj->parent.protocols[0].guid = &efi_gop_guid; -	gopobj->parent.protocols[0].protocol_interface = &gopobj->ops; -	gopobj->parent.handle = &gopobj->ops; +	ret = efi_add_protocol(gopobj->parent.handle, &efi_gop_guid, +			       &gopobj->ops); +	if (ret != EFI_SUCCESS) { +		printf("ERROR: Out of memory\n"); +		return 1; +	}  	gopobj->ops.query_mode = gop_query_mode;  	gopobj->ops.set_mode = gop_set_mode;  	gopobj->ops.blt = gop_blt; @@ -206,8 +217,5 @@ int efi_gop_register(void)  	gopobj->bpix = bpix;  	gopobj->fb = fb; -	/* Hook up to the device list */ -	list_add_tail(&gopobj->parent.link, &efi_obj_list); -  	return 0;  } | 
