OpenIB branding
[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
611         /*
612          * Total size of the ca attributes in bytes
613          */
614         uint32_t                                size;
615         uint32_t                                max_qps;
616         uint32_t                                max_wrs;
617
618         uint32_t                                max_sges;
619         uint32_t                                max_rd_sges;
620
621         uint32_t                                max_cqs;
622         uint32_t                                max_cqes;
623
624         uint32_t                                max_pds;
625
626         uint32_t                                init_regions;
627         uint64_t                                init_region_size;
628
629         uint32_t                                init_windows;
630         uint32_t                                max_addr_handles;
631
632         uint32_t                                max_partitions;
633
634         ib_atomic_t                             atomicity;
635
636         uint8_t                                 max_qp_resp_res;
637         uint8_t                                 max_resp_res;
638
639         uint8_t                                 max_qp_init_depth;
640
641         uint32_t                                max_ipv6_qps;
642         uint32_t                                max_ether_qps;
643
644         uint32_t                                max_mcast_grps;
645         uint32_t                                max_mcast_qps;
646         uint32_t                                max_qps_per_mcast_grp;
647
648         /*
649          * local_ack_delay:
650          * Specifies the maximum time interval between the local CA receiving
651          * a message and the transmission of the associated ACK or NAK.
652          *
653          * timeout = 4.096 microseconds * 2^local_ack_delay
654          */
655         uint8_t                                 local_ack_delay;
656
657         boolean_t                               bad_pkey_ctr_support;
658         boolean_t                               bad_qkey_ctr_support;
659         boolean_t                               raw_mcast_support;
660         boolean_t                               apm_support;
661         boolean_t                               av_port_check;
662         boolean_t                               change_primary_port;
663         boolean_t                               modify_wr_depth;
664         boolean_t                               current_qp_state_support;
665         boolean_t                               shutdown_port_capability;
666         boolean_t                               init_type_support;
667         boolean_t                               port_active_event_support;
668         boolean_t                               system_image_guid_support;
669         boolean_t                               hw_agents;
670
671         ib_net64_t                              system_image_guid;
672
673         uint32_t                                num_page_sizes;
674         uint8_t                                 num_ports;
675
676         uint32_t* __ptr64               p_page_size;
677         ib_port_attr_t* __ptr64 p_port_attr;
678
679 }       ib_ca_attr_t;
680 /*
681 * FIELDS
682 *       ca_guid
683 *               GUID for this adapter.
684 *
685 *       vend_id
686 *               IEEE vendor ID for this adapter
687 *
688 *       dev_id
689 *               Device ID of this adapter. (typically from PCI device ID)
690 *
691 *       revision
692 *               Revision ID of this adapter
693 *
694 *       size
695 *               Total size in bytes for the HCA attributes.  This size includes total
696 *               size required for all the variable members of the structure.  If a
697 *               vendor requires to pass vendor specific fields beyond this structure,
698 *               the HCA vendor can choose to report a larger size.  If a vendor is
699 *               reporting extended vendor specific features, they should also provide
700 *               appropriate access functions to aid with the required interpretation.
701 *
702 *       max_qps
703 *               Maximum number of QP's supported by this HCA.
704 *
705 *       max_wrs
706 *               Maximum number of work requests supported by this HCA.
707 *
708 *       max_sges
709 *               Maximum number of scatter gather elements supported per work request.
710 *
711 *       max_rd_sges
712 *               Maximum number of scatter gather elements supported for READ work
713 *               requests for a Reliable Datagram QP.  This value must be zero if RD
714 *               service is not supported.
715 *
716 *       max_cqs
717 *               Maximum number of Completion Queues supported.
718 *
719 *       max_cqes
720 *               Maximum number of CQ elements supported per CQ.
721 *
722 *       max_pds
723 *               Maximum number of protection domains supported.
724 *
725 *       init_regions
726 *               Initial number of memory regions supported.  These are only informative
727 *               values.  HCA vendors can extended and grow these limits on demand.
728 *
729 *       init_region_size
730 *               Initial limit on the size of the registered memory region.
731 *
732 *       init_windows
733 *               Initial number of window entries supported.
734 *
735 *       max_addr_handles
736 *               Maximum number of address handles supported.
737 *
738 *       max_partitions
739 *               Maximum number of partitions supported.
740 *
741 *       atomicity
742 *               Indicates level of atomic operations supported by this HCA.
743 *
744 *       max_qp_resp_res
745 *               Maximum limit on number of responder resources for incomming RDMA
746 *               operations on QPs.
747 *
748 *       max_resp_res
749 *               Maximum number of responder resources per HCA, with this HCA used as
750 *               the target.
751 *
752 *       max_qp_init_depth
753 *               Maximimum initiator depth per QP for initiating RDMA reads and
754 *               atomic operations.
755 *
756 *       max_ipv6_qps
757 *       max_ether_qps
758 *               Maximum number of IPV6 and raw ether QP's supported by this HCA.
759 *
760 *       max_mcast_grps
761 *               Maximum number of multicast groups supported.
762 *
763 *       max_mcast_qps
764 *               Maximum number of QP's that can support multicast operations.
765 *
766 *       max_qps_per_mcast_grp
767 *               Maximum number of multicast QP's per multicast group.
768 *
769 *       local_ack_delay
770 *               Specifies the maximum time interval between the local CA receiving
771 *               a message and the transmission of the associated ACK or NAK.
772 *               timeout = 4.096 microseconds * 2^local_ack_delay
773 *
774 *       bad_pkey_ctr_support
775 *       bad_qkey_ctr_support
776 *               Indicates support for the bad pkey and qkey counters.
777 *
778 *       raw_mcast_support
779 *               Indicates support for raw packet multicast.
780 *
781 *       apm_support
782 *               Indicates support for Automatic Path Migration.
783 *
784 *       av_port_check
785 *               Indicates ability to check port number in address handles.
786 *
787 *       change_primary_port
788 *               Indicates ability to change primary port for a QP during a
789 *               SQD->RTS transition.
790 *
791 *       modify_wr_depth
792 *               Indicates ability to modify QP depth during a modify QP operation.
793 *               Check the verb specification for permitted states.
794 *
795 *       current_qp_state_support
796 *               Indicates ability of the HCA to support the current QP state modifier
797 *               during a modify QP operation.
798 *
799 *       shutdown_port_capability
800 *               Shutdown port capability support indicator.
801 *
802 *       init_type_support
803 *               Indicates init_type_reply and ability to set init_type is supported.
804 *
805 *       port_active_event_support
806 *               Port active event support indicator.
807 *
808 *       system_image_guid_support
809 *               System image GUID support indicator.
810 *
811 *       hw_agents
812 *               Indicates SMA is implemented in HW.
813 *
814 *       system_image_guid
815 *               Optional system image GUID.  This field is valid only if the
816 *               system_image_guid_support flag is set.
817 *
818 *       num_page_sizes
819 *               Indicates support for different page sizes supported by the HCA.
820 *               The variable size array can be obtained from p_page_size.
821 *
822 *       num_ports
823 *               Number of physical ports supported on this HCA.
824 *
825 *       p_page_size
826 *               Array holding different page size supported.
827 *
828 *       p_port_attr
829 *               Array holding port attributes.
830 *
831 * NOTES
832 *       This structure contains the attributes of a channel adapter.  Users must
833 *       call ib_copy_ca_attr to copy the contents of this structure to a new
834 *       memory region.
835 *
836 * SEE ALSO
837 *       ib_port_attr_t, ib_atomic_t, ib_copy_ca_attr
838 *****/
839
840 /****f* Access layer/ib_copy_ca_attr
841 * NAME
842 *       ib_copy_ca_attr
843 *
844 * DESCRIPTION
845 *       Copies CA attributes.
846 *
847 * SYNOPSIS
848 */
849 AL_EXPORT ib_ca_attr_t* AL_API
850 ib_copy_ca_attr(
851         IN                              ib_ca_attr_t* const             p_dest,
852         IN              const   ib_ca_attr_t* const             p_src );
853 /*
854 * PARAMETERS
855 *       p_dest
856 *               Pointer to the buffer that is the destination of the copy.
857 *
858 *       p_src
859 *               Pointer to the CA attributes to copy.
860 *
861 * RETURN VALUE
862 *       Pointer to the copied CA attributes.
863 *
864 * NOTES
865 *       The buffer pointed to by the p_dest parameter must be at least the size
866 *       specified in the size field of the buffer pointed to by p_src.
867 *
868 * SEE ALSO
869 *       ib_ca_attr_t, ib_dup_ca_attr, ib_free_ca_attr
870 *****/
871
872
873 /****d* Access Layer/ib_pd_type_t
874 * NAME
875 *       ib_pd_type_t
876 *
877 * DESCRIPTION
878 *       Indicates the type of protection domain being allocated.
879 *
880 * SYNOPSIS
881 */
882 typedef enum _ib_pd_type
883 {
884         IB_PDT_NORMAL,
885         IB_PDT_ALIAS,
886         IB_PDT_SQP
887
888 }       ib_pd_type_t;
889 /*
890 * VALUES
891 *       IB_PDT_NORMAL
892 *               Protection domain for all non-aliased QPs.
893 *
894 *       IB_PDT_ALIAS
895 *               Protection domain for IB_QPT_QP0_ALIAS and IB_QPT_QP1_ALIAS QPs.
896 *
897 *       IB_PDT_SQP
898 *               Protection domain for special queue pair usage.
899 *****/
900
901
902 /****s* Access Layer/ib_av_attr_t
903 * NAME
904 *       ib_av_attr_t
905 *
906 * DESCRIPTION
907 *       IBA address vector.
908 *
909 * SYNOPSIS
910 */
911 typedef struct _ib_av_attr
912 {
913         uint8_t                                 port_num;
914
915         uint8_t                                 sl;
916         ib_net16_t                              dlid;
917
918         boolean_t                               grh_valid;
919         ib_grh_t                                grh;
920         uint8_t                                 static_rate;
921         uint8_t                                 path_bits;
922
923         struct _av_conn
924         {
925                 uint8_t                         path_mtu;
926                 uint8_t                         local_ack_timeout;
927                 uint8_t                         seq_err_retry_cnt;
928                 uint8_t                         rnr_retry_cnt;
929
930         }       conn;
931
932 }       ib_av_attr_t;
933 /*
934 * SEE ALSO
935 *       ib_gid_t
936 *****/
937
938
939 /****d* Access Layer/ib_qp_type_t
940 * NAME
941 *       ib_qp_type_t
942 *
943 * DESCRIPTION
944 *       Indicates the type of queue pair being created.
945 *
946 * SYNOPSIS
947 */
948 typedef enum _ib_qp_type
949 {
950         IB_QPT_RELIABLE_CONN    = 0,            /* Matches CM REQ transport type */
951         IB_QPT_UNRELIABLE_CONN  = 1,            /* Matches CM REQ transport type */
952         IB_QPT_UNRELIABLE_DGRM  = 3,            /* Purposefully skip RDD type. */
953         IB_QPT_QP0,
954         IB_QPT_QP1,
955         IB_QPT_RAW_IPV6,
956         IB_QPT_RAW_ETHER,
957         IB_QPT_MAD,                                                             /* InfiniBand Access Layer */
958         IB_QPT_QP0_ALIAS,                                               /* InfiniBand Access Layer */
959         IB_QPT_QP1_ALIAS                                                /* InfiniBand Access Layer */
960
961 }       ib_qp_type_t;
962 /*
963 * VALUES
964 *       IB_QPT_RELIABLE_CONN
965 *               Reliable, connected queue pair.
966 *
967 *       IB_QPT_UNRELIABLE_CONN
968 *               Unreliable, connected queue pair.
969 *
970 *       IB_QPT_UNRELIABLE_DGRM
971 *               Unreliable, datagram queue pair.
972 *
973 *       IB_QPT_QP0
974 *               Queue pair 0.
975 *
976 *       IB_QPT_QP1
977 *               Queue pair 1.
978 *
979 *       IB_QPT_RAW_DGRM
980 *               Raw datagram queue pair.
981 *
982 *       IB_QPT_RAW_IPV6
983 *               Raw IP version 6 queue pair.
984 *
985 *       IB_QPT_RAW_ETHER
986 *               Raw Ethernet queue pair.
987 *
988 *       IB_QPT_MAD
989 *               Unreliable, datagram queue pair that will send and receive management
990 *               datagrams with assistance from the access layer.
991 *
992 *       IB_QPT_QP0_ALIAS
993 *               Alias to queue pair 0.  Aliased QPs can only be created on an aliased
994 *               protection domain.
995 *
996 *       IB_QPT_QP1_ALIAS
997 *               Alias to queue pair 1.  Aliased QPs can only be created on an aliased
998 *               protection domain.
999 *****/
1000
1001
1002 /****d* Access Layer/ib_access_t
1003 * NAME
1004 *       ib_access_t
1005 *
1006 * DESCRIPTION
1007 *       Indicates the type of access is permitted on resources such as QPs,
1008 *       memory regions and memory windows.
1009 *
1010 * SYNOPSIS
1011 */
1012 typedef uint32_t                                ib_access_t;
1013 #define IB_AC_RDMA_READ                 0x00000001
1014 #define IB_AC_RDMA_WRITE                0x00000002
1015 #define IB_AC_ATOMIC                    0x00000004
1016 #define IB_AC_LOCAL_WRITE               0x00000008
1017 #define IB_AC_MW_BIND                   0x00000010
1018 /*
1019 * NOTES
1020 *       Users may combine access rights using a bit-wise or operation to specify
1021 *       additional access.  For example: IB_AC_RDMA_READ | IB_AC_RDMA_WRITE grants
1022 *       RDMA read and write access.
1023 *****/
1024
1025
1026 /****d* Access Layer/ib_qp_state_t
1027 * NAME
1028 *       ib_qp_state_t
1029 *
1030 * DESCRIPTION
1031 *       Indicates or sets the state of a queue pair.  The current state of a queue
1032 *       pair is returned through the ib_qp_query call and set via the
1033 *       ib_qp_modify call.
1034 *
1035 * SYNOPSIS
1036 */
1037 typedef uint32_t                                ib_qp_state_t;
1038 #define IB_QPS_RESET                    0x00000001
1039 #define IB_QPS_INIT                             0x00000002
1040 #define IB_QPS_RTR                              0x00000004
1041 #define IB_QPS_RTS                              0x00000008
1042 #define IB_QPS_SQD                              0x00000010
1043 #define IB_QPS_SQD_DRAINING             0x00000030
1044 #define IB_QPS_SQD_DRAINED              0x00000050
1045 #define IB_QPS_SQERR                    0x00000080
1046 #define IB_QPS_ERROR                    0x00000100
1047 #define IB_QPS_TIME_WAIT                0xDEAD0000      /* InfiniBand Access Layer */
1048 /*****/
1049
1050
1051 /****d* Access Layer/ib_apm_state_t
1052 * NAME
1053 *       ib_apm_state_t
1054 *
1055 * DESCRIPTION
1056 *       The current automatic path migration state of a queue pair
1057 *
1058 * SYNOPSIS
1059 */
1060 typedef enum _ib_apm_state
1061 {
1062         IB_APM_MIGRATED = 1,
1063         IB_APM_REARM,
1064         IB_APM_ARMED
1065
1066 }       ib_apm_state_t;
1067 /*****/
1068
1069
1070 /****s* Access Layer/ib_qp_create_t
1071 * NAME
1072 *       ib_qp_create_t
1073 *
1074 * DESCRIPTION
1075 *       Attributes used to initialize a queue pair at creation time.
1076 *
1077 * SYNOPSIS
1078 */
1079 typedef struct _ib_qp_create
1080 {
1081         ib_qp_type_t                    qp_type;
1082
1083         uint32_t                                sq_depth;
1084         uint32_t                                rq_depth;
1085         uint32_t                                sq_sge;
1086         uint32_t                                rq_sge;
1087
1088         ib_cq_handle_t                  h_sq_cq;
1089         ib_cq_handle_t                  h_rq_cq;
1090
1091         boolean_t                               sq_signaled;
1092
1093 }       ib_qp_create_t;
1094 /*
1095 * FIELDS
1096 *       type
1097 *               Specifies the type of queue pair to create.
1098 *
1099 *       sq_depth
1100 *               Indicates the requested maximum number of work requests that may be
1101 *               outstanding on the queue pair's send queue.  This value must be less
1102 *               than or equal to the maximum reported by the channel adapter associated
1103 *               with the queue pair.
1104 *
1105 *       rq_depth
1106 *               Indicates the requested maximum number of work requests that may be
1107 *               outstanding on the queue pair's receive queue.  This value must be less
1108 *               than or equal to the maximum reported by the channel adapter associated
1109 *               with the queue pair.
1110 *
1111 *       sq_sge
1112 *               Indicates the maximum number scatter-gather elements that may be
1113 *               given in a send work request.  This value must be less
1114 *               than or equal to the maximum reported by the channel adapter associated
1115 *               with the queue pair.
1116 *
1117 *       rq_sge
1118 *               Indicates the maximum number scatter-gather elements that may be
1119 *               given in a receive work request.  This value must be less
1120 *               than or equal to the maximum reported by the channel adapter associated
1121 *               with the queue pair.
1122 *
1123 *       h_sq_cq
1124 *               A handle to the completion queue that will be used to report send work
1125 *               request completions.  This handle must be NULL if the type is
1126 *               IB_QPT_MAD, IB_QPT_QP0_ALIAS, or IB_QPT_QP1_ALIAS.
1127 *
1128 *       h_rq_cq
1129 *               A handle to the completion queue that will be used to report receive
1130 *               work request completions.  This handle must be NULL if the type is
1131 *               IB_QPT_MAD, IB_QPT_QP0_ALIAS, or IB_QPT_QP1_ALIAS.
1132 *
1133 *       sq_signaled
1134 *               A flag that is used to indicate whether the queue pair will signal
1135 *               an event upon completion of a send work request.  If set to
1136 *               TRUE, send work requests will always generate a completion
1137 *               event.  If set to FALSE, a completion event will only be
1138 *               generated if the send_opt field of the send work request has the
1139 *               IB_SEND_OPT_SIGNALED flag set.
1140 *
1141 * SEE ALSO
1142 *       ib_qp_type_t, ib_qp_attr_t
1143 *****/
1144
1145
1146 /****s* Access Layer/ib_qp_attr_t
1147 * NAME
1148 *       ib_qp_attr_t
1149 *
1150 * DESCRIPTION
1151 *       Queue pair attributes returned through ib_query_qp.
1152 *
1153 * SYNOPSIS
1154 */
1155 typedef struct _ib_qp_attr
1156 {
1157         ib_pd_handle_t                  h_pd;
1158         ib_qp_type_t                    qp_type;
1159         ib_access_t                             access_ctrl;
1160         uint16_t                                pkey_index;
1161
1162         uint32_t                                sq_max_inline;
1163         uint32_t                                sq_depth;
1164         uint32_t                                rq_depth;
1165         uint32_t                                sq_sge;
1166         uint32_t                                rq_sge;
1167         uint8_t                                 init_depth;
1168         uint8_t                                 resp_res;
1169
1170         ib_cq_handle_t                  h_sq_cq;
1171         ib_cq_handle_t                  h_rq_cq;
1172
1173         boolean_t                               sq_signaled;
1174
1175         ib_qp_state_t                   state;
1176         ib_net32_t                              num;
1177         ib_net32_t                              dest_num;
1178         ib_net32_t                              qkey;
1179
1180         ib_net32_t                              sq_psn;
1181         ib_net32_t                              rq_psn;
1182
1183         uint8_t                                 primary_port;
1184         uint8_t                                 alternate_port;
1185         ib_av_attr_t                    primary_av;
1186         ib_av_attr_t                    alternate_av;
1187         ib_apm_state_t                  apm_state;
1188
1189 }       ib_qp_attr_t;
1190 /*
1191 * FIELDS
1192 *       h_pd
1193 *               This is a handle to a protection domain associated with the QP.
1194 *
1195 *       sq_max_inline
1196 *               Maximum payload that can be inlined directly in a WQE, eliminating
1197 *               protection checks and additional DMA operations.
1198 *
1199 * NOTES
1200 *       Other fields are defined by the Infiniband specification.
1201 *
1202 * SEE ALSO
1203 *       ib_qp_type_t, ib_access_t, ib_qp_state_t, ib_av_attr_t, ib_apm_state_t
1204 *****/
1205
1206
1207 /****d* Access Layer/ib_qp_opts_t
1208 * NAME
1209 *       ib_qp_opts_t
1210 *
1211 * DESCRIPTION
1212 *       Optional fields supplied in the modify QP operation.
1213 *
1214 * SYNOPSIS
1215 */
1216 typedef uint32_t                                ib_qp_opts_t;
1217 #define IB_MOD_QP_ALTERNATE_AV          0x00000001
1218 #define IB_MOD_QP_PKEY                          0x00000002
1219 #define IB_MOD_QP_APM_STATE                     0x00000004
1220 #define IB_MOD_QP_PRIMARY_AV            0x00000008
1221 #define IB_MOD_QP_RNR_NAK_TIMEOUT       0x00000010
1222 #define IB_MOD_QP_RESP_RES                      0x00000020
1223 #define IB_MOD_QP_INIT_DEPTH            0x00000040
1224 #define IB_MOD_QP_PRIMARY_PORT          0x00000080
1225 #define IB_MOD_QP_ACCESS_CTRL           0x00000100
1226 #define IB_MOD_QP_QKEY                          0x00000200
1227 #define IB_MOD_QP_SQ_DEPTH                      0x00000400
1228 #define IB_MOD_QP_RQ_DEPTH                      0x00000800
1229 #define IB_MOD_QP_CURRENT_STATE         0x00001000
1230 #define IB_MOD_QP_RETRY_CNT                     0x00002000
1231 #define IB_MOD_QP_LOCAL_ACK_TIMEOUT     0x00004000
1232 #define IB_MOD_QP_RNR_RETRY_CNT         0x00008000
1233
1234 /*
1235 * SEE ALSO
1236 *       ib_qp_mod_t
1237 *****/
1238
1239
1240 /****s* Access Layer/ib_qp_mod_t
1241 * NAME
1242 *       ib_qp_mod_t
1243 *
1244 * DESCRIPTION
1245 *       Information needed to change the state of a queue pair through the
1246 *       ib_modify_qp call.
1247 *
1248 * SYNOPSIS
1249 */
1250 typedef struct _ib_qp_mod
1251 {
1252         ib_qp_state_t                           req_state;
1253
1254         union _qp_state
1255         {
1256                 struct _qp_init
1257                 {
1258                         ib_qp_opts_t            opts;
1259                         uint8_t                         primary_port;
1260                         ib_net32_t                      qkey;
1261                         uint16_t                        pkey_index;
1262                         ib_access_t                     access_ctrl;
1263
1264                 }       init;
1265
1266                 struct _qp_rtr
1267                 {
1268                         ib_net32_t                      rq_psn;
1269                         ib_net32_t                      dest_qp;
1270                         ib_av_attr_t            primary_av;
1271                         uint8_t                         resp_res;
1272                         uint8_t                         rnr_nak_timeout;
1273
1274                         ib_qp_opts_t            opts;
1275                         ib_av_attr_t            alternate_av;
1276                         ib_net32_t                      qkey;
1277                         uint16_t                        pkey_index;
1278                         ib_access_t                     access_ctrl;
1279                         uint32_t                        sq_depth;
1280                         uint32_t                        rq_depth;
1281
1282                 }       rtr;
1283
1284                 struct _qp_rts
1285                 {
1286                         ib_net32_t                      sq_psn;
1287                         uint8_t                         retry_cnt;
1288                         uint8_t                         rnr_retry_cnt;
1289                         uint8_t                         local_ack_timeout;
1290                         uint8_t                         init_depth;
1291
1292                         ib_qp_opts_t            opts;
1293                         uint8_t                         rnr_nak_timeout;
1294                         ib_qp_state_t           current_state;
1295                         ib_net32_t                      qkey;
1296                         ib_access_t                     access_ctrl;
1297                         uint8_t                         resp_res;
1298
1299                         ib_av_attr_t            primary_av;
1300                         ib_av_attr_t            alternate_av;
1301
1302                         uint32_t                        sq_depth;
1303                         uint32_t                        rq_depth;
1304
1305                         ib_apm_state_t          apm_state;
1306                         uint8_t                         primary_port;
1307                         uint16_t                        pkey_index;
1308
1309                 }       rts;
1310
1311                 struct _qp_sqd
1312                 {
1313                         boolean_t                       sqd_event;
1314
1315                 }       sqd;
1316
1317         }       state;
1318
1319 }       ib_qp_mod_t;
1320 /*
1321 * SEE ALSO
1322 *       ib_qp_state_t, ib_access_t, ib_av_attr_t, ib_apm_state_t
1323 *****/
1324
1325
1326 /****d* Access Layer/ib_wr_type_t
1327 * NAME
1328 *       ib_wr_type_t
1329 *
1330 * DESCRIPTION
1331 *       Identifies the type of work request posted to a queue pair.
1332 *
1333 * SYNOPSIS
1334 */
1335 typedef enum _ib_wr_type_t
1336 {
1337         WR_SEND = 1,
1338         WR_RDMA_WRITE,
1339         WR_RDMA_READ,
1340         WR_COMPARE_SWAP,
1341         WR_FETCH_ADD
1342
1343 }       ib_wr_type_t;
1344 /*****/
1345
1346
1347 /****s* Access Layer/ib_local_ds_t
1348 * NAME
1349 *       ib_local_ds_t
1350 *
1351 * DESCRIPTION
1352 *       Local data segment information referenced by send and receive work
1353 *       requests.  This is used to specify local data buffers used as part of a
1354 *       work request.
1355 *
1356 * SYNOPSIS
1357 */
1358 typedef struct _ib_local_ds
1359 {
1360         uint64_t                                vaddr;
1361         uint32_t                                length;
1362         uint32_t                                lkey;
1363
1364 }       ib_local_ds_t;
1365 /*****/
1366
1367
1368 /****d* Access Layer/ib_send_opt_t
1369 * NAME
1370 *       ib_send_opt_t
1371 *
1372 * DESCRIPTION
1373 *       Optional flags used when posting send work requests.  These flags
1374 *       indicate specific processing for the send operation.
1375 *
1376 * SYNOPSIS
1377 */
1378 typedef uint32_t                                        ib_send_opt_t;
1379 #define IB_SEND_OPT_IMMEDIATE           0x00000001
1380 #define IB_SEND_OPT_FENCE                       0x00000002
1381 #define IB_SEND_OPT_SIGNALED            0x00000004
1382 #define IB_SEND_OPT_SOLICITED           0x00000008
1383 #define IB_SEND_OPT_INLINE                      0x00000010
1384 #define IB_SEND_OPT_LOCAL                       0x00000020
1385 #define IB_SEND_OPT_VEND_MASK           0xFFFF0000
1386 /*
1387 * VALUES
1388 *       The following flags determine the behavior of a work request when
1389 *       posted to the send side.
1390 *
1391 *       IB_SEND_OPT_IMMEDIATE
1392 *               Send immediate data with the given request.
1393 *
1394 *       IB_SEND_OPT_FENCE
1395 *               The operation is fenced.  Complete all pending send operations before
1396 *               processing this request.
1397 *
1398 *       IB_SEND_OPT_SIGNALED
1399 *               If the queue pair is configured for signaled completion, then
1400 *               generate a completion queue entry when this request completes.
1401 *
1402 *       IB_SEND_OPT_SOLICITED
1403 *               Set the solicited bit on the last packet of this request.
1404 *
1405 *       IB_SEND_OPT_INLINE
1406 *               Indicates that the requested send data should be copied into a VPD
1407 *               owned data buffer.  This flag permits the user to issue send operations
1408 *               without first needing to register the buffer(s) associated with the
1409 *               send operation.  Verb providers that support this operation may place
1410 *               vendor specific restrictions on the size of send operation that may
1411 *               be performed as inline.
1412 *
1413 *       IB_SEND_OPT_LOCAL
1414 *               Indicates that a sent MAD request should be given to the local VPD for
1415 *               processing.  MADs sent using this option are not placed on the wire.
1416 *               This send option is only valid for MAD send operations.
1417 *
1418 *       IB_SEND_OPT_VEND_MASK
1419 *               This mask indicates bits reserved in the send options that may be used
1420 *               by the verbs provider to indicate vendor specific options.  Bits set
1421 *               in this area of the send options are ignored by the Access Layer, but
1422 *               may have specific meaning to the underlying VPD.
1423 *
1424 *****/
1425
1426
1427 /****s* Access Layer/ib_send_wr_t
1428 * NAME
1429 *       ib_send_wr_t
1430 *
1431 * DESCRIPTION
1432 *       Information used to submit a work request to the send queue of a queue
1433 *       pair.
1434 *
1435 * SYNOPSIS
1436 */
1437 typedef struct _ib_send_wr
1438 {
1439         struct _ib_send_wr* __ptr64     p_next;
1440         uint64_t                                        wr_id;
1441         ib_wr_type_t                            wr_type;
1442         ib_send_opt_t                           send_opt;
1443         uint32_t                                        num_ds;
1444         ib_local_ds_t* __ptr64          ds_array;
1445         ib_net32_t                                      immediate_data;
1446
1447         union _send_dgrm
1448         {
1449                 struct _send_ud
1450                 {
1451                         ib_net32_t              remote_qp;
1452                         ib_net32_t              remote_qkey;
1453                         ib_av_handle_t  h_av;
1454                         uint16_t                pkey_index;
1455                         void* __ptr64   rsvd;
1456
1457                 }       ud;
1458
1459                 struct _send_raw_ether
1460                 {
1461                         ib_net16_t              dest_lid;
1462                         uint8_t                 path_bits;
1463                         uint8_t                 sl;
1464                         uint8_t                 max_static_rate;
1465                         ib_net16_t              ether_type;
1466
1467                 }       raw_ether;
1468
1469                 struct _send_raw_ipv6
1470                 {
1471                         ib_net16_t              dest_lid;
1472                         uint8_t                 path_bits;
1473                         uint8_t                 sl;
1474                         uint8_t                 max_static_rate;
1475
1476                 }       raw_ipv6;
1477
1478         }       dgrm;
1479
1480         struct _send_remote_ops
1481         {
1482                 uint64_t                        vaddr;
1483                 net32_t                         rkey;
1484
1485                 ib_net64_t                      atomic1;
1486                 ib_net64_t                      atomic2;
1487
1488         }       remote_ops;
1489
1490 }       ib_send_wr_t;
1491 /*
1492 * FIELDS
1493 *       p_next
1494 *               A pointer used to chain work requests together.  This permits multiple
1495 *               work requests to be posted to a queue pair through a single function
1496 *               call.  This value is set to NULL to mark the end of the chain.
1497 *
1498 *       wr_id
1499 *               A 64-bit work request identifier that is returned to the consumer
1500 *               as part of the work completion.
1501 *
1502 *       wr_type
1503 *               The type of work request being submitted to the send queue.
1504 *
1505 *       send_opt
1506 *               Optional send control parameters.
1507 *
1508 *       num_ds
1509 *               Number of local data segments specified by this work request.
1510 *
1511 *       ds_array
1512 *               A reference to an array of local data segments used by the send
1513 *               operation.
1514 *
1515 *       immediate_data
1516 *               32-bit field sent as part of a message send or RDMA write operation.
1517 *               This field is only valid if the send_opt flag IB_SEND_OPT_IMMEDIATE
1518 *               has been set.
1519 *
1520 *       dgrm.ud.remote_qp
1521 *               Identifies the destination queue pair of an unreliable datagram send
1522 *               operation.
1523 *
1524 *       dgrm.ud.remote_qkey
1525 *               The qkey for the destination queue pair.
1526 *
1527 *       dgrm.ud.h_av
1528 *               An address vector that specifies the path information used to route
1529 *               the outbound datagram to the destination queue pair.
1530 *
1531 *       dgrm.ud.pkey_index
1532 *               The pkey index for this send work request.  This is valid only
1533 *               for IB_QPT_QP1 and IB_QPT_QP1_ALIAS QP types.  The work request
1534 *               is posted to using this pkey index build the GMP's BTH instead
1535 *               of the QP's pkey.
1536 *
1537 *       dgrm.ud.rsvd
1538 *               Reserved for use by the Access Layer.
1539 *
1540 *       dgrm.raw_ether.dest_lid
1541 *               The destination LID that will receive this raw ether send.
1542 *
1543 *       dgrm.raw_ether.path_bits
1544 *               path bits...
1545 *
1546 *       dgrm.raw_ether.sl
1547 *               service level...
1548 *
1549 *       dgrm.raw_ether.max_static_rate
1550 *               static rate...
1551 *
1552 *       dgrm.raw_ether.ether_type
1553 *               ether type...
1554 *
1555 *       dgrm.raw_ipv6.dest_lid
1556 *               The destination LID that will receive this raw ether send.
1557 *
1558 *       dgrm.raw_ipv6.path_bits
1559 *               path bits...
1560 *
1561 *       dgrm.raw_ipv6.sl
1562 *               service level...
1563 *
1564 *       dgrm.raw_ipv6.max_static_rate
1565 *               static rate...
1566 *
1567 *       remote_ops.vaddr
1568 *               The registered virtual memory address of the remote memory to access
1569 *               with an RDMA or atomic operation.
1570 *
1571 *       remote_ops.rkey
1572 *               The rkey associated with the specified remote vaddr. This data must
1573 *               be presented exactly as obtained from the remote node. No swapping
1574 *               of data must be performed.
1575 *
1576 *       atomic1
1577 *               The first operand for an atomic operation.
1578 *
1579 *       atomic2
1580 *               The second operand for an atomic operation.
1581 *
1582 * NOTES
1583 *       The format of data sent over the fabric is user-defined and is considered
1584 *       opaque to the access layer.  The sole exception to this are MADs posted
1585 *       to a MAD QP service.  MADs are expected to match the format defined by
1586 *       the Infiniband specification and must be in network-byte order when posted
1587 *       to the MAD QP service.
1588 *
1589 * SEE ALSO
1590 *       ib_wr_type_t, ib_local_ds_t, ib_send_opt_t
1591 *****/
1592
1593
1594 /****s* Access Layer/ib_recv_wr_t
1595 * NAME
1596 *       ib_recv_wr_t
1597 *
1598 * DESCRIPTION
1599 *       Information used to submit a work request to the receive queue of a queue
1600 *       pair.
1601 *
1602 * SYNOPSIS
1603 */
1604 typedef struct _ib_recv_wr
1605 {
1606         struct _ib_recv_wr* __ptr64     p_next;
1607         uint64_t                                        wr_id;
1608         uint32_t                                        num_ds;
1609         ib_local_ds_t* __ptr64          ds_array;
1610
1611 }       ib_recv_wr_t;
1612 /*
1613 * FIELDS
1614 *       p_next
1615 *               A pointer used to chain work requests together.  This permits multiple
1616 *               work requests to be posted to a queue pair through a single function
1617 *               call.  This value is set to NULL to mark the end of the chain.
1618 *
1619 *       wr_id
1620 *               A 64-bit work request identifier that is returned to the consumer
1621 *               as part of the work completion.
1622 *
1623 *       num_ds
1624 *               Number of local data segments specified by this work request.
1625 *
1626 *       ds_array
1627 *               A reference to an array of local data segments used by the send
1628 *               operation.
1629 *
1630 * SEE ALSO
1631 *       ib_local_ds_t
1632 *****/
1633
1634
1635 /****s* Access Layer/ib_bind_wr_t
1636 * NAME
1637 *       ib_bind_wr_t
1638 *
1639 * DESCRIPTION
1640 *       Information used to submit a memory window bind work request to the send
1641 *       queue of a queue pair.
1642 *
1643 * SYNOPSIS
1644 */
1645 typedef struct _ib_bind_wr
1646 {
1647         uint64_t                                wr_id;
1648         ib_send_opt_t                   send_opt;
1649
1650         ib_mr_handle_t                  h_mr;
1651         ib_access_t                             access_ctrl;
1652         net32_t                                 current_rkey;
1653
1654         ib_local_ds_t                   local_ds;
1655
1656 }       ib_bind_wr_t;
1657 /*
1658 * FIELDS
1659 *       wr_id
1660 *               A 64-bit work request identifier that is returned to the consumer
1661 *               as part of the work completion.
1662 *
1663 *       send_opt
1664 *               Optional send control parameters.
1665 *
1666 *       h_mr
1667 *               Handle to the memory region to which this window is being bound.
1668 *
1669 *       access_ctrl
1670 *               Access rights for this memory window.
1671 *
1672 *       current_rkey
1673 *               The current rkey assigned to this window for remote access.
1674 *
1675 *       local_ds
1676 *               A reference to a local data segment used by the bind operation.
1677 *
1678 * SEE ALSO
1679 *       ib_send_opt_t, ib_access_t, ib_local_ds_t
1680 *****/
1681
1682
1683 /****d* Access Layer/ib_wc_status_t
1684 * NAME
1685 *       ib_wc_status_t
1686 *
1687 * DESCRIPTION
1688 *       Indicates the status of a completed work request.  These VALUES are
1689 *       returned to the user when retrieving completions.  Note that success is
1690 *       identified as IB_WCS_SUCCESS, which is always zero.
1691 *
1692 * SYNOPSIS
1693 */
1694 typedef enum _ib_wc_status_t
1695 {
1696         IB_WCS_SUCCESS,
1697         IB_WCS_LOCAL_LEN_ERR,
1698         IB_WCS_LOCAL_OP_ERR,
1699         IB_WCS_LOCAL_PROTECTION_ERR,
1700         IB_WCS_WR_FLUSHED_ERR,
1701         IB_WCS_MEM_WINDOW_BIND_ERR,
1702         IB_WCS_REM_ACCESS_ERR,
1703         IB_WCS_REM_OP_ERR,
1704         IB_WCS_RNR_RETRY_ERR,
1705         IB_WCS_TIMEOUT_RETRY_ERR,
1706         IB_WCS_REM_INVALID_REQ_ERR,
1707         IB_WCS_UNMATCHED_RESPONSE,                      /* InfiniBand Access Layer */
1708         IB_WCS_CANCELED,                                        /* InfiniBand Access Layer */
1709         IB_WCS_UNKNOWN                                          /* Must be last. */
1710
1711 }       ib_wc_status_t;
1712 /*
1713 * VALUES
1714 *       IB_WCS_SUCCESS
1715 *               Work request completed successfully.
1716 *
1717 *       IB_WCS_MAD
1718 *               The completed work request was associated with a managmenet datagram
1719 *               that requires post processing.  The MAD will be returned to the user
1720 *               through a callback once all post processing has completed.
1721 *
1722 *       IB_WCS_LOCAL_LEN_ERR
1723 *               Generated for a work request posted to the send queue when the
1724 *               total of the data segment lengths exceeds the message length of the
1725 *               channel.  Generated for a work request posted to the receive queue when
1726 *               the total of the data segment lengths is too small for a
1727 *               valid incoming message.
1728 *
1729 *       IB_WCS_LOCAL_OP_ERR
1730 *               An internal QP consistency error was generated while processing this
1731 *               work request.  This may indicate that the QP was in an incorrect state
1732 *               for the requested operation.
1733 *
1734 *       IB_WCS_LOCAL_PROTECTION_ERR
1735 *               The data segments of the locally posted work request did not refer to
1736 *               a valid memory region.  The memory may not have been properly
1737 *               registered for the requested operation.
1738 *
1739 *       IB_WCS_WR_FLUSHED_ERR
1740 *               The work request was flushed from the QP before being completed.
1741 *
1742 *       IB_WCS_MEM_WINDOW_BIND_ERR
1743 *               A memory window bind operation failed due to insufficient access
1744 *               rights.
1745 *
1746 *       IB_WCS_REM_ACCESS_ERR,
1747 *               A protection error was detected at the remote node for a RDMA or atomic
1748 *               operation.
1749 *
1750 *       IB_WCS_REM_OP_ERR,
1751 *               The operation could not be successfully completed at the remote node.
1752 *               This may indicate that the remote QP was in an invalid state or
1753 *               contained an invalid work request.
1754 *
1755 *       IB_WCS_RNR_RETRY_ERR,
1756 *               The RNR retry count was exceeded while trying to send this message.
1757 *
1758 *       IB_WCS_TIMEOUT_RETRY_ERR
1759 *               The local transport timeout counter expired while trying to send this
1760 *               message.
1761 *
1762 *       IB_WCS_REM_INVALID_REQ_ERR,
1763 *               The remote node detected an invalid message on the channel.  This error
1764 *               is usually a result of one of the following:
1765 *                       - The operation was not supported on receive queue.
1766 *                       - There was insufficient buffers to receive a new RDMA request.
1767 *                       - There was insufficient buffers to receive a new atomic operation.
1768 *                       - An RDMA request was larger than 2^31 bytes.
1769 *
1770 *       IB_WCS_UNMATCHED_RESPONSE
1771 *               A response MAD was received for which there was no matching send.  The
1772 *               send operation may have been canceled by the user or may have timed
1773 *               out.
1774 *
1775 *       IB_WCS_CANCELED
1776 *               The completed work request was canceled by the user.
1777 *****/
1778
1779
1780
1781 /****f* IBA Base: Types/ib_get_wc_status_str
1782 * NAME
1783 *       ib_get_wc_status_str
1784 *
1785 * DESCRIPTION
1786 *       Returns a string for the specified work completion status.
1787 *
1788 * SYNOPSIS
1789 */
1790 AL_EXPORT const char* AL_API
1791 ib_get_wc_status_str(
1792         IN                              ib_wc_status_t                          wc_status );
1793 /*
1794 * PARAMETERS
1795 *       wc_status
1796 *               [in] work completion status value
1797 *
1798 * RETURN VALUES
1799 *       Pointer to the work completion status description string.
1800 *
1801 * NOTES
1802 *
1803 * SEE ALSO
1804 *********/
1805
1806
1807 /****d* Access Layer/ib_wc_type_t
1808 * NAME
1809 *       ib_wc_type_t
1810 *
1811 * DESCRIPTION
1812 *       Indicates the type of work completion.
1813 *
1814 * SYNOPSIS
1815 */
1816 typedef enum _ib_wc_type_t
1817 {
1818         IB_WC_SEND,
1819         IB_WC_RDMA_WRITE,
1820         IB_WC_RECV,
1821         IB_WC_RDMA_READ,
1822         IB_WC_MW_BIND,
1823         IB_WC_FETCH_ADD,
1824         IB_WC_COMPARE_SWAP,
1825         IB_WC_RECV_RDMA_WRITE,
1826         IB_WC_UNKNOWN
1827
1828 }       ib_wc_type_t;
1829 /*****/
1830
1831
1832 /****f* IBA Base: Types/ib_get_wc_type_str
1833 * NAME
1834 *       ib_get_wc_type_str
1835 *
1836 * DESCRIPTION
1837 *       Returns a string for the specified work completion type.
1838 *
1839 * SYNOPSIS
1840 */
1841 AL_EXPORT const char* AL_API
1842 ib_get_wc_type_str(
1843         IN                              ib_wc_type_t                            wc_type );
1844 /*
1845 * PARAMETERS
1846 *       wc_type
1847 *               [in] work completion type value
1848 *
1849 * RETURN VALUES
1850 *       Pointer to the work completion type description string.
1851 *
1852 * NOTES
1853 *
1854 * SEE ALSO
1855 *********/
1856
1857
1858 /****d* Access Layer/ib_recv_opt_t
1859 * NAME
1860 *       ib_recv_opt_t
1861 *
1862 * DESCRIPTION
1863 *       Indicates optional fields valid in a receive work completion.
1864 *
1865 * SYNOPSIS
1866 */
1867 typedef uint32_t                                        ib_recv_opt_t;
1868 #define IB_RECV_OPT_IMMEDIATE           0x00000001
1869 #define IB_RECV_OPT_FORWARD                     0x00000002
1870 #define IB_RECV_OPT_GRH_VALID           0x00000004
1871 #define IB_RECV_OPT_VEND_MASK           0xFFFF0000
1872 /*
1873 * VALUES
1874 *       IB_RECV_OPT_IMMEDIATE
1875 *               Indicates that immediate data is valid for this work completion.
1876 *
1877 *       IB_RECV_OPT_FORWARD
1878 *               Indicates that the received trap should be forwarded to the SM.
1879 *
1880 *       IB_RECV_OPT_GRH_VALID
1881 *               Indicates presence of the global route header. When set, the first
1882 *               40 bytes received are the GRH.
1883 *
1884 *       IB_RECV_OPT_VEND_MASK
1885 *               This mask indicates bits reserved in the receive options that may be
1886 *               used by the verbs provider to indicate vendor specific options.  Bits
1887 *               set in this area of the receive options are ignored by the Access Layer,
1888 *               but may have specific meaning to the underlying VPD.
1889 *****/
1890
1891
1892 /****s* Access Layer/ib_wc_t
1893 * NAME
1894 *       ib_wc_t
1895 *
1896 * DESCRIPTION
1897 *       Work completion information.
1898 *
1899 * SYNOPSIS
1900 */
1901 typedef struct _ib_wc
1902 {
1903         struct _ib_wc* __ptr64  p_next;
1904         uint64_t                                wr_id;
1905         ib_wc_type_t                    wc_type;
1906
1907         uint32_t                                length;
1908         ib_wc_status_t                  status;
1909         uint64_t                                vendor_specific;
1910
1911         union _wc_recv
1912         {
1913                 struct _wc_conn
1914                 {
1915                         ib_recv_opt_t   recv_opt;
1916                         ib_net32_t              immediate_data;
1917
1918                 }       conn;
1919
1920                 struct _wc_ud
1921                 {
1922                         ib_recv_opt_t   recv_opt;
1923                         ib_net32_t              immediate_data;
1924                         ib_net32_t              remote_qp;
1925                         uint16_t                pkey_index;
1926                         ib_net16_t              remote_lid;
1927                         uint8_t                 remote_sl;
1928                         uint8_t                 path_bits;
1929
1930                 }       ud;
1931
1932                 struct _wc_raw_ipv6
1933                 {
1934                         ib_net16_t              remote_lid;
1935                         uint8_t                 remote_sl;
1936                         uint8_t                 path_bits;
1937
1938                 }       raw_ipv6;
1939
1940                 struct _wc_raw_ether
1941                 {
1942                         ib_net16_t              remote_lid;
1943                         uint8_t                 remote_sl;
1944                         uint8_t                 path_bits;
1945                         ib_net16_t              ether_type;
1946
1947                 }       raw_ether;
1948
1949         }       recv;
1950
1951 }       ib_wc_t;
1952 /*
1953 * FIELDS
1954 *       p_next
1955 *               A pointer used to chain work completions.  This permits multiple
1956 *               work completions to be retrieved from a completion queue through a
1957 *               single function call.  This value is set to NULL to mark the end of
1958 *               the chain.
1959 *
1960 *       wr_id
1961 *               The 64-bit work request identifier that was specified when posting the
1962 *               work request.
1963 *
1964 *       wc_type
1965 *               Indicates the type of work completion.
1966 *
1967 *       length
1968 *               The total length of the data sent or received with the work request.
1969 *
1970 *       status
1971 *               The result of the work request.
1972 *
1973 *       vendor_specific
1974 *               HCA vendor specific information returned as part of the completion.
1975 *
1976 *       recv.conn.recv_opt
1977 *               Indicates optional fields valid as part of a work request that
1978 *               completed on a connected (reliable or unreliable) queue pair.
1979 *
1980 *       recv.conn.immediate_data
1981 *               32-bit field received as part of an inbound message on a connected
1982 *               queue pair.  This field is only valid if the recv_opt flag
1983 *               IB_RECV_OPT_IMMEDIATE has been set.
1984 *
1985 *       recv.ud.recv_opt
1986 *               Indicates optional fields valid as part of a work request that
1987 *               completed on an unreliable datagram queue pair.
1988 *
1989 *       recv.ud.immediate_data
1990 *               32-bit field received as part of an inbound message on a unreliable
1991 *               datagram queue pair.  This field is only valid if the recv_opt flag
1992 *               IB_RECV_OPT_IMMEDIATE has been set.
1993 *
1994 *       recv.ud.remote_qp
1995 *               Identifies the source queue pair of a received datagram.
1996 *
1997 *       recv.ud.pkey_index
1998 *               The pkey index of the source queue pair. This is valid only for
1999 *               IB_QPT_QP1 and IB_QPT_QP1_ALIAS QP types.
2000 *
2001 *       recv.ud.remote_lid
2002 *               The source LID of the received datagram.
2003 *
2004 *       recv.ud.remote_sl
2005 *               The service level used by the source of the received datagram.
2006 *
2007 *       recv.ud.path_bits
2008 *               path bits...
2009 *
2010 *       recv.raw_ipv6.remote_lid
2011 *               The source LID of the received message.
2012 *
2013 *       recv.raw_ipv6.remote_sl
2014 *               The service level used by the source of the received message.
2015 *
2016 *       recv.raw_ipv6.path_bits
2017 *               path bits...
2018 *
2019 *       recv.raw_ether.remote_lid
2020 *               The source LID of the received message.
2021 *
2022 *       recv.raw_ether.remote_sl
2023 *               The service level used by the source of the received message.
2024 *
2025 *       recv.raw_ether.path_bits
2026 *               path bits...
2027 *
2028 *       recv.raw_ether.ether_type
2029 *               ether type...
2030 * NOTES
2031 *       When the work request completes with error, the only values that the
2032 *       consumer can depend on are the wr_id field, and the status of the
2033 *       operation.
2034 *
2035 *       If the consumer is using the same CQ for completions from more than
2036 *       one type of QP (i.e Reliable Connected, Datagram etc), then the consumer
2037 *       must have additional information to decide what fields of the union are
2038 *       valid.
2039 * SEE ALSO
2040 *       ib_wc_type_t, ib_qp_type_t, ib_wc_status_t, ib_recv_opt_t
2041 *****/
2042
2043
2044 /****s* Access Layer/ib_mr_create_t
2045 * NAME
2046 *       ib_mr_create_t
2047 *
2048 * DESCRIPTION
2049 *       Information required to create a registered memory region.
2050 *
2051 * SYNOPSIS
2052 */
2053 typedef struct _ib_mr_create
2054 {
2055         void* __ptr64                   vaddr;
2056         uint64_t                                length;
2057         ib_access_t                             access_ctrl;
2058
2059 }       ib_mr_create_t;
2060 /*
2061 * FIELDS
2062 *       vaddr
2063 *               Starting virtual address of the region being registered.
2064 *
2065 *       length
2066 *               Length of the buffer to register.
2067 *
2068 *       access_ctrl
2069 *               Access rights of the registered region.
2070 *
2071 * SEE ALSO
2072 *       ib_access_t
2073 *****/
2074
2075
2076 /****s* Access Layer/ib_phys_range_t
2077 * NAME
2078 *       ib_phys_range_t
2079 *
2080 * DESCRIPTION
2081 *       Information describing a physical memory range.
2082 *
2083 * SYNOPSIS
2084 */
2085 typedef struct _ib_phys_range
2086 {
2087         uint64_t                                base_addr;
2088         uint64_t                                size;
2089
2090 }       ib_phys_range_t;
2091 /*
2092 * FIELDS
2093 *       base_addr
2094 *               Physical address of the base of the memory range.
2095 *
2096 *       size
2097 *               size, in bytes, of the memory range.
2098 *
2099 * NOTES
2100 *       The base address must be start and end on an HCA-supported page boundary.
2101 *
2102 * SEE ALSO
2103 *       ib_phys_create_t
2104 *********/
2105
2106
2107 /****s* Access Layer/ib_phys_create_t
2108 * NAME
2109 *       ib_phys_create_t
2110 *
2111 * DESCRIPTION
2112 *       Information required to create a physical memory region.
2113 *
2114 * SYNOPSIS
2115 */
2116 typedef struct _ib_phys_create
2117 {
2118         uint64_t                                        length;
2119         uint32_t                                        num_ranges;
2120         ib_phys_range_t* __ptr64        range_array;
2121         uint32_t                                        buf_offset;
2122         uint32_t                                        hca_page_size;
2123         ib_access_t                                     access_ctrl;
2124
2125 }       ib_phys_create_t;
2126 /*
2127 * FIELDS
2128 *       length
2129 *               The length of the memory region in bytes.
2130 *
2131 *       num_ranges
2132 *               Number of ib_phys_range structures listed in the specified range array.
2133 *
2134 *       range_array
2135 *               An array of ib_phys_range structures to be registered as a single memory
2136 *               region.
2137 *
2138 *       buf_offset
2139 *               The offset into the first physical memory range of the specified memory
2140 *               region on which to start the virtual address.
2141 *
2142 *       hca_page_size
2143 *               The HCA page size to use to register the memory.
2144 *
2145 *       access_ctrl
2146 *               Access rights of the registered region.
2147 *
2148 * SEE ALSO
2149 *       ib_access_t
2150 *****/
2151
2152
2153 /****s* Access Layer/ib_mr_attr_t
2154 * NAME
2155 *       ib_mr_attr_t
2156 *
2157 * DESCRIPTION
2158 *       Attributes of a registered memory region.
2159 *
2160 * SYNOPSIS
2161 */
2162 typedef struct _ib_mr_attr
2163 {
2164         ib_pd_handle_t                  h_pd;
2165         uint64_t                                local_lb;
2166         uint64_t                                local_ub;
2167         uint64_t                                remote_lb;
2168         uint64_t                                remote_ub;
2169         ib_access_t                             access_ctrl;
2170         net32_t                                 lkey;
2171         net32_t                                 rkey;
2172
2173 }       ib_mr_attr_t;
2174 /*
2175 * DESCRIPTION
2176 *       h_pd
2177 *               Handle to the protection domain for this memory region.
2178 *
2179 *       local_lb
2180 *               The virtual address of the lower bound of protection for local
2181 *               memory access.  This is always a 64-bit quantity to support registering
2182 *               more than 4GB of memory on 32-bit systems with PAE.
2183 *
2184 *       local_ub
2185 *               The virtual address of the upper bound of protection for local
2186 *               memory access.  This is always a 64-bit quantity to support registering
2187 *               more than 4GB of memory on 32-bit systems with PAE.
2188 *
2189 *       remote_lb
2190 *               The virtual address of the lower bound of protection for remote
2191 *               memory access.  This is always a 64-bit quantity to support registering
2192 *               more than 4GB of memory on 32-bit systems with PAE.
2193 *
2194 *       remote_ub
2195 *               The virtual address of the upper bound of protection for remote
2196 *               memory access.  This is always a 64-bit quantity to support registering
2197 *               more than 4GB of memory on 32-bit systems with PAE.
2198 *
2199 *       access_ctrl
2200 *               Access rights for the specified memory region.
2201 *
2202 *       lkey
2203 *               The lkey associated with this memory region.
2204 *
2205 *       rkey
2206 *               The rkey associated with this memory region.
2207 *
2208 * NOTES
2209 *       The remote_lb, remote_ub, and rkey are only valid if remote memory access
2210 *       is enabled for this memory region.
2211 *
2212 * SEE ALSO
2213 *       ib_access_t
2214 *****/
2215
2216
2217 /****d* Access Layer/ib_ca_mod_t
2218 * NAME
2219 *       ib_ca_mod_t -- Modify port attributes and error counters
2220 *
2221 * DESCRIPTION
2222 *       Specifies modifications to the port attributes of a channel adapter.
2223 *
2224 * SYNOPSIS
2225 */
2226 typedef uint32_t                                                        ib_ca_mod_t;
2227 #define IB_CA_MOD_IS_CM_SUPPORTED                       0x00000001
2228 #define IB_CA_MOD_IS_SNMP_SUPPORTED                     0x00000002
2229 #define IB_CA_MOD_IS_DEV_MGMT_SUPPORTED         0x00000004
2230 #define IB_CA_MOD_IS_VEND_SUPPORTED                     0x00000008
2231 #define IB_CA_MOD_IS_SM                                         0x00000010
2232 #define IB_CA_MOD_IS_SM_DISABLED                        0x00000020
2233 #define IB_CA_MOD_QKEY_CTR                                      0x00000040
2234 #define IB_CA_MOD_PKEY_CTR                                      0x00000080
2235 #define IB_CA_MOD_IS_NOTICE_SUPPORTED           0x00000100
2236 #define IB_CA_MOD_IS_TRAP_SUPPORTED                     0x00000200
2237 #define IB_CA_MOD_IS_APM_SUPPORTED                      0x00000400
2238 #define IB_CA_MOD_IS_SLMAP_SUPPORTED            0x00000800
2239 #define IB_CA_MOD_IS_PKEY_NVRAM_SUPPORTED       0x00001000
2240 #define IB_CA_MOD_IS_MKEY_NVRAM_SUPPORTED       0x00002000
2241 #define IB_CA_MOD_IS_SYSGUID_SUPPORTED          0x00004000
2242 #define IB_CA_MOD_IS_DR_NOTICE_SUPPORTED        0x00008000
2243 #define IB_CA_MOD_IS_BOOT_MGMT_SUPPORTED        0x00010000
2244 #define IB_CA_MOD_IS_CAPM_NOTICE_SUPPORTED      0x00020000
2245 #define IB_CA_MOD_IS_REINIT_SUPORTED            0x00040000
2246 #define IB_CA_MOD_IS_LEDINFO_SUPPORTED          0x00080000
2247 #define IB_CA_MOD_SHUTDOWN_PORT                         0x00100000
2248 #define IB_CA_MOD_INIT_TYPE_VALUE                       0x00200000
2249 #define IB_CA_MOD_SYSTEM_IMAGE_GUID                     0x00400000
2250 /*
2251 * VALUES
2252 *       IB_CA_MOD_IS_CM_SUPPORTED
2253 *               Indicates if there is a communication manager accessible through
2254 *               the port.
2255 *
2256 *       IB_CA_MOD_IS_SNMP_SUPPORTED
2257 *               Indicates if there is an SNMP agent accessible through the port.
2258 *
2259 *       IB_CA_MOD_IS_DEV_MGMT_SUPPORTED
2260 *               Indicates if there is a device management agent accessible through
2261 *               the port.
2262 *
2263 *       IB_CA_MOD_IS_VEND_SUPPORTED
2264 *               Indicates if there is a vendor supported agent accessible through
2265 *               the port.
2266 *
2267 *       IB_CA_MOD_IS_SM
2268 *               Indicates if there is a subnet manager accessible through
2269 *               the port.
2270 *
2271 *       IB_CA_MOD_IS_SM_DISABLED
2272 *               Indicates if the port has been disabled for configuration by the subnet
2273 *               manager.
2274 *
2275 *       IB_CA_MOD_QKEY_CTR
2276 *               Used to reset the qkey violation counter associated with the port.
2277 *
2278 *       IB_CA_MOD_PKEY_CTR
2279 *               Used to reset the pkey violation counter associated with the port.
2280 *
2281 *       IB_CA_MOD_IS_NOTICE_SUPPORTED
2282 *               Indicates that this CA supports ability to generate Notices for
2283 *               Port State changes. (only applicable to switches)
2284 *
2285 *       IB_CA_MOD_IS_TRAP_SUPPORTED
2286 *               Indicates that this management port supports ability to generate
2287 *               trap messages. (only applicable to switches)
2288 *
2289 *       IB_CA_MOD_IS_APM_SUPPORTED
2290 *               Indicates that this port is capable of performing Automatic Migration.
2291 *
2292 *       IB_CA_MOD_IS_SLMAP_SUPPORTED
2293 *               Indicates this port supports SLMAP capability.
2294 *
2295 *       IB_CA_MOD_IS_PKEY_NVRAM_SUPPORTED
2296 *               Indicates that PKEY is supported in NVRAM
2297 *
2298 *       IB_CA_MOD_IS_MKEY_NVRAM_SUPPORTED
2299 *               Indicates that MKEY is supported in NVRAM
2300 *
2301 *       IB_CA_MOD_IS_SYSGUID_SUPPORTED
2302 *               Indicates System Image GUID support.
2303 *
2304 *       IB_CA_MOD_IS_DR_NOTICE_SUPPORTED
2305 *               Indicate support for generating Direct Routed Notices
2306 *
2307 *       IB_CA_MOD_IS_BOOT_MGMT_SUPPORTED
2308 *               Indicates support for Boot Management
2309 *
2310 *       IB_CA_MOD_IS_CAPM_NOTICE_SUPPORTED
2311 *               Indicates capability to generate notices for changes to CAPMASK
2312 *
2313 *       IB_CA_MOD_IS_REINIT_SUPORTED
2314 *               Indicates type of node init supported. Refer to Chapter 14 for
2315 *               Initialization actions.
2316 *
2317 *       IB_CA_MOD_IS_LEDINFO_SUPPORTED
2318 *               Indicates support for LED info.
2319 *
2320 *       IB_CA_MOD_SHUTDOWN_PORT
2321 *               Used to modify the port active indicator.
2322 *
2323 *       IB_CA_MOD_INIT_TYPE_VALUE
2324 *               Used to modify the init_type value for the port.
2325 *
2326 *       IB_CA_MOD_SYSTEM_IMAGE_GUID
2327 *               Used to modify the system image GUID for the port.
2328 *****/
2329
2330
2331 /****d* Access Layer/ib_mr_mod_t
2332 * NAME
2333 *       ib_mr_mod_t
2334 *
2335 * DESCRIPTION
2336 *       Mask used to specify which attributes of a registered memory region are
2337 *       being modified.
2338 *
2339 * SYNOPSIS
2340 */
2341 typedef uint32_t                                                ib_mr_mod_t;
2342 #define IB_MR_MOD_ADDR                                  0x00000001
2343 #define IB_MR_MOD_PD                                    0x00000002
2344 #define IB_MR_MOD_ACCESS                                0x00000004
2345 /*
2346 * PARAMETERS
2347 *       IB_MEM_MOD_ADDR
2348 *               The address of the memory region is being modified.
2349 *
2350 *       IB_MEM_MOD_PD
2351 *               The protection domain associated with the memory region is being
2352 *               modified.
2353 *
2354 *       IB_MEM_MOD_ACCESS
2355 *               The access rights the memory region are being modified.
2356 *****/
2357
2358 /****d* IBA Base: Constants/IB_SMINFO_STATE_INIT
2359 * NAME
2360 *       IB_SMINFO_STATE_INIT
2361 *
2362 * DESCRIPTION
2363 *       Encoded state value used in the SMInfo attribute.
2364 *
2365 * SOURCE
2366 */
2367 #define IB_SMINFO_STATE_INIT                                    4
2368 /**********/
2369
2370 /****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_HANDOVER
2371 * NAME
2372 *       IB_SMINFO_ATTR_MOD_HANDOVER
2373 *
2374 * DESCRIPTION
2375 *       Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.
2376 *
2377 * SOURCE
2378 */
2379 #define IB_SMINFO_ATTR_MOD_HANDOVER             (CL_NTOH32(0x000001))
2380 /**********/
2381
2382 /****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_ACKNOWLEDGE
2383 * NAME
2384 *       IB_SMINFO_ATTR_MOD_ACKNOWLEDGE
2385 *
2386 * DESCRIPTION
2387 *       Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.
2388 *
2389 * SOURCE
2390 */
2391 #define IB_SMINFO_ATTR_MOD_ACKNOWLEDGE          (CL_NTOH32(0x000002))
2392 /**********/
2393
2394 /****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_DISABLE
2395 * NAME
2396 *       IB_SMINFO_ATTR_MOD_DISABLE
2397 *
2398 * DESCRIPTION
2399 *       Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.
2400 *
2401 * SOURCE
2402 */
2403 #define IB_SMINFO_ATTR_MOD_DISABLE                      (CL_NTOH32(0x000003))
2404 /**********/
2405
2406 /****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_STANDBY
2407 * NAME
2408 *       IB_SMINFO_ATTR_MOD_STANDBY
2409 *
2410 * DESCRIPTION
2411 *       Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.
2412 *
2413 * SOURCE
2414 */
2415 #define IB_SMINFO_ATTR_MOD_STANDBY                      (CL_NTOH32(0x000004))
2416 /**********/
2417
2418 /****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_DISCOVER
2419 * NAME
2420 *       IB_SMINFO_ATTR_MOD_DISCOVER
2421 *
2422 * DESCRIPTION
2423 *       Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.
2424 *
2425 * SOURCE
2426 */
2427 #define IB_SMINFO_ATTR_MOD_DISCOVER                     (CL_NTOH32(0x000005))
2428 /**********/
2429
2430 /****s* Access Layer/ib_ci_op_t
2431 * NAME
2432 *       ib_ci_op_t
2433 *
2434 * DESCRIPTION
2435 *       A structure used for vendor specific CA interface communication.
2436 *
2437 * SYNOPSIS
2438 */
2439 typedef struct _ib_ci_op
2440 {
2441         IN                              uint32_t                                        command;
2442         IN                              uint32_t                                        buf_size;
2443         IN                              uint32_t                                        buf_info;
2444         IN      OUT                     int32_t                                         status;
2445                 OUT                     uint32_t                                        num_bytes_ret;
2446         IN      OUT                     void* __ptr64                           p_buf OPTIONAL;
2447
2448 }       ib_ci_op_t;
2449 /*
2450 * FIELDS
2451 *       command
2452 *               A command code that is understood by the verbs provider.
2453 *
2454 *       status
2455 *               The completion status from the verbs provider.  This field should be
2456 *               initialize to indicate an error to allow detection and cleanup in
2457 *               case a communication error occurs between user-mode and kernel-mode.
2458 *
2459 *       buf_size
2460 *               The size of the buffer in bytes.
2461 *
2462 *       buf_info
2463 *               Additional buffer information
2464 *
2465 *       p_buf
2466 *               A reference to a buffer containing vendor specific data.  The verbs
2467 *               provider must not access pointers in the p_buf between user-mode and
2468 *               kernel-mode.  Any pointers embedded in the p_buf are invalidated by
2469 *               the user-mode/kernel-mode transition.
2470 *
2471 *       num_bytes_ret
2472 *               The size in bytes of the vendor specific data returned in the buffer.
2473 *               This field is set by the verbs provider.  The verbs provider should
2474 *               verify that the buffer size is sufficient to hold the data being
2475 *               returned.
2476 *
2477 * NOTES
2478 *       This structure is provided to allow the exchange of vendor specific
2479 *       data between the originator and the verbs provider.  Users of this
2480 *       structure are expected to know the format of data in the p_buf based
2481 *       on the structure command field or the usage context.
2482 *****/
2483
2484
2485 #endif // __IB_TYPES_EXTENDED_H__