aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/usage/environment.rst34
-rw-r--r--lib/efi_loader/efi_load_initrd.c3
-rw-r--r--lib/efi_selftest/efi_selftest_loadimage.c87
3 files changed, 68 insertions, 56 deletions
diff --git a/doc/usage/environment.rst b/doc/usage/environment.rst
index 561076b..7906ace 100644
--- a/doc/usage/environment.rst
+++ b/doc/usage/environment.rst
@@ -106,6 +106,27 @@ many cases the value in the default environment comes from a CONFIG option - see
This is most-likely not complete:
+autostart
+ If set to "yes" (actually any string starting with 1, y, Y, t, or T) an
+ image loaded with one of the commands listed below will be automatically
+ started by internally invoking the bootm command.
+
+ * bootelf - Boot from an ELF image in memory
+ * bootp - boot image via network using BOOTP/TFTP protocol
+ * dhcp - boot image via network using DHCP/TFTP protocol
+ * diskboot - boot from ide device
+ * nboot - boot from NAND device
+ * nfs - boot image via network using NFS protocol
+ * rarpboot - boot image via network using RARP/TFTP protocol
+ * scsiboot - boot from SCSI device
+ * tftpboot - boot image via network using TFTP protocol
+ * usbboot - boot from USB device
+
+ If the environment variable autostart is not set to a value starting with
+ 1, y, Y, t, or T, an image passed to the "bootm" command will be copied to
+ the load address (and eventually uncompressed), but NOT be started.
+ This can be used to load and uncompress arbitrary data.
+
baudrate
Used to set the baudrate of the UART - it defaults to CONFIG_BAUDRATE (which
defaults to 115200).
@@ -174,19 +195,6 @@ autoload
configuration from the BOOTP server, but not try to
load any image.
-autostart
- if set to "yes", an image loaded using the "bootp", "dhcp",
- "rarpboot", "tftpboot" or "diskboot" commands will
- be automatically started (by internally calling
- "bootm")
-
- If unset, or set to "1"/"yes"/"true" (case insensitive, just the first
- character is enough), a standalone image
- passed to the "bootm" command will be copied to the load address
- (and eventually uncompressed), but NOT be started.
- This can be used to load and uncompress arbitrary
- data.
-
fdt_high
if set this restricts the maximum address that the
flattened device tree will be copied into upon boot.
diff --git a/lib/efi_loader/efi_load_initrd.c b/lib/efi_loader/efi_load_initrd.c
index c5e6652..3d6044f 100644
--- a/lib/efi_loader/efi_load_initrd.c
+++ b/lib/efi_loader/efi_load_initrd.c
@@ -230,6 +230,9 @@ efi_status_t efi_initrd_register(void)
*/
void efi_initrd_deregister(void)
{
+ if (!efi_initrd_handle)
+ return;
+
efi_delete_handle(efi_initrd_handle);
efi_initrd_handle = NULL;
}
diff --git a/lib/efi_selftest/efi_selftest_loadimage.c b/lib/efi_selftest/efi_selftest_loadimage.c
index d4c76f5..24548f1 100644
--- a/lib/efi_selftest/efi_selftest_loadimage.c
+++ b/lib/efi_selftest/efi_selftest_loadimage.c
@@ -142,38 +142,39 @@ static struct efi_file_system_info *file_system_info =
&priv_file_system_info.info;
/* Forward definitions of file and file system functions */
-static efi_status_t EFIAPI open_volume
+static efi_status_t EFIAPI efi_st_open_volume
(struct efi_simple_file_system_protocol *this,
struct efi_file_handle **root);
-static efi_status_t EFIAPI open
+static efi_status_t EFIAPI efi_st_open
(struct efi_file_handle *this,
struct efi_file_handle **new_handle,
u16 *file_name, u64 open_mode, u64 attributes);
-static efi_status_t EFIAPI close(struct efi_file_handle *this);
+static efi_status_t EFIAPI efi_st_close(struct efi_file_handle *this);
-static efi_status_t EFIAPI delete(struct efi_file_handle *this);
+static efi_status_t EFIAPI efi_st_delete(struct efi_file_handle *this);
-static efi_status_t EFIAPI read
+static efi_status_t EFIAPI efi_st_read
(struct efi_file_handle *this, efi_uintn_t *buffer_size, void *buffer);
-static efi_status_t EFIAPI write
+static efi_status_t EFIAPI efi_st_write
(struct efi_file_handle *this, efi_uintn_t *buffer_size, void *buffer);
-static efi_status_t EFIAPI getpos(struct efi_file_handle *this, u64 *pos);
+static efi_status_t EFIAPI efi_st_getpos(struct efi_file_handle *this,
+ u64 *pos);
-static efi_status_t EFIAPI setpos(struct efi_file_handle *this, u64 pos);
+static efi_status_t EFIAPI efi_st_setpos(struct efi_file_handle *this, u64 pos);
-static efi_status_t EFIAPI getinfo
+static efi_status_t EFIAPI efi_st_getinfo
(struct efi_file_handle *this, const efi_guid_t *info_type,
efi_uintn_t *buffer_size, void *buffer);
-static efi_status_t EFIAPI setinfo
+static efi_status_t EFIAPI efi_st_setinfo
(struct efi_file_handle *this, const efi_guid_t *info_type,
efi_uintn_t buffer_size, void *buffer);
-static efi_status_t EFIAPI flush(struct efi_file_handle *this);
+static efi_status_t EFIAPI efi_st_flush(struct efi_file_handle *this);
/* Internal information about status of file system */
static struct {
@@ -190,40 +191,40 @@ static struct {
/* EFI_FILE_PROTOCOL for file */
static struct efi_file_handle file = {
.rev = 0x00010000,
- .open = open,
- .close = close,
- .delete = delete,
- .read = read,
- .write = write,
- .getpos = getpos,
- .setpos = setpos,
- .getinfo = getinfo,
- .setinfo = setinfo,
- .flush = flush,
+ .open = efi_st_open,
+ .close = efi_st_close,
+ .delete = efi_st_delete,
+ .read = efi_st_read,
+ .write = efi_st_write,
+ .getpos = efi_st_getpos,
+ .setpos = efi_st_setpos,
+ .getinfo = efi_st_getinfo,
+ .setinfo = efi_st_setinfo,
+ .flush = efi_st_flush,
};
/* EFI_FILE_PROTOCOL for root directory */
static struct efi_file_handle volume = {
.rev = 0x00010000,
- .open = open,
- .close = close,
- .delete = delete,
- .read = read,
- .write = write,
- .getpos = getpos,
- .setpos = setpos,
- .getinfo = getinfo,
- .setinfo = setinfo,
- .flush = flush,
+ .open = efi_st_open,
+ .close = efi_st_close,
+ .delete = efi_st_delete,
+ .read = efi_st_read,
+ .write = efi_st_write,
+ .getpos = efi_st_getpos,
+ .setpos = efi_st_setpos,
+ .getinfo = efi_st_getinfo,
+ .setinfo = efi_st_setinfo,
+ .flush = efi_st_flush,
};
/* EFI_SIMPLE_FILE_SYSTEM_PROTOCOL of the block device */
struct efi_simple_file_system_protocol file_system = {
.rev = 0x00010000,
- .open_volume = open_volume,
+ .open_volume = efi_st_open_volume,
};
-static efi_status_t EFIAPI open_volume
+static efi_status_t EFIAPI efi_st_open_volume
(struct efi_simple_file_system_protocol *this,
struct efi_file_handle **root)
{
@@ -236,7 +237,7 @@ static efi_status_t EFIAPI open_volume
return EFI_SUCCESS;
}
-static efi_status_t EFIAPI open
+static efi_status_t EFIAPI efi_st_open
(struct efi_file_handle *this,
struct efi_file_handle **new_handle,
u16 *file_name, u64 open_mode, u64 attributes)
@@ -251,7 +252,7 @@ static efi_status_t EFIAPI open
return EFI_SUCCESS;
}
-static efi_status_t EFIAPI close(struct efi_file_handle *this)
+static efi_status_t EFIAPI efi_st_close(struct efi_file_handle *this)
{
if (this == &file)
priv.file_open_count--;
@@ -263,7 +264,7 @@ static efi_status_t EFIAPI close(struct efi_file_handle *this)
return EFI_SUCCESS;
}
-static efi_status_t EFIAPI delete(struct efi_file_handle *this)
+static efi_status_t EFIAPI efi_st_delete(struct efi_file_handle *this)
{
if (this != &file)
return EFI_INVALID_PARAMETER;
@@ -271,7 +272,7 @@ static efi_status_t EFIAPI delete(struct efi_file_handle *this)
return EFI_UNSUPPORTED;
}
-static efi_status_t EFIAPI read
+static efi_status_t EFIAPI efi_st_read
(struct efi_file_handle *this, efi_uintn_t *buffer_size, void *buffer)
{
if (this != &file)
@@ -288,7 +289,7 @@ static efi_status_t EFIAPI read
return EFI_SUCCESS;
}
-static efi_status_t EFIAPI write
+static efi_status_t EFIAPI efi_st_write
(struct efi_file_handle *this, efi_uintn_t *buffer_size, void *buffer)
{
if (this != &file)
@@ -297,7 +298,7 @@ static efi_status_t EFIAPI write
return EFI_UNSUPPORTED;
}
-static efi_status_t EFIAPI getpos(struct efi_file_handle *this, u64 *pos)
+static efi_status_t EFIAPI efi_st_getpos(struct efi_file_handle *this, u64 *pos)
{
if (this != &file)
return EFI_INVALID_PARAMETER;
@@ -307,7 +308,7 @@ static efi_status_t EFIAPI getpos(struct efi_file_handle *this, u64 *pos)
return EFI_SUCCESS;
}
-static efi_status_t EFIAPI setpos(struct efi_file_handle *this, u64 pos)
+static efi_status_t EFIAPI efi_st_setpos(struct efi_file_handle *this, u64 pos)
{
if (this != &file)
return EFI_INVALID_PARAMETER;
@@ -317,7 +318,7 @@ static efi_status_t EFIAPI setpos(struct efi_file_handle *this, u64 pos)
return EFI_SUCCESS;
}
-static efi_status_t EFIAPI getinfo
+static efi_status_t EFIAPI efi_st_getinfo
(struct efi_file_handle *this, const efi_guid_t *info_type,
efi_uintn_t *buffer_size, void *buffer)
{
@@ -348,7 +349,7 @@ static efi_status_t EFIAPI getinfo
return EFI_SUCCESS;
}
-static efi_status_t EFIAPI setinfo
+static efi_status_t EFIAPI efi_st_setinfo
(struct efi_file_handle *this, const efi_guid_t *info_type,
efi_uintn_t buffer_size, void *buffer)
{
@@ -358,7 +359,7 @@ static efi_status_t EFIAPI setinfo
return EFI_UNSUPPORTED;
}
-static efi_status_t EFIAPI flush(struct efi_file_handle *this)
+static efi_status_t EFIAPI efi_st_flush(struct efi_file_handle *this)
{
if (this != &file)
return EFI_INVALID_PARAMETER;