aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Brown <mcb30@etherboot.org>2009-08-09 19:29:03 +0100
committerMichael Brown <mcb30@etherboot.org>2009-08-10 22:25:02 +0100
commit419243e7f1ab37c9e7867080e17dcd745fa4f9c0 (patch)
treeca31e5d7fb1b76d225632b959d8e7309e45b75f3
parent4be11f523c57a22d18a7369fbe9ec6d9f1c88022 (diff)
downloadipxe-419243e7f1ab37c9e7867080e17dcd745fa4f9c0.zip
ipxe-419243e7f1ab37c9e7867080e17dcd745fa4f9c0.tar.gz
ipxe-419243e7f1ab37c9e7867080e17dcd745fa4f9c0.tar.bz2
[infiniband] Add find_ibdev()
-rw-r--r--src/include/gpxe/infiniband.h1
-rw-r--r--src/net/infiniband.c16
2 files changed, 17 insertions, 0 deletions
diff --git a/src/include/gpxe/infiniband.h b/src/include/gpxe/infiniband.h
index c4bc2ff..771d2a0 100644
--- a/src/include/gpxe/infiniband.h
+++ b/src/include/gpxe/infiniband.h
@@ -472,6 +472,7 @@ extern int ib_set_pkey_table ( struct ib_device *ibdev, union ib_mad *mad );
extern struct ib_device * alloc_ibdev ( size_t priv_size );
extern int register_ibdev ( struct ib_device *ibdev );
extern void unregister_ibdev ( struct ib_device *ibdev );
+extern struct ib_device * find_ibdev ( struct ib_gid *gid );
extern void ib_link_state_changed ( struct ib_device *ibdev );
extern void ib_poll_eq ( struct ib_device *ibdev );
extern struct list_head ib_devices;
diff --git a/src/net/infiniband.c b/src/net/infiniband.c
index 539c529..45f38d9 100644
--- a/src/net/infiniband.c
+++ b/src/net/infiniband.c
@@ -882,3 +882,19 @@ void unregister_ibdev ( struct ib_device *ibdev ) {
ibdev_put ( ibdev );
DBGC ( ibdev, "IBDEV %p unregistered\n", ibdev );
}
+
+/**
+ * Find Infiniband device by GID
+ *
+ * @v gid GID
+ * @ret ibdev Infiniband device, or NULL
+ */
+struct ib_device * find_ibdev ( struct ib_gid *gid ) {
+ struct ib_device *ibdev;
+
+ for_each_ibdev ( ibdev ) {
+ if ( memcmp ( gid, &ibdev->gid, sizeof ( *gid ) ) == 0 )
+ return ibdev;
+ }
+ return NULL;
+}