[ibal] Add support for large send offload. [mlnx: 3040]
[mirror/winof/.git] / ulp / opensm / user / include / iba / ib_types_extended.h
1 /*\r
2  * Copyright (c) 2004,2005 Voltaire, Inc. All rights reserved.   \r
3  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.   \r
4  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.   \r
5  * Portions Copyright (c) 2008 Microsoft Corporation.  All rights reserved.\r
6  *  \r
7  * This software is available to you under the OpenIB.org BSD license  \r
8  * below:  \r
9  *  \r
10  *     Redistribution and use in source and binary forms, with or  \r
11  *     without modification, are permitted provided that the following  \r
12  *     conditions are met:  \r
13  *  \r
14  *      - Redistributions of source code must retain the above  \r
15  *        copyright notice, this list of conditions and the following  \r
16  *        disclaimer.  \r
17  *  \r
18  *      - Redistributions in binary form must reproduce the above  \r
19  *        copyright notice, this list of conditions and the following  \r
20  *        disclaimer in the documentation and/or other materials  \r
21  *        provided with the distribution.  \r
22  *  \r
23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  \r
24  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF   \r
25  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND           \r
26  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  \r
27  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  \r
28  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  \r
29  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE  \r
30  * SOFTWARE.  \r
31  *  \r
32  * $Id$\r
33  */\r
34 \r
35 \r
36 #if !defined(__IB_TYPES_EXTENDED_H__)\r
37 #define __IB_TYPES_EXTENDED_H__\r
38 \r
39 \r
40 #if defined( WIN32 )\r
41         #if defined( EXPORT_AL_SYMBOLS )\r
42                 #define AL_EXPORT       __declspec(dllexport)\r
43         #else\r
44                 #define AL_EXPORT       __declspec(dllimport)\r
45         #endif\r
46 \r
47         #ifdef CL_KERNEL\r
48                 #define AL_API\r
49                 #define AL_INLINE       static inline\r
50         #else\r
51                 #define AL_API          __stdcall\r
52                 #define AL_INLINE       static  inline\r
53         #endif  /* CL_KERNEL */\r
54 #else\r
55         #define AL_EXPORT       extern\r
56         #define AL_INLINE       static inline\r
57         #define AL_API\r
58         #define __ptr64\r
59 #endif\r
60 \r
61 /*\r
62  *      Defines the size of user available data in communication management MADs\r
63  */\r
64 #define IB_REQ_PDATA_SIZE                                       92\r
65 #define IB_MRA_PDATA_SIZE                                       222\r
66 #define IB_REJ_PDATA_SIZE                                       148\r
67 #define IB_REP_PDATA_SIZE                                       196\r
68 #define IB_RTU_PDATA_SIZE                                       224\r
69 #define IB_LAP_PDATA_SIZE                                       168\r
70 #define IB_APR_PDATA_SIZE                                       148\r
71 #define IB_DREQ_PDATA_SIZE                                      220\r
72 #define IB_DREP_PDATA_SIZE                                      224\r
73 #define IB_SIDR_REQ_PDATA_SIZE                          216\r
74 #define IB_SIDR_REP_PDATA_SIZE                          136\r
75 \r
76 /* following v1 ver1.2 p901 */\r
77 #define IB_PATH_RECORD_RATE_5_GBS               5\r
78 #define IB_PATH_RECORD_RATE_20_GBS              6\r
79 #define IB_PATH_RECORD_RATE_40_GBS              7\r
80 #define IB_PATH_RECORD_RATE_60_GBS              8\r
81 #define IB_PATH_RECORD_RATE_80_GBS              9\r
82 #define IB_PATH_RECORD_RATE_120_GBS             10\r
83 \r
84 \r
85 \r
86 typedef struct _ib_srq*         ib_srq_handle_t ; \r
87 \r
88 /*\r
89  *      The following definitions are shared between the Access Layer and VPD\r
90  */\r
91 \r
92 \r
93 \r
94 /****d* Access Layer/ib_api_status_t\r
95 * NAME\r
96 *       ib_api_status_t\r
97 *\r
98 * DESCRIPTION\r
99 *       Function return codes indicating the success or failure of an API call.\r
100 *       Note that success is indicated by the return value IB_SUCCESS, which\r
101 *       is always zero.\r
102 *\r
103 * NOTES\r
104 *       IB_VERBS_PROCESSING_DONE is used by UVP library to terminate a verbs call\r
105 *       in the pre-ioctl step itself.\r
106 *\r
107 * SYNOPSIS\r
108 */\r
109 typedef enum _ib_api_status_t\r
110 {\r
111         IB_SUCCESS,\r
112         IB_INSUFFICIENT_RESOURCES,\r
113         IB_INSUFFICIENT_MEMORY,\r
114         IB_INVALID_PARAMETER,\r
115         IB_INVALID_SETTING,\r
116         IB_NOT_FOUND,\r
117         IB_TIMEOUT,\r
118         IB_CANCELED,\r
119         IB_INTERRUPTED,\r
120         IB_INVALID_PERMISSION,\r
121         IB_UNSUPPORTED,\r
122         IB_OVERFLOW,\r
123         IB_MAX_MCAST_QPS_REACHED,\r
124         IB_INVALID_QP_STATE,\r
125         IB_INVALID_APM_STATE,\r
126         IB_INVALID_PORT_STATE,\r
127         IB_INVALID_STATE,\r
128         IB_RESOURCE_BUSY,\r
129         IB_INVALID_PKEY,\r
130         IB_INVALID_LKEY,\r
131         IB_INVALID_RKEY,\r
132         IB_INVALID_MAX_WRS,\r
133         IB_INVALID_MAX_SGE,\r
134         IB_INVALID_CQ_SIZE,\r
135         IB_INVALID_SRQ_SIZE,\r
136         IB_INVALID_SERVICE_TYPE,\r
137         IB_INVALID_GID,\r
138         IB_INVALID_LID,\r
139         IB_INVALID_GUID,\r
140         IB_INVALID_CA_HANDLE,\r
141         IB_INVALID_AV_HANDLE,\r
142         IB_INVALID_CQ_HANDLE,\r
143         IB_INVALID_QP_HANDLE,\r
144         IB_INVALID_SRQ_HANDLE,\r
145         IB_INVALID_PD_HANDLE,\r
146         IB_INVALID_MR_HANDLE,\r
147         IB_INVALID_FMR_HANDLE,\r
148         IB_INVALID_MW_HANDLE,\r
149         IB_INVALID_MCAST_HANDLE,\r
150         IB_INVALID_CALLBACK,\r
151         IB_INVALID_AL_HANDLE,                                   /* InfiniBand Access Layer */\r
152         IB_INVALID_HANDLE,                                              /* InfiniBand Access Layer */\r
153         IB_ERROR,                                                               /* InfiniBand Access Layer */\r
154         IB_REMOTE_ERROR,                                                /* Infiniband Access Layer */\r
155         IB_VERBS_PROCESSING_DONE,                               /* See Notes above                 */\r
156         IB_INVALID_WR_TYPE,\r
157         IB_QP_IN_TIMEWAIT,\r
158         IB_EE_IN_TIMEWAIT,\r
159         IB_INVALID_PORT,\r
160         IB_NOT_DONE,\r
161         IB_INVALID_INDEX,\r
162         IB_NO_MATCH,\r
163         IB_PENDING,\r
164         IB_UNKNOWN_ERROR                                                /* ALWAYS LAST ENUM VALUE! */\r
165 \r
166 }       ib_api_status_t;\r
167 /*****/\r
168 \r
169 \r
170 \r
171 /****f* IBA Base: Types/ib_get_err_str\r
172 * NAME\r
173 *       ib_get_err_str\r
174 *\r
175 * DESCRIPTION\r
176 *       Returns a string for the specified status value.\r
177 *\r
178 * SYNOPSIS\r
179 */\r
180 AL_EXPORT const char* AL_API\r
181 ib_get_err_str(\r
182         IN                              ib_api_status_t                         status );\r
183 /*\r
184 * PARAMETERS\r
185 *       status\r
186 *               [in] status value\r
187 *\r
188 * RETURN VALUES\r
189 *       Pointer to the status description string.\r
190 *\r
191 * NOTES\r
192 *\r
193 * SEE ALSO\r
194 *********/\r
195 \r
196 /****d* Verbs/ib_async_event_t\r
197 * NAME\r
198 *       ib_async_event_t -- Async event types\r
199 *\r
200 * DESCRIPTION\r
201 *       This type indicates the reason the async callback was called.\r
202 *       The context in the ib_event_rec_t indicates the resource context\r
203 *       that associated with the callback.  For example, for IB_AE_CQ_ERROR\r
204 *       the context provided during the ib_create_cq is returned in the event.\r
205 *\r
206 * SYNOPSIS\r
207 */\r
208 typedef enum _ib_async_event_t\r
209 {\r
210         IB_AE_SQ_ERROR = 1,\r
211         IB_AE_SQ_DRAINED,\r
212         IB_AE_RQ_ERROR,\r
213         IB_AE_CQ_ERROR,\r
214         IB_AE_QP_FATAL,\r
215         IB_AE_QP_COMM,\r
216         IB_AE_QP_APM,\r
217         IB_AE_LOCAL_FATAL,\r
218         IB_AE_PKEY_TRAP,\r
219         IB_AE_QKEY_TRAP,\r
220         IB_AE_MKEY_TRAP,\r
221         IB_AE_PORT_TRAP,\r
222         IB_AE_SYSIMG_GUID_TRAP,\r
223         IB_AE_BUF_OVERRUN,\r
224         IB_AE_LINK_INTEGRITY,\r
225         IB_AE_FLOW_CTRL_ERROR,\r
226         IB_AE_BKEY_TRAP,\r
227         IB_AE_QP_APM_ERROR,\r
228         IB_AE_WQ_REQ_ERROR,\r
229         IB_AE_WQ_ACCESS_ERROR,\r
230         IB_AE_PORT_ACTIVE,\r
231         IB_AE_PORT_DOWN,\r
232         IB_AE_CLIENT_REREGISTER,\r
233         IB_AE_SRQ_LIMIT_REACHED,\r
234         IB_AE_SRQ_CATAS_ERROR,\r
235         IB_AE_SRQ_QP_LAST_WQE_REACHED,\r
236         IB_AE_UNKNOWN           /* ALWAYS LAST ENUM VALUE */\r
237 \r
238 }       ib_async_event_t;\r
239 /*\r
240 * VALUES\r
241 *       IB_AE_SQ_ERROR\r
242 *               An error occurred when accessing the send queue of the QP.\r
243 *               This event is optional.\r
244 *\r
245 *       IB_AE_SQ_DRAINED\r
246 *               The send queue of the specified QP has completed the outstanding\r
247 *               messages in progress when the state change was requested and, if\r
248 *               applicable, has received all acknowledgements for those messages.\r
249 *\r
250 *       IB_AE_RQ_ERROR\r
251 *               An error occurred when accessing the receive queue of the QP.\r
252 *               This event is optional.\r
253 *\r
254 *       IB_AE_CQ_ERROR\r
255 *               An error occurred when writing an entry to the CQ.\r
256 *\r
257 *       IB_AE_QP_FATAL\r
258 *               A catastrophic error occurred while accessing or processing the\r
259 *               work queue that prevents reporting of completions.\r
260 *\r
261 *       IB_AE_QP_COMM\r
262 *               The first packet has arrived for the receive work queue where the\r
263 *               QP is still in the RTR state.\r
264 *\r
265 *       IB_AE_QP_APM\r
266 *               If alternate path migration is supported, this event indicates that\r
267 *               the QP connection has migrated to the alternate path.\r
268 *\r
269 *       IB_AE_LOCAL_FATAL\r
270 *               A catastrophic HCA error occurred which cannot be attributed to any\r
271 *               resource; behavior is indeterminate.\r
272 *\r
273 *       IB_AE_PKEY_TRAP\r
274 *               A PKEY violation was detected.  This event is optional.\r
275 *\r
276 *       IB_AE_QKEY_TRAP\r
277 *               A QKEY violation was detected.  This event is optional.\r
278 *\r
279 *       IB_AE_MKEY_TRAP\r
280 *               An MKEY violation was detected.  This event is optional.\r
281 *\r
282 *       IB_AE_PORT_TRAP\r
283 *               A port capability change was detected.  This event is optional.\r
284 *\r
285 *       IB_AE_SYSIMG_GUID_TRAP\r
286 *               If the system image GUID is supported, this event indicates that the\r
287 *               system image GUID of this HCA has been changed.  This event is\r
288 *               optional.\r
289 *\r
290 *       IB_AE_BUF_OVERRUN\r
291 *               The number of consecutive flow control update periods with at least\r
292 *               one overrun error in each period has exceeded the threshold specified\r
293 *               in the port info attributes.  This event is optional.\r
294 *\r
295 *       IB_AE_LINK_INTEGRITY\r
296 *               The detection of excessively frequent local physical errors has\r
297 *               exceeded the threshold specified in the port info attributes.  This\r
298 *               event is optional.\r
299 *\r
300 *       IB_AE_FLOW_CTRL_ERROR\r
301 *               An HCA watchdog timer monitoring the arrival of flow control updates\r
302 *               has expired without receiving an update.  This event is optional.\r
303 *\r
304 *       IB_AE_BKEY_TRAP\r
305 *               An BKEY violation was detected.  This event is optional.\r
306 *\r
307 *       IB_AE_QP_APM_ERROR\r
308 *               If alternate path migration is supported, this event indicates that\r
309 *               an incoming path migration request to this QP was not accepted.\r
310 *\r
311 *       IB_AE_WQ_REQ_ERROR\r
312 *               An OpCode violation was detected at the responder.\r
313 *\r
314 *       IB_AE_WQ_ACCESS_ERROR\r
315 *               An access violation was detected at the responder.\r
316 *\r
317 *       IB_AE_PORT_ACTIVE\r
318 *               If the port active event is supported, this event is generated\r
319 *               when the link becomes active: IB_LINK_ACTIVE.\r
320 *\r
321 *       IB_AE_PORT_DOWN\r
322 *               The link is declared unavailable: IB_LINK_INIT, IB_LINK_ARMED,\r
323 *               IB_LINK_DOWN.\r
324 *\r
325 *       IB_AE_CLIENT_REREGISTER\r
326 *               The SM idicate to client to reregister its SA records.\r
327 *\r
328 *       IB_AE_SRQ_LIMIT_REACHED\r
329 *               Reached SRQ low watermark\r
330 *\r
331 *       IB_AE_SRQ_CATAS_ERROR\r
332 *               An error occurred while processing or accessing the SRQ that prevents\r
333 *               dequeuing a WQE from the SRQ and reporting of receive completions.\r
334 *\r
335 *       IB_AE_SRQ_QP_LAST_WQE_REACHED\r
336 *               An event,  issued for a QP, associated with a shared receive queue, when\r
337 *                       a CQE is generated for the last WQE, or\r
338 *                       the QP gets in the Error State and there are no more WQEs on the RQ.\r
339 *\r
340 *       IB_AE_UNKNOWN\r
341 *               An unknown error occurred which cannot be attributed to any\r
342 *               resource; behavior is indeterminate.\r
343 *\r
344 *****/\r
345 \r
346 \r
347 \r
348 /****f* IBA Base: Types/ib_get_async_event_str\r
349 * NAME\r
350 *       ib_get_async_event_str\r
351 *\r
352 * DESCRIPTION\r
353 *       Returns a string for the specified asynchronous event.\r
354 *\r
355 * SYNOPSIS\r
356 */\r
357 AL_EXPORT const char* AL_API\r
358 ib_get_async_event_str(\r
359         IN                              ib_async_event_t                        event );\r
360 /*\r
361 * PARAMETERS\r
362 *       event\r
363 *               [in] event value\r
364 *\r
365 * RETURN VALUES\r
366 *       Pointer to the asynchronous event description string.\r
367 *\r
368 * NOTES\r
369 *\r
370 * SEE ALSO\r
371 *********/\r
372 \r
373 \r
374 /****s* Verbs/ib_event_rec_t\r
375 * NAME\r
376 *       ib_event_rec_t -- Async event notification record\r
377 *\r
378 * DESCRIPTION\r
379 *       When an async event callback is made, this structure is passed to indicate\r
380 *       the type of event, the source of event that caused it, and the context\r
381 *       associated with this event.\r
382 *\r
383 *       context -- Context of the resource that caused the event.\r
384 *               -- ca_context if this is a port/adapter event.\r
385 *               -- qp_context if the source is a QP event\r
386 *               -- cq_context if the source is a CQ event.\r
387 *               -- ee_context if the source is an EE event.\r
388 *\r
389 * SYNOPSIS\r
390 */\r
391 typedef struct _ib_event_rec\r
392 {\r
393         TO_LONG_PTR(void*,              context);\r
394         ib_async_event_t                type;\r
395 \r
396         /* HCA vendor specific event information. */\r
397         uint64_t                                vendor_specific;\r
398         uint8_t                                 port_number;\r
399 \r
400 }       ib_event_rec_t;\r
401 /*******/\r
402 \r
403 \r
404 /****d* Access Layer/ib_atomic_t\r
405 * NAME\r
406 *       ib_atomic_t\r
407 *\r
408 * DESCRIPTION\r
409 *       Indicates atomicity levels supported by an adapter.\r
410 *\r
411 * SYNOPSIS\r
412 */\r
413 typedef enum _ib_atomic_t\r
414 {\r
415         IB_ATOMIC_NONE,\r
416         IB_ATOMIC_LOCAL,\r
417         IB_ATOMIC_GLOBAL\r
418 \r
419 }       ib_atomic_t;\r
420 /*\r
421 * VALUES\r
422 *       IB_ATOMIC_NONE\r
423 *               Atomic operations not supported.\r
424 *\r
425 *       IB_ATOMIC_LOCAL\r
426 *               Atomic operations guaranteed between QPs of a single CA.\r
427 *\r
428 *       IB_ATOMIC_GLOBAL\r
429 *               Atomic operations are guaranteed between CA and any other entity\r
430 *               in the system.\r
431 *****/\r
432 \r
433 \r
434 /****s* Access Layer/ib_port_cap_t\r
435 * NAME\r
436 *       ib_port_cap_t\r
437 *\r
438 * DESCRIPTION\r
439 *       Indicates which management agents are currently available on the specified\r
440 *       port.\r
441 *\r
442 * SYNOPSIS\r
443 */\r
444 typedef struct _ib_port_cap\r
445 {\r
446         boolean_t               cm;\r
447         boolean_t               snmp;\r
448         boolean_t               dev_mgmt;\r
449         boolean_t               vend;\r
450         boolean_t               sm;\r
451         boolean_t               sm_disable;\r
452         boolean_t               qkey_ctr;\r
453         boolean_t               pkey_ctr;\r
454         boolean_t               notice;\r
455         boolean_t               trap;\r
456         boolean_t               apm;\r
457         boolean_t               slmap;\r
458         boolean_t               pkey_nvram;\r
459         boolean_t               mkey_nvram;\r
460         boolean_t               sysguid;\r
461         boolean_t               dr_notice;\r
462         boolean_t               boot_mgmt;\r
463         boolean_t               capm_notice;\r
464         boolean_t               reinit;\r
465         boolean_t               ledinfo;\r
466         boolean_t               port_active;\r
467         boolean_t               ipd;\r
468         boolean_t               pkey_switch_ext_port;\r
469         boolean_t               bm;\r
470         boolean_t               link_rtl;\r
471         boolean_t               client_reregister;      \r
472 \r
473 }       ib_port_cap_t;\r
474 /*****/\r
475 \r
476 \r
477 /****d* Access Layer/ib_init_type_t\r
478 * NAME\r
479 *       ib_init_type_t\r
480 *\r
481 * DESCRIPTION\r
482 *       If supported by the HCA, the type of initialization requested by\r
483 *       this port before SM moves it to the active or armed state.  If the\r
484 *       SM implements reinitialization, it shall set these bits to indicate\r
485 *       the type of initialization performed prior to activating the port.\r
486 *       Otherwise, these bits shall be set to 0.\r
487 *\r
488 * SYNOPSIS\r
489 */\r
490 typedef uint8_t                                 ib_init_type_t;\r
491 #define IB_INIT_TYPE_NO_LOAD                            0x01\r
492 #define IB_INIT_TYPE_PRESERVE_CONTENT           0x02\r
493 #define IB_INIT_TYPE_PRESERVE_PRESENCE          0x04\r
494 #define IB_INIT_TYPE_DO_NOT_RESUSCITATE         0x08\r
495 /*****/\r
496 \r
497 \r
498 /****s* Access Layer/ib_port_attr_mod_t\r
499 * NAME\r
500 *       ib_port_attr_mod_t\r
501 *\r
502 * DESCRIPTION\r
503 *       Port attributes that may be modified.\r
504 *\r
505 * SYNOPSIS\r
506 */\r
507 typedef struct _ib_port_attr_mod\r
508 {\r
509         ib_port_cap_t                   cap;\r
510         uint16_t                                pkey_ctr;\r
511         uint16_t                                qkey_ctr;\r
512 \r
513         ib_init_type_t                  init_type;\r
514         ib_net64_t                              system_image_guid;\r
515 \r
516 }       ib_port_attr_mod_t;\r
517 /*\r
518 * SEE ALSO\r
519 *       ib_port_cap_t\r
520 *****/\r
521 \r
522 \r
523 /****s* Access Layer/ib_port_attr_t\r
524 * NAME\r
525 *       ib_port_attr_t\r
526 *\r
527 * DESCRIPTION\r
528 *       Information about a port on a given channel adapter.\r
529 *\r
530 * SYNOPSIS\r
531 */\r
532 typedef struct _ib_port_attr\r
533 {\r
534         ib_net64_t                              port_guid;\r
535         uint8_t                                 port_num;\r
536         uint8_t                                 mtu;\r
537         uint64_t                                max_msg_size;\r
538         ib_net16_t                              lid;\r
539         uint8_t                                 lmc;\r
540 \r
541         /*\r
542          * LinkWidthSupported as defined in PortInfo.  Required to calculate\r
543          * inter-packet delay (a.k.a. static rate).\r
544          */\r
545         uint8_t                                 link_width_supported;\r
546 \r
547         uint16_t                                max_vls;\r
548 \r
549         ib_net16_t                              sm_lid;\r
550         uint8_t                                 sm_sl;\r
551         uint8_t                                 link_state;\r
552 \r
553         ib_init_type_t                  init_type_reply;        /* Optional */\r
554 \r
555         /*\r
556          * subnet_timeout:\r
557          * The maximum expected subnet propagation delay to reach any port on\r
558          * the subnet.  This value also determines the rate at which traps can\r
559          * be generated from this node.\r
560          *\r
561          * timeout = 4.096 microseconds * 2^subnet_timeout\r
562          */\r
563         uint8_t                                 subnet_timeout;\r
564         uint8_t                                 active_speed;\r
565         uint8_t                                 phys_state;\r
566 \r
567         ib_port_cap_t                   cap;\r
568         uint16_t                                pkey_ctr;\r
569         uint16_t                                qkey_ctr;\r
570 \r
571         uint16_t                                num_gids;\r
572         uint16_t                                num_pkeys;\r
573         /*\r
574          * Pointers at the end of the structure to allow doing a simple\r
575          * memory comparison of contents up to the first pointer.\r
576          */\r
577         TO_LONG_PTR(ib_gid_t*,  p_gid_table);\r
578         TO_LONG_PTR(ib_net16_t*,p_pkey_table);\r
579 \r
580 }       ib_port_attr_t;\r
581 /*\r
582 * SEE ALSO\r
583 *       uint8_t, ib_port_cap_t, ib_link_states_t\r
584 *****/\r
585 \r
586 \r
587 /****s* Access Layer/ib_ca_attr_t\r
588 * NAME\r
589 *       ib_ca_attr_t\r
590 *\r
591 * DESCRIPTION\r
592 *       Information about a channel adapter.\r
593 *\r
594 * SYNOPSIS\r
595 */\r
596 typedef struct _ib_ca_attr\r
597 {\r
598         ib_net64_t                              ca_guid;\r
599 \r
600         uint32_t                                vend_id;\r
601         uint16_t                                dev_id;\r
602         uint16_t                                revision;\r
603         uint64_t                                fw_ver;\r
604 \r
605         /*\r
606          * Total size of the ca attributes in bytes\r
607          */\r
608         uint32_t                                size;\r
609         uint32_t                                max_qps;\r
610         uint32_t                                max_wrs;\r
611 \r
612         uint32_t                                max_sges;\r
613         uint32_t                                max_rd_sges;\r
614 \r
615         uint32_t                                max_cqs;\r
616         uint32_t                                max_cqes;\r
617 \r
618         uint32_t                                max_pds;\r
619 \r
620         uint32_t                                init_regions;\r
621         uint64_t                                init_region_size;\r
622 \r
623         uint32_t                                init_windows;\r
624         uint64_t                                max_addr_handles;\r
625 \r
626         uint32_t                                max_partitions;\r
627 \r
628         ib_atomic_t                             atomicity;\r
629 \r
630         uint8_t                                 max_qp_resp_res;\r
631         uint8_t                                 max_resp_res;\r
632 \r
633         uint8_t                                 max_qp_init_depth;\r
634 \r
635         uint32_t                                max_ipv6_qps;\r
636         uint32_t                                max_ether_qps;\r
637 \r
638         uint32_t                                max_mcast_grps;\r
639         uint32_t                                max_mcast_qps;\r
640         uint32_t                                max_qps_per_mcast_grp;\r
641         uint32_t                                max_fmr;\r
642         uint32_t                                max_map_per_fmr;\r
643         uint32_t                                max_srq;\r
644         uint32_t                                max_srq_wrs;\r
645         uint32_t                                max_srq_sges;\r
646 \r
647         /*\r
648          * local_ack_delay:\r
649          * Specifies the maximum time interval between the local CA receiving\r
650          * a message and the transmission of the associated ACK or NAK.\r
651          *\r
652          * timeout = 4.096 microseconds * 2^local_ack_delay\r
653          */\r
654         uint8_t                                 local_ack_delay;\r
655 \r
656         boolean_t                               bad_pkey_ctr_support;\r
657         boolean_t                               bad_qkey_ctr_support;\r
658         boolean_t                               raw_mcast_support;\r
659         boolean_t                               apm_support;\r
660         boolean_t                               av_port_check;\r
661         boolean_t                               change_primary_port;\r
662         boolean_t                               modify_wr_depth;\r
663         boolean_t                               modify_srq_depth;\r
664         boolean_t                               current_qp_state_support;\r
665         boolean_t                               shutdown_port_capability;\r
666         boolean_t                               init_type_support;\r
667         boolean_t                               port_active_event_support;\r
668         boolean_t                               system_image_guid_support;\r
669         boolean_t                               hw_agents;\r
670         boolean_t                               ipoib_csum;\r
671         \r
672         ib_net64_t                              system_image_guid;\r
673 \r
674         uint32_t                                num_page_sizes;\r
675         uint8_t                                 num_ports;\r
676 \r
677         TO_LONG_PTR(uint32_t*,  p_page_size);\r
678         TO_LONG_PTR(ib_port_attr_t*, p_port_attr);\r
679 \r
680 }       ib_ca_attr_t;\r
681 /*\r
682 * FIELDS\r
683 *       ca_guid\r
684 *               GUID for this adapter.\r
685 *\r
686 *       vend_id\r
687 *               IEEE vendor ID for this adapter\r
688 *\r
689 *       dev_id\r
690 *               Device ID of this adapter. (typically from PCI device ID)\r
691 *\r
692 *       revision\r
693 *               Revision ID of this adapter\r
694 *\r
695 *       fw_ver\r
696 *               Device Firmware version.\r
697 *\r
698 *       size\r
699 *               Total size in bytes for the HCA attributes.  This size includes total\r
700 *               size required for all the variable members of the structure.  If a\r
701 *               vendor requires to pass vendor specific fields beyond this structure,\r
702 *               the HCA vendor can choose to report a larger size.  If a vendor is\r
703 *               reporting extended vendor specific features, they should also provide\r
704 *               appropriate access functions to aid with the required interpretation.\r
705 *\r
706 *       max_qps\r
707 *               Maximum number of QP's supported by this HCA.\r
708 *\r
709 *       max_wrs\r
710 *               Maximum number of work requests supported by this HCA.\r
711 *\r
712 *       max_sges\r
713 *               Maximum number of scatter gather elements supported per work request.\r
714 *\r
715 *       max_rd_sges\r
716 *               Maximum number of scatter gather elements supported for READ work\r
717 *               requests for a Reliable Datagram QP.  This value must be zero if RD\r
718 *               service is not supported.\r
719 *\r
720 *       max_cqs\r
721 *               Maximum number of Completion Queues supported.\r
722 *\r
723 *       max_cqes\r
724 *               Maximum number of CQ elements supported per CQ.\r
725 *\r
726 *       max_pds\r
727 *               Maximum number of protection domains supported.\r
728 *\r
729 *       init_regions\r
730 *               Initial number of memory regions supported.  These are only informative\r
731 *               values.  HCA vendors can extended and grow these limits on demand.\r
732 *\r
733 *       init_region_size\r
734 *               Initial limit on the size of the registered memory region.\r
735 *\r
736 *       init_windows\r
737 *               Initial number of window entries supported.\r
738 *\r
739 *       max_addr_handles\r
740 *               Maximum number of address handles supported.\r
741 *\r
742 *       max_partitions\r
743 *               Maximum number of partitions supported.\r
744 *\r
745 *       atomicity\r
746 *               Indicates level of atomic operations supported by this HCA.\r
747 *\r
748 *       max_qp_resp_res\r
749 *               Maximum limit on number of responder resources for incomming RDMA\r
750 *               operations on QPs.\r
751 *\r
752 *       max_fmr\r
753 *               Maximum number of Fast Memory Regions supported.\r
754 *\r
755 *       max_map_per_fmr\r
756 *               Maximum number of mappings, supported by a Fast Memory Region.\r
757 *\r
758 *       max_srq\r
759 *               Maximum number of Shared Receive Queues supported.\r
760 *\r
761 *       max_srq_wrs\r
762 *               Maximum number of work requests supported by this SRQ.\r
763 *\r
764 *       max_srq_sges\r
765 *               Maximum number of scatter gather elements supported per work request on SRQ.\r
766 *\r
767 *       max_resp_res\r
768 *               Maximum number of responder resources per HCA, with this HCA used as\r
769 *               the target.\r
770 *\r
771 *       max_qp_init_depth\r
772 *               Maximimum initiator depth per QP for initiating RDMA reads and\r
773 *               atomic operations.\r
774 *\r
775 *       max_ipv6_qps\r
776 *       max_ether_qps\r
777 *               Maximum number of IPV6 and raw ether QP's supported by this HCA.\r
778 *\r
779 *       max_mcast_grps\r
780 *               Maximum number of multicast groups supported.\r
781 *\r
782 *       max_mcast_qps\r
783 *               Maximum number of QP's that can support multicast operations.\r
784 *\r
785 *       max_qps_per_mcast_grp\r
786 *               Maximum number of multicast QP's per multicast group.\r
787 *\r
788 *       local_ack_delay\r
789 *               Specifies the maximum time interval between the local CA receiving\r
790 *               a message and the transmission of the associated ACK or NAK.\r
791 *               timeout = 4.096 microseconds * 2^local_ack_delay\r
792 *\r
793 *       bad_pkey_ctr_support\r
794 *       bad_qkey_ctr_support\r
795 *               Indicates support for the bad pkey and qkey counters.\r
796 *\r
797 *       raw_mcast_support\r
798 *               Indicates support for raw packet multicast.\r
799 *\r
800 *       apm_support\r
801 *               Indicates support for Automatic Path Migration.\r
802 *\r
803 *       av_port_check\r
804 *               Indicates ability to check port number in address handles.\r
805 *\r
806 *       change_primary_port\r
807 *               Indicates ability to change primary port for a QP during a\r
808 *               SQD->RTS transition.\r
809 *\r
810 *       modify_wr_depth\r
811 *               Indicates ability to modify QP depth during a modify QP operation.\r
812 *               Check the verb specification for permitted states.\r
813 *\r
814 *       modify_srq_depth\r
815 *               Indicates ability to modify SRQ depth during a modify SRQ operation.\r
816 *               Check the verb specification for permitted states.\r
817 *\r
818 *       current_qp_state_support\r
819 *               Indicates ability of the HCA to support the current QP state modifier\r
820 *               during a modify QP operation.\r
821 *\r
822 *       shutdown_port_capability\r
823 *               Shutdown port capability support indicator.\r
824 *\r
825 *       init_type_support\r
826 *               Indicates init_type_reply and ability to set init_type is supported.\r
827 *\r
828 *       port_active_event_support\r
829 *               Port active event support indicator.\r
830 *\r
831 *       system_image_guid_support\r
832 *               System image GUID support indicator.\r
833 *\r
834 *       hw_agents\r
835 *               Indicates SMA is implemented in HW.\r
836 *\r
837 *       system_image_guid\r
838 *               Optional system image GUID.  This field is valid only if the\r
839 *               system_image_guid_support flag is set.\r
840 *\r
841 *       num_page_sizes\r
842 *               Indicates support for different page sizes supported by the HCA.\r
843 *               The variable size array can be obtained from p_page_size.\r
844 *\r
845 *       num_ports\r
846 *               Number of physical ports supported on this HCA.\r
847 *\r
848 *       p_page_size\r
849 *               Array holding different page size supported.\r
850 *\r
851 *       p_port_attr\r
852 *               Array holding port attributes.\r
853 *\r
854 * NOTES\r
855 *       This structure contains the attributes of a channel adapter.  Users must\r
856 *       call ib_copy_ca_attr to copy the contents of this structure to a new\r
857 *       memory region.\r
858 *\r
859 * SEE ALSO\r
860 *       ib_port_attr_t, ib_atomic_t, ib_copy_ca_attr\r
861 *****/\r
862 \r
863 /****f* Access layer/ib_copy_ca_attr\r
864 * NAME\r
865 *       ib_copy_ca_attr\r
866 *\r
867 * DESCRIPTION\r
868 *       Copies CA attributes.\r
869 *\r
870 * SYNOPSIS\r
871 */\r
872 AL_EXPORT ib_ca_attr_t* AL_API\r
873 ib_copy_ca_attr(\r
874         IN                              ib_ca_attr_t* const             p_dest,\r
875         IN              const   ib_ca_attr_t* const             p_src );\r
876 /*\r
877 * PARAMETERS\r
878 *       p_dest\r
879 *               Pointer to the buffer that is the destination of the copy.\r
880 *\r
881 *       p_src\r
882 *               Pointer to the CA attributes to copy.\r
883 *\r
884 * RETURN VALUE\r
885 *       Pointer to the copied CA attributes.\r
886 *\r
887 * NOTES\r
888 *       The buffer pointed to by the p_dest parameter must be at least the size\r
889 *       specified in the size field of the buffer pointed to by p_src.\r
890 *\r
891 * SEE ALSO\r
892 *       ib_ca_attr_t, ib_dup_ca_attr, ib_free_ca_attr\r
893 *****/\r
894 \r
895 \r
896 /****d* Access Layer/ib_pd_type_t\r
897 * NAME\r
898 *       ib_pd_type_t\r
899 *\r
900 * DESCRIPTION\r
901 *       Indicates the type of protection domain being allocated.\r
902 *\r
903 * SYNOPSIS\r
904 */\r
905 typedef enum _ib_pd_type\r
906 {\r
907         IB_PDT_NORMAL,\r
908         IB_PDT_ALIAS,\r
909         IB_PDT_SQP,\r
910         IB_PDT_UD\r
911 \r
912 }       ib_pd_type_t;\r
913 /*\r
914 * VALUES\r
915 *       IB_PDT_NORMAL\r
916 *               Protection domain for all non-aliased QPs.\r
917 *\r
918 *       IB_PDT_ALIAS\r
919 *               Protection domain for IB_QPT_QP0_ALIAS and IB_QPT_QP1_ALIAS QPs.\r
920 *\r
921 *       IB_PDT_SQP\r
922 *               Protection domain for special queue pair usage.\r
923 *\r
924 *       IB_PDT_UD\r
925 *               Protection domain for UD queue pair usage.\r
926 *****/\r
927 \r
928 \r
929 /****s* Access Layer/ib_av_attr_t\r
930 * NAME\r
931 *       ib_av_attr_t\r
932 *\r
933 * DESCRIPTION\r
934 *       IBA address vector.\r
935 *\r
936 * SYNOPSIS\r
937 */\r
938 typedef struct _ib_av_attr\r
939 {\r
940         uint8_t                                 port_num;\r
941 \r
942         uint8_t                                 sl;\r
943         ib_net16_t                              dlid;\r
944 \r
945         boolean_t                               grh_valid;\r
946         ib_grh_t                                grh;\r
947         uint8_t                                 static_rate;\r
948         uint8_t                                 path_bits;\r
949 \r
950         struct _av_conn\r
951         {\r
952                 uint8_t                         path_mtu;\r
953                 uint8_t                         local_ack_timeout;\r
954                 uint8_t                         seq_err_retry_cnt;\r
955                 uint8_t                         rnr_retry_cnt;\r
956 \r
957         }       conn;\r
958 \r
959 }       ib_av_attr_t;\r
960 /*\r
961 * SEE ALSO\r
962 *       ib_gid_t\r
963 *****/\r
964 \r
965 \r
966 /****d* Access Layer/ib_qp_type_t\r
967 * NAME\r
968 *       ib_qp_type_t\r
969 *\r
970 * DESCRIPTION\r
971 *       Indicates the type of queue pair being created.\r
972 *\r
973 * SYNOPSIS\r
974 */\r
975 typedef enum _ib_qp_type\r
976 {\r
977         IB_QPT_RELIABLE_CONN    = 0,            /* Matches CM REQ transport type */\r
978         IB_QPT_UNRELIABLE_CONN  = 1,            /* Matches CM REQ transport type */\r
979         IB_QPT_RELIABLE_DGRM    = 2,    /* Matches CM REQ transport type */\r
980         IB_QPT_UNRELIABLE_DGRM,\r
981         IB_QPT_QP0,\r
982         IB_QPT_QP1,\r
983         IB_QPT_RAW_IPV6,\r
984         IB_QPT_RAW_ETHER,\r
985         IB_QPT_MAD,                                                             /* InfiniBand Access Layer */\r
986         IB_QPT_QP0_ALIAS,                                               /* InfiniBand Access Layer */\r
987         IB_QPT_QP1_ALIAS,                                               /* InfiniBand Access Layer */\r
988         IB_QPT_UNKNOWN\r
989 }       ib_qp_type_t;\r
990 /*\r
991 * VALUES\r
992 *       IB_QPT_RELIABLE_CONN\r
993 *               Reliable, connected queue pair.\r
994 *\r
995 *       IB_QPT_UNRELIABLE_CONN\r
996 *               Unreliable, connected queue pair.\r
997 *\r
998 *       IB_QPT_RELIABLE_DGRM\r
999 *               Reliable, datagram queue pair.\r
1000 *\r
1001 *       IB_QPT_UNRELIABLE_DGRM\r
1002 *               Unreliable, datagram queue pair.\r
1003 *\r
1004 *       IB_QPT_QP0\r
1005 *               Queue pair 0.\r
1006 *\r
1007 *       IB_QPT_QP1\r
1008 *               Queue pair 1.\r
1009 *\r
1010 *       IB_QPT_RAW_DGRM\r
1011 *               Raw datagram queue pair.\r
1012 *\r
1013 *       IB_QPT_RAW_IPV6\r
1014 *               Raw IP version 6 queue pair.\r
1015 *\r
1016 *       IB_QPT_RAW_ETHER\r
1017 *               Raw Ethernet queue pair.\r
1018 *\r
1019 *       IB_QPT_MAD\r
1020 *               Unreliable, datagram queue pair that will send and receive management\r
1021 *               datagrams with assistance from the access layer.\r
1022 *\r
1023 *       IB_QPT_QP0_ALIAS\r
1024 *               Alias to queue pair 0.  Aliased QPs can only be created on an aliased\r
1025 *               protection domain.\r
1026 *\r
1027 *       IB_QPT_QP1_ALIAS\r
1028 *               Alias to queue pair 1.  Aliased QPs can only be created on an aliased\r
1029 *               protection domain.\r
1030 *****/\r
1031 \r
1032 \r
1033 /****f* IBA Base: Types/ib_get_qp_type_str\r
1034 * NAME\r
1035 *       ib_get_qp_type_str\r
1036 *\r
1037 * DESCRIPTION\r
1038 *       Returns a string for the specified QP type\r
1039 *\r
1040 * SYNOPSIS\r
1041 */\r
1042 AL_EXPORT const char* AL_API\r
1043 ib_get_qp_type_str(\r
1044         IN                              uint8_t                                         qp_type );\r
1045 \r
1046 /*\r
1047 * PARAMETERS\r
1048 *       qp_type\r
1049 *               [in] Encoded QP type as defined in the\r
1050 QP attribute.\r
1051 \r
1052 * RETURN VALUES\r
1053 *       Pointer to the QP type string.\r
1054 *\r
1055 * NOTES\r
1056 *\r
1057 * SEE ALSO\r
1058 * ib_qp_type_t\r
1059 *********/\r
1060 \r
1061 /****d* Access Layer/ib_access_t\r
1062 * NAME\r
1063 *       ib_access_t\r
1064 *\r
1065 * DESCRIPTION\r
1066 *       Indicates the type of access is permitted on resources such as QPs,\r
1067 *       memory regions and memory windows.\r
1068 *\r
1069 * SYNOPSIS\r
1070 */\r
1071 typedef uint32_t                                ib_access_t;\r
1072 #define IB_AC_RDMA_READ                 0x00000001\r
1073 #define IB_AC_RDMA_WRITE                0x00000002\r
1074 #define IB_AC_ATOMIC                    0x00000004\r
1075 #define IB_AC_LOCAL_WRITE               0x00000008\r
1076 #define IB_AC_MW_BIND                   0x00000010\r
1077 /*\r
1078 * NOTES\r
1079 *       Users may combine access rights using a bit-wise or operation to specify\r
1080 *       additional access.  For example: IB_AC_RDMA_READ | IB_AC_RDMA_WRITE grants\r
1081 *       RDMA read and write access.\r
1082 *****/\r
1083 \r
1084 \r
1085 /****d* Access Layer/ib_qp_state_t\r
1086 * NAME\r
1087 *       ib_qp_state_t\r
1088 *\r
1089 * DESCRIPTION\r
1090 *       Indicates or sets the state of a queue pair.  The current state of a queue\r
1091 *       pair is returned through the ib_qp_query call and set via the\r
1092 *       ib_qp_modify call.\r
1093 *\r
1094 * SYNOPSIS\r
1095 */\r
1096 typedef uint32_t                                ib_qp_state_t;\r
1097 #define IB_QPS_RESET                    0x00000001\r
1098 #define IB_QPS_INIT                             0x00000002\r
1099 #define IB_QPS_RTR                              0x00000004\r
1100 #define IB_QPS_RTS                              0x00000008\r
1101 #define IB_QPS_SQD                              0x00000010\r
1102 #define IB_QPS_SQD_DRAINING             0x00000030\r
1103 #define IB_QPS_SQD_DRAINED              0x00000050\r
1104 #define IB_QPS_SQERR                    0x00000080\r
1105 #define IB_QPS_ERROR                    0x00000100\r
1106 #define IB_QPS_TIME_WAIT                0xDEAD0000      /* InfiniBand Access Layer */\r
1107 /*****/\r
1108 \r
1109 \r
1110 /****d* Access Layer/ib_apm_state_t\r
1111 * NAME\r
1112 *       ib_apm_state_t\r
1113 *\r
1114 * DESCRIPTION\r
1115 *       The current automatic path migration state of a queue pair\r
1116 *\r
1117 * SYNOPSIS\r
1118 */\r
1119 typedef enum _ib_apm_state\r
1120 {\r
1121         IB_APM_MIGRATED = 1,\r
1122         IB_APM_REARM,\r
1123         IB_APM_ARMED\r
1124 \r
1125 }       ib_apm_state_t;\r
1126 /*****/\r
1127 \r
1128 /****d* Access Layer/ib_srq_attr_mask_t\r
1129 * NAME\r
1130 *       ib_srq_attr_mask_t\r
1131 *\r
1132 * DESCRIPTION\r
1133 *       Indicates valid fields in ib_srq_attr_t structure\r
1134 *\r
1135 * SYNOPSIS\r
1136 */\r
1137 typedef enum _ib_srq_attr_mask {\r
1138         IB_SRQ_MAX_WR   = 1 << 0,\r
1139         IB_SRQ_LIMIT    = 1 << 1,\r
1140 } ib_srq_attr_mask_t;\r
1141 /*****/\r
1142 \r
1143 \r
1144 /****s* Access Layer/ib_srq_attr_t\r
1145 * NAME\r
1146 *       ib_srq_attr_t\r
1147 *\r
1148 * DESCRIPTION\r
1149 *       Attributes used to initialize a shared queue pair at creation time.\r
1150 *\r
1151 * SYNOPSIS\r
1152 */\r
1153 typedef struct _ib_srq_attr {\r
1154         uint32_t                                max_wr;\r
1155         uint32_t                                max_sge;\r
1156         uint32_t                                srq_limit;\r
1157 } ib_srq_attr_t;\r
1158 /*\r
1159 * FIELDS\r
1160 *       max_wr\r
1161 *               Specifies the max number of work request on SRQ.\r
1162 *\r
1163 *       max_sge\r
1164 *               Specifies the max number of scatter/gather elements in one work request.\r
1165 *\r
1166 *       srq_limit\r
1167 *               Specifies the low water mark for SRQ.\r
1168 *\r
1169 * SEE ALSO\r
1170 *       ib_qp_type_t, ib_srq_attr_mask_t\r
1171 *****/\r
1172 \r
1173 \r
1174 \r
1175 /****s* Access Layer/ib_qp_create_t\r
1176 * NAME\r
1177 *       ib_qp_create_t\r
1178 *\r
1179 * DESCRIPTION\r
1180 *       Attributes used to initialize a queue pair at creation time.\r
1181 *\r
1182 * SYNOPSIS\r
1183 */\r
1184 typedef struct _ib_qp_create\r
1185 {\r
1186         ib_qp_type_t                    qp_type;\r
1187 \r
1188         uint32_t                                sq_max_inline;\r
1189         uint32_t                                sq_depth;\r
1190         uint32_t                                rq_depth;\r
1191         uint32_t                                sq_sge;\r
1192         uint32_t                                rq_sge;\r
1193 \r
1194         TO_LONG_PTR(ib_cq_handle_t, h_sq_cq);\r
1195         TO_LONG_PTR(ib_cq_handle_t, h_rq_cq);\r
1196         TO_LONG_PTR(ib_srq_handle_t, h_srq);\r
1197 \r
1198         boolean_t                               sq_signaled;\r
1199 \r
1200 }       ib_qp_create_t;\r
1201 /*\r
1202 * FIELDS\r
1203 *       type\r
1204 *               Specifies the type of queue pair to create.\r
1205 *\r
1206 *       sq_max_inline\r
1207 *               Maximum payload that can be inlined directly in a WQE, eliminating\r
1208 *               protection checks and additional DMA operations.\r
1209 *\r
1210 *       sq_depth\r
1211 *               Indicates the requested maximum number of work requests that may be\r
1212 *               outstanding on the queue pair's send queue.  This value must be less\r
1213 *               than or equal to the maximum reported by the channel adapter associated\r
1214 *               with the queue pair.\r
1215 *\r
1216 *       rq_depth\r
1217 *               Indicates the requested maximum number of work requests that may be\r
1218 *               outstanding on the queue pair's receive queue.  This value must be less\r
1219 *               than or equal to the maximum reported by the channel adapter associated\r
1220 *               with the queue pair.\r
1221 *\r
1222 *       sq_sge\r
1223 *               Indicates the maximum number scatter-gather elements that may be\r
1224 *               given in a send work request.  This value must be less\r
1225 *               than or equal to the maximum reported by the channel adapter associated\r
1226 *               with the queue pair.\r
1227 *\r
1228 *       rq_sge\r
1229 *               Indicates the maximum number scatter-gather elements that may be\r
1230 *               given in a receive work request.  This value must be less\r
1231 *               than or equal to the maximum reported by the channel adapter associated\r
1232 *               with the queue pair.\r
1233 *\r
1234 *       h_sq_cq\r
1235 *               A handle to the completion queue that will be used to report send work\r
1236 *               request completions.  This handle must be NULL if the type is\r
1237 *               IB_QPT_MAD, IB_QPT_QP0_ALIAS, or IB_QPT_QP1_ALIAS.\r
1238 *\r
1239 *       h_rq_cq\r
1240 *               A handle to the completion queue that will be used to report receive\r
1241 *               work request completions.  This handle must be NULL if the type is\r
1242 *               IB_QPT_MAD, IB_QPT_QP0_ALIAS, or IB_QPT_QP1_ALIAS.\r
1243 *\r
1244 *       h_srq\r
1245 *               A handle to an SRQ to get receive completions via. Must be coded NULL \r
1246 *               when QP is not associated with SRQ\r
1247 *\r
1248 *       sq_signaled\r
1249 *               A flag that is used to indicate whether the queue pair will signal\r
1250 *               an event upon completion of a send work request.  If set to\r
1251 *               TRUE, send work requests will always generate a completion\r
1252 *               event.  If set to FALSE, a completion event will only be\r
1253 *               generated if the send_opt field of the send work request has the\r
1254 *               IB_SEND_OPT_SIGNALED flag set.\r
1255 *\r
1256 * SEE ALSO\r
1257 *       ib_qp_type_t, ib_qp_attr_t\r
1258 *****/\r
1259 \r
1260 \r
1261 /****s* Access Layer/ib_qp_attr_t\r
1262 * NAME\r
1263 *       ib_qp_attr_t\r
1264 *\r
1265 * DESCRIPTION\r
1266 *       Queue pair attributes returned through ib_query_qp.\r
1267 *\r
1268 * SYNOPSIS\r
1269 */\r
1270 typedef struct _ib_qp_attr\r
1271 {\r
1272         TO_LONG_PTR(ib_pd_handle_t, h_pd);\r
1273         ib_qp_type_t                    qp_type;\r
1274         ib_access_t                             access_ctrl;\r
1275         uint16_t                                pkey_index;\r
1276 \r
1277         uint32_t                                sq_max_inline;\r
1278         uint32_t                                sq_depth;\r
1279         uint32_t                                rq_depth;\r
1280         uint32_t                                sq_sge;\r
1281         uint32_t                                rq_sge;\r
1282         uint8_t                                 init_depth;\r
1283         uint8_t                                 resp_res;\r
1284 \r
1285         TO_LONG_PTR(ib_cq_handle_t, h_sq_cq);\r
1286         TO_LONG_PTR(ib_cq_handle_t, h_rq_cq);\r
1287         TO_LONG_PTR(ib_srq_handle_t,h_srq);\r
1288 \r
1289         boolean_t                               sq_signaled;\r
1290 \r
1291         ib_qp_state_t                   state;\r
1292         ib_net32_t                              num;\r
1293         ib_net32_t                              dest_num;\r
1294         ib_net32_t                              qkey;\r
1295 \r
1296         ib_net32_t                              sq_psn;\r
1297         ib_net32_t                              rq_psn;\r
1298 \r
1299         uint8_t                                 primary_port;\r
1300         uint8_t                                 alternate_port;\r
1301         ib_av_attr_t                    primary_av;\r
1302         ib_av_attr_t                    alternate_av;\r
1303         ib_apm_state_t                  apm_state;\r
1304 \r
1305 }       ib_qp_attr_t;\r
1306 /*\r
1307 * FIELDS\r
1308 *       h_pd\r
1309 *               This is a handle to a protection domain associated with the QP.\r
1310 *\r
1311 *       sq_max_inline\r
1312 *               Maximum payload that can be inlined directly in a WQE, eliminating\r
1313 *               protection checks and additional DMA operations.\r
1314 *\r
1315 * NOTES\r
1316 *       Other fields are defined by the Infiniband specification.\r
1317 *\r
1318 * SEE ALSO\r
1319 *       ib_qp_type_t, ib_access_t, ib_qp_state_t, ib_av_attr_t, ib_apm_state_t\r
1320 *****/\r
1321 \r
1322 \r
1323 /****d* Access Layer/ib_qp_opts_t\r
1324 * NAME\r
1325 *       ib_qp_opts_t\r
1326 *\r
1327 * DESCRIPTION\r
1328 *       Optional fields supplied in the modify QP operation.\r
1329 *\r
1330 * SYNOPSIS\r
1331 */\r
1332 typedef uint32_t                                ib_qp_opts_t;\r
1333 #define IB_MOD_QP_ALTERNATE_AV          0x00000001\r
1334 #define IB_MOD_QP_PKEY                          0x00000002\r
1335 #define IB_MOD_QP_APM_STATE                     0x00000004\r
1336 #define IB_MOD_QP_PRIMARY_AV            0x00000008\r
1337 #define IB_MOD_QP_RNR_NAK_TIMEOUT       0x00000010\r
1338 #define IB_MOD_QP_RESP_RES                      0x00000020\r
1339 #define IB_MOD_QP_INIT_DEPTH            0x00000040\r
1340 #define IB_MOD_QP_PRIMARY_PORT          0x00000080\r
1341 #define IB_MOD_QP_ACCESS_CTRL           0x00000100\r
1342 #define IB_MOD_QP_QKEY                          0x00000200\r
1343 #define IB_MOD_QP_SQ_DEPTH                      0x00000400\r
1344 #define IB_MOD_QP_RQ_DEPTH                      0x00000800\r
1345 #define IB_MOD_QP_CURRENT_STATE         0x00001000\r
1346 #define IB_MOD_QP_RETRY_CNT                     0x00002000\r
1347 #define IB_MOD_QP_LOCAL_ACK_TIMEOUT     0x00004000\r
1348 #define IB_MOD_QP_RNR_RETRY_CNT         0x00008000\r
1349 \r
1350 /*\r
1351 * SEE ALSO\r
1352 *       ib_qp_mod_t\r
1353 *****/\r
1354 \r
1355 \r
1356 /****s* Access Layer/ib_qp_mod_t\r
1357 * NAME\r
1358 *       ib_qp_mod_t\r
1359 *\r
1360 * DESCRIPTION\r
1361 *       Information needed to change the state of a queue pair through the\r
1362 *       ib_modify_qp call.\r
1363 *\r
1364 * SYNOPSIS\r
1365 */\r
1366 typedef struct _ib_qp_mod\r
1367 {\r
1368         ib_qp_state_t                           req_state;\r
1369 \r
1370         union _qp_state\r
1371         {\r
1372                 struct _qp_init\r
1373                 {\r
1374                         uint8_t                         primary_port;\r
1375                         ib_net32_t                      qkey;\r
1376                         uint16_t                        pkey_index;\r
1377                         ib_access_t                     access_ctrl;\r
1378 \r
1379                 }       init;\r
1380 \r
1381                 struct _qp_rtr\r
1382                 {\r
1383                         ib_net32_t                      rq_psn;\r
1384                         ib_net32_t                      dest_qp;\r
1385                         ib_av_attr_t            primary_av;\r
1386                         uint8_t                         resp_res;\r
1387                         uint8_t                         rnr_nak_timeout;\r
1388 \r
1389                         ib_qp_opts_t            opts;\r
1390                         ib_av_attr_t            alternate_av;\r
1391                         ib_net32_t                      qkey;\r
1392                         uint16_t                        pkey_index;\r
1393                         ib_access_t                     access_ctrl;\r
1394                         uint32_t                        sq_depth;\r
1395                         uint32_t                        rq_depth;\r
1396 \r
1397                 }       rtr;\r
1398 \r
1399                 struct _qp_rts\r
1400                 {\r
1401                         ib_net32_t                      sq_psn;\r
1402                         uint8_t                         retry_cnt;\r
1403                         uint8_t                         rnr_retry_cnt;\r
1404                         uint8_t                         local_ack_timeout;\r
1405                         uint8_t                         init_depth;\r
1406 \r
1407                         ib_qp_opts_t            opts;\r
1408                         uint8_t                         rnr_nak_timeout;\r
1409                         ib_qp_state_t           current_state;\r
1410                         ib_net32_t                      qkey;\r
1411                         ib_access_t                     access_ctrl;\r
1412                         uint8_t                         resp_res;\r
1413 \r
1414                         ib_av_attr_t            primary_av;\r
1415                         ib_av_attr_t            alternate_av;\r
1416 \r
1417                         uint32_t                        sq_depth;\r
1418                         uint32_t                        rq_depth;\r
1419 \r
1420                         ib_apm_state_t          apm_state;\r
1421                         uint8_t                         primary_port;\r
1422                         uint16_t                        pkey_index;\r
1423 \r
1424                 }       rts;\r
1425 \r
1426                 struct _qp_sqd\r
1427                 {\r
1428                         boolean_t                       sqd_event;\r
1429 \r
1430                 }       sqd;\r
1431 \r
1432         }       state;\r
1433 \r
1434 }       ib_qp_mod_t;\r
1435 /*\r
1436 * SEE ALSO\r
1437 *       ib_qp_state_t, ib_access_t, ib_av_attr_t, ib_apm_state_t\r
1438 *****/\r
1439 \r
1440 \r
1441 /****d* Access Layer/ib_wr_type_t\r
1442 * NAME\r
1443 *       ib_wr_type_t\r
1444 *\r
1445 * DESCRIPTION\r
1446 *       Identifies the type of work request posted to a queue pair.\r
1447 *\r
1448 * SYNOPSIS\r
1449 */\r
1450 typedef enum _ib_wr_type_t\r
1451 {\r
1452         WR_SEND,\r
1453         WR_RDMA_WRITE,\r
1454         WR_RDMA_READ,\r
1455         WR_COMPARE_SWAP,\r
1456         WR_FETCH_ADD,\r
1457         WR_LSO,\r
1458         WR_UNKNOWN\r
1459 \r
1460 }       ib_wr_type_t;\r
1461 /*****/\r
1462 \r
1463 \r
1464 /****f* IBA Base: Types/ib_get_wr_type_str\r
1465 * NAME\r
1466 *       ib_get_wr_type_str\r
1467 *\r
1468 * DESCRIPTION\r
1469 *       Returns a string for the specified work request type\r
1470 *\r
1471 * SYNOPSIS\r
1472 */\r
1473 AL_EXPORT const char* AL_API\r
1474 ib_get_wr_type_str(\r
1475         IN                              uint8_t                                         wr_type );\r
1476 \r
1477 /*\r
1478 * PARAMETERS\r
1479 *       wr_type\r
1480 *               [in] Encoded work request type as defined in the\r
1481 work request attribute.\r
1482 \r
1483 * RETURN VALUES\r
1484 *       Pointer to the work request type string.\r
1485 *\r
1486 * NOTES\r
1487 *\r
1488 * SEE ALSO\r
1489 * ib_wr_type_t\r
1490 *********/\r
1491 \r
1492 \r
1493 /****s* Access Layer/ib_local_ds_t\r
1494 * NAME\r
1495 *       ib_local_ds_t\r
1496 *\r
1497 * DESCRIPTION\r
1498 *       Local data segment information referenced by send and receive work\r
1499 *       requests.  This is used to specify local data buffers used as part of a\r
1500 *       work request.\r
1501 *\r
1502 * SYNOPSIS\r
1503 */\r
1504 typedef struct _ib_local_ds\r
1505 {\r
1506         uint64_t                                vaddr;\r
1507         uint32_t                                length;\r
1508         uint32_t                                lkey;\r
1509 \r
1510 }       ib_local_ds_t;\r
1511 /*****/\r
1512 \r
1513 \r
1514 /****d* Access Layer/ib_send_opt_t\r
1515 * NAME\r
1516 *       ib_send_opt_t\r
1517 *\r
1518 * DESCRIPTION\r
1519 *       Optional flags used when posting send work requests.  These flags\r
1520 *       indicate specific processing for the send operation.\r
1521 *\r
1522 * SYNOPSIS\r
1523 */\r
1524 typedef uint32_t                                        ib_send_opt_t;\r
1525 #define IB_SEND_OPT_IMMEDIATE           0x00000001\r
1526 #define IB_SEND_OPT_FENCE                       0x00000002\r
1527 #define IB_SEND_OPT_SIGNALED            0x00000004\r
1528 #define IB_SEND_OPT_SOLICITED           0x00000008\r
1529 #define IB_SEND_OPT_INLINE                      0x00000010\r
1530 #define IB_SEND_OPT_LOCAL                       0x00000020\r
1531 #define IB_SEND_OPT_TX_IP_CSUM          0x00000040\r
1532 #define IB_SEND_OPT_TX_TCP_UDP_CSUM     0x00000080\r
1533 \r
1534 #define IB_SEND_OPT_VEND_MASK           0xFFFF0000\r
1535 /*\r
1536 * VALUES\r
1537 *       The following flags determine the behavior of a work request when\r
1538 *       posted to the send side.\r
1539 *\r
1540 *       IB_SEND_OPT_IMMEDIATE\r
1541 *               Send immediate data with the given request.\r
1542 *\r
1543 *       IB_SEND_OPT_FENCE\r
1544 *               The operation is fenced.  Complete all pending send operations\r
1545 *               before processing this request.\r
1546 *\r
1547 *       IB_SEND_OPT_SIGNALED\r
1548 *               If the queue pair is configured for signaled completion, then\r
1549 *               generate a completion queue entry when this request completes.\r
1550 *\r
1551 *       IB_SEND_OPT_SOLICITED\r
1552 *               Set the solicited bit on the last packet of this request.\r
1553 *\r
1554 *       IB_SEND_OPT_INLINE\r
1555 *               Indicates that the requested send data should be copied into a VPD\r
1556 *               owned data buffer.  This flag permits the user to issue send operations\r
1557 *               without first needing to register the buffer(s) associated with the\r
1558 *               send operation.  Verb providers that support this operation may place\r
1559 *               vendor specific restrictions on the size of send operation that may\r
1560 *               be performed as inline.\r
1561 *\r
1562 *\r
1563 *       IB_SEND_OPT_LOCAL\r
1564 *               Indicates that a sent MAD request should be given to the local VPD for\r
1565 *               processing.  MADs sent using this option are not placed on the wire.\r
1566 *               This send option is only valid for MAD send operations.\r
1567 *\r
1568 *\r
1569 *       IB_SEND_OPT_VEND_MASK\r
1570 *               This mask indicates bits reserved in the send options that may be used\r
1571 *               by the verbs provider to indicate vendor specific options.  Bits set\r
1572 *               in this area of the send options are ignored by the Access Layer, but\r
1573 *               may have specific meaning to the underlying VPD.\r
1574 *\r
1575 *****/\r
1576 \r
1577 \r
1578 /****s* Access Layer/ib_send_wr_t\r
1579 * NAME\r
1580 *       ib_send_wr_t\r
1581 *\r
1582 * DESCRIPTION\r
1583 *       Information used to submit a work request to the send queue of a queue\r
1584 *       pair.\r
1585 *\r
1586 * SYNOPSIS\r
1587 */\r
1588 typedef struct _ib_send_wr\r
1589 {\r
1590         uint64_t                                        wr_id;\r
1591         struct _ib_send_wr*                     p_next;\r
1592         ib_local_ds_t*                          ds_array;\r
1593         uint32_t                                        num_ds;\r
1594         ib_wr_type_t                            wr_type;\r
1595         ib_send_opt_t                           send_opt;\r
1596         ib_net32_t                                      immediate_data;\r
1597 \r
1598         union\r
1599         {\r
1600                 union _send_dgrm\r
1601                 {\r
1602                         struct _send_ud\r
1603                         {\r
1604                                 ib_av_handle_t  h_av; \r
1605                                 ib_net32_t              remote_qp;\r
1606                                 ib_net32_t              remote_qkey;\r
1607                                 void*                   rsvd;\r
1608                                 uint16_t                pkey_index;\r
1609                                 void*                   header;\r
1610                                 int                             hlen;\r
1611                                 int                             mss;\r
1612                         }       ud;\r
1613 \r
1614                         struct _send_rd\r
1615                         {\r
1616                                 ib_net32_t              remote_qp;\r
1617                                 ib_net32_t              remote_qkey;\r
1618                                 ib_net32_t              eecn;\r
1619 \r
1620                         }       rd;\r
1621 \r
1622                         struct _send_raw_ether\r
1623                         {\r
1624                                 ib_net16_t              dest_lid;\r
1625                                 uint8_t                 path_bits;\r
1626                                 uint8_t                 sl;\r
1627                                 uint8_t                 max_static_rate;\r
1628                                 ib_net16_t              ether_type;\r
1629         \r
1630                         }       raw_ether;\r
1631 \r
1632                         struct _send_raw_ipv6\r
1633                         {\r
1634                                 ib_net16_t              dest_lid;\r
1635                                 uint8_t                 path_bits;\r
1636                                 uint8_t                 sl;\r
1637                                 uint8_t                 max_static_rate;\r
1638         \r
1639                         }       raw_ipv6;\r
1640         \r
1641                 }       dgrm;\r
1642 \r
1643                 struct _send_remote_ops\r
1644                 {\r
1645                         uint64_t                        vaddr;\r
1646                         net32_t                         rkey;\r
1647 \r
1648                         ib_net64_t                      atomic1;\r
1649                         ib_net64_t                      atomic2;\r
1650         \r
1651                 }       remote_ops;\r
1652         };\r
1653 }       ib_send_wr_t;\r
1654 /*\r
1655 * FIELDS\r
1656 *       p_next\r
1657 *               A pointer used to chain work requests together.  This permits multiple\r
1658 *               work requests to be posted to a queue pair through a single function\r
1659 *               call.  This value is set to NULL to mark the end of the chain.\r
1660 *\r
1661 *       wr_id\r
1662 *               A 64-bit work request identifier that is returned to the consumer\r
1663 *               as part of the work completion.\r
1664 *\r
1665 *       wr_type\r
1666 *               The type of work request being submitted to the send queue.\r
1667 *\r
1668 *       send_opt\r
1669 *               Optional send control parameters.\r
1670 *\r
1671 *       num_ds\r
1672 *               Number of local data segments specified by this work request.\r
1673 *\r
1674 *       ds_array\r
1675 *               A reference to an array of local data segments used by the send\r
1676 *               operation.\r
1677 *\r
1678 *       immediate_data\r
1679 *               32-bit field sent as part of a message send or RDMA write operation.\r
1680 *               This field is only valid if the send_opt flag IB_SEND_OPT_IMMEDIATE\r
1681 *               has been set.\r
1682 *\r
1683 *       dgrm.ud.remote_qp\r
1684 *               Identifies the destination queue pair of an unreliable datagram send\r
1685 *               operation.\r
1686 *\r
1687 *       dgrm.ud.remote_qkey\r
1688 *               The qkey for the destination queue pair.\r
1689 *\r
1690 *       dgrm.ud.h_av\r
1691 *               An address vector that specifies the path information used to route\r
1692 *               the outbound datagram to the destination queue pair.\r
1693 *\r
1694 *       dgrm.ud.pkey_index\r
1695 *               The pkey index for this send work request.  This is valid only\r
1696 *               for IB_QPT_QP1 and IB_QPT_QP1_ALIAS QP types.  The work request\r
1697 *               is posted to using this pkey index build the GMP's BTH instead\r
1698 *               of the QP's pkey.\r
1699 *\r
1700 *       dgrm.ud.rsvd\r
1701 *               Reserved for use by the Access Layer.\r
1702 *\r
1703 *       dgrm.raw_ether.dest_lid\r
1704 *               The destination LID that will receive this raw ether send.\r
1705 *\r
1706 *       dgrm.raw_ether.path_bits\r
1707 *               path bits...\r
1708 *\r
1709 *       dgrm.raw_ether.sl\r
1710 *               service level...\r
1711 *\r
1712 *       dgrm.raw_ether.max_static_rate\r
1713 *               static rate...\r
1714 *\r
1715 *       dgrm.raw_ether.ether_type\r
1716 *               ether type...\r
1717 *\r
1718 *       dgrm.raw_ipv6.dest_lid\r
1719 *               The destination LID that will receive this raw ether send.\r
1720 *\r
1721 *       dgrm.raw_ipv6.path_bits\r
1722 *               path bits...\r
1723 *\r
1724 *       dgrm.raw_ipv6.sl\r
1725 *               service level...\r
1726 *\r
1727 *       dgrm.raw_ipv6.max_static_rate\r
1728 *               static rate...\r
1729 *\r
1730 *       remote_ops.vaddr\r
1731 *               The registered virtual memory address of the remote memory to access\r
1732 *               with an RDMA or atomic operation.\r
1733 *\r
1734 *       remote_ops.rkey\r
1735 *               The rkey associated with the specified remote vaddr. This data must\r
1736 *               be presented exactly as obtained from the remote node. No swapping\r
1737 *               of data must be performed.\r
1738 *\r
1739 *       atomic1\r
1740 *               The first operand for an atomic operation.\r
1741 *\r
1742 *       atomic2\r
1743 *               The second operand for an atomic operation.\r
1744 *\r
1745 * NOTES\r
1746 *       The format of data sent over the fabric is user-defined and is considered\r
1747 *       opaque to the access layer.  The sole exception to this are MADs posted\r
1748 *       to a MAD QP service.  MADs are expected to match the format defined by\r
1749 *       the Infiniband specification and must be in network-byte order when posted\r
1750 *       to the MAD QP service.\r
1751 *\r
1752 * SEE ALSO\r
1753 *       ib_wr_type_t, ib_local_ds_t, ib_send_opt_t\r
1754 *****/\r
1755 \r
1756 \r
1757 /****s* Access Layer/ib_recv_wr_t\r
1758 * NAME\r
1759 *       ib_recv_wr_t\r
1760 *\r
1761 * DESCRIPTION\r
1762 *       Information used to submit a work request to the receive queue of a queue\r
1763 *       pair.\r
1764 *\r
1765 * SYNOPSIS\r
1766 */\r
1767 typedef struct _ib_recv_wr\r
1768 {\r
1769         TO_LONG_PTR(struct _ib_recv_wr*, p_next);\r
1770         uint64_t                                        wr_id;\r
1771         uint32_t                                        num_ds;\r
1772         TO_LONG_PTR(ib_local_ds_t*,     ds_array);\r
1773 \r
1774 }       ib_recv_wr_t;\r
1775 /*\r
1776 * FIELDS\r
1777 *       p_next\r
1778 *               A pointer used to chain work requests together.  This permits multiple\r
1779 *               work requests to be posted to a queue pair through a single function\r
1780 *               call.  This value is set to NULL to mark the end of the chain.\r
1781 *\r
1782 *       wr_id\r
1783 *               A 64-bit work request identifier that is returned to the consumer\r
1784 *               as part of the work completion.\r
1785 *\r
1786 *       num_ds\r
1787 *               Number of local data segments specified by this work request.\r
1788 *\r
1789 *       ds_array\r
1790 *               A reference to an array of local data segments used by the send\r
1791 *               operation.\r
1792 *\r
1793 * SEE ALSO\r
1794 *       ib_local_ds_t\r
1795 *****/\r
1796 \r
1797 \r
1798 /****s* Access Layer/ib_bind_wr_t\r
1799 * NAME\r
1800 *       ib_bind_wr_t\r
1801 *\r
1802 * DESCRIPTION\r
1803 *       Information used to submit a memory window bind work request to the send\r
1804 *       queue of a queue pair.\r
1805 *\r
1806 * SYNOPSIS\r
1807 */\r
1808 typedef struct _ib_bind_wr\r
1809 {\r
1810         uint64_t                                wr_id;\r
1811         ib_send_opt_t                   send_opt;\r
1812 \r
1813         TO_LONG_PTR(ib_mr_handle_t, h_mr);\r
1814         ib_access_t                             access_ctrl;\r
1815         net32_t                                 current_rkey;\r
1816 \r
1817         ib_local_ds_t                   local_ds;\r
1818 \r
1819 }       ib_bind_wr_t;\r
1820 /*\r
1821 * FIELDS\r
1822 *       wr_id\r
1823 *               A 64-bit work request identifier that is returned to the consumer\r
1824 *               as part of the work completion.\r
1825 *\r
1826 *       send_opt\r
1827 *               Optional send control parameters.\r
1828 *\r
1829 *       h_mr\r
1830 *               Handle to the memory region to which this window is being bound.\r
1831 *\r
1832 *       access_ctrl\r
1833 *               Access rights for this memory window.\r
1834 *\r
1835 *       current_rkey\r
1836 *               The current rkey assigned to this window for remote access.\r
1837 *\r
1838 *       local_ds\r
1839 *               A reference to a local data segment used by the bind operation.\r
1840 *\r
1841 * SEE ALSO\r
1842 *       ib_send_opt_t, ib_access_t, ib_local_ds_t\r
1843 *****/\r
1844 \r
1845 \r
1846 /****d* Access Layer/ib_wc_status_t\r
1847 * NAME\r
1848 *       ib_wc_status_t\r
1849 *\r
1850 * DESCRIPTION\r
1851 *       Indicates the status of a completed work request.  These VALUES are\r
1852 *       returned to the user when retrieving completions.  Note that success is\r
1853 *       identified as IB_WCS_SUCCESS, which is always zero.\r
1854 *\r
1855 * SYNOPSIS\r
1856 */\r
1857 typedef enum _ib_wc_status_t\r
1858 {\r
1859         IB_WCS_SUCCESS,\r
1860         IB_WCS_LOCAL_LEN_ERR,\r
1861         IB_WCS_LOCAL_OP_ERR,\r
1862         IB_WCS_LOCAL_PROTECTION_ERR,\r
1863         IB_WCS_WR_FLUSHED_ERR,\r
1864         IB_WCS_MEM_WINDOW_BIND_ERR,\r
1865         IB_WCS_REM_ACCESS_ERR,\r
1866         IB_WCS_REM_OP_ERR,\r
1867         IB_WCS_RNR_RETRY_ERR,\r
1868         IB_WCS_TIMEOUT_RETRY_ERR,\r
1869         IB_WCS_REM_INVALID_REQ_ERR,\r
1870         IB_WCS_BAD_RESP_ERR,\r
1871         IB_WCS_LOCAL_ACCESS_ERR,\r
1872         IB_WCS_GENERAL_ERR,\r
1873         IB_WCS_UNMATCHED_RESPONSE,                      /* InfiniBand Access Layer */\r
1874         IB_WCS_CANCELED,                                        /* InfiniBand Access Layer */\r
1875         IB_WCS_REM_ABORT_ERR,\r
1876         IB_WCS_UNKNOWN                                          /* Must be last. */\r
1877 \r
1878 }       ib_wc_status_t;\r
1879 \r
1880 /*\r
1881 * VALUES\r
1882 *       IB_WCS_SUCCESS\r
1883 *               Work request completed successfully.\r
1884 *\r
1885 *       IB_WCS_MAD\r
1886 *               The completed work request was associated with a managmenet datagram\r
1887 *               that requires post processing.  The MAD will be returned to the user\r
1888 *               through a callback once all post processing has completed.\r
1889 *\r
1890 *       IB_WCS_LOCAL_LEN_ERR\r
1891 *               Generated for a work request posted to the send queue when the\r
1892 *               total of the data segment lengths exceeds the message length of the\r
1893 *               channel.  Generated for a work request posted to the receive queue when\r
1894 *               the total of the data segment lengths is too small for a\r
1895 *               valid incoming message.\r
1896 *\r
1897 *       IB_WCS_LOCAL_OP_ERR\r
1898 *               An internal QP consistency error was generated while processing this\r
1899 *               work request.  This may indicate that the QP was in an incorrect state\r
1900 *               for the requested operation.\r
1901 *\r
1902 *       IB_WCS_LOCAL_PROTECTION_ERR\r
1903 *               The data segments of the locally posted work request did not refer to\r
1904 *               a valid memory region.  The memory may not have been properly\r
1905 *               registered for the requested operation.\r
1906 *\r
1907 *       IB_WCS_WR_FLUSHED_ERR\r
1908 *               The work request was flushed from the QP before being completed.\r
1909 *\r
1910 *       IB_WCS_MEM_WINDOW_BIND_ERR\r
1911 *               A memory window bind operation failed due to insufficient access\r
1912 *               rights.\r
1913 *\r
1914 *       IB_WCS_REM_ACCESS_ERR,\r
1915 *               A protection error was detected at the remote node for a RDMA or atomic\r
1916 *               operation.\r
1917 *\r
1918 *       IB_WCS_REM_OP_ERR,\r
1919 *               The operation could not be successfully completed at the remote node.\r
1920 *               This may indicate that the remote QP was in an invalid state or\r
1921 *               contained an invalid work request.\r
1922 *\r
1923 *       IB_WCS_RNR_RETRY_ERR,\r
1924 *               The RNR retry count was exceeded while trying to send this message.\r
1925 *\r
1926 *       IB_WCS_TIMEOUT_RETRY_ERR\r
1927 *               The local transport timeout counter expired while trying to send this\r
1928 *               message.\r
1929 *\r
1930 *       IB_WCS_REM_INVALID_REQ_ERR,\r
1931 *               The remote node detected an invalid message on the channel.  This error\r
1932 *               is usually a result of one of the following:\r
1933 *                       - The operation was not supported on receive queue.\r
1934 *                       - There was insufficient buffers to receive a new RDMA request.\r
1935 *                       - There was insufficient buffers to receive a new atomic operation.\r
1936 *                       - An RDMA request was larger than 2^31 bytes.\r
1937 *\r
1938 *       IB_WCS_BAD_RESP_ERR,\r
1939 *               An unexpected transport layer opcode was returned\r
1940 *               by the responder.\r
1941 *\r
1942 *       IB_WCS_LOCAL_ACCESS_ERR,\r
1943 *               A protection error occurred on a local data buffer\r
1944 *               during the processing of a RDMA Write with Immediate Data \r
1945 *               operation sent from the remote node.\r
1946 *\r
1947 *       IB_WCS_REM_ABORT_ERR,\r
1948 *               The operation was aborted (e.g., For UD QPs associated with an SRQ, \r
1949 *               the responder aborted the operation).\r
1950 *\r
1951 *       IB_WCS_REM_ABORT_ERR,\r
1952 *               The operation was aborted (e.g., For UD QPs associated with an SRQ, \r
1953 *               the responder aborted the operation).\r
1954 *\r
1955 *       IB_WCS_UNMATCHED_RESPONSE\r
1956 *               A response MAD was received for which there was no matching send.  The\r
1957 *               send operation may have been canceled by the user or may have timed\r
1958 *               out.\r
1959 *\r
1960 *       IB_WCS_CANCELED\r
1961 *               The completed work request was canceled by the user.\r
1962  *\r
1963  *      IB_WCS_GENERAL_ERR,\r
1964  *              Any other error\r
1965  *\r
1966 *****/\r
1967 \r
1968 \r
1969 \r
1970 /****f* IBA Base: Types/ib_get_wc_status_str\r
1971 * NAME\r
1972 *       ib_get_wc_status_str\r
1973 *\r
1974 * DESCRIPTION\r
1975 *       Returns a string for the specified work completion status.\r
1976 *\r
1977 * SYNOPSIS\r
1978 */\r
1979 AL_EXPORT const char* AL_API\r
1980 ib_get_wc_status_str(\r
1981         IN                              ib_wc_status_t                          wc_status );\r
1982 /*\r
1983 * PARAMETERS\r
1984 *       wc_status\r
1985 *               [in] work completion status value\r
1986 *\r
1987 * RETURN VALUES\r
1988 *       Pointer to the work completion status description string.\r
1989 *\r
1990 * NOTES\r
1991 *\r
1992 * SEE ALSO\r
1993 *********/\r
1994 \r
1995 \r
1996 /****d* Access Layer/ib_wc_type_t\r
1997 * NAME\r
1998 *       ib_wc_type_t\r
1999 *\r
2000 * DESCRIPTION\r
2001 *       Indicates the type of work completion.\r
2002 *\r
2003 * SYNOPSIS\r
2004 */\r
2005 typedef enum _ib_wc_type_t\r
2006 {\r
2007         IB_WC_SEND,\r
2008         IB_WC_RDMA_WRITE,\r
2009         IB_WC_RDMA_READ,\r
2010         IB_WC_COMPARE_SWAP,\r
2011         IB_WC_FETCH_ADD,\r
2012         IB_WC_MW_BIND,\r
2013         IB_WC_UNKNOWN1,\r
2014         IB_WC_RECV = (1 << 7),\r
2015         IB_WC_RECV_RDMA_WRITE,\r
2016         IB_WR_LSO,\r
2017         IB_WC_UNKNOWN2\r
2018 \r
2019 }       ib_wc_type_t;\r
2020 /*****/\r
2021 \r
2022 \r
2023 /****f* IBA Base: Types/ib_get_wc_type_str\r
2024 * NAME\r
2025 *       ib_get_wc_type_str\r
2026 *\r
2027 * DESCRIPTION\r
2028 *       Returns a string for the specified work completion type.\r
2029 *\r
2030 * SYNOPSIS\r
2031 */\r
2032 AL_EXPORT const char* AL_API\r
2033 ib_get_wc_type_str(\r
2034         IN                              ib_wc_type_t                            wc_type );\r
2035 /*\r
2036 * PARAMETERS\r
2037 *       wc_type\r
2038 *               [in] work completion type value\r
2039 *\r
2040 * RETURN VALUES\r
2041 *       Pointer to the work completion type description string.\r
2042 *\r
2043 * NOTES\r
2044 *\r
2045 * SEE ALSO\r
2046 *********/\r
2047 \r
2048 \r
2049 /****d* Access Layer/ib_recv_opt_t\r
2050 * NAME\r
2051 *       ib_recv_opt_t\r
2052 *\r
2053 * DESCRIPTION\r
2054 *       Indicates optional fields valid in a receive work completion.\r
2055 *\r
2056 * SYNOPSIS\r
2057 */\r
2058 typedef uint32_t                                        ib_recv_opt_t;\r
2059 #define IB_RECV_OPT_IMMEDIATE           0x00000001\r
2060 #define IB_RECV_OPT_FORWARD                     0x00000002\r
2061 #define IB_RECV_OPT_GRH_VALID           0x00000004\r
2062 #define IB_RECV_OPT_VEND_MASK           0xFFFF0000\r
2063 /*\r
2064 * VALUES\r
2065 *       IB_RECV_OPT_IMMEDIATE\r
2066 *               Indicates that immediate data is valid for this work completion.\r
2067 *\r
2068 *       IB_RECV_OPT_FORWARD\r
2069 *               Indicates that the received trap should be forwarded to the SM.\r
2070 *\r
2071 *       IB_RECV_OPT_GRH_VALID\r
2072 *               Indicates presence of the global route header. When set, the first\r
2073 *               40 bytes received are the GRH.\r
2074 *\r
2075 *       IB_RECV_OPT_VEND_MASK\r
2076 *               This mask indicates bits reserved in the receive options that may be\r
2077 *               used by the verbs provider to indicate vendor specific options.  Bits\r
2078 *               set in this area of the receive options are ignored by the Access Layer,\r
2079 *               but may have specific meaning to the underlying VPD.\r
2080 *****/\r
2081 \r
2082 \r
2083 /****s* Access Layer/ib_wc_t\r
2084 * NAME\r
2085 *       ib_wc_t\r
2086 *\r
2087 * DESCRIPTION\r
2088 *       Work completion information.\r
2089 *\r
2090 * SYNOPSIS\r
2091 */\r
2092 typedef struct _ib_wc\r
2093 {\r
2094         TO_LONG_PTR(struct _ib_wc*, p_next);\r
2095         uint64_t                                wr_id;\r
2096         ib_wc_type_t                    wc_type;\r
2097 \r
2098         uint32_t                                length;\r
2099         struct {\r
2100                 uint8_t                         vendor_specific;\r
2101                 uint8_t                         csum_ok;\r
2102                 uint16_t                        vendor_specific2;\r
2103                 uint32_t                        vendor_specific3;\r
2104         };\r
2105         ib_wc_status_t                  status;\r
2106 \r
2107         union _wc_recv\r
2108         {\r
2109                 struct _wc_conn\r
2110                 {\r
2111                         ib_recv_opt_t   recv_opt;\r
2112                         ib_net32_t              immediate_data;\r
2113 \r
2114                 }       conn;\r
2115 \r
2116                 struct _wc_ud\r
2117                 {\r
2118                         ib_recv_opt_t   recv_opt;\r
2119                         ib_net32_t              immediate_data;\r
2120                         ib_net32_t              remote_qp;\r
2121                         uint16_t                pkey_index;\r
2122                         ib_net16_t              remote_lid;\r
2123                         uint8_t                 remote_sl;\r
2124                         uint8_t                 path_bits;\r
2125 \r
2126                 }       ud;\r
2127 \r
2128                 struct _wc_rd\r
2129                 {\r
2130                         ib_net32_t      remote_eecn;\r
2131                         ib_net32_t      remote_qp;\r
2132                         ib_net16_t      remote_lid;\r
2133                         uint8_t         remote_sl;\r
2134                         uint32_t        free_cnt;\r
2135 \r
2136                 }       rd;\r
2137 \r
2138                 struct _wc_raw_ipv6\r
2139                 {\r
2140                         ib_net16_t              remote_lid;\r
2141                         uint8_t                 remote_sl;\r
2142                         uint8_t                 path_bits;\r
2143 \r
2144                 }       raw_ipv6;\r
2145 \r
2146                 struct _wc_raw_ether\r
2147                 {\r
2148                         ib_net16_t              remote_lid;\r
2149                         uint8_t                 remote_sl;\r
2150                         uint8_t                 path_bits;\r
2151                         ib_net16_t              ether_type;\r
2152 \r
2153                 }       raw_ether;\r
2154 \r
2155         }       recv;\r
2156 \r
2157 }       ib_wc_t;\r
2158 /*\r
2159 * FIELDS\r
2160 *       p_next\r
2161 *               A pointer used to chain work completions.  This permits multiple\r
2162 *               work completions to be retrieved from a completion queue through a\r
2163 *               single function call.  This value is set to NULL to mark the end of\r
2164 *               the chain.\r
2165 *\r
2166 *       wr_id\r
2167 *               The 64-bit work request identifier that was specified when posting the\r
2168 *               work request.\r
2169 *\r
2170 *       wc_type\r
2171 *               Indicates the type of work completion.\r
2172 *\r
2173 *\r
2174 *       length\r
2175 *               The total length of the data sent or received with the work request.\r
2176 *\r
2177 *       status\r
2178 *               The result of the work request.\r
2179 *\r
2180 *       vendor_specific\r
2181 *               HCA vendor specific information returned as part of the completion.\r
2182 *\r
2183 *       recv.conn.recv_opt\r
2184 *               Indicates optional fields valid as part of a work request that\r
2185 *               completed on a connected (reliable or unreliable) queue pair.\r
2186 *\r
2187 *       recv.conn.immediate_data\r
2188 *               32-bit field received as part of an inbound message on a connected\r
2189 *               queue pair.  This field is only valid if the recv_opt flag\r
2190 *               IB_RECV_OPT_IMMEDIATE has been set.\r
2191 *\r
2192 *       recv.ud.recv_opt\r
2193 *               Indicates optional fields valid as part of a work request that\r
2194 *               completed on an unreliable datagram queue pair.\r
2195 *\r
2196 *       recv.ud.immediate_data\r
2197 *               32-bit field received as part of an inbound message on a unreliable\r
2198 *               datagram queue pair.  This field is only valid if the recv_opt flag\r
2199 *               IB_RECV_OPT_IMMEDIATE has been set.\r
2200 *\r
2201 *       recv.ud.remote_qp\r
2202 *               Identifies the source queue pair of a received datagram.\r
2203 *\r
2204 *       recv.ud.pkey_index\r
2205 *               The pkey index for the source queue pair. This is valid only for\r
2206 *               GSI type QP's.\r
2207 *\r
2208 *       recv.ud.remote_lid\r
2209 *               The source LID of the received datagram.\r
2210 *\r
2211 *       recv.ud.remote_sl\r
2212 *               The service level used by the source of the received datagram.\r
2213 *\r
2214 *       recv.ud.path_bits\r
2215 *               path bits...\r
2216 *\r
2217 *       recv.rd.remote_eecn\r
2218 *               The remote end-to-end context number that sent the received message.\r
2219 *\r
2220 *       recv.rd.remote_qp\r
2221 *               Identifies the source queue pair of a received message.\r
2222 *\r
2223 *       recv.rd.remote_lid\r
2224 *               The source LID of the received message.\r
2225 *\r
2226 *       recv.rd.remote_sl\r
2227 *               The service level used by the source of the received message.\r
2228 *\r
2229 *       recv.rd.free_cnt\r
2230 *               The number of available entries in the completion queue.  Reliable\r
2231 *               datagrams may complete out of order, so this field may be used to\r
2232 *               determine the number of additional completions that may occur.\r
2233 *\r
2234 *       recv.raw_ipv6.remote_lid\r
2235 *               The source LID of the received message.\r
2236 *\r
2237 *       recv.raw_ipv6.remote_sl\r
2238 *               The service level used by the source of the received message.\r
2239 *\r
2240 *       recv.raw_ipv6.path_bits\r
2241 *               path bits...\r
2242 *\r
2243 *       recv.raw_ether.remote_lid\r
2244 *               The source LID of the received message.\r
2245 *\r
2246 *       recv.raw_ether.remote_sl\r
2247 *               The service level used by the source of the received message.\r
2248 *\r
2249 *       recv.raw_ether.path_bits\r
2250 *               path bits...\r
2251 *\r
2252 *       recv.raw_ether.ether_type\r
2253 *               ether type...\r
2254 * NOTES\r
2255 *       When the work request completes with error, the only values that the\r
2256 *       consumer can depend on are the wr_id field, and the status of the\r
2257 *       operation.\r
2258 *\r
2259 *       If the consumer is using the same CQ for completions from more than\r
2260 *       one type of QP (i.e Reliable Connected, Datagram etc), then the consumer\r
2261 *       must have additional information to decide what fields of the union are\r
2262 *       valid.\r
2263 * SEE ALSO\r
2264 *       ib_wc_type_t, ib_qp_type_t, ib_wc_status_t, ib_recv_opt_t\r
2265 *****/\r
2266 \r
2267 \r
2268 /****s* Access Layer/ib_mr_create_t\r
2269 * NAME\r
2270 *       ib_mr_create_t\r
2271 *\r
2272 * DESCRIPTION\r
2273 *       Information required to create a registered memory region.\r
2274 *\r
2275 * SYNOPSIS\r
2276 */\r
2277 typedef struct _ib_mr_create\r
2278 {\r
2279         TO_LONG_PTR(void*,              vaddr);\r
2280         uint64_t                                length;\r
2281         ib_access_t                             access_ctrl;\r
2282 \r
2283 }       ib_mr_create_t;\r
2284 /*\r
2285 * FIELDS\r
2286 *       vaddr\r
2287 *               Starting virtual address of the region being registered.\r
2288 *\r
2289 *       length\r
2290 *               Length of the buffer to register.\r
2291 *\r
2292 *       access_ctrl\r
2293 *               Access rights of the registered region.\r
2294 *\r
2295 * SEE ALSO\r
2296 *       ib_access_t\r
2297 *****/\r
2298 \r
2299 #ifdef CL_KERNEL\r
2300 \r
2301 /****s* Access Layer/mlnx_fmr_create_t\r
2302 * NAME\r
2303 *       mlnx_fmr_create_t\r
2304 *\r
2305 * DESCRIPTION\r
2306 *       Information required to create a Mellanox fast memory region.\r
2307 *\r
2308 * SYNOPSIS\r
2309 */\r
2310 typedef struct _mlnx_fmr_create\r
2311 {\r
2312         int                                     max_pages;\r
2313         int                                     max_maps;\r
2314         uint8_t                         page_size;\r
2315         ib_access_t                     access_ctrl;\r
2316 \r
2317 }       mlnx_fmr_create_t;\r
2318 /*\r
2319 * FIELDS\r
2320 *       max_pages\r
2321 *               max pages in the region.\r
2322 *\r
2323 *       max_maps\r
2324 *               max times, the region can be mapped before remapping.\r
2325 *\r
2326 *       page_size\r
2327 *               log2 of the page size (e.g. 12 for 4KB).\r
2328 *\r
2329 *       access_ctrl\r
2330 *               Access rights of the registered region.\r
2331 *\r
2332 * NOTES\r
2333 *       This is a Mellanox specific extension to verbs.\r
2334 *\r
2335 * SEE ALSO\r
2336 *       ib_access_t\r
2337 *****/\r
2338 \r
2339 \r
2340 /****s* Access Layer/mlnx_fmr_pool_create_t\r
2341 * NAME\r
2342 *       mlnx_fmr_pool_create_t\r
2343 *\r
2344 * DESCRIPTION\r
2345 *       Information required to create a Mellanox fast memory region pool.\r
2346 *\r
2347 * SYNOPSIS\r
2348 */\r
2349 typedef struct _mlnx_fmr_pool_create\r
2350 {\r
2351         int                             max_pages_per_fmr;\r
2352         uint8_t                 page_size;      /* really - page_shift, log2 of page_size */\r
2353         enum ib_access_flags    access_ctrl;\r
2354         int                             pool_size;\r
2355         int                             dirty_watermark;\r
2356         void                    (*flush_function)(mlnx_fmr_pool_handle_t h_pool, void *arg);\r
2357         void                            *flush_arg;\r
2358         boolean_t                       cache;\r
2359 }       mlnx_fmr_pool_create_t;\r
2360 /*\r
2361 * FIELDS\r
2362 *       max_pages\r
2363 *               max pages in the region.\r
2364 *\r
2365 *       max_maps\r
2366 *               max times, the region can be mapped before remapping.\r
2367 *\r
2368 *       page_size\r
2369 *               log2 of the page size (e.g. 12 for 4KB).\r
2370 *\r
2371 *       access_ctrl\r
2372 *               Access rights of the registered region.\r
2373 *\r
2374 * NOTES\r
2375 *       This is a Mellanox specific extension to verbs.\r
2376 *\r
2377 * SEE ALSO\r
2378 *       ib_access_t\r
2379 *****/\r
2380 #endif\r
2381 \r
2382 /****s* Access Layer/ib_phys_range_t\r
2383 * NAME\r
2384 *       ib_phys_range_t\r
2385 *\r
2386 * DESCRIPTION\r
2387 *       Information describing a physical memory range.\r
2388 *\r
2389 * SYNOPSIS\r
2390 */\r
2391 typedef struct _ib_phys_range\r
2392 {\r
2393         uint64_t                                base_addr;\r
2394         uint64_t                                size;\r
2395 \r
2396 }       ib_phys_range_t;\r
2397 /*\r
2398 * FIELDS\r
2399 *       base_addr\r
2400 *               Physical address of the base of the memory range.\r
2401 *\r
2402 *       size\r
2403 *               size, in bytes, of the memory range.\r
2404 *\r
2405 * NOTES\r
2406 *       The base address must be start and end on an HCA-supported page boundary.\r
2407 *\r
2408 * SEE ALSO\r
2409 *       ib_phys_create_t\r
2410 *********/\r
2411 \r
2412 \r
2413 /****s* Access Layer/ib_phys_create_t\r
2414 * NAME\r
2415 *       ib_phys_create_t\r
2416 *\r
2417 * DESCRIPTION\r
2418 *       Information required to create a physical memory region.\r
2419 *\r
2420 * SYNOPSIS\r
2421 */\r
2422 typedef struct _ib_phys_create\r
2423 {\r
2424         uint64_t                                        length;\r
2425         uint32_t                                        num_ranges;\r
2426         ib_phys_range_t*                        range_array;\r
2427         uint32_t                                        buf_offset;\r
2428         uint32_t                                        hca_page_size;\r
2429         ib_access_t                                     access_ctrl;\r
2430 \r
2431 }       ib_phys_create_t;\r
2432 /*\r
2433 * FIELDS\r
2434 *       length\r
2435 *               The length of the memory region in bytes.\r
2436 *\r
2437 *       num_ranges\r
2438 *               Number of ib_phys_range structures listed in the specified range array.\r
2439 *\r
2440 *       range_array\r
2441 *               An array of ib_phys_range structures to be registered as a single memory\r
2442 *               region.\r
2443 *\r
2444 *       buf_offset\r
2445 *               The offset into the first physical memory range of the specified memory\r
2446 *               region on which to start the virtual address.\r
2447 *\r
2448 *       hca_page_size\r
2449 *               The HCA page size to use to register the memory.\r
2450 *\r
2451 *       access_ctrl\r
2452 *               Access rights of the registered region.\r
2453 *\r
2454 * SEE ALSO\r
2455 *       ib_access_t\r
2456 *****/\r
2457 \r
2458 \r
2459 /****s* Access Layer/ib_mr_attr_t\r
2460 * NAME\r
2461 *       ib_mr_attr_t\r
2462 *\r
2463 * DESCRIPTION\r
2464 *       Attributes of a registered memory region.\r
2465 *\r
2466 * SYNOPSIS\r
2467 */\r
2468 typedef struct _ib_mr_attr\r
2469 {\r
2470         TO_LONG_PTR(ib_pd_handle_t, h_pd);\r
2471         uint64_t                                local_lb;\r
2472         uint64_t                                local_ub;\r
2473         uint64_t                                remote_lb;\r
2474         uint64_t                                remote_ub;\r
2475         ib_access_t                             access_ctrl;\r
2476         net32_t                                 lkey;\r
2477         net32_t                                 rkey;\r
2478 \r
2479 }       ib_mr_attr_t;\r
2480 /*\r
2481 * DESCRIPTION\r
2482 *       h_pd\r
2483 *               Handle to the protection domain for this memory region.\r
2484 *\r
2485 *       local_lb\r
2486 *               The virtual address of the lower bound of protection for local\r
2487 *               memory access.  This is always a 64-bit quantity to support registering\r
2488 *               more than 4GB of memory on 32-bit systems with PAE.\r
2489 *\r
2490 *       local_ub\r
2491 *               The virtual address of the upper bound of protection for local\r
2492 *               memory access.  This is always a 64-bit quantity to support registering\r
2493 *               more than 4GB of memory on 32-bit systems with PAE.\r
2494 *\r
2495 *       remote_lb\r
2496 *               The virtual address of the lower bound of protection for remote\r
2497 *               memory access.  This is always a 64-bit quantity to support registering\r
2498 *               more than 4GB of memory on 32-bit systems with PAE.\r
2499 *\r
2500 *       remote_ub\r
2501 *               The virtual address of the upper bound of protection for remote\r
2502 *               memory access.  This is always a 64-bit quantity to support registering\r
2503 *               more than 4GB of memory on 32-bit systems with PAE.\r
2504 *\r
2505 *       access_ctrl\r
2506 *               Access rights for the specified memory region.\r
2507 *\r
2508 *       lkey\r
2509 *               The lkey associated with this memory region.\r
2510 *\r
2511 *       rkey\r
2512 *               The rkey associated with this memory region.\r
2513 *\r
2514 * NOTES\r
2515 *       The remote_lb, remote_ub, and rkey are only valid if remote memory access\r
2516 *       is enabled for this memory region.\r
2517 *\r
2518 * SEE ALSO\r
2519 *       ib_access_t\r
2520 *****/\r
2521 \r
2522 \r
2523 /****d* Access Layer/ib_ca_mod_t\r
2524 * NAME\r
2525 *       ib_ca_mod_t -- Modify port attributes and error counters\r
2526 *\r
2527 * DESCRIPTION\r
2528 *       Specifies modifications to the port attributes of a channel adapter.\r
2529 *\r
2530 * SYNOPSIS\r
2531 */\r
2532 typedef uint32_t                                                        ib_ca_mod_t;\r
2533 #define IB_CA_MOD_IS_CM_SUPPORTED                       0x00000001\r
2534 #define IB_CA_MOD_IS_SNMP_SUPPORTED                     0x00000002\r
2535 #define IB_CA_MOD_IS_DEV_MGMT_SUPPORTED         0x00000004\r
2536 #define IB_CA_MOD_IS_VEND_SUPPORTED                     0x00000008\r
2537 #define IB_CA_MOD_IS_SM                                         0x00000010\r
2538 #define IB_CA_MOD_IS_SM_DISABLED                        0x00000020\r
2539 #define IB_CA_MOD_QKEY_CTR                                      0x00000040\r
2540 #define IB_CA_MOD_PKEY_CTR                                      0x00000080\r
2541 #define IB_CA_MOD_IS_NOTICE_SUPPORTED           0x00000100\r
2542 #define IB_CA_MOD_IS_TRAP_SUPPORTED                     0x00000200\r
2543 #define IB_CA_MOD_IS_APM_SUPPORTED                      0x00000400\r
2544 #define IB_CA_MOD_IS_SLMAP_SUPPORTED            0x00000800\r
2545 #define IB_CA_MOD_IS_PKEY_NVRAM_SUPPORTED       0x00001000\r
2546 #define IB_CA_MOD_IS_MKEY_NVRAM_SUPPORTED       0x00002000\r
2547 #define IB_CA_MOD_IS_SYSGUID_SUPPORTED          0x00004000\r
2548 #define IB_CA_MOD_IS_DR_NOTICE_SUPPORTED        0x00008000\r
2549 #define IB_CA_MOD_IS_BOOT_MGMT_SUPPORTED        0x00010000\r
2550 #define IB_CA_MOD_IS_CAPM_NOTICE_SUPPORTED      0x00020000\r
2551 #define IB_CA_MOD_IS_REINIT_SUPORTED            0x00040000\r
2552 #define IB_CA_MOD_IS_LEDINFO_SUPPORTED          0x00080000\r
2553 #define IB_CA_MOD_SHUTDOWN_PORT                         0x00100000\r
2554 #define IB_CA_MOD_INIT_TYPE_VALUE                       0x00200000\r
2555 #define IB_CA_MOD_SYSTEM_IMAGE_GUID                     0x00400000\r
2556 #define IB_CA_MOD_IS_CLIENT_REREGISTER_SUPPORTED        0x00800000\r
2557 #define IB_CA_MOD_RESERVED_MASK                         0xFF000000\r
2558 /*\r
2559 * VALUES\r
2560 *       IB_CA_MOD_IS_CM_SUPPORTED\r
2561 *               Indicates if there is a communication manager accessible through\r
2562 *               the port.\r
2563 *\r
2564 *       IB_CA_MOD_IS_SNMP_SUPPORTED\r
2565 *               Indicates if there is an SNMP agent accessible through the port.\r
2566 *\r
2567 *       IB_CA_MOD_IS_DEV_MGMT_SUPPORTED\r
2568 *               Indicates if there is a device management agent accessible\r
2569 *               through the port.\r
2570 *\r
2571 *       IB_CA_MOD_IS_VEND_SUPPORTED\r
2572 *               Indicates if there is a vendor supported agent accessible\r
2573 *               through the port.\r
2574 *\r
2575 *       IB_CA_MOD_IS_SM\r
2576 *               Indicates if there is a subnet manager accessible through\r
2577 *               the port.\r
2578 *\r
2579 *       IB_CA_MOD_IS_SM_DISABLED\r
2580 *               Indicates if the port has been disabled for configuration by the\r
2581 *               subnet manager.\r
2582 *\r
2583 *       IB_CA_MOD_QKEY_CTR\r
2584 *               Used to reset the qkey violation counter associated with the\r
2585 *               port.\r
2586 *\r
2587 *       IB_CA_MOD_PKEY_CTR\r
2588 *               Used to reset the pkey violation counter associated with the\r
2589 *               port.\r
2590 *\r
2591 *       IB_CA_MOD_IS_NOTICE_SUPPORTED\r
2592 *               Indicates that this CA supports ability to generate Notices for\r
2593 *               Port State changes. (only applicable to switches)\r
2594 *\r
2595 *       IB_CA_MOD_IS_TRAP_SUPPORTED\r
2596 *               Indicates that this management port supports ability to generate\r
2597 *               trap messages. (only applicable to switches)\r
2598 *\r
2599 *       IB_CA_MOD_IS_APM_SUPPORTED\r
2600 *               Indicates that this port is capable of performing Automatic\r
2601 *               Path Migration.\r
2602 *\r
2603 *       IB_CA_MOD_IS_SLMAP_SUPPORTED\r
2604 *               Indicates this port supports SLMAP capability.\r
2605 *\r
2606 *       IB_CA_MOD_IS_PKEY_NVRAM_SUPPORTED\r
2607 *               Indicates that PKEY is supported in NVRAM\r
2608 *\r
2609 *       IB_CA_MOD_IS_MKEY_NVRAM_SUPPORTED\r
2610 *               Indicates that MKEY is supported in NVRAM\r
2611 *\r
2612 *       IB_CA_MOD_IS_SYSGUID_SUPPORTED\r
2613 *               Indicates System Image GUID support.\r
2614 *\r
2615 *       IB_CA_MOD_IS_DR_NOTICE_SUPPORTED\r
2616 *               Indicate support for generating Direct Routed Notices\r
2617 *\r
2618 *       IB_CA_MOD_IS_BOOT_MGMT_SUPPORTED\r
2619 *               Indicates support for Boot Management\r
2620 *\r
2621 *       IB_CA_MOD_IS_CAPM_NOTICE_SUPPORTED\r
2622 *               Indicates capability to generate notices for changes to CAPMASK\r
2623 *\r
2624 *       IB_CA_MOD_IS_REINIT_SUPORTED\r
2625 *               Indicates type of node init supported. Refer to Chapter 14 for\r
2626 *               Initialization actions.\r
2627 *\r
2628 *       IB_CA_MOD_IS_LEDINFO_SUPPORTED\r
2629 *               Indicates support for LED info.\r
2630 *\r
2631 *       IB_CA_MOD_SHUTDOWN_PORT\r
2632 *               Used to modify the port active indicator.\r
2633 *\r
2634 *       IB_CA_MOD_INIT_TYPE_VALUE\r
2635 *               Used to modify the init_type value for the port.\r
2636 *\r
2637 *       IB_CA_MOD_SYSTEM_IMAGE_GUID\r
2638 *               Used to modify the system image GUID for the port.\r
2639 *\r
2640 *       IB_CA_MOD_IS_CLIENT_REREGISTER_SUPPORTED\r
2641 *               Used to modify the system image GUID for the port.\r
2642 *\r
2643 *       IB_CA_MOD_RESERVED_MASK\r
2644 *               Mask of all the reserved bits.  If any of these bits are set\r
2645 *               ib_modify_ca will return IB_INVALID_PARAMETER.\r
2646 *****/\r
2647 \r
2648 \r
2649 /****d* Access Layer/ib_mr_mod_t\r
2650 * NAME\r
2651 *       ib_mr_mod_t\r
2652 *\r
2653 * DESCRIPTION\r
2654 *       Mask used to specify which attributes of a registered memory region are\r
2655 *       being modified.\r
2656 *\r
2657 * SYNOPSIS\r
2658 */\r
2659 typedef uint32_t                                                ib_mr_mod_t;\r
2660 #define IB_MR_MOD_ADDR                                  0x00000001\r
2661 #define IB_MR_MOD_PD                                    0x00000002\r
2662 #define IB_MR_MOD_ACCESS                                0x00000004\r
2663 /*\r
2664 * PARAMETERS\r
2665 *       IB_MEM_MOD_ADDR\r
2666 *               The address of the memory region is being modified.\r
2667 *\r
2668 *       IB_MEM_MOD_PD\r
2669 *               The protection domain associated with the memory region is being\r
2670 *               modified.\r
2671 *\r
2672 *       IB_MEM_MOD_ACCESS\r
2673 *               The access rights the memory region are being modified.\r
2674 *****/\r
2675 \r
2676 /****d* IBA Base: Constants/IB_SMINFO_STATE_INIT\r
2677 * NAME\r
2678 *       IB_SMINFO_STATE_INIT\r
2679 *\r
2680 * DESCRIPTION\r
2681 *       Encoded state value used in the SMInfo attribute.\r
2682 *\r
2683 * SOURCE\r
2684 */\r
2685 #define IB_SMINFO_STATE_INIT                                    4\r
2686 /**********/\r
2687 \r
2688 /****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_HANDOVER\r
2689 * NAME\r
2690 *       IB_SMINFO_ATTR_MOD_HANDOVER\r
2691 *\r
2692 * DESCRIPTION\r
2693 *       Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.\r
2694 *\r
2695 * SOURCE\r
2696 */\r
2697 #define IB_SMINFO_ATTR_MOD_HANDOVER             (CL_NTOH32(0x000001))\r
2698 /**********/\r
2699 \r
2700 /****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_ACKNOWLEDGE\r
2701 * NAME\r
2702 *       IB_SMINFO_ATTR_MOD_ACKNOWLEDGE\r
2703 *\r
2704 * DESCRIPTION\r
2705 *       Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.\r
2706 *\r
2707 * SOURCE\r
2708 */\r
2709 #define IB_SMINFO_ATTR_MOD_ACKNOWLEDGE          (CL_NTOH32(0x000002))\r
2710 /**********/\r
2711 \r
2712 /****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_DISABLE\r
2713 * NAME\r
2714 *       IB_SMINFO_ATTR_MOD_DISABLE\r
2715 *\r
2716 * DESCRIPTION\r
2717 *       Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.\r
2718 *\r
2719 * SOURCE\r
2720 */\r
2721 #define IB_SMINFO_ATTR_MOD_DISABLE                      (CL_NTOH32(0x000003))\r
2722 /**********/\r
2723 \r
2724 /****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_STANDBY\r
2725 * NAME\r
2726 *       IB_SMINFO_ATTR_MOD_STANDBY\r
2727 *\r
2728 * DESCRIPTION\r
2729 *       Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.\r
2730 *\r
2731 * SOURCE\r
2732 */\r
2733 #define IB_SMINFO_ATTR_MOD_STANDBY                      (CL_NTOH32(0x000004))\r
2734 /**********/\r
2735 \r
2736 /****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_DISCOVER\r
2737 * NAME\r
2738 *       IB_SMINFO_ATTR_MOD_DISCOVER\r
2739 *\r
2740 * DESCRIPTION\r
2741 *       Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.\r
2742 *\r
2743 * SOURCE\r
2744 */\r
2745 #define IB_SMINFO_ATTR_MOD_DISCOVER                     (CL_NTOH32(0x000005))\r
2746 /**********/\r
2747 \r
2748 /****s* Access Layer/ib_ci_op_t\r
2749 * NAME\r
2750 *       ib_ci_op_t\r
2751 *\r
2752 * DESCRIPTION\r
2753 *       A structure used for vendor specific CA interface communication.\r
2754 *\r
2755 * SYNOPSIS\r
2756 */\r
2757 typedef struct _ib_ci_op\r
2758 {\r
2759         IN                              uint32_t                                        command;\r
2760         IN                              uint32_t                                        buf_size;\r
2761         IN                              uint32_t                                        buf_info;\r
2762         IN      OUT                     int32_t                                         status;\r
2763         IN      OUT                     TO_LONG_PTR(void*,                      p_buf) OPTIONAL; // Do not put it last in the structure, because of memory alignment\r
2764                 OUT                     uint32_t                                        num_bytes_ret;\r
2765         \r
2766 \r
2767 }       ib_ci_op_t;\r
2768 /*\r
2769 * FIELDS\r
2770 *       command\r
2771 *               A command code that is understood by the verbs provider.\r
2772 *\r
2773 *       status\r
2774 *               The completion status from the verbs provider.  This field should be\r
2775 *               initialize to indicate an error to allow detection and cleanup in\r
2776 *               case a communication error occurs between user-mode and kernel-mode.\r
2777 *\r
2778 *       buf_size\r
2779 *               The size of the buffer in bytes.\r
2780 *\r
2781 *       buf_info\r
2782 *               Additional buffer information\r
2783 *\r
2784 *       p_buf\r
2785 *               A reference to a buffer containing vendor specific data.  The verbs\r
2786 *               provider must not access pointers in the p_buf between user-mode and\r
2787 *               kernel-mode.  Any pointers embedded in the p_buf are invalidated by\r
2788 *               the user-mode/kernel-mode transition.\r
2789 *\r
2790 *       num_bytes_ret\r
2791 *               The size in bytes of the vendor specific data returned in the buffer.\r
2792 *               This field is set by the verbs provider.  The verbs provider should\r
2793 *               verify that the buffer size is sufficient to hold the data being\r
2794 *               returned.\r
2795 *\r
2796 * NOTES\r
2797 *       This structure is provided to allow the exchange of vendor specific\r
2798 *       data between the originator and the verbs provider.  Users of this\r
2799 *       structure are expected to know the format of data in the p_buf based\r
2800 *       on the structure command field or the usage context.\r
2801 *****/\r
2802 \r
2803 \r
2804 #endif // __IB_TYPES_EXTENDED_H__\r