Lines Matching refs:dp
33 .dp = {
77 struct efi_device_path *efi_dp_next(const struct efi_device_path *dp) in efi_dp_next() argument
79 if (dp == NULL) in efi_dp_next()
81 if (dp->type == DEVICE_PATH_TYPE_END) in efi_dp_next()
83 dp = ((void *)dp) + dp->length; in efi_dp_next()
84 if (dp->type == DEVICE_PATH_TYPE_END) in efi_dp_next()
86 return (struct efi_device_path *)dp; in efi_dp_next()
130 static struct efi_device_path *shorten_path(struct efi_device_path *dp) in shorten_path() argument
132 while (dp) { in shorten_path()
138 if (EFI_DP_TYPE(dp, MESSAGING_DEVICE, MSG_USB_CLASS) || in shorten_path()
139 EFI_DP_TYPE(dp, MEDIA_DEVICE, HARD_DRIVE_PATH) || in shorten_path()
140 EFI_DP_TYPE(dp, MEDIA_DEVICE, FILE_PATH)) in shorten_path()
141 return dp; in shorten_path()
143 dp = efi_dp_next(dp); in shorten_path()
146 return dp; in shorten_path()
149 static struct efi_object *find_obj(struct efi_device_path *dp, bool short_path, in find_obj() argument
153 efi_uintn_t dp_size = efi_dp_instance_size(dp); in find_obj()
167 if (efi_dp_match(dp, obj_dp) == 0) { in find_obj()
173 *rem = ((void *)dp) + in find_obj()
195 struct efi_object *efi_dp_find_obj(struct efi_device_path *dp, in efi_dp_find_obj() argument
201 efiobj = find_obj(dp, false, NULL); in efi_dp_find_obj()
205 efiobj = find_obj(dp, false, rem); in efi_dp_find_obj()
209 efiobj = find_obj(dp, true, rem); in efi_dp_find_obj()
221 const struct efi_device_path *efi_dp_last_node(const struct efi_device_path *dp) in efi_dp_last_node() argument
225 if (!dp || dp->type == DEVICE_PATH_TYPE_END) in efi_dp_last_node()
227 while (dp) { in efi_dp_last_node()
228 ret = (struct efi_device_path *)dp; in efi_dp_last_node()
229 dp = efi_dp_next(dp); in efi_dp_last_node()
235 efi_uintn_t efi_dp_instance_size(const struct efi_device_path *dp) in efi_dp_instance_size() argument
239 if (!dp || dp->type == DEVICE_PATH_TYPE_END) in efi_dp_instance_size()
241 while (dp) { in efi_dp_instance_size()
242 sz += dp->length; in efi_dp_instance_size()
243 dp = efi_dp_next(dp); in efi_dp_instance_size()
250 efi_uintn_t efi_dp_size(const struct efi_device_path *dp) in efi_dp_size() argument
252 const struct efi_device_path *p = dp; in efi_dp_size()
260 return (void *)p - (void *)dp; in efi_dp_size()
264 struct efi_device_path *efi_dp_dup(const struct efi_device_path *dp) in efi_dp_dup() argument
267 size_t sz = efi_dp_size(dp) + sizeof(END); in efi_dp_dup()
269 if (!dp) in efi_dp_dup()
275 memcpy(ndp, dp, sz); in efi_dp_dup()
308 struct efi_device_path *efi_dp_append_node(const struct efi_device_path *dp, in efi_dp_append_node() argument
313 if (!node && !dp) { in efi_dp_append_node()
316 ret = efi_dp_dup(dp); in efi_dp_append_node()
317 } else if (!dp) { in efi_dp_append_node()
327 size_t sz = efi_dp_size(dp); in efi_dp_append_node()
331 memcpy(p, dp, sz); in efi_dp_append_node()
359 const struct efi_device_path *dp, in efi_dp_append_instance() argument
367 if (!dp) in efi_dp_append_instance()
369 sz = efi_dp_size(dp); in efi_dp_append_instance()
375 memcpy(p, dp, sz + sizeof(END)); in efi_dp_append_instance()
385 struct efi_device_path *efi_dp_get_next_instance(struct efi_device_path **dp, in efi_dp_get_next_instance() argument
393 if (!dp || !*dp) in efi_dp_get_next_instance()
395 sz = efi_dp_instance_size(*dp); in efi_dp_get_next_instance()
399 memcpy(p, *dp, sz + sizeof(END)); in efi_dp_get_next_instance()
400 *dp = (void *)*dp + sz; in efi_dp_get_next_instance()
401 if ((*dp)->sub_type == DEVICE_PATH_SUB_TYPE_INSTANCE_END) in efi_dp_get_next_instance()
402 *dp = (void *)*dp + sizeof(END); in efi_dp_get_next_instance()
404 *dp = NULL; in efi_dp_get_next_instance()
410 bool efi_dp_is_multi_instance(const struct efi_device_path *dp) in efi_dp_is_multi_instance() argument
412 const struct efi_device_path *p = dp; in efi_dp_is_multi_instance()
512 struct efi_device_path_mac_addr *dp = in dp_fill() local
516 dp->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE; in dp_fill()
517 dp->dp.sub_type = DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR; in dp_fill()
518 dp->dp.length = sizeof(*dp); in dp_fill()
519 memset(&dp->mac, 0, sizeof(dp->mac)); in dp_fill()
521 memcpy(&dp->mac, &pdata->enetaddr, ARP_HLEN); in dp_fill()
523 dp->if_type = 1; in dp_fill()
524 return &dp[1]; in dp_fill()
533 struct efi_device_path_vendor *dp = buf; in dp_fill() local
537 dp = buf; in dp_fill()
538 ++dp; in dp_fill()
539 dp->dp.type = DEVICE_PATH_TYPE_HARDWARE_DEVICE; in dp_fill()
540 dp->dp.sub_type = DEVICE_PATH_SUB_TYPE_VENDOR; in dp_fill()
541 dp->dp.length = sizeof(*dp) + 1; in dp_fill()
542 memcpy(&dp->guid, &efi_guid_host_dev, in dp_fill()
544 dp->vendor_data[0] = desc->devnum; in dp_fill()
545 return &dp->vendor_data[1]; in dp_fill()
550 struct efi_device_path_atapi *dp = in dp_fill() local
554 dp->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE; in dp_fill()
555 dp->dp.sub_type = DEVICE_PATH_SUB_TYPE_MSG_ATAPI; in dp_fill()
556 dp->dp.length = sizeof(*dp); in dp_fill()
557 dp->logical_unit_number = desc->devnum; in dp_fill()
558 dp->primary_secondary = IDE_BUS(desc->devnum); in dp_fill()
559 dp->slave_master = desc->devnum % in dp_fill()
562 return &dp[1]; in dp_fill()
567 struct efi_device_path_scsi *dp = in dp_fill() local
571 dp->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE; in dp_fill()
572 dp->dp.sub_type = DEVICE_PATH_SUB_TYPE_MSG_SCSI; in dp_fill()
573 dp->dp.length = sizeof(*dp); in dp_fill()
574 dp->logical_unit_number = desc->lun; in dp_fill()
575 dp->target_id = desc->target; in dp_fill()
576 return &dp[1]; in dp_fill()
585 sddp->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE; in dp_fill()
586 sddp->dp.sub_type = is_sd(desc) ? in dp_fill()
589 sddp->dp.length = sizeof(*sddp); in dp_fill()
596 struct efi_device_path_nvme *dp = in dp_fill() local
600 dp->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE; in dp_fill()
601 dp->dp.sub_type = DEVICE_PATH_SUB_TYPE_MSG_NVME; in dp_fill()
602 dp->dp.length = sizeof(*dp); in dp_fill()
603 nvme_get_namespace_id(dev, &ns_id, dp->eui64); in dp_fill()
604 memcpy(&dp->ns_id, &ns_id, sizeof(ns_id)); in dp_fill()
605 return &dp[1]; in dp_fill()
622 sddp->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE; in dp_fill()
623 sddp->dp.sub_type = is_sd(desc) ? in dp_fill()
626 sddp->dp.length = sizeof(*sddp); in dp_fill()
639 udp->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE; in dp_fill()
640 udp->dp.sub_type = DEVICE_PATH_SUB_TYPE_MSG_USB_CLASS; in dp_fill()
641 udp->dp.length = sizeof(*udp); in dp_fill()
704 cddp->dp.type = DEVICE_PATH_TYPE_MEDIA_DEVICE; in dp_part_node()
705 cddp->dp.sub_type = DEVICE_PATH_SUB_TYPE_CDROM_PATH; in dp_part_node()
706 cddp->dp.length = sizeof(*cddp); in dp_part_node()
714 hddp->dp.type = DEVICE_PATH_TYPE_MEDIA_DEVICE; in dp_part_node()
715 hddp->dp.sub_type = DEVICE_PATH_SUB_TYPE_HARD_DRIVE_PATH; in dp_part_node()
716 hddp->dp.length = sizeof(*hddp); in dp_part_node()
784 udp->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE; in dp_part_fill()
785 udp->dp.sub_type = DEVICE_PATH_SUB_TYPE_MSG_USB; in dp_part_fill()
786 udp->dp.length = sizeof(*udp); in dp_part_fill()
899 fp->dp.type = DEVICE_PATH_TYPE_MEDIA_DEVICE; in efi_dp_from_file()
900 fp->dp.sub_type = DEVICE_PATH_SUB_TYPE_FILE_PATH; in efi_dp_from_file()
901 fp->dp.length = (u16)fpsize; in efi_dp_from_file()
939 ndp->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE; in efi_dp_from_eth()
940 ndp->dp.sub_type = DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR; in efi_dp_from_eth()
941 ndp->dp.length = sizeof(*ndp); in efi_dp_from_eth()
966 mdp->dp.type = DEVICE_PATH_TYPE_HARDWARE_DEVICE; in efi_dp_from_mem()
967 mdp->dp.sub_type = DEVICE_PATH_SUB_TYPE_MEMORY; in efi_dp_from_mem()
968 mdp->dp.length = sizeof(*mdp); in efi_dp_from_mem()
995 struct efi_device_path *p, *dp, *fp = NULL; in efi_dp_split_file_path() local
999 dp = efi_dp_dup(full_path); in efi_dp_split_file_path()
1000 if (!dp) in efi_dp_split_file_path()
1002 p = dp; in efi_dp_split_file_path()
1016 *device_path = dp; in efi_dp_split_file_path()