efi: Move efi_load_option_dp_join() to a common file
This function is useful in the app so move it to the common helper. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -5,6 +5,8 @@
|
||||
|
||||
#define LOG_CATEGORY LOGC_EFI
|
||||
|
||||
#include <efi.h>
|
||||
#include <efi_device_path.h>
|
||||
#include <string.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
@@ -40,3 +42,47 @@ bool efi_varname_is_load_option(u16 *var_name16, int *index)
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* efi_load_option_dp_join() - join device-paths for load option
|
||||
*
|
||||
* @dp: in: binary device-path, out: joined device-path
|
||||
* @dp_size: size of joined device-path
|
||||
* @initrd_dp: initrd device-path or NULL
|
||||
* @fdt_dp: device-tree device-path or NULL
|
||||
* Return: status_code
|
||||
*/
|
||||
efi_status_t efi_load_option_dp_join(struct efi_device_path **dp,
|
||||
size_t *dp_size,
|
||||
struct efi_device_path *initrd_dp,
|
||||
struct efi_device_path *fdt_dp)
|
||||
{
|
||||
if (!dp)
|
||||
return EFI_INVALID_PARAMETER;
|
||||
|
||||
*dp_size = efi_dp_size(*dp);
|
||||
|
||||
if (initrd_dp) {
|
||||
struct efi_device_path *tmp_dp = *dp;
|
||||
|
||||
*dp = efi_dp_concat(tmp_dp, initrd_dp, *dp_size);
|
||||
efi_free_pool(tmp_dp);
|
||||
if (!*dp)
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
*dp_size += efi_dp_size(initrd_dp) + sizeof(EFI_DP_END);
|
||||
}
|
||||
|
||||
if (fdt_dp) {
|
||||
struct efi_device_path *tmp_dp = *dp;
|
||||
|
||||
*dp = efi_dp_concat(tmp_dp, fdt_dp, *dp_size);
|
||||
efi_free_pool(tmp_dp);
|
||||
if (!*dp)
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
*dp_size += efi_dp_size(fdt_dp) + sizeof(EFI_DP_END);
|
||||
}
|
||||
|
||||
*dp_size += sizeof(EFI_DP_END);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -99,50 +99,6 @@ err:
|
||||
return file_path;
|
||||
}
|
||||
|
||||
/**
|
||||
* efi_load_option_dp_join() - join device-paths for load option
|
||||
*
|
||||
* @dp: in: binary device-path, out: joined device-path
|
||||
* @dp_size: size of joined device-path
|
||||
* @initrd_dp: initrd device-path or NULL
|
||||
* @fdt_dp: device-tree device-path or NULL
|
||||
* Return: status_code
|
||||
*/
|
||||
efi_status_t efi_load_option_dp_join(struct efi_device_path **dp,
|
||||
size_t *dp_size,
|
||||
struct efi_device_path *initrd_dp,
|
||||
struct efi_device_path *fdt_dp)
|
||||
{
|
||||
if (!dp)
|
||||
return EFI_INVALID_PARAMETER;
|
||||
|
||||
*dp_size = efi_dp_size(*dp);
|
||||
|
||||
if (initrd_dp) {
|
||||
struct efi_device_path *tmp_dp = *dp;
|
||||
|
||||
*dp = efi_dp_concat(tmp_dp, initrd_dp, *dp_size);
|
||||
efi_free_pool(tmp_dp);
|
||||
if (!*dp)
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
*dp_size += efi_dp_size(initrd_dp) + sizeof(EFI_DP_END);
|
||||
}
|
||||
|
||||
if (fdt_dp) {
|
||||
struct efi_device_path *tmp_dp = *dp;
|
||||
|
||||
*dp = efi_dp_concat(tmp_dp, fdt_dp, *dp_size);
|
||||
efi_free_pool(tmp_dp);
|
||||
if (!*dp)
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
*dp_size += efi_dp_size(fdt_dp) + sizeof(EFI_DP_END);
|
||||
}
|
||||
|
||||
*dp_size += sizeof(EFI_DP_END);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
const struct guid_to_hash_map {
|
||||
efi_guid_t guid;
|
||||
const char algo[32];
|
||||
|
||||
Reference in New Issue
Block a user