6 * Infiniband communication management
10 FILE_LICENCE ( GPL2_OR_LATER );
12 #include <ipxe/infiniband.h>
13 #include <ipxe/retry.h>
15 struct ib_mad_transaction;
18 /** Infiniband connection operations */
19 struct ib_connection_operations {
20 /** Handle change of connection status
22 * @v ibdev Infiniband device
25 * @v rc Connection status code
26 * @v private_data Private data, if available
27 * @v private_data_len Length of private data
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 );
34 /** An Infiniband connection */
35 struct ib_connection {
36 /** Infiniband device */
37 struct ib_device *ibdev;
39 struct ib_queue_pair *qp;
40 /** Local communication ID */
42 /** Remote communication ID */
44 /** Target service ID */
45 union ib_guid service_id;
46 /** Connection operations */
47 struct ib_connection_operations *op;
49 /** List of connections */
50 struct list_head list;
54 /** Connection request management transaction */
55 struct ib_mad_transaction *madx;
57 /** Length of connection request private data */
58 size_t private_data_len;
59 /** Connection request private data */
60 uint8_t private_data[0];
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 );
72 #endif /* _IPXE_IB_CM_H */