diff options
author | Lucas Stach <l.stach@pengutronix.de> | 2014-12-08 14:42:28 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-12-09 09:59:09 +0100 |
commit | da94ff1e37315900037dee2171f43c342616206d (patch) | |
tree | 7f8d9d2aa837aec213faa60a7b4311c7f988e4ff | |
parent | 38c6f5d35177e3e469ae0abb994b7aea68b790e9 (diff) | |
download | barebox-da94ff1e37315900037dee2171f43c342616206d.tar.gz barebox-da94ff1e37315900037dee2171f43c342616206d.tar.xz |
efi: add function to determine type of device path
Thanks to the wonders of UEFI we have to walk down the
device path all the way until we arrive at the device
we got this path from...
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | common/efi-devicepath.c | 15 | ||||
-rw-r--r-- | include/efi.h | 1 |
2 files changed, 16 insertions, 0 deletions
diff --git a/common/efi-devicepath.c b/common/efi-devicepath.c index 2b1d916768..a53c6d2e8b 100644 --- a/common/efi-devicepath.c +++ b/common/efi-devicepath.c @@ -1368,3 +1368,18 @@ char *device_path_to_str(struct efi_device_path *dev_path) return str.str; } + +u8 device_path_to_type(struct efi_device_path *dev_path) +{ + struct efi_device_path *dev_path_next; + + dev_path = unpack_device_path(dev_path); + dev_path_next = next_device_path_node(dev_path); + + while (!is_device_path_end(dev_path_next)) { + dev_path = dev_path_next; + dev_path_next = next_device_path_node(dev_path); + } + + return device_path_type(dev_path); +} diff --git a/include/efi.h b/include/efi.h index 4ad9f69237..de51e1a3c9 100644 --- a/include/efi.h +++ b/include/efi.h @@ -615,6 +615,7 @@ static inline int efi_compare_guid(efi_guid_t *a, efi_guid_t *b) } char *device_path_to_str(struct efi_device_path *dev_path); +u8 device_path_to_type(struct efi_device_path *dev_path); const char *efi_guid_string(efi_guid_t *g); |