aboutsummaryrefslogtreecommitdiff
path: root/lib/efi_loader/efi_gop.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/efi_loader/efi_gop.c')
-rw-r--r--lib/efi_loader/efi_gop.c34
1 files changed, 21 insertions, 13 deletions
diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c
index 411a8c9226..3caddd5f84 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;
}