diff options
Diffstat (limited to 'src/include/gpxe/ib_mcast.h')
-rw-r--r-- | src/include/gpxe/ib_mcast.h | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/include/gpxe/ib_mcast.h b/src/include/gpxe/ib_mcast.h index 2ca3382b..74eccd0b 100644 --- a/src/include/gpxe/ib_mcast.h +++ b/src/include/gpxe/ib_mcast.h @@ -11,9 +11,38 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include <gpxe/infiniband.h> +struct ib_mad_transaction; + +/** An Infiniband multicast group membership */ +struct ib_mc_membership { + /** Queue pair */ + struct ib_queue_pair *qp; + /** Multicast GID */ + struct ib_gid gid; + /** Multicast group join transaction */ + struct ib_mad_transaction *madx; + /** Handle join success/failure + * + * @v ibdev Infiniband device + * @v qp Queue pair + * @v membership Multicast group membership + * @v rc Status code + * @v mad Response MAD (or NULL on error) + */ + void ( * complete ) ( struct ib_device *ibdev, struct ib_queue_pair *qp, + struct ib_mc_membership *membership, int rc, + union ib_mad *mad ); +}; + extern int ib_mcast_join ( struct ib_device *ibdev, struct ib_queue_pair *qp, - struct ib_gid *gid ); + struct ib_mc_membership *membership, + struct ib_gid *gid, + void ( * joined ) ( struct ib_device *ibdev, + struct ib_queue_pair *qp, + struct ib_mc_membership *memb, + int rc, union ib_mad *mad ) ); + extern void ib_mcast_leave ( struct ib_device *ibdev, struct ib_queue_pair *qp, - struct ib_gid *gid ); + struct ib_mc_membership *membership ); #endif /* _GPXE_IB_MCAST_H */ |