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