[fcp] Allow Fibre Channel device to be described using an EFI device path

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2020-10-22 14:01:27 +01:00
parent e6f9054d13
commit bf051a76ee
4 changed files with 61 additions and 8 deletions

View File

@@ -27,6 +27,7 @@
#include <ipxe/uri.h>
#include <ipxe/iscsi.h>
#include <ipxe/aoe.h>
#include <ipxe/fcp.h>
#include <ipxe/usb.h>
#include <ipxe/efi/efi.h>
#include <ipxe/efi/efi_driver.h>
@@ -337,6 +338,36 @@ EFI_DEVICE_PATH_PROTOCOL * efi_aoe_path ( struct aoe_device *aoedev ) {
return NULL;
}
/**
* Construct EFI device path for Fibre Channel device
*
* @v desc FCP device description
* @ret path EFI device path, or NULL on error
*/
EFI_DEVICE_PATH_PROTOCOL * efi_fcp_path ( struct fcp_description *desc ) {
struct {
FIBRECHANNELEX_DEVICE_PATH fc;
EFI_DEVICE_PATH_PROTOCOL end;
} __attribute__ (( packed )) *path;
/* Allocate device path */
path = zalloc ( sizeof ( *path ) );
if ( ! path )
return NULL;
/* Construct device path */
path->fc.Header.Type = MESSAGING_DEVICE_PATH;
path->fc.Header.SubType = MSG_FIBRECHANNELEX_DP;
path->fc.Header.Length[0] = sizeof ( path->fc );
memcpy ( path->fc.WWN, &desc->wwn, sizeof ( path->fc.WWN ) );
memcpy ( path->fc.Lun, &desc->lun, sizeof ( path->fc.Lun ) );
path->end.Type = END_DEVICE_PATH_TYPE;
path->end.SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE;
path->end.Length[0] = sizeof ( path->end );
return &path->fc.Header;
}
/**
* Construct EFI device path for USB function
*