efi_loader: create boot options without file path
Allow the efidebug command to create boot options without file path, e.g. efidebug boot add -b 0001 'short dev only' host 0:1 '' efidebug boot add -B 0002 'long dev only' host 0:1 '' Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
178667b34b
commit
72fa9cd59e
@ -46,7 +46,6 @@ struct efi_device_path *expand_media_path(struct efi_device_path *device_path)
|
|||||||
{
|
{
|
||||||
struct efi_device_path *dp, *rem, *full_path;
|
struct efi_device_path *dp, *rem, *full_path;
|
||||||
efi_handle_t handle;
|
efi_handle_t handle;
|
||||||
efi_status_t ret;
|
|
||||||
|
|
||||||
if (!device_path)
|
if (!device_path)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -59,7 +58,7 @@ struct efi_device_path *expand_media_path(struct efi_device_path *device_path)
|
|||||||
dp = device_path;
|
dp = device_path;
|
||||||
handle = efi_dp_find_obj(dp, &efi_simple_file_system_protocol_guid,
|
handle = efi_dp_find_obj(dp, &efi_simple_file_system_protocol_guid,
|
||||||
&rem);
|
&rem);
|
||||||
if (ret == EFI_SUCCESS) {
|
if (handle) {
|
||||||
if (rem->type == DEVICE_PATH_TYPE_END) {
|
if (rem->type == DEVICE_PATH_TYPE_END) {
|
||||||
dp = efi_dp_from_file(NULL, 0,
|
dp = efi_dp_from_file(NULL, 0,
|
||||||
"/EFI/BOOT/" BOOTEFI_NAME);
|
"/EFI/BOOT/" BOOTEFI_NAME);
|
||||||
|
@ -973,9 +973,22 @@ static void path_to_uefi(void *uefi, const char *src)
|
|||||||
*pos = 0;
|
*pos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* If desc is NULL, this creates a path with only the file component,
|
* efi_dp_from_file() - create device path for file
|
||||||
* otherwise it creates a full path with both device and file components
|
*
|
||||||
|
* The function creates a device path from the block descriptor @desc and the
|
||||||
|
* partition number @part and appends a device path node created describing the
|
||||||
|
* file path @path.
|
||||||
|
*
|
||||||
|
* If @desc is NULL, the device path will not contain nodes describing the
|
||||||
|
* partition.
|
||||||
|
* If @path is an empty string "", the device path will not contain a node
|
||||||
|
* for the file path.
|
||||||
|
*
|
||||||
|
* @desc: block device descriptor or NULL
|
||||||
|
* @part: partition number
|
||||||
|
* @path: file path on partition or ""
|
||||||
|
* Return: device path or NULL in case of an error
|
||||||
*/
|
*/
|
||||||
struct efi_device_path *efi_dp_from_file(struct blk_desc *desc, int part,
|
struct efi_device_path *efi_dp_from_file(struct blk_desc *desc, int part,
|
||||||
const char *path)
|
const char *path)
|
||||||
@ -1002,12 +1015,14 @@ struct efi_device_path *efi_dp_from_file(struct blk_desc *desc, int part,
|
|||||||
buf = dp_part_fill(buf, desc, part);
|
buf = dp_part_fill(buf, desc, part);
|
||||||
|
|
||||||
/* add file-path: */
|
/* add file-path: */
|
||||||
|
if (*path) {
|
||||||
fp = buf;
|
fp = buf;
|
||||||
fp->dp.type = DEVICE_PATH_TYPE_MEDIA_DEVICE;
|
fp->dp.type = DEVICE_PATH_TYPE_MEDIA_DEVICE;
|
||||||
fp->dp.sub_type = DEVICE_PATH_SUB_TYPE_FILE_PATH;
|
fp->dp.sub_type = DEVICE_PATH_SUB_TYPE_FILE_PATH;
|
||||||
fp->dp.length = (u16)fpsize;
|
fp->dp.length = (u16)fpsize;
|
||||||
path_to_uefi(fp->str, path);
|
path_to_uefi(fp->str, path);
|
||||||
buf += fpsize;
|
buf += fpsize;
|
||||||
|
}
|
||||||
|
|
||||||
*((struct efi_device_path *)buf) = END;
|
*((struct efi_device_path *)buf) = END;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user