efi_loader: implement CreateDeviceNode

Implement the CreateDeviceNode service of the device path utility protocol.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
Heinrich Schuchardt 2018-04-16 07:59:05 +02:00 committed by Alexander Graf
parent 065a8eca69
commit 211314c107
3 changed files with 35 additions and 2 deletions

View file

@ -330,7 +330,10 @@ struct efi_device_path *efi_dp_append(const struct efi_device_path *dp1,
const struct efi_device_path *dp2);
struct efi_device_path *efi_dp_append_node(const struct efi_device_path *dp,
const struct efi_device_path *node);
/* Create a device path node of given type, sub-type, length */
struct efi_device_path *efi_dp_create_device_node(const u8 type,
const u8 sub_type,
const u16 length);
struct efi_device_path *efi_dp_from_dev(struct udevice *dev);
struct efi_device_path *efi_dp_from_part(struct blk_desc *desc, int part);

View file

@ -315,6 +315,21 @@ struct efi_device_path *efi_dp_append_node(const struct efi_device_path *dp,
return ret;
}
struct efi_device_path *efi_dp_create_device_node(const u8 type,
const u8 sub_type,
const u16 length)
{
struct efi_device_path *ret;
ret = dp_alloc(length);
if (!ret)
return ret;
ret->type = type;
ret->sub_type = sub_type;
ret->length = length;
return ret;
}
#ifdef CONFIG_DM
/* size of device-path not including END node for device and all parents
* up to the root device.

View file

@ -70,11 +70,26 @@ static bool EFIAPI is_device_path_multi_instance(
return EFI_EXIT(false);
}
/*
* Create device node.
*
* This function implements the CreateDeviceNode service of the device path
* utilities protocol.
*
* See the Unified Extensible Firmware Interface (UEFI) specification
* for details.
*
* @node_type node type
* @node_sub_type node sub type
* @node_length node length
* @return device path node
*/
static struct efi_device_path * EFIAPI create_device_node(
uint8_t node_type, uint8_t node_sub_type, uint16_t node_length)
{
EFI_ENTRY("%u, %u, %u", node_type, node_sub_type, node_length);
return EFI_EXIT(NULL);
return EFI_EXIT(efi_dp_create_device_node(node_type, node_sub_type,
node_length));
}
const struct efi_device_path_utilities_protocol efi_device_path_utilities = {