diff options
| author | Tom Rini <trini@konsulko.com> | 2022-09-24 13:58:49 -0400 | 
|---|---|---|
| committer | Tom Rini <trini@konsulko.com> | 2022-09-24 13:58:49 -0400 | 
| commit | 81da5042e514bfd27516d3530dde4d62a6708ca4 (patch) | |
| tree | 75203cc106a2c1c340024fdb562be7c9b6d0e4e2 /lib | |
| parent | 694e9008674c2008b9ccdc25a9bb3ac078e20911 (diff) | |
| parent | efc3f9526f9cfcd8614668c03b9c66b209782c41 (diff) | |
Merge branch '2022-09-24-add-console-flush' into next
To quote the author:
On certain places it is required to flush output print buffers to ensure
that text strings were sent to console or serial devices. For example when
printing message that U-Boot is going to boot kernel or when U-Boot is
going to change baudrate of terminal device.
Some console devices, like UART, have putc/puts functions which just put
characters into HW transmit queue and do not wait until all data are
transmitted. Doing some sensitive operations (like changing baudrate or
starting kernel which resets UART HW) cause that U-Boot messages are lost.
Therefore introduce a new flush() function, implement it for all serial
devices via pending(false) callback and use this new flush() function on
sensitive places after which output device may go into reset state.
This change fixes printing of U-Boot messages:
"## Starting application at ..."
"## Switch baudrate to ..."
In addition, take a patch from Heinrich to rename some EFI test
functions in order to not conflict with this series.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/efi_selftest/efi_selftest_loadimage.c | 87 | 
1 files changed, 44 insertions, 43 deletions
| diff --git a/lib/efi_selftest/efi_selftest_loadimage.c b/lib/efi_selftest/efi_selftest_loadimage.c index d4c76f557c7..24548f1ae63 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; | 
