07f5b7168daa0d6fd7334f07905892cef3553530
[people/peper/gpxe.git] / src / include / gpxe / ib_cm.h
1 #ifndef _GPXE_IB_CM_H
2 #define _GPXE_IB_CM_H
3
4 /** @file
5  *
6  * Infiniband communication management
7  *
8  */
9
10 FILE_LICENCE ( GPL2_OR_LATER );
11
12 #include <gpxe/infiniband.h>
13 #include <gpxe/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         struct ib_gid_half service_id;
46         /** Connection operations */
47         struct ib_connection_operations *op;
48
49         /** Path to target */
50         struct ib_path *path;
51         /** Connection request management transaction */
52         struct ib_mad_transaction *madx;
53
54         /** Length of connection request private data */
55         size_t private_data_len;
56         /** Connection request private data */
57         uint8_t private_data[0];
58 };
59
60 extern struct ib_connection *
61 ib_create_conn ( struct ib_device *ibdev, struct ib_queue_pair *qp,
62                  struct ib_gid *dgid, struct ib_gid_half *service_id,
63                  void *req_private_data, size_t req_private_data_len,
64                  struct ib_connection_operations *op );
65 extern void ib_destroy_conn ( struct ib_device *ibdev,
66                               struct ib_queue_pair *qp,
67                               struct ib_connection *conn );
68
69 #endif /* _GPXE_IB_CM_H */