EFI: move efi-boot.h inclusion point

When it was introduced, it was imo placed way too high up, making it
necessary to forward-declare way too many static functions. Move it down
together with
- the efi_check_dt_boot() stub, which afaict was deliberately placed
  immediately ahead of the #include,
- blexit(), because of its use of the efi_arch_blexit() hook.
Move up get_value() and set_color() to before the inclusion so their
forward declarations can also be zapped.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Luca Fancellu <luca.fancellu@arm.com>
This commit is contained in:
Jan Beulich committed 2021-12-06 14:15:54 +01:00
1 parent 311297f421
commit 1f9540cd8e
1 file changed
+90 -103
+90 -103
View File
@@ -111,25 +111,10 @@ struct file {
};
};
static CHAR16 *FormatDec(UINT64 Val, CHAR16 *Buffer);
static CHAR16 *FormatHex(UINT64 Val, UINTN Width, CHAR16 *Buffer);
static void DisplayUint(UINT64 Val, INTN Width);
static CHAR16 *wstrcpy(CHAR16 *d, const CHAR16 *s);
static void PrintErrMesg(const CHAR16 *mesg, EFI_STATUS ErrCode);
static char *get_value(const struct file *cfg, const char *section,
const char *item);
static char *split_string(char *s);
static CHAR16 *s2w(union string *str);
static char *w2s(const union string *str);
static EFI_FILE_HANDLE get_parent_handle(EFI_LOADED_IMAGE *loaded_image,
CHAR16 **leaf);
static bool read_file(EFI_FILE_HANDLE dir_handle, CHAR16 *name,
struct file *file, const char *options);
static bool read_section(const EFI_LOADED_IMAGE *image, const CHAR16 *name,
struct file *file, const char *options);
static size_t wstrlen(const CHAR16 * s);
static int set_color(u32 mask, int bpp, u8 *pos, u8 *sz);
static bool match_guid(const EFI_GUID *guid1, const EFI_GUID *guid2);
static void efi_init(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable);
static void efi_console_set_mode(void);
@@ -168,19 +153,6 @@ static void __init PrintErr(const CHAR16 *s)
StdErr->OutputString(StdErr, (CHAR16 *)s );
}
#ifndef CONFIG_HAS_DEVICE_TREE
static int __init efi_check_dt_boot(EFI_LOADED_IMAGE *loaded_image)
{
return 0;
}
#endif
/*
* Include architecture specific implementation here, which references the
* static globals defined above.
*/
#include "efi-boot.h"
static CHAR16 *__init FormatDec(UINT64 Val, CHAR16 *Buffer)
{
if ( Val >= 10 )
@@ -291,30 +263,6 @@ static bool __init match_guid(const EFI_GUID *guid1, const EFI_GUID *guid2)
!memcmp(guid1->Data4, guid2->Data4, sizeof(guid1->Data4));
}
void __init noreturn blexit(const CHAR16 *str)
{
if ( str )
PrintStr(str);
PrintStr(newline);
if ( !efi_bs )
efi_arch_halt();
if ( cfg.need_to_free )
efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size));
if ( kernel.need_to_free )
efi_bs->FreePages(kernel.addr, PFN_UP(kernel.size));
if ( ramdisk.need_to_free )
efi_bs->FreePages(ramdisk.addr, PFN_UP(ramdisk.size));
if ( xsm.need_to_free )
efi_bs->FreePages(xsm.addr, PFN_UP(xsm.size));
efi_arch_blexit();
efi_bs->Exit(efi_ih, EFI_SUCCESS, 0, NULL);
unreachable(); /* not reached */
}
/* generic routine for printing error messages */
static void __init PrintErrMesg(const CHAR16 *mesg, EFI_STATUS ErrCode)
{
@@ -542,6 +490,7 @@ static CHAR16 *__init point_tail(CHAR16 *fn)
break;
}
}
/*
* Truncate string at first space, and return pointer
* to remainder of string, if any/ NULL returned if
@@ -559,6 +508,95 @@ static char * __init split_string(char *s)
return NULL;
}
static char *__init get_value(const struct file *cfg, const char *section,
const char *item)
{
char *ptr = cfg->str, *end = ptr + cfg->size;
size_t slen = section ? strlen(section) : 0, ilen = strlen(item);
bool match = !slen;
for ( ; ptr < end; ++ptr )
{
switch ( *ptr )
{
case 0:
continue;
case '[':
if ( !slen )
break;
if ( match )
return NULL;
match = strncmp(++ptr, section, slen) == 0 && ptr[slen] == ']';
break;
default:
if ( match && strncmp(ptr, item, ilen) == 0 && ptr[ilen] == '=' )
{
ptr += ilen + 1;
/* strip off any leading spaces */
while ( *ptr && isspace(*ptr) )
ptr++;
return ptr;
}
break;
}
ptr += strlen(ptr);
}
return NULL;
}
static int __init __maybe_unused set_color(uint32_t mask, int bpp,
uint8_t *pos, uint8_t *sz)
{
if ( bpp < 0 )
return bpp;
if ( !mask )
return -EINVAL;
for ( *pos = 0; !(mask & 1); ++*pos )
mask >>= 1;
for ( *sz = 0; mask & 1; ++*sz)
mask >>= 1;
if ( mask )
return -EINVAL;
return max(*pos + *sz, bpp);
}
#ifndef CONFIG_HAS_DEVICE_TREE
static int __init efi_check_dt_boot(EFI_LOADED_IMAGE *loaded_image)
{
return 0;
}
#endif
/*
* Include architecture specific implementation here, which references the
* static globals defined above.
*/
#include "efi-boot.h"
void __init noreturn blexit(const CHAR16 *str)
{
if ( str )
PrintStr(str);
PrintStr(newline);
if ( !efi_bs )
efi_arch_halt();
if ( cfg.need_to_free )
efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size));
if ( kernel.need_to_free )
efi_bs->FreePages(kernel.addr, PFN_UP(kernel.size));
if ( ramdisk.need_to_free )
efi_bs->FreePages(ramdisk.addr, PFN_UP(ramdisk.size));
if ( xsm.need_to_free )
efi_bs->FreePages(xsm.addr, PFN_UP(xsm.size));
efi_arch_blexit();
efi_bs->Exit(efi_ih, EFI_SUCCESS, 0, NULL);
unreachable(); /* not reached */
}
static void __init handle_file_info(const CHAR16 *name,
const struct file *file, const char *options)
{
@@ -685,42 +723,6 @@ static void __init pre_parse(const struct file *cfg)
" last line will be ignored.\r\n");
}
static char *__init get_value(const struct file *cfg, const char *section,
const char *item)
{
char *ptr = cfg->str, *end = ptr + cfg->size;
size_t slen = section ? strlen(section) : 0, ilen = strlen(item);
bool match = !slen;
for ( ; ptr < end; ++ptr )
{
switch ( *ptr )
{
case 0:
continue;
case '[':
if ( !slen )
break;
if ( match )
return NULL;
match = strncmp(++ptr, section, slen) == 0 && ptr[slen] == ']';
break;
default:
if ( match && strncmp(ptr, item, ilen) == 0 && ptr[ilen] == '=' )
{
ptr += ilen + 1;
/* strip off any leading spaces */
while ( *ptr && isspace(*ptr) )
ptr++;
return ptr;
}
break;
}
ptr += strlen(ptr);
}
return NULL;
}
static void __init efi_init(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
efi_ih = ImageHandle;
@@ -1114,21 +1116,6 @@ static void __init efi_exit_boot(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *Syste
efi_fw_vendor = (void *)efi_fw_vendor + DIRECTMAP_VIRT_START;
}
static int __init __maybe_unused set_color(u32 mask, int bpp, u8 *pos, u8 *sz)
{
if ( bpp < 0 )
return bpp;
if ( !mask )
return -EINVAL;
for ( *pos = 0; !(mask & 1); ++*pos )
mask >>= 1;
for ( *sz = 0; mask & 1; ++*sz)
mask >>= 1;
if ( mask )
return -EINVAL;
return max(*pos + *sz, bpp);
}
void EFIAPI __init noreturn
efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.