mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-05-05 04:36:13 +02:00
efi: Share struct efi_priv between the app and stub code
At present each of these has its own static variable and helper functions. Move them into a shared file. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
This commit is contained in:
parent
184be59258
commit
2a1cf03ea4
@ -474,6 +474,27 @@ extern char _binary_u_boot_bin_start[], _binary_u_boot_bin_end[];
|
||||
EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS | \
|
||||
EFI_VARIABLE_APPEND_WRITE)
|
||||
|
||||
/**
|
||||
* efi_get_priv() - Get access to the EFI-private information
|
||||
*
|
||||
* This struct it used by both the stub and the app to record things about the
|
||||
* EFI environment. It is not available in U-Boot proper after the stub has
|
||||
* jumped there. Use efi_info_get() to obtain info in that case.
|
||||
*
|
||||
* Return: pointer to private info
|
||||
*/
|
||||
struct efi_priv *efi_get_priv(void);
|
||||
|
||||
/**
|
||||
* efi_set_priv() - Set up a pointer to the EFI-private information
|
||||
*
|
||||
* This is called in the stub and app to record the location of this
|
||||
* information.
|
||||
*
|
||||
* @priv: New location of private data
|
||||
*/
|
||||
void efi_set_priv(struct efi_priv *priv);
|
||||
|
||||
/**
|
||||
* efi_get_sys_table() - Get access to the main EFI system table
|
||||
*
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Functions shared by the app and stub
|
||||
*
|
||||
* Copyright (c) 2015 Google, Inc
|
||||
*
|
||||
* EFI information obtained here:
|
||||
@ -17,6 +19,33 @@
|
||||
#include <efi.h>
|
||||
#include <efi_api.h>
|
||||
|
||||
static struct efi_priv *global_priv;
|
||||
|
||||
struct efi_priv *efi_get_priv(void)
|
||||
{
|
||||
return global_priv;
|
||||
}
|
||||
|
||||
void efi_set_priv(struct efi_priv *priv)
|
||||
{
|
||||
global_priv = priv;
|
||||
}
|
||||
|
||||
struct efi_system_table *efi_get_sys_table(void)
|
||||
{
|
||||
return global_priv->sys_table;
|
||||
}
|
||||
|
||||
struct efi_boot_services *efi_get_boot(void)
|
||||
{
|
||||
return global_priv->boot;
|
||||
}
|
||||
|
||||
unsigned long efi_get_ram_base(void)
|
||||
{
|
||||
return global_priv->ram_base;
|
||||
}
|
||||
|
||||
/*
|
||||
* Global declaration of gd.
|
||||
*
|
||||
|
||||
@ -27,23 +27,6 @@
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
static struct efi_priv *global_priv;
|
||||
|
||||
struct efi_system_table *efi_get_sys_table(void)
|
||||
{
|
||||
return global_priv->sys_table;
|
||||
}
|
||||
|
||||
struct efi_boot_services *efi_get_boot(void)
|
||||
{
|
||||
return global_priv->boot;
|
||||
}
|
||||
|
||||
unsigned long efi_get_ram_base(void)
|
||||
{
|
||||
return global_priv->ram_base;
|
||||
}
|
||||
|
||||
int efi_info_get(enum efi_entry_t type, void **datap, int *sizep)
|
||||
{
|
||||
return -ENOSYS;
|
||||
@ -319,7 +302,7 @@ efi_status_t EFIAPI efi_main(efi_handle_t image,
|
||||
/* Set up access to EFI data structures */
|
||||
efi_init(priv, "App", image, sys_table);
|
||||
|
||||
global_priv = priv;
|
||||
efi_set_priv(priv);
|
||||
|
||||
/*
|
||||
* Set up the EFI debug UART so that printf() works. This is
|
||||
@ -345,7 +328,7 @@ efi_status_t EFIAPI efi_main(efi_handle_t image,
|
||||
|
||||
static void efi_exit(void)
|
||||
{
|
||||
struct efi_priv *priv = global_priv;
|
||||
struct efi_priv *priv = efi_get_priv();
|
||||
|
||||
free_memory(priv);
|
||||
printf("U-Boot EFI exiting\n");
|
||||
|
||||
@ -31,7 +31,6 @@
|
||||
#error "This file needs to be ported for use on architectures"
|
||||
#endif
|
||||
|
||||
static struct efi_priv *global_priv;
|
||||
static bool use_uart;
|
||||
|
||||
struct __packed desctab_info {
|
||||
@ -63,6 +62,8 @@ void _debug_uart_init(void)
|
||||
|
||||
void putc(const char ch)
|
||||
{
|
||||
struct efi_priv *priv = efi_get_priv();
|
||||
|
||||
if (ch == '\n')
|
||||
putc('\r');
|
||||
|
||||
@ -73,7 +74,7 @@ void putc(const char ch)
|
||||
;
|
||||
outb(ch, (ulong)&com_port->thr);
|
||||
} else {
|
||||
efi_putc(global_priv, ch);
|
||||
efi_putc(priv, ch);
|
||||
}
|
||||
}
|
||||
|
||||
@ -320,7 +321,7 @@ efi_status_t EFIAPI efi_main(efi_handle_t image,
|
||||
puts(" efi_init() failed\n");
|
||||
return ret;
|
||||
}
|
||||
global_priv = priv;
|
||||
efi_set_priv(priv);
|
||||
|
||||
cs32 = get_codeseg32();
|
||||
if (cs32 < 0)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user