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