mirror of
https://github.com/ipxe/ipxe
synced 2025-12-14 07:50:43 +03:00
[efi] Add efi_path_prev() utility function
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -37,6 +37,9 @@ static inline void efi_path_terminate ( EFI_DEVICE_PATH_PROTOCOL *end ) {
|
|||||||
extern EFI_DEVICE_PATH_PROTOCOL *
|
extern EFI_DEVICE_PATH_PROTOCOL *
|
||||||
efi_path_next ( EFI_DEVICE_PATH_PROTOCOL *path );
|
efi_path_next ( EFI_DEVICE_PATH_PROTOCOL *path );
|
||||||
extern EFI_DEVICE_PATH_PROTOCOL *
|
extern EFI_DEVICE_PATH_PROTOCOL *
|
||||||
|
efi_path_prev ( EFI_DEVICE_PATH_PROTOCOL *path,
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *curr );
|
||||||
|
extern EFI_DEVICE_PATH_PROTOCOL *
|
||||||
efi_path_end ( EFI_DEVICE_PATH_PROTOCOL *path );
|
efi_path_end ( EFI_DEVICE_PATH_PROTOCOL *path );
|
||||||
extern size_t efi_path_len ( EFI_DEVICE_PATH_PROTOCOL *path );
|
extern size_t efi_path_len ( EFI_DEVICE_PATH_PROTOCOL *path );
|
||||||
extern unsigned int efi_path_vlan ( EFI_DEVICE_PATH_PROTOCOL *path );
|
extern unsigned int efi_path_vlan ( EFI_DEVICE_PATH_PROTOCOL *path );
|
||||||
|
|||||||
@@ -65,6 +65,25 @@ EFI_DEVICE_PATH_PROTOCOL * efi_path_next ( EFI_DEVICE_PATH_PROTOCOL *path ) {
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find previous element of device path
|
||||||
|
*
|
||||||
|
* @v path Device path, or NULL for no path
|
||||||
|
* @v curr Current element in device path, or NULL for end of path
|
||||||
|
* @ret prev Previous element in device path, or NULL
|
||||||
|
*/
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL * efi_path_prev ( EFI_DEVICE_PATH_PROTOCOL *path,
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *curr ) {
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *tmp;
|
||||||
|
|
||||||
|
/* Find immediately preceding element */
|
||||||
|
while ( ( tmp = efi_path_next ( path ) ) != curr ) {
|
||||||
|
path = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find end of device path
|
* Find end of device path
|
||||||
*
|
*
|
||||||
@@ -72,14 +91,8 @@ EFI_DEVICE_PATH_PROTOCOL * efi_path_next ( EFI_DEVICE_PATH_PROTOCOL *path ) {
|
|||||||
* @ret path_end End of device path, or NULL
|
* @ret path_end End of device path, or NULL
|
||||||
*/
|
*/
|
||||||
EFI_DEVICE_PATH_PROTOCOL * efi_path_end ( EFI_DEVICE_PATH_PROTOCOL *path ) {
|
EFI_DEVICE_PATH_PROTOCOL * efi_path_end ( EFI_DEVICE_PATH_PROTOCOL *path ) {
|
||||||
EFI_DEVICE_PATH_PROTOCOL *next;
|
|
||||||
|
|
||||||
/* Find end of device path */
|
return efi_path_prev ( path, NULL );
|
||||||
while ( ( next = efi_path_next ( path ) ) != NULL ) {
|
|
||||||
path = next;
|
|
||||||
}
|
|
||||||
|
|
||||||
return path;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user