1a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock/* 2ef70044647b260cb6b7863f392384a06670d0b2aSean Hefty * Copyright (c) 2004, 2011 Intel Corporation. All rights reserved. 3a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * Copyright (c) 2004 Topspin Corporation. All rights reserved. 4a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * Copyright (c) 2004 Voltaire Corporation. All rights reserved. 5a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * 6a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * This software is available to you under a choice of one of two 7a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * licenses. You may choose to be licensed under the terms of the GNU 8a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * General Public License (GPL) Version 2, available from the file 9a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * COPYING the madirectory of this source tree, or the 10a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * OpenIB.org BSD license below: 11a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * 12a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * Redistribution and use source and binary forms, with or 13a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * withmodification, are permitted provided that the following 14a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * conditions are met: 15a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * 16a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * - Redistributions of source code must retathe above 17a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * copyright notice, this list of conditions and the following 18a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * disclaimer. 19a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * 20a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * - Redistributions binary form must reproduce the above 21a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * copyright notice, this list of conditions and the following 22a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * disclaimer the documentation and/or other materials 23a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * provided with the distribution. 24a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * 25a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * THE SOFTWARE IS PROVIDED "AS IS", WITHWARRANTY OF ANY KIND, 26a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * NONINFRINGEMENT. NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 29a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER AN 30a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OF OR IN 31a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS THE 32a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * SOFTWARE. 33a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock */ 34a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock#if !defined(CM_MSGS_H) 35a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock#define CM_MSGS_H 36a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 37a4d61e84804f3b14cc35c5e2af768a07c0f64ef6Roland Dreier#include <rdma/ib_mad.h> 385d861be8c87b8a8f8e0f58b3b8864f31da7ee9c3Sean Hefty#include <rdma/ib_cm.h> 39a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 40a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock/* 41a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * Parameters to routines below should be in network-byte order, and values 42a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * are returned in network-byte order. 43a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock */ 44a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 45a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock#define IB_CM_CLASS_VERSION 2 /* IB specification 1.2 */ 46a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 479c3da0991754d480328eeaa2b90cb231a1cea9b6Harvey Harrison#define CM_REQ_ATTR_ID cpu_to_be16(0x0010) 489c3da0991754d480328eeaa2b90cb231a1cea9b6Harvey Harrison#define CM_MRA_ATTR_ID cpu_to_be16(0x0011) 499c3da0991754d480328eeaa2b90cb231a1cea9b6Harvey Harrison#define CM_REJ_ATTR_ID cpu_to_be16(0x0012) 509c3da0991754d480328eeaa2b90cb231a1cea9b6Harvey Harrison#define CM_REP_ATTR_ID cpu_to_be16(0x0013) 519c3da0991754d480328eeaa2b90cb231a1cea9b6Harvey Harrison#define CM_RTU_ATTR_ID cpu_to_be16(0x0014) 529c3da0991754d480328eeaa2b90cb231a1cea9b6Harvey Harrison#define CM_DREQ_ATTR_ID cpu_to_be16(0x0015) 539c3da0991754d480328eeaa2b90cb231a1cea9b6Harvey Harrison#define CM_DREP_ATTR_ID cpu_to_be16(0x0016) 549c3da0991754d480328eeaa2b90cb231a1cea9b6Harvey Harrison#define CM_SIDR_REQ_ATTR_ID cpu_to_be16(0x0017) 559c3da0991754d480328eeaa2b90cb231a1cea9b6Harvey Harrison#define CM_SIDR_REP_ATTR_ID cpu_to_be16(0x0018) 569c3da0991754d480328eeaa2b90cb231a1cea9b6Harvey Harrison#define CM_LAP_ATTR_ID cpu_to_be16(0x0019) 579c3da0991754d480328eeaa2b90cb231a1cea9b6Harvey Harrison#define CM_APR_ATTR_ID cpu_to_be16(0x001A) 58a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 59a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockenum cm_msg_sequence { 60a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock CM_MSG_SEQUENCE_REQ, 61a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock CM_MSG_SEQUENCE_LAP, 62a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock CM_MSG_SEQUENCE_DREQ, 63a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock CM_MSG_SEQUENCE_SIDR 64a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock}; 65a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 66a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstruct cm_req_msg { 67a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock struct ib_mad_hdr hdr; 68a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 6997f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 local_comm_id; 7097f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 rsvd4; 7197f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be64 service_id; 7297f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be64 local_ca_guid; 7397f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 rsvd24; 7497f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 local_qkey; 75a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* local QPN:24, responder resources:8 */ 7697f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 offset32; 77a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* local EECN:24, initiator depth:8 */ 7897f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 offset36; 79a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* 80a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * remote EECN:24, remote CM response timeout:5, 81a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock * transport service type:2, end-to-end flow control:1 82a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock */ 8397f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 offset40; 84a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* starting PSN:24, local CM response timeout:5, retry count:3 */ 8597f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 offset44; 8697f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be16 pkey; 87a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* path MTU:4, RDC exists:1, RNR retry count:3. */ 88a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 offset50; 89d26a360b776d527429cf13300837711b0b2fde20Sean Hefty /* max CM Retries:4, SRQ:1, extended transport type:3 */ 90a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 offset51; 91a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 9297f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be16 primary_local_lid; 9397f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be16 primary_remote_lid; 94a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock union ib_gid primary_local_gid; 95a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock union ib_gid primary_remote_gid; 96a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* flow label:20, rsvd:6, packet rate:6 */ 9797f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 primary_offset88; 98a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 primary_traffic_class; 99a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 primary_hop_limit; 100a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* SL:4, subnet local:1, rsvd:3 */ 101a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 primary_offset94; 102a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* local ACK timeout:5, rsvd:3 */ 103a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 primary_offset95; 104a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 10597f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be16 alt_local_lid; 10697f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be16 alt_remote_lid; 107a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock union ib_gid alt_local_gid; 108a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock union ib_gid alt_remote_gid; 109a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* flow label:20, rsvd:6, packet rate:6 */ 11097f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 alt_offset132; 111a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 alt_traffic_class; 112a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 alt_hop_limit; 113a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* SL:4, subnet local:1, rsvd:3 */ 114a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 alt_offset138; 115a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* local ACK timeout:5, rsvd:3 */ 116a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 alt_offset139; 117a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 118a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 private_data[IB_CM_REQ_PRIVATE_DATA_SIZE]; 119a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 120a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} __attribute__ ((packed)); 121a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 12297f52eb438be7caebe026421545619d8a0c1398aSean Heftystatic inline __be32 cm_req_get_local_qpn(struct cm_req_msg *req_msg) 123a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 124a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return cpu_to_be32(be32_to_cpu(req_msg->offset32) >> 8); 125a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 126a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 12797f52eb438be7caebe026421545619d8a0c1398aSean Heftystatic inline void cm_req_set_local_qpn(struct cm_req_msg *req_msg, __be32 qpn) 128a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 129a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset32 = cpu_to_be32((be32_to_cpu(qpn) << 8) | 130a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(req_msg->offset32) & 131a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 0x000000FF)); 132a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 133a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 134a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_resp_res(struct cm_req_msg *req_msg) 135a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 136a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) be32_to_cpu(req_msg->offset32); 137a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 138a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 139a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_resp_res(struct cm_req_msg *req_msg, u8 resp_res) 140a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 141a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset32 = cpu_to_be32(resp_res | 142a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(req_msg->offset32) & 143a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 0xFFFFFF00)); 144a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 145a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 146a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_init_depth(struct cm_req_msg *req_msg) 147a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 148a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) be32_to_cpu(req_msg->offset36); 149a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 150a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 151a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_init_depth(struct cm_req_msg *req_msg, 152a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 init_depth) 153a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 154a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset36 = cpu_to_be32(init_depth | 155a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(req_msg->offset36) & 156a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 0xFFFFFF00)); 157a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 158a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 159a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_remote_resp_timeout(struct cm_req_msg *req_msg) 160a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 161a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) ((be32_to_cpu(req_msg->offset40) & 0xF8) >> 3); 162a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 163a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 164a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_remote_resp_timeout(struct cm_req_msg *req_msg, 165a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 resp_timeout) 166a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 167a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset40 = cpu_to_be32((resp_timeout << 3) | 168a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(req_msg->offset40) & 169a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 0xFFFFFF07)); 170a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 171a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 172a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline enum ib_qp_type cm_req_get_qp_type(struct cm_req_msg *req_msg) 173a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 174a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 transport_type = (u8) (be32_to_cpu(req_msg->offset40) & 0x06) >> 1; 175a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock switch(transport_type) { 176a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock case 0: return IB_QPT_RC; 177a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock case 1: return IB_QPT_UC; 178d26a360b776d527429cf13300837711b0b2fde20Sean Hefty case 3: 179d26a360b776d527429cf13300837711b0b2fde20Sean Hefty switch (req_msg->offset51 & 0x7) { 180d26a360b776d527429cf13300837711b0b2fde20Sean Hefty case 1: return IB_QPT_XRC_TGT; 181d26a360b776d527429cf13300837711b0b2fde20Sean Hefty default: return 0; 182d26a360b776d527429cf13300837711b0b2fde20Sean Hefty } 183a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock default: return 0; 184a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock } 185a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 186a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 187a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_qp_type(struct cm_req_msg *req_msg, 188a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock enum ib_qp_type qp_type) 189a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 190a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock switch(qp_type) { 191a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock case IB_QPT_UC: 192a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset40 = cpu_to_be32((be32_to_cpu( 193a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset40) & 194a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 0xFFFFFFF9) | 0x2); 1953910f44d79a8a4a26fcfefbf16c5b8e1a7743175Roland Dreier break; 196d26a360b776d527429cf13300837711b0b2fde20Sean Hefty case IB_QPT_XRC_INI: 197d26a360b776d527429cf13300837711b0b2fde20Sean Hefty req_msg->offset40 = cpu_to_be32((be32_to_cpu( 198d26a360b776d527429cf13300837711b0b2fde20Sean Hefty req_msg->offset40) & 199d26a360b776d527429cf13300837711b0b2fde20Sean Hefty 0xFFFFFFF9) | 0x6); 200d26a360b776d527429cf13300837711b0b2fde20Sean Hefty req_msg->offset51 = (req_msg->offset51 & 0xF8) | 1; 201d26a360b776d527429cf13300837711b0b2fde20Sean Hefty break; 202a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock default: 203a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset40 = cpu_to_be32(be32_to_cpu( 204a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset40) & 205a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 0xFFFFFFF9); 206a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock } 207a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 208a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 209a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_flow_ctrl(struct cm_req_msg *req_msg) 210a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 211a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return be32_to_cpu(req_msg->offset40) & 0x1; 212a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 213a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 214a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_flow_ctrl(struct cm_req_msg *req_msg, 215a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 flow_ctrl) 216a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 217a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset40 = cpu_to_be32((flow_ctrl & 0x1) | 218a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(req_msg->offset40) & 219a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 0xFFFFFFFE)); 220a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 221a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 22297f52eb438be7caebe026421545619d8a0c1398aSean Heftystatic inline __be32 cm_req_get_starting_psn(struct cm_req_msg *req_msg) 223a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 224a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return cpu_to_be32(be32_to_cpu(req_msg->offset44) >> 8); 225a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 226a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 227a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_starting_psn(struct cm_req_msg *req_msg, 22897f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 starting_psn) 229a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 230a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset44 = cpu_to_be32((be32_to_cpu(starting_psn) << 8) | 231a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(req_msg->offset44) & 0x000000FF)); 232a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 233a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 234a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_local_resp_timeout(struct cm_req_msg *req_msg) 235a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 236a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) ((be32_to_cpu(req_msg->offset44) & 0xF8) >> 3); 237a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 238a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 239a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_local_resp_timeout(struct cm_req_msg *req_msg, 240a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 resp_timeout) 241a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 242a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset44 = cpu_to_be32((resp_timeout << 3) | 243a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(req_msg->offset44) & 0xFFFFFF07)); 244a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 245a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 246a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_retry_count(struct cm_req_msg *req_msg) 247a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 248a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) (be32_to_cpu(req_msg->offset44) & 0x7); 249a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 250a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 251a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_retry_count(struct cm_req_msg *req_msg, 252a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 retry_count) 253a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 254a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset44 = cpu_to_be32((retry_count & 0x7) | 255a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(req_msg->offset44) & 0xFFFFFFF8)); 256a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 257a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 258a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_path_mtu(struct cm_req_msg *req_msg) 259a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 260a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return req_msg->offset50 >> 4; 261a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 262a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 263a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_path_mtu(struct cm_req_msg *req_msg, u8 path_mtu) 264a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 265a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset50 = (u8) ((req_msg->offset50 & 0xF) | (path_mtu << 4)); 266a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 267a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 268a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_rnr_retry_count(struct cm_req_msg *req_msg) 269a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 270a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return req_msg->offset50 & 0x7; 271a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 272a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 273a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_rnr_retry_count(struct cm_req_msg *req_msg, 274a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 rnr_retry_count) 275a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 276a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset50 = (u8) ((req_msg->offset50 & 0xF8) | 277a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (rnr_retry_count & 0x7)); 278a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 279a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 280a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_max_cm_retries(struct cm_req_msg *req_msg) 281a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 282a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return req_msg->offset51 >> 4; 283a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 284a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 285a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_max_cm_retries(struct cm_req_msg *req_msg, 286a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 retries) 287a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 288a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset51 = (u8) ((req_msg->offset51 & 0xF) | (retries << 4)); 289a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 290a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 291a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_srq(struct cm_req_msg *req_msg) 292a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 293a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (req_msg->offset51 & 0x8) >> 3; 294a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 295a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 296a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_srq(struct cm_req_msg *req_msg, u8 srq) 297a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 298a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->offset51 = (u8) ((req_msg->offset51 & 0xF7) | 299a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock ((srq & 0x1) << 3)); 300a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 301a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 30297f52eb438be7caebe026421545619d8a0c1398aSean Heftystatic inline __be32 cm_req_get_primary_flow_label(struct cm_req_msg *req_msg) 303a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 30497f52eb438be7caebe026421545619d8a0c1398aSean Hefty return cpu_to_be32(be32_to_cpu(req_msg->primary_offset88) >> 12); 305a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 306a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 307a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_primary_flow_label(struct cm_req_msg *req_msg, 30897f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 flow_label) 309a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 310a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->primary_offset88 = cpu_to_be32( 311a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(req_msg->primary_offset88) & 312a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 0x00000FFF) | 313a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(flow_label) << 12)); 314a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 315a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 316a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_primary_packet_rate(struct cm_req_msg *req_msg) 317a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 318a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) (be32_to_cpu(req_msg->primary_offset88) & 0x3F); 319a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 320a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 321a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_primary_packet_rate(struct cm_req_msg *req_msg, 322a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 rate) 323a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 324a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->primary_offset88 = cpu_to_be32( 325a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(req_msg->primary_offset88) & 326a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 0xFFFFFFC0) | (rate & 0x3F)); 327a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 328a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 329a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_primary_sl(struct cm_req_msg *req_msg) 330a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 331a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) (req_msg->primary_offset94 >> 4); 332a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 333a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 334a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_primary_sl(struct cm_req_msg *req_msg, u8 sl) 335a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 336a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->primary_offset94 = (u8) ((req_msg->primary_offset94 & 0x0F) | 337a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (sl << 4)); 338a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 339a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 340a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_primary_subnet_local(struct cm_req_msg *req_msg) 341a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 342a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) ((req_msg->primary_offset94 & 0x08) >> 3); 343a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 344a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 345a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_primary_subnet_local(struct cm_req_msg *req_msg, 346a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 subnet_local) 347a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 348a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->primary_offset94 = (u8) ((req_msg->primary_offset94 & 0xF7) | 349a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock ((subnet_local & 0x1) << 3)); 350a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 351a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 352a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_primary_local_ack_timeout(struct cm_req_msg *req_msg) 353a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 354a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) (req_msg->primary_offset95 >> 3); 355a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 356a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 357a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_primary_local_ack_timeout(struct cm_req_msg *req_msg, 358a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 local_ack_timeout) 359a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 360a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->primary_offset95 = (u8) ((req_msg->primary_offset95 & 0x07) | 361a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (local_ack_timeout << 3)); 362a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 363a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 36497f52eb438be7caebe026421545619d8a0c1398aSean Heftystatic inline __be32 cm_req_get_alt_flow_label(struct cm_req_msg *req_msg) 365a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 36697f52eb438be7caebe026421545619d8a0c1398aSean Hefty return cpu_to_be32(be32_to_cpu(req_msg->alt_offset132) >> 12); 367a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 368a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 369a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_alt_flow_label(struct cm_req_msg *req_msg, 37097f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 flow_label) 371a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 372a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->alt_offset132 = cpu_to_be32( 373a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(req_msg->alt_offset132) & 374a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 0x00000FFF) | 375a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(flow_label) << 12)); 376a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 377a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 378a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_alt_packet_rate(struct cm_req_msg *req_msg) 379a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 380a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) (be32_to_cpu(req_msg->alt_offset132) & 0x3F); 381a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 382a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 383a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_alt_packet_rate(struct cm_req_msg *req_msg, 384a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 rate) 385a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 386a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->alt_offset132 = cpu_to_be32( 387a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(req_msg->alt_offset132) & 388a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 0xFFFFFFC0) | (rate & 0x3F)); 389a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 390a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 391a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_alt_sl(struct cm_req_msg *req_msg) 392a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 393a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) (req_msg->alt_offset138 >> 4); 394a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 395a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 396a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_alt_sl(struct cm_req_msg *req_msg, u8 sl) 397a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 398a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->alt_offset138 = (u8) ((req_msg->alt_offset138 & 0x0F) | 399a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (sl << 4)); 400a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 401a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 402a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_alt_subnet_local(struct cm_req_msg *req_msg) 403a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 404a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) ((req_msg->alt_offset138 & 0x08) >> 3); 405a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 406a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 407a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_alt_subnet_local(struct cm_req_msg *req_msg, 408a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 subnet_local) 409a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 410a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->alt_offset138 = (u8) ((req_msg->alt_offset138 & 0xF7) | 411a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock ((subnet_local & 0x1) << 3)); 412a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 413a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 414a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_req_get_alt_local_ack_timeout(struct cm_req_msg *req_msg) 415a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 416a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) (req_msg->alt_offset139 >> 3); 417a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 418a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 419a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_req_set_alt_local_ack_timeout(struct cm_req_msg *req_msg, 420a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 local_ack_timeout) 421a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 422a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock req_msg->alt_offset139 = (u8) ((req_msg->alt_offset139 & 0x07) | 423a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (local_ack_timeout << 3)); 424a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 425a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 426a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock/* Message REJected or MRAed */ 427a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockenum cm_msg_response { 428a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock CM_MSG_RESPONSE_REQ = 0x0, 429a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock CM_MSG_RESPONSE_REP = 0x1, 430a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock CM_MSG_RESPONSE_OTHER = 0x2 431a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock}; 432a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 433a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock struct cm_mra_msg { 434a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock struct ib_mad_hdr hdr; 435a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 43697f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 local_comm_id; 43797f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 remote_comm_id; 438a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* message MRAed:2, rsvd:6 */ 439a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 offset8; 440a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* service timeout:5, rsvd:3 */ 441a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 offset9; 442a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 443a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 private_data[IB_CM_MRA_PRIVATE_DATA_SIZE]; 444a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 445a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} __attribute__ ((packed)); 446a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 447a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_mra_get_msg_mraed(struct cm_mra_msg *mra_msg) 448a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 449a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) (mra_msg->offset8 >> 6); 450a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 451a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 452a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_mra_set_msg_mraed(struct cm_mra_msg *mra_msg, u8 msg) 453a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 454a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock mra_msg->offset8 = (u8) ((mra_msg->offset8 & 0x3F) | (msg << 6)); 455a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 456a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 457a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_mra_get_service_timeout(struct cm_mra_msg *mra_msg) 458a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 459a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) (mra_msg->offset9 >> 3); 460a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 461a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 462a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_mra_set_service_timeout(struct cm_mra_msg *mra_msg, 463a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 service_timeout) 464a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 465a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock mra_msg->offset9 = (u8) ((mra_msg->offset9 & 0x07) | 466a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (service_timeout << 3)); 467a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 468a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 469a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstruct cm_rej_msg { 470a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock struct ib_mad_hdr hdr; 471a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 47297f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 local_comm_id; 47397f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 remote_comm_id; 474a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* message REJected:2, rsvd:6 */ 475a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 offset8; 476a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* reject info length:7, rsvd:1. */ 477a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 offset9; 47897f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be16 reason; 479a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 ari[IB_CM_REJ_ARI_LENGTH]; 480a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 481a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 private_data[IB_CM_REJ_PRIVATE_DATA_SIZE]; 482a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 483a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} __attribute__ ((packed)); 484a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 485a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_rej_get_msg_rejected(struct cm_rej_msg *rej_msg) 486a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 487a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) (rej_msg->offset8 >> 6); 488a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 489a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 490a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_rej_set_msg_rejected(struct cm_rej_msg *rej_msg, u8 msg) 491a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 492a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock rej_msg->offset8 = (u8) ((rej_msg->offset8 & 0x3F) | (msg << 6)); 493a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 494a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 495a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_rej_get_reject_info_len(struct cm_rej_msg *rej_msg) 496a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 497a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) (rej_msg->offset9 >> 1); 498a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 499a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 500a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_rej_set_reject_info_len(struct cm_rej_msg *rej_msg, 501a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 len) 502a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 503a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock rej_msg->offset9 = (u8) ((rej_msg->offset9 & 0x1) | (len << 1)); 504a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 505a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 506a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstruct cm_rep_msg { 507a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock struct ib_mad_hdr hdr; 508a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 50997f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 local_comm_id; 51097f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 remote_comm_id; 51197f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 local_qkey; 512a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* local QPN:24, rsvd:8 */ 51397f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 offset12; 514a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* local EECN:24, rsvd:8 */ 51597f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 offset16; 516a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* starting PSN:24 rsvd:8 */ 51797f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 offset20; 518a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 resp_resources; 519a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 initiator_depth; 520a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* target ACK delay:5, failover accepted:2, end-to-end flow control:1 */ 521a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 offset26; 522a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* RNR retry count:3, SRQ:1, rsvd:5 */ 523a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 offset27; 52497f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be64 local_ca_guid; 525a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 526a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 private_data[IB_CM_REP_PRIVATE_DATA_SIZE]; 527a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 528a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} __attribute__ ((packed)); 529a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 53097f52eb438be7caebe026421545619d8a0c1398aSean Heftystatic inline __be32 cm_rep_get_local_qpn(struct cm_rep_msg *rep_msg) 531a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 532a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return cpu_to_be32(be32_to_cpu(rep_msg->offset12) >> 8); 533a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 534a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 53597f52eb438be7caebe026421545619d8a0c1398aSean Heftystatic inline void cm_rep_set_local_qpn(struct cm_rep_msg *rep_msg, __be32 qpn) 536a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 537a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock rep_msg->offset12 = cpu_to_be32((be32_to_cpu(qpn) << 8) | 538a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(rep_msg->offset12) & 0x000000FF)); 539a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 540a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 541ef70044647b260cb6b7863f392384a06670d0b2aSean Heftystatic inline __be32 cm_rep_get_local_eecn(struct cm_rep_msg *rep_msg) 542ef70044647b260cb6b7863f392384a06670d0b2aSean Hefty{ 543ef70044647b260cb6b7863f392384a06670d0b2aSean Hefty return cpu_to_be32(be32_to_cpu(rep_msg->offset16) >> 8); 544ef70044647b260cb6b7863f392384a06670d0b2aSean Hefty} 545ef70044647b260cb6b7863f392384a06670d0b2aSean Hefty 546ef70044647b260cb6b7863f392384a06670d0b2aSean Heftystatic inline void cm_rep_set_local_eecn(struct cm_rep_msg *rep_msg, __be32 eecn) 547ef70044647b260cb6b7863f392384a06670d0b2aSean Hefty{ 548ef70044647b260cb6b7863f392384a06670d0b2aSean Hefty rep_msg->offset16 = cpu_to_be32((be32_to_cpu(eecn) << 8) | 549ef70044647b260cb6b7863f392384a06670d0b2aSean Hefty (be32_to_cpu(rep_msg->offset16) & 0x000000FF)); 550ef70044647b260cb6b7863f392384a06670d0b2aSean Hefty} 551ef70044647b260cb6b7863f392384a06670d0b2aSean Hefty 552ef70044647b260cb6b7863f392384a06670d0b2aSean Heftystatic inline __be32 cm_rep_get_qpn(struct cm_rep_msg *rep_msg, enum ib_qp_type qp_type) 553ef70044647b260cb6b7863f392384a06670d0b2aSean Hefty{ 554ef70044647b260cb6b7863f392384a06670d0b2aSean Hefty return (qp_type == IB_QPT_XRC_INI) ? 555ef70044647b260cb6b7863f392384a06670d0b2aSean Hefty cm_rep_get_local_eecn(rep_msg) : cm_rep_get_local_qpn(rep_msg); 556ef70044647b260cb6b7863f392384a06670d0b2aSean Hefty} 557ef70044647b260cb6b7863f392384a06670d0b2aSean Hefty 55897f52eb438be7caebe026421545619d8a0c1398aSean Heftystatic inline __be32 cm_rep_get_starting_psn(struct cm_rep_msg *rep_msg) 559a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 560a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return cpu_to_be32(be32_to_cpu(rep_msg->offset20) >> 8); 561a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 562a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 563a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_rep_set_starting_psn(struct cm_rep_msg *rep_msg, 56497f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 starting_psn) 565a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 566a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock rep_msg->offset20 = cpu_to_be32((be32_to_cpu(starting_psn) << 8) | 567a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(rep_msg->offset20) & 0x000000FF)); 568a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 569a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 570a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_rep_get_target_ack_delay(struct cm_rep_msg *rep_msg) 571a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 572a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) (rep_msg->offset26 >> 3); 573a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 574a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 575a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_rep_set_target_ack_delay(struct cm_rep_msg *rep_msg, 576a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 target_ack_delay) 577a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 578a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock rep_msg->offset26 = (u8) ((rep_msg->offset26 & 0x07) | 579a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (target_ack_delay << 3)); 580a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 581a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 582a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_rep_get_failover(struct cm_rep_msg *rep_msg) 583a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 584a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) ((rep_msg->offset26 & 0x06) >> 1); 585a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 586a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 587a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_rep_set_failover(struct cm_rep_msg *rep_msg, u8 failover) 588a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 589a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock rep_msg->offset26 = (u8) ((rep_msg->offset26 & 0xF9) | 590a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock ((failover & 0x3) << 1)); 591a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 592a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 593a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_rep_get_flow_ctrl(struct cm_rep_msg *rep_msg) 594a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 595a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) (rep_msg->offset26 & 0x01); 596a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 597a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 598a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_rep_set_flow_ctrl(struct cm_rep_msg *rep_msg, 599a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 flow_ctrl) 600a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 601a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock rep_msg->offset26 = (u8) ((rep_msg->offset26 & 0xFE) | 602a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (flow_ctrl & 0x1)); 603a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 604a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 605a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_rep_get_rnr_retry_count(struct cm_rep_msg *rep_msg) 606a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 607a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) (rep_msg->offset27 >> 5); 608a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 609a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 610a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_rep_set_rnr_retry_count(struct cm_rep_msg *rep_msg, 611a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 rnr_retry_count) 612a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 613a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock rep_msg->offset27 = (u8) ((rep_msg->offset27 & 0x1F) | 614a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (rnr_retry_count << 5)); 615a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 616a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 617a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_rep_get_srq(struct cm_rep_msg *rep_msg) 618a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 619a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) ((rep_msg->offset27 >> 4) & 0x1); 620a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 621a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 622a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_rep_set_srq(struct cm_rep_msg *rep_msg, u8 srq) 623a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 624a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock rep_msg->offset27 = (u8) ((rep_msg->offset27 & 0xEF) | 625a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock ((srq & 0x1) << 4)); 626a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 627a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 628a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstruct cm_rtu_msg { 629a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock struct ib_mad_hdr hdr; 630a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 63197f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 local_comm_id; 63297f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 remote_comm_id; 633a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 634a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 private_data[IB_CM_RTU_PRIVATE_DATA_SIZE]; 635a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 636a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} __attribute__ ((packed)); 637a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 638a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstruct cm_dreq_msg { 639a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock struct ib_mad_hdr hdr; 640a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 64197f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 local_comm_id; 64297f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 remote_comm_id; 643a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* remote QPN/EECN:24, rsvd:8 */ 64497f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 offset8; 645a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 646a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 private_data[IB_CM_DREQ_PRIVATE_DATA_SIZE]; 647a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 648a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} __attribute__ ((packed)); 649a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 65097f52eb438be7caebe026421545619d8a0c1398aSean Heftystatic inline __be32 cm_dreq_get_remote_qpn(struct cm_dreq_msg *dreq_msg) 651a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 652a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return cpu_to_be32(be32_to_cpu(dreq_msg->offset8) >> 8); 653a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 654a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 65597f52eb438be7caebe026421545619d8a0c1398aSean Heftystatic inline void cm_dreq_set_remote_qpn(struct cm_dreq_msg *dreq_msg, __be32 qpn) 656a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 657a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock dreq_msg->offset8 = cpu_to_be32((be32_to_cpu(qpn) << 8) | 658a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(dreq_msg->offset8) & 0x000000FF)); 659a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 660a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 661a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstruct cm_drep_msg { 662a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock struct ib_mad_hdr hdr; 663a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 66497f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 local_comm_id; 66597f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 remote_comm_id; 666a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 667a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 private_data[IB_CM_DREP_PRIVATE_DATA_SIZE]; 668a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 669a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} __attribute__ ((packed)); 670a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 671a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstruct cm_lap_msg { 672a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock struct ib_mad_hdr hdr; 673a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 67497f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 local_comm_id; 67597f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 remote_comm_id; 676a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 67797f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 rsvd8; 678a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* remote QPN/EECN:24, remote CM response timeout:5, rsvd:3 */ 67997f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 offset12; 68097f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 rsvd16; 681a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 68297f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be16 alt_local_lid; 68397f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be16 alt_remote_lid; 684a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock union ib_gid alt_local_gid; 685a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock union ib_gid alt_remote_gid; 686a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* flow label:20, rsvd:4, traffic class:8 */ 68797f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 offset56; 688a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 alt_hop_limit; 689a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* rsvd:2, packet rate:6 */ 69097f52eb438be7caebe026421545619d8a0c1398aSean Hefty u8 offset61; 691a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* SL:4, subnet local:1, rsvd:3 */ 69297f52eb438be7caebe026421545619d8a0c1398aSean Hefty u8 offset62; 693a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* local ACK timeout:5, rsvd:3 */ 69497f52eb438be7caebe026421545619d8a0c1398aSean Hefty u8 offset63; 695a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 696a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 private_data[IB_CM_LAP_PRIVATE_DATA_SIZE]; 697a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} __attribute__ ((packed)); 698a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 69997f52eb438be7caebe026421545619d8a0c1398aSean Heftystatic inline __be32 cm_lap_get_remote_qpn(struct cm_lap_msg *lap_msg) 700a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 701a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return cpu_to_be32(be32_to_cpu(lap_msg->offset12) >> 8); 702a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 703a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 70497f52eb438be7caebe026421545619d8a0c1398aSean Heftystatic inline void cm_lap_set_remote_qpn(struct cm_lap_msg *lap_msg, __be32 qpn) 705a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 706a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock lap_msg->offset12 = cpu_to_be32((be32_to_cpu(qpn) << 8) | 707a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(lap_msg->offset12) & 708a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 0x000000FF)); 709a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 710a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 711a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_lap_get_remote_resp_timeout(struct cm_lap_msg *lap_msg) 712a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 713a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) ((be32_to_cpu(lap_msg->offset12) & 0xF8) >> 3); 714a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 715a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 716a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_lap_set_remote_resp_timeout(struct cm_lap_msg *lap_msg, 717a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 resp_timeout) 718a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 719a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock lap_msg->offset12 = cpu_to_be32((resp_timeout << 3) | 720a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(lap_msg->offset12) & 721a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 0xFFFFFF07)); 722a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 723a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 72497f52eb438be7caebe026421545619d8a0c1398aSean Heftystatic inline __be32 cm_lap_get_flow_label(struct cm_lap_msg *lap_msg) 725a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 72697f52eb438be7caebe026421545619d8a0c1398aSean Hefty return cpu_to_be32(be32_to_cpu(lap_msg->offset56) >> 12); 727a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 728a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 729a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_lap_set_flow_label(struct cm_lap_msg *lap_msg, 73097f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 flow_label) 731a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 73297f52eb438be7caebe026421545619d8a0c1398aSean Hefty lap_msg->offset56 = cpu_to_be32( 73397f52eb438be7caebe026421545619d8a0c1398aSean Hefty (be32_to_cpu(lap_msg->offset56) & 0x00000FFF) | 73497f52eb438be7caebe026421545619d8a0c1398aSean Hefty (be32_to_cpu(flow_label) << 12)); 735a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 736a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 737a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_lap_get_traffic_class(struct cm_lap_msg *lap_msg) 738a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 739a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (u8) be32_to_cpu(lap_msg->offset56); 740a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 741a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 742a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_lap_set_traffic_class(struct cm_lap_msg *lap_msg, 743a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 traffic_class) 744a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 745a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock lap_msg->offset56 = cpu_to_be32(traffic_class | 746a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(lap_msg->offset56) & 747a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 0xFFFFFF00)); 748a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 749a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 750a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_lap_get_packet_rate(struct cm_lap_msg *lap_msg) 751a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 752a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return lap_msg->offset61 & 0x3F; 753a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 754a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 755a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_lap_set_packet_rate(struct cm_lap_msg *lap_msg, 756a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 packet_rate) 757a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 758a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock lap_msg->offset61 = (packet_rate & 0x3F) | (lap_msg->offset61 & 0xC0); 759a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 760a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 761a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_lap_get_sl(struct cm_lap_msg *lap_msg) 762a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 763a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return lap_msg->offset62 >> 4; 764a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 765a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 766a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_lap_set_sl(struct cm_lap_msg *lap_msg, u8 sl) 767a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 768a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock lap_msg->offset62 = (sl << 4) | (lap_msg->offset62 & 0x0F); 769a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 770a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 771a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_lap_get_subnet_local(struct cm_lap_msg *lap_msg) 772a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 773a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return (lap_msg->offset62 >> 3) & 0x1; 774a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 775a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 776a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_lap_set_subnet_local(struct cm_lap_msg *lap_msg, 777a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 subnet_local) 778a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 779a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock lap_msg->offset62 = ((subnet_local & 0x1) << 3) | 780a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (lap_msg->offset61 & 0xF7); 781a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 782a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline u8 cm_lap_get_local_ack_timeout(struct cm_lap_msg *lap_msg) 783a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 784a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return lap_msg->offset63 >> 3; 785a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 786a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 787a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_lap_set_local_ack_timeout(struct cm_lap_msg *lap_msg, 788a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 local_ack_timeout) 789a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 790a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock lap_msg->offset63 = (local_ack_timeout << 3) | 791a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (lap_msg->offset63 & 0x07); 792a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 793a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 794a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstruct cm_apr_msg { 795a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock struct ib_mad_hdr hdr; 796a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 79797f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 local_comm_id; 79897f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 remote_comm_id; 799a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 800a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 info_length; 801a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 ap_status; 8026f233d300d301b08b4627fbcf29dfc4eda16e4d8Eli Cohen __be16 rsvd; 803a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 info[IB_CM_APR_INFO_LENGTH]; 804a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 805a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 private_data[IB_CM_APR_PRIVATE_DATA_SIZE]; 806a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} __attribute__ ((packed)); 807a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 808a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstruct cm_sidr_req_msg { 809a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock struct ib_mad_hdr hdr; 810a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 81197f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 request_id; 81297f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be16 pkey; 81397f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be16 rsvd; 81497f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be64 service_id; 815a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 816a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 private_data[IB_CM_SIDR_REQ_PRIVATE_DATA_SIZE]; 817a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} __attribute__ ((packed)); 818a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 819a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstruct cm_sidr_rep_msg { 820a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock struct ib_mad_hdr hdr; 821a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 82297f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 request_id; 823a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 status; 824a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 info_length; 82597f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be16 rsvd; 826a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock /* QPN:24, rsvd:8 */ 82797f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 offset8; 82897f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be64 service_id; 82997f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 qkey; 830a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 info[IB_CM_SIDR_REP_INFO_LENGTH]; 831a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 832a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock u8 private_data[IB_CM_SIDR_REP_PRIVATE_DATA_SIZE]; 833a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} __attribute__ ((packed)); 834a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 83597f52eb438be7caebe026421545619d8a0c1398aSean Heftystatic inline __be32 cm_sidr_rep_get_qpn(struct cm_sidr_rep_msg *sidr_rep_msg) 836a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 837a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock return cpu_to_be32(be32_to_cpu(sidr_rep_msg->offset8) >> 8); 838a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 839a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 840a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstockstatic inline void cm_sidr_rep_set_qpn(struct cm_sidr_rep_msg *sidr_rep_msg, 84197f52eb438be7caebe026421545619d8a0c1398aSean Hefty __be32 qpn) 842a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock{ 843a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock sidr_rep_msg->offset8 = cpu_to_be32((be32_to_cpu(qpn) << 8) | 844a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock (be32_to_cpu(sidr_rep_msg->offset8) & 845a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 0x000000FF)); 846a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock} 847a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock 848a977049dacdef6a9e69fb4872b42a68e93a69956Hal Rosenstock#endif /* CM_MSGS_H */ 849