19517SBill.Taylor@Sun.COM /* 29517SBill.Taylor@Sun.COM * CDDL HEADER START 39517SBill.Taylor@Sun.COM * 49517SBill.Taylor@Sun.COM * The contents of this file are subject to the terms of the 59517SBill.Taylor@Sun.COM * Common Development and Distribution License (the "License"). 69517SBill.Taylor@Sun.COM * You may not use this file except in compliance with the License. 79517SBill.Taylor@Sun.COM * 89517SBill.Taylor@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 99517SBill.Taylor@Sun.COM * or http://www.opensolaris.org/os/licensing. 109517SBill.Taylor@Sun.COM * See the License for the specific language governing permissions 119517SBill.Taylor@Sun.COM * and limitations under the License. 129517SBill.Taylor@Sun.COM * 139517SBill.Taylor@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 149517SBill.Taylor@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 159517SBill.Taylor@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 169517SBill.Taylor@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 179517SBill.Taylor@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 189517SBill.Taylor@Sun.COM * 199517SBill.Taylor@Sun.COM * CDDL HEADER END 209517SBill.Taylor@Sun.COM */ 219517SBill.Taylor@Sun.COM 229517SBill.Taylor@Sun.COM /* 239517SBill.Taylor@Sun.COM * Copyright (c) 2002-2003, Network Appliance, Inc. All rights reserved. 249517SBill.Taylor@Sun.COM */ 259517SBill.Taylor@Sun.COM 269517SBill.Taylor@Sun.COM /* 27*12163SRamaswamy.Tummala@Sun.COM * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. 289517SBill.Taylor@Sun.COM */ 299517SBill.Taylor@Sun.COM 309517SBill.Taylor@Sun.COM /* 319517SBill.Taylor@Sun.COM * 329517SBill.Taylor@Sun.COM * HEADER: dapl.h 339517SBill.Taylor@Sun.COM * 349517SBill.Taylor@Sun.COM * PURPOSE: defines common data structures for the DAPL reference implemenation 359517SBill.Taylor@Sun.COM * 369517SBill.Taylor@Sun.COM * Description: This file describes the working data structures used within 379517SBill.Taylor@Sun.COM * DAPL RI. 389517SBill.Taylor@Sun.COM * 399517SBill.Taylor@Sun.COM */ 409517SBill.Taylor@Sun.COM 419517SBill.Taylor@Sun.COM #ifndef _DAPL_H_ 429517SBill.Taylor@Sun.COM #define _DAPL_H_ 439517SBill.Taylor@Sun.COM 449517SBill.Taylor@Sun.COM #ifdef __cplusplus 459517SBill.Taylor@Sun.COM extern "C" { 469517SBill.Taylor@Sun.COM #endif 479517SBill.Taylor@Sun.COM 489517SBill.Taylor@Sun.COM #include <sys/types.h> 499517SBill.Taylor@Sun.COM #include <sys/byteorder.h> 509517SBill.Taylor@Sun.COM 519517SBill.Taylor@Sun.COM #include <dat/udat.h> 529517SBill.Taylor@Sun.COM #include <dat/dat_registry.h> 539517SBill.Taylor@Sun.COM #include "dapl_osd.h" 549517SBill.Taylor@Sun.COM #include "dapl_debug.h" 559517SBill.Taylor@Sun.COM #include "dapl_tavor_ibtf.h" 569517SBill.Taylor@Sun.COM 579517SBill.Taylor@Sun.COM 589517SBill.Taylor@Sun.COM /* 599517SBill.Taylor@Sun.COM * The HTOBE_xx() macro converts data from host order to big endian 609517SBill.Taylor@Sun.COM * order and hence uses the BE_xx macros to do the byte swapping. 619517SBill.Taylor@Sun.COM * 629517SBill.Taylor@Sun.COM * The BETOH_xx() macro converts data from big endian order to host 639517SBill.Taylor@Sun.COM * order. This is used when data is read from CQs or QPs. Due to the 649517SBill.Taylor@Sun.COM * self-inversing nature of byte swapping routines BE_xx macros have 659517SBill.Taylor@Sun.COM * the effect of converting big endian to host byte order which can 669517SBill.Taylor@Sun.COM * be big endian or little endian. 679517SBill.Taylor@Sun.COM * eg. On i386 BE_64(val64_be) = val64_le 689517SBill.Taylor@Sun.COM * On sparc BE_64(val64_be) = val64_be. 699517SBill.Taylor@Sun.COM * 709517SBill.Taylor@Sun.COM * Tavor is a big endian device, all the buffer manipulation for 719517SBill.Taylor@Sun.COM * QPs, CQs and the doorbell page needs to be aware of this. 729517SBill.Taylor@Sun.COM * 739517SBill.Taylor@Sun.COM */ 749517SBill.Taylor@Sun.COM #if defined(__amd64) || defined(__i386) 759517SBill.Taylor@Sun.COM /* use inline code to get performance of bswap* instructions */ 769517SBill.Taylor@Sun.COM 779517SBill.Taylor@Sun.COM #if !defined(__lint) && defined(__GNUC__) 789517SBill.Taylor@Sun.COM /* use GNU inline */ 799517SBill.Taylor@Sun.COM /* works for both i386 and amd64 */ dapls_byteswap32(uint32_t value)809517SBill.Taylor@Sun.COM extern __inline__ uint32_t dapls_byteswap32(uint32_t value) 819517SBill.Taylor@Sun.COM { 829517SBill.Taylor@Sun.COM __asm__("bswap %0" : "+r" (value)); 839517SBill.Taylor@Sun.COM return (value); 849517SBill.Taylor@Sun.COM } 859517SBill.Taylor@Sun.COM 869517SBill.Taylor@Sun.COM #if defined(__amd64) 879517SBill.Taylor@Sun.COM dapls_byteswap64(uint64_t value)889517SBill.Taylor@Sun.COM extern __inline__ uint64_t dapls_byteswap64(uint64_t value) 899517SBill.Taylor@Sun.COM { 909517SBill.Taylor@Sun.COM __asm__("bswapq %0" : "+r" (value)); 919517SBill.Taylor@Sun.COM return (value); 929517SBill.Taylor@Sun.COM } 939517SBill.Taylor@Sun.COM 949517SBill.Taylor@Sun.COM #else /* defined(__i386) */ 959517SBill.Taylor@Sun.COM dapls_byteswap64(uint64_t value)969517SBill.Taylor@Sun.COM extern __inline__ uint64_t dapls_byteswap64(uint64_t value) 979517SBill.Taylor@Sun.COM { 989517SBill.Taylor@Sun.COM union { 999517SBill.Taylor@Sun.COM struct { uint32_t a, b; } s; 1009517SBill.Taylor@Sun.COM uint64_t u; 1019517SBill.Taylor@Sun.COM } v; 1029517SBill.Taylor@Sun.COM v.u = value; 1039517SBill.Taylor@Sun.COM __asm__("bswap %0 ; bswap %1 ; xchgl %0,%1" 1049517SBill.Taylor@Sun.COM : "=r" (v.s.a), "=r" (v.s.b) 1059517SBill.Taylor@Sun.COM : "0" (v.s.a), "1" (v.s.b)); 1069517SBill.Taylor@Sun.COM return (v.u); 1079517SBill.Taylor@Sun.COM } 1089517SBill.Taylor@Sun.COM #endif 1099517SBill.Taylor@Sun.COM 1109517SBill.Taylor@Sun.COM #else /* !defined(__lint) && defined(__GNUC__) */ 1119517SBill.Taylor@Sun.COM /* use SUN inline with .il files */ 1129517SBill.Taylor@Sun.COM uint64_t dapls_byteswap64(uint64_t); 1139517SBill.Taylor@Sun.COM uint32_t dapls_byteswap32(uint32_t); 1149517SBill.Taylor@Sun.COM 1159517SBill.Taylor@Sun.COM #endif /* !defined(__lint) && defined(__GNUC__) */ 1169517SBill.Taylor@Sun.COM 1179517SBill.Taylor@Sun.COM #define HTOBE_64(x) dapls_byteswap64(x) 1189517SBill.Taylor@Sun.COM #define HTOBE_32(x) dapls_byteswap32(x) 1199517SBill.Taylor@Sun.COM #define BETOH_64(x) dapls_byteswap64(x) 1209517SBill.Taylor@Sun.COM #define BETOH_32(x) dapls_byteswap32(x) 1219517SBill.Taylor@Sun.COM 1229517SBill.Taylor@Sun.COM #else /* defined(__amd64) || defined(__i386) */ 1239517SBill.Taylor@Sun.COM 1249517SBill.Taylor@Sun.COM /* These are identity (do nothing) on big-endian machines. */ 1259517SBill.Taylor@Sun.COM 1269517SBill.Taylor@Sun.COM #define HTOBE_64(x) BE_64((x)) 1279517SBill.Taylor@Sun.COM #define HTOBE_32(x) BE_32((x)) 1289517SBill.Taylor@Sun.COM #define BETOH_64(x) BE_64((x)) 1299517SBill.Taylor@Sun.COM #define BETOH_32(x) BE_32((x)) 1309517SBill.Taylor@Sun.COM 1319517SBill.Taylor@Sun.COM #endif /* defined(__amd64) || defined(__i386) */ 1329517SBill.Taylor@Sun.COM 1339517SBill.Taylor@Sun.COM /* 1349517SBill.Taylor@Sun.COM * 1359517SBill.Taylor@Sun.COM * Enumerations 1369517SBill.Taylor@Sun.COM * 1379517SBill.Taylor@Sun.COM */ 1389517SBill.Taylor@Sun.COM 1399517SBill.Taylor@Sun.COM typedef enum dapl_magic { 1409517SBill.Taylor@Sun.COM /* magic number values for verification & debug */ 1419517SBill.Taylor@Sun.COM DAPL_MAGIC_IA = 0x1afeF00d, 1429517SBill.Taylor@Sun.COM DAPL_MAGIC_EVD = 0x2eedFace, 1439517SBill.Taylor@Sun.COM DAPL_MAGIC_EP = 0x3eadBabe, 1449517SBill.Taylor@Sun.COM DAPL_MAGIC_LMR = 0x4eefCafe, 1459517SBill.Taylor@Sun.COM DAPL_MAGIC_RMR = 0x5BadCafe, 1469517SBill.Taylor@Sun.COM DAPL_MAGIC_PZ = 0x6eafBeef, 1479517SBill.Taylor@Sun.COM DAPL_MAGIC_PSP = 0x7eadeD0c, 1489517SBill.Taylor@Sun.COM DAPL_MAGIC_RSP = 0x1ab4Feed, 1499517SBill.Taylor@Sun.COM DAPL_MAGIC_CR = 0x2e12Cee1, 1509517SBill.Taylor@Sun.COM DAPL_MAGIC_CR_DESTROYED = 0x312bDead, 1519517SBill.Taylor@Sun.COM DAPL_MAGIC_CNO = 0x4eadF00d, 1529517SBill.Taylor@Sun.COM DAPL_MAGIC_EP_EXIT = 0x5abeDead, 1539517SBill.Taylor@Sun.COM DAPL_MAGIC_SRQ = 0x5eedFace, 1549517SBill.Taylor@Sun.COM DAPL_MAGIC_INVALID = 0x6FFFFFFF 1559517SBill.Taylor@Sun.COM } DAPL_MAGIC; 1569517SBill.Taylor@Sun.COM 1579517SBill.Taylor@Sun.COM typedef enum dapl_evd_state { 1589517SBill.Taylor@Sun.COM DAPL_EVD_STATE_TERMINAL, 1599517SBill.Taylor@Sun.COM DAPL_EVD_STATE_INITIAL, 1609517SBill.Taylor@Sun.COM DAPL_EVD_STATE_OPEN, 1619517SBill.Taylor@Sun.COM DAPL_EVD_STATE_WAITED, 1629517SBill.Taylor@Sun.COM DAPL_EVD_STATE_DEAD = 0xDEAD 1639517SBill.Taylor@Sun.COM } DAPL_EVD_STATE; 1649517SBill.Taylor@Sun.COM 1659517SBill.Taylor@Sun.COM typedef enum dapl_evd_completion { 1669517SBill.Taylor@Sun.COM DAPL_EVD_STATE_INIT, 1679517SBill.Taylor@Sun.COM DAPL_EVD_STATE_SOLICITED_WAIT, 1689517SBill.Taylor@Sun.COM DAPL_EVD_STATE_THRESHOLD, 1699517SBill.Taylor@Sun.COM DAPL_EVD_STATE_UNSIGNALLED 1709517SBill.Taylor@Sun.COM } DAPL_EVD_COMPLETION; 1719517SBill.Taylor@Sun.COM 1729517SBill.Taylor@Sun.COM typedef enum dapl_cno_state { 1739517SBill.Taylor@Sun.COM DAPL_CNO_STATE_UNTRIGGERED, 1749517SBill.Taylor@Sun.COM DAPL_CNO_STATE_TRIGGERED, 1759517SBill.Taylor@Sun.COM DAPL_CNO_STATE_DEAD = 0x7eadFeed 1769517SBill.Taylor@Sun.COM } DAPL_CNO_STATE; 1779517SBill.Taylor@Sun.COM 1789517SBill.Taylor@Sun.COM typedef enum dapl_qp_state { 1799517SBill.Taylor@Sun.COM DAPL_QP_STATE_UNCONNECTED, 1809517SBill.Taylor@Sun.COM DAPL_QP_STATE_RESERVED, 1819517SBill.Taylor@Sun.COM DAPL_QP_STATE_PASSIVE_CONNECTION_PENDING, 1829517SBill.Taylor@Sun.COM DAPL_QP_STATE_ACTIVE_CONNECTION_PENDING, 1839517SBill.Taylor@Sun.COM DAPL_QP_STATE_TENTATIVE_CONNECTION_PENDING, 1849517SBill.Taylor@Sun.COM DAPL_QP_STATE_CONNECTED, 1859517SBill.Taylor@Sun.COM DAPL_QP_STATE_DISCONNECT_PENDING, 1869517SBill.Taylor@Sun.COM DAPL_QP_STATE_ERROR, 1879517SBill.Taylor@Sun.COM DAPL_QP_STATE_NOT_REUSABLE, 1889517SBill.Taylor@Sun.COM DAPL_QP_STATE_FREE 1899517SBill.Taylor@Sun.COM } DAPL_QP_STATE; 1909517SBill.Taylor@Sun.COM 1919517SBill.Taylor@Sun.COM 1929517SBill.Taylor@Sun.COM /* 1939517SBill.Taylor@Sun.COM * 1949517SBill.Taylor@Sun.COM * Constants 1959517SBill.Taylor@Sun.COM * 1969517SBill.Taylor@Sun.COM */ 1979517SBill.Taylor@Sun.COM 1989517SBill.Taylor@Sun.COM /* 1999517SBill.Taylor@Sun.COM * number of HCAs allowed 2009517SBill.Taylor@Sun.COM */ 2019517SBill.Taylor@Sun.COM #define DAPL_MAX_HCA_COUNT 4 2029517SBill.Taylor@Sun.COM 2039517SBill.Taylor@Sun.COM /* 2049517SBill.Taylor@Sun.COM * Configures the RMR bind evd restriction 2059517SBill.Taylor@Sun.COM */ 2069517SBill.Taylor@Sun.COM #define DAPL_RMR_BIND_EVD_RESTRICTION DAT_RMR_EVD_SAME_AS_REQUEST_EVD 2079517SBill.Taylor@Sun.COM 2089517SBill.Taylor@Sun.COM /* 2099517SBill.Taylor@Sun.COM * special qp_state indicating the EP does not have a QP attached yet 2109517SBill.Taylor@Sun.COM */ 2119517SBill.Taylor@Sun.COM #define DAPL_QP_STATE_UNATTACHED 0xFFF0 2129517SBill.Taylor@Sun.COM 2139517SBill.Taylor@Sun.COM /* 2149517SBill.Taylor@Sun.COM * 2159517SBill.Taylor@Sun.COM * Macros 2169517SBill.Taylor@Sun.COM * 2179517SBill.Taylor@Sun.COM */ 2189517SBill.Taylor@Sun.COM 2199517SBill.Taylor@Sun.COM /* 2209517SBill.Taylor@Sun.COM * Simple macro to verify a handle is bad. 2219517SBill.Taylor@Sun.COM * - pointer's magic number is wrong 2229517SBill.Taylor@Sun.COM * - both pointer is NULL and not word aligned checked by the registry 2239517SBill.Taylor@Sun.COM */ 2249517SBill.Taylor@Sun.COM #define DAPL_BAD_HANDLE(h, magicNum) ( \ 2259517SBill.Taylor@Sun.COM (((DAPL_HEADER *)(h))->magic != (magicNum))) 2269517SBill.Taylor@Sun.COM 2279517SBill.Taylor@Sun.COM #define DAPL_MIN(a, b) (((a) < (b)) ? (a) : (b)) 2289517SBill.Taylor@Sun.COM #define DAPL_MAX(a, b) (((a) > (b)) ? (a) : (b)) 2299517SBill.Taylor@Sun.COM 2309517SBill.Taylor@Sun.COM #define DAT_ERROR(Type, SubType) \ 2319517SBill.Taylor@Sun.COM ((DAT_RETURN)(DAT_CLASS_ERROR | (Type) | (SubType))) 2329517SBill.Taylor@Sun.COM 2339517SBill.Taylor@Sun.COM /* 2349517SBill.Taylor@Sun.COM * 2359517SBill.Taylor@Sun.COM * Typedefs 2369517SBill.Taylor@Sun.COM * 2379517SBill.Taylor@Sun.COM */ 2389517SBill.Taylor@Sun.COM 2399517SBill.Taylor@Sun.COM typedef struct dapl_llist_entry DAPL_LLIST_ENTRY; 2409517SBill.Taylor@Sun.COM typedef DAPL_LLIST_ENTRY *DAPL_LLIST_HEAD; 2419517SBill.Taylor@Sun.COM typedef struct dapl_ring_buffer DAPL_RING_BUFFER; 2429517SBill.Taylor@Sun.COM typedef struct dapl_cookie_buffer DAPL_COOKIE_BUFFER; 2439517SBill.Taylor@Sun.COM 2449517SBill.Taylor@Sun.COM typedef struct dapl_hash_table DAPL_HASH_TABLE; 2459517SBill.Taylor@Sun.COM typedef struct dapl_hash_table *DAPL_HASH_TABLEP; 2469517SBill.Taylor@Sun.COM typedef DAT_UINT64 DAPL_HASH_KEY; 2479517SBill.Taylor@Sun.COM typedef void *DAPL_HASH_DATA; 2489517SBill.Taylor@Sun.COM 2499517SBill.Taylor@Sun.COM typedef struct dapl_hca DAPL_HCA; 2509517SBill.Taylor@Sun.COM 2519517SBill.Taylor@Sun.COM typedef struct dapl_header DAPL_HEADER; 2529517SBill.Taylor@Sun.COM 2539517SBill.Taylor@Sun.COM typedef struct dapl_ia DAPL_IA; 2549517SBill.Taylor@Sun.COM typedef struct dapl_cno DAPL_CNO; 2559517SBill.Taylor@Sun.COM typedef struct dapl_evd DAPL_EVD; 2569517SBill.Taylor@Sun.COM typedef struct dapl_ep DAPL_EP; 2579517SBill.Taylor@Sun.COM typedef struct dapl_pz DAPL_PZ; 2589517SBill.Taylor@Sun.COM typedef struct dapl_lmr DAPL_LMR; 2599517SBill.Taylor@Sun.COM typedef struct dapl_rmr DAPL_RMR; 2609517SBill.Taylor@Sun.COM typedef struct dapl_sp DAPL_SP; 2619517SBill.Taylor@Sun.COM typedef struct dapl_cr DAPL_CR; 2629517SBill.Taylor@Sun.COM typedef struct dapl_srq DAPL_SRQ; 2639517SBill.Taylor@Sun.COM 2649517SBill.Taylor@Sun.COM typedef struct dapl_cookie DAPL_COOKIE; 2659517SBill.Taylor@Sun.COM typedef struct dapl_dto_cookie DAPL_DTO_COOKIE; 2669517SBill.Taylor@Sun.COM typedef struct dapl_rmr_cookie DAPL_RMR_COOKIE; 2679517SBill.Taylor@Sun.COM 2689517SBill.Taylor@Sun.COM typedef void (*DAPL_CONNECTION_STATE_HANDLER)(IN DAPL_EP *, 2699517SBill.Taylor@Sun.COM IN ib_cm_events_t, 2709517SBill.Taylor@Sun.COM IN const void *, 2719517SBill.Taylor@Sun.COM OUT DAT_EVENT *); 2729517SBill.Taylor@Sun.COM 2739517SBill.Taylor@Sun.COM 2749517SBill.Taylor@Sun.COM /* 2759517SBill.Taylor@Sun.COM * 2769517SBill.Taylor@Sun.COM * Structures 2779517SBill.Taylor@Sun.COM * 2789517SBill.Taylor@Sun.COM */ 2799517SBill.Taylor@Sun.COM 2809517SBill.Taylor@Sun.COM struct dapl_llist_entry { 2819517SBill.Taylor@Sun.COM struct dapl_llist_entry *flink; 2829517SBill.Taylor@Sun.COM struct dapl_llist_entry *blink; 2839517SBill.Taylor@Sun.COM void *data; 2849517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD *list_head; /* for consistency checking */ 2859517SBill.Taylor@Sun.COM }; 2869517SBill.Taylor@Sun.COM 2879517SBill.Taylor@Sun.COM struct dapl_ring_buffer { 2889517SBill.Taylor@Sun.COM void **base; /* base of element array */ 2899517SBill.Taylor@Sun.COM DAT_COUNT lim; /* mask, number of entries - 1 */ 2909517SBill.Taylor@Sun.COM DAPL_ATOMIC head; /* head pointer index */ 2919517SBill.Taylor@Sun.COM DAPL_ATOMIC tail; /* tail pointer index */ 2929517SBill.Taylor@Sun.COM DAPL_OS_LOCK lock; /* lock */ 2939517SBill.Taylor@Sun.COM }; 2949517SBill.Taylor@Sun.COM 2959517SBill.Taylor@Sun.COM struct dapl_cookie_buffer { 2969517SBill.Taylor@Sun.COM DAPL_COOKIE *pool; 2979517SBill.Taylor@Sun.COM DAT_COUNT pool_size; 2989517SBill.Taylor@Sun.COM DAPL_ATOMIC head; 2999517SBill.Taylor@Sun.COM DAPL_ATOMIC tail; 3009517SBill.Taylor@Sun.COM }; 3019517SBill.Taylor@Sun.COM 3029517SBill.Taylor@Sun.COM typedef DAT_RETURN (*DAPL_POST_SEND)(DAPL_EP *, ibt_send_wr_t *, boolean_t); 3039517SBill.Taylor@Sun.COM typedef DAT_RETURN (*DAPL_POST_RECV)(DAPL_EP *, ibt_recv_wr_t *, boolean_t); 3049517SBill.Taylor@Sun.COM typedef DAT_RETURN (*DAPL_POST_SRQ)(DAPL_SRQ *, ibt_recv_wr_t *, boolean_t); 3059517SBill.Taylor@Sun.COM typedef void (*DAPL_CQ_PEEK)(ib_cq_handle_t, int *); 3069517SBill.Taylor@Sun.COM typedef DAT_RETURN 3079517SBill.Taylor@Sun.COM (*DAPL_CQ_POLL)(ib_cq_handle_t, ibt_wc_t *, uint_t, uint_t *); 3089517SBill.Taylor@Sun.COM typedef DAT_RETURN (*DAPL_CQ_POLL_ONE)(ib_cq_handle_t, ibt_wc_t *); 3099517SBill.Taylor@Sun.COM typedef DAT_RETURN (*DAPL_CQ_NOTIFY)(ib_cq_handle_t, int, uint32_t); 3109517SBill.Taylor@Sun.COM typedef void (*DAPL_SRQ_FLUSH)(ib_qp_handle_t); 3119517SBill.Taylor@Sun.COM typedef void (*DAPL_QP_INIT)(ib_qp_handle_t); 3129517SBill.Taylor@Sun.COM typedef void (*DAPL_CQ_INIT)(ib_cq_handle_t); 3139517SBill.Taylor@Sun.COM typedef void (*DAPL_SRQ_INIT)(ib_srq_handle_t); 3149517SBill.Taylor@Sun.COM 3159517SBill.Taylor@Sun.COM struct dapl_hca { 3169517SBill.Taylor@Sun.COM DAPL_OS_LOCK lock; 3179517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD ia_list_head; 3189517SBill.Taylor@Sun.COM DAPL_EVD *async_evd; 3199517SBill.Taylor@Sun.COM DAPL_EVD *async_error_evd; 3209517SBill.Taylor@Sun.COM DAT_SOCK_ADDR6 hca_address; /* local address of HCA */ 3219517SBill.Taylor@Sun.COM /* Values specific to IB OS API */ 3229517SBill.Taylor@Sun.COM IB_HCA_NAME name; 3239517SBill.Taylor@Sun.COM ib_hca_handle_t ib_hca_handle; 3249517SBill.Taylor@Sun.COM DAPL_ATOMIC handle_ref_count; /* count of ia_opens on handle */ 3259517SBill.Taylor@Sun.COM ib_uint32_t port_num; /* number of physical port */ 3269517SBill.Taylor@Sun.COM ib_uint32_t partition_max; 3279517SBill.Taylor@Sun.COM ib_uint32_t partition_key; 3289517SBill.Taylor@Sun.COM ib_uint32_t tavor_idx; 3299517SBill.Taylor@Sun.COM ib_guid_t node_GUID; 3309517SBill.Taylor@Sun.COM ib_lid_t lid; 3319517SBill.Taylor@Sun.COM int max_inline_send; 3329517SBill.Taylor@Sun.COM /* CQ support thread */ 3339517SBill.Taylor@Sun.COM ib_cqd_handle_t ib_cqd_handle; /* cq domain handle */ 3349517SBill.Taylor@Sun.COM ib_cq_handle_t null_ib_cq_handle; /* CQ handle with 0 entries */ 3359517SBill.Taylor@Sun.COM /* Memory Subsystem Support */ 3369517SBill.Taylor@Sun.COM DAPL_HASH_TABLE *lmr_hash_table; 3379517SBill.Taylor@Sun.COM /* Limits & useful HCA attributes */ 3389517SBill.Taylor@Sun.COM DAT_IA_ATTR ia_attr; 3399517SBill.Taylor@Sun.COM struct dapl_hca *hca_next; 3409517SBill.Taylor@Sun.COM DAPL_POST_SEND post_send; 3419517SBill.Taylor@Sun.COM DAPL_POST_RECV post_recv; 3429517SBill.Taylor@Sun.COM DAPL_POST_SRQ post_srq; 3439517SBill.Taylor@Sun.COM DAPL_CQ_PEEK cq_peek; 3449517SBill.Taylor@Sun.COM DAPL_CQ_POLL cq_poll; 3459517SBill.Taylor@Sun.COM DAPL_CQ_POLL_ONE cq_poll_one; 3469517SBill.Taylor@Sun.COM DAPL_CQ_NOTIFY cq_notify; 3479517SBill.Taylor@Sun.COM DAPL_SRQ_FLUSH srq_flush; 3489517SBill.Taylor@Sun.COM DAPL_QP_INIT qp_init; 3499517SBill.Taylor@Sun.COM DAPL_CQ_INIT cq_init; 3509517SBill.Taylor@Sun.COM DAPL_SRQ_INIT srq_init; 3519517SBill.Taylor@Sun.COM int hermon_resize_cq; 3529517SBill.Taylor@Sun.COM }; 3539517SBill.Taylor@Sun.COM 3549517SBill.Taylor@Sun.COM #define DAPL_SEND(x) (x->header.owner_ia->hca_ptr->post_send) 3559517SBill.Taylor@Sun.COM #define DAPL_RECV(x) (x->header.owner_ia->hca_ptr->post_recv) 3569517SBill.Taylor@Sun.COM #define DAPL_SRECV(x) (x->header.owner_ia->hca_ptr->post_srq) 3579517SBill.Taylor@Sun.COM #define DAPL_PEEK(x) (x->header.owner_ia->hca_ptr->cq_peek) 3589517SBill.Taylor@Sun.COM #define DAPL_POLL(x) (x->header.owner_ia->hca_ptr->cq_poll) 3599517SBill.Taylor@Sun.COM #define DAPL_POLL1(x) (x->header.owner_ia->hca_ptr->cq_poll_one) 3609517SBill.Taylor@Sun.COM #define DAPL_NOTIFY(x) (x->header.owner_ia->hca_ptr->cq_notify) 3619517SBill.Taylor@Sun.COM #define DAPL_FLUSH(x) (x->header.owner_ia->hca_ptr->srq_flush) 3629517SBill.Taylor@Sun.COM #define DAPL_INIT_QP(x) (x->hca_ptr->qp_init) 3639517SBill.Taylor@Sun.COM #define DAPL_INIT_CQ(x) (x->hca_ptr->cq_init) 3649517SBill.Taylor@Sun.COM #define DAPL_INIT_SRQ(x) (x->hca_ptr->srq_init) 3659517SBill.Taylor@Sun.COM 3669517SBill.Taylor@Sun.COM extern void dapls_init_funcs_tavor(DAPL_HCA *); 3679517SBill.Taylor@Sun.COM extern void dapls_init_funcs_arbel(DAPL_HCA *); 3689517SBill.Taylor@Sun.COM extern void dapls_init_funcs_hermon(DAPL_HCA *); 3699517SBill.Taylor@Sun.COM 3709517SBill.Taylor@Sun.COM /* DAPL Objects always have the following header */ 3719517SBill.Taylor@Sun.COM struct dapl_header { 3729517SBill.Taylor@Sun.COM DAT_PROVIDER *provider; /* required by DAT - must be first */ 3739517SBill.Taylor@Sun.COM DAPL_MAGIC magic; /* magic number for verification */ 3749517SBill.Taylor@Sun.COM DAT_HANDLE_TYPE handle_type; /* struct type */ 3759517SBill.Taylor@Sun.COM DAPL_IA *owner_ia; /* ia which owns this struct */ 3769517SBill.Taylor@Sun.COM DAPL_LLIST_ENTRY ia_list_entry; /* link entry on ia struct */ 3779517SBill.Taylor@Sun.COM DAT_CONTEXT user_context; /* user context - opaque to DAPL */ 3789517SBill.Taylor@Sun.COM DAPL_OS_LOCK lock; /* lock - in header for easier macros */ 3799517SBill.Taylor@Sun.COM }; 3809517SBill.Taylor@Sun.COM 3819517SBill.Taylor@Sun.COM enum DAPL_IA_FLAGS { 3829517SBill.Taylor@Sun.COM DAPL_DISABLE_RO = 1 /* Disable relaxed ordering */ 3839517SBill.Taylor@Sun.COM }; 3849517SBill.Taylor@Sun.COM 3859517SBill.Taylor@Sun.COM /* DAPL_IA maps to DAT_IA_HANDLE */ 3869517SBill.Taylor@Sun.COM struct dapl_ia { 3879517SBill.Taylor@Sun.COM DAPL_HEADER header; 3889517SBill.Taylor@Sun.COM DAPL_HCA *hca_ptr; 3899517SBill.Taylor@Sun.COM DAPL_EVD *async_error_evd; 3909517SBill.Taylor@Sun.COM DAT_BOOLEAN cleanup_async_error_evd; 3919517SBill.Taylor@Sun.COM 3929517SBill.Taylor@Sun.COM DAPL_LLIST_ENTRY hca_ia_list_entry; /* HCAs list of IAs */ 3939517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD ep_list_head; /* EP queue */ 3949517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD lmr_list_head; /* LMR queue */ 3959517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD rmr_list_head; /* RMR queue */ 3969517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD pz_list_head; /* PZ queue */ 3979517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD evd_list_head; /* EVD queue */ 3989517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD cno_list_head; /* CNO queue */ 3999517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD psp_list_head; /* PSP queue */ 4009517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD rsp_list_head; /* RSP queue */ 4019517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD srq_list_head; /* SRQ queue */ 4029517SBill.Taylor@Sun.COM 4039517SBill.Taylor@Sun.COM enum DAPL_IA_FLAGS dapl_flags; /* state flags, see above */ 4049517SBill.Taylor@Sun.COM }; 4059517SBill.Taylor@Sun.COM 4069517SBill.Taylor@Sun.COM /* DAPL_CNO maps to DAT_CNO_HANDLE */ 4079517SBill.Taylor@Sun.COM struct dapl_cno { 4089517SBill.Taylor@Sun.COM DAPL_HEADER header; 4099517SBill.Taylor@Sun.COM 4109517SBill.Taylor@Sun.COM /* A CNO cannot be freed while it is referenced elsewhere. */ 4119517SBill.Taylor@Sun.COM DAPL_ATOMIC cno_ref_count; 4129517SBill.Taylor@Sun.COM DAPL_CNO_STATE cno_state; 4139517SBill.Taylor@Sun.COM 4149517SBill.Taylor@Sun.COM DAT_COUNT cno_waiters; 4159517SBill.Taylor@Sun.COM DAPL_EVD *cno_evd_triggered; 4169517SBill.Taylor@Sun.COM DAT_OS_WAIT_PROXY_AGENT cno_wait_agent; 4179517SBill.Taylor@Sun.COM 4189517SBill.Taylor@Sun.COM DAPL_OS_WAIT_OBJECT cno_wait_object; 4199517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD evd_list_head; 4209517SBill.Taylor@Sun.COM ib_cno_handle_t ib_cno_handle; 4219517SBill.Taylor@Sun.COM }; 4229517SBill.Taylor@Sun.COM 4239517SBill.Taylor@Sun.COM /* DAPL_EVD maps to DAT_EVD_HANDLE */ 4249517SBill.Taylor@Sun.COM struct dapl_evd { 4259517SBill.Taylor@Sun.COM DAPL_HEADER header; 4269517SBill.Taylor@Sun.COM 4279517SBill.Taylor@Sun.COM DAPL_EVD_STATE evd_state; 4289517SBill.Taylor@Sun.COM DAT_EVD_FLAGS evd_flags; 4299517SBill.Taylor@Sun.COM DAT_BOOLEAN evd_enabled; /* For attached CNO. */ 4309517SBill.Taylor@Sun.COM DAT_BOOLEAN evd_waitable; /* EVD state. */ 4319517SBill.Taylor@Sun.COM 4329517SBill.Taylor@Sun.COM /* Derived from evd_flags; see dapls_evd_internal_create. */ 4339517SBill.Taylor@Sun.COM DAT_BOOLEAN evd_producer_locking_needed; 4349517SBill.Taylor@Sun.COM 4359517SBill.Taylor@Sun.COM /* Every EVD has a CQ unless it is a SOFTWARE_EVENT only EVD */ 4369517SBill.Taylor@Sun.COM ib_cq_handle_t ib_cq_handle; 4379517SBill.Taylor@Sun.COM 4389517SBill.Taylor@Sun.COM /* 4399517SBill.Taylor@Sun.COM * Mellanox Specific completion handle for 4409517SBill.Taylor@Sun.COM * registration/de-registration 4419517SBill.Taylor@Sun.COM */ 4429517SBill.Taylor@Sun.COM ib_comp_handle_t ib_comp_handle; 4439517SBill.Taylor@Sun.COM 4449517SBill.Taylor@Sun.COM /* 4459517SBill.Taylor@Sun.COM * An Event Dispatcher cannot be freed while 4469517SBill.Taylor@Sun.COM * it is referenced elsewhere. 4479517SBill.Taylor@Sun.COM */ 4489517SBill.Taylor@Sun.COM DAPL_ATOMIC evd_ref_count; 4499517SBill.Taylor@Sun.COM 4509517SBill.Taylor@Sun.COM /* Set if there has been a catastrophic overflow */ 4519517SBill.Taylor@Sun.COM DAT_BOOLEAN catastrophic_overflow; 4529517SBill.Taylor@Sun.COM 4539517SBill.Taylor@Sun.COM /* the actual events */ 4549517SBill.Taylor@Sun.COM DAT_COUNT qlen; 4559517SBill.Taylor@Sun.COM DAT_EVENT *events; 4569517SBill.Taylor@Sun.COM DAPL_RING_BUFFER free_event_queue; 4579517SBill.Taylor@Sun.COM DAPL_RING_BUFFER pending_event_queue; 4589517SBill.Taylor@Sun.COM 4599517SBill.Taylor@Sun.COM /* 4609517SBill.Taylor@Sun.COM * CQ Completions are not placed into 'deferred_events' 4619517SBill.Taylor@Sun.COM * rather they are simply left on the Completion Queue 4629517SBill.Taylor@Sun.COM * and the fact that there was a notification is flagged. 4639517SBill.Taylor@Sun.COM */ 4649517SBill.Taylor@Sun.COM DAT_BOOLEAN cq_notified; 4659517SBill.Taylor@Sun.COM DAPL_OS_TICKS cq_notified_when; 4669517SBill.Taylor@Sun.COM 4679517SBill.Taylor@Sun.COM DAT_COUNT cno_active_count; 4689517SBill.Taylor@Sun.COM DAPL_CNO *cno_ptr; 4699517SBill.Taylor@Sun.COM 4709517SBill.Taylor@Sun.COM DAPL_OS_WAIT_OBJECT wait_object; 4719517SBill.Taylor@Sun.COM DAT_COUNT threshold; 4729517SBill.Taylor@Sun.COM DAPL_LLIST_ENTRY cno_list_entry; 4739517SBill.Taylor@Sun.COM DAPL_EVD_COMPLETION completion_type; 4749517SBill.Taylor@Sun.COM }; 4759517SBill.Taylor@Sun.COM 4769517SBill.Taylor@Sun.COM /* DAPL_EP maps to DAT_EP_HANDLE */ 4779517SBill.Taylor@Sun.COM struct dapl_ep { 4789517SBill.Taylor@Sun.COM DAPL_HEADER header; 4799517SBill.Taylor@Sun.COM /* What the DAT Consumer asked for */ 4809517SBill.Taylor@Sun.COM DAT_EP_PARAM param; 4819517SBill.Taylor@Sun.COM 4829517SBill.Taylor@Sun.COM /* The RC Queue Pair (IBM OS API) */ 4839517SBill.Taylor@Sun.COM ib_qp_handle_t qp_handle; 4849517SBill.Taylor@Sun.COM unsigned int qpn; /* qp number */ 4859517SBill.Taylor@Sun.COM ib_qp_state_t qp_state; 4869517SBill.Taylor@Sun.COM 4879517SBill.Taylor@Sun.COM /* communications manager handle (IBM OS API) */ 4889517SBill.Taylor@Sun.COM ib_cm_handle_t cm_handle; 4899517SBill.Taylor@Sun.COM /* 4909517SBill.Taylor@Sun.COM * store the remote IA address here, reference from the param 4919517SBill.Taylor@Sun.COM * struct which only has a pointer, no storage 4929517SBill.Taylor@Sun.COM */ 4939517SBill.Taylor@Sun.COM DAT_SOCK_ADDR6 remote_ia_address; 4949517SBill.Taylor@Sun.COM 4959517SBill.Taylor@Sun.COM /* For passive connections we maintain a back pointer to the CR */ 4969517SBill.Taylor@Sun.COM void *cr_ptr; 4979517SBill.Taylor@Sun.COM 4989517SBill.Taylor@Sun.COM /* private data container */ 4999517SBill.Taylor@Sun.COM unsigned char private_data[DAPL_MAX_PRIVATE_DATA_SIZE]; 5009517SBill.Taylor@Sun.COM 5019517SBill.Taylor@Sun.COM /* DTO data */ 5029517SBill.Taylor@Sun.COM DAPL_ATOMIC req_count; 5039517SBill.Taylor@Sun.COM DAPL_ATOMIC recv_count; 5049517SBill.Taylor@Sun.COM 5059517SBill.Taylor@Sun.COM DAPL_COOKIE_BUFFER req_buffer; 5069517SBill.Taylor@Sun.COM DAPL_COOKIE_BUFFER recv_buffer; 5079517SBill.Taylor@Sun.COM 5089517SBill.Taylor@Sun.COM DAT_BOOLEAN srq_attached; 5099517SBill.Taylor@Sun.COM }; 5109517SBill.Taylor@Sun.COM 5119517SBill.Taylor@Sun.COM /* DAPL_PZ maps to DAT_PZ_HANDLE */ 5129517SBill.Taylor@Sun.COM struct dapl_pz { 5139517SBill.Taylor@Sun.COM DAPL_HEADER header; 5149517SBill.Taylor@Sun.COM ib_pd_handle_t pd_handle; 5159517SBill.Taylor@Sun.COM DAPL_ATOMIC pz_ref_count; 5169517SBill.Taylor@Sun.COM }; 5179517SBill.Taylor@Sun.COM 5189517SBill.Taylor@Sun.COM /* DAPL_LMR maps to DAT_LMR_HANDLE */ 5199517SBill.Taylor@Sun.COM struct dapl_lmr { 5209517SBill.Taylor@Sun.COM DAPL_HEADER header; 5219517SBill.Taylor@Sun.COM DAT_LMR_PARAM param; 5229517SBill.Taylor@Sun.COM ib_mr_handle_t mr_handle; 5239517SBill.Taylor@Sun.COM DAPL_ATOMIC lmr_ref_count; 5249517SBill.Taylor@Sun.COM }; 5259517SBill.Taylor@Sun.COM 5269517SBill.Taylor@Sun.COM /* DAPL_RMR maps to DAT_RMR_HANDLE */ 5279517SBill.Taylor@Sun.COM struct dapl_rmr { 5289517SBill.Taylor@Sun.COM DAPL_HEADER header; 5299517SBill.Taylor@Sun.COM DAT_RMR_PARAM param; 5309517SBill.Taylor@Sun.COM DAPL_EP *ep; 5319517SBill.Taylor@Sun.COM DAPL_PZ *pz; 5329517SBill.Taylor@Sun.COM DAPL_LMR *lmr; 5339517SBill.Taylor@Sun.COM ib_mw_handle_t mw_handle; 5349517SBill.Taylor@Sun.COM }; 5359517SBill.Taylor@Sun.COM 5369517SBill.Taylor@Sun.COM /* SP types, indicating the state and queue */ 5379517SBill.Taylor@Sun.COM typedef enum dapl_sp_state { 5389517SBill.Taylor@Sun.COM DAPL_SP_STATE_FREE, 5399517SBill.Taylor@Sun.COM DAPL_SP_STATE_PSP_LISTENING, 5409517SBill.Taylor@Sun.COM DAPL_SP_STATE_PSP_PENDING, 5419517SBill.Taylor@Sun.COM DAPL_SP_STATE_RSP_LISTENING, 5429517SBill.Taylor@Sun.COM DAPL_SP_STATE_RSP_PENDING 5439517SBill.Taylor@Sun.COM } DAPL_SP_STATE; 5449517SBill.Taylor@Sun.COM 5459517SBill.Taylor@Sun.COM /* DAPL_SP maps to DAT_PSP_HANDLE and DAT_RSP_HANDLE */ 5469517SBill.Taylor@Sun.COM struct dapl_sp { 5479517SBill.Taylor@Sun.COM DAPL_HEADER header; 5489517SBill.Taylor@Sun.COM DAPL_SP_STATE state; /* type and queue of the SP */ 5499517SBill.Taylor@Sun.COM 5509517SBill.Taylor@Sun.COM /* PSP/RSP PARAM fields */ 5519517SBill.Taylor@Sun.COM DAT_IA_HANDLE ia_handle; 5529517SBill.Taylor@Sun.COM DAT_CONN_QUAL conn_qual; 5539517SBill.Taylor@Sun.COM DAT_EVD_HANDLE evd_handle; 5549517SBill.Taylor@Sun.COM DAT_PSP_FLAGS psp_flags; 5559517SBill.Taylor@Sun.COM DAT_EP_HANDLE ep_handle; 5569517SBill.Taylor@Sun.COM 5579517SBill.Taylor@Sun.COM /* maintenence fields */ 5589517SBill.Taylor@Sun.COM DAT_BOOLEAN listening; /* PSP is registered & active */ 5599517SBill.Taylor@Sun.COM ib_cm_srvc_handle_t cm_srvc_handle; /* Used by Mellanox CM */ 5609517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD cr_list_head; /* CR pending queue */ 5619517SBill.Taylor@Sun.COM DAT_COUNT cr_list_count; /* count of CRs on queue */ 5629517SBill.Taylor@Sun.COM }; 5639517SBill.Taylor@Sun.COM 5649517SBill.Taylor@Sun.COM /* DAPL_CR maps to DAT_CR_HANDLE */ 5659517SBill.Taylor@Sun.COM struct dapl_cr { 5669517SBill.Taylor@Sun.COM DAPL_HEADER header; 5679517SBill.Taylor@Sun.COM 5689517SBill.Taylor@Sun.COM /* 5699517SBill.Taylor@Sun.COM * for convenience the data is kept as a DAT_CR_PARAM. 5709517SBill.Taylor@Sun.COM * however, the "local_endpoint" field is always NULL 5719517SBill.Taylor@Sun.COM * so this wastes a pointer. This is probably ok to 5729517SBill.Taylor@Sun.COM * simplify code, espedially dat_cr_query. 5739517SBill.Taylor@Sun.COM */ 5749517SBill.Taylor@Sun.COM DAT_CR_PARAM param; 5759517SBill.Taylor@Sun.COM /* IB specific fields */ 5769517SBill.Taylor@Sun.COM ib_cm_handle_t ib_cm_handle; 5779517SBill.Taylor@Sun.COM 5789517SBill.Taylor@Sun.COM DAT_SOCK_ADDR6 remote_ia_address; 5799517SBill.Taylor@Sun.COM /* 5809517SBill.Taylor@Sun.COM * Assuming that the maximum private data size is small. 5819517SBill.Taylor@Sun.COM * If it gets large, use of a pointer may be appropriate. 5829517SBill.Taylor@Sun.COM */ 5839517SBill.Taylor@Sun.COM unsigned char private_data[DAPL_MAX_PRIVATE_DATA_SIZE]; 5849517SBill.Taylor@Sun.COM /* 5859517SBill.Taylor@Sun.COM * Need to be able to associate the CR back to the PSP for 5869517SBill.Taylor@Sun.COM * dapl_cr_reject. 5879517SBill.Taylor@Sun.COM */ 5889517SBill.Taylor@Sun.COM DAPL_SP *sp_ptr; 5899517SBill.Taylor@Sun.COM }; 5909517SBill.Taylor@Sun.COM 5919517SBill.Taylor@Sun.COM /* DAPL_SRQ maps to DAT_SRQ_HANDLE */ 5929517SBill.Taylor@Sun.COM struct dapl_srq { 5939517SBill.Taylor@Sun.COM DAPL_HEADER header; 5949517SBill.Taylor@Sun.COM DAT_SRQ_PARAM param; 5959517SBill.Taylor@Sun.COM /* SRQ cannot be freed till EPs attached to srq are freed */ 5969517SBill.Taylor@Sun.COM DAPL_ATOMIC srq_ref_count; 5979517SBill.Taylor@Sun.COM ib_srq_handle_t srq_handle; 5989517SBill.Taylor@Sun.COM /* DTO data */ 5999517SBill.Taylor@Sun.COM DAPL_ATOMIC recv_count; 6009517SBill.Taylor@Sun.COM DAPL_COOKIE_BUFFER recv_buffer; 6019517SBill.Taylor@Sun.COM }; 6029517SBill.Taylor@Sun.COM 6039517SBill.Taylor@Sun.COM typedef enum dapl_dto_type { 6049517SBill.Taylor@Sun.COM DAPL_DTO_TYPE_SEND, 6059517SBill.Taylor@Sun.COM DAPL_DTO_TYPE_RECV, 6069517SBill.Taylor@Sun.COM DAPL_DTO_TYPE_RDMA_WRITE, 6079517SBill.Taylor@Sun.COM DAPL_DTO_TYPE_RDMA_READ 6089517SBill.Taylor@Sun.COM } DAPL_DTO_TYPE; 6099517SBill.Taylor@Sun.COM 6109517SBill.Taylor@Sun.COM typedef enum dapl_cookie_type { 6119517SBill.Taylor@Sun.COM DAPL_COOKIE_TYPE_NULL, 6129517SBill.Taylor@Sun.COM DAPL_COOKIE_TYPE_DTO, 6139517SBill.Taylor@Sun.COM DAPL_COOKIE_TYPE_RMR 6149517SBill.Taylor@Sun.COM } DAPL_COOKIE_TYPE; 6159517SBill.Taylor@Sun.COM 6169517SBill.Taylor@Sun.COM /* DAPL_DTO_COOKIE used as context for DTO WQEs */ 6179517SBill.Taylor@Sun.COM struct dapl_dto_cookie { 6189517SBill.Taylor@Sun.COM DAPL_DTO_TYPE type; 6199517SBill.Taylor@Sun.COM DAT_DTO_COOKIE cookie; 6209517SBill.Taylor@Sun.COM DAT_COUNT size; /* used for SEND and RDMA write */ 6219517SBill.Taylor@Sun.COM }; 6229517SBill.Taylor@Sun.COM 6239517SBill.Taylor@Sun.COM /* DAPL_RMR_COOKIE used as context for bind WQEs */ 6249517SBill.Taylor@Sun.COM struct dapl_rmr_cookie { 6259517SBill.Taylor@Sun.COM DAPL_RMR *rmr; 6269517SBill.Taylor@Sun.COM DAT_RMR_COOKIE cookie; 6279517SBill.Taylor@Sun.COM }; 6289517SBill.Taylor@Sun.COM 6299517SBill.Taylor@Sun.COM typedef enum dapl_cookie_queue_type { 6309517SBill.Taylor@Sun.COM DAPL_COOKIE_QUEUE_EP, 6319517SBill.Taylor@Sun.COM DAPL_COOKIE_QUEUE_SRQ 6329517SBill.Taylor@Sun.COM } DAPL_COOKIE_QUEUE_TYPE; 6339517SBill.Taylor@Sun.COM 6349517SBill.Taylor@Sun.COM /* DAPL_COOKIE used as context for WQEs */ 6359517SBill.Taylor@Sun.COM struct dapl_cookie { 6369517SBill.Taylor@Sun.COM DAPL_COOKIE_TYPE type; /* Must be first, to define struct. */ 6379517SBill.Taylor@Sun.COM DAPL_COOKIE_QUEUE_TYPE queue_type; 6389517SBill.Taylor@Sun.COM union { 6399517SBill.Taylor@Sun.COM void *ptr; 6409517SBill.Taylor@Sun.COM DAPL_EP *ep; 6419517SBill.Taylor@Sun.COM DAPL_SRQ *srq; 6429517SBill.Taylor@Sun.COM } queue; 6439517SBill.Taylor@Sun.COM DAT_COUNT index; 6449517SBill.Taylor@Sun.COM union { 6459517SBill.Taylor@Sun.COM DAPL_DTO_COOKIE dto; 6469517SBill.Taylor@Sun.COM DAPL_RMR_COOKIE rmr; 6479517SBill.Taylor@Sun.COM } val; 6489517SBill.Taylor@Sun.COM }; 6499517SBill.Taylor@Sun.COM 6509517SBill.Taylor@Sun.COM /* 6519517SBill.Taylor@Sun.COM * Generic HCA name field 6529517SBill.Taylor@Sun.COM */ 6539517SBill.Taylor@Sun.COM #define DAPL_HCA_NAME_MAX_LEN 260 6549517SBill.Taylor@Sun.COM typedef char DAPL_HCA_NAME[DAPL_HCA_NAME_MAX_LEN + 1]; 6559517SBill.Taylor@Sun.COM 6569517SBill.Taylor@Sun.COM #if defined(IBHOSTS_NAMING) 6579517SBill.Taylor@Sun.COM 6589517SBill.Taylor@Sun.COM /* 6599517SBill.Taylor@Sun.COM * Simple mapping table to match IP addresses to GIDs. Loaded 6609517SBill.Taylor@Sun.COM * by dapl_init. 6619517SBill.Taylor@Sun.COM */ 6629517SBill.Taylor@Sun.COM typedef struct _dapl_gid_map_table { 6639517SBill.Taylor@Sun.COM uint32_t ip_address; 6649517SBill.Taylor@Sun.COM ib_gid_t gid; 6659517SBill.Taylor@Sun.COM } DAPL_GID_MAP; 6669517SBill.Taylor@Sun.COM 6679517SBill.Taylor@Sun.COM #endif /* IBHOSTS_NAMING */ 6689517SBill.Taylor@Sun.COM 6699517SBill.Taylor@Sun.COM /* 6709517SBill.Taylor@Sun.COM * 6719517SBill.Taylor@Sun.COM * Function Prototypes 6729517SBill.Taylor@Sun.COM * 6739517SBill.Taylor@Sun.COM */ 6749517SBill.Taylor@Sun.COM 6759517SBill.Taylor@Sun.COM /* 6769517SBill.Taylor@Sun.COM * DAT Mandated functions 6779517SBill.Taylor@Sun.COM */ 6789517SBill.Taylor@Sun.COM extern DAT_RETURN 6799517SBill.Taylor@Sun.COM dapl_ia_open( 6809517SBill.Taylor@Sun.COM IN const DAT_NAME_PTR, /* name */ 6819517SBill.Taylor@Sun.COM IN DAT_COUNT, /* asynch_evd_qlen */ 6829517SBill.Taylor@Sun.COM INOUT DAT_EVD_HANDLE *, /* asynch_evd_handle */ 6839517SBill.Taylor@Sun.COM OUT DAT_IA_HANDLE *, /* ia_handle */ 6849517SBill.Taylor@Sun.COM IN boolean_t); /* ro_aware_client */ 6859517SBill.Taylor@Sun.COM 6869517SBill.Taylor@Sun.COM extern DAT_RETURN 6879517SBill.Taylor@Sun.COM dapl_ia_close( 6889517SBill.Taylor@Sun.COM IN DAT_IA_HANDLE, /* ia_handle */ 6899517SBill.Taylor@Sun.COM IN DAT_CLOSE_FLAGS); /* ia_flags */ 6909517SBill.Taylor@Sun.COM 6919517SBill.Taylor@Sun.COM 6929517SBill.Taylor@Sun.COM extern DAT_RETURN 6939517SBill.Taylor@Sun.COM dapl_ia_query( 6949517SBill.Taylor@Sun.COM IN DAT_IA_HANDLE, /* ia handle */ 6959517SBill.Taylor@Sun.COM OUT DAT_EVD_HANDLE *, /* async_evd_handle */ 6969517SBill.Taylor@Sun.COM IN DAT_IA_ATTR_MASK, /* ia_params_mask */ 6979517SBill.Taylor@Sun.COM OUT DAT_IA_ATTR *, /* ia_params */ 6989517SBill.Taylor@Sun.COM IN DAT_PROVIDER_ATTR_MASK, /* provider_params_mask */ 6999517SBill.Taylor@Sun.COM OUT DAT_PROVIDER_ATTR *); /* provider_params */ 7009517SBill.Taylor@Sun.COM 7019517SBill.Taylor@Sun.COM 7029517SBill.Taylor@Sun.COM /* helper functions */ 7039517SBill.Taylor@Sun.COM extern DAT_RETURN 7049517SBill.Taylor@Sun.COM dapl_set_consumer_context( 7059517SBill.Taylor@Sun.COM IN DAT_HANDLE, /* dat handle */ 7069517SBill.Taylor@Sun.COM IN DAT_CONTEXT); /* context */ 7079517SBill.Taylor@Sun.COM 7089517SBill.Taylor@Sun.COM extern DAT_RETURN 7099517SBill.Taylor@Sun.COM dapl_get_consumer_context( 7109517SBill.Taylor@Sun.COM IN DAT_HANDLE, /* dat handle */ 7119517SBill.Taylor@Sun.COM OUT DAT_CONTEXT *); /* context */ 7129517SBill.Taylor@Sun.COM 7139517SBill.Taylor@Sun.COM extern DAT_RETURN 7149517SBill.Taylor@Sun.COM dapl_get_handle_type( 7159517SBill.Taylor@Sun.COM IN DAT_HANDLE, 7169517SBill.Taylor@Sun.COM OUT DAT_HANDLE_TYPE *); 7179517SBill.Taylor@Sun.COM 7189517SBill.Taylor@Sun.COM 7199517SBill.Taylor@Sun.COM /* CNO functions */ 7209517SBill.Taylor@Sun.COM extern DAT_RETURN 7219517SBill.Taylor@Sun.COM dapl_cno_create( 7229517SBill.Taylor@Sun.COM IN DAT_IA_HANDLE, /* ia_handle */ 7239517SBill.Taylor@Sun.COM IN DAT_OS_WAIT_PROXY_AGENT, /* agent */ 7249517SBill.Taylor@Sun.COM OUT DAT_CNO_HANDLE *); /* cno_handle */ 7259517SBill.Taylor@Sun.COM 7269517SBill.Taylor@Sun.COM extern DAT_RETURN 7279517SBill.Taylor@Sun.COM dapl_cno_modify_agent( 7289517SBill.Taylor@Sun.COM IN DAT_CNO_HANDLE, /* cno_handle */ 7299517SBill.Taylor@Sun.COM IN DAT_OS_WAIT_PROXY_AGENT); /* agent */ 7309517SBill.Taylor@Sun.COM 7319517SBill.Taylor@Sun.COM extern DAT_RETURN 7329517SBill.Taylor@Sun.COM dapl_cno_query( 7339517SBill.Taylor@Sun.COM IN DAT_CNO_HANDLE, /* cno_handle */ 7349517SBill.Taylor@Sun.COM IN DAT_CNO_PARAM_MASK, /* cno_param_mask */ 7359517SBill.Taylor@Sun.COM OUT DAT_CNO_PARAM *); /* cno_param */ 7369517SBill.Taylor@Sun.COM 7379517SBill.Taylor@Sun.COM extern DAT_RETURN 7389517SBill.Taylor@Sun.COM dapl_cno_free(IN DAT_CNO_HANDLE); /* cno_handle */ 7399517SBill.Taylor@Sun.COM 7409517SBill.Taylor@Sun.COM extern DAT_RETURN 7419517SBill.Taylor@Sun.COM dapl_cno_wait( 7429517SBill.Taylor@Sun.COM IN DAT_CNO_HANDLE, /* cno_handle */ 7439517SBill.Taylor@Sun.COM IN DAT_TIMEOUT, /* timeout */ 7449517SBill.Taylor@Sun.COM OUT DAT_EVD_HANDLE *); /* evd_handle */ 7459517SBill.Taylor@Sun.COM 7469517SBill.Taylor@Sun.COM 7479517SBill.Taylor@Sun.COM /* CR Functions */ 7489517SBill.Taylor@Sun.COM extern DAT_RETURN 7499517SBill.Taylor@Sun.COM dapl_cr_query( 7509517SBill.Taylor@Sun.COM IN DAT_CR_HANDLE, /* cr_handle */ 7519517SBill.Taylor@Sun.COM IN DAT_CR_PARAM_MASK, /* cr_args_mask */ 7529517SBill.Taylor@Sun.COM OUT DAT_CR_PARAM *); /* cwr_args */ 7539517SBill.Taylor@Sun.COM 7549517SBill.Taylor@Sun.COM extern DAT_RETURN 7559517SBill.Taylor@Sun.COM dapl_cr_accept( 7569517SBill.Taylor@Sun.COM IN DAT_CR_HANDLE, /* cr_handle */ 7579517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_handle */ 7589517SBill.Taylor@Sun.COM IN DAT_COUNT, /* private_data_size */ 7599517SBill.Taylor@Sun.COM IN const DAT_PVOID); /* private_data */ 7609517SBill.Taylor@Sun.COM 7619517SBill.Taylor@Sun.COM extern DAT_RETURN 7629517SBill.Taylor@Sun.COM dapl_cr_reject(IN DAT_CR_HANDLE); 7639517SBill.Taylor@Sun.COM 7649517SBill.Taylor@Sun.COM extern DAT_RETURN 7659517SBill.Taylor@Sun.COM dapl_cr_handoff( 7669517SBill.Taylor@Sun.COM IN DAT_CR_HANDLE, /* cr_handle */ 7679517SBill.Taylor@Sun.COM IN DAT_CONN_QUAL); /* handoff */ 7689517SBill.Taylor@Sun.COM 7699517SBill.Taylor@Sun.COM /* EVD Functions */ 7709517SBill.Taylor@Sun.COM extern DAT_RETURN 7719517SBill.Taylor@Sun.COM dapl_evd_create( 7729517SBill.Taylor@Sun.COM IN DAT_IA_HANDLE, /* ia_handle */ 7739517SBill.Taylor@Sun.COM IN DAT_COUNT, /* evd_min_qlen */ 7749517SBill.Taylor@Sun.COM IN DAT_CNO_HANDLE, /* cno_handle */ 7759517SBill.Taylor@Sun.COM IN DAT_EVD_FLAGS, /* evd_flags */ 7769517SBill.Taylor@Sun.COM OUT DAT_EVD_HANDLE *); /* evd_handle */ 7779517SBill.Taylor@Sun.COM 7789517SBill.Taylor@Sun.COM extern DAT_RETURN 7799517SBill.Taylor@Sun.COM dapl_evd_query( 7809517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* evd_handle */ 7819517SBill.Taylor@Sun.COM IN DAT_EVD_PARAM_MASK, /* evd_args_mask */ 7829517SBill.Taylor@Sun.COM OUT DAT_EVD_PARAM *); /* evd_args */ 7839517SBill.Taylor@Sun.COM 7849517SBill.Taylor@Sun.COM #if 0 /* kdapl */ 7859517SBill.Taylor@Sun.COM extern DAT_RETURN 7869517SBill.Taylor@Sun.COM dapl_evd_modify_upcall( 7879517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* evd_handle */ 7889517SBill.Taylor@Sun.COM IN DAT_UPCALL_POLICY, /* upcall_policy */ 7899517SBill.Taylor@Sun.COM IN DAT_UPCALL_OBJECT); /* upcall */ 7909517SBill.Taylor@Sun.COM #else 7919517SBill.Taylor@Sun.COM 7929517SBill.Taylor@Sun.COM extern DAT_RETURN 7939517SBill.Taylor@Sun.COM dapl_evd_modify_cno( 7949517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* evd_handle */ 7959517SBill.Taylor@Sun.COM IN DAT_CNO_HANDLE); /* cno_handle */ 7969517SBill.Taylor@Sun.COM 7979517SBill.Taylor@Sun.COM extern DAT_RETURN 7989517SBill.Taylor@Sun.COM dapl_evd_enable(IN DAT_EVD_HANDLE); /* evd_handle */ 7999517SBill.Taylor@Sun.COM 8009517SBill.Taylor@Sun.COM extern DAT_RETURN 8019517SBill.Taylor@Sun.COM dapl_evd_disable(IN DAT_EVD_HANDLE); /* evd_handle */ 8029517SBill.Taylor@Sun.COM 8039517SBill.Taylor@Sun.COM extern DAT_RETURN 8049517SBill.Taylor@Sun.COM dapl_evd_wait( 8059517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* evd_handle */ 8069517SBill.Taylor@Sun.COM IN DAT_TIMEOUT, /* timeout */ 8079517SBill.Taylor@Sun.COM IN DAT_COUNT, /* threshold */ 8089517SBill.Taylor@Sun.COM OUT DAT_EVENT *, /* event */ 8099517SBill.Taylor@Sun.COM OUT DAT_COUNT *); /* nmore */ 8109517SBill.Taylor@Sun.COM #endif 8119517SBill.Taylor@Sun.COM 8129517SBill.Taylor@Sun.COM extern DAT_RETURN 8139517SBill.Taylor@Sun.COM dapl_evd_resize( 8149517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* evd_handle */ 8159517SBill.Taylor@Sun.COM IN DAT_COUNT); /* evd_qlen */ 8169517SBill.Taylor@Sun.COM 8179517SBill.Taylor@Sun.COM extern DAT_RETURN 8189517SBill.Taylor@Sun.COM dapl_evd_wait( 8199517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* evd_handle */ 8209517SBill.Taylor@Sun.COM IN DAT_TIMEOUT, /* timeout */ 8219517SBill.Taylor@Sun.COM IN DAT_COUNT, /* threshold */ 8229517SBill.Taylor@Sun.COM OUT DAT_EVENT *, /* event */ 8239517SBill.Taylor@Sun.COM OUT DAT_COUNT *); /* nmore */ 8249517SBill.Taylor@Sun.COM 8259517SBill.Taylor@Sun.COM extern DAT_RETURN 8269517SBill.Taylor@Sun.COM dapl_evd_post_se( 8279517SBill.Taylor@Sun.COM DAT_EVD_HANDLE, /* evd_handle */ 8289517SBill.Taylor@Sun.COM const DAT_EVENT *); /* event */ 8299517SBill.Taylor@Sun.COM 8309517SBill.Taylor@Sun.COM extern DAT_RETURN 8319517SBill.Taylor@Sun.COM dapl_evd_dequeue( 8329517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* evd_handle */ 8339517SBill.Taylor@Sun.COM OUT DAT_EVENT *); /* event */ 8349517SBill.Taylor@Sun.COM 8359517SBill.Taylor@Sun.COM extern DAT_RETURN 8369517SBill.Taylor@Sun.COM dapl_evd_free(IN DAT_EVD_HANDLE); 8379517SBill.Taylor@Sun.COM 8389517SBill.Taylor@Sun.COM extern DAT_RETURN 8399517SBill.Taylor@Sun.COM dapl_evd_set_unwaitable(IN DAT_EVD_HANDLE evd_handle); 8409517SBill.Taylor@Sun.COM 8419517SBill.Taylor@Sun.COM extern DAT_RETURN 8429517SBill.Taylor@Sun.COM dapl_evd_clear_unwaitable(IN DAT_EVD_HANDLE evd_handle); 8439517SBill.Taylor@Sun.COM 8449517SBill.Taylor@Sun.COM 8459517SBill.Taylor@Sun.COM /* EP functions */ 8469517SBill.Taylor@Sun.COM extern DAT_RETURN 8479517SBill.Taylor@Sun.COM dapl_ep_create( 8489517SBill.Taylor@Sun.COM IN DAT_IA_HANDLE, /* ia_handle */ 8499517SBill.Taylor@Sun.COM IN DAT_PZ_HANDLE, /* pz_handle */ 8509517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* in_dto_completion_evd_handle */ 8519517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* out_dto_completion_evd_handle */ 8529517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* connect_evd_handle */ 8539517SBill.Taylor@Sun.COM IN const DAT_EP_ATTR *, /* ep_parameters */ 8549517SBill.Taylor@Sun.COM OUT DAT_EP_HANDLE *); /* ep_handle */ 8559517SBill.Taylor@Sun.COM 8569517SBill.Taylor@Sun.COM extern DAT_RETURN 8579517SBill.Taylor@Sun.COM dapl_ep_query( 8589517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_handle */ 8599517SBill.Taylor@Sun.COM IN DAT_EP_PARAM_MASK, /* ep_args_mask */ 8609517SBill.Taylor@Sun.COM OUT DAT_EP_PARAM *); /* ep_args */ 8619517SBill.Taylor@Sun.COM 8629517SBill.Taylor@Sun.COM extern DAT_RETURN 8639517SBill.Taylor@Sun.COM dapl_ep_modify( 8649517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_handle */ 8659517SBill.Taylor@Sun.COM IN DAT_EP_PARAM_MASK, /* ep_args_mask */ 8669517SBill.Taylor@Sun.COM IN const DAT_EP_PARAM *); /* ep_args */ 8679517SBill.Taylor@Sun.COM 8689517SBill.Taylor@Sun.COM extern DAT_RETURN 8699517SBill.Taylor@Sun.COM dapl_ep_connect( 8709517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_handle */ 8719517SBill.Taylor@Sun.COM IN DAT_IA_ADDRESS_PTR, /* remote_ia_address */ 8729517SBill.Taylor@Sun.COM IN DAT_CONN_QUAL, /* remote_conn_qual */ 8739517SBill.Taylor@Sun.COM IN DAT_TIMEOUT, /* timeout */ 8749517SBill.Taylor@Sun.COM IN DAT_COUNT, /* private_data_size */ 8759517SBill.Taylor@Sun.COM IN const DAT_PVOID, /* private_data */ 8769517SBill.Taylor@Sun.COM IN DAT_QOS, /* quality_of_service */ 8779517SBill.Taylor@Sun.COM IN DAT_CONNECT_FLAGS); /* connect_flags */ 8789517SBill.Taylor@Sun.COM 8799517SBill.Taylor@Sun.COM extern DAT_RETURN 8809517SBill.Taylor@Sun.COM dapl_ep_dup_connect( 8819517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_handle */ 8829517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_dup_handle */ 8839517SBill.Taylor@Sun.COM IN DAT_TIMEOUT, /* timeout */ 8849517SBill.Taylor@Sun.COM IN DAT_COUNT, /* private_data_size */ 8859517SBill.Taylor@Sun.COM IN const DAT_PVOID, /* private_data */ 8869517SBill.Taylor@Sun.COM IN DAT_QOS); /* quality_of_service */ 8879517SBill.Taylor@Sun.COM 8889517SBill.Taylor@Sun.COM extern DAT_RETURN 8899517SBill.Taylor@Sun.COM dapl_ep_disconnect( 8909517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_handle */ 8919517SBill.Taylor@Sun.COM IN DAT_CLOSE_FLAGS); /* completion_flags */ 8929517SBill.Taylor@Sun.COM 8939517SBill.Taylor@Sun.COM extern DAT_RETURN 8949517SBill.Taylor@Sun.COM dapl_ep_post_send( 8959517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_handle */ 8969517SBill.Taylor@Sun.COM IN DAT_COUNT, /* num_segments */ 8979517SBill.Taylor@Sun.COM IN DAT_LMR_TRIPLET *, /* local_iov */ 8989517SBill.Taylor@Sun.COM IN DAT_DTO_COOKIE, /* user_cookie */ 8999517SBill.Taylor@Sun.COM IN DAT_COMPLETION_FLAGS); /* completion_flags */ 9009517SBill.Taylor@Sun.COM 9019517SBill.Taylor@Sun.COM extern DAT_RETURN 9029517SBill.Taylor@Sun.COM dapl_ep_post_recv( 9039517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_handle */ 9049517SBill.Taylor@Sun.COM IN DAT_COUNT, /* num_segments */ 9059517SBill.Taylor@Sun.COM IN DAT_LMR_TRIPLET *, /* local_iov */ 9069517SBill.Taylor@Sun.COM IN DAT_DTO_COOKIE, /* user_cookie */ 9079517SBill.Taylor@Sun.COM IN DAT_COMPLETION_FLAGS); /* completion_flags */ 9089517SBill.Taylor@Sun.COM 9099517SBill.Taylor@Sun.COM extern DAT_RETURN 9109517SBill.Taylor@Sun.COM dapl_ep_post_rdma_read( 9119517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_handle */ 9129517SBill.Taylor@Sun.COM IN DAT_COUNT, /* num_segments */ 9139517SBill.Taylor@Sun.COM IN DAT_LMR_TRIPLET *, /* local_iov */ 9149517SBill.Taylor@Sun.COM IN DAT_DTO_COOKIE, /* user_cookie */ 9159517SBill.Taylor@Sun.COM IN const DAT_RMR_TRIPLET *, /* remote_iov */ 9169517SBill.Taylor@Sun.COM IN DAT_COMPLETION_FLAGS); /* completion_flags */ 9179517SBill.Taylor@Sun.COM 9189517SBill.Taylor@Sun.COM extern DAT_RETURN 9199517SBill.Taylor@Sun.COM dapl_ep_post_rdma_write( 9209517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_handle */ 9219517SBill.Taylor@Sun.COM IN DAT_COUNT, /* num_segments */ 9229517SBill.Taylor@Sun.COM IN DAT_LMR_TRIPLET *, /* local_iov */ 9239517SBill.Taylor@Sun.COM IN DAT_DTO_COOKIE, /* user_cookie */ 9249517SBill.Taylor@Sun.COM IN const DAT_RMR_TRIPLET *, /* remote_iov */ 9259517SBill.Taylor@Sun.COM IN DAT_COMPLETION_FLAGS); /* completion_flags */ 9269517SBill.Taylor@Sun.COM 9279517SBill.Taylor@Sun.COM extern DAT_RETURN 9289517SBill.Taylor@Sun.COM dapl_ep_get_status( 9299517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_handle */ 9309517SBill.Taylor@Sun.COM OUT DAT_EP_STATE *, /* ep_state */ 9319517SBill.Taylor@Sun.COM OUT DAT_BOOLEAN *, /* in_dto_idle */ 9329517SBill.Taylor@Sun.COM OUT DAT_BOOLEAN *); /* out_dto_idle */ 9339517SBill.Taylor@Sun.COM 9349517SBill.Taylor@Sun.COM extern DAT_RETURN 9359517SBill.Taylor@Sun.COM dapl_ep_free(IN DAT_EP_HANDLE); /* ep_handle */ 9369517SBill.Taylor@Sun.COM 9379517SBill.Taylor@Sun.COM extern DAT_RETURN 9389517SBill.Taylor@Sun.COM dapl_ep_reset(IN DAT_EP_HANDLE); /* ep_handle */ 9399517SBill.Taylor@Sun.COM 9409517SBill.Taylor@Sun.COM 9419517SBill.Taylor@Sun.COM /* LMR functions */ 9429517SBill.Taylor@Sun.COM extern DAT_RETURN 9439517SBill.Taylor@Sun.COM dapl_lmr_create( 9449517SBill.Taylor@Sun.COM IN DAT_IA_HANDLE, /* ia_handle */ 9459517SBill.Taylor@Sun.COM IN DAT_MEM_TYPE, /* mem_type */ 9469517SBill.Taylor@Sun.COM IN DAT_REGION_DESCRIPTION, /* region_description */ 9479517SBill.Taylor@Sun.COM IN DAT_VLEN, /* length */ 9489517SBill.Taylor@Sun.COM IN DAT_PZ_HANDLE, /* pz_handle */ 9499517SBill.Taylor@Sun.COM IN DAT_MEM_PRIV_FLAGS, /* privileges */ 9509517SBill.Taylor@Sun.COM OUT DAT_LMR_HANDLE *, /* lmr_handle */ 9519517SBill.Taylor@Sun.COM OUT DAT_LMR_CONTEXT *, /* lmr_context */ 9529517SBill.Taylor@Sun.COM OUT DAT_RMR_CONTEXT *, /* rmr_context */ 9539517SBill.Taylor@Sun.COM OUT DAT_VLEN *, /* registered_length */ 9549517SBill.Taylor@Sun.COM OUT DAT_VADDR *); /* registered_address */ 9559517SBill.Taylor@Sun.COM 9569517SBill.Taylor@Sun.COM extern DAT_RETURN 9579517SBill.Taylor@Sun.COM dapl_lmr_query( 9589517SBill.Taylor@Sun.COM IN DAT_LMR_HANDLE, 9599517SBill.Taylor@Sun.COM IN DAT_LMR_PARAM_MASK, 9609517SBill.Taylor@Sun.COM OUT DAT_LMR_PARAM *); 9619517SBill.Taylor@Sun.COM 9629517SBill.Taylor@Sun.COM extern DAT_RETURN 9639517SBill.Taylor@Sun.COM dapl_lmr_free(IN DAT_LMR_HANDLE); 9649517SBill.Taylor@Sun.COM 9659517SBill.Taylor@Sun.COM 9669517SBill.Taylor@Sun.COM /* RMR Functions */ 9679517SBill.Taylor@Sun.COM extern DAT_RETURN 9689517SBill.Taylor@Sun.COM dapl_rmr_create( 9699517SBill.Taylor@Sun.COM IN DAT_PZ_HANDLE, /* pz_handle */ 9709517SBill.Taylor@Sun.COM OUT DAT_RMR_HANDLE *); /* rmr_handle */ 9719517SBill.Taylor@Sun.COM 9729517SBill.Taylor@Sun.COM extern DAT_RETURN 9739517SBill.Taylor@Sun.COM dapl_rmr_query( 9749517SBill.Taylor@Sun.COM IN DAT_RMR_HANDLE, /* rmr_handle */ 9759517SBill.Taylor@Sun.COM IN DAT_RMR_PARAM_MASK, /* rmr_args_mask */ 9769517SBill.Taylor@Sun.COM OUT DAT_RMR_PARAM *); /* rmr_args */ 9779517SBill.Taylor@Sun.COM 9789517SBill.Taylor@Sun.COM extern DAT_RETURN 9799517SBill.Taylor@Sun.COM dapl_rmr_bind( 9809517SBill.Taylor@Sun.COM IN DAT_RMR_HANDLE, /* rmr_handle */ 9819517SBill.Taylor@Sun.COM IN const DAT_LMR_TRIPLET *, /* lmr_triplet */ 9829517SBill.Taylor@Sun.COM IN DAT_MEM_PRIV_FLAGS, /* mem_priv */ 9839517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_handle */ 9849517SBill.Taylor@Sun.COM IN DAT_RMR_COOKIE, /* user_cookie */ 9859517SBill.Taylor@Sun.COM IN DAT_COMPLETION_FLAGS, /* completion_flags */ 9869517SBill.Taylor@Sun.COM INOUT DAT_RMR_CONTEXT *); /* context */ 9879517SBill.Taylor@Sun.COM 9889517SBill.Taylor@Sun.COM extern DAT_RETURN 9899517SBill.Taylor@Sun.COM dapl_rmr_free(IN DAT_RMR_HANDLE); 9909517SBill.Taylor@Sun.COM 9919517SBill.Taylor@Sun.COM 9929517SBill.Taylor@Sun.COM /* PSP Functions */ 9939517SBill.Taylor@Sun.COM extern DAT_RETURN 9949517SBill.Taylor@Sun.COM dapl_psp_create( 9959517SBill.Taylor@Sun.COM IN DAT_IA_HANDLE, /* ia_handle */ 9969517SBill.Taylor@Sun.COM IN DAT_CONN_QUAL, /* conn_qual */ 9979517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* evd_handle */ 9989517SBill.Taylor@Sun.COM IN DAT_PSP_FLAGS, /* psp_flags */ 9999517SBill.Taylor@Sun.COM OUT DAT_PSP_HANDLE *); /* psp_handle */ 10009517SBill.Taylor@Sun.COM 10019517SBill.Taylor@Sun.COM extern DAT_RETURN 10029517SBill.Taylor@Sun.COM dapl_psp_create_any( 10039517SBill.Taylor@Sun.COM IN DAT_IA_HANDLE, /* ia_handle */ 10049517SBill.Taylor@Sun.COM OUT DAT_CONN_QUAL *, /* conn_qual */ 10059517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* evd_handle */ 10069517SBill.Taylor@Sun.COM IN DAT_PSP_FLAGS, /* psp_flags */ 10079517SBill.Taylor@Sun.COM OUT DAT_PSP_HANDLE *); /* psp_handle */ 10089517SBill.Taylor@Sun.COM 10099517SBill.Taylor@Sun.COM extern DAT_RETURN 10109517SBill.Taylor@Sun.COM dapl_psp_query( 10119517SBill.Taylor@Sun.COM IN DAT_PSP_HANDLE, 10129517SBill.Taylor@Sun.COM IN DAT_PSP_PARAM_MASK, 10139517SBill.Taylor@Sun.COM OUT DAT_PSP_PARAM *); 10149517SBill.Taylor@Sun.COM 10159517SBill.Taylor@Sun.COM extern DAT_RETURN 10169517SBill.Taylor@Sun.COM dapl_psp_free(IN DAT_PSP_HANDLE); /* psp_handle */ 10179517SBill.Taylor@Sun.COM 10189517SBill.Taylor@Sun.COM 10199517SBill.Taylor@Sun.COM /* RSP Functions */ 10209517SBill.Taylor@Sun.COM extern DAT_RETURN 10219517SBill.Taylor@Sun.COM dapl_rsp_create( 10229517SBill.Taylor@Sun.COM IN DAT_IA_HANDLE, /* ia_handle */ 10239517SBill.Taylor@Sun.COM IN DAT_CONN_QUAL, /* conn_qual */ 10249517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_handle */ 10259517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* evd_handle */ 10269517SBill.Taylor@Sun.COM OUT DAT_RSP_HANDLE *); /* rsp_handle */ 10279517SBill.Taylor@Sun.COM 10289517SBill.Taylor@Sun.COM extern DAT_RETURN 10299517SBill.Taylor@Sun.COM dapl_rsp_query( 10309517SBill.Taylor@Sun.COM IN DAT_RSP_HANDLE, 10319517SBill.Taylor@Sun.COM IN DAT_RSP_PARAM_MASK, 10329517SBill.Taylor@Sun.COM OUT DAT_RSP_PARAM *); 10339517SBill.Taylor@Sun.COM 10349517SBill.Taylor@Sun.COM extern DAT_RETURN 10359517SBill.Taylor@Sun.COM dapl_rsp_free(IN DAT_RSP_HANDLE); /* rsp_handle */ 10369517SBill.Taylor@Sun.COM 10379517SBill.Taylor@Sun.COM 10389517SBill.Taylor@Sun.COM /* PZ Functions */ 10399517SBill.Taylor@Sun.COM extern DAT_RETURN 10409517SBill.Taylor@Sun.COM dapl_pz_create( 10419517SBill.Taylor@Sun.COM IN DAT_IA_HANDLE, /* ia_handle */ 10429517SBill.Taylor@Sun.COM OUT DAT_PZ_HANDLE *); /* pz_handle */ 10439517SBill.Taylor@Sun.COM 10449517SBill.Taylor@Sun.COM extern DAT_RETURN 10459517SBill.Taylor@Sun.COM dapl_pz_query( 10469517SBill.Taylor@Sun.COM IN DAT_PZ_HANDLE, /* pz_handle */ 10479517SBill.Taylor@Sun.COM IN DAT_PZ_PARAM_MASK, /* pz_args_mask */ 10489517SBill.Taylor@Sun.COM OUT DAT_PZ_PARAM *); /* pz_args */ 10499517SBill.Taylor@Sun.COM 10509517SBill.Taylor@Sun.COM extern DAT_RETURN 10519517SBill.Taylor@Sun.COM dapl_pz_free(IN DAT_PZ_HANDLE); /* pz_handle */ 10529517SBill.Taylor@Sun.COM 10539517SBill.Taylor@Sun.COM /* Non-coherent memory fucntions */ 10549517SBill.Taylor@Sun.COM 10559517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_lmr_sync_rdma_read( 10569517SBill.Taylor@Sun.COM IN DAT_IA_HANDLE, /* ia_handle */ 10579517SBill.Taylor@Sun.COM IN const DAT_LMR_TRIPLET *, /* local_segments */ 10589517SBill.Taylor@Sun.COM IN DAT_VLEN); /* num_segments */ 10599517SBill.Taylor@Sun.COM 10609517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_lmr_sync_rdma_write( 10619517SBill.Taylor@Sun.COM IN DAT_IA_HANDLE, /* ia_handle */ 10629517SBill.Taylor@Sun.COM IN const DAT_LMR_TRIPLET *, /* local_segments */ 10639517SBill.Taylor@Sun.COM IN DAT_VLEN); /* num_segments */ 10649517SBill.Taylor@Sun.COM 10659517SBill.Taylor@Sun.COM /* 10669517SBill.Taylor@Sun.COM * SRQ functions 10679517SBill.Taylor@Sun.COM */ 10689517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_ep_create_with_srq( 10699517SBill.Taylor@Sun.COM IN DAT_IA_HANDLE, /* ia_handle */ 10709517SBill.Taylor@Sun.COM IN DAT_PZ_HANDLE, /* pz_handle */ 10719517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* recv_evd_handle */ 10729517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* request_evd_handle */ 10739517SBill.Taylor@Sun.COM IN DAT_EVD_HANDLE, /* connect_evd_handle */ 10749517SBill.Taylor@Sun.COM IN DAT_SRQ_HANDLE, /* srq_handle */ 10759517SBill.Taylor@Sun.COM IN const DAT_EP_ATTR *, /* ep_attributes */ 10769517SBill.Taylor@Sun.COM OUT DAT_EP_HANDLE *); /* ep_handle */ 10779517SBill.Taylor@Sun.COM 10789517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_ep_recv_query( 10799517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_handle */ 10809517SBill.Taylor@Sun.COM OUT DAT_COUNT *, /* nbufs_allocated */ 10819517SBill.Taylor@Sun.COM OUT DAT_COUNT *); /* bufs_alloc_span */ 10829517SBill.Taylor@Sun.COM 10839517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_ep_set_watermark( 10849517SBill.Taylor@Sun.COM IN DAT_EP_HANDLE, /* ep_handle */ 10859517SBill.Taylor@Sun.COM IN DAT_COUNT, /* soft_high_watermark */ 10869517SBill.Taylor@Sun.COM IN DAT_COUNT); /* hard_high_watermark */ 10879517SBill.Taylor@Sun.COM 10889517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_srq_create( 10899517SBill.Taylor@Sun.COM IN DAT_IA_HANDLE, /* ia_handle */ 10909517SBill.Taylor@Sun.COM IN DAT_PZ_HANDLE, /* pz_handle */ 10919517SBill.Taylor@Sun.COM IN DAT_SRQ_ATTR *, /* srq_attr */ 10929517SBill.Taylor@Sun.COM OUT DAT_SRQ_HANDLE *); /* srq_handle */ 10939517SBill.Taylor@Sun.COM 10949517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_srq_free( 10959517SBill.Taylor@Sun.COM IN DAT_SRQ_HANDLE); /* srq_handle */ 10969517SBill.Taylor@Sun.COM 10979517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_srq_post_recv( 10989517SBill.Taylor@Sun.COM IN DAT_SRQ_HANDLE, /* srq_handle */ 10999517SBill.Taylor@Sun.COM IN DAT_COUNT, /* num_segments */ 11009517SBill.Taylor@Sun.COM IN DAT_LMR_TRIPLET *, /* local_iov */ 11019517SBill.Taylor@Sun.COM IN DAT_DTO_COOKIE); /* user_cookie */ 11029517SBill.Taylor@Sun.COM 11039517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_srq_query( 11049517SBill.Taylor@Sun.COM IN DAT_SRQ_HANDLE, /* srq_handle */ 11059517SBill.Taylor@Sun.COM IN DAT_SRQ_PARAM_MASK, /* srq_param_mask */ 11069517SBill.Taylor@Sun.COM OUT DAT_SRQ_PARAM *); /* srq_param */ 11079517SBill.Taylor@Sun.COM 11089517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_srq_resize( 11099517SBill.Taylor@Sun.COM IN DAT_SRQ_HANDLE, /* srq_handle */ 11109517SBill.Taylor@Sun.COM IN DAT_COUNT); /* srq_max_recv_dto */ 11119517SBill.Taylor@Sun.COM 11129517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_srq_set_lw( 11139517SBill.Taylor@Sun.COM IN DAT_SRQ_HANDLE, /* srq_handle */ 11149517SBill.Taylor@Sun.COM IN DAT_COUNT); /* low_watermark */ 11159517SBill.Taylor@Sun.COM 11169517SBill.Taylor@Sun.COM 11179517SBill.Taylor@Sun.COM /* 11189517SBill.Taylor@Sun.COM * DAPL internal utility function prototpyes 11199517SBill.Taylor@Sun.COM */ 11209517SBill.Taylor@Sun.COM extern void 11219517SBill.Taylor@Sun.COM dapl_llist_init_head(DAPL_LLIST_HEAD *head); 11229517SBill.Taylor@Sun.COM 11239517SBill.Taylor@Sun.COM extern void 11249517SBill.Taylor@Sun.COM dapl_llist_init_entry(DAPL_LLIST_ENTRY *entry); 11259517SBill.Taylor@Sun.COM 11269517SBill.Taylor@Sun.COM extern DAT_BOOLEAN 11279517SBill.Taylor@Sun.COM dapl_llist_is_empty(DAPL_LLIST_HEAD *head); 11289517SBill.Taylor@Sun.COM 11299517SBill.Taylor@Sun.COM extern void 11309517SBill.Taylor@Sun.COM dapl_llist_add_head( 11319517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD *head, 11329517SBill.Taylor@Sun.COM DAPL_LLIST_ENTRY *entry, 11339517SBill.Taylor@Sun.COM void *data); 11349517SBill.Taylor@Sun.COM 11359517SBill.Taylor@Sun.COM extern void 11369517SBill.Taylor@Sun.COM dapl_llist_add_tail( 11379517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD *head, 11389517SBill.Taylor@Sun.COM DAPL_LLIST_ENTRY *entry, 11399517SBill.Taylor@Sun.COM void *data); 11409517SBill.Taylor@Sun.COM 11419517SBill.Taylor@Sun.COM extern void 11429517SBill.Taylor@Sun.COM dapl_llist_add_entry( 11439517SBill.Taylor@Sun.COM DAPL_LLIST_HEAD *head, 11449517SBill.Taylor@Sun.COM DAPL_LLIST_ENTRY *entry, 11459517SBill.Taylor@Sun.COM DAPL_LLIST_ENTRY *new_entry, 11469517SBill.Taylor@Sun.COM void *data); 11479517SBill.Taylor@Sun.COM 11489517SBill.Taylor@Sun.COM extern void * 11499517SBill.Taylor@Sun.COM dapl_llist_remove_head(DAPL_LLIST_HEAD *head); 11509517SBill.Taylor@Sun.COM 11519517SBill.Taylor@Sun.COM extern void * 11529517SBill.Taylor@Sun.COM dapl_llist_remove_tail(DAPL_LLIST_HEAD *head); 11539517SBill.Taylor@Sun.COM 11549517SBill.Taylor@Sun.COM extern void * 11559517SBill.Taylor@Sun.COM dapl_llist_remove_entry(DAPL_LLIST_HEAD *head, 11569517SBill.Taylor@Sun.COM DAPL_LLIST_ENTRY *entry); 11579517SBill.Taylor@Sun.COM 11589517SBill.Taylor@Sun.COM extern void * 11599517SBill.Taylor@Sun.COM dapl_llist_peek_head(DAPL_LLIST_HEAD *head); 11609517SBill.Taylor@Sun.COM 11619517SBill.Taylor@Sun.COM extern void * 11629517SBill.Taylor@Sun.COM dapl_llist_next_entry( 11639517SBill.Taylor@Sun.COM IN DAPL_LLIST_HEAD *head, 11649517SBill.Taylor@Sun.COM IN DAPL_LLIST_ENTRY *cur_ent); 11659517SBill.Taylor@Sun.COM 11669517SBill.Taylor@Sun.COM extern void 11679517SBill.Taylor@Sun.COM dapl_llist_debug_print_list(DAPL_LLIST_HEAD *head); 11689517SBill.Taylor@Sun.COM 11699517SBill.Taylor@Sun.COM #ifdef __cplusplus 11709517SBill.Taylor@Sun.COM } 11719517SBill.Taylor@Sun.COM #endif 11729517SBill.Taylor@Sun.COM 11739517SBill.Taylor@Sun.COM #endif /* _DAPL_H_ */ 1174