1 #ifndef _IPXE_IB_CM_H
2 #define _IPXE_IB_CM_H
3 
4 /** @file
5  *
6  * Infiniband communication management
7  *
8  */
9 
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11 
12 #include <ipxe/infiniband.h>
13 #include <ipxe/retry.h>
14 
15 struct ib_mad_transaction;
16 struct ib_connection;
17 
18 /** Infiniband connection operations */
19 struct 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 */
35 struct 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 	union ib_guid 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 
63 extern struct ib_connection *
64 ib_create_conn ( struct ib_device *ibdev, struct ib_queue_pair *qp,
65 		 union ib_gid *dgid, union ib_guid *service_id,
66 		 void *req_private_data, size_t req_private_data_len,
67 		 struct ib_connection_operations *op );
68 extern void ib_destroy_conn ( struct ib_device *ibdev,
69 			      struct ib_queue_pair *qp,
70 			      struct ib_connection *conn );
71 
72 #endif /* _IPXE_IB_CM_H */
73