diff options
-rw-r--r-- | doc/usage/environment.rst | 34 | ||||
-rw-r--r-- | lib/efi_loader/efi_load_initrd.c | 3 | ||||
-rw-r--r-- | lib/efi_selftest/efi_selftest_loadimage.c | 87 |
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; |