Commit 792a7c1f authored by Jason Gunthorpe's avatar Jason Gunthorpe
Browse files

RDMA/cm: Add accessors for CM_REQ transport_type

Access the two fields through wrappers, like all other fields, to make it
clearer what is happening.

Link: https://lore.kernel.org/r/20200116170037.30109-2-jgg@ziepe.ca


Tested-by: default avatarLeon Romanovsky <leonro@mellanox.com>
Reviewed-by: default avatarLeon Romanovsky <leonro@mellanox.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 4bbd4923
Loading
Loading
Loading
Loading
+29 −12
Original line number Diff line number Diff line
@@ -124,14 +124,37 @@ static inline void cm_req_set_remote_resp_timeout(struct cm_req_msg *req_msg,
					  0xFFFFFF07));
}

static inline u8 cm_req_get_transport_type(struct cm_req_msg *req_msg)
{
	return (u8) ((be32_to_cpu(req_msg->offset40) & 0x06) >> 1);
}

static inline void cm_req_set_transport_type(struct cm_req_msg *req_msg, u8 val)
{
	req_msg->offset40 =
		cpu_to_be32((be32_to_cpu(req_msg->offset40) & 0xFFFFFFF9) |
		(val << 1));
}

static inline u8 cm_req_get_transport_type_ex(struct cm_req_msg *req_msg)
{
	return req_msg->offset51 & 0x7;
}

static inline void cm_req_set_transport_type_ex(struct cm_req_msg *req_msg,
						u8 val)
{
	req_msg->offset51 = (req_msg->offset51 & 0xF8) | val;
}

static inline enum ib_qp_type cm_req_get_qp_type(struct cm_req_msg *req_msg)
{
	u8 transport_type = (u8) (be32_to_cpu(req_msg->offset40) & 0x06) >> 1;
	u8 transport_type = cm_req_get_transport_type(req_msg);
	switch(transport_type) {
	case 0: return IB_QPT_RC;
	case 1: return IB_QPT_UC;
	case 3:
		switch (req_msg->offset51 & 0x7) {
		switch (cm_req_get_transport_type_ex(req_msg)) {
		case 1: return IB_QPT_XRC_TGT;
		default: return 0;
		}
@@ -144,20 +167,14 @@ static inline void cm_req_set_qp_type(struct cm_req_msg *req_msg,
{
	switch(qp_type) {
	case IB_QPT_UC:
		req_msg->offset40 = cpu_to_be32((be32_to_cpu(
						  req_msg->offset40) &
						   0xFFFFFFF9) | 0x2);
		cm_req_set_transport_type(req_msg, 1);
		break;
	case IB_QPT_XRC_INI:
		req_msg->offset40 = cpu_to_be32((be32_to_cpu(
						 req_msg->offset40) &
						   0xFFFFFFF9) | 0x6);
		req_msg->offset51 = (req_msg->offset51 & 0xF8) | 1;
		cm_req_set_transport_type(req_msg, 3);
		cm_req_set_transport_type_ex(req_msg, 1);
		break;
	default:
		req_msg->offset40 = cpu_to_be32(be32_to_cpu(
						 req_msg->offset40) &
						  0xFFFFFFF9);
		cm_req_set_transport_type(req_msg, 0);
	}
}