On Thu, 12 Dec 2019 at 22:34, Arvind Sankar <nivedita@xxxxxxxxxxxx> wrote: > > Use typedef for the GOP structures, in anticipation of unifying > 32/64-bit code. Also use more appropriate types in the non-bitness > specific structures for the framebuffer address and pointers. > > Signed-off-by: Arvind Sankar <nivedita@xxxxxxxxxxxx> This gives me /home/ardbie01/linux/drivers/firmware/efi/libstub/gop.c: In function ‘setup_gop32’: /home/ardbie01/linux/drivers/firmware/efi/libstub/gop.c:96:27: error: storage size of ‘pixel_info’ isn’t known struct efi_pixel_bitmask pixel_info; ^~~~~~~~~~ /home/ardbie01/linux/drivers/firmware/efi/libstub/gop.c:125:38: error: dereferencing pointer to incomplete type ‘struct efi_graphics_output_protocol_32’ mode = (void *)(unsigned long)gop32->mode; ^~ /home/ardbie01/linux/scripts/Makefile.build:265: recipe for target 'drivers/firmware/efi/libstub/gop.o' failed make[5]: *** [drivers/firmware/efi/libstub/gop.o] Error 1 make[5]: *** Waiting for unfinished jobs.... > --- > drivers/firmware/efi/libstub/gop.c | 26 ++++++++--------- > include/linux/efi.h | 46 +++++++++++++++--------------- > 2 files changed, 36 insertions(+), 36 deletions(-) > > diff --git a/drivers/firmware/efi/libstub/gop.c b/drivers/firmware/efi/libstub/gop.c > index b7bf1e993b8b..a0c1ef64d445 100644 > --- a/drivers/firmware/efi/libstub/gop.c > +++ b/drivers/firmware/efi/libstub/gop.c > @@ -35,7 +35,7 @@ static void find_bits(unsigned long mask, u8 *pos, u8 *size) > > static void > setup_pixel_info(struct screen_info *si, u32 pixels_per_scan_line, > - struct efi_pixel_bitmask pixel_info, int pixel_format) > + efi_pixel_bitmask_t pixel_info, int pixel_format) > { > if (pixel_format == PIXEL_RGB_RESERVED_8BIT_PER_COLOR) { > si->lfb_depth = 32; > @@ -87,13 +87,13 @@ static efi_status_t > setup_gop32(efi_system_table_t *sys_table_arg, struct screen_info *si, > efi_guid_t *proto, unsigned long size, void **gop_handle) > { > - struct efi_graphics_output_protocol_32 *gop32, *first_gop; > + efi_graphics_output_protocol_32_t *gop32, *first_gop; > unsigned long nr_gops; > u16 width, height; > u32 pixels_per_scan_line; > u32 ext_lfb_base; > - u64 fb_base; > - struct efi_pixel_bitmask pixel_info; > + efi_physical_addr_t fb_base; > + efi_pixel_bitmask_t pixel_info; > int pixel_format; > efi_status_t status; > u32 *handles = (u32 *)(unsigned long)gop_handle; > @@ -104,13 +104,13 @@ setup_gop32(efi_system_table_t *sys_table_arg, struct screen_info *si, > > nr_gops = size / sizeof(u32); > for (i = 0; i < nr_gops; i++) { > - struct efi_graphics_output_protocol_mode_32 *mode; > - struct efi_graphics_output_mode_info *info = NULL; > + efi_graphics_output_protocol_mode_32_t *mode; > + efi_graphics_output_mode_info_t *info = NULL; > efi_guid_t conout_proto = EFI_CONSOLE_OUT_DEVICE_GUID; > bool conout_found = false; > void *dummy = NULL; > efi_handle_t h = (efi_handle_t)(unsigned long)handles[i]; > - u64 current_fb_base; > + efi_physical_addr_t current_fb_base; > > status = efi_call_early(handle_protocol, h, > proto, (void **)&gop32); > @@ -184,13 +184,13 @@ static efi_status_t > setup_gop64(efi_system_table_t *sys_table_arg, struct screen_info *si, > efi_guid_t *proto, unsigned long size, void **gop_handle) > { > - struct efi_graphics_output_protocol_64 *gop64, *first_gop; > + efi_graphics_output_protocol_64_t *gop64, *first_gop; > unsigned long nr_gops; > u16 width, height; > u32 pixels_per_scan_line; > u32 ext_lfb_base; > - u64 fb_base; > - struct efi_pixel_bitmask pixel_info; > + efi_physical_addr_t fb_base; > + efi_pixel_bitmask_t pixel_info; > int pixel_format; > efi_status_t status; > u64 *handles = (u64 *)(unsigned long)gop_handle; > @@ -201,13 +201,13 @@ setup_gop64(efi_system_table_t *sys_table_arg, struct screen_info *si, > > nr_gops = size / sizeof(u64); > for (i = 0; i < nr_gops; i++) { > - struct efi_graphics_output_protocol_mode_64 *mode; > - struct efi_graphics_output_mode_info *info = NULL; > + efi_graphics_output_protocol_mode_64_t *mode; > + efi_graphics_output_mode_info_t *info = NULL; > efi_guid_t conout_proto = EFI_CONSOLE_OUT_DEVICE_GUID; > bool conout_found = false; > void *dummy = NULL; > efi_handle_t h = (efi_handle_t)(unsigned long)handles[i]; > - u64 current_fb_base; > + efi_physical_addr_t current_fb_base; > > status = efi_call_early(handle_protocol, h, > proto, (void **)&gop64); > diff --git a/include/linux/efi.h b/include/linux/efi.h > index 8be59ec77dee..5daac58fa675 100644 > --- a/include/linux/efi.h > +++ b/include/linux/efi.h > @@ -1415,69 +1415,69 @@ struct efi_simple_text_output_protocol { > #define PIXEL_BLT_ONLY 3 > #define PIXEL_FORMAT_MAX 4 > > -struct efi_pixel_bitmask { > +typedef struct { > u32 red_mask; > u32 green_mask; > u32 blue_mask; > u32 reserved_mask; > -}; > +} efi_pixel_bitmask_t; > > -struct efi_graphics_output_mode_info { > +typedef struct { > u32 version; > u32 horizontal_resolution; > u32 vertical_resolution; > int pixel_format; > - struct efi_pixel_bitmask pixel_information; > + efi_pixel_bitmask_t pixel_information; > u32 pixels_per_scan_line; > -}; > +} efi_graphics_output_mode_info_t; > > -struct efi_graphics_output_protocol_mode_32 { > +typedef struct { > u32 max_mode; > u32 mode; > u32 info; > u32 size_of_info; > u64 frame_buffer_base; > u32 frame_buffer_size; > -}; > +} efi_graphics_output_protocol_mode_32_t; > > -struct efi_graphics_output_protocol_mode_64 { > +typedef struct { > u32 max_mode; > u32 mode; > u64 info; > u64 size_of_info; > u64 frame_buffer_base; > u64 frame_buffer_size; > -}; > +} efi_graphics_output_protocol_mode_64_t; > > -struct efi_graphics_output_protocol_mode { > +typedef struct { > u32 max_mode; > u32 mode; > - unsigned long info; > + efi_graphics_output_mode_info_t *info; > unsigned long size_of_info; > - u64 frame_buffer_base; > + efi_physical_addr_t frame_buffer_base; > unsigned long frame_buffer_size; > -}; > +} efi_graphics_output_protocol_mode_t; > > -struct efi_graphics_output_protocol_32 { > +typedef struct { > u32 query_mode; > u32 set_mode; > u32 blt; > u32 mode; > -}; > +} efi_graphics_output_protocol_32_t; > > -struct efi_graphics_output_protocol_64 { > +typedef struct { > u64 query_mode; > u64 set_mode; > u64 blt; > u64 mode; > -}; > +} efi_graphics_output_protocol_64_t; > > -struct efi_graphics_output_protocol { > - unsigned long query_mode; > - unsigned long set_mode; > - unsigned long blt; > - struct efi_graphics_output_protocol_mode *mode; > -}; > +typedef struct { > + void *query_mode; > + void *set_mode; > + void *blt; > + efi_graphics_output_protocol_mode_t *mode; > +} efi_graphics_output_protocol_t; > > extern struct list_head efivar_sysfs_list; > > -- > 2.23.0 >