1 /* 2 * EFI device path interface 3 * 4 * Copyright (c) 2017 Leif Lindholm 5 * 6 * SPDX-License-Identifier: GPL-2.0+ 7 */ 8 9 #include <common.h> 10 #include <efi_loader.h> 11 12 const efi_guid_t efi_guid_device_path_utilities_protocol = 13 EFI_DEVICE_PATH_UTILITIES_PROTOCOL_GUID; 14 15 static efi_uintn_t EFIAPI get_device_path_size( 16 const struct efi_device_path *device_path) 17 { 18 efi_uintn_t sz = 0; 19 20 EFI_ENTRY("%p", device_path); 21 /* size includes the END node: */ 22 if (device_path) 23 sz = efi_dp_size(device_path) + sizeof(struct efi_device_path); 24 return EFI_EXIT(sz); 25 } 26 27 static struct efi_device_path * EFIAPI duplicate_device_path( 28 const struct efi_device_path *device_path) 29 { 30 EFI_ENTRY("%p", device_path); 31 return EFI_EXIT(efi_dp_dup(device_path)); 32 } 33 34 static struct efi_device_path * EFIAPI append_device_path( 35 const struct efi_device_path *src1, 36 const struct efi_device_path *src2) 37 { 38 EFI_ENTRY("%p, %p", src1, src2); 39 return EFI_EXIT(efi_dp_append(src1, src2)); 40 } 41 42 static struct efi_device_path * EFIAPI append_device_node( 43 const struct efi_device_path *device_path, 44 const struct efi_device_path *device_node) 45 { 46 EFI_ENTRY("%p, %p", device_path, device_node); 47 return EFI_EXIT(efi_dp_append_node(device_path, device_node)); 48 } 49 50 static struct efi_device_path * EFIAPI append_device_path_instance( 51 const struct efi_device_path *device_path, 52 const struct efi_device_path *device_path_instance) 53 { 54 EFI_ENTRY("%p, %p", device_path, device_path_instance); 55 return EFI_EXIT(NULL); 56 } 57 58 static struct efi_device_path * EFIAPI get_next_device_path_instance( 59 struct efi_device_path **device_path_instance, 60 efi_uintn_t *device_path_instance_size) 61 { 62 EFI_ENTRY("%p, %p", device_path_instance, device_path_instance_size); 63 return EFI_EXIT(NULL); 64 } 65 66 static bool EFIAPI is_device_path_multi_instance( 67 const struct efi_device_path *device_path) 68 { 69 EFI_ENTRY("%p", device_path); 70 return EFI_EXIT(false); 71 } 72 73 static struct efi_device_path * EFIAPI create_device_node( 74 uint8_t node_type, uint8_t node_sub_type, uint16_t node_length) 75 { 76 EFI_ENTRY("%u, %u, %u", node_type, node_sub_type, node_length); 77 return EFI_EXIT(NULL); 78 } 79 80 const struct efi_device_path_utilities_protocol efi_device_path_utilities = { 81 .get_device_path_size = get_device_path_size, 82 .duplicate_device_path = duplicate_device_path, 83 .append_device_path = append_device_path, 84 .append_device_node = append_device_node, 85 .append_device_path_instance = append_device_path_instance, 86 .get_next_device_path_instance = get_next_device_path_instance, 87 .is_device_path_multi_instance = is_device_path_multi_instance, 88 .create_device_node = create_device_node, 89 }; 90