mirror of https://github.com/ipxe/ipxe.git
[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>pull/171/head
parent
2bf0fd39ca
commit
2091288eaa
|
@ -9,6 +9,7 @@
|
|||
|
||||
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
||||
|
||||
#include <ipxe/interface.h>
|
||||
#include <ipxe/efi/efi.h>
|
||||
#include <ipxe/efi/Protocol/DevicePath.h>
|
||||
|
||||
|
@ -16,4 +17,8 @@ extern EFI_DEVICE_PATH_PROTOCOL *
|
|||
efi_path_end ( 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 */
|
||||
|
|
|
@ -55,3 +55,29 @@ size_t efi_path_len ( EFI_DEVICE_PATH_PROTOCOL *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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue