[ptr64] Fix some more minor issues in fields.
authortzachid <tzachid@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 1 May 2008 16:22:13 +0000 (16:22 +0000)
committertzachid <tzachid@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 1 May 2008 16:22:13 +0000 (16:22 +0000)
Signed by: Xalex

git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@1104 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

inc/iba/ib_al.h
inc/iba/ib_types.h
ulp/opensm/user/include/iba/ib_types_extended.h

index 6cca1d0..dc9cb2e 100644 (file)
@@ -5163,18 +5163,19 @@ typedef struct _ib_cm_req
 \r
        ib_al_flags_t                           flags;\r
        uint8_t                                         max_cm_retries;\r
-\r
+    uint8_t                                            req_length;\r
+    \r
        TO_LONG_PTR(ib_path_rec_t* ,            p_primary_path) ;\r
 \r
-       ib_pfn_cm_rep_cb_t                      pfn_cm_rep_cb;\r
+       TO_LONG_PTR(ib_pfn_cm_rep_cb_t, pfn_cm_rep_cb);\r
 \r
        TO_LONG_PTR(const uint8_t* ,            p_req_pdata) ;\r
-       uint8_t                                         req_length;\r
+       \r
 \r
        ib_qp_type_t                            qp_type;\r
 \r
        /* valid for rc, uc & rd qp_type only */\r
-TO_LONG_PTR(   ib_qp_handle_t ,                                h_qp) ; \r
+    TO_LONG_PTR(       ib_qp_handle_t ,                                h_qp) ; \r
 \r
        TO_LONG_PTR(uint8_t* ,                  p_compare_buffer) ;\r
        uint8_t                                         compare_offset;\r
@@ -5189,14 +5190,14 @@ TO_LONG_PTR(    ib_qp_handle_t ,                                h_qp) ;
        uint8_t                                         rnr_retry_cnt;\r
        uint8_t                                         retry_cnt;\r
 \r
-       TO_LONG_PTR(ib_path_rec_t* ,            p_alt_path OPTIONAL) ;\r
+       TO_LONG_PTR(ib_path_rec_t* ,            p_alt_path ) OPTIONAL;\r
 \r
-       ib_pfn_cm_req_cb_t                      pfn_cm_req_cb;\r
-       ib_pfn_cm_mra_cb_t                      pfn_cm_mra_cb;\r
-       ib_pfn_cm_rej_cb_t                      pfn_cm_rej_cb;\r
+       TO_LONG_PTR(ib_pfn_cm_req_cb_t, pfn_cm_req_cb);\r
+       TO_LONG_PTR(ib_pfn_cm_mra_cb_t, pfn_cm_mra_cb);\r
+       TO_LONG_PTR(ib_pfn_cm_rej_cb_t, pfn_cm_rej_cb);\r
 \r
        /* valid for ud qp_type only */\r
-TO_LONG_PTR(   ib_al_handle_t ,                                h_al) ; \r
+    TO_LONG_PTR(       ib_al_handle_t ,                                h_al) ; \r
        TO_LONG_PTR(const void* ,                       sidr_context) ;\r
        uint32_t                                        timeout_ms;\r
        ib_net16_t                                      pkey;\r
@@ -5378,11 +5379,11 @@ TO_LONG_PTR(    ib_qp_handle_t ,                                h_qp) ;
        uint8_t                                         rnr_nak_timeout;\r
        uint8_t                                         rnr_retry_cnt;\r
 \r
-       ib_pfn_cm_rej_cb_t                      pfn_cm_rej_cb;\r
-       ib_pfn_cm_mra_cb_t                      pfn_cm_mra_cb;\r
-       ib_pfn_cm_rtu_cb_t                      pfn_cm_rtu_cb;\r
-       ib_pfn_cm_lap_cb_t                      pfn_cm_lap_cb;\r
-       ib_pfn_cm_dreq_cb_t                     pfn_cm_dreq_cb;\r
+       TO_LONG_PTR(ib_pfn_cm_rej_cb_t, pfn_cm_rej_cb);\r
+       TO_LONG_PTR(ib_pfn_cm_mra_cb_t, pfn_cm_mra_cb);\r
+       TO_LONG_PTR(ib_pfn_cm_rtu_cb_t, pfn_cm_rtu_cb);\r
+       TO_LONG_PTR(ib_pfn_cm_lap_cb_t, pfn_cm_lap_cb);\r
+       TO_LONG_PTR(ib_pfn_cm_dreq_cb_t,pfn_cm_dreq_cb);\r
 \r
        TO_LONG_PTR(ib_recv_wr_t* ,                     p_recv_wr) ;\r
        TO_LONG_PTR(ib_recv_wr_t* *, /*__ptr64*/        pp_recv_failure) ;\r
