mirror of
https://github.com/ipxe/ipxe
synced 2025-12-20 12:00:19 +03:00
[efi] Define an interface operation to describe using an EFI device path
Allow arbitrary objects to support describing themselves using an EFI device path. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
||||||
|
|
||||||
|
#include <ipxe/interface.h>
|
||||||
#include <ipxe/efi/efi.h>
|
#include <ipxe/efi/efi.h>
|
||||||
#include <ipxe/efi/Protocol/DevicePath.h>
|
#include <ipxe/efi/Protocol/DevicePath.h>
|
||||||
|
|
||||||
@@ -16,4 +17,8 @@ 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 EFI_DEVICE_PATH_PROTOCOL * efi_describe ( struct interface *interface );
|
||||||
|
#define efi_describe_TYPE( object_type ) \
|
||||||
|
typeof ( EFI_DEVICE_PATH_PROTOCOL * ( object_type ) )
|
||||||
|
|
||||||
#endif /* _IPXE_EFI_PATH_H */
|
#endif /* _IPXE_EFI_PATH_H */
|
||||||
|
|||||||
@@ -55,3 +55,29 @@ size_t efi_path_len ( EFI_DEVICE_PATH_PROTOCOL *path ) {
|
|||||||
|
|
||||||
return ( ( ( void * ) end ) - ( ( void * ) path ) );
|
return ( ( ( void * ) end ) - ( ( void * ) path ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describe object as an EFI device path
|
||||||
|
*
|
||||||
|
* @v intf Interface
|
||||||
|
* @ret path EFI device path, or NULL
|
||||||
|
*
|
||||||
|
* The caller is responsible for eventually calling free() on the
|
||||||
|
* allocated device path.
|
||||||
|
*/
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL * efi_describe ( struct interface *intf ) {
|
||||||
|
struct interface *dest;
|
||||||
|
efi_describe_TYPE ( void * ) *op =
|
||||||
|
intf_get_dest_op ( intf, efi_describe, &dest );
|
||||||
|
void *object = intf_object ( dest );
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *path;
|
||||||
|
|
||||||
|
if ( op ) {
|
||||||
|
path = op ( object );
|
||||||
|
} else {
|
||||||
|
path = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
intf_put ( dest );
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user