aboutsummaryrefslogtreecommitdiff
path: root/src/include/ipxe
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2020-10-23 15:26:30 +0100
committerMichael Brown <mcb30@ipxe.org>2020-10-23 15:34:35 +0100
commita2e44077cdb0713d90766e61165ca71fce902003 (patch)
tree36581ed047d0c43fdf6f3fe2e48297fa6d79ff1c /src/include/ipxe
parentbf051a76eef07bb4bd04ad4ff2b8b5e23ef26740 (diff)
downloadipxe-a2e44077cdb0713d90766e61165ca71fce902003.zip
ipxe-a2e44077cdb0713d90766e61165ca71fce902003.tar.gz
ipxe-a2e44077cdb0713d90766e61165ca71fce902003.tar.bz2
[infiniband] Allow SRP device to be described using an EFI device path
The UEFI specification provides a partial definition of an Infiniband device path structure. Use this structure to construct what may be a plausible path containing at least some of the information required to identify an SRP target device. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe')
-rw-r--r--src/include/ipxe/efi/efi_path.h3
-rw-r--r--src/include/ipxe/ib_srp.h35
2 files changed, 38 insertions, 0 deletions
diff --git a/src/include/ipxe/efi/efi_path.h b/src/include/ipxe/efi/efi_path.h
index 91a6c25..76ded72 100644
--- a/src/include/ipxe/efi/efi_path.h
+++ b/src/include/ipxe/efi/efi_path.h
@@ -18,6 +18,7 @@ struct uri;
struct iscsi_session;
struct aoe_device;
struct fcp_description;
+struct ib_srp_device;
struct usb_function;
extern EFI_DEVICE_PATH_PROTOCOL *
@@ -31,6 +32,8 @@ extern EFI_DEVICE_PATH_PROTOCOL *
efi_iscsi_path ( struct iscsi_session *iscsi );
extern EFI_DEVICE_PATH_PROTOCOL * efi_aoe_path ( struct aoe_device *aoedev );
extern EFI_DEVICE_PATH_PROTOCOL * efi_fcp_path ( struct fcp_description *desc );
+extern EFI_DEVICE_PATH_PROTOCOL *
+efi_ib_srp_path ( struct ib_srp_device *ib_srp );
extern EFI_DEVICE_PATH_PROTOCOL * efi_usb_path ( struct usb_function *func );
extern EFI_DEVICE_PATH_PROTOCOL * efi_describe ( struct interface *interface );
diff --git a/src/include/ipxe/ib_srp.h b/src/include/ipxe/ib_srp.h
index ad407b0..4b6df8d 100644
--- a/src/include/ipxe/ib_srp.h
+++ b/src/include/ipxe/ib_srp.h
@@ -10,6 +10,8 @@
FILE_LICENCE ( BSD2 );
#include <stdint.h>
+#include <ipxe/acpi.h>
+#include <ipxe/interface.h>
#include <ipxe/infiniband.h>
#include <ipxe/srp.h>
@@ -55,4 +57,37 @@ struct sbft_ib_subtable {
uint8_t reserved[6];
} __attribute__ (( packed ));
+/**
+ * An Infiniband SRP sBFT created by iPXE
+ */
+struct ipxe_ib_sbft {
+ /** The table header */
+ struct sbft_table table;
+ /** The SCSI subtable */
+ struct sbft_scsi_subtable scsi;
+ /** The SRP subtable */
+ struct sbft_srp_subtable srp;
+ /** The Infiniband subtable */
+ struct sbft_ib_subtable ib;
+};
+
+/** An Infiniband SRP device */
+struct ib_srp_device {
+ /** Reference count */
+ struct refcnt refcnt;
+
+ /** SRP transport interface */
+ struct interface srp;
+ /** CMRC interface */
+ struct interface cmrc;
+
+ /** Infiniband device */
+ struct ib_device *ibdev;
+
+ /** ACPI descriptor */
+ struct acpi_descriptor desc;
+ /** Boot firmware table parameters */
+ struct ipxe_ib_sbft sbft;
+};
+
#endif /* _IPXE_IB_SRP_H */