@@ -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