10Sstevel@tonic-gate /* 20Sstevel@tonic-gate * CDDL HEADER START 30Sstevel@tonic-gate * 40Sstevel@tonic-gate * The contents of this file are subject to the terms of the 54703Shiremath * Common Development and Distribution License (the "License"). 64703Shiremath * You may not use this file except in compliance with the License. 70Sstevel@tonic-gate * 80Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 90Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 100Sstevel@tonic-gate * See the License for the specific language governing permissions 110Sstevel@tonic-gate * and limitations under the License. 120Sstevel@tonic-gate * 130Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 140Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 150Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 160Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 170Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 180Sstevel@tonic-gate * 190Sstevel@tonic-gate * CDDL HEADER END 200Sstevel@tonic-gate */ 210Sstevel@tonic-gate /* 22*9913SShantkumar.Hiremath@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 230Sstevel@tonic-gate * Use is subject to license terms. 240Sstevel@tonic-gate */ 250Sstevel@tonic-gate 260Sstevel@tonic-gate #ifndef _SYS_IB_IBTL_IBTI_CM_H 270Sstevel@tonic-gate #define _SYS_IB_IBTL_IBTI_CM_H 280Sstevel@tonic-gate 290Sstevel@tonic-gate /* 300Sstevel@tonic-gate * ibti_cm.h 310Sstevel@tonic-gate * 320Sstevel@tonic-gate * This file contains the data structure definitions for the IBTI 330Sstevel@tonic-gate * communication manager (CM). It is only included in ibti.h 340Sstevel@tonic-gate */ 350Sstevel@tonic-gate 360Sstevel@tonic-gate #ifdef __cplusplus 370Sstevel@tonic-gate extern "C" { 380Sstevel@tonic-gate #endif 390Sstevel@tonic-gate 400Sstevel@tonic-gate /* 410Sstevel@tonic-gate * Defines. 420Sstevel@tonic-gate */ 430Sstevel@tonic-gate #define IBT_MAX_PRIV_DATA_SZ 224 440Sstevel@tonic-gate #define IBT_DREP_PRIV_DATA_SZ 224 450Sstevel@tonic-gate #define IBT_RTU_PRIV_DATA_SZ 224 460Sstevel@tonic-gate #define IBT_MRA_PRIV_DATA_SZ 222 470Sstevel@tonic-gate #define IBT_DREQ_PRIV_DATA_SZ 220 480Sstevel@tonic-gate #define IBT_REP_PRIV_DATA_SZ 196 490Sstevel@tonic-gate #define IBT_LAP_PRIV_DATA_SZ 168 500Sstevel@tonic-gate #define IBT_APR_PRIV_DATA_SZ 148 510Sstevel@tonic-gate #define IBT_REJ_PRIV_DATA_SZ 148 520Sstevel@tonic-gate #define IBT_REQ_PRIV_DATA_SZ 92 530Sstevel@tonic-gate #define IBT_SIDR_REQ_PRIV_DATA_SZ 216 540Sstevel@tonic-gate #define IBT_SIDR_REP_PRIV_DATA_SZ 136 554703Shiremath #define IBT_IP_HDR_PRIV_DATA_SZ 36 560Sstevel@tonic-gate 570Sstevel@tonic-gate #define IBT_CM_ADDL_REJ_LEN 72 /* Additional Rej Info len */ 580Sstevel@tonic-gate /* This is the max consumer addl */ 590Sstevel@tonic-gate /* reject info len */ 600Sstevel@tonic-gate #define IBT_CM_SIDR_CP_LEN 72 /* SIDR REP Class Port Info len */ 610Sstevel@tonic-gate #define IBT_CM_APR_ADDL_LEN 72 /* Additional Info len in APR message */ 620Sstevel@tonic-gate 630Sstevel@tonic-gate typedef uint8_t ibt_priv_data_len_t; 640Sstevel@tonic-gate 650Sstevel@tonic-gate /* 660Sstevel@tonic-gate * CM channel handler reject reasons. 670Sstevel@tonic-gate * 680Sstevel@tonic-gate * Refer to InfiniBand Architecture Release Volume 1 Rev 1.0a: 694703Shiremath * Section 12.6.7.2 Rejection Reason, and RDMA IP CM Service Annex 704703Shiremath * 714703Shiremath * Note: 724703Shiremath * When a REJ happens for an RDMA-aware ULP, a consumer reject code 734703Shiremath * indicating an IP CM Service reject or a RDMA-Aware ULP reject can 744703Shiremath * be returned. In the IBTA spec both use the consumer reject code, but 754703Shiremath * are distinguished by the REJ layer byte (table 3 of the annex 11). 764703Shiremath * The IBTF CM can thus tell what type of reject has been returned. When 774703Shiremath * a RDMA ULP issues a consumer REJ to an RDMA REQ then the CM will 784703Shiremath * return an IBT_CM_CONSUMER ibt_cm_reason_t. The ARI data is returned 794703Shiremath * in an ibt_ari_con_t struct accessed by the 'ari_consumer' member of 804703Shiremath * the ibt_arej_info_t. However the consumer reject data begins at 814703Shiremath * 'ari_consumer.rej_ari[1]', and is of length 824703Shiremath * 'ari_consumer.rej_ari_len - 1' (the first byte is the REJ layer byte), 834703Shiremath * where as for a non RDMA-aware ULP consumer REJ, the ARI data begins 844703Shiremath * at 'ari_consumer.rej_ari[0]' and is of length 'ari_consumer.rej_ari_len' 854703Shiremath * 864703Shiremath * If an RDMA-aware ULP REQ is rejected by the IP CM Service layer, the 874703Shiremath * CM will return the new IBT_CM_RDMA_IP ibt_cm_reason_t, and the 884703Shiremath * private data is returned in an ibt_ari_ip_t struct accessed via the 894703Shiremath * 'ari_ip' member of the ibt_arej_info_t struct. 904703Shiremath * 914703Shiremath * If an RDMA IP CM REQ is sent to a non RDMA-aware ULP consumer, then 924703Shiremath * the REQ is Rejected with an IBT_CM_INVALID_SID ibt_cm_reason_t. 930Sstevel@tonic-gate */ 940Sstevel@tonic-gate typedef enum ibt_cm_reason_e { 950Sstevel@tonic-gate IBT_CM_SUCCESS = 0, /* Success */ 960Sstevel@tonic-gate IBT_CM_NO_CHAN = 1, /* Remote unable to allocate a CHAN */ 970Sstevel@tonic-gate IBT_CM_NO_EEC = 2, /* Remote unable to allocate an EEC */ 980Sstevel@tonic-gate IBT_CM_NO_RESC = 3, /* Remote unable to allocate resource */ 990Sstevel@tonic-gate IBT_CM_TIMEOUT = 4, /* CM protocol timed out waiting for */ 1000Sstevel@tonic-gate /* a msg */ 1010Sstevel@tonic-gate IBT_CM_NOT_SUPPORTED = 5, /* Request not supported */ 1020Sstevel@tonic-gate IBT_CM_INVALID_CID = 6, /* Local CID or Remote CID invalid */ 1030Sstevel@tonic-gate IBT_CM_INVALID_COMM_INS = 7, /* Local CID, Remote CID, Channel */ 1040Sstevel@tonic-gate /* does not refer to a valid */ 1050Sstevel@tonic-gate /* communication Instance. */ 1060Sstevel@tonic-gate IBT_CM_INVALID_SID = 8, /* Service not supported or not */ 1070Sstevel@tonic-gate /* recognized */ 1080Sstevel@tonic-gate IBT_CM_INVALID_SRV_TYPE = 9, /* Invalid transport service type */ 1090Sstevel@tonic-gate IBT_CM_CONN_STALE = 10, /* Stale connection */ 1100Sstevel@tonic-gate IBT_CM_INVALID_RDC = 11, /* RDC does not exist */ 1110Sstevel@tonic-gate IBT_CM_PRIM_GID = 12, /* Primary remote port gid rejected. */ 1120Sstevel@tonic-gate IBT_CM_PRIM_LID = 13, /* Primary remote port lid rejected. */ 1130Sstevel@tonic-gate IBT_CM_INVALID_PRIM_SL = 14, /* Primary Requested SL not supported */ 1140Sstevel@tonic-gate IBT_CM_INVALID_PRIM_TC = 15, /* Primary Requested traffic class */ 1150Sstevel@tonic-gate /* not supported */ 1160Sstevel@tonic-gate IBT_CM_INVALID_PRIM_HOP = 16, /* Primary Requested hop limit not */ 1170Sstevel@tonic-gate /* accepted */ 1180Sstevel@tonic-gate IBT_CM_INVALID_PRIM_RATE = 17, /* Primary Packet rate not accepted */ 1190Sstevel@tonic-gate IBT_CM_ALT_GID = 18, /* Alternate remote port gid rejected */ 1200Sstevel@tonic-gate IBT_CM_ALT_LID = 19, /* Alternate remote port lid rejected */ 1210Sstevel@tonic-gate IBT_CM_INVALID_ALT_SL = 20, /* Alternate Requested SL not */ 1220Sstevel@tonic-gate /* supported */ 1230Sstevel@tonic-gate IBT_CM_INVALID_ALT_TC = 21, /* Alternate Requested traffic class */ 1240Sstevel@tonic-gate /* not supported */ 1250Sstevel@tonic-gate IBT_CM_INVALID_ALT_HOP = 22, /* Alternate Requested hop limit */ 1260Sstevel@tonic-gate /* accepted */ 1270Sstevel@tonic-gate IBT_CM_INVALID_ALT_RATE = 23, /* Alternate Packet rate not accepted */ 1280Sstevel@tonic-gate IBT_CM_REDIRECT_CM = 24, /* Port & CM redirected */ 1290Sstevel@tonic-gate IBT_CM_PORT_REDIRECT = 25, /* Port redirected */ 1300Sstevel@tonic-gate IBT_CM_INVALID_MTU = 26, /* Path MTU not supported */ 1310Sstevel@tonic-gate IBT_CM_INSUFF_RESOURCE = 27, /* Insufficient responder resources */ 1320Sstevel@tonic-gate IBT_CM_CONSUMER = 28, /* Consumer rejected connection */ 1330Sstevel@tonic-gate IBT_CM_RNR_RETRY_CNT_REJ = 29, /* RNR NAK retry count rejected */ 1340Sstevel@tonic-gate IBT_CM_DUP_COM_ID = 30, /* Local CID in REQ is duplicated */ 1350Sstevel@tonic-gate IBT_CM_CLASS_NO_SUPPORT = 31, /* Class version not supported */ 1360Sstevel@tonic-gate IBT_CM_INVALID_PRIM_FLOW = 32, /* Invalid primary flow label */ 1370Sstevel@tonic-gate IBT_CM_INVALID_ALT_FLOW = 33, /* Invalid alternate flow label */ 1380Sstevel@tonic-gate IBT_CM_DUP_CONN_REQ = 1000, /* Duplicate connection request */ 1390Sstevel@tonic-gate IBT_CM_ABORT = 1001, /* Connection aborted */ 1400Sstevel@tonic-gate IBT_CM_CI_FAILURE = 1002, /* A call to CI failed, could be */ 1410Sstevel@tonic-gate /* query/modify channel */ 1424703Shiremath IBT_CM_CHAN_INVALID_STATE = 1003, /* Passive's QP is not in Init */ 1430Sstevel@tonic-gate /* state */ 1444703Shiremath IBT_CM_RDMA_IP = 1004 /* RDMA IP CM reject */ 1450Sstevel@tonic-gate } ibt_cm_reason_t; 1460Sstevel@tonic-gate 1470Sstevel@tonic-gate /* 1480Sstevel@tonic-gate * CM flags. 1490Sstevel@tonic-gate */ 1500Sstevel@tonic-gate typedef uint8_t ibt_cm_flags_t; 1510Sstevel@tonic-gate 1520Sstevel@tonic-gate #define IBT_CM_NO_FLAGS 0x0 1530Sstevel@tonic-gate #define IBT_CM_FLOW_CONTROL 0x1 1540Sstevel@tonic-gate #define IBT_CM_SRQ_EXISTS 0x2 1550Sstevel@tonic-gate 1560Sstevel@tonic-gate 1570Sstevel@tonic-gate /* 1580Sstevel@tonic-gate * The CM Handler function return values. 1590Sstevel@tonic-gate */ 1600Sstevel@tonic-gate typedef enum ibt_cm_status_e { 1610Sstevel@tonic-gate IBT_CM_ACCEPT = 0, 1620Sstevel@tonic-gate IBT_CM_REJECT = 1, 1630Sstevel@tonic-gate IBT_CM_REDIRECT_PORT = 2, /* Redirect port */ 1640Sstevel@tonic-gate IBT_CM_REDIRECT = 3, /* Redirect port and CM */ 1650Sstevel@tonic-gate IBT_CM_NO_CHANNEL = 4, /* Unable to allocate a channel */ 1660Sstevel@tonic-gate IBT_CM_NO_RESOURCE = 5, /* Unable to allocate a resource */ 1670Sstevel@tonic-gate IBT_CM_DEFAULT = 6, /* Do the default action */ 1680Sstevel@tonic-gate IBT_CM_DEFER = 7 /* Can't complete processing now */ 1690Sstevel@tonic-gate } ibt_cm_status_t; /* will call ibt_cm_proceed() */ 1700Sstevel@tonic-gate /* later */ 1710Sstevel@tonic-gate 1720Sstevel@tonic-gate /* 1730Sstevel@tonic-gate * SIDR_REP status type 1740Sstevel@tonic-gate */ 1750Sstevel@tonic-gate typedef enum ibt_sidr_status_e { 1760Sstevel@tonic-gate IBT_CM_SREP_CHAN_VALID = 0, 1770Sstevel@tonic-gate IBT_CM_SREP_SID_INVALID = 1, /* Service ID not supported */ 1780Sstevel@tonic-gate IBT_CM_SREP_REJ = 2, /* Service provider reject */ 1790Sstevel@tonic-gate IBT_CM_SREP_NO_CHAN = 3, /* No channel available */ 1800Sstevel@tonic-gate IBT_CM_SREP_REDIRECT = 4, /* Redirect request */ 1810Sstevel@tonic-gate IBT_CM_SREP_CL_INVALID = 5, /* Class Version is invalid */ 1820Sstevel@tonic-gate IBT_CM_SREP_TIMEOUT = 1000 /* No SIDR_REP received */ 1830Sstevel@tonic-gate } ibt_sidr_status_t; 1840Sstevel@tonic-gate 1850Sstevel@tonic-gate /* 1860Sstevel@tonic-gate * Alternate path status type 1870Sstevel@tonic-gate * The implementation defined status codes begin from 20. The status codes 1880Sstevel@tonic-gate * below 20 are based on apr_status in the APR mad. 1890Sstevel@tonic-gate */ 1900Sstevel@tonic-gate typedef enum ibt_ap_status_e { 1910Sstevel@tonic-gate IBT_CM_AP_LOADED = 0, /* AP loaded successfully */ 1920Sstevel@tonic-gate IBT_CM_AP_INVALID_COMMID = 1, /* Invalid communication instance */ 1930Sstevel@tonic-gate IBT_CM_AP_NOT_SUPPORTED = 2, /* Alternate paths not supported */ 1940Sstevel@tonic-gate IBT_CM_AP_REJECT = 3, /* Failover port rejected */ 1950Sstevel@tonic-gate IBT_CM_AP_REDIRECT = 4, /* Reject - redirect */ 1960Sstevel@tonic-gate IBT_CM_AP_MATCH_PRIM = 5, /* AP matches primary path */ 1970Sstevel@tonic-gate IBT_CM_AP_QPNEECN_INVALID = 6, /* AP QPN/EECN does not match */ 1980Sstevel@tonic-gate IBT_CM_AP_RLID_REJECTED = 7, /* AP remote port lid rejected */ 1990Sstevel@tonic-gate IBT_CM_AP_RGID_REJECTED = 8, /* AP remote port gid rejected */ 2000Sstevel@tonic-gate IBT_CM_AP_FLOW_REJECTED = 9, /* AP flow label rejected */ 2010Sstevel@tonic-gate IBT_CM_AP_TCLASS_REJECTED = 10, /* AP traffic class rejected */ 2020Sstevel@tonic-gate IBT_CM_AP_HOP_REJECTED = 11, /* AP hop limit rejected */ 2030Sstevel@tonic-gate IBT_CM_AP_RATE_REJECTED = 12, /* AP static packet rate rejected */ 2040Sstevel@tonic-gate IBT_CM_AP_SL_REJECTED = 13, /* AP service level rejected */ 2050Sstevel@tonic-gate IBT_CM_AP_TIMEOUT = 1000, /* LAP timed out */ 2060Sstevel@tonic-gate IBT_CM_AP_ABORT = 1001 /* ibt_set_alternate_path returned */ 2070Sstevel@tonic-gate /* earlier because of connection */ 2080Sstevel@tonic-gate /* getting closed */ 2090Sstevel@tonic-gate } ibt_ap_status_t; 2100Sstevel@tonic-gate 2110Sstevel@tonic-gate /* 2120Sstevel@tonic-gate * Communication event types. 2130Sstevel@tonic-gate */ 2140Sstevel@tonic-gate typedef enum ibt_cm_event_type_e { 2150Sstevel@tonic-gate IBT_CM_EVENT_REQ_RCV = 0x1, 2160Sstevel@tonic-gate IBT_CM_EVENT_REP_RCV, 2170Sstevel@tonic-gate IBT_CM_EVENT_MRA_RCV, 2180Sstevel@tonic-gate IBT_CM_EVENT_LAP_RCV, 2190Sstevel@tonic-gate IBT_CM_EVENT_APR_RCV, 2200Sstevel@tonic-gate IBT_CM_EVENT_CONN_EST, /* RTU has been sent/recvd and it is */ 2210Sstevel@tonic-gate /* OK to use the connection */ 2220Sstevel@tonic-gate IBT_CM_EVENT_CONN_CLOSED, /* Connection has been closed and it */ 2230Sstevel@tonic-gate /* is OK to free resources associated */ 2240Sstevel@tonic-gate /* with the connection. */ 2250Sstevel@tonic-gate IBT_CM_EVENT_FAILURE /* The CM Failure see cf_code in the */ 2260Sstevel@tonic-gate /* ibt_cm_conn_failed_t struct for */ 2270Sstevel@tonic-gate /* details of the failure */ 2280Sstevel@tonic-gate } ibt_cm_event_type_t; 2290Sstevel@tonic-gate 2300Sstevel@tonic-gate /* 2310Sstevel@tonic-gate * CM and Port redirect information. 2320Sstevel@tonic-gate */ 2330Sstevel@tonic-gate typedef struct ibt_redirect_info_s { 2340Sstevel@tonic-gate ib_gid_t rdi_gid; 2350Sstevel@tonic-gate uint8_t rdi_tclass; 2360Sstevel@tonic-gate uint8_t rdi_sl:4; 2370Sstevel@tonic-gate uint_t rdi_flow:20; 2380Sstevel@tonic-gate ib_lid_t rdi_dlid; 2390Sstevel@tonic-gate ib_qpn_t rdi_qpn; 2400Sstevel@tonic-gate ib_qkey_t rdi_qkey; 2410Sstevel@tonic-gate ib_pkey_t rdi_pkey; 2420Sstevel@tonic-gate } ibt_redirect_info_t; 2430Sstevel@tonic-gate 2440Sstevel@tonic-gate /* 2450Sstevel@tonic-gate * Values for rep_failover_status. 2460Sstevel@tonic-gate */ 2470Sstevel@tonic-gate #define IBT_CM_FAILOVER_ACCEPT 0x00 /* Failover port accepted */ 2480Sstevel@tonic-gate #define IBT_CM_FAILOVER_REJ_NOTSUPP 0x01 /* Failover not supported */ 2490Sstevel@tonic-gate #define IBT_CM_FAILOVER_REJ 0x02 /* Failover port rejected */ 2500Sstevel@tonic-gate 2510Sstevel@tonic-gate /* 2520Sstevel@tonic-gate * CM REP_RCV event structure. 2530Sstevel@tonic-gate */ 2540Sstevel@tonic-gate typedef struct ibt_cm_rep_rcv_s { 2550Sstevel@tonic-gate uint8_t rep_rdma_ra_in; /* Arbitrated responder */ 2560Sstevel@tonic-gate /* resources (rdma_ra_in) */ 2570Sstevel@tonic-gate uint8_t rep_rdma_ra_out; /* Arbitrated initiator */ 2580Sstevel@tonic-gate /* depth (rdma_ra_out) */ 2590Sstevel@tonic-gate clock_t rep_service_time; /* time in clock ticks */ 2600Sstevel@tonic-gate /* Time to complete */ 2610Sstevel@tonic-gate /* processing of REP event */ 2620Sstevel@tonic-gate uint8_t rep_failover_status; /* Failover Port status */ 2630Sstevel@tonic-gate ibt_cm_flags_t rep_flags; /* EE flow control, SRQ etc */ 2640Sstevel@tonic-gate } ibt_cm_rep_rcv_t; 2650Sstevel@tonic-gate 2660Sstevel@tonic-gate 2670Sstevel@tonic-gate /* 2680Sstevel@tonic-gate * Values for mra_msg_type. 2690Sstevel@tonic-gate */ 2700Sstevel@tonic-gate #define IBT_CM_MRA_TYPE_REQ 0x00 /* mra_msg values */ 2710Sstevel@tonic-gate #define IBT_CM_MRA_TYPE_REP 0x01 2720Sstevel@tonic-gate #define IBT_CM_MRA_TYPE_LAP 0x02 2730Sstevel@tonic-gate 2740Sstevel@tonic-gate /* 2750Sstevel@tonic-gate * CM MRA_RCV event structure. 2760Sstevel@tonic-gate */ 2770Sstevel@tonic-gate typedef struct ibt_cm_mra_rcv_s { 2780Sstevel@tonic-gate uint8_t mra_msg_type; /* The message being MRA'd */ 2790Sstevel@tonic-gate clock_t mra_service_time; /* timeout in microseconds */ 2800Sstevel@tonic-gate } ibt_cm_mra_rcv_t; 2810Sstevel@tonic-gate 2820Sstevel@tonic-gate /* 2830Sstevel@tonic-gate * CM LAP_RCV event structure. 2840Sstevel@tonic-gate */ 2850Sstevel@tonic-gate typedef struct ibt_cm_lap_rcv_s { 2860Sstevel@tonic-gate ibt_adds_vect_t lap_alternate_path; 2870Sstevel@tonic-gate clock_t lap_timeout; /* timeout in microseconds */ 2880Sstevel@tonic-gate /* This is the time that the */ 2890Sstevel@tonic-gate /* Service handler has to */ 2900Sstevel@tonic-gate /* return to the CM */ 2910Sstevel@tonic-gate } ibt_cm_lap_rcv_t; 2920Sstevel@tonic-gate 2934703Shiremath #define IBT_CM_IP_MAJ_VER 0 2944703Shiremath #define IBT_CM_IP_MIN_VER 0 2954703Shiremath #define IBT_CM_IP_IPV_V4 0x4 2964703Shiremath #define IBT_CM_IP_IPV_V6 0x6 2974703Shiremath 2980Sstevel@tonic-gate /* 2990Sstevel@tonic-gate * Consumer defined Additional reject information. 3000Sstevel@tonic-gate */ 3010Sstevel@tonic-gate typedef struct ibt_ari_con_s { 3020Sstevel@tonic-gate uint8_t rej_ari_len; /* Length */ 3030Sstevel@tonic-gate uint8_t rej_ari[IBT_CM_ADDL_REJ_LEN]; /* Buffer */ 3040Sstevel@tonic-gate } ibt_ari_con_t; 3050Sstevel@tonic-gate 3060Sstevel@tonic-gate /* 3074703Shiremath * Consumer defined Additional reject information. 3084703Shiremath * For RDMA IP CM Service. 3094703Shiremath */ 3104703Shiremath typedef uint8_t ibt_ari_ip_reason_t; 3114703Shiremath #define IBT_ARI_IP_UNSPECIFIED 0x0 3124703Shiremath #define IBT_ARI_IP_MAJOR_VERSION 0x1 3134703Shiremath #define IBT_ARI_IP_MINOR_VERSION 0x2 3144703Shiremath #define IBT_ARI_IP_IPV 0x3 3154703Shiremath #define IBT_ARI_IP_SRC_ADDR 0x4 3164703Shiremath #define IBT_ARI_IP_DST_ADDR 0x5 3174703Shiremath #define IBT_ARI_IP_UNKNOWN_ADDR 0x6 3184703Shiremath 3194703Shiremath typedef struct ibt_ari_ip_s { 3204703Shiremath ibt_ip_addr_t ip_suggested_addr; /* IP_UNKNOWN_ADDR */ 3214703Shiremath boolean_t ip_suggested; /* suggested valid */ 3224703Shiremath ibt_ari_ip_reason_t ip_reason; 3234703Shiremath uint8_t ip_suggested_version:4; /* IP_MAJOR_VERSION */ 3244703Shiremath /* IP_MINOR_VERSION */ 3254703Shiremath /* IP_IPV, */ 3264703Shiremath /* IP_SRC_ADDR, */ 3274703Shiremath /* IP_DST_ADDR */ 3284703Shiremath } ibt_ari_ip_t; 3294703Shiremath 3304703Shiremath /* 3310Sstevel@tonic-gate * Additional reject information. 3320Sstevel@tonic-gate */ 3330Sstevel@tonic-gate typedef union ibt_arej_info_u { 3340Sstevel@tonic-gate ibt_ari_con_t ari_consumer; /* IBT_CM_CONSUMER */ 3350Sstevel@tonic-gate ib_gid_t ari_gid; /* IBT_CM_PRIM_GID, */ 3360Sstevel@tonic-gate /* IBT_CM_ALT_GID, */ 3370Sstevel@tonic-gate /* IBT_CM_PORT_REDIRECT */ 3380Sstevel@tonic-gate ib_lid_t ari_lid; /* IBT_CM_PRIM_LID, */ 3390Sstevel@tonic-gate /* IBT_CM_ALT_LID */ 3400Sstevel@tonic-gate uint8_t ari_sl:4; /* IBT_CM_INVALID_PRIM_SL, */ 3410Sstevel@tonic-gate /* IBT_CM_INVALID_ALT_SL */ 3420Sstevel@tonic-gate uint8_t ari_tclass; /* IBT_CM_INVALID_PRIM_TC, */ 3430Sstevel@tonic-gate /* IBT_CM_INVALID_ALT_TC */ 3440Sstevel@tonic-gate uint8_t ari_hop; /* IBT_CM_INVALID_PRIM_HOP, */ 3450Sstevel@tonic-gate /* IBT_CM_INVALID_ALT_HOP */ 3460Sstevel@tonic-gate uint_t ari_flow:20; /* IBT_CM_INVALID_PRIM_FLOW, */ 3470Sstevel@tonic-gate /* IBT_CM_INVALID_ALT_FLOW */ 3480Sstevel@tonic-gate ibt_srate_t ari_rate; /* IBT_CM_INVALID_PRIM_RATE, */ 3490Sstevel@tonic-gate /* IBT_CM_INVALID_ALT_RATE */ 3500Sstevel@tonic-gate ib_mtu_t ari_mtu; /* IBT_CM_INVALID_MTU */ 3510Sstevel@tonic-gate ibt_redirect_info_t ari_redirect; /* IBT_CM_REDIRECT_CM */ 3524703Shiremath ibt_ari_ip_t ari_ip; /* IBT_CM_RDMA_IP */ 3530Sstevel@tonic-gate } ibt_arej_info_t; 3540Sstevel@tonic-gate 3550Sstevel@tonic-gate /* 3560Sstevel@tonic-gate * CM APR_RCV event structure. 3570Sstevel@tonic-gate */ 3580Sstevel@tonic-gate typedef struct ibt_cm_apr_rcv_s { 3590Sstevel@tonic-gate ibt_ap_status_t apr_status; 3600Sstevel@tonic-gate boolean_t apr_arej_info_valid; 3610Sstevel@tonic-gate ibt_arej_info_t apr_arej_info; 3620Sstevel@tonic-gate } ibt_cm_apr_rcv_t; 3630Sstevel@tonic-gate 3640Sstevel@tonic-gate 3650Sstevel@tonic-gate /* 3660Sstevel@tonic-gate * Connection Failed Message type (values of cf_msg). 3670Sstevel@tonic-gate * Identifies the CM message that either timed out or is being rejected. 3680Sstevel@tonic-gate */ 3690Sstevel@tonic-gate #define IBT_CM_FAILURE_REQ 0x00 3700Sstevel@tonic-gate #define IBT_CM_FAILURE_REP 0x01 3710Sstevel@tonic-gate #define IBT_CM_FAILURE_UNKNOWN 0x02 3720Sstevel@tonic-gate #define IBT_CM_FAILURE_LAP 0x03 3730Sstevel@tonic-gate 3740Sstevel@tonic-gate /* 3750Sstevel@tonic-gate * CM Failure code (values of cf_code). 3760Sstevel@tonic-gate * Identifies the reason for failure. 3770Sstevel@tonic-gate */ 3780Sstevel@tonic-gate #define IBT_CM_FAILURE_REJ_SENT 0x00 3790Sstevel@tonic-gate #define IBT_CM_FAILURE_REJ_RCV 0x01 3800Sstevel@tonic-gate #define IBT_CM_FAILURE_TIMEOUT 0x02 3810Sstevel@tonic-gate #define IBT_CM_FAILURE_DUP 0x03 3820Sstevel@tonic-gate #define IBT_CM_FAILURE_STALE 0x04 3830Sstevel@tonic-gate 3840Sstevel@tonic-gate /* 3850Sstevel@tonic-gate * IBT_CM_EVENT_FAILURE event struct. 3860Sstevel@tonic-gate */ 3870Sstevel@tonic-gate typedef struct ibt_cm_conn_failed_s { 3880Sstevel@tonic-gate uint8_t cf_code; /* Failure Code */ 3890Sstevel@tonic-gate uint8_t cf_msg; /* The message that timed out or is */ 3900Sstevel@tonic-gate /* being rejected */ 3910Sstevel@tonic-gate boolean_t cf_arej_info_valid; /* Is cf_additional valid? */ 3920Sstevel@tonic-gate ibt_cm_reason_t cf_reason; /* Reject reason */ 3930Sstevel@tonic-gate ibt_arej_info_t cf_additional; /* Additional Reject info */ 3940Sstevel@tonic-gate } ibt_cm_conn_failed_t; 3950Sstevel@tonic-gate 3960Sstevel@tonic-gate 3970Sstevel@tonic-gate /* 3980Sstevel@tonic-gate * CM REQ_RCV event structure. 3990Sstevel@tonic-gate * 4000Sstevel@tonic-gate * The req_cm_opaque is an IBTF CM opaque (to the client) value, that should 4010Sstevel@tonic-gate * be returned to the IBTF CM if the client/server CM handler wishes to call 4020Sstevel@tonic-gate * ibt_cm_delay(). 4030Sstevel@tonic-gate * 4040Sstevel@tonic-gate * prim_addr->av_dgid Is the GID of the requester. 4050Sstevel@tonic-gate * prim_addr->av_sgid Is the local GID to which the 4060Sstevel@tonic-gate * requester is attempting to establish 4070Sstevel@tonic-gate * a connection to. 4080Sstevel@tonic-gate * hca_guid Is the HCA GUID that contains the 4090Sstevel@tonic-gate * prim_addr->av_sgid 4100Sstevel@tonic-gate * prim_hca_port Is the port on the hca_guid that 4110Sstevel@tonic-gate * prim_addr->av_sgid is on. 4120Sstevel@tonic-gate */ 4130Sstevel@tonic-gate typedef struct ibt_cm_req_rcv_s { 4140Sstevel@tonic-gate ib_svc_id_t req_service_id; 4150Sstevel@tonic-gate ibt_tran_srv_t req_transport; 4160Sstevel@tonic-gate ib_guid_t req_hca_guid; 4170Sstevel@tonic-gate uint8_t req_prim_hca_port; 4180Sstevel@tonic-gate uint8_t req_alt_hca_port; 4190Sstevel@tonic-gate ibt_adds_vect_t req_prim_addr; 4200Sstevel@tonic-gate ibt_adds_vect_t req_alt_addr; 4210Sstevel@tonic-gate uint8_t req_rdma_ra_in; /* Offered responder */ 4220Sstevel@tonic-gate /* resources. */ 4230Sstevel@tonic-gate uint8_t req_rdma_ra_out; /* Offered initiator depth */ 4240Sstevel@tonic-gate clock_t req_timeout; /* timeout in microseconds */ 4250Sstevel@tonic-gate /* This is the time that the */ 4260Sstevel@tonic-gate /* Service handler has to */ 4270Sstevel@tonic-gate /* return to the CM */ 4280Sstevel@tonic-gate ib_qpn_t req_remote_qpn; 4290Sstevel@tonic-gate ib_qkey_t req_remote_qkey; 4300Sstevel@tonic-gate ib_pkey_t req_pkey; 4310Sstevel@tonic-gate ibt_cm_flags_t req_flags; /* EE flow control etc */ 4320Sstevel@tonic-gate uint8_t req_retry_cnt:3; 4330Sstevel@tonic-gate ibt_rnr_retry_cnt_t req_rnr_retry_cnt; 4340Sstevel@tonic-gate ib_eecn_t req_opaque1; 4350Sstevel@tonic-gate ib_eecn_t req_opaque2; 4360Sstevel@tonic-gate } ibt_cm_req_rcv_t; 4370Sstevel@tonic-gate 438*9913SShantkumar.Hiremath@Sun.COM typedef struct ibt_ofuvcm_req_data_s { 439*9913SShantkumar.Hiremath@Sun.COM uint32_t req_rq_psn:24; 440*9913SShantkumar.Hiremath@Sun.COM uint32_t reserved:8; 441*9913SShantkumar.Hiremath@Sun.COM ib_mtu_t req_path_mtu; 442*9913SShantkumar.Hiremath@Sun.COM ibt_rnr_nak_time_t req_rnr_nak_time; 443*9913SShantkumar.Hiremath@Sun.COM } ibt_ofuvcm_req_data_t; 444*9913SShantkumar.Hiremath@Sun.COM 4450Sstevel@tonic-gate /* 4460Sstevel@tonic-gate * The IBT_CM_EVENT_CONN_CLOSED event is generated by the CM when a connection 4470Sstevel@tonic-gate * has been closed. The reason the connection was closed is given in the 4480Sstevel@tonic-gate * "closed" member of the cm_event as one of: 4490Sstevel@tonic-gate * 4500Sstevel@tonic-gate * A client can only call ibt_free_channel() to free channel resources on 4510Sstevel@tonic-gate * receipt of the IBT_CM_EVENT_CONN_CLOSED event. 4520Sstevel@tonic-gate */ 4530Sstevel@tonic-gate #define IBT_CM_CLOSED_DREP_RCVD 0x01 4540Sstevel@tonic-gate #define IBT_CM_CLOSED_DREQ_RCVD 0x02 4550Sstevel@tonic-gate #define IBT_CM_CLOSED_REJ_RCVD 0x03 4560Sstevel@tonic-gate #define IBT_CM_CLOSED_DREQ_TIMEOUT 0x04 4570Sstevel@tonic-gate #define IBT_CM_CLOSED_DUP 0x05 4580Sstevel@tonic-gate #define IBT_CM_CLOSED_ABORT 0x06 4590Sstevel@tonic-gate #define IBT_CM_CLOSED_STALE 0x07 4600Sstevel@tonic-gate #define IBT_CM_CLOSED_ALREADY 0x08 4610Sstevel@tonic-gate 4620Sstevel@tonic-gate /* 4630Sstevel@tonic-gate * Operation type in ibt_cm_event_type_t. 4640Sstevel@tonic-gate * 4650Sstevel@tonic-gate * Note: 4660Sstevel@tonic-gate * The IBT_CM_EVENT_CONN_EST event has no associated "cm_event" 4670Sstevel@tonic-gate * field in the ibt_cm_event_t structure. 4680Sstevel@tonic-gate * 4690Sstevel@tonic-gate * The cm_session_id is a CM opaque (to the client) value, that 4700Sstevel@tonic-gate * should be returned to the CM if the client/server CM handler wishes 4710Sstevel@tonic-gate * to call ibt_cm_delay() or ibt_cm_proceed(). 4720Sstevel@tonic-gate * 4730Sstevel@tonic-gate */ 4740Sstevel@tonic-gate typedef struct ibt_cm_event_s { 4750Sstevel@tonic-gate ibt_cm_event_type_t cm_type; /* Describes the event */ 4760Sstevel@tonic-gate void *cm_session_id; /* Used by the CM */ 4770Sstevel@tonic-gate ibt_channel_hdl_t cm_channel; /* Event channel. Not valid */ 4780Sstevel@tonic-gate /* for ibt_cm_req_rcv_t */ 4790Sstevel@tonic-gate ibt_eec_hdl_t cm_opaque; 4800Sstevel@tonic-gate ibt_priv_data_len_t cm_priv_data_len; /* 0 if no private */ 4810Sstevel@tonic-gate void *cm_priv_data; /* data returned */ 4820Sstevel@tonic-gate union { 4830Sstevel@tonic-gate ibt_cm_rep_rcv_t rep; 4840Sstevel@tonic-gate ibt_cm_req_rcv_t req; 4850Sstevel@tonic-gate ibt_cm_lap_rcv_t lap; 4860Sstevel@tonic-gate ibt_cm_apr_rcv_t apr; 4870Sstevel@tonic-gate ibt_cm_mra_rcv_t mra; 4880Sstevel@tonic-gate ibt_cm_conn_failed_t failed; 4890Sstevel@tonic-gate uint8_t closed; 4900Sstevel@tonic-gate } cm_event; /* operation specific */ 4910Sstevel@tonic-gate } ibt_cm_event_t; 4920Sstevel@tonic-gate 4930Sstevel@tonic-gate /* 4940Sstevel@tonic-gate * CM Return structure for an incoming REQ 4950Sstevel@tonic-gate * Server handler that wishes to accept the connection, fills all the 4960Sstevel@tonic-gate * values before returning to CM 4970Sstevel@tonic-gate */ 4980Sstevel@tonic-gate typedef struct ibt_cm_ret_rep_s { 4990Sstevel@tonic-gate ibt_channel_hdl_t cm_channel; /* The channel overwhich the */ 5000Sstevel@tonic-gate /* connection will be */ 5010Sstevel@tonic-gate /* established */ 5020Sstevel@tonic-gate /* can be returned NULL */ 5030Sstevel@tonic-gate /* if no resources available */ 5040Sstevel@tonic-gate uint8_t cm_rdma_ra_out; /* max RDMA-R/Atomic sent */ 5050Sstevel@tonic-gate /* Number of RDMA RD's & */ 5060Sstevel@tonic-gate /* Atomics outstanding */ 5070Sstevel@tonic-gate uint8_t cm_rdma_ra_in; /* Incoming RDMA-R/Atomic */ 5080Sstevel@tonic-gate /* Responder resources for */ 5090Sstevel@tonic-gate /* handling incoming */ 5100Sstevel@tonic-gate /* RDMA RD's & Atomics */ 5110Sstevel@tonic-gate ibt_rnr_retry_cnt_t cm_rnr_retry_cnt; 5120Sstevel@tonic-gate } ibt_cm_ret_rep_t; 5130Sstevel@tonic-gate 5140Sstevel@tonic-gate /* 5150Sstevel@tonic-gate * Define an ibt_cm_proceed() argument union. 5160Sstevel@tonic-gate * 5170Sstevel@tonic-gate * rep is valid when an IBT client cm handler has decided to continue a 5180Sstevel@tonic-gate * REQ_RCV, accepting the connection. 5190Sstevel@tonic-gate * 5200Sstevel@tonic-gate * rej is valid when an IBT client cm handler has decided to continue a 5210Sstevel@tonic-gate * REQ_RCV or REP_RCV, rejecting the message. 5220Sstevel@tonic-gate * 5230Sstevel@tonic-gate * apr is valid when an IBT client cm handler has decided to continue a 5240Sstevel@tonic-gate * LAP_RCV, redirecting the lap request. 5250Sstevel@tonic-gate */ 5260Sstevel@tonic-gate typedef union ibt_cm_proceed_reply_s { 5270Sstevel@tonic-gate ibt_cm_ret_rep_t rep; /* Return for REP */ 5280Sstevel@tonic-gate ibt_arej_info_t rej; /* Return for REJ */ 5290Sstevel@tonic-gate ibt_redirect_info_t apr; /* Return for APR */ 5300Sstevel@tonic-gate } ibt_cm_proceed_reply_t; 5310Sstevel@tonic-gate 5320Sstevel@tonic-gate 5330Sstevel@tonic-gate /* 5340Sstevel@tonic-gate * Define a CM handler return arguments structure. 5350Sstevel@tonic-gate * 5360Sstevel@tonic-gate * cm_ret.rep is returned to the CM when an IBT client cm handler has 5370Sstevel@tonic-gate * decided to accept a connection in response to a CM REQ_RCV event. 5380Sstevel@tonic-gate * 5390Sstevel@tonic-gate * cm_ret.rej is returned to the CM when an IBT client cm handler 5400Sstevel@tonic-gate * has decided to reject the connection in response to a CM REQ_RCV event. 5410Sstevel@tonic-gate * 5420Sstevel@tonic-gate * cm_ret.apr is returned to the CM when an IBT client cm handler 5430Sstevel@tonic-gate * has decided to redirect the lap request in response to a CM LAP RCV event. 5440Sstevel@tonic-gate * 5450Sstevel@tonic-gate * The client/server should update cm_ret_len with number of private data 5460Sstevel@tonic-gate * bytes filled in priv_data arg of the cm handler. 5470Sstevel@tonic-gate */ 5480Sstevel@tonic-gate typedef struct ibt_cm_return_args_s { 5490Sstevel@tonic-gate ibt_priv_data_len_t cm_ret_len; 5500Sstevel@tonic-gate union { 5510Sstevel@tonic-gate ibt_cm_ret_rep_t rep; /* Return for REP */ 5520Sstevel@tonic-gate ibt_arej_info_t rej; /* Return for REJ */ 5530Sstevel@tonic-gate ibt_redirect_info_t apr; /* Return for APR */ 5540Sstevel@tonic-gate } cm_ret; /* reply specific */ 5550Sstevel@tonic-gate } ibt_cm_return_args_t; 5560Sstevel@tonic-gate 5570Sstevel@tonic-gate 5580Sstevel@tonic-gate /* 5590Sstevel@tonic-gate * Communication Manager UD event types. 5600Sstevel@tonic-gate */ 5610Sstevel@tonic-gate typedef enum ibt_cm_ud_event_type_e { 5620Sstevel@tonic-gate IBT_CM_UD_EVENT_SIDR_REQ = 1, 5630Sstevel@tonic-gate IBT_CM_UD_EVENT_SIDR_REP = 2 5640Sstevel@tonic-gate } ibt_cm_ud_event_type_t; 5650Sstevel@tonic-gate 5660Sstevel@tonic-gate /* 5670Sstevel@tonic-gate * CM SIDR_REQ event structure. 5680Sstevel@tonic-gate */ 5690Sstevel@tonic-gate typedef struct ibt_cm_sidr_req_s { 5700Sstevel@tonic-gate ib_guid_t sreq_hca_guid; 5710Sstevel@tonic-gate uint8_t sreq_hca_port; 5720Sstevel@tonic-gate ib_pkey_t sreq_pkey; 5730Sstevel@tonic-gate ib_svc_id_t sreq_service_id; 5740Sstevel@tonic-gate } ibt_cm_sidr_req_t; 5750Sstevel@tonic-gate 5760Sstevel@tonic-gate /* 5770Sstevel@tonic-gate * CM SIDR_REP event structure. 5780Sstevel@tonic-gate */ 5790Sstevel@tonic-gate typedef struct ibt_cm_sidr_rep_s { 5800Sstevel@tonic-gate ibt_sidr_status_t srep_status; 5810Sstevel@tonic-gate ib_svc_id_t srep_service_id; 5820Sstevel@tonic-gate ib_qkey_t srep_remote_qkey; 5830Sstevel@tonic-gate ib_qpn_t srep_remote_qpn; 5840Sstevel@tonic-gate ibt_redirect_info_t srep_redirect; /* Only valid if redirect */ 5850Sstevel@tonic-gate } ibt_cm_sidr_rep_t; 5860Sstevel@tonic-gate 5870Sstevel@tonic-gate /* 5880Sstevel@tonic-gate * Operation type in ibt_cm_ud_event_type_t. 5890Sstevel@tonic-gate * 5900Sstevel@tonic-gate * The cm_session_id is a CM opaque (to the client) value, that 5910Sstevel@tonic-gate * should be returned to the CM if the client/server CM handler 5920Sstevel@tonic-gate * wishes to call ibt_cm_ud_proceed(). 5930Sstevel@tonic-gate */ 5940Sstevel@tonic-gate typedef struct ibt_cm_ud_event_s { 5950Sstevel@tonic-gate ibt_cm_ud_event_type_t cm_type; /* Describes the event record */ 5960Sstevel@tonic-gate void *cm_session_id; /* Used by the CM */ 5970Sstevel@tonic-gate ibt_priv_data_len_t cm_priv_data_len; 5980Sstevel@tonic-gate void *cm_priv_data; 5990Sstevel@tonic-gate union { 6000Sstevel@tonic-gate ibt_cm_sidr_rep_t sidr_rep; 6010Sstevel@tonic-gate ibt_cm_sidr_req_t sidr_req; 6020Sstevel@tonic-gate } cm_event; /* operation specific */ 6030Sstevel@tonic-gate } ibt_cm_ud_event_t; 6040Sstevel@tonic-gate 6050Sstevel@tonic-gate 6060Sstevel@tonic-gate /* 6070Sstevel@tonic-gate * Define a CM UD handler return arguments structure. 6080Sstevel@tonic-gate * 6090Sstevel@tonic-gate * The information here is returned to the CM when an IBT client CM UD 6100Sstevel@tonic-gate * handler has decided to communicate (via UD messages) with the requester 6110Sstevel@tonic-gate * of the SIDR_REQ_RCV event. 6120Sstevel@tonic-gate * 6130Sstevel@tonic-gate * The ud_channel encodes the QPN and Q_Key to be placed in the SIDR_REP. 6140Sstevel@tonic-gate * 6150Sstevel@tonic-gate * CM sets ud_ret_len to 0 before calling the UD CM handler. If the CM UD 6160Sstevel@tonic-gate * handler wishes to send private data back, it needs to update ud_ret_len 6170Sstevel@tonic-gate * with the actual number of bytes to be sent back in the SIDR_REP MAD. It 6180Sstevel@tonic-gate * copies said data to the buffer pointed to by the ret_priv_data argument. 6190Sstevel@tonic-gate * 6200Sstevel@tonic-gate * The ud_redirect structure should only be updated if the UD CM handler is 6210Sstevel@tonic-gate * Redirecting a CM request. 6220Sstevel@tonic-gate */ 6230Sstevel@tonic-gate typedef struct ibt_cm_ud_return_args_s { 6240Sstevel@tonic-gate ibt_priv_data_len_t ud_ret_len; 6250Sstevel@tonic-gate ibt_channel_hdl_t ud_channel; 6260Sstevel@tonic-gate ibt_redirect_info_t ud_redirect; 6270Sstevel@tonic-gate } ibt_cm_ud_return_args_t; 6280Sstevel@tonic-gate 6290Sstevel@tonic-gate 6300Sstevel@tonic-gate /* 6310Sstevel@tonic-gate * IBT Client CM Callback function typedefs. 6320Sstevel@tonic-gate * 6330Sstevel@tonic-gate * ibt_cm_handler_t: 6340Sstevel@tonic-gate * 6350Sstevel@tonic-gate * The CM event handler function. An IBT client callback that handles 6360Sstevel@tonic-gate * CM events. If the handler will exceed the event service timeout 6370Sstevel@tonic-gate * then it should call ibt_cm_delay(), specifying the maximum time it 6380Sstevel@tonic-gate * will take to complete processing the CM event. 6390Sstevel@tonic-gate * 6400Sstevel@tonic-gate * Clients are advised not to issue blocking calls from a cm handler, as this 6410Sstevel@tonic-gate * would block the CM threads, and could delay or block other client 6420Sstevel@tonic-gate * connections. 6430Sstevel@tonic-gate * 6440Sstevel@tonic-gate * Clients are allowed to make resource clean up/free calls in the CM handler 6450Sstevel@tonic-gate * such as ibt_free_cq, ibt_free_rc/ud_channel, etc. on connection failure 6460Sstevel@tonic-gate * or tear down. 6470Sstevel@tonic-gate * 6480Sstevel@tonic-gate * Clients should not call ibt_close_rc_channel in the cm handler for connection 6490Sstevel@tonic-gate * failure or tear down events, as these events already perform the processing 6500Sstevel@tonic-gate * necessary to close the channel. 6510Sstevel@tonic-gate * 6520Sstevel@tonic-gate * Clients can call ibt_close_rc_channel only in the non-blocking mode from 6530Sstevel@tonic-gate * the cm handler for connection abort. 6540Sstevel@tonic-gate */ 6550Sstevel@tonic-gate typedef ibt_cm_status_t (*ibt_cm_handler_t)(void *cm_private, 6560Sstevel@tonic-gate ibt_cm_event_t *event, ibt_cm_return_args_t *ret_args, 6570Sstevel@tonic-gate void *ret_priv_data, ibt_priv_data_len_t ret_len_max); 6580Sstevel@tonic-gate 6590Sstevel@tonic-gate /* 6600Sstevel@tonic-gate * ibt_cm_ud_handler_t - Pointer to the CM UD event handler function. 6610Sstevel@tonic-gate * This function should handle the following CM 6620Sstevel@tonic-gate * events: 6630Sstevel@tonic-gate * IBT_CM_UD_EVENT_SIDR_REQ 6640Sstevel@tonic-gate * IBT_CM_UD_EVENT_SIDR_REP 6650Sstevel@tonic-gate */ 6660Sstevel@tonic-gate typedef ibt_cm_status_t (*ibt_cm_ud_handler_t)(void *ud_cm_private, 6670Sstevel@tonic-gate ibt_cm_ud_event_t *event, ibt_cm_ud_return_args_t *ret_args, 6680Sstevel@tonic-gate void *ret_priv_data, ibt_priv_data_len_t ret_len_max); 6690Sstevel@tonic-gate 6700Sstevel@tonic-gate #ifdef __cplusplus 6710Sstevel@tonic-gate } 6720Sstevel@tonic-gate #endif 6730Sstevel@tonic-gate 6740Sstevel@tonic-gate #endif /* _SYS_IB_IBTL_IBTI_CM_H */ 675