1 /*
2 * Copyright (c) 2016-2018 Intel Corporation, Inc. 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 * 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 #ifndef FI_DIRECT_ATOMIC_H
34 #define FI_DIRECT_ATOMIC_H
35
36 #define FABRIC_DIRECT_ATOMIC
37
38 ssize_t psmx2_atomic_write(
39 struct fid_ep *ep,
40 const void *buf, size_t count, void *desc,
41 fi_addr_t dest_addr,
42 uint64_t addr, uint64_t key,
43 enum fi_datatype datatype, enum fi_op op, void *context);
44
45 ssize_t psmx2_atomic_writev(
46 struct fid_ep *ep,
47 const struct fi_ioc *iov, void **desc, size_t count,
48 fi_addr_t dest_addr,
49 uint64_t addr, uint64_t key,
50 enum fi_datatype datatype, enum fi_op op, void *context);
51
52 ssize_t psmx2_atomic_writemsg(
53 struct fid_ep *ep,
54 const struct fi_msg_atomic *msg, uint64_t flags);
55
56 ssize_t psmx2_atomic_inject(
57 struct fid_ep *ep, const void *buf, size_t count,
58 fi_addr_t dest_addr, uint64_t addr, uint64_t key,
59 enum fi_datatype datatype, enum fi_op op);
60
61 ssize_t psmx2_atomic_readwrite(
62 struct fid_ep *ep,
63 const void *buf, size_t count, void *desc,
64 void *result, void *result_desc,
65 fi_addr_t dest_addr,
66 uint64_t addr, uint64_t key,
67 enum fi_datatype datatype, enum fi_op op, void *context);
68
69 ssize_t psmx2_atomic_readwritev(
70 struct fid_ep *ep,
71 const struct fi_ioc *iov, void **desc, size_t count,
72 struct fi_ioc *resultv, void **result_desc, size_t result_count,
73 fi_addr_t dest_addr,
74 uint64_t addr, uint64_t key,
75 enum fi_datatype datatype, enum fi_op op, void *context);
76
77 ssize_t psmx2_atomic_readwritemsg(
78 struct fid_ep *ep,
79 const struct fi_msg_atomic *msg,
80 struct fi_ioc *resultv, void **result_desc, size_t result_count,
81 uint64_t flags);
82
83 ssize_t psmx2_atomic_comparewrite(
84 struct fid_ep *ep,
85 const void *buf, size_t count, void *desc,
86 const void *compare, void *compare_desc,
87 void *result, void *result_desc,
88 fi_addr_t dest_addr,
89 uint64_t addr, uint64_t key,
90 enum fi_datatype datatype, enum fi_op op, void *context);
91
92 ssize_t psmx2_atomic_compareweitev(
93 struct fid_ep *ep,
94 const struct fi_ioc *iov, void **desc, size_t count,
95 const struct fi_ioc *comparev, void **compare_desc, size_t compare_count,
96 struct fi_ioc *resultv, void **result_desc, size_t result_count,
97 fi_addr_t dest_addr,
98 uint64_t addr, uint64_t key,
99 enum fi_datatype datatype, enum fi_op op, void *context);
100
101 ssize_t psmx2_atomic_comparewritemsg(
102 struct fid_ep *ep,
103 const struct fi_msg_atomic *msg,
104 const struct fi_ioc *comparev, void **compare_desc, size_t compare_count,
105 struct fi_ioc *resultv, void **result_desc, size_t result_count,
106 uint64_t flags);
107
108 int psmx2_atomic_writevalid(
109 struct fid_ep *ep,
110 enum fi_datatype datatype, enum fi_op op, size_t *count);
111
112 int psmx2_atomic_readwritevalid(
113 struct fid_ep *ep,
114 enum fi_datatype datatype, enum fi_op op, size_t *count);
115
116 int psmx2_atomic_comparewritevalid(
117 struct fid_ep *ep,
118 enum fi_datatype datatype, enum fi_op op, size_t *count);
119
120 int psmx2_query_atomic(
121 struct fid_domain *domain,
122 enum fi_datatype datatype, enum fi_op op,
123 struct fi_atomic_attr *attr, uint64_t flags);
124
125
126 static inline ssize_t
fi_atomic(struct fid_ep * ep,const void * buf,size_t count,void * desc,fi_addr_t dest_addr,uint64_t addr,uint64_t key,enum fi_datatype datatype,enum fi_op op,void * context)127 fi_atomic(struct fid_ep *ep,
128 const void *buf, size_t count, void *desc,
129 fi_addr_t dest_addr,
130 uint64_t addr, uint64_t key,
131 enum fi_datatype datatype, enum fi_op op, void *context)
132 {
133 return psmx2_atomic_write(ep, buf, count, desc, dest_addr, addr, key,
134 datatype, op, context);
135 }
136
137 static inline ssize_t
fi_atomicv(struct fid_ep * ep,const struct fi_ioc * iov,void ** desc,size_t count,fi_addr_t dest_addr,uint64_t addr,uint64_t key,enum fi_datatype datatype,enum fi_op op,void * context)138 fi_atomicv(struct fid_ep *ep,
139 const struct fi_ioc *iov, void **desc, size_t count,
140 fi_addr_t dest_addr,
141 uint64_t addr, uint64_t key,
142 enum fi_datatype datatype, enum fi_op op, void *context)
143 {
144 return psmx2_atomic_writev(ep, iov, desc, count, dest_addr, addr, key,
145 datatype, op, context);
146 }
147
148 static inline ssize_t
fi_atomicmsg(struct fid_ep * ep,const struct fi_msg_atomic * msg,uint64_t flags)149 fi_atomicmsg(struct fid_ep *ep,
150 const struct fi_msg_atomic *msg, uint64_t flags)
151 {
152 return psmx2_atomic_writemsg(ep, msg, flags);
153 }
154
155 static inline ssize_t
fi_inject_atomic(struct fid_ep * ep,const void * buf,size_t count,fi_addr_t dest_addr,uint64_t addr,uint64_t key,enum fi_datatype datatype,enum fi_op op)156 fi_inject_atomic(struct fid_ep *ep, const void *buf, size_t count,
157 fi_addr_t dest_addr, uint64_t addr, uint64_t key,
158 enum fi_datatype datatype, enum fi_op op)
159 {
160 return psmx2_atomic_inject(ep, buf, count, dest_addr, addr,
161 key, datatype, op);
162 }
163
164 static inline ssize_t
fi_fetch_atomic(struct fid_ep * ep,const void * buf,size_t count,void * desc,void * result,void * result_desc,fi_addr_t dest_addr,uint64_t addr,uint64_t key,enum fi_datatype datatype,enum fi_op op,void * context)165 fi_fetch_atomic(struct fid_ep *ep,
166 const void *buf, size_t count, void *desc,
167 void *result, void *result_desc,
168 fi_addr_t dest_addr,
169 uint64_t addr, uint64_t key,
170 enum fi_datatype datatype, enum fi_op op, void *context)
171 {
172 return psmx2_atomic_readwrite(ep, buf, count, desc, result, result_desc,
173 dest_addr, addr, key, datatype, op, context);
174 }
175
176 static inline ssize_t
fi_fetch_atomicv(struct fid_ep * ep,const struct fi_ioc * iov,void ** desc,size_t count,struct fi_ioc * resultv,void ** result_desc,size_t result_count,fi_addr_t dest_addr,uint64_t addr,uint64_t key,enum fi_datatype datatype,enum fi_op op,void * context)177 fi_fetch_atomicv(struct fid_ep *ep,
178 const struct fi_ioc *iov, void **desc, size_t count,
179 struct fi_ioc *resultv, void **result_desc, size_t result_count,
180 fi_addr_t dest_addr,
181 uint64_t addr, uint64_t key,
182 enum fi_datatype datatype, enum fi_op op, void *context)
183 {
184 return psmx2_atomic_readwritev(ep, iov, desc, count,
185 resultv, result_desc, result_count,
186 dest_addr, addr, key, datatype, op, context);
187 }
188
189 static inline ssize_t
fi_fetch_atomicmsg(struct fid_ep * ep,const struct fi_msg_atomic * msg,struct fi_ioc * resultv,void ** result_desc,size_t result_count,uint64_t flags)190 fi_fetch_atomicmsg(struct fid_ep *ep,
191 const struct fi_msg_atomic *msg,
192 struct fi_ioc *resultv, void **result_desc, size_t result_count,
193 uint64_t flags)
194 {
195 return psmx2_atomic_readwritemsg(ep, msg, resultv, result_desc,
196 result_count, flags);
197 }
198
199 static inline ssize_t
fi_compare_atomic(struct fid_ep * ep,const void * buf,size_t count,void * desc,const void * compare,void * compare_desc,void * result,void * result_desc,fi_addr_t dest_addr,uint64_t addr,uint64_t key,enum fi_datatype datatype,enum fi_op op,void * context)200 fi_compare_atomic(struct fid_ep *ep,
201 const void *buf, size_t count, void *desc,
202 const void *compare, void *compare_desc,
203 void *result, void *result_desc,
204 fi_addr_t dest_addr,
205 uint64_t addr, uint64_t key,
206 enum fi_datatype datatype, enum fi_op op, void *context)
207 {
208 return psmx2_atomic_compwrite(ep, buf, count, desc,
209 compare, compare_desc, result, result_desc,
210 dest_addr, addr, key, datatype, op, context);
211 }
212
213 static inline ssize_t
fi_compare_atomicv(struct fid_ep * ep,const struct fi_ioc * iov,void ** desc,size_t count,const struct fi_ioc * comparev,void ** compare_desc,size_t compare_count,struct fi_ioc * resultv,void ** result_desc,size_t result_count,fi_addr_t dest_addr,uint64_t addr,uint64_t key,enum fi_datatype datatype,enum fi_op op,void * context)214 fi_compare_atomicv(struct fid_ep *ep,
215 const struct fi_ioc *iov, void **desc, size_t count,
216 const struct fi_ioc *comparev, void **compare_desc, size_t compare_count,
217 struct fi_ioc *resultv, void **result_desc, size_t result_count,
218 fi_addr_t dest_addr,
219 uint64_t addr, uint64_t key,
220 enum fi_datatype datatype, enum fi_op op, void *context)
221 {
222 return psmx2_atomic_compwritev(ep, iov, desc, count,
223 comparev, compare_desc, compare_count,
224 resultv, result_desc, result_count,
225 dest_addr, addr, key, datatype, op, context);
226 }
227
228 static inline ssize_t
fi_compare_atomicmsg(struct fid_ep * ep,const struct fi_msg_atomic * msg,const struct fi_ioc * comparev,void ** compare_desc,size_t compare_count,struct fi_ioc * resultv,void ** result_desc,size_t result_count,uint64_t flags)229 fi_compare_atomicmsg(struct fid_ep *ep,
230 const struct fi_msg_atomic *msg,
231 const struct fi_ioc *comparev, void **compare_desc, size_t compare_count,
232 struct fi_ioc *resultv, void **result_desc, size_t result_count,
233 uint64_t flags)
234 {
235 return psmx2_atomic_compwritemsg(ep, msg,
236 comparev, compare_desc, compare_count,
237 resultv, result_desc, result_count, flags);
238 }
239
240 static inline int
fi_atomicvalid(struct fid_ep * ep,enum fi_datatype datatype,enum fi_op op,size_t * count)241 fi_atomicvalid(struct fid_ep *ep,
242 enum fi_datatype datatype, enum fi_op op, size_t *count)
243 {
244 return psmx2_atomic_writevalid(ep, datatype, op, count);
245 }
246
247 static inline int
fi_fetch_atomicvalid(struct fid_ep * ep,enum fi_datatype datatype,enum fi_op op,size_t * count)248 fi_fetch_atomicvalid(struct fid_ep *ep,
249 enum fi_datatype datatype, enum fi_op op, size_t *count)
250 {
251 return psmx2_atomic_readwritevalid(ep, datatype, op, count);
252 }
253
254 static inline int
fi_compare_atomicvalid(struct fid_ep * ep,enum fi_datatype datatype,enum fi_op op,size_t * count)255 fi_compare_atomicvalid(struct fid_ep *ep,
256 enum fi_datatype datatype, enum fi_op op, size_t *count)
257 {
258 return psmx2_atomic_compwritevalid(ep, datatype, op, count);
259 }
260
261 static inline int
fi_query_atomic(struct fid_domain * domain,enum fi_datatype datatype,enum fi_op op,struct fi_atomic_attr * attr,uint64_t flags)262 fi_query_atomic(struct fid_domain *domain,
263 enum fi_datatype datatype, enum fi_op op,
264 struct fi_atomic_attr *attr, uint64_t flags)
265 {
266 return psmx2_query_atomic(domain, datatype, op, attr, flags);
267 }
268
269 #endif /* FI_DIRECT_ATOMIC_H */
270