2 * Copyright (c) 2005 Intel Corporation. All rights reserved.
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:
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
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.
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
33 #include <linux/export.h>
34 #include <rdma/ib_marshall.h>
36 void ib_copy_ah_attr_to_user(struct ib_uverbs_ah_attr
*dst
,
37 struct ib_ah_attr
*src
)
39 memcpy(dst
->grh
.dgid
, src
->grh
.dgid
.raw
, sizeof src
->grh
.dgid
);
40 dst
->grh
.flow_label
= src
->grh
.flow_label
;
41 dst
->grh
.sgid_index
= src
->grh
.sgid_index
;
42 dst
->grh
.hop_limit
= src
->grh
.hop_limit
;
43 dst
->grh
.traffic_class
= src
->grh
.traffic_class
;
44 memset(&dst
->grh
.reserved
, 0, sizeof(dst
->grh
.reserved
));
45 dst
->dlid
= src
->dlid
;
47 dst
->src_path_bits
= src
->src_path_bits
;
48 dst
->static_rate
= src
->static_rate
;
49 dst
->is_global
= src
->ah_flags
& IB_AH_GRH
? 1 : 0;
50 dst
->port_num
= src
->port_num
;
53 EXPORT_SYMBOL(ib_copy_ah_attr_to_user
);
55 void ib_copy_qp_attr_to_user(struct ib_uverbs_qp_attr
*dst
,
56 struct ib_qp_attr
*src
)
58 dst
->qp_state
= src
->qp_state
;
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
;
68 dst
->max_send_wr
= src
->cap
.max_send_wr
;
69 dst
->max_recv_wr
= src
->cap
.max_recv_wr
;
70 dst
->max_send_sge
= src
->cap
.max_send_sge
;
71 dst
->max_recv_sge
= src
->cap
.max_recv_sge
;
72 dst
->max_inline_data
= src
->cap
.max_inline_data
;
74 ib_copy_ah_attr_to_user(&dst
->ah_attr
, &src
->ah_attr
);
75 ib_copy_ah_attr_to_user(&dst
->alt_ah_attr
, &src
->alt_ah_attr
);
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 memset(dst
->reserved
, 0, sizeof(dst
->reserved
));
92 EXPORT_SYMBOL(ib_copy_qp_attr_to_user
);
94 void ib_copy_path_rec_to_user(struct ib_user_path_rec
*dst
,
95 struct ib_sa_path_rec
*src
)
97 memcpy(dst
->dgid
, src
->dgid
.raw
, sizeof src
->dgid
);
98 memcpy(dst
->sgid
, src
->sgid
.raw
, sizeof src
->sgid
);
100 dst
->dlid
= src
->dlid
;
101 dst
->slid
= src
->slid
;
102 dst
->raw_traffic
= src
->raw_traffic
;
103 dst
->flow_label
= src
->flow_label
;
104 dst
->hop_limit
= src
->hop_limit
;
105 dst
->traffic_class
= src
->traffic_class
;
106 dst
->reversible
= src
->reversible
;
107 dst
->numb_path
= src
->numb_path
;
108 dst
->pkey
= src
->pkey
;
110 dst
->mtu_selector
= src
->mtu_selector
;
112 dst
->rate_selector
= src
->rate_selector
;
113 dst
->rate
= src
->rate
;
114 dst
->packet_life_time
= src
->packet_life_time
;
115 dst
->preference
= src
->preference
;
116 dst
->packet_life_time_selector
= src
->packet_life_time_selector
;
118 EXPORT_SYMBOL(ib_copy_path_rec_to_user
);
120 void ib_copy_path_rec_from_user(struct ib_sa_path_rec
*dst
,
121 struct ib_user_path_rec
*src
)
123 memcpy(dst
->dgid
.raw
, src
->dgid
, sizeof dst
->dgid
);
124 memcpy(dst
->sgid
.raw
, src
->sgid
, sizeof dst
->sgid
);
126 dst
->dlid
= src
->dlid
;
127 dst
->slid
= src
->slid
;
128 dst
->raw_traffic
= src
->raw_traffic
;
129 dst
->flow_label
= src
->flow_label
;
130 dst
->hop_limit
= src
->hop_limit
;
131 dst
->traffic_class
= src
->traffic_class
;
132 dst
->reversible
= src
->reversible
;
133 dst
->numb_path
= src
->numb_path
;
134 dst
->pkey
= src
->pkey
;
136 dst
->mtu_selector
= src
->mtu_selector
;
138 dst
->rate_selector
= src
->rate_selector
;
139 dst
->rate
= src
->rate
;
140 dst
->packet_life_time
= src
->packet_life_time
;
141 dst
->preference
= src
->preference
;
142 dst
->packet_life_time_selector
= src
->packet_life_time_selector
;
144 memset(dst
->smac
, 0, sizeof(dst
->smac
));
145 memset(dst
->dmac
, 0, sizeof(dst
->dmac
));
146 dst
->vlan_id
= 0xffff;
148 EXPORT_SYMBOL(ib_copy_path_rec_from_user
);