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
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to