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: Leon Romanovsky <leonro@mellanox.com>
Reviewed-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
Jason Gunthorpe 2020-01-16 13:00:31 -04:00
parent 4bbd4923d1
commit 792a7c1f2e

View File

@ -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);
}
}