@@ -7580,17 +7581,17 @@ typedef enum _ib_mad_svc_type
 */\r
 typedef struct _ib_mad_svc\r
 {\r
-       void                                            *mad_svc_context;\r
-       ib_pfn_mad_comp_cb_t            pfn_mad_send_cb;\r
-       ib_pfn_mad_comp_cb_t            pfn_mad_recv_cb;\r
+       TO_LONG_PTR(void*, mad_svc_context);\r
+       TO_LONG_PTR(ib_pfn_mad_comp_cb_t, pfn_mad_send_cb);\r
+       TO_LONG_PTR(ib_pfn_mad_comp_cb_t,pfn_mad_recv_cb);\r
 \r
        boolean_t                                       support_unsol;\r
        uint8_t                                         mgmt_class;\r
        uint8_t                                         mgmt_version;\r
+    ib_mad_svc_type_t                  svc_type;\r
+    \r
        boolean_t                                       method_array[IB_MAX_METHODS];\r
 \r
-       ib_mad_svc_type_t                       svc_type;\r
-\r
 }      ib_mad_svc_t;\r
 /*\r
 * FIELDS\r
index 9eafb61..f5c7e32 100644 (file)
@@ -11324,9 +11324,9 @@ typedef struct _ib_ci_op
        IN                              uint32_t                                        buf_size;\r
        IN                              uint32_t                                        buf_info;\r
        IN      OUT                     int32_t                                         status;\r
+    IN OUT                     TO_LONG_PTR(void*, p_buf) OPTIONAL; // Do not put it last in the structure, because of memory alignment\r
                OUT                     uint32_t                                        num_bytes_ret;\r
-       IN      OUT                     void* FUNC_PTR64                                p_buf OPTIONAL;\r
-\r
+       \r
 }      ib_ci_op_t;\r
 /*\r
 * FIELDS\r
index 1f7b40b..62ae056 100644 (file)
-/*
- * Copyright (c) 2004,2005 Voltaire, Inc. All rights reserved.   
- * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.   
- * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.   
- *  
- * This software is available to you under the OpenIB.org BSD license  
- * below:  
- *  
- *     Redistribution and use in source and binary forms, with or  
- *     without modification, are permitted provided that the following  
- *     conditions are met:  
- *  
- *      - Redistributions of source code must retain the above  
- *        copyright notice, this list of conditions and the following  
- *        disclaimer.  
- *  
- *      - Redistributions in binary form must reproduce the above  
- *        copyright notice, this list of conditions and the following  
- *        disclaimer in the documentation and/or other materials  
- *        provided with the distribution.  
- *  
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF   
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND           
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE  
- * SOFTWARE.  
- *  
- * $Id$
- */
-
-
-#if !defined(__IB_TYPES_EXTENDED_H__)
-#define __IB_TYPES_EXTENDED_H__
-
-
-#if defined( WIN32 )
-       #if defined( EXPORT_AL_SYMBOLS )
-               #define AL_EXPORT       __declspec(dllexport)
-       #else
-               #define AL_EXPORT       __declspec(dllimport)
-       #endif
-
-       #ifdef CL_KERNEL
-               #define AL_API
-               #define AL_INLINE       static inline
-       #else
-               #define AL_API          __stdcall
-               #define AL_INLINE       static  inline
-       #endif  /* CL_KERNEL */
-#else
-       #define AL_EXPORT       extern
-       #define AL_INLINE       static inline
-       #define AL_API
-       #define __ptr64
-#endif
-
-#ifndef FUNC_PTR64
-#define FUNC_PTR64
-#endif
-
-#ifndef TYPEDEF_PTR64
-#define TYPEDEF_PTR64
-#endif
-
-#ifndef VOID_PTR64
-#define VOID_PTR64
-#endif
-
-#ifndef STRUCT_PTR64
-#define STRUCT_PTR64
-#endif
-
-
-//#ifndef CONCAT
-#define CONCAT(str1, str2) str1##str2
-//#endif
-
-//#ifndef T0_LONG_PTR
-#define TO_LONG_PTR(type,member_name) \
-    union { type member_name;  uint64_t CONCAT(member_name,_padding) ; }
-//#endif
-
-/*
- *     Defines the size of user available data in communication management MADs
- */
-#define IB_REQ_PDATA_SIZE                                      92
-#define IB_MRA_PDATA_SIZE                                      222
-#define IB_REJ_PDATA_SIZE                                      148
-#define IB_REP_PDATA_SIZE                                      196
-#define IB_RTU_PDATA_SIZE                                      224
-#define IB_LAP_PDATA_SIZE                                      168
-#define IB_APR_PDATA_SIZE                                      148
-#define IB_DREQ_PDATA_SIZE                                     220
-#define IB_DREP_PDATA_SIZE                                     224
-#define IB_SIDR_REQ_PDATA_SIZE                         216
-#define IB_SIDR_REP_PDATA_SIZE                         136
-
-/* following v1 ver1.2 p901 */
-#define IB_PATH_RECORD_RATE_5_GBS               5
-#define IB_PATH_RECORD_RATE_20_GBS              6
-#define IB_PATH_RECORD_RATE_40_GBS              7
-#define IB_PATH_RECORD_RATE_60_GBS              8
-#define IB_PATH_RECORD_RATE_80_GBS              9
-#define IB_PATH_RECORD_RATE_120_GBS             10
-
-
-
-typedef struct _ib_srq*  TYPEDEF_PTR64  ib_srq_handle_t ; 
-
-/*
- *     The following definitions are shared between the Access Layer and VPD
- */
-
-
-
-/****d* Access Layer/ib_api_status_t
-* NAME
-*      ib_api_status_t
-*
-* DESCRIPTION
-*      Function return codes indicating the success or failure of an API call.
-*      Note that success is indicated by the return value IB_SUCCESS, which
-*      is always zero.
-*
-* NOTES
-*      IB_VERBS_PROCESSING_DONE is used by UVP library to terminate a verbs call
-*      in the pre-ioctl step itself.
-*
-* SYNOPSIS
-*/
-typedef enum _ib_api_status_t
-{
-       IB_SUCCESS,
-       IB_INSUFFICIENT_RESOURCES,
-       IB_INSUFFICIENT_MEMORY,
-       IB_INVALID_PARAMETER,
-       IB_INVALID_SETTING,
-       IB_NOT_FOUND,
-       IB_TIMEOUT,
-       IB_CANCELED,
-       IB_INTERRUPTED,
-       IB_INVALID_PERMISSION,
-       IB_UNSUPPORTED,
-       IB_OVERFLOW,
-       IB_MAX_MCAST_QPS_REACHED,
-       IB_INVALID_QP_STATE,
-       IB_INVALID_APM_STATE,
-       IB_INVALID_PORT_STATE,
-       IB_INVALID_STATE,
-       IB_RESOURCE_BUSY,
-       IB_INVALID_PKEY,
-       IB_INVALID_LKEY,
-       IB_INVALID_RKEY,
-       IB_INVALID_MAX_WRS,
-       IB_INVALID_MAX_SGE,
-       IB_INVALID_CQ_SIZE,
-       IB_INVALID_SRQ_SIZE,
-       IB_INVALID_SERVICE_TYPE,
-       IB_INVALID_GID,
-       IB_INVALID_LID,
-       IB_INVALID_GUID,
-       IB_INVALID_CA_HANDLE,
-       IB_INVALID_AV_HANDLE,
-       IB_INVALID_CQ_HANDLE,
-       IB_INVALID_QP_HANDLE,
-       IB_INVALID_SRQ_HANDLE,
-       IB_INVALID_PD_HANDLE,
-       IB_INVALID_MR_HANDLE,
-       IB_INVALID_FMR_HANDLE,
-       IB_INVALID_MW_HANDLE,
-       IB_INVALID_MCAST_HANDLE,
-       IB_INVALID_CALLBACK,
-       IB_INVALID_AL_HANDLE,                                   /* InfiniBand Access Layer */
-       IB_INVALID_HANDLE,                                              /* InfiniBand Access Layer */
-       IB_ERROR,                                                               /* InfiniBand Access Layer */
-       IB_REMOTE_ERROR,                                                /* Infiniband Access Layer */
-       IB_VERBS_PROCESSING_DONE,                               /* See Notes above                 */
-       IB_INVALID_WR_TYPE,
-       IB_QP_IN_TIMEWAIT,
-       IB_EE_IN_TIMEWAIT,
-       IB_INVALID_PORT,
-       IB_NOT_DONE,
-       IB_INVALID_INDEX,
-       IB_NO_MATCH,
-       IB_PENDING,
-       IB_UNKNOWN_ERROR                                                /* ALWAYS LAST ENUM VALUE! */
-
-}      ib_api_status_t;
-/*****/
-
-
-
-/****f* IBA Base: Types/ib_get_err_str
-* NAME
-*      ib_get_err_str
-*
-* DESCRIPTION
-*      Returns a string for the specified status value.
-*
-* SYNOPSIS
-*/
-AL_EXPORT const char* AL_API
-ib_get_err_str(
-       IN                              ib_api_status_t                         status );
-/*
-* PARAMETERS
-*      status
-*              [in] status value
-*
-* RETURN VALUES
-*      Pointer to the status description string.
-*
-* NOTES
-*
-* SEE ALSO
-*********/
-
-/****d* Verbs/ib_async_event_t
-* NAME
-*      ib_async_event_t -- Async event types
-*
-* DESCRIPTION
-*      This type indicates the reason the async callback was called.
-*      The context in the ib_event_rec_t indicates the resource context
-*      that associated with the callback.  For example, for IB_AE_CQ_ERROR
-*      the context provided during the ib_create_cq is returned in the event.
-*
-* SYNOPSIS
-*/
-typedef enum _ib_async_event_t
-{
-       IB_AE_SQ_ERROR = 1,
-       IB_AE_SQ_DRAINED,
-       IB_AE_RQ_ERROR,
-       IB_AE_CQ_ERROR,
-       IB_AE_QP_FATAL,
-       IB_AE_QP_COMM,
-       IB_AE_QP_APM,
-       IB_AE_LOCAL_FATAL,
-       IB_AE_PKEY_TRAP,
-       IB_AE_QKEY_TRAP,
-       IB_AE_MKEY_TRAP,
-       IB_AE_PORT_TRAP,
-       IB_AE_SYSIMG_GUID_TRAP,
-       IB_AE_BUF_OVERRUN,
-       IB_AE_LINK_INTEGRITY,
-       IB_AE_FLOW_CTRL_ERROR,
-       IB_AE_BKEY_TRAP,
-       IB_AE_QP_APM_ERROR,
-       IB_AE_WQ_REQ_ERROR,
-       IB_AE_WQ_ACCESS_ERROR,
-       IB_AE_PORT_ACTIVE,
-       IB_AE_PORT_DOWN,
-       IB_AE_CLIENT_REREGISTER,
-       IB_AE_SRQ_LIMIT_REACHED,
-       IB_AE_SRQ_QP_LAST_WQE_REACHED,
-       IB_AE_UNKNOWN           /* ALWAYS LAST ENUM VALUE */
-
-}      ib_async_event_t;
-/*
-* VALUES
-*      IB_AE_SQ_ERROR
-*              An error occurred when accessing the send queue of the QP.
-*              This event is optional.
-*
-*      IB_AE_SQ_DRAINED
-*              The send queue of the specified QP has completed the outstanding
-*              messages in progress when the state change was requested and, if
-*              applicable, has received all acknowledgements for those messages.
-*
-*      IB_AE_RQ_ERROR
-*              An error occurred when accessing the receive queue of the QP.
-*              This event is optional.
-*
-*      IB_AE_CQ_ERROR
-*              An error occurred when writing an entry to the CQ.
-*
-*      IB_AE_QP_FATAL
-*              A catastrophic error occurred while accessing or processing the
-*              work queue that prevents reporting of completions.
-*
-*      IB_AE_QP_COMM
-*              The first packet has arrived for the receive work queue where the
-*              QP is still in the RTR state.
-*
-*      IB_AE_QP_APM
-*              If alternate path migration is supported, this event indicates that
-*              the QP connection has migrated to the alternate path.
-*
-*      IB_AE_LOCAL_FATAL
-*              A catastrophic HCA error occurred which cannot be attributed to any
-*              resource; behavior is indeterminate.
-*
-*      IB_AE_PKEY_TRAP
-*              A PKEY violation was detected.  This event is optional.
-*
-*      IB_AE_QKEY_TRAP
-*              A QKEY violation was detected.  This event is optional.
-*
-*      IB_AE_MKEY_TRAP
-*              An MKEY violation was detected.  This event is optional.
-*
-*      IB_AE_PORT_TRAP
-*              A port capability change was detected.  This event is optional.
-*
-*      IB_AE_SYSIMG_GUID_TRAP
-*              If the system image GUID is supported, this event indicates that the
-*              system image GUID of this HCA has been changed.  This event is
-*              optional.
-*
-*      IB_AE_BUF_OVERRUN
-*              The number of consecutive flow control update periods with at least
-*              one overrun error in each period has exceeded the threshold specified
-*              in the port info attributes.  This event is optional.
-*
-*      IB_AE_LINK_INTEGRITY
-*              The detection of excessively frequent local physical errors has
-*              exceeded the threshold specified in the port info attributes.  This
-*              event is optional.
-*
-*      IB_AE_FLOW_CTRL_ERROR
-*              An HCA watchdog timer monitoring the arrival of flow control updates
-*              has expired without receiving an update.  This event is optional.
-*
-*      IB_AE_BKEY_TRAP
-*              An BKEY violation was detected.  This event is optional.
-*
-*      IB_AE_QP_APM_ERROR
-*              If alternate path migration is supported, this event indicates that
-*              an incoming path migration request to this QP was not accepted.
-*
-*      IB_AE_WQ_REQ_ERROR
-*              An OpCode violation was detected at the responder.
-*
-*      IB_AE_WQ_ACCESS_ERROR
-*              An access violation was detected at the responder.
-*
-*      IB_AE_PORT_ACTIVE
-*              If the port active event is supported, this event is generated
-*              when the link becomes active: IB_LINK_ACTIVE.
-*
-*      IB_AE_PORT_DOWN
-*              The link is declared unavailable: IB_LINK_INIT, IB_LINK_ARMED,
-*              IB_LINK_DOWN.
-*
-*      IB_AE_CLIENT_REREGISTER
-*              The SM idicate to client to reregister its SA records.
-*
-*      IB_AE_SRQ_CATAS_ERROR
-*              An error occurred while processing or accessing the SRQ that prevents
-*              dequeuing a WQE from the SRQ and reporting of receive completions.
-*
-*      IB_AE_SRQ_QP_LAST_WQE_REACHED
-*              An event,  issued for a QP, associated with a shared receive queue, when
-*                      a CQE is generated for the last WQE, or
-*                      the QP gets in the Error State and there are no more WQEs on the RQ.
-*
-*      IB_AE_UNKNOWN
-*              An unknown error occurred which cannot be attributed to any
-*              resource; behavior is indeterminate.
-*
-*****/
-
-
-
-/****f* IBA Base: Types/ib_get_async_event_str
-* NAME
-*      ib_get_async_event_str
-*
-* DESCRIPTION
-*      Returns a string for the specified asynchronous event.
-*
-* SYNOPSIS
-*/
-AL_EXPORT const char* AL_API
-ib_get_async_event_str(
-       IN                              ib_async_event_t                        event );
-/*
-* PARAMETERS
-*      event
-*              [in] event value
-*
-* RETURN VALUES
-*      Pointer to the asynchronous event description string.
-*
-* NOTES
-*
-* SEE ALSO
-*********/
-
-
-/****s* Verbs/ib_event_rec_t
-* NAME
-*      ib_event_rec_t -- Async event notification record
-*
-* DESCRIPTION
-*      When an async event callback is made, this structure is passed to indicate
-*      the type of event, the source of event that caused it, and the context
-*      associated with this event.
-*
-*      context -- Context of the resource that caused the event.
-*              -- ca_context if this is a port/adapter event.
-*              -- qp_context if the source is a QP event
-*              -- cq_context if the source is a CQ event.
-*              -- ee_context if the source is an EE event.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_event_rec
-{
-       TO_LONG_PTR(void* ,                     context) ;
-       ib_async_event_t                type;
-
-       /* HCA vendor specific event information. */
-       uint64_t                                vendor_specific;
-
-       /* The following structures are valid only for trap types. */
-       union _trap
-       {
-               struct
-               {
-                       uint16_t                        lid;
-                       ib_net64_t                      port_guid;
-                       uint8_t                         port_num;
-
-                       /*
-                        * The following structure is valid only for
-                        * P_KEY, Q_KEY, and M_KEY violation traps.
-                        */
-                       struct
-                       {
-                               uint8_t                 sl;
-                               uint16_t                src_lid;
-                               uint16_t                dest_lid;
-                               union _key
-                               {
-                                       uint16_t        pkey;
-                                       uint32_t        qkey;
-                                       uint64_t        mkey;
-                               } key;
-                               uint32_t                src_qp;
-                               uint32_t                dest_qp;
-                               ib_gid_t                src_gid;
-                               ib_gid_t                dest_gid;
-
-                       }       violation;
-
-               } info;
-
-               ib_net64_t      sysimg_guid;
-
-       }       trap;
-
-}      ib_event_rec_t;
-/*******/
-
-
-/****d* Access Layer/ib_atomic_t
-* NAME
-*      ib_atomic_t
-*
-* DESCRIPTION
-*      Indicates atomicity levels supported by an adapter.
-*
-* SYNOPSIS
-*/
-typedef enum _ib_atomic_t
-{
-       IB_ATOMIC_NONE,
-       IB_ATOMIC_LOCAL,
-       IB_ATOMIC_GLOBAL
-
-}      ib_atomic_t;
-/*
-* VALUES
-*      IB_ATOMIC_NONE
-*              Atomic operations not supported.
-*
-*      IB_ATOMIC_LOCAL
-*              Atomic operations guaranteed between QPs of a single CA.
-*
-*      IB_ATOMIC_GLOBAL
-*              Atomic operations are guaranteed between CA and any other entity
-*              in the system.
-*****/
-
-
-/****s* Access Layer/ib_port_cap_t
-* NAME
-*      ib_port_cap_t
-*
-* DESCRIPTION
-*      Indicates which management agents are currently available on the specified
-*      port.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_port_cap
-{
-       boolean_t               cm;
-       boolean_t               snmp;
-       boolean_t               dev_mgmt;
-       boolean_t               vend;
-       boolean_t               sm;
-       boolean_t               sm_disable;
-       boolean_t               qkey_ctr;
-       boolean_t               pkey_ctr;
-       boolean_t               notice;
-       boolean_t               trap;
-       boolean_t               apm;
-       boolean_t               slmap;
-       boolean_t               pkey_nvram;
-       boolean_t               mkey_nvram;
-       boolean_t               sysguid;
-       boolean_t               dr_notice;
-       boolean_t               boot_mgmt;
-       boolean_t               capm_notice;
-       boolean_t               reinit;
-       boolean_t               ledinfo;
-       boolean_t               port_active;
-       boolean_t               ipd;
-       boolean_t               pkey_switch_ext_port;
-       boolean_t               bm;
-       boolean_t               link_rtl;
-       boolean_t               client_reregister;      
-
-}      ib_port_cap_t;
-/*****/
-
-
-/****d* Access Layer/ib_init_type_t
-* NAME
-*      ib_init_type_t
-*
-* DESCRIPTION
-*      If supported by the HCA, the type of initialization requested by
-*      this port before SM moves it to the active or armed state.  If the
-*      SM implements reinitialization, it shall set these bits to indicate
-*      the type of initialization performed prior to activating the port.
-*      Otherwise, these bits shall be set to 0.
-*
-* SYNOPSIS
-*/
-typedef uint8_t                                        ib_init_type_t;
-#define IB_INIT_TYPE_NO_LOAD                           0x01
-#define IB_INIT_TYPE_PRESERVE_CONTENT          0x02
-#define IB_INIT_TYPE_PRESERVE_PRESENCE         0x04
-#define IB_INIT_TYPE_DO_NOT_RESUSCITATE                0x08
-/*****/
-
-
-/****s* Access Layer/ib_port_attr_mod_t
-* NAME
-*      ib_port_attr_mod_t
-*
-* DESCRIPTION
-*      Port attributes that may be modified.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_port_attr_mod
-{
-       ib_port_cap_t                   cap;
-       uint16_t                                pkey_ctr;
-       uint16_t                                qkey_ctr;
-
-       ib_init_type_t                  init_type;
-       ib_net64_t                              system_image_guid;
-
-}      ib_port_attr_mod_t;
-/*
-* SEE ALSO
-*      ib_port_cap_t
-*****/
-
-
-/****s* Access Layer/ib_port_attr_t
-* NAME
-*      ib_port_attr_t
-*
-* DESCRIPTION
-*      Information about a port on a given channel adapter.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_port_attr
-{
-       ib_net64_t                              port_guid;
-       uint8_t                                 port_num;
-       uint8_t                                 mtu;
-       uint64_t                                max_msg_size;
-       ib_net16_t                              lid;
-       uint8_t                                 lmc;
-
-       /*
-        * LinkWidthSupported as defined in PortInfo.  Required to calculate
-        * inter-packet delay (a.k.a. static rate).
-        */
-       uint8_t                                 link_width_supported;
-
-       uint16_t                                max_vls;
-
-       ib_net16_t                              sm_lid;
-       uint8_t                                 sm_sl;
-       uint8_t                                 link_state;
-
-       ib_init_type_t                  init_type_reply;        /* Optional */
-
-       /*
-        * subnet_timeout:
-        * The maximum expected subnet propagation delay to reach any port on
-        * the subnet.  This value also determines the rate at which traps can
-        * be generated from this node.
-        *
-        * timeout = 4.096 microseconds * 2^subnet_timeout
-        */
-       uint8_t                                 subnet_timeout;
-
-       ib_port_cap_t                   cap;
-       uint16_t                                pkey_ctr;
-       uint16_t                                qkey_ctr;
-
-       uint16_t                                num_gids;
-       uint16_t                                num_pkeys;
-       /*
-        * Pointers at the end of the structure to allow doing a simple
-        * memory comparison of contents up to the first pointer.
-        */
-       TO_LONG_PTR(ib_gid_t* ,         p_gid_table) ;
-       TO_LONG_PTR(ib_net16_t* ,               p_pkey_table) ;
-
-}      ib_port_attr_t;
-/*
-* SEE ALSO
-*      uint8_t, ib_port_cap_t, ib_link_states_t
-*****/
-
-
-/****s* Access Layer/ib_ca_attr_t
-* NAME
-*      ib_ca_attr_t
-*
-* DESCRIPTION
-*      Information about a channel adapter.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_ca_attr
-{
-       ib_net64_t                              ca_guid;
-
-       uint32_t                                vend_id;
-       uint16_t                                dev_id;
-       uint16_t                                revision;
-       uint64_t                                fw_ver;
-
-       /*
-        * Total size of the ca attributes in bytes
-        */
-       uint32_t                                size;
-       uint32_t                                max_qps;
-       uint32_t                                max_wrs;
-
-       uint32_t                                max_sges;
-       uint32_t                                max_rd_sges;
-
-       uint32_t                                max_cqs;
-       uint32_t                                max_cqes;
-
-       uint32_t                                max_pds;
-
-       uint32_t                                init_regions;
-       uint64_t                                init_region_size;
-
-       uint32_t                                init_windows;
-       uint32_t                                max_addr_handles;
-
-       uint32_t                                max_partitions;
-
-       ib_atomic_t                             atomicity;
-
-       uint8_t                                 max_qp_resp_res;
-       uint8_t                                 max_resp_res;
-
-       uint8_t                                 max_qp_init_depth;
-
-       uint32_t                                max_ipv6_qps;
-       uint32_t                                max_ether_qps;
-
-       uint32_t                                max_mcast_grps;
-       uint32_t                                max_mcast_qps;
-       uint32_t                                max_qps_per_mcast_grp;
-       uint32_t                                max_fmr;
-       uint32_t                                max_map_per_fmr;
-       uint32_t                                max_srq;
-       uint32_t                                max_srq_wrs;
-       uint32_t                                max_srq_sges;
-
-       /*
-        * local_ack_delay:
-        * Specifies the maximum time interval between the local CA receiving
-        * a message and the transmission of the associated ACK or NAK.
-        *
-        * timeout = 4.096 microseconds * 2^local_ack_delay
-        */
-       uint8_t                                 local_ack_delay;
-
-       boolean_t                               bad_pkey_ctr_support;
-       boolean_t                               bad_qkey_ctr_support;
-       boolean_t                               raw_mcast_support;
-       boolean_t                               apm_support;
-       boolean_t                               av_port_check;
-       boolean_t                               change_primary_port;
-       boolean_t                               modify_wr_depth;
-       boolean_t                               modify_srq_depth;
-       boolean_t                               current_qp_state_support;
-       boolean_t                               shutdown_port_capability;
-       boolean_t                               init_type_support;
-       boolean_t                               port_active_event_support;
-       boolean_t                               system_image_guid_support;
-       boolean_t                               hw_agents;
-
-       ib_net64_t                              system_image_guid;
-
-       uint32_t                                num_page_sizes;
-       uint8_t                                 num_ports;
-
-       TO_LONG_PTR(uint32_t* ,         p_page_size) ;
-       TO_LONG_PTR(ib_port_attr_t* ,   p_port_attr) ;
-
-}      ib_ca_attr_t;
-/*
-* FIELDS
-*      ca_guid
-*              GUID for this adapter.
-*
-*      vend_id
-*              IEEE vendor ID for this adapter
-*
-*      dev_id
-*              Device ID of this adapter. (typically from PCI device ID)
-*
-*      revision
-*              Revision ID of this adapter
-*
-*      Fw_ver
-*              Device Firmware version.
-*
-*      size
-*              Total size in bytes for the HCA attributes.  This size includes total
-*              size required for all the variable members of the structure.  If a
-*              vendor requires to pass vendor specific fields beyond this structure,
-*              the HCA vendor can choose to report a larger size.  If a vendor is
-*              reporting extended vendor specific features, they should also provide
-*              appropriate access functions to aid with the required interpretation.
-*
-*      max_qps
-*              Maximum number of QP's supported by this HCA.
-*
-*      max_wrs
-*              Maximum number of work requests supported by this HCA.
-*
-*      max_sges
-*              Maximum number of scatter gather elements supported per work request.
-*
-*      max_rd_sges
-*              Maximum number of scatter gather elements supported for READ work
-*              requests for a Reliable Datagram QP.  This value must be zero if RD
-*              service is not supported.
-*
-*      max_cqs
-*              Maximum number of Completion Queues supported.
-*
-*      max_cqes
-*              Maximum number of CQ elements supported per CQ.
-*
-*      max_pds
-*              Maximum number of protection domains supported.
-*
-*      init_regions
-*              Initial number of memory regions supported.  These are only informative
-*              values.  HCA vendors can extended and grow these limits on demand.
-*
-*      init_region_size
-*              Initial limit on the size of the registered memory region.
-*
-*      init_windows
-*              Initial number of window entries supported.
-*
-*      max_addr_handles
-*              Maximum number of address handles supported.
-*
-*      max_partitions
-*              Maximum number of partitions supported.
-*
-*      atomicity
-*              Indicates level of atomic operations supported by this HCA.
-*
-*      max_qp_resp_res
-*              Maximum limit on number of responder resources for incomming RDMA
-*              operations on QPs.
-*
-*      max_fmr
-*              Maximum number of Fast Memory Regions supported.
-*
-*      max_map_per_fmr
-*              Maximum number of mappings, supported by a Fast Memory Region.
-*
-*      max_srq
-*              Maximum number of Shared Receive Queues supported.
-*
-*      max_srq_wrs
-*              Maximum number of work requests supported by this SRQ.
-*
-*      max_srq_sges
-*              Maximum number of scatter gather elements supported per work request on SRQ.
-*
-*      max_resp_res
-*              Maximum number of responder resources per HCA, with this HCA used as
-*              the target.
-*
-*      max_qp_init_depth
-*              Maximimum initiator depth per QP for initiating RDMA reads and
-*              atomic operations.
-*
-*      max_ipv6_qps
-*      max_ether_qps
-*              Maximum number of IPV6 and raw ether QP's supported by this HCA.
-*
-*      max_mcast_grps
-*              Maximum number of multicast groups supported.
-*
-*      max_mcast_qps
-*              Maximum number of QP's that can support multicast operations.
-*
-*      max_qps_per_mcast_grp
-*              Maximum number of multicast QP's per multicast group.
-*
-*      local_ack_delay
-*              Specifies the maximum time interval between the local CA receiving
-*              a message and the transmission of the associated ACK or NAK.
-*              timeout = 4.096 microseconds * 2^local_ack_delay
-*
-*      bad_pkey_ctr_support
-*      bad_qkey_ctr_support
-*              Indicates support for the bad pkey and qkey counters.
-*
-*      raw_mcast_support
-*              Indicates support for raw packet multicast.
-*
-*      apm_support
-*              Indicates support for Automatic Path Migration.
-*
-*      av_port_check
-*              Indicates ability to check port number in address handles.
-*
-*      change_primary_port
-*              Indicates ability to change primary port for a QP during a
-*              SQD->RTS transition.
-*
-*      modify_wr_depth
-*              Indicates ability to modify QP depth during a modify QP operation.
-*              Check the verb specification for permitted states.
-*
-*      modify_srq_depth
-*              Indicates ability to modify SRQ depth during a modify SRQ operation.
-*              Check the verb specification for permitted states.
-*
-*      current_qp_state_support
-*              Indicates ability of the HCA to support the current QP state modifier
-*              during a modify QP operation.
-*
-*      shutdown_port_capability
-*              Shutdown port capability support indicator.
-*
-*      init_type_support
-*              Indicates init_type_reply and ability to set init_type is supported.
-*
-*      port_active_event_support
-*              Port active event support indicator.
-*
-*      system_image_guid_support
-*              System image GUID support indicator.
-*
-*      hw_agents
-*              Indicates SMA is implemented in HW.
-*
-*      system_image_guid
-*              Optional system image GUID.  This field is valid only if the
-*              system_image_guid_support flag is set.
-*
-*      num_page_sizes
-*              Indicates support for different page sizes supported by the HCA.
-*              The variable size array can be obtained from p_page_size.
-*
-*      num_ports
-*              Number of physical ports supported on this HCA.
-*
-*      p_page_size
-*              Array holding different page size supported.
-*
-*      p_port_attr
-*              Array holding port attributes.
-*
-* NOTES
-*      This structure contains the attributes of a channel adapter.  Users must
-*      call ib_copy_ca_attr to copy the contents of this structure to a new
-*      memory region.
-*
-* SEE ALSO
-*      ib_port_attr_t, ib_atomic_t, ib_copy_ca_attr
-*****/
-
-/****f* Access layer/ib_copy_ca_attr
-* NAME
-*      ib_copy_ca_attr
-*
-* DESCRIPTION
-*      Copies CA attributes.
-*
-* SYNOPSIS
-*/
-AL_EXPORT ib_ca_attr_t* AL_API
-ib_copy_ca_attr(
-       IN                              ib_ca_attr_t* const             p_dest,
-       IN              const   ib_ca_attr_t* const             p_src );
-/*
-* PARAMETERS
-*      p_dest
-*              Pointer to the buffer that is the destination of the copy.
-*
-*      p_src
-*              Pointer to the CA attributes to copy.
-*
-* RETURN VALUE
-*      Pointer to the copied CA attributes.
-*
-* NOTES
-*      The buffer pointed to by the p_dest parameter must be at least the size
-*      specified in the size field of the buffer pointed to by p_src.
-*
-* SEE ALSO
-*      ib_ca_attr_t, ib_dup_ca_attr, ib_free_ca_attr
-*****/
-
-
-/****d* Access Layer/ib_pd_type_t
-* NAME
-*      ib_pd_type_t
-*
-* DESCRIPTION
-*      Indicates the type of protection domain being allocated.
-*
-* SYNOPSIS
-*/
-typedef enum _ib_pd_type
-{
-       IB_PDT_NORMAL,
-       IB_PDT_ALIAS,
-       IB_PDT_SQP
-
-}      ib_pd_type_t;
-/*
-* VALUES
-*      IB_PDT_NORMAL
-*              Protection domain for all non-aliased QPs.
-*
-*      IB_PDT_ALIAS
-*              Protection domain for IB_QPT_QP0_ALIAS and IB_QPT_QP1_ALIAS QPs.
-*
-*      IB_PDT_SQP
-*              Protection domain for special queue pair usage.
-*****/
-
-
-/****s* Access Layer/ib_av_attr_t
-* NAME
-*      ib_av_attr_t
-*
-* DESCRIPTION
-*      IBA address vector.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_av_attr
-{
-       uint8_t                                 port_num;
-
-       uint8_t                                 sl;
-       ib_net16_t                              dlid;
-
-       boolean_t                               grh_valid;
-       ib_grh_t                                grh;
-       uint8_t                                 static_rate;
-       uint8_t                                 path_bits;
-
-       struct _av_conn
-       {
-               uint8_t                         path_mtu;
-               uint8_t                         local_ack_timeout;
-               uint8_t                         seq_err_retry_cnt;
-               uint8_t                         rnr_retry_cnt;
-
-       }       conn;
-
-}      ib_av_attr_t;
-/*
-* SEE ALSO
-*      ib_gid_t
-*****/
-
-
-/****d* Access Layer/ib_qp_type_t
-* NAME
-*      ib_qp_type_t
-*
-* DESCRIPTION
-*      Indicates the type of queue pair being created.
-*
-* SYNOPSIS
-*/
-typedef enum _ib_qp_type
-{
-       IB_QPT_RELIABLE_CONN    = 0,            /* Matches CM REQ transport type */
-       IB_QPT_UNRELIABLE_CONN  = 1,            /* Matches CM REQ transport type */
-       IB_QPT_UNRELIABLE_DGRM  = 3,            /* Purposefully skip RDD type. */
-       IB_QPT_QP0,
-       IB_QPT_QP1,
-       IB_QPT_RAW_IPV6,
-       IB_QPT_RAW_ETHER,
-       IB_QPT_MAD,                                                             /* InfiniBand Access Layer */
-       IB_QPT_QP0_ALIAS,                                               /* InfiniBand Access Layer */
-       IB_QPT_QP1_ALIAS                                                /* InfiniBand Access Layer */
-
-}      ib_qp_type_t;
-/*
-* VALUES
-*      IB_QPT_RELIABLE_CONN
-*              Reliable, connected queue pair.
-*
-*      IB_QPT_UNRELIABLE_CONN
-*              Unreliable, connected queue pair.
-*
-*      IB_QPT_UNRELIABLE_DGRM
-*              Unreliable, datagram queue pair.
-*
-*      IB_QPT_QP0
-*              Queue pair 0.
-*
-*      IB_QPT_QP1
-*              Queue pair 1.
-*
-*      IB_QPT_RAW_DGRM
-*              Raw datagram queue pair.
-*
-*      IB_QPT_RAW_IPV6
-*              Raw IP version 6 queue pair.
-*
-*      IB_QPT_RAW_ETHER
-*              Raw Ethernet queue pair.
-*
-*      IB_QPT_MAD
-*              Unreliable, datagram queue pair that will send and receive management
-*              datagrams with assistance from the access layer.
-*
-*      IB_QPT_QP0_ALIAS
-*              Alias to queue pair 0.  Aliased QPs can only be created on an aliased
-*              protection domain.
-*
-*      IB_QPT_QP1_ALIAS
-*              Alias to queue pair 1.  Aliased QPs can only be created on an aliased
-*              protection domain.
-*****/
-
-
-/****d* Access Layer/ib_access_t
-* NAME
-*      ib_access_t
-*
-* DESCRIPTION
-*      Indicates the type of access is permitted on resources such as QPs,
-*      memory regions and memory windows.
-*
-* SYNOPSIS
-*/
-typedef uint32_t                               ib_access_t;
-#define IB_AC_RDMA_READ                        0x00000001
-#define IB_AC_RDMA_WRITE               0x00000002
-#define IB_AC_ATOMIC                   0x00000004
-#define IB_AC_LOCAL_WRITE              0x00000008
-#define IB_AC_MW_BIND                  0x00000010
-/*
-* NOTES
-*      Users may combine access rights using a bit-wise or operation to specify
-*      additional access.  For example: IB_AC_RDMA_READ | IB_AC_RDMA_WRITE grants
-*      RDMA read and write access.
-*****/
-
-
-/****d* Access Layer/ib_qp_state_t
-* NAME
-*      ib_qp_state_t
-*
-* DESCRIPTION
-*      Indicates or sets the state of a queue pair.  The current state of a queue
-*      pair is returned through the ib_qp_query call and set via the
-*      ib_qp_modify call.
-*
-* SYNOPSIS
-*/
-typedef uint32_t                               ib_qp_state_t;
-#define IB_QPS_RESET                   0x00000001
-#define IB_QPS_INIT                            0x00000002
-#define IB_QPS_RTR                             0x00000004
-#define IB_QPS_RTS                             0x00000008
-#define IB_QPS_SQD                             0x00000010
-#define IB_QPS_SQD_DRAINING            0x00000030
-#define IB_QPS_SQD_DRAINED             0x00000050
-#define IB_QPS_SQERR                   0x00000080
-#define IB_QPS_ERROR                   0x00000100
-#define IB_QPS_TIME_WAIT               0xDEAD0000      /* InfiniBand Access Layer */
-/*****/
-
-
-/****d* Access Layer/ib_apm_state_t
-* NAME
-*      ib_apm_state_t
-*
-* DESCRIPTION
-*      The current automatic path migration state of a queue pair
-*
-* SYNOPSIS
-*/
-typedef enum _ib_apm_state
-{
-       IB_APM_MIGRATED = 1,
-       IB_APM_REARM,
-       IB_APM_ARMED
-
-}      ib_apm_state_t;
-/*****/
-
-/****d* Access Layer/ib_srq_attr_mask_t
-* NAME
-*      ib_srq_attr_mask_t
-*
-* DESCRIPTION
-*      Indicates valid fields in ib_srq_attr_t structure
-*
-* SYNOPSIS
-*/
-typedef enum _ib_srq_attr_mask {
-       IB_SRQ_MAX_WR   = 1 << 0,
-       IB_SRQ_LIMIT    = 1 << 1,
-} ib_srq_attr_mask_t;
-/*****/
-
-
-/****s* Access Layer/ib_srq_attr_t
-* NAME
-*      ib_srq_attr_t
-*
-* DESCRIPTION
-*      Attributes used to initialize a shared queue pair at creation time.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_srq_attr {
-       uint32_t                                max_wr;
-       uint32_t                                max_sge;
-       uint32_t                                srq_limit;
-} ib_srq_attr_t;
-/*
-* FIELDS
-*      max_wr
-*              Specifies the max number of work request on SRQ.
-*
-*      max_sge
-*              Specifies the max number of scatter/gather elements in one work request.
-*
-*      srq_limit
-*              Specifies the low water mark for SRQ.
-*
-* SEE ALSO
-*      ib_qp_type_t, ib_srq_attr_mask_t
-*****/
-
-
-
-/****s* Access Layer/ib_qp_create_t
-* NAME
-*      ib_qp_create_t
-*
-* DESCRIPTION
-*      Attributes used to initialize a queue pair at creation time.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_qp_create
-{
-       ib_qp_type_t                    qp_type;
-
-       uint32_t                                sq_depth;
-       uint32_t                                rq_depth;
-       uint32_t                                sq_sge;
-       uint32_t                                rq_sge;
-
-TO_LONG_PTR(   struct _ib_cq* ,                        h_sq_cq) ; 
-TO_LONG_PTR(   struct _ib_cq* ,                        h_rq_cq) ; 
-TO_LONG_PTR(   struct _ib_srq* ,                       h_srq) ; 
-
-       boolean_t                               sq_signaled;
-
-}      ib_qp_create_t;
-/*
-* FIELDS
-*      type
-*              Specifies the type of queue pair to create.
-*
-*      sq_depth
-*              Indicates the requested maximum number of work requests that may be
-*              outstanding on the queue pair's send queue.  This value must be less
-*              than or equal to the maximum reported by the channel adapter associated
-*              with the queue pair.
-*
-*      rq_depth
-*              Indicates the requested maximum number of work requests that may be
-*              outstanding on the queue pair's receive queue.  This value must be less
-*              than or equal to the maximum reported by the channel adapter associated
-*              with the queue pair.
-*
-*      sq_sge
-*              Indicates the maximum number scatter-gather elements that may be
-*              given in a send work request.  This value must be less
-*              than or equal to the maximum reported by the channel adapter associated
-*              with the queue pair.
-*
-*      rq_sge
-*              Indicates the maximum number scatter-gather elements that may be
-*              given in a receive work request.  This value must be less
-*              than or equal to the maximum reported by the channel adapter associated
-*              with the queue pair.
-*
-*      h_sq_cq
-*              A handle to the completion queue that will be used to report send work
-*              request completions.  This handle must be NULL if the type is
-*              IB_QPT_MAD, IB_QPT_QP0_ALIAS, or IB_QPT_QP1_ALIAS.
-*
-*      h_rq_cq
-*              A handle to the completion queue that will be used to report receive
-*              work request completions.  This handle must be NULL if the type is
-*              IB_QPT_MAD, IB_QPT_QP0_ALIAS, or IB_QPT_QP1_ALIAS.
-*
-*      h_srq
-*              A handle to an SRQ to get receive completions via. Must be coded NULL 
-*              when QP is not associated with SRQ
-*
-*      sq_signaled
-*              A flag that is used to indicate whether the queue pair will signal
-*              an event upon completion of a send work request.  If set to
-*              TRUE, send work requests will always generate a completion
-*              event.  If set to FALSE, a completion event will only be
-*              generated if the send_opt field of the send work request has the
-*              IB_SEND_OPT_SIGNALED flag set.
-*
-* SEE ALSO
-*      ib_qp_type_t, ib_qp_attr_t
-*****/
-
-
-/****s* Access Layer/ib_qp_attr_t
-* NAME
-*      ib_qp_attr_t
-*
-* DESCRIPTION
-*      Queue pair attributes returned through ib_query_qp.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_qp_attr
-{
-TO_LONG_PTR(   struct _ib_pd* ,                        h_pd) ; 
-       ib_qp_type_t                    qp_type;
-       ib_access_t                             access_ctrl;
-       uint16_t                                pkey_index;
-
-       uint32_t                                sq_max_inline;
-       uint32_t                                sq_depth;
-       uint32_t                                rq_depth;
-       uint32_t                                sq_sge;
-       uint32_t                                rq_sge;
-       uint8_t                                 init_depth;
-       uint8_t                                 resp_res;
-
-TO_LONG_PTR(   struct ib_cq* ,                 h_sq_cq) ; 
-TO_LONG_PTR(   struct ib_cq* ,                 h_rq_cq) ; 
-TO_LONG_PTR(   struct ib_srq* ,                        h_srq) ; 
-
-       boolean_t                               sq_signaled;
-
-       ib_qp_state_t                   state;
-       ib_net32_t                              num;
-       ib_net32_t                              dest_num;
-       ib_net32_t                              qkey;
-
-       ib_net32_t                              sq_psn;
-       ib_net32_t                              rq_psn;
-
-       uint8_t                                 primary_port;
-       uint8_t                                 alternate_port;
-       ib_av_attr_t                    primary_av;
-       ib_av_attr_t                    alternate_av;
-       ib_apm_state_t                  apm_state;
-
-}      ib_qp_attr_t;
-/*
-* FIELDS
-*      h_pd
-*              This is a handle to a protection domain associated with the QP.
-*
-*      sq_max_inline
-*              Maximum payload that can be inlined directly in a WQE, eliminating
-*              protection checks and additional DMA operations.
-*
-* NOTES
-*      Other fields are defined by the Infiniband specification.
-*
-* SEE ALSO
-*      ib_qp_type_t, ib_access_t, ib_qp_state_t, ib_av_attr_t, ib_apm_state_t
-*****/
-
-
-/****d* Access Layer/ib_qp_opts_t
-* NAME
-*      ib_qp_opts_t
-*
-* DESCRIPTION
-*      Optional fields supplied in the modify QP operation.
-*
-* SYNOPSIS
-*/
-typedef uint32_t                               ib_qp_opts_t;
-#define IB_MOD_QP_ALTERNATE_AV         0x00000001
-#define IB_MOD_QP_PKEY                         0x00000002
-#define IB_MOD_QP_APM_STATE                    0x00000004
-#define IB_MOD_QP_PRIMARY_AV           0x00000008
-#define IB_MOD_QP_RNR_NAK_TIMEOUT      0x00000010
-#define IB_MOD_QP_RESP_RES                     0x00000020
-#define IB_MOD_QP_INIT_DEPTH           0x00000040
-#define IB_MOD_QP_PRIMARY_PORT         0x00000080
-#define IB_MOD_QP_ACCESS_CTRL          0x00000100
-#define IB_MOD_QP_QKEY                         0x00000200
-#define IB_MOD_QP_SQ_DEPTH                     0x00000400
-#define IB_MOD_QP_RQ_DEPTH                     0x00000800
-#define IB_MOD_QP_CURRENT_STATE                0x00001000
-#define IB_MOD_QP_RETRY_CNT                    0x00002000
-#define IB_MOD_QP_LOCAL_ACK_TIMEOUT    0x00004000
-#define IB_MOD_QP_RNR_RETRY_CNT                0x00008000
-
-/*
-* SEE ALSO
-*      ib_qp_mod_t
-*****/
-
-
-/****s* Access Layer/ib_qp_mod_t
-* NAME
-*      ib_qp_mod_t
-*
-* DESCRIPTION
-*      Information needed to change the state of a queue pair through the
-*      ib_modify_qp call.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_qp_mod
-{
-       ib_qp_state_t                           req_state;
-
-       union _qp_state
-       {
-               struct _qp_init
-               {
-                       ib_qp_opts_t            opts;
-                       uint8_t                         primary_port;
-                       ib_net32_t                      qkey;
-                       uint16_t                        pkey_index;
-                       ib_access_t                     access_ctrl;
-
-               }       init;
-
-               struct _qp_rtr
-               {
-                       ib_net32_t                      rq_psn;
-                       ib_net32_t                      dest_qp;
-                       ib_av_attr_t            primary_av;
-                       uint8_t                         resp_res;
-                       uint8_t                         rnr_nak_timeout;
-
-                       ib_qp_opts_t            opts;
-                       ib_av_attr_t            alternate_av;
-                       ib_net32_t                      qkey;
-                       uint16_t                        pkey_index;
-                       ib_access_t                     access_ctrl;
-                       uint32_t                        sq_depth;
-                       uint32_t                        rq_depth;
-
-               }       rtr;
-
-               struct _qp_rts
-               {
-                       ib_net32_t                      sq_psn;
-                       uint8_t                         retry_cnt;
-                       uint8_t                         rnr_retry_cnt;
-                       uint8_t                         local_ack_timeout;
-                       uint8_t                         init_depth;
-
-                       ib_qp_opts_t            opts;
-                       uint8_t                         rnr_nak_timeout;
-                       ib_qp_state_t           current_state;
-                       ib_net32_t                      qkey;
-                       ib_access_t                     access_ctrl;
-                       uint8_t                         resp_res;
-
-                       ib_av_attr_t            primary_av;
-                       ib_av_attr_t            alternate_av;
-
-                       uint32_t                        sq_depth;
-                       uint32_t                        rq_depth;
-
-                       ib_apm_state_t          apm_state;
-                       uint8_t                         primary_port;
-                       uint16_t                        pkey_index;
-
-               }       rts;
-
-               struct _qp_sqd
-               {
-                       boolean_t                       sqd_event;
-
-               }       sqd;
-
-       }       state;
-
-}      ib_qp_mod_t;
-/*
-* SEE ALSO
-*      ib_qp_state_t, ib_access_t, ib_av_attr_t, ib_apm_state_t
-*****/
-
-
-/****d* Access Layer/ib_wr_type_t
-* NAME
-*      ib_wr_type_t
-*
-* DESCRIPTION
-*      Identifies the type of work request posted to a queue pair.
-*
-* SYNOPSIS
-*/
-typedef enum _ib_wr_type_t
-{
-       WR_SEND = 1,
-       WR_RDMA_WRITE,
-       WR_RDMA_READ,
-       WR_COMPARE_SWAP,
-       WR_FETCH_ADD
-
-}      ib_wr_type_t;
-/*****/
-
-
-/****s* Access Layer/ib_local_ds_t
-* NAME
-*      ib_local_ds_t
-*
-* DESCRIPTION
-*      Local data segment information referenced by send and receive work
-*      requests.  This is used to specify local data buffers used as part of a
-*      work request.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_local_ds
-{
-       uint64_t                                vaddr;
-       uint32_t                                length;
-       uint32_t                                lkey;
-
-}      ib_local_ds_t;
-/*****/
-
-
-/****d* Access Layer/ib_send_opt_t
-* NAME
-*      ib_send_opt_t
-*
-* DESCRIPTION
-*      Optional flags used when posting send work requests.  These flags
-*      indicate specific processing for the send operation.
-*
-* SYNOPSIS
-*/
-typedef uint32_t                                       ib_send_opt_t;
-#define IB_SEND_OPT_IMMEDIATE          0x00000001
-#define IB_SEND_OPT_FENCE                      0x00000002
-#define IB_SEND_OPT_SIGNALED           0x00000004
-#define IB_SEND_OPT_SOLICITED          0x00000008
-#define IB_SEND_OPT_INLINE                     0x00000010
-#define IB_SEND_OPT_LOCAL                      0x00000020
-#define IB_SEND_OPT_VEND_MASK          0xFFFF0000
-/*
-* VALUES
-*      The following flags determine the behavior of a work request when
-*      posted to the send side.
-*
-*      IB_SEND_OPT_IMMEDIATE
-*              Send immediate data with the given request.
-*
-*      IB_SEND_OPT_FENCE
-*              The operation is fenced.  Complete all pending send operations before
-*              processing this request.
-*
-*      IB_SEND_OPT_SIGNALED
-*              If the queue pair is configured for signaled completion, then
-*              generate a completion queue entry when this request completes.
-*
-*      IB_SEND_OPT_SOLICITED
-*              Set the solicited bit on the last packet of this request.
-*
-*      IB_SEND_OPT_INLINE
-*              Indicates that the requested send data should be copied into a VPD
-*              owned data buffer.  This flag permits the user to issue send operations
-*              without first needing to register the buffer(s) associated with the
-*              send operation.  Verb providers that support this operation may place
-*              vendor specific restrictions on the size of send operation that may
-*              be performed as inline.
-*
-*      IB_SEND_OPT_LOCAL
-*              Indicates that a sent MAD request should be given to the local VPD for
-*              processing.  MADs sent using this option are not placed on the wire.
-*              This send option is only valid for MAD send operations.
-*
-*      IB_SEND_OPT_VEND_MASK
-*              This mask indicates bits reserved in the send options that may be used
-*              by the verbs provider to indicate vendor specific options.  Bits set
-*              in this area of the send options are ignored by the Access Layer, but
-*              may have specific meaning to the underlying VPD.
-*
-*****/
-
-
-/****s* Access Layer/ib_send_wr_t
-* NAME
-*      ib_send_wr_t
-*
-* DESCRIPTION
-*      Information used to submit a work request to the send queue of a queue
-*      pair.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_send_wr
-{
-       TO_LONG_PTR(struct _ib_send_wr* ,       p_next) ;
-       uint64_t                                        wr_id;
-       ib_wr_type_t                            wr_type;
-       ib_send_opt_t                           send_opt;
-       uint32_t                                        num_ds;
-       TO_LONG_PTR(ib_local_ds_t* ,            ds_array) ;
-       ib_net32_t                                      immediate_data;
-
-       union _send_dgrm
-       {
-               struct _send_ud
-               {
-                       ib_net32_t              remote_qp;
-                       ib_net32_t              remote_qkey;
-TO_LONG_PTR(                   struct _ib_av* ,        h_av) ; 
-                       uint16_t                pkey_index;
-                       TO_LONG_PTR(void* ,     rsvd) ;
-
-               }       ud;
-
-               struct _send_raw_ether
-               {
-                       ib_net16_t              dest_lid;
-                       uint8_t                 path_bits;
-                       uint8_t                 sl;
-                       uint8_t                 max_static_rate;
-                       ib_net16_t              ether_type;
-
-               }       raw_ether;
-
-               struct _send_raw_ipv6
-               {
-                       ib_net16_t              dest_lid;
-                       uint8_t                 path_bits;
-                       uint8_t                 sl;
-                       uint8_t                 max_static_rate;
-
-               }       raw_ipv6;
-
-       }       dgrm;
-
-       struct _send_remote_ops
-       {
-               uint64_t                        vaddr;
-               net32_t                         rkey;
-
-               ib_net64_t                      atomic1;
-               ib_net64_t                      atomic2;
-
-       }       remote_ops;
-
-}      ib_send_wr_t;
-/*
-* FIELDS
-*      p_next
-*              A pointer used to chain work requests together.  This permits multiple
-*              work requests to be posted to a queue pair through a single function
-*              call.  This value is set to NULL to mark the end of the chain.
-*
-*      wr_id
-*              A 64-bit work request identifier that is returned to the consumer
-*              as part of the work completion.
-*
-*      wr_type
-*              The type of work request being submitted to the send queue.
-*
-*      send_opt
-*              Optional send control parameters.
-*
-*      num_ds
-*              Number of local data segments specified by this work request.
-*
-*      ds_array
-*              A reference to an array of local data segments used by the send
-*              operation.
-*
-*      immediate_data
-*              32-bit field sent as part of a message send or RDMA write operation.
-*              This field is only valid if the send_opt flag IB_SEND_OPT_IMMEDIATE
-*              has been set.
-*
-*      dgrm.ud.remote_qp
-*              Identifies the destination queue pair of an unreliable datagram send
-*              operation.
-*
-*      dgrm.ud.remote_qkey
-*              The qkey for the destination queue pair.
-*
-*      dgrm.ud.h_av
-*              An address vector that specifies the path information used to route
-*              the outbound datagram to the destination queue pair.
-*
-*      dgrm.ud.pkey_index
-*              The pkey index for this send work request.  This is valid only
-*              for IB_QPT_QP1 and IB_QPT_QP1_ALIAS QP types.  The work request
-*              is posted to using this pkey index build the GMP's BTH instead
-*              of the QP's pkey.
-*
-*      dgrm.ud.rsvd
-*              Reserved for use by the Access Layer.
-*
-*      dgrm.raw_ether.dest_lid
-*              The destination LID that will receive this raw ether send.
-*
-*      dgrm.raw_ether.path_bits
-*              path bits...
-*
-*      dgrm.raw_ether.sl
-*              service level...
-*
-*      dgrm.raw_ether.max_static_rate
-*              static rate...
-*
-*      dgrm.raw_ether.ether_type
-*              ether type...
-*
-*      dgrm.raw_ipv6.dest_lid
-*              The destination LID that will receive this raw ether send.
-*
-*      dgrm.raw_ipv6.path_bits
-*              path bits...
-*
-*      dgrm.raw_ipv6.sl
-*              service level...
-*
-*      dgrm.raw_ipv6.max_static_rate
-*              static rate...
-*
-*      remote_ops.vaddr
-*              The registered virtual memory address of the remote memory to access
-*              with an RDMA or atomic operation.
-*
-*      remote_ops.rkey
-*              The rkey associated with the specified remote vaddr. This data must
-*              be presented exactly as obtained from the remote node. No swapping
-*              of data must be performed.
-*
-*      atomic1
-*              The first operand for an atomic operation.
-*
-*      atomic2
-*              The second operand for an atomic operation.
-*
-* NOTES
-*      The format of data sent over the fabric is user-defined and is considered
-*      opaque to the access layer.  The sole exception to this are MADs posted
-*      to a MAD QP service.  MADs are expected to match the format defined by
-*      the Infiniband specification and must be in network-byte order when posted
-*      to the MAD QP service.
-*
-* SEE ALSO
-*      ib_wr_type_t, ib_local_ds_t, ib_send_opt_t
-*****/
-
-
-/****s* Access Layer/ib_recv_wr_t
-* NAME
-*      ib_recv_wr_t
-*
-* DESCRIPTION
-*      Information used to submit a work request to the receive queue of a queue
-*      pair.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_recv_wr
-{
-       TO_LONG_PTR(struct _ib_recv_wr* ,       p_next) ;
-       uint64_t                                        wr_id;
-       uint32_t                                        num_ds;
-       TO_LONG_PTR(ib_local_ds_t* ,            ds_array) ;
-
-}      ib_recv_wr_t;
-/*
-* FIELDS
-*      p_next
-*              A pointer used to chain work requests together.  This permits multiple
-*              work requests to be posted to a queue pair through a single function
-*              call.  This value is set to NULL to mark the end of the chain.
-*
-*      wr_id
-*              A 64-bit work request identifier that is returned to the consumer
-*              as part of the work completion.
-*
-*      num_ds
-*              Number of local data segments specified by this work request.
-*
-*      ds_array
-*              A reference to an array of local data segments used by the send
-*              operation.
-*
-* SEE ALSO
-*      ib_local_ds_t
-*****/
-
-
-/****s* Access Layer/ib_bind_wr_t
-* NAME
-*      ib_bind_wr_t
-*
-* DESCRIPTION
-*      Information used to submit a memory window bind work request to the send
-*      queue of a queue pair.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_bind_wr
-{
-       uint64_t                                wr_id;
-       ib_send_opt_t                   send_opt;
-
-TO_LONG_PTR(   struct _ib_mr* ,                        h_mr) ; 
-       ib_access_t                             access_ctrl;
-       net32_t                                 current_rkey;
-
-       ib_local_ds_t                   local_ds;
-
-}      ib_bind_wr_t;
-/*
-* FIELDS
-*      wr_id
-*              A 64-bit work request identifier that is returned to the consumer
-*              as part of the work completion.
-*
-*      send_opt
-*              Optional send control parameters.
-*
-*      h_mr
-*              Handle to the memory region to which this window is being bound.
-*
-*      access_ctrl
-*              Access rights for this memory window.
-*
-*      current_rkey
-*              The current rkey assigned to this window for remote access.
-*
-*      local_ds
-*              A reference to a local data segment used by the bind operation.
-*
-* SEE ALSO
-*      ib_send_opt_t, ib_access_t, ib_local_ds_t
-*****/
-
-
-/****d* Access Layer/ib_wc_status_t
-* NAME
-*      ib_wc_status_t
-*
-* DESCRIPTION
-*      Indicates the status of a completed work request.  These VALUES are
-*      returned to the user when retrieving completions.  Note that success is
-*      identified as IB_WCS_SUCCESS, which is always zero.
-*
-* SYNOPSIS
-*/
-typedef enum _ib_wc_status_t
-{
-       IB_WCS_SUCCESS,
-       IB_WCS_LOCAL_LEN_ERR,
-       IB_WCS_LOCAL_OP_ERR,
-       IB_WCS_LOCAL_PROTECTION_ERR,
-       IB_WCS_WR_FLUSHED_ERR,
-       IB_WCS_MEM_WINDOW_BIND_ERR,
-       IB_WCS_REM_ACCESS_ERR,
-       IB_WCS_REM_OP_ERR,
-       IB_WCS_RNR_RETRY_ERR,
-       IB_WCS_TIMEOUT_RETRY_ERR,
-       IB_WCS_REM_INVALID_REQ_ERR,
-       IB_WCS_UNMATCHED_RESPONSE,                      /* InfiniBand Access Layer */
-       IB_WCS_CANCELED,                                        /* InfiniBand Access Layer */
-       IB_WCS_REM_ABORT_ERR,
-       IB_WCS_UNKNOWN                                          /* Must be last. */
-
-}      ib_wc_status_t;
-
-/*
-* VALUES
-*      IB_WCS_SUCCESS
-*              Work request completed successfully.
-*
-*      IB_WCS_MAD
-*              The completed work request was associated with a managmenet datagram
-*              that requires post processing.  The MAD will be returned to the user
-*              through a callback once all post processing has completed.
-*
-*      IB_WCS_LOCAL_LEN_ERR
-*              Generated for a work request posted to the send queue when the
-*              total of the data segment lengths exceeds the message length of the
-*              channel.  Generated for a work request posted to the receive queue when
-*              the total of the data segment lengths is too small for a
-*              valid incoming message.
-*
-*      IB_WCS_LOCAL_OP_ERR
-*              An internal QP consistency error was generated while processing this
-*              work request.  This may indicate that the QP was in an incorrect state
-*              for the requested operation.
-*
-*      IB_WCS_LOCAL_PROTECTION_ERR
-*              The data segments of the locally posted work request did not refer to
-*              a valid memory region.  The memory may not have been properly
-*              registered for the requested operation.
-*
-*      IB_WCS_WR_FLUSHED_ERR
-*              The work request was flushed from the QP before being completed.
-*
-*      IB_WCS_MEM_WINDOW_BIND_ERR
-*              A memory window bind operation failed due to insufficient access
-*              rights.
-*
-*      IB_WCS_REM_ACCESS_ERR,
-*              A protection error was detected at the remote node for a RDMA or atomic
-*              operation.
-*
-*      IB_WCS_REM_OP_ERR,
-*              The operation could not be successfully completed at the remote node.
-*              This may indicate that the remote QP was in an invalid state or
-*              contained an invalid work request.
-*
-*      IB_WCS_RNR_RETRY_ERR,
-*              The RNR retry count was exceeded while trying to send this message.
-*
-*      IB_WCS_TIMEOUT_RETRY_ERR
-*              The local transport timeout counter expired while trying to send this
-*              message.
-*
-*      IB_WCS_REM_INVALID_REQ_ERR,
-*              The remote node detected an invalid message on the channel.  This error
-*              is usually a result of one of the following:
-*                      - The operation was not supported on receive queue.
-*                      - There was insufficient buffers to receive a new RDMA request.
-*                      - There was insufficient buffers to receive a new atomic operation.
-*                      - An RDMA request was larger than 2^31 bytes.
-*
-*      IB_WCS_UNMATCHED_RESPONSE
-*              A response MAD was received for which there was no matching send.  The
-*              send operation may have been canceled by the user or may have timed
-*              out.
-*
-*      IB_WCS_CANCELED
-*              The completed work request was canceled by the user.
-*
-*      IB_WCS_REM_ABORT_ERR,
-*              The operation was aborted (e.g., For UD QPs associated with an SRQ, 
-*              the responder aborted the operation).
-*
-
-*****/
-
-
-
-/****f* IBA Base: Types/ib_get_wc_status_str
-* NAME
-*      ib_get_wc_status_str
-*
-* DESCRIPTION
-*      Returns a string for the specified work completion status.
-*
-* SYNOPSIS
-*/
-AL_EXPORT const char* AL_API
-ib_get_wc_status_str(
-       IN                              ib_wc_status_t                          wc_status );
-/*
-* PARAMETERS
-*      wc_status
-*              [in] work completion status value
-*
-* RETURN VALUES
-*      Pointer to the work completion status description string.
-*
-* NOTES
-*
-* SEE ALSO
-*********/
-
-
-/****d* Access Layer/ib_wc_type_t
-* NAME
-*      ib_wc_type_t
-*
-* DESCRIPTION
-*      Indicates the type of work completion.
-*
-* SYNOPSIS
-*/
-typedef enum _ib_wc_type_t
-{
-       IB_WC_SEND,
-       IB_WC_RDMA_WRITE,
-       IB_WC_RECV,
-       IB_WC_RDMA_READ,
-       IB_WC_MW_BIND,
-       IB_WC_FETCH_ADD,
-       IB_WC_COMPARE_SWAP,
-       IB_WC_RECV_RDMA_WRITE,
-       IB_WC_UNKNOWN
-
-}      ib_wc_type_t;
-/*****/
-
-
-/****f* IBA Base: Types/ib_get_wc_type_str
-* NAME
-*      ib_get_wc_type_str
-*
-* DESCRIPTION
-*      Returns a string for the specified work completion type.
-*
-* SYNOPSIS
-*/
-AL_EXPORT const char* AL_API
-ib_get_wc_type_str(
-       IN                              ib_wc_type_t                            wc_type );
-/*
-* PARAMETERS
-*      wc_type
-*              [in] work completion type value
-*
-* RETURN VALUES
-*      Pointer to the work completion type description string.
-*
-* NOTES
-*
-* SEE ALSO
-*********/
-
-
-/****d* Access Layer/ib_recv_opt_t
-* NAME
-*      ib_recv_opt_t
-*
-* DESCRIPTION
-*      Indicates optional fields valid in a receive work completion.
-*
-* SYNOPSIS
-*/
-typedef uint32_t                                       ib_recv_opt_t;
-#define        IB_RECV_OPT_IMMEDIATE           0x00000001
-#define IB_RECV_OPT_FORWARD                    0x00000002
-#define IB_RECV_OPT_GRH_VALID          0x00000004
-#define IB_RECV_OPT_VEND_MASK          0xFFFF0000
-/*
-* VALUES
-*      IB_RECV_OPT_IMMEDIATE
-*              Indicates that immediate data is valid for this work completion.
-*
-*      IB_RECV_OPT_FORWARD
-*              Indicates that the received trap should be forwarded to the SM.
-*
-*      IB_RECV_OPT_GRH_VALID
-*              Indicates presence of the global route header. When set, the first
-*              40 bytes received are the GRH.
-*
-*      IB_RECV_OPT_VEND_MASK
-*              This mask indicates bits reserved in the receive options that may be
-*              used by the verbs provider to indicate vendor specific options.  Bits
-*              set in this area of the receive options are ignored by the Access Layer,
-*              but may have specific meaning to the underlying VPD.
-*****/
-
-
-/****s* Access Layer/ib_wc_t
-* NAME
-*      ib_wc_t
-*
-* DESCRIPTION
-*      Work completion information.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_wc
-{
-       TO_LONG_PTR(struct _ib_wc* ,    p_next) ;
-       uint64_t                                wr_id;
-       ib_wc_type_t                    wc_type;
-
-       uint32_t                                length;
-       ib_wc_status_t                  status;
-       uint64_t                                vendor_specific;
-
-       union _wc_recv
-       {
-               struct _wc_conn
-               {
-                       ib_recv_opt_t   recv_opt;
-                       ib_net32_t              immediate_data;
-
-               }       conn;
-
-               struct _wc_ud
-               {
-                       ib_recv_opt_t   recv_opt;
-                       ib_net32_t              immediate_data;
-                       ib_net32_t              remote_qp;
-                       uint16_t                pkey_index;
-                       ib_net16_t              remote_lid;
-                       uint8_t                 remote_sl;
-                       uint8_t                 path_bits;
-
-               }       ud;
-
-               struct _wc_raw_ipv6
-               {
-                       ib_net16_t              remote_lid;
-                       uint8_t                 remote_sl;
-                       uint8_t                 path_bits;
-
-               }       raw_ipv6;
-
-               struct _wc_raw_ether
-               {
-                       ib_net16_t              remote_lid;
-                       uint8_t                 remote_sl;
-                       uint8_t                 path_bits;
-                       ib_net16_t              ether_type;
-
-               }       raw_ether;
-
-       }       recv;
-
-}      ib_wc_t;
-/*
-* FIELDS
-*      p_next
-*              A pointer used to chain work completions.  This permits multiple
-*              work completions to be retrieved from a completion queue through a
-*              single function call.  This value is set to NULL to mark the end of
-*              the chain.
-*
-*      wr_id
-*              The 64-bit work request identifier that was specified when posting the
-*              work request.
-*
-*      wc_type
-*              Indicates the type of work completion.
-*
-*      length
-*              The total length of the data sent or received with the work request.
-*
-*      status
-*              The result of the work request.
-*
-*      vendor_specific
-*              HCA vendor specific information returned as part of the completion.
-*
-*      recv.conn.recv_opt
-*              Indicates optional fields valid as part of a work request that
-*              completed on a connected (reliable or unreliable) queue pair.
-*
-*      recv.conn.immediate_data
-*              32-bit field received as part of an inbound message on a connected
-*              queue pair.  This field is only valid if the recv_opt flag
-*              IB_RECV_OPT_IMMEDIATE has been set.
-*
-*      recv.ud.recv_opt
-*              Indicates optional fields valid as part of a work request that
-*              completed on an unreliable datagram queue pair.
-*
-*      recv.ud.immediate_data
-*              32-bit field received as part of an inbound message on a unreliable
-*              datagram queue pair.  This field is only valid if the recv_opt flag
-*              IB_RECV_OPT_IMMEDIATE has been set.
-*
-*      recv.ud.remote_qp
-*              Identifies the source queue pair of a received datagram.
-*
-*      recv.ud.pkey_index
-*              The pkey index of the source queue pair. This is valid only for
-*              IB_QPT_QP1 and IB_QPT_QP1_ALIAS QP types.
-*
-*      recv.ud.remote_lid
-*              The source LID of the received datagram.
-*
-*      recv.ud.remote_sl
-*              The service level used by the source of the received datagram.
-*
-*      recv.ud.path_bits
-*              path bits...
-*
-*      recv.raw_ipv6.remote_lid
-*              The source LID of the received message.
-*
-*      recv.raw_ipv6.remote_sl
-*              The service level used by the source of the received message.
-*
-*      recv.raw_ipv6.path_bits
-*              path bits...
-*
-*      recv.raw_ether.remote_lid
-*              The source LID of the received message.
-*
-*      recv.raw_ether.remote_sl
-*              The service level used by the source of the received message.
-*
-*      recv.raw_ether.path_bits
-*              path bits...
-*
-*      recv.raw_ether.ether_type
-*              ether type...
-* NOTES
-*      When the work request completes with error, the only values that the
-*      consumer can depend on are the wr_id field, and the status of the
-*      operation.
-*
-*      If the consumer is using the same CQ for completions from more than
-*      one type of QP (i.e Reliable Connected, Datagram etc), then the consumer
-*      must have additional information to decide what fields of the union are
-*      valid.
-* SEE ALSO
-*      ib_wc_type_t, ib_qp_type_t, ib_wc_status_t, ib_recv_opt_t
-*****/
-
-
-/****s* Access Layer/ib_mr_create_t
-* NAME
-*      ib_mr_create_t
-*
-* DESCRIPTION
-*      Information required to create a registered memory region.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_mr_create
-{
-       TO_LONG_PTR(void* ,                     vaddr) ;
-       uint64_t                                length;
-       ib_access_t                             access_ctrl;
-
-}      ib_mr_create_t;
-/*
-* FIELDS
-*      vaddr
-*              Starting virtual address of the region being registered.
-*
-*      length
-*              Length of the buffer to register.
-*
-*      access_ctrl
-*              Access rights of the registered region.
-*
-* SEE ALSO
-*      ib_access_t
-*****/
-
-
-/****s* Access Layer/ib_phys_range_t
-* NAME
-*      ib_phys_range_t
-*
-* DESCRIPTION
-*      Information describing a physical memory range.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_phys_range
-{
-       uint64_t                                base_addr;
-       uint64_t                                size;
-
-}      ib_phys_range_t;
-/*
-* FIELDS
-*      base_addr
-*              Physical address of the base of the memory range.
-*
-*      size
-*              size, in bytes, of the memory range.
-*
-* NOTES
-*      The base address must be start and end on an HCA-supported page boundary.
-*
-* SEE ALSO
-*      ib_phys_create_t
-*********/
-
-
-/****s* Access Layer/ib_phys_create_t
-* NAME
-*      ib_phys_create_t
-*
-* DESCRIPTION
-*      Information required to create a physical memory region.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_phys_create
-{
-       uint64_t                                        length;
-       uint32_t                                        num_ranges;
-       TO_LONG_PTR(ib_phys_range_t* ,  range_array) ;
-       uint32_t                                        buf_offset;
-       uint32_t                                        hca_page_size;
-       ib_access_t                                     access_ctrl;
-
-}      ib_phys_create_t;
-/*
-* FIELDS
-*      length
-*              The length of the memory region in bytes.
-*
-*      num_ranges
-*              Number of ib_phys_range structures listed in the specified range array.
-*
-*      range_array
-*              An array of ib_phys_range structures to be registered as a single memory
-*              region.
-*
-*      buf_offset
-*              The offset into the first physical memory range of the specified memory
-*              region on which to start the virtual address.
-*
-*      hca_page_size
-*              The HCA page size to use to register the memory.
-*
-*      access_ctrl
-*              Access rights of the registered region.
-*
-* SEE ALSO
-*      ib_access_t
-*****/
-
-
-/****s* Access Layer/ib_mr_attr_t
-* NAME
-*      ib_mr_attr_t
-*
-* DESCRIPTION
-*      Attributes of a registered memory region.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_mr_attr
-{
-TO_LONG_PTR(   struct ib_pd* ,                 h_pd) ; 
-       uint64_t                                local_lb;
-       uint64_t                                local_ub;
-       uint64_t                                remote_lb;
-       uint64_t                                remote_ub;
-       ib_access_t                             access_ctrl;
-       net32_t                                 lkey;
-       net32_t                                 rkey;
-
-}      ib_mr_attr_t;
-/*
-* DESCRIPTION
-*      h_pd
-*              Handle to the protection domain for this memory region.
-*
-*      local_lb
-*              The virtual address of the lower bound of protection for local
-*              memory access.  This is always a 64-bit quantity to support registering
-*              more than 4GB of memory on 32-bit systems with PAE.
-*
-*      local_ub
-*              The virtual address of the upper bound of protection for local
-*              memory access.  This is always a 64-bit quantity to support registering
-*              more than 4GB of memory on 32-bit systems with PAE.
-*
-*      remote_lb
-*              The virtual address of the lower bound of protection for remote
-*              memory access.  This is always a 64-bit quantity to support registering
-*              more than 4GB of memory on 32-bit systems with PAE.
-*
-*      remote_ub
-*              The virtual address of the upper bound of protection for remote
-*              memory access.  This is always a 64-bit quantity to support registering
-*              more than 4GB of memory on 32-bit systems with PAE.
-*
-*      access_ctrl
-*              Access rights for the specified memory region.
-*
-*      lkey
-*              The lkey associated with this memory region.
-*
-*      rkey
-*              The rkey associated with this memory region.
-*
-* NOTES
-*      The remote_lb, remote_ub, and rkey are only valid if remote memory access
-*      is enabled for this memory region.
-*
-* SEE ALSO
-*      ib_access_t
-*****/
-
-
-/****d* Access Layer/ib_ca_mod_t
-* NAME
-*      ib_ca_mod_t -- Modify port attributes and error counters
-*
-* DESCRIPTION
-*      Specifies modifications to the port attributes of a channel adapter.
-*
-* SYNOPSIS
-*/
-typedef uint32_t                                                       ib_ca_mod_t;
-#define IB_CA_MOD_IS_CM_SUPPORTED                      0x00000001
-#define IB_CA_MOD_IS_SNMP_SUPPORTED                    0x00000002
-#define        IB_CA_MOD_IS_DEV_MGMT_SUPPORTED         0x00000004
-#define        IB_CA_MOD_IS_VEND_SUPPORTED                     0x00000008
-#define        IB_CA_MOD_IS_SM                                         0x00000010
-#define IB_CA_MOD_IS_SM_DISABLED                       0x00000020
-#define IB_CA_MOD_QKEY_CTR                                     0x00000040
-#define IB_CA_MOD_PKEY_CTR                                     0x00000080
-#define IB_CA_MOD_IS_NOTICE_SUPPORTED          0x00000100
-#define IB_CA_MOD_IS_TRAP_SUPPORTED                    0x00000200
-#define IB_CA_MOD_IS_APM_SUPPORTED                     0x00000400
-#define IB_CA_MOD_IS_SLMAP_SUPPORTED           0x00000800
-#define IB_CA_MOD_IS_PKEY_NVRAM_SUPPORTED      0x00001000
-#define IB_CA_MOD_IS_MKEY_NVRAM_SUPPORTED      0x00002000
-#define IB_CA_MOD_IS_SYSGUID_SUPPORTED         0x00004000
-#define IB_CA_MOD_IS_DR_NOTICE_SUPPORTED       0x00008000
-#define IB_CA_MOD_IS_BOOT_MGMT_SUPPORTED       0x00010000
-#define IB_CA_MOD_IS_CAPM_NOTICE_SUPPORTED     0x00020000
-#define IB_CA_MOD_IS_REINIT_SUPORTED           0x00040000
-#define IB_CA_MOD_IS_LEDINFO_SUPPORTED         0x00080000
-#define IB_CA_MOD_SHUTDOWN_PORT                                0x00100000
-#define IB_CA_MOD_INIT_TYPE_VALUE                      0x00200000
-#define IB_CA_MOD_SYSTEM_IMAGE_GUID                    0x00400000
-/*
-* VALUES
-*      IB_CA_MOD_IS_CM_SUPPORTED
-*              Indicates if there is a communication manager accessible through
-*              the port.
-*
-*      IB_CA_MOD_IS_SNMP_SUPPORTED
-*              Indicates if there is an SNMP agent accessible through the port.
-*
-*      IB_CA_MOD_IS_DEV_MGMT_SUPPORTED
-*              Indicates if there is a device management agent accessible through
-*              the port.
-*
-*      IB_CA_MOD_IS_VEND_SUPPORTED
-*              Indicates if there is a vendor supported agent accessible through
-*              the port.
-*
-*      IB_CA_MOD_IS_SM
-*              Indicates if there is a subnet manager accessible through
-*              the port.
-*
-*      IB_CA_MOD_IS_SM_DISABLED
-*              Indicates if the port has been disabled for configuration by the subnet
-*              manager.
-*
-*      IB_CA_MOD_QKEY_CTR
-*              Used to reset the qkey violation counter associated with the port.
-*
-*      IB_CA_MOD_PKEY_CTR
-*              Used to reset the pkey violation counter associated with the port.
-*
-*      IB_CA_MOD_IS_NOTICE_SUPPORTED
-*              Indicates that this CA supports ability to generate Notices for
-*              Port State changes. (only applicable to switches)
-*
-*      IB_CA_MOD_IS_TRAP_SUPPORTED
-*              Indicates that this management port supports ability to generate
-*              trap messages. (only applicable to switches)
-*
-*      IB_CA_MOD_IS_APM_SUPPORTED
-*              Indicates that this port is capable of performing Automatic Migration.
-*
-*      IB_CA_MOD_IS_SLMAP_SUPPORTED
-*              Indicates this port supports SLMAP capability.
-*
-*      IB_CA_MOD_IS_PKEY_NVRAM_SUPPORTED
-*              Indicates that PKEY is supported in NVRAM
-*
-*      IB_CA_MOD_IS_MKEY_NVRAM_SUPPORTED
-*              Indicates that MKEY is supported in NVRAM
-*
-*      IB_CA_MOD_IS_SYSGUID_SUPPORTED
-*              Indicates System Image GUID support.
-*
-*      IB_CA_MOD_IS_DR_NOTICE_SUPPORTED
-*              Indicate support for generating Direct Routed Notices
-*
-*      IB_CA_MOD_IS_BOOT_MGMT_SUPPORTED
-*              Indicates support for Boot Management
-*
-*      IB_CA_MOD_IS_CAPM_NOTICE_SUPPORTED
-*              Indicates capability to generate notices for changes to CAPMASK
-*
-*      IB_CA_MOD_IS_REINIT_SUPORTED
-*              Indicates type of node init supported. Refer to Chapter 14 for
-*              Initialization actions.
-*
-*      IB_CA_MOD_IS_LEDINFO_SUPPORTED
-*              Indicates support for LED info.
-*
-*      IB_CA_MOD_SHUTDOWN_PORT
-*              Used to modify the port active indicator.
-*
-*      IB_CA_MOD_INIT_TYPE_VALUE
-*              Used to modify the init_type value for the port.
-*
-*      IB_CA_MOD_SYSTEM_IMAGE_GUID
-*              Used to modify the system image GUID for the port.
-*****/
-
-
-/****d* Access Layer/ib_mr_mod_t
-* NAME
-*      ib_mr_mod_t
-*
-* DESCRIPTION
-*      Mask used to specify which attributes of a registered memory region are
-*      being modified.
-*
-* SYNOPSIS
-*/
-typedef uint32_t                                               ib_mr_mod_t;
-#define IB_MR_MOD_ADDR                                 0x00000001
-#define IB_MR_MOD_PD                                   0x00000002
-#define IB_MR_MOD_ACCESS                               0x00000004
-/*
-* PARAMETERS
-*      IB_MEM_MOD_ADDR
-*              The address of the memory region is being modified.
-*
-*      IB_MEM_MOD_PD
-*              The protection domain associated with the memory region is being
-*              modified.
-*
-*      IB_MEM_MOD_ACCESS
-*              The access rights the memory region are being modified.
-*****/
-
-/****d* IBA Base: Constants/IB_SMINFO_STATE_INIT
-* NAME
-*      IB_SMINFO_STATE_INIT
-*
-* DESCRIPTION
-*      Encoded state value used in the SMInfo attribute.
-*
-* SOURCE
-*/
-#define IB_SMINFO_STATE_INIT                                   4
-/**********/
-
-/****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_HANDOVER
-* NAME
-*      IB_SMINFO_ATTR_MOD_HANDOVER
-*
-* DESCRIPTION
-*      Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.
-*
-* SOURCE
-*/
-#define IB_SMINFO_ATTR_MOD_HANDOVER            (CL_NTOH32(0x000001))
-/**********/
-
-/****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_ACKNOWLEDGE
-* NAME
-*      IB_SMINFO_ATTR_MOD_ACKNOWLEDGE
-*
-* DESCRIPTION
-*      Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.
-*
-* SOURCE
-*/
-#define IB_SMINFO_ATTR_MOD_ACKNOWLEDGE         (CL_NTOH32(0x000002))
-/**********/
-
-/****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_DISABLE
-* NAME
-*      IB_SMINFO_ATTR_MOD_DISABLE
-*
-* DESCRIPTION
-*      Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.
-*
-* SOURCE
-*/
-#define IB_SMINFO_ATTR_MOD_DISABLE                     (CL_NTOH32(0x000003))
-/**********/
-
-/****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_STANDBY
-* NAME
-*      IB_SMINFO_ATTR_MOD_STANDBY
-*
-* DESCRIPTION
-*      Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.
-*
-* SOURCE
-*/
-#define IB_SMINFO_ATTR_MOD_STANDBY                     (CL_NTOH32(0x000004))
-/**********/
-
-/****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_DISCOVER
-* NAME
-*      IB_SMINFO_ATTR_MOD_DISCOVER
-*
-* DESCRIPTION
-*      Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.
-*
-* SOURCE
-*/
-#define IB_SMINFO_ATTR_MOD_DISCOVER                    (CL_NTOH32(0x000005))
-/**********/
-
-/****s* Access Layer/ib_ci_op_t
-* NAME
-*      ib_ci_op_t
-*
-* DESCRIPTION
-*      A structure used for vendor specific CA interface communication.
-*
-* SYNOPSIS
-*/
-typedef struct _ib_ci_op
-{
-       IN                              uint32_t                                        command;
-       IN                              uint32_t                                        buf_size;
-       IN                              uint32_t                                        buf_info;
-       IN      OUT                     int32_t                                         status;
-               OUT                     uint32_t                                        num_bytes_ret;
-       IN      OUT                     void* FUNC_PTR64                                p_buf OPTIONAL;
-
-}      ib_ci_op_t;
-/*
-* FIELDS
-*      command
-*              A command code that is understood by the verbs provider.
-*
-*      status
-*              The completion status from the verbs provider.  This field should be
-*              initialize to indicate an error to allow detection and cleanup in
-*              case a communication error occurs between user-mode and kernel-mode.
-*
-*      buf_size
-*              The size of the buffer in bytes.
-*
-*      buf_info
-*              Additional buffer information
-*
-*      p_buf
-*              A reference to a buffer containing vendor specific data.  The verbs
-*              provider must not access pointers in the p_buf between user-mode and
-*              kernel-mode.  Any pointers embedded in the p_buf are invalidated by
-*              the user-mode/kernel-mode transition.
-*
-*      num_bytes_ret
-*              The size in bytes of the vendor specific data returned in the buffer.
-*              This field is set by the verbs provider.  The verbs provider should
-*              verify that the buffer size is sufficient to hold the data being
-*              returned.
-*
-* NOTES
-*      This structure is provided to allow the exchange of vendor specific
-*      data between the originator and the verbs provider.  Users of this
-*      structure are expected to know the format of data in the p_buf based
-*      on the structure command field or the usage context.
-*****/
-
-
-#endif // __IB_TYPES_EXTENDED_H__
+/*\r
+ * Copyright (c) 2004,2005 Voltaire, Inc. All rights reserved.   \r
+ * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.   \r
+ * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.   \r
+ *  \r
+ * This software is available to you under the OpenIB.org BSD license  \r
+ * below:  \r
+ *  \r
+ *     Redistribution and use in source and binary forms, with or  \r
+ *     without modification, are permitted provided that the following  \r
+ *     conditions are met:  \r
+ *  \r
+ *      - Redistributions of source code must retain the above  \r
+ *        copyright notice, this list of conditions and the following  \r
+ *        disclaimer.  \r
+ *  \r
+ *      - Redistributions in binary form must reproduce the above  \r
+ *        copyright notice, this list of conditions and the following  \r
+ *        disclaimer in the documentation and/or other materials  \r
+ *        provided with the distribution.  \r
+ *  \r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  \r
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF   \r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND           \r
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  \r
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  \r
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  \r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE  \r
+ * SOFTWARE.  \r
+ *  \r
+ * $Id$\r
+ */\r
+\r
+\r
+#if !defined(__IB_TYPES_EXTENDED_H__)\r
+#define __IB_TYPES_EXTENDED_H__\r
+\r
+\r
+#if defined( WIN32 )\r
+       #if defined( EXPORT_AL_SYMBOLS )\r
+               #define AL_EXPORT       __declspec(dllexport)\r
+       #else\r
+               #define AL_EXPORT       __declspec(dllimport)\r
+       #endif\r
+\r
+       #ifdef CL_KERNEL\r
+               #define AL_API\r
+               #define AL_INLINE       static inline\r
+       #else\r
+               #define AL_API          __stdcall\r
+               #define AL_INLINE       static  inline\r
+       #endif  /* CL_KERNEL */\r
+#else\r
+       #define AL_EXPORT       extern\r
+       #define AL_INLINE       static inline\r
+       #define AL_API\r
+       #define __ptr64\r
+#endif\r
+\r
+#ifndef FUNC_PTR64\r
+#define FUNC_PTR64\r
+#endif\r
+\r
+#ifndef TYPEDEF_PTR64\r
+#define TYPEDEF_PTR64\r
+#endif\r
+\r
+#ifndef VOID_PTR64\r
+#define VOID_PTR64\r
+#endif\r
+\r
+#ifndef STRUCT_PTR64\r
+#define STRUCT_PTR64\r
+#endif\r
+\r
+\r
+//#ifndef CONCAT\r
+#define CONCAT(str1, str2) str1##str2\r
+//#endif\r
+\r
+//#ifndef T0_LONG_PTR\r
+#define TO_LONG_PTR(type,member_name) \\r
+    union { type member_name;  uint64_t CONCAT(member_name,_padding) ; }\r
+//#endif\r
+\r
+/*\r
+ *     Defines the size of user available data in communication management MADs\r
+ */\r
+#define IB_REQ_PDATA_SIZE                                      92\r
+#define IB_MRA_PDATA_SIZE                                      222\r
+#define IB_REJ_PDATA_SIZE                                      148\r
+#define IB_REP_PDATA_SIZE                                      196\r
+#define IB_RTU_PDATA_SIZE                                      224\r
+#define IB_LAP_PDATA_SIZE                                      168\r
+#define IB_APR_PDATA_SIZE                                      148\r
+#define IB_DREQ_PDATA_SIZE                                     220\r
+#define IB_DREP_PDATA_SIZE                                     224\r
+#define IB_SIDR_REQ_PDATA_SIZE                         216\r
+#define IB_SIDR_REP_PDATA_SIZE                         136\r
+\r
+/* following v1 ver1.2 p901 */\r
+#define IB_PATH_RECORD_RATE_5_GBS               5\r
+#define IB_PATH_RECORD_RATE_20_GBS              6\r
+#define IB_PATH_RECORD_RATE_40_GBS              7\r
+#define IB_PATH_RECORD_RATE_60_GBS              8\r
+#define IB_PATH_RECORD_RATE_80_GBS              9\r
+#define IB_PATH_RECORD_RATE_120_GBS             10\r
+\r
+\r
+\r
+typedef struct _ib_srq*  TYPEDEF_PTR64  ib_srq_handle_t ; \r
+\r
+/*\r
+ *     The following definitions are shared between the Access Layer and VPD\r
+ */\r
+\r
+\r
+\r
+/****d* Access Layer/ib_api_status_t\r
+* NAME\r
+*      ib_api_status_t\r
+*\r
+* DESCRIPTION\r
+*      Function return codes indicating the success or failure of an API call.\r
+*      Note that success is indicated by the return value IB_SUCCESS, which\r
+*      is always zero.\r
+*\r
+* NOTES\r
+*      IB_VERBS_PROCESSING_DONE is used by UVP library to terminate a verbs call\r
+*      in the pre-ioctl step itself.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef enum _ib_api_status_t\r
+{\r
+       IB_SUCCESS,\r
+       IB_INSUFFICIENT_RESOURCES,\r
+       IB_INSUFFICIENT_MEMORY,\r
+       IB_INVALID_PARAMETER,\r
+       IB_INVALID_SETTING,\r
+       IB_NOT_FOUND,\r
+       IB_TIMEOUT,\r
+       IB_CANCELED,\r
+       IB_INTERRUPTED,\r
+       IB_INVALID_PERMISSION,\r
+       IB_UNSUPPORTED,\r
+       IB_OVERFLOW,\r
+       IB_MAX_MCAST_QPS_REACHED,\r
+       IB_INVALID_QP_STATE,\r
+       IB_INVALID_APM_STATE,\r
+       IB_INVALID_PORT_STATE,\r
+       IB_INVALID_STATE,\r
+       IB_RESOURCE_BUSY,\r
+       IB_INVALID_PKEY,\r
+       IB_INVALID_LKEY,\r
+       IB_INVALID_RKEY,\r
+       IB_INVALID_MAX_WRS,\r
+       IB_INVALID_MAX_SGE,\r
+       IB_INVALID_CQ_SIZE,\r
+       IB_INVALID_SRQ_SIZE,\r
+       IB_INVALID_SERVICE_TYPE,\r
+       IB_INVALID_GID,\r
+       IB_INVALID_LID,\r
+       IB_INVALID_GUID,\r
+       IB_INVALID_CA_HANDLE,\r
+       IB_INVALID_AV_HANDLE,\r
+       IB_INVALID_CQ_HANDLE,\r
+       IB_INVALID_QP_HANDLE,\r
+       IB_INVALID_SRQ_HANDLE,\r
+       IB_INVALID_PD_HANDLE,\r
+       IB_INVALID_MR_HANDLE,\r
+       IB_INVALID_FMR_HANDLE,\r
+       IB_INVALID_MW_HANDLE,\r
+       IB_INVALID_MCAST_HANDLE,\r
+       IB_INVALID_CALLBACK,\r
+       IB_INVALID_AL_HANDLE,                                   /* InfiniBand Access Layer */\r
+       IB_INVALID_HANDLE,                                              /* InfiniBand Access Layer */\r
+       IB_ERROR,                                                               /* InfiniBand Access Layer */\r
+       IB_REMOTE_ERROR,                                                /* Infiniband Access Layer */\r
+       IB_VERBS_PROCESSING_DONE,                               /* See Notes above                 */\r
+       IB_INVALID_WR_TYPE,\r
+       IB_QP_IN_TIMEWAIT,\r
+       IB_EE_IN_TIMEWAIT,\r
+       IB_INVALID_PORT,\r
+       IB_NOT_DONE,\r
+       IB_INVALID_INDEX,\r
+       IB_NO_MATCH,\r
+       IB_PENDING,\r
+       IB_UNKNOWN_ERROR                                                /* ALWAYS LAST ENUM VALUE! */\r
+\r
+}      ib_api_status_t;\r
+/*****/\r
+\r
+\r
+\r
+/****f* IBA Base: Types/ib_get_err_str\r
+* NAME\r
+*      ib_get_err_str\r
+*\r
+* DESCRIPTION\r
+*      Returns a string for the specified status value.\r
+*\r
+* SYNOPSIS\r
+*/\r
+AL_EXPORT const char* AL_API\r
+ib_get_err_str(\r
+       IN                              ib_api_status_t                         status );\r
+/*\r
+* PARAMETERS\r
+*      status\r
+*              [in] status value\r
+*\r
+* RETURN VALUES\r
+*      Pointer to the status description string.\r
+*\r
+* NOTES\r
+*\r
+* SEE ALSO\r
+*********/\r
+\r
+/****d* Verbs/ib_async_event_t\r
+* NAME\r
+*      ib_async_event_t -- Async event types\r
+*\r
+* DESCRIPTION\r
+*      This type indicates the reason the async callback was called.\r
+*      The context in the ib_event_rec_t indicates the resource context\r
+*      that associated with the callback.  For example, for IB_AE_CQ_ERROR\r
+*      the context provided during the ib_create_cq is returned in the event.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef enum _ib_async_event_t\r
+{\r
+       IB_AE_SQ_ERROR = 1,\r
+       IB_AE_SQ_DRAINED,\r
+       IB_AE_RQ_ERROR,\r
+       IB_AE_CQ_ERROR,\r
+       IB_AE_QP_FATAL,\r
+       IB_AE_QP_COMM,\r
+       IB_AE_QP_APM,\r
+       IB_AE_LOCAL_FATAL,\r
+       IB_AE_PKEY_TRAP,\r
+       IB_AE_QKEY_TRAP,\r
+       IB_AE_MKEY_TRAP,\r
+       IB_AE_PORT_TRAP,\r
+       IB_AE_SYSIMG_GUID_TRAP,\r
+       IB_AE_BUF_OVERRUN,\r
+       IB_AE_LINK_INTEGRITY,\r
+       IB_AE_FLOW_CTRL_ERROR,\r
+       IB_AE_BKEY_TRAP,\r
+       IB_AE_QP_APM_ERROR,\r
+       IB_AE_WQ_REQ_ERROR,\r
+       IB_AE_WQ_ACCESS_ERROR,\r
+       IB_AE_PORT_ACTIVE,\r
+       IB_AE_PORT_DOWN,\r
+       IB_AE_CLIENT_REREGISTER,\r
+       IB_AE_SRQ_LIMIT_REACHED,\r
+       IB_AE_SRQ_QP_LAST_WQE_REACHED,\r
+       IB_AE_UNKNOWN           /* ALWAYS LAST ENUM VALUE */\r
+\r
+}      ib_async_event_t;\r
+/*\r
+* VALUES\r
+*      IB_AE_SQ_ERROR\r
+*              An error occurred when accessing the send queue of the QP.\r
+*              This event is optional.\r
+*\r
+*      IB_AE_SQ_DRAINED\r
+*              The send queue of the specified QP has completed the outstanding\r
+*              messages in progress when the state change was requested and, if\r
+*              applicable, has received all acknowledgements for those messages.\r
+*\r
+*      IB_AE_RQ_ERROR\r
+*              An error occurred when accessing the receive queue of the QP.\r
+*              This event is optional.\r
+*\r
+*      IB_AE_CQ_ERROR\r
+*              An error occurred when writing an entry to the CQ.\r
+*\r
+*      IB_AE_QP_FATAL\r
+*              A catastrophic error occurred while accessing or processing the\r
+*              work queue that prevents reporting of completions.\r
+*\r
+*      IB_AE_QP_COMM\r
+*              The first packet has arrived for the receive work queue where the\r
+*              QP is still in the RTR state.\r
+*\r
+*      IB_AE_QP_APM\r
+*              If alternate path migration is supported, this event indicates that\r
+*              the QP connection has migrated to the alternate path.\r
+*\r
+*      IB_AE_LOCAL_FATAL\r
+*              A catastrophic HCA error occurred which cannot be attributed to any\r
+*              resource; behavior is indeterminate.\r
+*\r
+*      IB_AE_PKEY_TRAP\r
+*              A PKEY violation was detected.  This event is optional.\r
+*\r
+*      IB_AE_QKEY_TRAP\r
+*              A QKEY violation was detected.  This event is optional.\r
+*\r
+*      IB_AE_MKEY_TRAP\r
+*              An MKEY violation was detected.  This event is optional.\r
+*\r
+*      IB_AE_PORT_TRAP\r
+*              A port capability change was detected.  This event is optional.\r
+*\r
+*      IB_AE_SYSIMG_GUID_TRAP\r
+*              If the system image GUID is supported, this event indicates that the\r
+*              system image GUID of this HCA has been changed.  This event is\r
+*              optional.\r
+*\r
+*      IB_AE_BUF_OVERRUN\r
+*              The number of consecutive flow control update periods with at least\r
+*              one overrun error in each period has exceeded the threshold specified\r
+*              in the port info attributes.  This event is optional.\r
+*\r
+*      IB_AE_LINK_INTEGRITY\r
+*              The detection of excessively frequent local physical errors has\r
+*              exceeded the threshold specified in the port info attributes.  This\r
+*              event is optional.\r
+*\r
+*      IB_AE_FLOW_CTRL_ERROR\r
+*              An HCA watchdog timer monitoring the arrival of flow control updates\r
+*              has expired without receiving an update.  This event is optional.\r
+*\r
+*      IB_AE_BKEY_TRAP\r
+*              An BKEY violation was detected.  This event is optional.\r
+*\r
+*      IB_AE_QP_APM_ERROR\r
+*              If alternate path migration is supported, this event indicates that\r
+*              an incoming path migration request to this QP was not accepted.\r
+*\r
+*      IB_AE_WQ_REQ_ERROR\r
+*              An OpCode violation was detected at the responder.\r
+*\r
+*      IB_AE_WQ_ACCESS_ERROR\r
+*              An access violation was detected at the responder.\r
+*\r
+*      IB_AE_PORT_ACTIVE\r
+*              If the port active event is supported, this event is generated\r
+*              when the link becomes active: IB_LINK_ACTIVE.\r
+*\r
+*      IB_AE_PORT_DOWN\r
+*              The link is declared unavailable: IB_LINK_INIT, IB_LINK_ARMED,\r
+*              IB_LINK_DOWN.\r
+*\r
+*      IB_AE_CLIENT_REREGISTER\r
+*              The SM idicate to client to reregister its SA records.\r
+*\r
+*      IB_AE_SRQ_CATAS_ERROR\r
+*              An error occurred while processing or accessing the SRQ that prevents\r
+*              dequeuing a WQE from the SRQ and reporting of receive completions.\r
+*\r
+*      IB_AE_SRQ_QP_LAST_WQE_REACHED\r
+*              An event,  issued for a QP, associated with a shared receive queue, when\r
+*                      a CQE is generated for the last WQE, or\r
+*                      the QP gets in the Error State and there are no more WQEs on the RQ.\r
+*\r
+*      IB_AE_UNKNOWN\r
+*              An unknown error occurred which cannot be attributed to any\r
+*              resource; behavior is indeterminate.\r
+*\r
+*****/\r
+\r
+\r
+\r
+/****f* IBA Base: Types/ib_get_async_event_str\r
+* NAME\r
+*      ib_get_async_event_str\r
+*\r
+* DESCRIPTION\r
+*      Returns a string for the specified asynchronous event.\r
+*\r
+* SYNOPSIS\r
+*/\r
+AL_EXPORT const char* AL_API\r
+ib_get_async_event_str(\r
+       IN                              ib_async_event_t                        event );\r
+/*\r
+* PARAMETERS\r
+*      event\r
+*              [in] event value\r
+*\r
+* RETURN VALUES\r
+*      Pointer to the asynchronous event description string.\r
+*\r
+* NOTES\r
+*\r
+* SEE ALSO\r
+*********/\r
+\r
+\r
+/****s* Verbs/ib_event_rec_t\r
+* NAME\r
+*      ib_event_rec_t -- Async event notification record\r
+*\r
+* DESCRIPTION\r
+*      When an async event callback is made, this structure is passed to indicate\r
+*      the type of event, the source of event that caused it, and the context\r
+*      associated with this event.\r
+*\r
+*      context -- Context of the resource that caused the event.\r
+*              -- ca_context if this is a port/adapter event.\r
+*              -- qp_context if the source is a QP event\r
+*              -- cq_context if the source is a CQ event.\r
+*              -- ee_context if the source is an EE event.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_event_rec\r
+{\r
+       TO_LONG_PTR(void* ,                     context) ;\r
+       ib_async_event_t                type;\r
+\r
+       /* HCA vendor specific event information. */\r
+       uint64_t                                vendor_specific;\r
+\r
+       /* The following structures are valid only for trap types. */\r
+       union _trap\r
+       {\r
+               struct\r
+               {\r
+                       uint16_t                        lid;\r
+                       ib_net64_t                      port_guid;\r
+                       uint8_t                         port_num;\r
+\r
+                       /*\r
+                        * The following structure is valid only for\r
+                        * P_KEY, Q_KEY, and M_KEY violation traps.\r
+                        */\r
+                       struct\r
+                       {\r
+                               uint8_t                 sl;\r
+                               uint16_t                src_lid;\r
+                               uint16_t                dest_lid;\r
+                               union _key\r
+                               {\r
+                                       uint16_t        pkey;\r
+                                       uint32_t        qkey;\r
+                                       uint64_t        mkey;\r
+                               } key;\r
+                               uint32_t                src_qp;\r
+                               uint32_t                dest_qp;\r
+                               ib_gid_t                src_gid;\r
+                               ib_gid_t                dest_gid;\r
+\r
+                       }       violation;\r
+\r
+               } info;\r
+\r
+               ib_net64_t      sysimg_guid;\r
+\r
+       }       trap;\r
+\r
+}      ib_event_rec_t;\r
+/*******/\r
+\r
+\r
+/****d* Access Layer/ib_atomic_t\r
+* NAME\r
+*      ib_atomic_t\r
+*\r
+* DESCRIPTION\r
+*      Indicates atomicity levels supported by an adapter.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef enum _ib_atomic_t\r
+{\r
+       IB_ATOMIC_NONE,\r
+       IB_ATOMIC_LOCAL,\r
+       IB_ATOMIC_GLOBAL\r
+\r
+}      ib_atomic_t;\r
+/*\r
+* VALUES\r
+*      IB_ATOMIC_NONE\r
+*              Atomic operations not supported.\r
+*\r
+*      IB_ATOMIC_LOCAL\r
+*              Atomic operations guaranteed between QPs of a single CA.\r
+*\r
+*      IB_ATOMIC_GLOBAL\r
+*              Atomic operations are guaranteed between CA and any other entity\r
+*              in the system.\r
+*****/\r
+\r
+\r
+/****s* Access Layer/ib_port_cap_t\r
+* NAME\r
+*      ib_port_cap_t\r
+*\r
+* DESCRIPTION\r
+*      Indicates which management agents are currently available on the specified\r
+*      port.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_port_cap\r
+{\r
+       boolean_t               cm;\r
+       boolean_t               snmp;\r
+       boolean_t               dev_mgmt;\r
+       boolean_t               vend;\r
+       boolean_t               sm;\r
+       boolean_t               sm_disable;\r
+       boolean_t               qkey_ctr;\r
+       boolean_t               pkey_ctr;\r
+       boolean_t               notice;\r
+       boolean_t               trap;\r
+       boolean_t               apm;\r
+       boolean_t               slmap;\r
+       boolean_t               pkey_nvram;\r
+       boolean_t               mkey_nvram;\r
+       boolean_t               sysguid;\r
+       boolean_t               dr_notice;\r
+       boolean_t               boot_mgmt;\r
+       boolean_t               capm_notice;\r
+       boolean_t               reinit;\r
+       boolean_t               ledinfo;\r
+       boolean_t               port_active;\r
+       boolean_t               ipd;\r
+       boolean_t               pkey_switch_ext_port;\r
+       boolean_t               bm;\r
+       boolean_t               link_rtl;\r
+       boolean_t               client_reregister;      \r
+\r
+}      ib_port_cap_t;\r
+/*****/\r
+\r
+\r
+/****d* Access Layer/ib_init_type_t\r
+* NAME\r
+*      ib_init_type_t\r
+*\r
+* DESCRIPTION\r
+*      If supported by the HCA, the type of initialization requested by\r
+*      this port before SM moves it to the active or armed state.  If the\r
+*      SM implements reinitialization, it shall set these bits to indicate\r
+*      the type of initialization performed prior to activating the port.\r
+*      Otherwise, these bits shall be set to 0.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef uint8_t                                        ib_init_type_t;\r
+#define IB_INIT_TYPE_NO_LOAD                           0x01\r
+#define IB_INIT_TYPE_PRESERVE_CONTENT          0x02\r
+#define IB_INIT_TYPE_PRESERVE_PRESENCE         0x04\r
+#define IB_INIT_TYPE_DO_NOT_RESUSCITATE                0x08\r
+/*****/\r
+\r
+\r
+/****s* Access Layer/ib_port_attr_mod_t\r
+* NAME\r
+*      ib_port_attr_mod_t\r
+*\r
+* DESCRIPTION\r
+*      Port attributes that may be modified.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_port_attr_mod\r
+{\r
+       ib_port_cap_t                   cap;\r
+       uint16_t                                pkey_ctr;\r
+       uint16_t                                qkey_ctr;\r
+\r
+       ib_init_type_t                  init_type;\r
+       ib_net64_t                              system_image_guid;\r
+\r
+}      ib_port_attr_mod_t;\r
+/*\r
+* SEE ALSO\r
+*      ib_port_cap_t\r
+*****/\r
+\r
+\r
+/****s* Access Layer/ib_port_attr_t\r
+* NAME\r
+*      ib_port_attr_t\r
+*\r
+* DESCRIPTION\r
+*      Information about a port on a given channel adapter.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_port_attr\r
+{\r
+       ib_net64_t                              port_guid;\r
+       uint8_t                                 port_num;\r
+       uint8_t                                 mtu;\r
+       uint64_t                                max_msg_size;\r
+       ib_net16_t                              lid;\r
+       uint8_t                                 lmc;\r
+\r
+       /*\r
+        * LinkWidthSupported as defined in PortInfo.  Required to calculate\r
+        * inter-packet delay (a.k.a. static rate).\r
+        */\r
+       uint8_t                                 link_width_supported;\r
+\r
+       uint16_t                                max_vls;\r
+\r
+       ib_net16_t                              sm_lid;\r
+       uint8_t                                 sm_sl;\r
+       uint8_t                                 link_state;\r
+\r
+       ib_init_type_t                  init_type_reply;        /* Optional */\r
+\r
+       /*\r
+        * subnet_timeout:\r
+        * The maximum expected subnet propagation delay to reach any port on\r
+        * the subnet.  This value also determines the rate at which traps can\r
+        * be generated from this node.\r
+        *\r
+        * timeout = 4.096 microseconds * 2^subnet_timeout\r
+        */\r
+       uint8_t                                 subnet_timeout;\r
+\r
+       ib_port_cap_t                   cap;\r
+       uint16_t                                pkey_ctr;\r
+       uint16_t                                qkey_ctr;\r
+\r
+       uint16_t                                num_gids;\r
+       uint16_t                                num_pkeys;\r
+       /*\r
+        * Pointers at the end of the structure to allow doing a simple\r
+        * memory comparison of contents up to the first pointer.\r
+        */\r
+       TO_LONG_PTR(ib_gid_t* ,         p_gid_table) ;\r
+       TO_LONG_PTR(ib_net16_t* ,               p_pkey_table) ;\r
+\r
+}      ib_port_attr_t;\r
+/*\r
+* SEE ALSO\r
+*      uint8_t, ib_port_cap_t, ib_link_states_t\r
+*****/\r
+\r
+\r
+/****s* Access Layer/ib_ca_attr_t\r
+* NAME\r
+*      ib_ca_attr_t\r
+*\r
+* DESCRIPTION\r
+*      Information about a channel adapter.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_ca_attr\r
+{\r
+       ib_net64_t                              ca_guid;\r
+\r
+       uint32_t                                vend_id;\r
+       uint16_t                                dev_id;\r
+       uint16_t                                revision;\r
+       uint64_t                                fw_ver;\r
+\r
+       /*\r
+        * Total size of the ca attributes in bytes\r
+        */\r
+       uint32_t                                size;\r
+       uint32_t                                max_qps;\r
+       uint32_t                                max_wrs;\r
+\r
+       uint32_t                                max_sges;\r
+       uint32_t                                max_rd_sges;\r
+\r
+       uint32_t                                max_cqs;\r
+       uint32_t                                max_cqes;\r
+\r
+       uint32_t                                max_pds;\r
+\r
+       uint32_t                                init_regions;\r
+       uint64_t                                init_region_size;\r
+\r
+       uint32_t                                init_windows;\r
+       uint32_t                                max_addr_handles;\r
+\r
+       uint32_t                                max_partitions;\r
+\r
+       ib_atomic_t                             atomicity;\r
+\r
+       uint8_t                                 max_qp_resp_res;\r
+       uint8_t                                 max_resp_res;\r
+\r
+       uint8_t                                 max_qp_init_depth;\r
+\r
+       uint32_t                                max_ipv6_qps;\r
+       uint32_t                                max_ether_qps;\r
+\r
+       uint32_t                                max_mcast_grps;\r
+       uint32_t                                max_mcast_qps;\r
+       uint32_t                                max_qps_per_mcast_grp;\r
+       uint32_t                                max_fmr;\r
+       uint32_t                                max_map_per_fmr;\r
+       uint32_t                                max_srq;\r
+       uint32_t                                max_srq_wrs;\r
+       uint32_t                                max_srq_sges;\r
+\r
+       /*\r
+        * local_ack_delay:\r
+        * Specifies the maximum time interval between the local CA receiving\r
+        * a message and the transmission of the associated ACK or NAK.\r
+        *\r
+        * timeout = 4.096 microseconds * 2^local_ack_delay\r
+        */\r
+       uint8_t                                 local_ack_delay;\r
+\r
+       boolean_t                               bad_pkey_ctr_support;\r
+       boolean_t                               bad_qkey_ctr_support;\r
+       boolean_t                               raw_mcast_support;\r
+       boolean_t                               apm_support;\r
+       boolean_t                               av_port_check;\r
+       boolean_t                               change_primary_port;\r
+       boolean_t                               modify_wr_depth;\r
+       boolean_t                               modify_srq_depth;\r
+       boolean_t                               current_qp_state_support;\r
+       boolean_t                               shutdown_port_capability;\r
+       boolean_t                               init_type_support;\r
+       boolean_t                               port_active_event_support;\r
+       boolean_t                               system_image_guid_support;\r
+       boolean_t                               hw_agents;\r
+\r
+       ib_net64_t                              system_image_guid;\r
+\r
+       uint32_t                                num_page_sizes;\r
+       uint8_t                                 num_ports;\r
+\r
+       TO_LONG_PTR(uint32_t* ,         p_page_size) ;\r
+       TO_LONG_PTR(ib_port_attr_t* ,   p_port_attr) ;\r
+\r
+}      ib_ca_attr_t;\r
+/*\r
+* FIELDS\r
+*      ca_guid\r
+*              GUID for this adapter.\r
+*\r
+*      vend_id\r
+*              IEEE vendor ID for this adapter\r
+*\r
+*      dev_id\r
+*              Device ID of this adapter. (typically from PCI device ID)\r
+*\r
+*      revision\r
+*              Revision ID of this adapter\r
+*\r
+*      Fw_ver\r
+*              Device Firmware version.\r
+*\r
+*      size\r
+*              Total size in bytes for the HCA attributes.  This size includes total\r
+*              size required for all the variable members of the structure.  If a\r
+*              vendor requires to pass vendor specific fields beyond this structure,\r
+*              the HCA vendor can choose to report a larger size.  If a vendor is\r
+*              reporting extended vendor specific features, they should also provide\r
+*              appropriate access functions to aid with the required interpretation.\r
+*\r
+*      max_qps\r
+*              Maximum number of QP's supported by this HCA.\r
+*\r
+*      max_wrs\r
+*              Maximum number of work requests supported by this HCA.\r
+*\r
+*      max_sges\r
+*              Maximum number of scatter gather elements supported per work request.\r
+*\r
+*      max_rd_sges\r
+*              Maximum number of scatter gather elements supported for READ work\r
+*              requests for a Reliable Datagram QP.  This value must be zero if RD\r
+*              service is not supported.\r
+*\r
+*      max_cqs\r
+*              Maximum number of Completion Queues supported.\r
+*\r
+*      max_cqes\r
+*              Maximum number of CQ elements supported per CQ.\r
+*\r
+*      max_pds\r
+*              Maximum number of protection domains supported.\r
+*\r
+*      init_regions\r
+*              Initial number of memory regions supported.  These are only informative\r
+*              values.  HCA vendors can extended and grow these limits on demand.\r
+*\r
+*      init_region_size\r
+*              Initial limit on the size of the registered memory region.\r
+*\r
+*      init_windows\r
+*              Initial number of window entries supported.\r
+*\r
+*      max_addr_handles\r
+*              Maximum number of address handles supported.\r
+*\r
+*      max_partitions\r
+*              Maximum number of partitions supported.\r
+*\r
+*      atomicity\r
+*              Indicates level of atomic operations supported by this HCA.\r
+*\r
+*      max_qp_resp_res\r
+*              Maximum limit on number of responder resources for incomming RDMA\r
+*              operations on QPs.\r
+*\r
+*      max_fmr\r
+*              Maximum number of Fast Memory Regions supported.\r
+*\r
+*      max_map_per_fmr\r
+*              Maximum number of mappings, supported by a Fast Memory Region.\r
+*\r
+*      max_srq\r
+*              Maximum number of Shared Receive Queues supported.\r
+*\r
+*      max_srq_wrs\r
+*              Maximum number of work requests supported by this SRQ.\r
+*\r
+*      max_srq_sges\r
+*              Maximum number of scatter gather elements supported per work request on SRQ.\r
+*\r
+*      max_resp_res\r
+*              Maximum number of responder resources per HCA, with this HCA used as\r
+*              the target.\r
+*\r
+*      max_qp_init_depth\r
+*              Maximimum initiator depth per QP for initiating RDMA reads and\r
+*              atomic operations.\r
+*\r
+*      max_ipv6_qps\r
+*      max_ether_qps\r
+*              Maximum number of IPV6 and raw ether QP's supported by this HCA.\r
+*\r
+*      max_mcast_grps\r
+*              Maximum number of multicast groups supported.\r
+*\r
+*      max_mcast_qps\r
+*              Maximum number of QP's that can support multicast operations.\r
+*\r
+*      max_qps_per_mcast_grp\r
+*              Maximum number of multicast QP's per multicast group.\r
+*\r
+*      local_ack_delay\r
+*              Specifies the maximum time interval between the local CA receiving\r
+*              a message and the transmission of the associated ACK or NAK.\r
+*              timeout = 4.096 microseconds * 2^local_ack_delay\r
+*\r
+*      bad_pkey_ctr_support\r
+*      bad_qkey_ctr_support\r
+*              Indicates support for the bad pkey and qkey counters.\r
+*\r
+*      raw_mcast_support\r
+*              Indicates support for raw packet multicast.\r
+*\r
+*      apm_support\r
+*              Indicates support for Automatic Path Migration.\r
+*\r
+*      av_port_check\r
+*              Indicates ability to check port number in address handles.\r
+*\r
+*      change_primary_port\r
+*              Indicates ability to change primary port for a QP during a\r
+*              SQD->RTS transition.\r
+*\r
+*      modify_wr_depth\r
+*              Indicates ability to modify QP depth during a modify QP operation.\r
+*              Check the verb specification for permitted states.\r
+*\r
+*      modify_srq_depth\r
+*              Indicates ability to modify SRQ depth during a modify SRQ operation.\r
+*              Check the verb specification for permitted states.\r
+*\r
+*      current_qp_state_support\r
+*              Indicates ability of the HCA to support the current QP state modifier\r
+*              during a modify QP operation.\r
+*\r
+*      shutdown_port_capability\r
+*              Shutdown port capability support indicator.\r
+*\r
+*      init_type_support\r
+*              Indicates init_type_reply and ability to set init_type is supported.\r
+*\r
+*      port_active_event_support\r
+*              Port active event support indicator.\r
+*\r
+*      system_image_guid_support\r
+*              System image GUID support indicator.\r
+*\r
+*      hw_agents\r
+*              Indicates SMA is implemented in HW.\r
+*\r
+*      system_image_guid\r
+*              Optional system image GUID.  This field is valid only if the\r
+*              system_image_guid_support flag is set.\r
+*\r
+*      num_page_sizes\r
+*              Indicates support for different page sizes supported by the HCA.\r
+*              The variable size array can be obtained from p_page_size.\r
+*\r
+*      num_ports\r
+*              Number of physical ports supported on this HCA.\r
+*\r
+*      p_page_size\r
+*              Array holding different page size supported.\r
+*\r
+*      p_port_attr\r
+*              Array holding port attributes.\r
+*\r
+* NOTES\r
+*      This structure contains the attributes of a channel adapter.  Users must\r
+*      call ib_copy_ca_attr to copy the contents of this structure to a new\r
+*      memory region.\r
+*\r
+* SEE ALSO\r
+*      ib_port_attr_t, ib_atomic_t, ib_copy_ca_attr\r
+*****/\r
+\r
+/****f* Access layer/ib_copy_ca_attr\r
+* NAME\r
+*      ib_copy_ca_attr\r
+*\r
+* DESCRIPTION\r
+*      Copies CA attributes.\r
+*\r
+* SYNOPSIS\r
+*/\r
+AL_EXPORT ib_ca_attr_t* AL_API\r
+ib_copy_ca_attr(\r
+       IN                              ib_ca_attr_t* const             p_dest,\r
+       IN              const   ib_ca_attr_t* const             p_src );\r
+/*\r
+* PARAMETERS\r
+*      p_dest\r
+*              Pointer to the buffer that is the destination of the copy.\r
+*\r
+*      p_src\r
+*              Pointer to the CA attributes to copy.\r
+*\r
+* RETURN VALUE\r
+*      Pointer to the copied CA attributes.\r
+*\r
+* NOTES\r
+*      The buffer pointed to by the p_dest parameter must be at least the size\r
+*      specified in the size field of the buffer pointed to by p_src.\r
+*\r
+* SEE ALSO\r
+*      ib_ca_attr_t, ib_dup_ca_attr, ib_free_ca_attr\r
+*****/\r
+\r
+\r
+/****d* Access Layer/ib_pd_type_t\r
+* NAME\r
+*      ib_pd_type_t\r
+*\r
+* DESCRIPTION\r
+*      Indicates the type of protection domain being allocated.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef enum _ib_pd_type\r
+{\r
+       IB_PDT_NORMAL,\r
+       IB_PDT_ALIAS,\r
+       IB_PDT_SQP\r
+\r
+}      ib_pd_type_t;\r
+/*\r
+* VALUES\r
+*      IB_PDT_NORMAL\r
+*              Protection domain for all non-aliased QPs.\r
+*\r
+*      IB_PDT_ALIAS\r
+*              Protection domain for IB_QPT_QP0_ALIAS and IB_QPT_QP1_ALIAS QPs.\r
+*\r
+*      IB_PDT_SQP\r
+*              Protection domain for special queue pair usage.\r
+*****/\r
+\r
+\r
+/****s* Access Layer/ib_av_attr_t\r
+* NAME\r
+*      ib_av_attr_t\r
+*\r
+* DESCRIPTION\r
+*      IBA address vector.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_av_attr\r
+{\r
+       uint8_t                                 port_num;\r
+\r
+       uint8_t                                 sl;\r
+       ib_net16_t                              dlid;\r
+\r
+       boolean_t                               grh_valid;\r
+       ib_grh_t                                grh;\r
+       uint8_t                                 static_rate;\r
+       uint8_t                                 path_bits;\r
+\r
+       struct _av_conn\r
+       {\r
+               uint8_t                         path_mtu;\r
+               uint8_t                         local_ack_timeout;\r
+               uint8_t                         seq_err_retry_cnt;\r
+               uint8_t                         rnr_retry_cnt;\r
+\r
+       }       conn;\r
+\r
+}      ib_av_attr_t;\r
+/*\r
+* SEE ALSO\r
+*      ib_gid_t\r
+*****/\r
+\r
+\r
+/****d* Access Layer/ib_qp_type_t\r
+* NAME\r
+*      ib_qp_type_t\r
+*\r
+* DESCRIPTION\r
+*      Indicates the type of queue pair being created.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef enum _ib_qp_type\r
+{\r
+       IB_QPT_RELIABLE_CONN    = 0,            /* Matches CM REQ transport type */\r
+       IB_QPT_UNRELIABLE_CONN  = 1,            /* Matches CM REQ transport type */\r
+       IB_QPT_UNRELIABLE_DGRM  = 3,            /* Purposefully skip RDD type. */\r
+       IB_QPT_QP0,\r
+       IB_QPT_QP1,\r
+       IB_QPT_RAW_IPV6,\r
+       IB_QPT_RAW_ETHER,\r
+       IB_QPT_MAD,                                                             /* InfiniBand Access Layer */\r
+       IB_QPT_QP0_ALIAS,                                               /* InfiniBand Access Layer */\r
+       IB_QPT_QP1_ALIAS                                                /* InfiniBand Access Layer */\r
+\r
+}      ib_qp_type_t;\r
+/*\r
+* VALUES\r
+*      IB_QPT_RELIABLE_CONN\r
+*              Reliable, connected queue pair.\r
+*\r
+*      IB_QPT_UNRELIABLE_CONN\r
+*              Unreliable, connected queue pair.\r
+*\r
+*      IB_QPT_UNRELIABLE_DGRM\r
+*              Unreliable, datagram queue pair.\r
+*\r
+*      IB_QPT_QP0\r
+*              Queue pair 0.\r
+*\r
+*      IB_QPT_QP1\r
+*              Queue pair 1.\r
+*\r
+*      IB_QPT_RAW_DGRM\r
+*              Raw datagram queue pair.\r
+*\r
+*      IB_QPT_RAW_IPV6\r
+*              Raw IP version 6 queue pair.\r
+*\r
+*      IB_QPT_RAW_ETHER\r
+*              Raw Ethernet queue pair.\r
+*\r
+*      IB_QPT_MAD\r
+*              Unreliable, datagram queue pair that will send and receive management\r
+*              datagrams with assistance from the access layer.\r
+*\r
+*      IB_QPT_QP0_ALIAS\r
+*              Alias to queue pair 0.  Aliased QPs can only be created on an aliased\r
+*              protection domain.\r
+*\r
+*      IB_QPT_QP1_ALIAS\r
+*              Alias to queue pair 1.  Aliased QPs can only be created on an aliased\r
+*              protection domain.\r
+*****/\r
+\r
+\r
+/****d* Access Layer/ib_access_t\r
+* NAME\r
+*      ib_access_t\r
+*\r
+* DESCRIPTION\r
+*      Indicates the type of access is permitted on resources such as QPs,\r
+*      memory regions and memory windows.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef uint32_t                               ib_access_t;\r
+#define IB_AC_RDMA_READ                        0x00000001\r
+#define IB_AC_RDMA_WRITE               0x00000002\r
+#define IB_AC_ATOMIC                   0x00000004\r
+#define IB_AC_LOCAL_WRITE              0x00000008\r
+#define IB_AC_MW_BIND                  0x00000010\r
+/*\r
+* NOTES\r
+*      Users may combine access rights using a bit-wise or operation to specify\r
+*      additional access.  For example: IB_AC_RDMA_READ | IB_AC_RDMA_WRITE grants\r
+*      RDMA read and write access.\r
+*****/\r
+\r
+\r
+/****d* Access Layer/ib_qp_state_t\r
+* NAME\r
+*      ib_qp_state_t\r
+*\r
+* DESCRIPTION\r
+*      Indicates or sets the state of a queue pair.  The current state of a queue\r
+*      pair is returned through the ib_qp_query call and set via the\r
+*      ib_qp_modify call.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef uint32_t                               ib_qp_state_t;\r
+#define IB_QPS_RESET                   0x00000001\r
+#define IB_QPS_INIT                            0x00000002\r
+#define IB_QPS_RTR                             0x00000004\r
+#define IB_QPS_RTS                             0x00000008\r
+#define IB_QPS_SQD                             0x00000010\r
+#define IB_QPS_SQD_DRAINING            0x00000030\r
+#define IB_QPS_SQD_DRAINED             0x00000050\r
+#define IB_QPS_SQERR                   0x00000080\r
+#define IB_QPS_ERROR                   0x00000100\r
+#define IB_QPS_TIME_WAIT               0xDEAD0000      /* InfiniBand Access Layer */\r
+/*****/\r
+\r
+\r
+/****d* Access Layer/ib_apm_state_t\r
+* NAME\r
+*      ib_apm_state_t\r
+*\r
+* DESCRIPTION\r
+*      The current automatic path migration state of a queue pair\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef enum _ib_apm_state\r
+{\r
+       IB_APM_MIGRATED = 1,\r
+       IB_APM_REARM,\r
+       IB_APM_ARMED\r
+\r
+}      ib_apm_state_t;\r
+/*****/\r
+\r
+/****d* Access Layer/ib_srq_attr_mask_t\r
+* NAME\r
+*      ib_srq_attr_mask_t\r
+*\r
+* DESCRIPTION\r
+*      Indicates valid fields in ib_srq_attr_t structure\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef enum _ib_srq_attr_mask {\r
+       IB_SRQ_MAX_WR   = 1 << 0,\r
+       IB_SRQ_LIMIT    = 1 << 1,\r
+} ib_srq_attr_mask_t;\r
+/*****/\r
+\r
+\r
+/****s* Access Layer/ib_srq_attr_t\r
+* NAME\r
+*      ib_srq_attr_t\r
+*\r
+* DESCRIPTION\r
+*      Attributes used to initialize a shared queue pair at creation time.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_srq_attr {\r
+       uint32_t                                max_wr;\r
+       uint32_t                                max_sge;\r
+       uint32_t                                srq_limit;\r
+} ib_srq_attr_t;\r
+/*\r
+* FIELDS\r
+*      max_wr\r
+*              Specifies the max number of work request on SRQ.\r
+*\r
+*      max_sge\r
+*              Specifies the max number of scatter/gather elements in one work request.\r
+*\r
+*      srq_limit\r
+*              Specifies the low water mark for SRQ.\r
+*\r
+* SEE ALSO\r
+*      ib_qp_type_t, ib_srq_attr_mask_t\r
+*****/\r
+\r
+\r
+\r
+/****s* Access Layer/ib_qp_create_t\r
+* NAME\r
+*      ib_qp_create_t\r
+*\r
+* DESCRIPTION\r
+*      Attributes used to initialize a queue pair at creation time.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_qp_create\r
+{\r
+       ib_qp_type_t                    qp_type;\r
+\r
+       uint32_t                                sq_depth;\r
+       uint32_t                                rq_depth;\r
+       uint32_t                                sq_sge;\r
+       uint32_t                                rq_sge;\r
+\r
+TO_LONG_PTR(   struct _ib_cq* ,                        h_sq_cq) ; \r
+TO_LONG_PTR(   struct _ib_cq* ,                        h_rq_cq) ; \r
+TO_LONG_PTR(   struct _ib_srq* ,                       h_srq) ; \r
+\r
+       boolean_t                               sq_signaled;\r
+\r
+}      ib_qp_create_t;\r
+/*\r
+* FIELDS\r
+*      type\r
+*              Specifies the type of queue pair to create.\r
+*\r
+*      sq_depth\r
+*              Indicates the requested maximum number of work requests that may be\r
+*              outstanding on the queue pair's send queue.  This value must be less\r
+*              than or equal to the maximum reported by the channel adapter associated\r
+*              with the queue pair.\r
+*\r
+*      rq_depth\r
+*              Indicates the requested maximum number of work requests that may be\r
+*              outstanding on the queue pair's receive queue.  This value must be less\r
+*              than or equal to the maximum reported by the channel adapter associated\r
+*              with the queue pair.\r
+*\r
+*      sq_sge\r
+*              Indicates the maximum number scatter-gather elements that may be\r
+*              given in a send work request.  This value must be less\r
+*              than or equal to the maximum reported by the channel adapter associated\r
+*              with the queue pair.\r
+*\r
+*      rq_sge\r
+*              Indicates the maximum number scatter-gather elements that may be\r
+*              given in a receive work request.  This value must be less\r
+*              than or equal to the maximum reported by the channel adapter associated\r
+*              with the queue pair.\r
+*\r
+*      h_sq_cq\r
+*              A handle to the completion queue that will be used to report send work\r
+*              request completions.  This handle must be NULL if the type is\r
+*              IB_QPT_MAD, IB_QPT_QP0_ALIAS, or IB_QPT_QP1_ALIAS.\r
+*\r
+*      h_rq_cq\r
+*              A handle to the completion queue that will be used to report receive\r
+*              work request completions.  This handle must be NULL if the type is\r
+*              IB_QPT_MAD, IB_QPT_QP0_ALIAS, or IB_QPT_QP1_ALIAS.\r
+*\r
+*      h_srq\r
+*              A handle to an SRQ to get receive completions via. Must be coded NULL \r
+*              when QP is not associated with SRQ\r
+*\r
+*      sq_signaled\r
+*              A flag that is used to indicate whether the queue pair will signal\r
+*              an event upon completion of a send work request.  If set to\r
+*              TRUE, send work requests will always generate a completion\r
+*              event.  If set to FALSE, a completion event will only be\r
+*              generated if the send_opt field of the send work request has the\r
+*              IB_SEND_OPT_SIGNALED flag set.\r
+*\r
+* SEE ALSO\r
+*      ib_qp_type_t, ib_qp_attr_t\r
+*****/\r
+\r
+\r
+/****s* Access Layer/ib_qp_attr_t\r
+* NAME\r
+*      ib_qp_attr_t\r
+*\r
+* DESCRIPTION\r
+*      Queue pair attributes returned through ib_query_qp.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_qp_attr\r
+{\r
+TO_LONG_PTR(   struct _ib_pd* ,                        h_pd) ; \r
+       ib_qp_type_t                    qp_type;\r
+       ib_access_t                             access_ctrl;\r
+       uint16_t                                pkey_index;\r
+\r
+       uint32_t                                sq_max_inline;\r
+       uint32_t                                sq_depth;\r
+       uint32_t                                rq_depth;\r
+       uint32_t                                sq_sge;\r
+       uint32_t                                rq_sge;\r
+       uint8_t                                 init_depth;\r
+       uint8_t                                 resp_res;\r
+\r
+TO_LONG_PTR(   struct ib_cq* ,                 h_sq_cq) ; \r
+TO_LONG_PTR(   struct ib_cq* ,                 h_rq_cq) ; \r
+TO_LONG_PTR(   struct ib_srq* ,                        h_srq) ; \r
+\r
+       boolean_t                               sq_signaled;\r
+\r
+       ib_qp_state_t                   state;\r
+       ib_net32_t                              num;\r
+       ib_net32_t                              dest_num;\r
+       ib_net32_t                              qkey;\r
+\r
+       ib_net32_t                              sq_psn;\r
+       ib_net32_t                              rq_psn;\r
+\r
+       uint8_t                                 primary_port;\r
+       uint8_t                                 alternate_port;\r
+       ib_av_attr_t                    primary_av;\r
+       ib_av_attr_t                    alternate_av;\r
+       ib_apm_state_t                  apm_state;\r
+\r
+}      ib_qp_attr_t;\r
+/*\r
+* FIELDS\r
+*      h_pd\r
+*              This is a handle to a protection domain associated with the QP.\r
+*\r
+*      sq_max_inline\r
+*              Maximum payload that can be inlined directly in a WQE, eliminating\r
+*              protection checks and additional DMA operations.\r
+*\r
+* NOTES\r
+*      Other fields are defined by the Infiniband specification.\r
+*\r
+* SEE ALSO\r
+*      ib_qp_type_t, ib_access_t, ib_qp_state_t, ib_av_attr_t, ib_apm_state_t\r
+*****/\r
+\r
+\r
+/****d* Access Layer/ib_qp_opts_t\r
+* NAME\r
+*      ib_qp_opts_t\r
+*\r
+* DESCRIPTION\r
+*      Optional fields supplied in the modify QP operation.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef uint32_t                               ib_qp_opts_t;\r
+#define IB_MOD_QP_ALTERNATE_AV         0x00000001\r
+#define IB_MOD_QP_PKEY                         0x00000002\r
+#define IB_MOD_QP_APM_STATE                    0x00000004\r
+#define IB_MOD_QP_PRIMARY_AV           0x00000008\r
+#define IB_MOD_QP_RNR_NAK_TIMEOUT      0x00000010\r
+#define IB_MOD_QP_RESP_RES                     0x00000020\r
+#define IB_MOD_QP_INIT_DEPTH           0x00000040\r
+#define IB_MOD_QP_PRIMARY_PORT         0x00000080\r
+#define IB_MOD_QP_ACCESS_CTRL          0x00000100\r
+#define IB_MOD_QP_QKEY                         0x00000200\r
+#define IB_MOD_QP_SQ_DEPTH                     0x00000400\r
+#define IB_MOD_QP_RQ_DEPTH                     0x00000800\r
+#define IB_MOD_QP_CURRENT_STATE                0x00001000\r
+#define IB_MOD_QP_RETRY_CNT                    0x00002000\r
+#define IB_MOD_QP_LOCAL_ACK_TIMEOUT    0x00004000\r
+#define IB_MOD_QP_RNR_RETRY_CNT                0x00008000\r
+\r
+/*\r
+* SEE ALSO\r
+*      ib_qp_mod_t\r
+*****/\r
+\r
+\r
+/****s* Access Layer/ib_qp_mod_t\r
+* NAME\r
+*      ib_qp_mod_t\r
+*\r
+* DESCRIPTION\r
+*      Information needed to change the state of a queue pair through the\r
+*      ib_modify_qp call.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_qp_mod\r
+{\r
+       ib_qp_state_t                           req_state;\r
+\r
+       union _qp_state\r
+       {\r
+               struct _qp_init\r
+               {\r
+                       ib_qp_opts_t            opts;\r
+                       uint8_t                         primary_port;\r
+                       ib_net32_t                      qkey;\r
+                       uint16_t                        pkey_index;\r
+                       ib_access_t                     access_ctrl;\r
+\r
+               }       init;\r
+\r
+               struct _qp_rtr\r
+               {\r
+                       ib_net32_t                      rq_psn;\r
+                       ib_net32_t                      dest_qp;\r
+                       ib_av_attr_t            primary_av;\r
+                       uint8_t                         resp_res;\r
+                       uint8_t                         rnr_nak_timeout;\r
+\r
+                       ib_qp_opts_t            opts;\r
+                       ib_av_attr_t            alternate_av;\r
+                       ib_net32_t                      qkey;\r
+                       uint16_t                        pkey_index;\r
+                       ib_access_t                     access_ctrl;\r
+                       uint32_t                        sq_depth;\r
+                       uint32_t                        rq_depth;\r
+\r
+               }       rtr;\r
+\r
+               struct _qp_rts\r
+               {\r
+                       ib_net32_t                      sq_psn;\r
+                       uint8_t                         retry_cnt;\r
+                       uint8_t                         rnr_retry_cnt;\r
+                       uint8_t                         local_ack_timeout;\r
+                       uint8_t                         init_depth;\r
+\r
+                       ib_qp_opts_t            opts;\r
+                       uint8_t                         rnr_nak_timeout;\r
+                       ib_qp_state_t           current_state;\r
+                       ib_net32_t                      qkey;\r
+                       ib_access_t                     access_ctrl;\r
+                       uint8_t                         resp_res;\r
+\r
+                       ib_av_attr_t            primary_av;\r
+                       ib_av_attr_t            alternate_av;\r
+\r
+                       uint32_t                        sq_depth;\r
+                       uint32_t                        rq_depth;\r
+\r
+                       ib_apm_state_t          apm_state;\r
+                       uint8_t                         primary_port;\r
+                       uint16_t                        pkey_index;\r
+\r
+               }       rts;\r
+\r
+               struct _qp_sqd\r
+               {\r
+                       boolean_t                       sqd_event;\r
+\r
+               }       sqd;\r
+\r
+       }       state;\r
+\r
+}      ib_qp_mod_t;\r
+/*\r
+* SEE ALSO\r
+*      ib_qp_state_t, ib_access_t, ib_av_attr_t, ib_apm_state_t\r
+*****/\r
+\r
+\r
+/****d* Access Layer/ib_wr_type_t\r
+* NAME\r
+*      ib_wr_type_t\r
+*\r
+* DESCRIPTION\r
+*      Identifies the type of work request posted to a queue pair.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef enum _ib_wr_type_t\r
+{\r
+       WR_SEND = 1,\r
+       WR_RDMA_WRITE,\r
+       WR_RDMA_READ,\r
+       WR_COMPARE_SWAP,\r
+       WR_FETCH_ADD\r
+\r
+}      ib_wr_type_t;\r
+/*****/\r
+\r
+\r
+/****s* Access Layer/ib_local_ds_t\r
+* NAME\r
+*      ib_local_ds_t\r
+*\r
+* DESCRIPTION\r
+*      Local data segment information referenced by send and receive work\r
+*      requests.  This is used to specify local data buffers used as part of a\r
+*      work request.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_local_ds\r
+{\r
+       uint64_t                                vaddr;\r
+       uint32_t                                length;\r
+       uint32_t                                lkey;\r
+\r
+}      ib_local_ds_t;\r
+/*****/\r
+\r
+\r
+/****d* Access Layer/ib_send_opt_t\r
+* NAME\r
+*      ib_send_opt_t\r
+*\r
+* DESCRIPTION\r
+*      Optional flags used when posting send work requests.  These flags\r
+*      indicate specific processing for the send operation.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef uint32_t                                       ib_send_opt_t;\r
+#define IB_SEND_OPT_IMMEDIATE          0x00000001\r
+#define IB_SEND_OPT_FENCE                      0x00000002\r
+#define IB_SEND_OPT_SIGNALED           0x00000004\r
+#define IB_SEND_OPT_SOLICITED          0x00000008\r
+#define IB_SEND_OPT_INLINE                     0x00000010\r
+#define IB_SEND_OPT_LOCAL                      0x00000020\r
+#define IB_SEND_OPT_VEND_MASK          0xFFFF0000\r
+/*\r
+* VALUES\r
+*      The following flags determine the behavior of a work request when\r
+*      posted to the send side.\r
+*\r
+*      IB_SEND_OPT_IMMEDIATE\r
+*              Send immediate data with the given request.\r
+*\r
+*      IB_SEND_OPT_FENCE\r
+*              The operation is fenced.  Complete all pending send operations before\r
+*              processing this request.\r
+*\r
+*      IB_SEND_OPT_SIGNALED\r
+*              If the queue pair is configured for signaled completion, then\r
+*              generate a completion queue entry when this request completes.\r
+*\r
+*      IB_SEND_OPT_SOLICITED\r
+*              Set the solicited bit on the last packet of this request.\r
+*\r
+*      IB_SEND_OPT_INLINE\r
+*              Indicates that the requested send data should be copied into a VPD\r
+*              owned data buffer.  This flag permits the user to issue send operations\r
+*              without first needing to register the buffer(s) associated with the\r
+*              send operation.  Verb providers that support this operation may place\r
+*              vendor specific restrictions on the size of send operation that may\r
+*              be performed as inline.\r
+*\r
+*      IB_SEND_OPT_LOCAL\r
+*              Indicates that a sent MAD request should be given to the local VPD for\r
+*              processing.  MADs sent using this option are not placed on the wire.\r
+*              This send option is only valid for MAD send operations.\r
+*\r
+*      IB_SEND_OPT_VEND_MASK\r
+*              This mask indicates bits reserved in the send options that may be used\r
+*              by the verbs provider to indicate vendor specific options.  Bits set\r
+*              in this area of the send options are ignored by the Access Layer, but\r
+*              may have specific meaning to the underlying VPD.\r
+*\r
+*****/\r
+\r
+\r
+/****s* Access Layer/ib_send_wr_t\r
+* NAME\r
+*      ib_send_wr_t\r
+*\r
+* DESCRIPTION\r
+*      Information used to submit a work request to the send queue of a queue\r
+*      pair.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_send_wr\r
+{\r
+       TO_LONG_PTR(struct _ib_send_wr* ,       p_next) ;\r
+       uint64_t                                        wr_id;\r
+       ib_wr_type_t                            wr_type;\r
+       ib_send_opt_t                           send_opt;\r
+       uint32_t                                        num_ds;\r
+       TO_LONG_PTR(ib_local_ds_t* ,            ds_array) ;\r
+       ib_net32_t                                      immediate_data;\r
+\r
+       union _send_dgrm\r
+       {\r
+               struct _send_ud\r
+               {\r
+                       ib_net32_t              remote_qp;\r
+                       ib_net32_t              remote_qkey;\r
+TO_LONG_PTR(                   struct _ib_av* ,        h_av) ; \r
+                       uint16_t                pkey_index;\r
+                       TO_LONG_PTR(void* ,     rsvd) ;\r
+\r
+               }       ud;\r
+\r
+               struct _send_raw_ether\r
+               {\r
+                       ib_net16_t              dest_lid;\r
+                       uint8_t                 path_bits;\r
+                       uint8_t                 sl;\r
+                       uint8_t                 max_static_rate;\r
+                       ib_net16_t              ether_type;\r
+\r
+               }       raw_ether;\r
+\r
+               struct _send_raw_ipv6\r
+               {\r
+                       ib_net16_t              dest_lid;\r
+                       uint8_t                 path_bits;\r
+                       uint8_t                 sl;\r
+                       uint8_t                 max_static_rate;\r
+\r
+               }       raw_ipv6;\r
+\r
+       }       dgrm;\r
+\r
+       struct _send_remote_ops\r
+       {\r
+               uint64_t                        vaddr;\r
+               net32_t                         rkey;\r
+\r
+               ib_net64_t                      atomic1;\r
+               ib_net64_t                      atomic2;\r
+\r
+       }       remote_ops;\r
+\r
+}      ib_send_wr_t;\r
+/*\r
+* FIELDS\r
+*      p_next\r
+*              A pointer used to chain work requests together.  This permits multiple\r
+*              work requests to be posted to a queue pair through a single function\r
+*              call.  This value is set to NULL to mark the end of the chain.\r
+*\r
+*      wr_id\r
+*              A 64-bit work request identifier that is returned to the consumer\r
+*              as part of the work completion.\r
+*\r
+*      wr_type\r
+*              The type of work request being submitted to the send queue.\r
+*\r
+*      send_opt\r
+*              Optional send control parameters.\r
+*\r
+*      num_ds\r
+*              Number of local data segments specified by this work request.\r
+*\r
+*      ds_array\r
+*              A reference to an array of local data segments used by the send\r
+*              operation.\r
+*\r
+*      immediate_data\r
+*              32-bit field sent as part of a message send or RDMA write operation.\r
+*              This field is only valid if the send_opt flag IB_SEND_OPT_IMMEDIATE\r
+*              has been set.\r
+*\r
+*      dgrm.ud.remote_qp\r
+*              Identifies the destination queue pair of an unreliable datagram send\r
+*              operation.\r
+*\r
+*      dgrm.ud.remote_qkey\r
+*              The qkey for the destination queue pair.\r
+*\r
+*      dgrm.ud.h_av\r
+*              An address vector that specifies the path information used to route\r
+*              the outbound datagram to the destination queue pair.\r
+*\r
+*      dgrm.ud.pkey_index\r
+*              The pkey index for this send work request.  This is valid only\r
+*              for IB_QPT_QP1 and IB_QPT_QP1_ALIAS QP types.  The work request\r
+*              is posted to using this pkey index build the GMP's BTH instead\r
+*              of the QP's pkey.\r
+*\r
+*      dgrm.ud.rsvd\r
+*              Reserved for use by the Access Layer.\r
+*\r
+*      dgrm.raw_ether.dest_lid\r
+*              The destination LID that will receive this raw ether send.\r
+*\r
+*      dgrm.raw_ether.path_bits\r
+*              path bits...\r
+*\r
+*      dgrm.raw_ether.sl\r
+*              service level...\r
+*\r
+*      dgrm.raw_ether.max_static_rate\r
+*              static rate...\r
+*\r
+*      dgrm.raw_ether.ether_type\r
+*              ether type...\r
+*\r
+*      dgrm.raw_ipv6.dest_lid\r
+*              The destination LID that will receive this raw ether send.\r
+*\r
+*      dgrm.raw_ipv6.path_bits\r
+*              path bits...\r
+*\r
+*      dgrm.raw_ipv6.sl\r
+*              service level...\r
+*\r
+*      dgrm.raw_ipv6.max_static_rate\r
+*              static rate...\r
+*\r
+*      remote_ops.vaddr\r
+*              The registered virtual memory address of the remote memory to access\r
+*              with an RDMA or atomic operation.\r
+*\r
+*      remote_ops.rkey\r
+*              The rkey associated with the specified remote vaddr. This data must\r
+*              be presented exactly as obtained from the remote node. No swapping\r
+*              of data must be performed.\r
+*\r
+*      atomic1\r
+*              The first operand for an atomic operation.\r
+*\r
+*      atomic2\r
+*              The second operand for an atomic operation.\r
+*\r
+* NOTES\r
+*      The format of data sent over the fabric is user-defined and is considered\r
+*      opaque to the access layer.  The sole exception to this are MADs posted\r
+*      to a MAD QP service.  MADs are expected to match the format defined by\r
+*      the Infiniband specification and must be in network-byte order when posted\r
+*      to the MAD QP service.\r
+*\r
+* SEE ALSO\r
+*      ib_wr_type_t, ib_local_ds_t, ib_send_opt_t\r
+*****/\r
+\r
+\r
+/****s* Access Layer/ib_recv_wr_t\r
+* NAME\r
+*      ib_recv_wr_t\r
+*\r
+* DESCRIPTION\r
+*      Information used to submit a work request to the receive queue of a queue\r
+*      pair.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_recv_wr\r
+{\r
+       TO_LONG_PTR(struct _ib_recv_wr* ,       p_next) ;\r
+       uint64_t                                        wr_id;\r
+       uint32_t                                        num_ds;\r
+       TO_LONG_PTR(ib_local_ds_t* ,            ds_array) ;\r
+\r
+}      ib_recv_wr_t;\r
+/*\r
+* FIELDS\r
+*      p_next\r
+*              A pointer used to chain work requests together.  This permits multiple\r
+*              work requests to be posted to a queue pair through a single function\r
+*              call.  This value is set to NULL to mark the end of the chain.\r
+*\r
+*      wr_id\r
+*              A 64-bit work request identifier that is returned to the consumer\r
+*              as part of the work completion.\r
+*\r
+*      num_ds\r
+*              Number of local data segments specified by this work request.\r
+*\r
+*      ds_array\r
+*              A reference to an array of local data segments used by the send\r
+*              operation.\r
+*\r
+* SEE ALSO\r
+*      ib_local_ds_t\r
+*****/\r
+\r
+\r
+/****s* Access Layer/ib_bind_wr_t\r
+* NAME\r
+*      ib_bind_wr_t\r
+*\r
+* DESCRIPTION\r
+*      Information used to submit a memory window bind work request to the send\r
+*      queue of a queue pair.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_bind_wr\r
+{\r
+       uint64_t                                wr_id;\r
+       ib_send_opt_t                   send_opt;\r
+\r
+TO_LONG_PTR(   struct _ib_mr* ,                        h_mr) ; \r
+       ib_access_t                             access_ctrl;\r
+       net32_t                                 current_rkey;\r
+\r
+       ib_local_ds_t                   local_ds;\r
+\r
+}      ib_bind_wr_t;\r
+/*\r
+* FIELDS\r
+*      wr_id\r
+*              A 64-bit work request identifier that is returned to the consumer\r
+*              as part of the work completion.\r
+*\r
+*      send_opt\r
+*              Optional send control parameters.\r
+*\r
+*      h_mr\r
+*              Handle to the memory region to which this window is being bound.\r
+*\r
+*      access_ctrl\r
+*              Access rights for this memory window.\r
+*\r
+*      current_rkey\r
+*              The current rkey assigned to this window for remote access.\r
+*\r
+*      local_ds\r
+*              A reference to a local data segment used by the bind operation.\r
+*\r
+* SEE ALSO\r
+*      ib_send_opt_t, ib_access_t, ib_local_ds_t\r
+*****/\r
+\r
+\r
+/****d* Access Layer/ib_wc_status_t\r
+* NAME\r
+*      ib_wc_status_t\r
+*\r
+* DESCRIPTION\r
+*      Indicates the status of a completed work request.  These VALUES are\r
+*      returned to the user when retrieving completions.  Note that success is\r
+*      identified as IB_WCS_SUCCESS, which is always zero.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef enum _ib_wc_status_t\r
+{\r
+       IB_WCS_SUCCESS,\r
+       IB_WCS_LOCAL_LEN_ERR,\r
+       IB_WCS_LOCAL_OP_ERR,\r
+       IB_WCS_LOCAL_PROTECTION_ERR,\r
+       IB_WCS_WR_FLUSHED_ERR,\r
+       IB_WCS_MEM_WINDOW_BIND_ERR,\r
+       IB_WCS_REM_ACCESS_ERR,\r
+       IB_WCS_REM_OP_ERR,\r
+       IB_WCS_RNR_RETRY_ERR,\r
+       IB_WCS_TIMEOUT_RETRY_ERR,\r
+       IB_WCS_REM_INVALID_REQ_ERR,\r
+       IB_WCS_UNMATCHED_RESPONSE,                      /* InfiniBand Access Layer */\r
+       IB_WCS_CANCELED,                                        /* InfiniBand Access Layer */\r
+       IB_WCS_REM_ABORT_ERR,\r
+       IB_WCS_UNKNOWN                                          /* Must be last. */\r
+\r
+}      ib_wc_status_t;\r
+\r
+/*\r
+* VALUES\r
+*      IB_WCS_SUCCESS\r
+*              Work request completed successfully.\r
+*\r
+*      IB_WCS_MAD\r
+*              The completed work request was associated with a managmenet datagram\r
+*              that requires post processing.  The MAD will be returned to the user\r
+*              through a callback once all post processing has completed.\r
+*\r
+*      IB_WCS_LOCAL_LEN_ERR\r
+*              Generated for a work request posted to the send queue when the\r
+*              total of the data segment lengths exceeds the message length of the\r
+*              channel.  Generated for a work request posted to the receive queue when\r
+*              the total of the data segment lengths is too small for a\r
+*              valid incoming message.\r
+*\r
+*      IB_WCS_LOCAL_OP_ERR\r
+*              An internal QP consistency error was generated while processing this\r
+*              work request.  This may indicate that the QP was in an incorrect state\r
+*              for the requested operation.\r
+*\r
+*      IB_WCS_LOCAL_PROTECTION_ERR\r
+*              The data segments of the locally posted work request did not refer to\r
+*              a valid memory region.  The memory may not have been properly\r
+*              registered for the requested operation.\r
+*\r
+*      IB_WCS_WR_FLUSHED_ERR\r
+*              The work request was flushed from the QP before being completed.\r
+*\r
+*      IB_WCS_MEM_WINDOW_BIND_ERR\r
+*              A memory window bind operation failed due to insufficient access\r
+*              rights.\r
+*\r
+*      IB_WCS_REM_ACCESS_ERR,\r
+*              A protection error was detected at the remote node for a RDMA or atomic\r
+*              operation.\r
+*\r
+*      IB_WCS_REM_OP_ERR,\r
+*              The operation could not be successfully completed at the remote node.\r
+*              This may indicate that the remote QP was in an invalid state or\r
+*              contained an invalid work request.\r
+*\r
+*      IB_WCS_RNR_RETRY_ERR,\r
+*              The RNR retry count was exceeded while trying to send this message.\r
+*\r
+*      IB_WCS_TIMEOUT_RETRY_ERR\r
+*              The local transport timeout counter expired while trying to send this\r
+*              message.\r
+*\r
+*      IB_WCS_REM_INVALID_REQ_ERR,\r
+*              The remote node detected an invalid message on the channel.  This error\r
+*              is usually a result of one of the following:\r
+*                      - The operation was not supported on receive queue.\r
+*                      - There was insufficient buffers to receive a new RDMA request.\r
+*                      - There was insufficient buffers to receive a new atomic operation.\r
+*                      - An RDMA request was larger than 2^31 bytes.\r
+*\r
+*      IB_WCS_UNMATCHED_RESPONSE\r
+*              A response MAD was received for which there was no matching send.  The\r
+*              send operation may have been canceled by the user or may have timed\r
+*              out.\r
+*\r
+*      IB_WCS_CANCELED\r
+*              The completed work request was canceled by the user.\r
+*\r
+*      IB_WCS_REM_ABORT_ERR,\r
+*              The operation was aborted (e.g., For UD QPs associated with an SRQ, \r
+*              the responder aborted the operation).\r
+*\r
+\r
+*****/\r
+\r
+\r
+\r
+/****f* IBA Base: Types/ib_get_wc_status_str\r
+* NAME\r
+*      ib_get_wc_status_str\r
+*\r
+* DESCRIPTION\r
+*      Returns a string for the specified work completion status.\r
+*\r
+* SYNOPSIS\r
+*/\r
+AL_EXPORT const char* AL_API\r
+ib_get_wc_status_str(\r
+       IN                              ib_wc_status_t                          wc_status );\r
+/*\r
+* PARAMETERS\r
+*      wc_status\r
+*              [in] work completion status value\r
+*\r
+* RETURN VALUES\r
+*      Pointer to the work completion status description string.\r
+*\r
+* NOTES\r
+*\r
+* SEE ALSO\r
+*********/\r
+\r
+\r
+/****d* Access Layer/ib_wc_type_t\r
+* NAME\r
+*      ib_wc_type_t\r
+*\r
+* DESCRIPTION\r
+*      Indicates the type of work completion.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef enum _ib_wc_type_t\r
+{\r
+       IB_WC_SEND,\r
+       IB_WC_RDMA_WRITE,\r
+       IB_WC_RECV,\r
+       IB_WC_RDMA_READ,\r
+       IB_WC_MW_BIND,\r
+       IB_WC_FETCH_ADD,\r
+       IB_WC_COMPARE_SWAP,\r
+       IB_WC_RECV_RDMA_WRITE,\r
+       IB_WC_UNKNOWN\r
+\r
+}      ib_wc_type_t;\r
+/*****/\r
+\r
+\r
+/****f* IBA Base: Types/ib_get_wc_type_str\r
+* NAME\r
+*      ib_get_wc_type_str\r
+*\r
+* DESCRIPTION\r
+*      Returns a string for the specified work completion type.\r
+*\r
+* SYNOPSIS\r
+*/\r
+AL_EXPORT const char* AL_API\r
+ib_get_wc_type_str(\r
+       IN                              ib_wc_type_t                            wc_type );\r
+/*\r
+* PARAMETERS\r
+*      wc_type\r
+*              [in] work completion type value\r
+*\r
+* RETURN VALUES\r
+*      Pointer to the work completion type description string.\r
+*\r
+* NOTES\r
+*\r
+* SEE ALSO\r
+*********/\r
+\r
+\r
+/****d* Access Layer/ib_recv_opt_t\r
+* NAME\r
+*      ib_recv_opt_t\r
+*\r
+* DESCRIPTION\r
+*      Indicates optional fields valid in a receive work completion.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef uint32_t                                       ib_recv_opt_t;\r
+#define        IB_RECV_OPT_IMMEDIATE           0x00000001\r
+#define IB_RECV_OPT_FORWARD                    0x00000002\r
+#define IB_RECV_OPT_GRH_VALID          0x00000004\r
+#define IB_RECV_OPT_VEND_MASK          0xFFFF0000\r
+/*\r
+* VALUES\r
+*      IB_RECV_OPT_IMMEDIATE\r
+*              Indicates that immediate data is valid for this work completion.\r
+*\r
+*      IB_RECV_OPT_FORWARD\r
+*              Indicates that the received trap should be forwarded to the SM.\r
+*\r
+*      IB_RECV_OPT_GRH_VALID\r
+*              Indicates presence of the global route header. When set, the first\r
+*              40 bytes received are the GRH.\r
+*\r
+*      IB_RECV_OPT_VEND_MASK\r
+*              This mask indicates bits reserved in the receive options that may be\r
+*              used by the verbs provider to indicate vendor specific options.  Bits\r
+*              set in this area of the receive options are ignored by the Access Layer,\r
+*              but may have specific meaning to the underlying VPD.\r
+*****/\r
+\r
+\r
+/****s* Access Layer/ib_wc_t\r
+* NAME\r
+*      ib_wc_t\r
+*\r
+* DESCRIPTION\r
+*      Work completion information.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_wc\r
+{\r
+       TO_LONG_PTR(struct _ib_wc* ,    p_next) ;\r
+       uint64_t                                wr_id;\r
+       ib_wc_type_t                    wc_type;\r
+\r
+       uint32_t                                length;\r
+       ib_wc_status_t                  status;\r
+       uint64_t                                vendor_specific;\r
+\r
+       union _wc_recv\r
+       {\r
+               struct _wc_conn\r
+               {\r
+                       ib_recv_opt_t   recv_opt;\r
+                       ib_net32_t              immediate_data;\r
+\r
+               }       conn;\r
+\r
+               struct _wc_ud\r
+               {\r
+                       ib_recv_opt_t   recv_opt;\r
+                       ib_net32_t              immediate_data;\r
+                       ib_net32_t              remote_qp;\r
+                       uint16_t                pkey_index;\r
+                       ib_net16_t              remote_lid;\r
+                       uint8_t                 remote_sl;\r
+                       uint8_t                 path_bits;\r
+\r
+               }       ud;\r
+\r
+               struct _wc_raw_ipv6\r
+               {\r
+                       ib_net16_t              remote_lid;\r
+                       uint8_t                 remote_sl;\r
+                       uint8_t                 path_bits;\r
+\r
+               }       raw_ipv6;\r
+\r
+               struct _wc_raw_ether\r
+               {\r
+                       ib_net16_t              remote_lid;\r
+                       uint8_t                 remote_sl;\r
+                       uint8_t                 path_bits;\r
+                       ib_net16_t              ether_type;\r
+\r
+               }       raw_ether;\r
+\r
+       }       recv;\r
+\r
+}      ib_wc_t;\r
+/*\r
+* FIELDS\r
+*      p_next\r
+*              A pointer used to chain work completions.  This permits multiple\r
+*              work completions to be retrieved from a completion queue through a\r
+*              single function call.  This value is set to NULL to mark the end of\r
+*              the chain.\r
+*\r
+*      wr_id\r
+*              The 64-bit work request identifier that was specified when posting the\r
+*              work request.\r
+*\r
+*      wc_type\r
+*              Indicates the type of work completion.\r
+*\r
+*      length\r
+*              The total length of the data sent or received with the work request.\r
+*\r
+*      status\r
+*              The result of the work request.\r
+*\r
+*      vendor_specific\r
+*              HCA vendor specific information returned as part of the completion.\r
+*\r
+*      recv.conn.recv_opt\r
+*              Indicates optional fields valid as part of a work request that\r
+*              completed on a connected (reliable or unreliable) queue pair.\r
+*\r
+*      recv.conn.immediate_data\r
+*              32-bit field received as part of an inbound message on a connected\r
+*              queue pair.  This field is only valid if the recv_opt flag\r
+*              IB_RECV_OPT_IMMEDIATE has been set.\r
+*\r
+*      recv.ud.recv_opt\r
+*              Indicates optional fields valid as part of a work request that\r
+*              completed on an unreliable datagram queue pair.\r
+*\r
+*      recv.ud.immediate_data\r
+*              32-bit field received as part of an inbound message on a unreliable\r
+*              datagram queue pair.  This field is only valid if the recv_opt flag\r
+*              IB_RECV_OPT_IMMEDIATE has been set.\r
+*\r
+*      recv.ud.remote_qp\r
+*              Identifies the source queue pair of a received datagram.\r
+*\r
+*      recv.ud.pkey_index\r
+*              The pkey index of the source queue pair. This is valid only for\r
+*              IB_QPT_QP1 and IB_QPT_QP1_ALIAS QP types.\r
+*\r
+*      recv.ud.remote_lid\r
+*              The source LID of the received datagram.\r
+*\r
+*      recv.ud.remote_sl\r
+*              The service level used by the source of the received datagram.\r
+*\r
+*      recv.ud.path_bits\r
+*              path bits...\r
+*\r
+*      recv.raw_ipv6.remote_lid\r
+*              The source LID of the received message.\r
+*\r
+*      recv.raw_ipv6.remote_sl\r
+*              The service level used by the source of the received message.\r
+*\r
+*      recv.raw_ipv6.path_bits\r
+*              path bits...\r
+*\r
+*      recv.raw_ether.remote_lid\r
+*              The source LID of the received message.\r
+*\r
+*      recv.raw_ether.remote_sl\r
+*              The service level used by the source of the received message.\r
+*\r
+*      recv.raw_ether.path_bits\r
+*              path bits...\r
+*\r
+*      recv.raw_ether.ether_type\r
+*              ether type...\r
+* NOTES\r
+*      When the work request completes with error, the only values that the\r
+*      consumer can depend on are the wr_id field, and the status of the\r
+*      operation.\r
+*\r
+*      If the consumer is using the same CQ for completions from more than\r
+*      one type of QP (i.e Reliable Connected, Datagram etc), then the consumer\r
+*      must have additional information to decide what fields of the union are\r
+*      valid.\r
+* SEE ALSO\r
+*      ib_wc_type_t, ib_qp_type_t, ib_wc_status_t, ib_recv_opt_t\r
+*****/\r
+\r
+\r
+/****s* Access Layer/ib_mr_create_t\r
+* NAME\r
+*      ib_mr_create_t\r
+*\r
+* DESCRIPTION\r
+*      Information required to create a registered memory region.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_mr_create\r
+{\r
+       TO_LONG_PTR(void* ,                     vaddr) ;\r
+       uint64_t                                length;\r
+       ib_access_t                             access_ctrl;\r
+\r
+}      ib_mr_create_t;\r
+/*\r
+* FIELDS\r
+*      vaddr\r
+*              Starting virtual address of the region being registered.\r
+*\r
+*      length\r
+*              Length of the buffer to register.\r
+*\r
+*      access_ctrl\r
+*              Access rights of the registered region.\r
+*\r
+* SEE ALSO\r
+*      ib_access_t\r
+*****/\r
+\r
+\r
+/****s* Access Layer/ib_phys_range_t\r
+* NAME\r
+*      ib_phys_range_t\r
+*\r
+* DESCRIPTION\r
+*      Information describing a physical memory range.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_phys_range\r
+{\r
+       uint64_t                                base_addr;\r
+       uint64_t                                size;\r
+\r
+}      ib_phys_range_t;\r
+/*\r
+* FIELDS\r
+*      base_addr\r
+*              Physical address of the base of the memory range.\r
+*\r
+*      size\r
+*              size, in bytes, of the memory range.\r
+*\r
+* NOTES\r
+*      The base address must be start and end on an HCA-supported page boundary.\r
+*\r
+* SEE ALSO\r
+*      ib_phys_create_t\r
+*********/\r
+\r
+\r
+/****s* Access Layer/ib_phys_create_t\r
+* NAME\r
+*      ib_phys_create_t\r
+*\r
+* DESCRIPTION\r
+*      Information required to create a physical memory region.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_phys_create\r
+{\r
+       uint64_t                                        length;\r
+       uint32_t                                        num_ranges;\r
+       TO_LONG_PTR(ib_phys_range_t* ,  range_array) ;\r
+       uint32_t                                        buf_offset;\r
+       uint32_t                                        hca_page_size;\r
+       ib_access_t                                     access_ctrl;\r
+\r
+}      ib_phys_create_t;\r
+/*\r
+* FIELDS\r
+*      length\r
+*              The length of the memory region in bytes.\r
+*\r
+*      num_ranges\r
+*              Number of ib_phys_range structures listed in the specified range array.\r
+*\r
+*      range_array\r
+*              An array of ib_phys_range structures to be registered as a single memory\r
+*              region.\r
+*\r
+*      buf_offset\r
+*              The offset into the first physical memory range of the specified memory\r
+*              region on which to start the virtual address.\r
+*\r
+*      hca_page_size\r
+*              The HCA page size to use to register the memory.\r
+*\r
+*      access_ctrl\r
+*              Access rights of the registered region.\r
+*\r
+* SEE ALSO\r
+*      ib_access_t\r
+*****/\r
+\r
+\r
+/****s* Access Layer/ib_mr_attr_t\r
+* NAME\r
+*      ib_mr_attr_t\r
+*\r
+* DESCRIPTION\r
+*      Attributes of a registered memory region.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_mr_attr\r
+{\r
+TO_LONG_PTR(   struct ib_pd* ,                 h_pd) ; \r
+       uint64_t                                local_lb;\r
+       uint64_t                                local_ub;\r
+       uint64_t                                remote_lb;\r
+       uint64_t                                remote_ub;\r
+       ib_access_t                             access_ctrl;\r
+       net32_t                                 lkey;\r
+       net32_t                                 rkey;\r
+\r
+}      ib_mr_attr_t;\r
+/*\r
+* DESCRIPTION\r
+*      h_pd\r
+*              Handle to the protection domain for this memory region.\r
+*\r
+*      local_lb\r
+*              The virtual address of the lower bound of protection for local\r
+*              memory access.  This is always a 64-bit quantity to support registering\r
+*              more than 4GB of memory on 32-bit systems with PAE.\r
+*\r
+*      local_ub\r
+*              The virtual address of the upper bound of protection for local\r
+*              memory access.  This is always a 64-bit quantity to support registering\r
+*              more than 4GB of memory on 32-bit systems with PAE.\r
+*\r
+*      remote_lb\r
+*              The virtual address of the lower bound of protection for remote\r
+*              memory access.  This is always a 64-bit quantity to support registering\r
+*              more than 4GB of memory on 32-bit systems with PAE.\r
+*\r
+*      remote_ub\r
+*              The virtual address of the upper bound of protection for remote\r
+*              memory access.  This is always a 64-bit quantity to support registering\r
+*              more than 4GB of memory on 32-bit systems with PAE.\r
+*\r
+*      access_ctrl\r
+*              Access rights for the specified memory region.\r
+*\r
+*      lkey\r
+*              The lkey associated with this memory region.\r
+*\r
+*      rkey\r
+*              The rkey associated with this memory region.\r
+*\r
+* NOTES\r
+*      The remote_lb, remote_ub, and rkey are only valid if remote memory access\r
+*      is enabled for this memory region.\r
+*\r
+* SEE ALSO\r
+*      ib_access_t\r
+*****/\r
+\r
+\r
+/****d* Access Layer/ib_ca_mod_t\r
+* NAME\r
+*      ib_ca_mod_t -- Modify port attributes and error counters\r
+*\r
+* DESCRIPTION\r
+*      Specifies modifications to the port attributes of a channel adapter.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef uint32_t                                                       ib_ca_mod_t;\r
+#define IB_CA_MOD_IS_CM_SUPPORTED                      0x00000001\r
+#define IB_CA_MOD_IS_SNMP_SUPPORTED                    0x00000002\r
+#define        IB_CA_MOD_IS_DEV_MGMT_SUPPORTED         0x00000004\r
+#define        IB_CA_MOD_IS_VEND_SUPPORTED                     0x00000008\r
+#define        IB_CA_MOD_IS_SM                                         0x00000010\r
+#define IB_CA_MOD_IS_SM_DISABLED                       0x00000020\r
+#define IB_CA_MOD_QKEY_CTR                                     0x00000040\r
+#define IB_CA_MOD_PKEY_CTR                                     0x00000080\r
+#define IB_CA_MOD_IS_NOTICE_SUPPORTED          0x00000100\r
+#define IB_CA_MOD_IS_TRAP_SUPPORTED                    0x00000200\r
+#define IB_CA_MOD_IS_APM_SUPPORTED                     0x00000400\r
+#define IB_CA_MOD_IS_SLMAP_SUPPORTED           0x00000800\r
+#define IB_CA_MOD_IS_PKEY_NVRAM_SUPPORTED      0x00001000\r
+#define IB_CA_MOD_IS_MKEY_NVRAM_SUPPORTED      0x00002000\r
+#define IB_CA_MOD_IS_SYSGUID_SUPPORTED         0x00004000\r
+#define IB_CA_MOD_IS_DR_NOTICE_SUPPORTED       0x00008000\r
+#define IB_CA_MOD_IS_BOOT_MGMT_SUPPORTED       0x00010000\r
+#define IB_CA_MOD_IS_CAPM_NOTICE_SUPPORTED     0x00020000\r
+#define IB_CA_MOD_IS_REINIT_SUPORTED           0x00040000\r
+#define IB_CA_MOD_IS_LEDINFO_SUPPORTED         0x00080000\r
+#define IB_CA_MOD_SHUTDOWN_PORT                                0x00100000\r
+#define IB_CA_MOD_INIT_TYPE_VALUE                      0x00200000\r
+#define IB_CA_MOD_SYSTEM_IMAGE_GUID                    0x00400000\r
+/*\r
+* VALUES\r
+*      IB_CA_MOD_IS_CM_SUPPORTED\r
+*              Indicates if there is a communication manager accessible through\r
+*              the port.\r
+*\r
+*      IB_CA_MOD_IS_SNMP_SUPPORTED\r
+*              Indicates if there is an SNMP agent accessible through the port.\r
+*\r
+*      IB_CA_MOD_IS_DEV_MGMT_SUPPORTED\r
+*              Indicates if there is a device management agent accessible through\r
+*              the port.\r
+*\r
+*      IB_CA_MOD_IS_VEND_SUPPORTED\r
+*              Indicates if there is a vendor supported agent accessible through\r
+*              the port.\r
+*\r
+*      IB_CA_MOD_IS_SM\r
+*              Indicates if there is a subnet manager accessible through\r
+*              the port.\r
+*\r
+*      IB_CA_MOD_IS_SM_DISABLED\r
+*              Indicates if the port has been disabled for configuration by the subnet\r
+*              manager.\r
+*\r
+*      IB_CA_MOD_QKEY_CTR\r
+*              Used to reset the qkey violation counter associated with the port.\r
+*\r
+*      IB_CA_MOD_PKEY_CTR\r
+*              Used to reset the pkey violation counter associated with the port.\r
+*\r
+*      IB_CA_MOD_IS_NOTICE_SUPPORTED\r
+*              Indicates that this CA supports ability to generate Notices for\r
+*              Port State changes. (only applicable to switches)\r
+*\r
+*      IB_CA_MOD_IS_TRAP_SUPPORTED\r
+*              Indicates that this management port supports ability to generate\r
+*              trap messages. (only applicable to switches)\r
+*\r
+*      IB_CA_MOD_IS_APM_SUPPORTED\r
+*              Indicates that this port is capable of performing Automatic Migration.\r
+*\r
+*      IB_CA_MOD_IS_SLMAP_SUPPORTED\r
+*              Indicates this port supports SLMAP capability.\r
+*\r
+*      IB_CA_MOD_IS_PKEY_NVRAM_SUPPORTED\r
+*              Indicates that PKEY is supported in NVRAM\r
+*\r
+*      IB_CA_MOD_IS_MKEY_NVRAM_SUPPORTED\r
+*              Indicates that MKEY is supported in NVRAM\r
+*\r
+*      IB_CA_MOD_IS_SYSGUID_SUPPORTED\r
+*              Indicates System Image GUID support.\r
+*\r
+*      IB_CA_MOD_IS_DR_NOTICE_SUPPORTED\r
+*              Indicate support for generating Direct Routed Notices\r
+*\r
+*      IB_CA_MOD_IS_BOOT_MGMT_SUPPORTED\r
+*              Indicates support for Boot Management\r
+*\r
+*      IB_CA_MOD_IS_CAPM_NOTICE_SUPPORTED\r
+*              Indicates capability to generate notices for changes to CAPMASK\r
+*\r
+*      IB_CA_MOD_IS_REINIT_SUPORTED\r
+*              Indicates type of node init supported. Refer to Chapter 14 for\r
+*              Initialization actions.\r
+*\r
+*      IB_CA_MOD_IS_LEDINFO_SUPPORTED\r
+*              Indicates support for LED info.\r
+*\r
+*      IB_CA_MOD_SHUTDOWN_PORT\r
+*              Used to modify the port active indicator.\r
+*\r
+*      IB_CA_MOD_INIT_TYPE_VALUE\r
+*              Used to modify the init_type value for the port.\r
+*\r
+*      IB_CA_MOD_SYSTEM_IMAGE_GUID\r
+*              Used to modify the system image GUID for the port.\r
+*****/\r
+\r
+\r
+/****d* Access Layer/ib_mr_mod_t\r
+* NAME\r
+*      ib_mr_mod_t\r
+*\r
+* DESCRIPTION\r
+*      Mask used to specify which attributes of a registered memory region are\r
+*      being modified.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef uint32_t                                               ib_mr_mod_t;\r
+#define IB_MR_MOD_ADDR                                 0x00000001\r
+#define IB_MR_MOD_PD                                   0x00000002\r
+#define IB_MR_MOD_ACCESS                               0x00000004\r
+/*\r
+* PARAMETERS\r
+*      IB_MEM_MOD_ADDR\r
+*              The address of the memory region is being modified.\r
+*\r
+*      IB_MEM_MOD_PD\r
+*              The protection domain associated with the memory region is being\r
+*              modified.\r
+*\r
+*      IB_MEM_MOD_ACCESS\r
+*              The access rights the memory region are being modified.\r
+*****/\r
+\r
+/****d* IBA Base: Constants/IB_SMINFO_STATE_INIT\r
+* NAME\r
+*      IB_SMINFO_STATE_INIT\r
+*\r
+* DESCRIPTION\r
+*      Encoded state value used in the SMInfo attribute.\r
+*\r
+* SOURCE\r
+*/\r
+#define IB_SMINFO_STATE_INIT                                   4\r
+/**********/\r
+\r
+/****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_HANDOVER\r
+* NAME\r
+*      IB_SMINFO_ATTR_MOD_HANDOVER\r
+*\r
+* DESCRIPTION\r
+*      Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.\r
+*\r
+* SOURCE\r
+*/\r
+#define IB_SMINFO_ATTR_MOD_HANDOVER            (CL_NTOH32(0x000001))\r
+/**********/\r
+\r
+/****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_ACKNOWLEDGE\r
+* NAME\r
+*      IB_SMINFO_ATTR_MOD_ACKNOWLEDGE\r
+*\r
+* DESCRIPTION\r
+*      Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.\r
+*\r
+* SOURCE\r
+*/\r
+#define IB_SMINFO_ATTR_MOD_ACKNOWLEDGE         (CL_NTOH32(0x000002))\r
+/**********/\r
+\r
+/****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_DISABLE\r
+* NAME\r
+*      IB_SMINFO_ATTR_MOD_DISABLE\r
+*\r
+* DESCRIPTION\r
+*      Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.\r
+*\r
+* SOURCE\r
+*/\r
+#define IB_SMINFO_ATTR_MOD_DISABLE                     (CL_NTOH32(0x000003))\r
+/**********/\r
+\r
+/****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_STANDBY\r
+* NAME\r
+*      IB_SMINFO_ATTR_MOD_STANDBY\r
+*\r
+* DESCRIPTION\r
+*      Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.\r
+*\r
+* SOURCE\r
+*/\r
+#define IB_SMINFO_ATTR_MOD_STANDBY                     (CL_NTOH32(0x000004))\r
+/**********/\r
+\r
+/****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_DISCOVER\r
+* NAME\r
+*      IB_SMINFO_ATTR_MOD_DISCOVER\r
+*\r
+* DESCRIPTION\r
+*      Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.\r
+*\r
+* SOURCE\r
+*/\r
+#define IB_SMINFO_ATTR_MOD_DISCOVER                    (CL_NTOH32(0x000005))\r
+/**********/\r
+\r
+/****s* Access Layer/ib_ci_op_t\r
+* NAME\r
+*      ib_ci_op_t\r
+*\r
+* DESCRIPTION\r
+*      A structure used for vendor specific CA interface communication.\r
+*\r
+* SYNOPSIS\r
+*/\r
+typedef struct _ib_ci_op\r
+{\r
+       IN                              uint32_t                                        command;\r
+       IN                              uint32_t                                        buf_size;\r
+       IN                              uint32_t                                        buf_info;\r
+       IN      OUT                     int32_t                                         status;\r
+    IN OUT                     TO_LONG_PTR(void*,p_buf) OPTIONAL; // Do not put it last in the structure, because of memory alignment\r
+               OUT                     uint32_t                                        num_bytes_ret;\r
+       \r
+\r
+}      ib_ci_op_t;\r
+/*\r
+* FIELDS\r
+*      command\r
+*              A command code that is understood by the verbs provider.\r
+*\r
+*      status\r
+*              The completion status from the verbs provider.  This field should be\r
+*              initialize to indicate an error to allow detection and cleanup in\r
+*              case a communication error occurs between user-mode and kernel-mode.\r
+*\r
+*      buf_size\r
+*              The size of the buffer in bytes.\r
+*\r
+*      buf_info\r
+*              Additional buffer information\r
+*\r
+*      p_buf\r
+*              A reference to a buffer containing vendor specific data.  The verbs\r
+*              provider must not access pointers in the p_buf between user-mode and\r
+*              kernel-mode.  Any pointers embedded in the p_buf are invalidated by\r
+*              the user-mode/kernel-mode transition.\r
+*\r
+*      num_bytes_ret\r
+*              The size in bytes of the vendor specific data returned in the buffer.\r
+*              This field is set by the verbs provider.  The verbs provider should\r
+*              verify that the buffer size is sufficient to hold the data being\r
+*              returned.\r
+*\r
+* NOTES\r
+*      This structure is provided to allow the exchange of vendor specific\r
+*      data between the originator and the verbs provider.  Users of this\r
+*      structure are expected to know the format of data in the p_buf based\r
+*      on the structure command field or the usage context.\r
+*****/\r
+\r
+\r
+#endif // __IB_TYPES_EXTENDED_H__\r