Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 6 May 2019 18:39:27 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r347195 - in head/stand/efi: include libefi
Message-ID:  <201905061839.x46IdRW6082808@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Mon May  6 18:39:27 2019
New Revision: 347195
URL: https://svnweb.freebsd.org/changeset/base/347195

Log:
  Abstract out efi_devpath_to_handle to search for a handle that matches
  the desired devpath.

Modified:
  head/stand/efi/include/efilib.h
  head/stand/efi/libefi/devpath.c
  head/stand/efi/libefi/efipart.c

Modified: head/stand/efi/include/efilib.h
==============================================================================
--- head/stand/efi/include/efilib.h	Mon May  6 18:39:22 2019	(r347194)
+++ head/stand/efi/include/efilib.h	Mon May  6 18:39:27 2019	(r347195)
@@ -95,6 +95,7 @@ UINTN efi_devpath_length(EFI_DEVICE_PATH *);
 EFI_DEVICE_PATH *efi_name_to_devpath(const char *path);
 EFI_DEVICE_PATH *efi_name_to_devpath16(CHAR16 *path);
 void efi_devpath_free(EFI_DEVICE_PATH *dp);
+EFI_HANDLE efi_devpath_to_handle(EFI_DEVICE_PATH *path, EFI_HANDLE *handles, unsigned nhandles);
 
 int efi_status_to_errno(EFI_STATUS);
 EFI_STATUS errno_to_efi_status(int errno);

Modified: head/stand/efi/libefi/devpath.c
==============================================================================
--- head/stand/efi/libefi/devpath.c	Mon May  6 18:39:22 2019	(r347194)
+++ head/stand/efi/libefi/devpath.c	Mon May  6 18:39:27 2019	(r347195)
@@ -269,3 +269,25 @@ efi_devpath_length(EFI_DEVICE_PATH  *path)
 		path = NextDevicePathNode(path);
 	return ((UINTN)path - (UINTN)start) + DevicePathNodeLength(path);
 }
+
+EFI_HANDLE
+efi_devpath_to_handle(EFI_DEVICE_PATH *path, EFI_HANDLE *handles, unsigned nhandles)
+{
+	unsigned i;
+	EFI_DEVICE_PATH *media, *devpath;
+	EFI_HANDLE h;
+
+	media = efi_devpath_to_media_path(path);
+	if (media == NULL)
+		return (NULL);
+	for (i = 0; i < nhandles; i++) {
+		h = handles[i];
+		devpath = efi_lookup_devpath(h);
+		if (devpath == NULL)
+			continue;
+		if (!efi_devpath_match_node(media, efi_devpath_to_media_path(devpath)))
+			continue;
+		return (h);
+	}
+	return (NULL);
+}

Modified: head/stand/efi/libefi/efipart.c
==============================================================================
--- head/stand/efi/libefi/efipart.c	Mon May  6 18:39:22 2019	(r347194)
+++ head/stand/efi/libefi/efipart.c	Mon May  6 18:39:27 2019	(r347195)
@@ -140,23 +140,12 @@ efiblk_get_pdinfo(struct devdesc *dev)
 pdinfo_t *
 efiblk_get_pdinfo_by_device_path(EFI_DEVICE_PATH *path)
 {
-	unsigned i;
-	EFI_DEVICE_PATH *media, *devpath;
 	EFI_HANDLE h;
 
-	media = efi_devpath_to_media_path(path);
-	if (media == NULL)
+	h = efi_devpath_to_handle(path, efipart_handles, efipart_nhandles);
+	if (h == NULL)
 		return (NULL);
-	for (i = 0; i < efipart_nhandles; i++) {
-		h = efipart_handles[i];
-		devpath = efi_lookup_devpath(h);
-		if (devpath == NULL)
-			continue;
-		if (!efi_devpath_match_node(media, efi_devpath_to_media_path(devpath)))
-			continue;
-		return (efiblk_get_pdinfo_by_handle(h));
-	}
-	return (NULL);
+	return (efiblk_get_pdinfo_by_handle(h));
 }
 
 static bool



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201905061839.x46IdRW6082808>