Reach over and pull in devpath.c from libefi
This allows us to remove three nearly identical functions because the differences don't matter, and the size difference is trivial.
This commit is contained in:
parent
6058a49bde
commit
7131ecd11a
@ -25,7 +25,7 @@ CWARNFLAGS.zfs_module.c += -Wno-unused-parameter
|
||||
CWARNFLAGS.zfs_module.c += -Wno-unused-function
|
||||
|
||||
# architecture-specific loader code
|
||||
SRCS+= boot1.c self_reloc.c start.S ufs_module.c
|
||||
SRCS+= boot1.c self_reloc.c start.S ufs_module.c devpath.c
|
||||
.if ${MK_LOADER_ZFS} != "no"
|
||||
SRCS+= zfs_module.c
|
||||
CFLAGS.zfs_module.c+= -I${ZFSSRC}
|
||||
@ -50,6 +50,7 @@ CFLAGS+= -DEFI_DEBUG
|
||||
.PATH: ${EFISRC}/loader/arch/${MACHINE}
|
||||
.PATH: ${EFISRC}/loader
|
||||
.PATH: ${LDRSRC}
|
||||
.PATH: ${EFISRC}/libefi
|
||||
CFLAGS+= -I${LDRSRC}
|
||||
|
||||
FILES= ${BOOT1}.efi ${BOOT1}.efifat
|
||||
|
@ -78,66 +78,6 @@ Free(void *buf, const char *file __unused, int line __unused)
|
||||
(void)BS->FreePool(buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* nodes_match returns TRUE if the imgpath isn't NULL and the nodes match,
|
||||
* FALSE otherwise.
|
||||
*/
|
||||
static BOOLEAN
|
||||
nodes_match(EFI_DEVICE_PATH *imgpath, EFI_DEVICE_PATH *devpath)
|
||||
{
|
||||
size_t len;
|
||||
|
||||
if (imgpath == NULL || imgpath->Type != devpath->Type ||
|
||||
imgpath->SubType != devpath->SubType)
|
||||
return (FALSE);
|
||||
|
||||
len = DevicePathNodeLength(imgpath);
|
||||
if (len != DevicePathNodeLength(devpath))
|
||||
return (FALSE);
|
||||
|
||||
return (memcmp(imgpath, devpath, (size_t)len) == 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* device_paths_match returns TRUE if the imgpath isn't NULL and all nodes
|
||||
* in imgpath and devpath match up to their respective occurrences of a
|
||||
* media node, FALSE otherwise.
|
||||
*/
|
||||
static BOOLEAN
|
||||
device_paths_match(EFI_DEVICE_PATH *imgpath, EFI_DEVICE_PATH *devpath)
|
||||
{
|
||||
|
||||
if (imgpath == NULL)
|
||||
return (FALSE);
|
||||
|
||||
while (!IsDevicePathEnd(imgpath) && !IsDevicePathEnd(devpath)) {
|
||||
if (IsDevicePathType(imgpath, MEDIA_DEVICE_PATH) &&
|
||||
IsDevicePathType(devpath, MEDIA_DEVICE_PATH))
|
||||
return (TRUE);
|
||||
|
||||
if (!nodes_match(imgpath, devpath))
|
||||
return (FALSE);
|
||||
|
||||
imgpath = NextDevicePathNode(imgpath);
|
||||
devpath = NextDevicePathNode(devpath);
|
||||
}
|
||||
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
/*
|
||||
* devpath_last returns the last non-path end node in devpath.
|
||||
*/
|
||||
static EFI_DEVICE_PATH *
|
||||
devpath_last(EFI_DEVICE_PATH *devpath)
|
||||
{
|
||||
|
||||
while (!IsDevicePathEnd(NextDevicePathNode(devpath)))
|
||||
devpath = NextDevicePathNode(devpath);
|
||||
|
||||
return (devpath);
|
||||
}
|
||||
|
||||
/*
|
||||
* load_loader attempts to load the loader image data.
|
||||
*
|
||||
@ -225,7 +165,7 @@ try_boot(void)
|
||||
buf = NULL;
|
||||
}
|
||||
|
||||
if ((status = BS->LoadImage(TRUE, IH, devpath_last(dev->devpath),
|
||||
if ((status = BS->LoadImage(TRUE, IH, efi_devpath_last_node(dev->devpath),
|
||||
loaderbuf, loadersize, &loaderhandle)) != EFI_SUCCESS) {
|
||||
printf("Failed to load image provided by %s, size: %zu, (%lu)\n",
|
||||
mod->name, loadersize, EFI_ERROR_CODE(status));
|
||||
@ -321,7 +261,7 @@ probe_handle(EFI_HANDLE h, EFI_DEVICE_PATH *imgpath, BOOLEAN *preferred)
|
||||
if (!blkio->Media->LogicalPartition)
|
||||
return (EFI_UNSUPPORTED);
|
||||
|
||||
*preferred = device_paths_match(imgpath, devpath);
|
||||
*preferred = efi_devpath_match(imgpath, devpath);
|
||||
|
||||
/* Run through each module, see if it can load this partition */
|
||||
for (i = 0; i < NUM_BOOT_MODULES; i++) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user