1#ifndef _GPXE_IB_CM_H 2#define _GPXE_IB_CM_H 3 4/** @file 5 * 6 * Infiniband communication management 7 * 8 */ 9 10FILE_LICENCE ( GPL2_OR_LATER ); 11 12#include <gpxe/infiniband.h> 13#include <gpxe/retry.h> 14 15struct ib_mad_transaction; 16struct ib_connection; 17 18/** Infiniband connection operations */ 19struct ib_connection_operations { 20 /** Handle change of connection status 21 * 22 * @v ibdev Infiniband device 23 * @v qp Queue pair 24 * @v conn Connection 25 * @v rc Connection status code 26 * @v private_data Private data, if available 27 * @v private_data_len Length of private data 28 */ 29 void ( * changed ) ( struct ib_device *ibdev, struct ib_queue_pair *qp, 30 struct ib_connection *conn, int rc, 31 void *private_data, size_t private_data_len ); 32}; 33 34/** An Infiniband connection */ 35struct ib_connection { 36 /** Infiniband device */ 37 struct ib_device *ibdev; 38 /** Queue pair */ 39 struct ib_queue_pair *qp; 40 /** Local communication ID */ 41 uint32_t local_id; 42 /** Remote communication ID */ 43 uint32_t remote_id; 44 /** Target service ID */ 45 struct ib_gid_half service_id; 46 /** Connection operations */ 47 struct ib_connection_operations *op; 48 49 /** List of connections */ 50 struct list_head list; 51 52 /** Path to target */ 53 struct ib_path *path; 54 /** Connection request management transaction */ 55 struct ib_mad_transaction *madx; 56 57 /** Length of connection request private data */ 58 size_t private_data_len; 59 /** Connection request private data */ 60 uint8_t private_data[0]; 61}; 62 63extern struct ib_connection * 64ib_create_conn ( struct ib_device *ibdev, struct ib_queue_pair *qp, 65 struct ib_gid *dgid, struct ib_gid_half *service_id, 66 void *req_private_data, size_t req_private_data_len, 67 struct ib_connection_operations *op ); 68extern void ib_destroy_conn ( struct ib_device *ibdev, 69 struct ib_queue_pair *qp, 70 struct ib_connection *conn ); 71 72#endif /* _GPXE_IB_CM_H */ 73