@@ -78,8 +78,92 @@ static int _zxdh_query_qpc(struct ibv_qp *qp, struct zxdh_rdma_qpc *qpc)
78
78
return 0 ;
79
79
}
80
80
81
+ static void copy_modify_qpc_fields (struct zxdh_modify_qpc_req * req_cmd ,
82
+ uint64_t attr_mask ,
83
+ struct zxdh_rdma_qpc * qpc )
84
+ {
85
+ if (attr_mask & ZXDH_TX_READ_RETRY_FLAG_SET ) {
86
+ req_cmd -> retry_flag = qpc -> retry_flag ;
87
+ req_cmd -> rnr_retry_flag = qpc -> rnr_retry_flag ;
88
+ req_cmd -> read_retry_flag = qpc -> read_retry_flag ;
89
+ req_cmd -> cur_retry_count = qpc -> cur_retry_count ;
90
+ }
91
+ if (attr_mask & ZXDH_RETRY_CQE_SQ_OPCODE )
92
+ req_cmd -> retry_cqe_sq_opcode = qpc -> retry_cqe_sq_opcode ;
93
+
94
+ if (attr_mask & ZXDH_ERR_FLAG_SET ) {
95
+ req_cmd -> err_flag = qpc -> err_flag ;
96
+ req_cmd -> ack_err_flag = qpc -> ack_err_flag ;
97
+ }
98
+ if (attr_mask & ZXDH_PACKAGE_ERR_FLAG )
99
+ req_cmd -> package_err_flag = qpc -> package_err_flag ;
100
+ }
101
+
102
+ static int _zxdh_reset_qp (struct ibv_qp * qp , uint64_t opcode )
103
+ {
104
+ DECLARE_COMMAND_BUFFER (cmd , ZXDH_IB_OBJECT_QP_OBJ ,
105
+ ZXDH_IB_METHOD_QP_RESET_QP , 2 );
106
+ fill_attr_in_obj (cmd , ZXDH_IB_ATTR_QP_RESET_QP_HANDLE , qp -> handle );
107
+ fill_attr_in_uint64 (cmd , ZXDH_IB_ATTR_QP_RESET_OP_CODE , opcode );
108
+ return execute_ioctl (qp -> context , cmd );
109
+ }
110
+
111
+ static int _zxdh_modify_qpc (struct ibv_qp * qp , struct zxdh_rdma_qpc * qpc ,
112
+ uint64_t qpc_mask )
113
+ {
114
+ DECLARE_COMMAND_BUFFER (cmd , ZXDH_IB_OBJECT_QP_OBJ ,
115
+ ZXDH_IB_METHOD_QP_MODIFY_QPC , 3 );
116
+ struct zxdh_modify_qpc_req req = { 0 };
117
+
118
+ copy_modify_qpc_fields (& req , qpc_mask , qpc );
119
+ fill_attr_in_obj (cmd , ZXDH_IB_ATTR_QP_QUERY_HANDLE , qp -> handle );
120
+ fill_attr_in_uint64 (cmd , ZXDH_IB_ATTR_QP_MODIFY_QPC_MASK , qpc_mask );
121
+ fill_attr_in_ptr (cmd , ZXDH_IB_ATTR_QP_MODIFY_QPC_REQ , & req );
122
+ return execute_ioctl (qp -> context , cmd );
123
+ }
124
+
125
+ static int _zxdh_modify_qp_udp_sport (struct ibv_context * ibctx ,
126
+ uint16_t udp_sport , uint32_t qpn )
127
+ {
128
+ if (udp_sport <= MIN_UDP_SPORT || qpn <= MIN_QP_QPN )
129
+ return - EINVAL ;
130
+
131
+ DECLARE_COMMAND_BUFFER (cmd , ZXDH_IB_OBJECT_QP_OBJ ,
132
+ ZXDH_IB_METHOD_QP_MODIFY_UDP_SPORT , 2 );
133
+ fill_attr_in (cmd , ZXDH_IB_ATTR_QP_UDP_PORT , & udp_sport ,
134
+ sizeof (udp_sport ));
135
+ fill_attr_in_uint32 (cmd , ZXDH_IB_ATTR_QP_QPN , qpn );
136
+ return execute_ioctl (ibctx , cmd );
137
+ }
138
+
139
+ static int _zxdh_get_log_trace_switch (struct ibv_context * ibctx ,
140
+ uint8_t * switch_status )
141
+ {
142
+ DECLARE_COMMAND_BUFFER (cmd , ZXDH_IB_OBJECT_DEV ,
143
+ ZXDH_IB_METHOD_DEV_GET_LOG_TRACE , 1 );
144
+
145
+ fill_attr_out_ptr (cmd , ZXDH_IB_ATTR_DEV_GET_LOG_TARCE_SWITCH ,
146
+ switch_status );
147
+ return execute_ioctl (ibctx , cmd );
148
+ }
149
+
150
+ static int _zxdh_set_log_trace_switch (struct ibv_context * ibctx ,
151
+ uint8_t switch_status )
152
+ {
153
+ DECLARE_COMMAND_BUFFER (cmd , ZXDH_IB_OBJECT_DEV ,
154
+ ZXDH_IB_METHOD_DEV_SET_LOG_TRACE , 1 );
155
+ fill_attr_in (cmd , ZXDH_IB_ATTR_DEV_SET_LOG_TARCE_SWITCH , & switch_status ,
156
+ sizeof (switch_status ));
157
+ return execute_ioctl (ibctx , cmd );
158
+ }
159
+
81
160
static struct zxdh_uvcontext_ops zxdh_ctx_ops = {
161
+ .modify_qp_udp_sport = _zxdh_modify_qp_udp_sport ,
162
+ .get_log_trace_switch = _zxdh_get_log_trace_switch ,
163
+ .set_log_trace_switch = _zxdh_set_log_trace_switch ,
82
164
.query_qpc = _zxdh_query_qpc ,
165
+ .modify_qpc = _zxdh_modify_qpc ,
166
+ .reset_qp = _zxdh_reset_qp ,
83
167
};
84
168
85
169
static inline struct zxdh_uvcontext * to_zxdhtx (struct ibv_context * ibctx )
0 commit comments