1 /* 2 * Copyright (c) 2005 Intel Corporation. All rights reserved. 3 * 4 * This software is available to you under a choice of one of two 5 * licenses. You may choose to be licensed under the terms of the GNU 6 * General Public License (GPL) Version 2, available from the file 7 * COPYING in the main directory of this source tree, or the 8 * OpenIB.org BSD license below: 9 * 10 * Redistribution and use in source and binary forms, with or 11 * without modification, are permitted provided that the following 12 * conditions are met: 13 * 14 * - Redistributions of source code must retain the above 15 * copyright notice, this list of conditions and the following 16 * disclaimer. 17 * 18 * - Redistributions in binary form must reproduce the above 19 * copyright notice, this list of conditions and the following 20 * disclaimer in the documentation and/or other materials 21 * provided with the distribution. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30 * SOFTWARE. 31 */ 32 33 #include <config.h> 34 35 #include <string.h> 36 37 #include <infiniband/marshall.h> 38 39 void ibv_copy_ah_attr_from_kern(struct ibv_ah_attr *dst, 40 struct ibv_kern_ah_attr *src) 41 { 42 memcpy(dst->grh.dgid.raw, src->grh.dgid, sizeof dst->grh.dgid); 43 dst->grh.flow_label = src->grh.flow_label; 44 dst->grh.sgid_index = src->grh.sgid_index; 45 dst->grh.hop_limit = src->grh.hop_limit; 46 dst->grh.traffic_class = src->grh.traffic_class; 47 48 dst->dlid = src->dlid; 49 dst->sl = src->sl; 50 dst->src_path_bits = src->src_path_bits; 51 dst->static_rate = src->static_rate; 52 dst->is_global = src->is_global; 53 dst->port_num = src->port_num; 54 } 55 56 void ibv_copy_qp_attr_from_kern(struct ibv_qp_attr *dst, 57 struct ibv_kern_qp_attr *src) 58 { 59 dst->cur_qp_state = src->cur_qp_state; 60 dst->path_mtu = src->path_mtu; 61 dst->path_mig_state = src->path_mig_state; 62 dst->qkey = src->qkey; 63 dst->rq_psn = src->rq_psn; 64 dst->sq_psn = src->sq_psn; 65 dst->dest_qp_num = src->dest_qp_num; 66 dst->qp_access_flags = src->qp_access_flags; 67 68 dst->cap.max_send_wr = src->max_send_wr; 69 dst->cap.max_recv_wr = src->max_recv_wr; 70 dst->cap.max_send_sge = src->max_send_sge; 71 dst->cap.max_recv_sge = src->max_recv_sge; 72 dst->cap.max_inline_data = src->max_inline_data; 73 74 ibv_copy_ah_attr_from_kern(&dst->ah_attr, &src->ah_attr); 75 ibv_copy_ah_attr_from_kern(&dst->alt_ah_attr, &src->alt_ah_attr); 76 77 dst->pkey_index = src->pkey_index; 78 dst->alt_pkey_index = src->alt_pkey_index; 79 dst->en_sqd_async_notify = src->en_sqd_async_notify; 80 dst->sq_draining = src->sq_draining; 81 dst->max_rd_atomic = src->max_rd_atomic; 82 dst->max_dest_rd_atomic = src->max_dest_rd_atomic; 83 dst->min_rnr_timer = src->min_rnr_timer; 84 dst->port_num = src->port_num; 85 dst->timeout = src->timeout; 86 dst->retry_cnt = src->retry_cnt; 87 dst->rnr_retry = src->rnr_retry; 88 dst->alt_port_num = src->alt_port_num; 89 dst->alt_timeout = src->alt_timeout; 90 } 91 92 void ibv_copy_path_rec_from_kern(struct ibv_sa_path_rec *dst, 93 struct ib_user_path_rec *src) 94 { 95 memcpy(dst->dgid.raw, src->dgid, sizeof dst->dgid); 96 memcpy(dst->sgid.raw, src->sgid, sizeof dst->sgid); 97 98 dst->dlid = src->dlid; 99 dst->slid = src->slid; 100 dst->raw_traffic = src->raw_traffic; 101 dst->flow_label = src->flow_label; 102 dst->hop_limit = src->hop_limit; 103 dst->traffic_class = src->traffic_class; 104 dst->reversible = src->reversible; 105 dst->numb_path = src->numb_path; 106 dst->pkey = src->pkey; 107 dst->sl = src->sl; 108 dst->mtu_selector = src->mtu_selector; 109 dst->mtu = src->mtu; 110 dst->rate_selector = src->rate_selector; 111 dst->rate = src->rate; 112 dst->packet_life_time = src->packet_life_time; 113 dst->preference = src->preference; 114 dst->packet_life_time_selector = src->packet_life_time_selector; 115 } 116 117 void ibv_copy_path_rec_to_kern(struct ib_user_path_rec *dst, 118 struct ibv_sa_path_rec *src) 119 { 120 memcpy(dst->dgid, src->dgid.raw, sizeof src->dgid); 121 memcpy(dst->sgid, src->sgid.raw, sizeof src->sgid); 122 123 dst->dlid = src->dlid; 124 dst->slid = src->slid; 125 dst->raw_traffic = src->raw_traffic; 126 dst->flow_label = src->flow_label; 127 dst->hop_limit = src->hop_limit; 128 dst->traffic_class = src->traffic_class; 129 dst->reversible = src->reversible; 130 dst->numb_path = src->numb_path; 131 dst->pkey = src->pkey; 132 dst->sl = src->sl; 133 dst->mtu_selector = src->mtu_selector; 134 dst->mtu = src->mtu; 135 dst->rate_selector = src->rate_selector; 136 dst->rate = src->rate; 137 dst->packet_life_time = src->packet_life_time; 138 dst->preference = src->preference; 139 dst->packet_life_time_selector = src->packet_life_time_selector; 140 } 141