mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 10:39:08 +00:00
efi_loader: define UpdateCapsule api
In this commit, skeleton functions for capsule-related API's are added under CONFIG_EFI_UPDATE_CAPSULE configuration. Detailed implementation for a specific capsule type will be added in the succeeding patches. Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
This commit is contained in:
parent
96ec4b1a18
commit
2bc27ca8a0
7 changed files with 316 additions and 54 deletions
|
@ -133,6 +133,10 @@ efi_status_t efi_init_runtime_supported(void)
|
|||
#ifdef CONFIG_EFI_HAVE_RUNTIME_RESET
|
||||
rt_table->runtime_services_supported |= EFI_RT_SUPPORTED_RESET_SYSTEM;
|
||||
#endif
|
||||
if (IS_ENABLED(CONFIG_EFI_RUNTIME_UPDATE_CAPSULE))
|
||||
rt_table->runtime_services_supported |=
|
||||
(EFI_RT_SUPPORTED_UPDATE_CAPSULE |
|
||||
EFI_RT_SUPPORTED_QUERY_CAPSULE_CAPABILITIES);
|
||||
|
||||
ret = efi_install_configuration_table(&efi_rt_properties_table_guid,
|
||||
rt_table);
|
||||
|
@ -448,6 +452,50 @@ efi_status_t __weak __efi_runtime EFIAPI efi_set_time(struct efi_time *time)
|
|||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
/**
|
||||
* efi_update_capsule_unsupported() - process information from operating system
|
||||
*
|
||||
* This function implements the UpdateCapsule() runtime service.
|
||||
*
|
||||
* See the Unified Extensible Firmware Interface (UEFI) specification for
|
||||
* details.
|
||||
*
|
||||
* @capsule_header_array: pointer to array of virtual pointers
|
||||
* @capsule_count: number of pointers in capsule_header_array
|
||||
* @scatter_gather_list: pointer to array of physical pointers
|
||||
* Returns: status code
|
||||
*/
|
||||
efi_status_t __efi_runtime EFIAPI efi_update_capsule_unsupported(
|
||||
struct efi_capsule_header **capsule_header_array,
|
||||
efi_uintn_t capsule_count,
|
||||
u64 scatter_gather_list)
|
||||
{
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
/**
|
||||
* efi_query_capsule_caps_unsupported() - check if capsule is supported
|
||||
*
|
||||
* This function implements the QueryCapsuleCapabilities() runtime service.
|
||||
*
|
||||
* See the Unified Extensible Firmware Interface (UEFI) specification for
|
||||
* details.
|
||||
*
|
||||
* @capsule_header_array: pointer to array of virtual pointers
|
||||
* @capsule_count: number of pointers in capsule_header_array
|
||||
* @maximum_capsule_size: maximum capsule size
|
||||
* @reset_type: type of reset needed for capsule update
|
||||
* Returns: status code
|
||||
*/
|
||||
efi_status_t __efi_runtime EFIAPI efi_query_capsule_caps_unsupported(
|
||||
struct efi_capsule_header **capsule_header_array,
|
||||
efi_uintn_t capsule_count,
|
||||
u64 *maximum_capsule_size,
|
||||
u32 *reset_type)
|
||||
{
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
/**
|
||||
* efi_is_runtime_service_pointer() - check if pointer points to runtime table
|
||||
*
|
||||
|
@ -471,6 +519,13 @@ void efi_runtime_detach(void)
|
|||
efi_runtime_services.reset_system = efi_reset_system;
|
||||
efi_runtime_services.get_time = efi_get_time;
|
||||
efi_runtime_services.set_time = efi_set_time;
|
||||
if (IS_ENABLED(CONFIG_EFI_RUNTIME_UPDATE_CAPSULE)) {
|
||||
/* won't support at runtime */
|
||||
efi_runtime_services.update_capsule =
|
||||
efi_update_capsule_unsupported;
|
||||
efi_runtime_services.query_capsule_caps =
|
||||
efi_query_capsule_caps_unsupported;
|
||||
}
|
||||
|
||||
/* Update CRC32 */
|
||||
efi_update_table_header_crc32(&efi_runtime_services.hdr);
|
||||
|
@ -879,50 +934,6 @@ static efi_status_t __efi_runtime EFIAPI efi_unimplemented(void)
|
|||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
/**
|
||||
* efi_update_capsule() - process information from operating system
|
||||
*
|
||||
* This function implements the UpdateCapsule() runtime service.
|
||||
*
|
||||
* See the Unified Extensible Firmware Interface (UEFI) specification for
|
||||
* details.
|
||||
*
|
||||
* @capsule_header_array: pointer to array of virtual pointers
|
||||
* @capsule_count: number of pointers in capsule_header_array
|
||||
* @scatter_gather_list: pointer to arry of physical pointers
|
||||
* Returns: status code
|
||||
*/
|
||||
efi_status_t __efi_runtime EFIAPI efi_update_capsule(
|
||||
struct efi_capsule_header **capsule_header_array,
|
||||
efi_uintn_t capsule_count,
|
||||
u64 scatter_gather_list)
|
||||
{
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
/**
|
||||
* efi_query_capsule_caps() - check if capsule is supported
|
||||
*
|
||||
* This function implements the QueryCapsuleCapabilities() runtime service.
|
||||
*
|
||||
* See the Unified Extensible Firmware Interface (UEFI) specification for
|
||||
* details.
|
||||
*
|
||||
* @capsule_header_array: pointer to array of virtual pointers
|
||||
* @capsule_count: number of pointers in capsule_header_array
|
||||
* @maximum_capsule_size: maximum capsule size
|
||||
* @reset_type: type of reset needed for capsule update
|
||||
* Returns: status code
|
||||
*/
|
||||
efi_status_t __efi_runtime EFIAPI efi_query_capsule_caps(
|
||||
struct efi_capsule_header **capsule_header_array,
|
||||
efi_uintn_t capsule_count,
|
||||
u64 *maximum_capsule_size,
|
||||
u32 *reset_type)
|
||||
{
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
struct efi_runtime_services __efi_runtime_data efi_runtime_services = {
|
||||
.hdr = {
|
||||
.signature = EFI_RUNTIME_SERVICES_SIGNATURE,
|
||||
|
@ -940,7 +951,12 @@ struct efi_runtime_services __efi_runtime_data efi_runtime_services = {
|
|||
.set_variable = efi_set_variable,
|
||||
.get_next_high_mono_count = (void *)&efi_unimplemented,
|
||||
.reset_system = &efi_reset_system_boottime,
|
||||
#ifdef CONFIG_EFI_RUNTIME_UPDATE_CAPSULE
|
||||
.update_capsule = efi_update_capsule,
|
||||
.query_capsule_caps = efi_query_capsule_caps,
|
||||
#else
|
||||
.update_capsule = efi_update_capsule_unsupported,
|
||||
.query_capsule_caps = efi_query_capsule_caps_unsupported,
|
||||
#endif
|
||||
.query_variable_info = efi_query_variable_info,
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue