efi: device path for nvme
This allows our EFI API to create a device path node for NVMe devices. It adds the necessary device path struct, uses the nvme namespace accessor to retrieve the id and eui64, and also provides support for the device path text protocol. Signed-off-by: Patrick Wildt <patrick@blueri.se> Tested-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:

committed by
Heinrich Schuchardt

parent
c50b2883df
commit
f2d247df50
@@ -10,6 +10,7 @@
|
||||
#include <dm.h>
|
||||
#include <usb.h>
|
||||
#include <mmc.h>
|
||||
#include <nvme.h>
|
||||
#include <efi_loader.h>
|
||||
#include <part.h>
|
||||
#include <sandboxblockdev.h>
|
||||
@@ -451,6 +452,11 @@ static unsigned dp_size(struct udevice *dev)
|
||||
return dp_size(dev->parent) +
|
||||
sizeof(struct efi_device_path_sd_mmc_path);
|
||||
#endif
|
||||
#if defined(CONFIG_NVME)
|
||||
case UCLASS_NVME:
|
||||
return dp_size(dev->parent) +
|
||||
sizeof(struct efi_device_path_nvme);
|
||||
#endif
|
||||
#ifdef CONFIG_SANDBOX
|
||||
case UCLASS_ROOT:
|
||||
/*
|
||||
@@ -583,6 +589,20 @@ static void *dp_fill(void *buf, struct udevice *dev)
|
||||
sddp->slot_number = dev->seq;
|
||||
return &sddp[1];
|
||||
}
|
||||
#endif
|
||||
#if defined(CONFIG_NVME)
|
||||
case UCLASS_NVME: {
|
||||
struct efi_device_path_nvme *dp =
|
||||
dp_fill(buf, dev->parent);
|
||||
u32 ns_id;
|
||||
|
||||
dp->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE;
|
||||
dp->dp.sub_type = DEVICE_PATH_SUB_TYPE_MSG_NVME;
|
||||
dp->dp.length = sizeof(*dp);
|
||||
nvme_get_namespace_id(dev, &ns_id, dp->eui64);
|
||||
memcpy(&dp->ns_id, &ns_id, sizeof(ns_id));
|
||||
return &dp[1];
|
||||
}
|
||||
#endif
|
||||
default:
|
||||
debug("%s(%u) %s: unhandled parent class: %s (%u)\n",
|
||||
|
Reference in New Issue
Block a user