1*7c478bd9Sstevel@tonic-gate /* 2*7c478bd9Sstevel@tonic-gate * CDDL HEADER START 3*7c478bd9Sstevel@tonic-gate * 4*7c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*7c478bd9Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 6*7c478bd9Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 7*7c478bd9Sstevel@tonic-gate * with the License. 8*7c478bd9Sstevel@tonic-gate * 9*7c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*7c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 11*7c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 12*7c478bd9Sstevel@tonic-gate * and limitations under the License. 13*7c478bd9Sstevel@tonic-gate * 14*7c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 15*7c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*7c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 17*7c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 18*7c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 19*7c478bd9Sstevel@tonic-gate * 20*7c478bd9Sstevel@tonic-gate * CDDL HEADER END 21*7c478bd9Sstevel@tonic-gate */ 22*7c478bd9Sstevel@tonic-gate /* 23*7c478bd9Sstevel@tonic-gate * Copyright (c) 1998-2001 by Sun Microsystems, Inc. 24*7c478bd9Sstevel@tonic-gate * All rights reserved. 25*7c478bd9Sstevel@tonic-gate */ 26*7c478bd9Sstevel@tonic-gate 27*7c478bd9Sstevel@tonic-gate #ifndef _SYS_RSM_RSMPI_H 28*7c478bd9Sstevel@tonic-gate #define _SYS_RSM_RSMPI_H 29*7c478bd9Sstevel@tonic-gate 30*7c478bd9Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 31*7c478bd9Sstevel@tonic-gate 32*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus 33*7c478bd9Sstevel@tonic-gate extern "C" { 34*7c478bd9Sstevel@tonic-gate #endif 35*7c478bd9Sstevel@tonic-gate 36*7c478bd9Sstevel@tonic-gate #ifndef _KERNEL 37*7c478bd9Sstevel@tonic-gate typedef void * ddi_as_handle_t; 38*7c478bd9Sstevel@tonic-gate #endif 39*7c478bd9Sstevel@tonic-gate 40*7c478bd9Sstevel@tonic-gate #include <sys/sunddi.h> 41*7c478bd9Sstevel@tonic-gate #include <sys/rsm/rsm_common.h> 42*7c478bd9Sstevel@tonic-gate 43*7c478bd9Sstevel@tonic-gate struct __rsm_resource_callback_arg; 44*7c478bd9Sstevel@tonic-gate typedef struct __rsm_resource_callback_arg *rsm_resource_callback_arg_t; 45*7c478bd9Sstevel@tonic-gate 46*7c478bd9Sstevel@tonic-gate typedef void (*rsm_resource_callback_t)(rsm_resource_callback_arg_t); 47*7c478bd9Sstevel@tonic-gate 48*7c478bd9Sstevel@tonic-gate struct __rsm_callback_arg; 49*7c478bd9Sstevel@tonic-gate typedef struct __rsm_callback_arg *rsm_callback_arg_t; 50*7c478bd9Sstevel@tonic-gate 51*7c478bd9Sstevel@tonic-gate typedef void (*rsm_callback_t)(rsm_callback_arg_t); 52*7c478bd9Sstevel@tonic-gate 53*7c478bd9Sstevel@tonic-gate /* Values for resource callback function pointer */ 54*7c478bd9Sstevel@tonic-gate #define RSM_RESOURCE_SLEEP (rsm_resource_callback_t)0 55*7c478bd9Sstevel@tonic-gate #define RSM_RESOURCE_DONTWAIT (rsm_resource_callback_t)-1 56*7c478bd9Sstevel@tonic-gate 57*7c478bd9Sstevel@tonic-gate /* rsm_seg_create() flags values */ 58*7c478bd9Sstevel@tonic-gate #define RSM_ALLOW_UNBIND_REBIND 0x01 59*7c478bd9Sstevel@tonic-gate 60*7c478bd9Sstevel@tonic-gate typedef uint_t rsm_intr_t; 61*7c478bd9Sstevel@tonic-gate typedef rsm_intr_t rsm_intr_service_t; 62*7c478bd9Sstevel@tonic-gate /* The following definitions used to describe the ranges fro rsm_intr_t */ 63*7c478bd9Sstevel@tonic-gate #define RSM_INTR_T_DRV_BASE 0 64*7c478bd9Sstevel@tonic-gate #define RSM_INTR_T_DRV_END 0x3F 65*7c478bd9Sstevel@tonic-gate #define RSM_INTR_T_FRM_BASE 0x40 66*7c478bd9Sstevel@tonic-gate #define RSM_INTR_T_FRM_END 0x4F 67*7c478bd9Sstevel@tonic-gate #define RSM_INTR_T_RESERVED_BASE 0x50 68*7c478bd9Sstevel@tonic-gate #define RSM_INTR_T_RESERVED_END 0x5F 69*7c478bd9Sstevel@tonic-gate #define RSM_INTR_T_SUN_BASE 0x60 70*7c478bd9Sstevel@tonic-gate #define RSM_INTR_T_SUN_END 0xDF 71*7c478bd9Sstevel@tonic-gate #define RSM_INTR_T_USR_BASE 0xE0 72*7c478bd9Sstevel@tonic-gate #define RSM_INTR_T_USR_END 0xFF 73*7c478bd9Sstevel@tonic-gate #define RSM_INTR_T_NSVC 0x100 74*7c478bd9Sstevel@tonic-gate 75*7c478bd9Sstevel@tonic-gate /* kstat's ks_name for RSMPI controller drivers */ 76*7c478bd9Sstevel@tonic-gate #define RSM_KS_NAME "rsmpi_stat" 77*7c478bd9Sstevel@tonic-gate 78*7c478bd9Sstevel@tonic-gate /* named kstat component names */ 79*7c478bd9Sstevel@tonic-gate #define RSM_KS_CTLR_STATE "ctlr_state" /* CHAR */ 80*7c478bd9Sstevel@tonic-gate #define RSM_KS_ADDR "addr" /* UINT64 */ 81*7c478bd9Sstevel@tonic-gate #define RSM_KS_EX_MEMSEGS "ex_memsegs" /* UINT32 */ 82*7c478bd9Sstevel@tonic-gate #define RSM_KS_EX_MEMSEGS_PUB "ex_memsegs_pub" /* UINT32 */ 83*7c478bd9Sstevel@tonic-gate #define RSM_KS_EX_MEMSEGS_CON "ex_memsegs_con" /* UINT32 */ 84*7c478bd9Sstevel@tonic-gate #define RSM_KS_BYTES_BOUND "bytes_bound" /* UINT64 */ 85*7c478bd9Sstevel@tonic-gate #define RSM_KS_IM_MEMSEGS_CON "im_memsegs_con" /* UINT32 */ 86*7c478bd9Sstevel@tonic-gate #define RSM_KS_SENDQS "sendqs" /* UINT64 */ 87*7c478bd9Sstevel@tonic-gate #define RSM_KS_HANDLERS "handlers" /* UINT64 */ 88*7c478bd9Sstevel@tonic-gate 89*7c478bd9Sstevel@tonic-gate /* The following are the possible values of RSM_KS_CTLR_STATE */ 90*7c478bd9Sstevel@tonic-gate #define RSM_AE_CTLR_DOWN "rsm_down" 91*7c478bd9Sstevel@tonic-gate #define RSM_AE_CTLR_UP "rsm_up" 92*7c478bd9Sstevel@tonic-gate 93*7c478bd9Sstevel@tonic-gate 94*7c478bd9Sstevel@tonic-gate struct __rsm_send_q_handle; 95*7c478bd9Sstevel@tonic-gate typedef struct __rsm_send_q_handle *rsm_send_q_handle_t; 96*7c478bd9Sstevel@tonic-gate 97*7c478bd9Sstevel@tonic-gate /* rsm_intr_send_q_create flags values */ 98*7c478bd9Sstevel@tonic-gate #define RSM_INTR_SEND_Q_NO_FENCE 0x1 99*7c478bd9Sstevel@tonic-gate #define RSM_INTR_SEND_Q_FULL_FAIL 0x2 100*7c478bd9Sstevel@tonic-gate #define RSM_INTR_SEND_Q_UNRELIABLE 0x4 101*7c478bd9Sstevel@tonic-gate 102*7c478bd9Sstevel@tonic-gate typedef struct { 103*7c478bd9Sstevel@tonic-gate void *is_data; 104*7c478bd9Sstevel@tonic-gate size_t is_size; 105*7c478bd9Sstevel@tonic-gate int is_flags; 106*7c478bd9Sstevel@tonic-gate clock_t is_wait; 107*7c478bd9Sstevel@tonic-gate } rsm_send_t; 108*7c478bd9Sstevel@tonic-gate 109*7c478bd9Sstevel@tonic-gate /* rsm_send_t flags values */ 110*7c478bd9Sstevel@tonic-gate #define RSM_INTR_SEND_QUEUE 0x1 111*7c478bd9Sstevel@tonic-gate #define RSM_INTR_SEND_DELIVER 0x2 112*7c478bd9Sstevel@tonic-gate #define RSM_INTR_SEND_POLL 0x4 113*7c478bd9Sstevel@tonic-gate #define RSM_INTR_SEND_SLEEP 0x8 114*7c478bd9Sstevel@tonic-gate #define RSM_INTR_SEND_LOWER_FENCE 0x10 115*7c478bd9Sstevel@tonic-gate 116*7c478bd9Sstevel@tonic-gate typedef enum { 117*7c478bd9Sstevel@tonic-gate RSM_INTR_HAND_UNCLAIMED = 0, 118*7c478bd9Sstevel@tonic-gate RSM_INTR_HAND_CLAIMED = 1, 119*7c478bd9Sstevel@tonic-gate RSM_INTR_HAND_CLAIMED_EXCLUSIVE = 2 120*7c478bd9Sstevel@tonic-gate } rsm_intr_hand_ret_t; 121*7c478bd9Sstevel@tonic-gate 122*7c478bd9Sstevel@tonic-gate typedef enum { 123*7c478bd9Sstevel@tonic-gate RSM_INTR_Q_OP_CREATE, 124*7c478bd9Sstevel@tonic-gate RSM_INTR_Q_OP_CONFIGURE, 125*7c478bd9Sstevel@tonic-gate RSM_INTR_Q_OP_DESTROY, 126*7c478bd9Sstevel@tonic-gate RSM_INTR_Q_OP_RECEIVE, 127*7c478bd9Sstevel@tonic-gate RSM_INTR_Q_OP_DROP 128*7c478bd9Sstevel@tonic-gate } rsm_intr_q_op_t; 129*7c478bd9Sstevel@tonic-gate 130*7c478bd9Sstevel@tonic-gate struct __rsm_intr_hand_arg; 131*7c478bd9Sstevel@tonic-gate typedef struct __rsm_intr_hand_arg *rsm_intr_hand_arg_t; 132*7c478bd9Sstevel@tonic-gate 133*7c478bd9Sstevel@tonic-gate struct __rsm_registry_item; 134*7c478bd9Sstevel@tonic-gate typedef struct __rsm_registry_item *rsm_registry_item_t; 135*7c478bd9Sstevel@tonic-gate 136*7c478bd9Sstevel@tonic-gate typedef int rsm_intr_pri_t; 137*7c478bd9Sstevel@tonic-gate 138*7c478bd9Sstevel@tonic-gate typedef struct { 139*7c478bd9Sstevel@tonic-gate rsm_addr_t ae_addr; /* node hwaddr allowed access */ 140*7c478bd9Sstevel@tonic-gate rsm_permission_t ae_permission; /* permissions for node */ 141*7c478bd9Sstevel@tonic-gate } rsm_access_entry_t; 142*7c478bd9Sstevel@tonic-gate /* 143*7c478bd9Sstevel@tonic-gate * ae_addr can be set to the following value to mean that the permissions 144*7c478bd9Sstevel@tonic-gate * should apply to all nodes accessible through this RSM controller 145*7c478bd9Sstevel@tonic-gate */ 146*7c478bd9Sstevel@tonic-gate #define RSM_ACCESS_PUBLIC 0xFFFF 147*7c478bd9Sstevel@tonic-gate 148*7c478bd9Sstevel@tonic-gate struct __rsm_controller_handle; 149*7c478bd9Sstevel@tonic-gate typedef struct __rsm_controller_handle *rsm_controller_handle_t; 150*7c478bd9Sstevel@tonic-gate 151*7c478bd9Sstevel@tonic-gate /* 152*7c478bd9Sstevel@tonic-gate * The following typedef is used to represent a controller object. 153*7c478bd9Sstevel@tonic-gate */ 154*7c478bd9Sstevel@tonic-gate typedef struct rsm_controller_object { 155*7c478bd9Sstevel@tonic-gate struct rsm_ops *ops; 156*7c478bd9Sstevel@tonic-gate rsm_controller_handle_t handle; 157*7c478bd9Sstevel@tonic-gate } rsm_controller_object_t; 158*7c478bd9Sstevel@tonic-gate 159*7c478bd9Sstevel@tonic-gate typedef rsm_intr_hand_ret_t (*rsm_intr_hand_t)( 160*7c478bd9Sstevel@tonic-gate rsm_controller_object_t *controller, 161*7c478bd9Sstevel@tonic-gate rsm_intr_q_op_t operation, 162*7c478bd9Sstevel@tonic-gate rsm_addr_t sender, 163*7c478bd9Sstevel@tonic-gate void *data, 164*7c478bd9Sstevel@tonic-gate size_t size, 165*7c478bd9Sstevel@tonic-gate rsm_intr_hand_arg_t arg); 166*7c478bd9Sstevel@tonic-gate 167*7c478bd9Sstevel@tonic-gate typedef struct { 168*7c478bd9Sstevel@tonic-gate enum { RSM_MEM_VADDR, 169*7c478bd9Sstevel@tonic-gate RSM_MEM_BUF, 170*7c478bd9Sstevel@tonic-gate RSM_MEM_HANDLE, 171*7c478bd9Sstevel@tonic-gate RSM_MEM_INVALID } ms_type; 172*7c478bd9Sstevel@tonic-gate union { 173*7c478bd9Sstevel@tonic-gate struct { 174*7c478bd9Sstevel@tonic-gate void *vaddr; 175*7c478bd9Sstevel@tonic-gate size_t length; 176*7c478bd9Sstevel@tonic-gate ddi_as_handle_t as; 177*7c478bd9Sstevel@tonic-gate } vr; 178*7c478bd9Sstevel@tonic-gate struct buf *bp; 179*7c478bd9Sstevel@tonic-gate rsm_memseg_export_handle_t handle; 180*7c478bd9Sstevel@tonic-gate } ms_memory; 181*7c478bd9Sstevel@tonic-gate #define ms_bp ms_memory.bp 182*7c478bd9Sstevel@tonic-gate #define ms_vaddr ms_memory.vr.vaddr 183*7c478bd9Sstevel@tonic-gate #define ms_length ms_memory.vr.length 184*7c478bd9Sstevel@tonic-gate #define ms_as ms_memory.vr.as 185*7c478bd9Sstevel@tonic-gate } rsm_memory_local_t; 186*7c478bd9Sstevel@tonic-gate 187*7c478bd9Sstevel@tonic-gate typedef struct { 188*7c478bd9Sstevel@tonic-gate rsm_memory_local_t local_mem; 189*7c478bd9Sstevel@tonic-gate size_t local_offset; 190*7c478bd9Sstevel@tonic-gate rsm_memseg_import_handle_t remote_handle; 191*7c478bd9Sstevel@tonic-gate size_t remote_offset; 192*7c478bd9Sstevel@tonic-gate size_t transfer_length; 193*7c478bd9Sstevel@tonic-gate } rsmpi_iovec_t; 194*7c478bd9Sstevel@tonic-gate 195*7c478bd9Sstevel@tonic-gate typedef struct { 196*7c478bd9Sstevel@tonic-gate ulong_t io_request_count; /* size of iovec array */ 197*7c478bd9Sstevel@tonic-gate ulong_t io_residual_count; /* zero for success */ 198*7c478bd9Sstevel@tonic-gate uio_seg_t io_segflg; /* user/kernel addr */ 199*7c478bd9Sstevel@tonic-gate rsmpi_iovec_t *iovec; /* ptr to array */ 200*7c478bd9Sstevel@tonic-gate } rsmpi_scat_gath_t; 201*7c478bd9Sstevel@tonic-gate 202*7c478bd9Sstevel@tonic-gate typedef struct { 203*7c478bd9Sstevel@tonic-gate char *attr_name; 204*7c478bd9Sstevel@tonic-gate rsm_addr_t attr_controller_addr; 205*7c478bd9Sstevel@tonic-gate uint_t attr_direct_access_sizes; 206*7c478bd9Sstevel@tonic-gate uint_t attr_atomic_sizes; 207*7c478bd9Sstevel@tonic-gate uint_t attr_error_sizes; 208*7c478bd9Sstevel@tonic-gate uint_t attr_error_behavior; 209*7c478bd9Sstevel@tonic-gate boolean_t attr_mmu_protections; 210*7c478bd9Sstevel@tonic-gate size_t attr_page_size; 211*7c478bd9Sstevel@tonic-gate size_t attr_max_export_segment_size; 212*7c478bd9Sstevel@tonic-gate size_t attr_tot_export_segment_size; 213*7c478bd9Sstevel@tonic-gate ulong_t attr_max_export_segments; 214*7c478bd9Sstevel@tonic-gate size_t attr_max_import_map_size; 215*7c478bd9Sstevel@tonic-gate size_t attr_tot_import_map_size; 216*7c478bd9Sstevel@tonic-gate ulong_t attr_max_import_segments; 217*7c478bd9Sstevel@tonic-gate boolean_t attr_io_space_exportable; 218*7c478bd9Sstevel@tonic-gate boolean_t attr_imported_space_ioable; 219*7c478bd9Sstevel@tonic-gate boolean_t attr_intr_sender_ident; 220*7c478bd9Sstevel@tonic-gate size_t attr_intr_data_size_max; 221*7c478bd9Sstevel@tonic-gate uint_t attr_intr_data_align; 222*7c478bd9Sstevel@tonic-gate boolean_t attr_intr_piggyback; 223*7c478bd9Sstevel@tonic-gate boolean_t attr_resource_callbacks; 224*7c478bd9Sstevel@tonic-gate } rsm_controller_attr_t; 225*7c478bd9Sstevel@tonic-gate 226*7c478bd9Sstevel@tonic-gate /* 227*7c478bd9Sstevel@tonic-gate * The following three defines are possible values for attr_error_behavior 228*7c478bd9Sstevel@tonic-gate * field of the rsm_controller_attr_t struct. 229*7c478bd9Sstevel@tonic-gate */ 230*7c478bd9Sstevel@tonic-gate #define RSM_ERR_NOCHANGE 0 231*7c478bd9Sstevel@tonic-gate #define RSM_ERR_ZEROES 0x1 232*7c478bd9Sstevel@tonic-gate #define RSM_ERR_RANDOM 0x2 233*7c478bd9Sstevel@tonic-gate 234*7c478bd9Sstevel@tonic-gate typedef struct rsm_ops { 235*7c478bd9Sstevel@tonic-gate 236*7c478bd9Sstevel@tonic-gate /* 237*7c478bd9Sstevel@tonic-gate * structure revision number: 238*7c478bd9Sstevel@tonic-gate */ 239*7c478bd9Sstevel@tonic-gate uint_t rsm_version; 240*7c478bd9Sstevel@tonic-gate 241*7c478bd9Sstevel@tonic-gate /* 242*7c478bd9Sstevel@tonic-gate * export side memory segment operations: 243*7c478bd9Sstevel@tonic-gate */ 244*7c478bd9Sstevel@tonic-gate int (*rsm_seg_create) 245*7c478bd9Sstevel@tonic-gate (rsm_controller_handle_t controller, 246*7c478bd9Sstevel@tonic-gate rsm_memseg_export_handle_t *memseg, 247*7c478bd9Sstevel@tonic-gate size_t size, 248*7c478bd9Sstevel@tonic-gate uint_t flags, 249*7c478bd9Sstevel@tonic-gate rsm_memory_local_t *memory, 250*7c478bd9Sstevel@tonic-gate rsm_resource_callback_t callback, 251*7c478bd9Sstevel@tonic-gate rsm_resource_callback_arg_t callback_arg); 252*7c478bd9Sstevel@tonic-gate int (*rsm_seg_destroy) 253*7c478bd9Sstevel@tonic-gate (rsm_memseg_export_handle_t handle); 254*7c478bd9Sstevel@tonic-gate int (*rsm_bind) 255*7c478bd9Sstevel@tonic-gate (rsm_memseg_export_handle_t memseg, 256*7c478bd9Sstevel@tonic-gate off_t offset, 257*7c478bd9Sstevel@tonic-gate rsm_memory_local_t *memory, 258*7c478bd9Sstevel@tonic-gate rsm_resource_callback_t callback, 259*7c478bd9Sstevel@tonic-gate rsm_resource_callback_arg_t callback_arg); 260*7c478bd9Sstevel@tonic-gate int (*rsm_unbind) 261*7c478bd9Sstevel@tonic-gate (rsm_memseg_export_handle_t memseg, 262*7c478bd9Sstevel@tonic-gate off_t offset, 263*7c478bd9Sstevel@tonic-gate size_t length); 264*7c478bd9Sstevel@tonic-gate int (*rsm_rebind) 265*7c478bd9Sstevel@tonic-gate (rsm_memseg_export_handle_t memseg, 266*7c478bd9Sstevel@tonic-gate off_t offset, 267*7c478bd9Sstevel@tonic-gate rsm_memory_local_t *memory, 268*7c478bd9Sstevel@tonic-gate rsm_resource_callback_t callback, 269*7c478bd9Sstevel@tonic-gate rsm_resource_callback_arg_t callback_arg); 270*7c478bd9Sstevel@tonic-gate int (*rsm_publish) 271*7c478bd9Sstevel@tonic-gate (rsm_memseg_export_handle_t memseg, 272*7c478bd9Sstevel@tonic-gate rsm_access_entry_t access_list[], 273*7c478bd9Sstevel@tonic-gate uint_t access_list_length, 274*7c478bd9Sstevel@tonic-gate rsm_memseg_id_t segment_id, 275*7c478bd9Sstevel@tonic-gate rsm_resource_callback_t callback, 276*7c478bd9Sstevel@tonic-gate rsm_resource_callback_arg_t callback_arg); 277*7c478bd9Sstevel@tonic-gate int (*rsm_unpublish) 278*7c478bd9Sstevel@tonic-gate (rsm_memseg_export_handle_t memseg); 279*7c478bd9Sstevel@tonic-gate int (*rsm_republish) 280*7c478bd9Sstevel@tonic-gate (rsm_memseg_export_handle_t memseg, 281*7c478bd9Sstevel@tonic-gate rsm_access_entry_t access_list[], 282*7c478bd9Sstevel@tonic-gate uint_t access_list_length, 283*7c478bd9Sstevel@tonic-gate rsm_resource_callback_t callback, 284*7c478bd9Sstevel@tonic-gate rsm_resource_callback_arg_t callback_arg); 285*7c478bd9Sstevel@tonic-gate 286*7c478bd9Sstevel@tonic-gate /* 287*7c478bd9Sstevel@tonic-gate * import side memory segment operations 288*7c478bd9Sstevel@tonic-gate */ 289*7c478bd9Sstevel@tonic-gate int (*rsm_connect) 290*7c478bd9Sstevel@tonic-gate (rsm_controller_handle_t controller, 291*7c478bd9Sstevel@tonic-gate rsm_addr_t addr, 292*7c478bd9Sstevel@tonic-gate rsm_memseg_id_t segment_id, 293*7c478bd9Sstevel@tonic-gate rsm_memseg_import_handle_t *im_memseg); 294*7c478bd9Sstevel@tonic-gate 295*7c478bd9Sstevel@tonic-gate int (*rsm_disconnect) 296*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg); 297*7c478bd9Sstevel@tonic-gate 298*7c478bd9Sstevel@tonic-gate /* 299*7c478bd9Sstevel@tonic-gate * import side memory segment operations (read access functions): 300*7c478bd9Sstevel@tonic-gate */ 301*7c478bd9Sstevel@tonic-gate int (* rsm_get8) 302*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 303*7c478bd9Sstevel@tonic-gate off_t offset, 304*7c478bd9Sstevel@tonic-gate uint8_t *datap, 305*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 306*7c478bd9Sstevel@tonic-gate boolean_t byte_swap); 307*7c478bd9Sstevel@tonic-gate int (* rsm_get16) 308*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 309*7c478bd9Sstevel@tonic-gate off_t offset, 310*7c478bd9Sstevel@tonic-gate uint16_t *datap, 311*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 312*7c478bd9Sstevel@tonic-gate boolean_t byte_swap); 313*7c478bd9Sstevel@tonic-gate int (* rsm_get32) 314*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 315*7c478bd9Sstevel@tonic-gate off_t offset, 316*7c478bd9Sstevel@tonic-gate uint32_t *datap, 317*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 318*7c478bd9Sstevel@tonic-gate boolean_t byte_swap); 319*7c478bd9Sstevel@tonic-gate int (* rsm_get64) 320*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 321*7c478bd9Sstevel@tonic-gate off_t offset, 322*7c478bd9Sstevel@tonic-gate uint64_t *datap, 323*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 324*7c478bd9Sstevel@tonic-gate boolean_t byte_swap); 325*7c478bd9Sstevel@tonic-gate int (* rsm_get) 326*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 327*7c478bd9Sstevel@tonic-gate off_t offset, 328*7c478bd9Sstevel@tonic-gate void *datap, 329*7c478bd9Sstevel@tonic-gate size_t length); 330*7c478bd9Sstevel@tonic-gate 331*7c478bd9Sstevel@tonic-gate /* 332*7c478bd9Sstevel@tonic-gate * import side memory segment operations (write access functions) 333*7c478bd9Sstevel@tonic-gate */ 334*7c478bd9Sstevel@tonic-gate int (* rsm_put8) 335*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 336*7c478bd9Sstevel@tonic-gate off_t offset, 337*7c478bd9Sstevel@tonic-gate uint8_t *datap, 338*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 339*7c478bd9Sstevel@tonic-gate boolean_t byte_swap); 340*7c478bd9Sstevel@tonic-gate int (* rsm_put16) 341*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 342*7c478bd9Sstevel@tonic-gate off_t offset, 343*7c478bd9Sstevel@tonic-gate uint16_t *datap, 344*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 345*7c478bd9Sstevel@tonic-gate boolean_t byte_swap); 346*7c478bd9Sstevel@tonic-gate int (* rsm_put32) 347*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 348*7c478bd9Sstevel@tonic-gate off_t offset, 349*7c478bd9Sstevel@tonic-gate uint32_t *datap, 350*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 351*7c478bd9Sstevel@tonic-gate boolean_t byte_swap); 352*7c478bd9Sstevel@tonic-gate int (* rsm_put64) 353*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 354*7c478bd9Sstevel@tonic-gate off_t offset, 355*7c478bd9Sstevel@tonic-gate uint64_t *datap, 356*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 357*7c478bd9Sstevel@tonic-gate boolean_t byte_swap); 358*7c478bd9Sstevel@tonic-gate int (* rsm_put) 359*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 360*7c478bd9Sstevel@tonic-gate off_t offset, 361*7c478bd9Sstevel@tonic-gate void *datap, 362*7c478bd9Sstevel@tonic-gate size_t length); 363*7c478bd9Sstevel@tonic-gate 364*7c478bd9Sstevel@tonic-gate /* 365*7c478bd9Sstevel@tonic-gate * import side memory segment operations (mapping) 366*7c478bd9Sstevel@tonic-gate */ 367*7c478bd9Sstevel@tonic-gate int (*rsm_map)(rsm_memseg_import_handle_t im_memseg, 368*7c478bd9Sstevel@tonic-gate off_t offset, 369*7c478bd9Sstevel@tonic-gate size_t len, 370*7c478bd9Sstevel@tonic-gate size_t *maplen, 371*7c478bd9Sstevel@tonic-gate dev_info_t **dipp, 372*7c478bd9Sstevel@tonic-gate uint_t *register_number, 373*7c478bd9Sstevel@tonic-gate off_t *register_offset, 374*7c478bd9Sstevel@tonic-gate rsm_resource_callback_t callback, 375*7c478bd9Sstevel@tonic-gate rsm_resource_callback_arg_t callback_arg); 376*7c478bd9Sstevel@tonic-gate 377*7c478bd9Sstevel@tonic-gate int (*rsm_unmap) 378*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg); 379*7c478bd9Sstevel@tonic-gate 380*7c478bd9Sstevel@tonic-gate /* 381*7c478bd9Sstevel@tonic-gate * import side memory segment operations (barriers): 382*7c478bd9Sstevel@tonic-gate */ 383*7c478bd9Sstevel@tonic-gate int (* rsm_open_barrier_region) 384*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t region, 385*7c478bd9Sstevel@tonic-gate rsm_barrier_t *barrier); 386*7c478bd9Sstevel@tonic-gate int (* rsm_open_barrier_regions) 387*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t regions[], 388*7c478bd9Sstevel@tonic-gate uint_t num_regions, 389*7c478bd9Sstevel@tonic-gate rsm_barrier_t *barrier); 390*7c478bd9Sstevel@tonic-gate int (* rsm_open_barrier_node) 391*7c478bd9Sstevel@tonic-gate (rsm_controller_handle_t controller, 392*7c478bd9Sstevel@tonic-gate rsm_addr_t addr, 393*7c478bd9Sstevel@tonic-gate rsm_barrier_t *barrier); 394*7c478bd9Sstevel@tonic-gate int (* rsm_open_barrier_ctrl) 395*7c478bd9Sstevel@tonic-gate (rsm_controller_handle_t controller, 396*7c478bd9Sstevel@tonic-gate rsm_barrier_t *barrier); 397*7c478bd9Sstevel@tonic-gate int (* rsm_open_barrier_region_thr) 398*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t region, 399*7c478bd9Sstevel@tonic-gate rsm_barrier_t *barrier); 400*7c478bd9Sstevel@tonic-gate int (* rsm_open_barrier_regions_thr) 401*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t regions[], 402*7c478bd9Sstevel@tonic-gate uint_t num_regions, 403*7c478bd9Sstevel@tonic-gate rsm_barrier_t *barrier); 404*7c478bd9Sstevel@tonic-gate int (* rsm_open_barrier_node_thr) 405*7c478bd9Sstevel@tonic-gate (rsm_controller_handle_t controller, 406*7c478bd9Sstevel@tonic-gate rsm_addr_t addr, 407*7c478bd9Sstevel@tonic-gate rsm_barrier_t *barrier); 408*7c478bd9Sstevel@tonic-gate int (* rsm_open_barrier_ctrl_thr) 409*7c478bd9Sstevel@tonic-gate (rsm_controller_handle_t controller, 410*7c478bd9Sstevel@tonic-gate rsm_barrier_t *barrier); 411*7c478bd9Sstevel@tonic-gate int (* rsm_close_barrier) 412*7c478bd9Sstevel@tonic-gate (rsm_barrier_t *barrier); 413*7c478bd9Sstevel@tonic-gate int (* rsm_reopen_barrier) 414*7c478bd9Sstevel@tonic-gate (rsm_barrier_t *barrier); 415*7c478bd9Sstevel@tonic-gate int (* rsm_order_barrier) 416*7c478bd9Sstevel@tonic-gate (rsm_barrier_t *barrier); 417*7c478bd9Sstevel@tonic-gate int (* rsm_thread_init) 418*7c478bd9Sstevel@tonic-gate (rsm_controller_handle_t controller); 419*7c478bd9Sstevel@tonic-gate int (* rsm_thread_fini) 420*7c478bd9Sstevel@tonic-gate (rsm_controller_handle_t controller); 421*7c478bd9Sstevel@tonic-gate int (* rsm_get_barrier_mode) 422*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 423*7c478bd9Sstevel@tonic-gate rsm_barrier_mode_t *mode); 424*7c478bd9Sstevel@tonic-gate int (* rsm_set_barrier_mode) 425*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 426*7c478bd9Sstevel@tonic-gate rsm_barrier_mode_t mode); 427*7c478bd9Sstevel@tonic-gate 428*7c478bd9Sstevel@tonic-gate /* 429*7c478bd9Sstevel@tonic-gate * sending side interrupt operations: 430*7c478bd9Sstevel@tonic-gate */ 431*7c478bd9Sstevel@tonic-gate int (* rsm_sendq_create) 432*7c478bd9Sstevel@tonic-gate (rsm_controller_handle_t controller, 433*7c478bd9Sstevel@tonic-gate rsm_addr_t addr, 434*7c478bd9Sstevel@tonic-gate rsm_intr_service_t service, 435*7c478bd9Sstevel@tonic-gate rsm_intr_pri_t pri, 436*7c478bd9Sstevel@tonic-gate ulong_t qdepth, 437*7c478bd9Sstevel@tonic-gate uint_t flags, 438*7c478bd9Sstevel@tonic-gate rsm_resource_callback_t callback, 439*7c478bd9Sstevel@tonic-gate rsm_resource_callback_arg_t arg, 440*7c478bd9Sstevel@tonic-gate rsm_send_q_handle_t *iqp); 441*7c478bd9Sstevel@tonic-gate int (* rsm_sendq_config) 442*7c478bd9Sstevel@tonic-gate (rsm_send_q_handle_t iq, 443*7c478bd9Sstevel@tonic-gate rsm_intr_pri_t pri, 444*7c478bd9Sstevel@tonic-gate ulong_t qdepth, 445*7c478bd9Sstevel@tonic-gate uint_t flags, 446*7c478bd9Sstevel@tonic-gate rsm_resource_callback_t callback, 447*7c478bd9Sstevel@tonic-gate rsm_resource_callback_arg_t arg); 448*7c478bd9Sstevel@tonic-gate int (* rsm_sendq_destroy) 449*7c478bd9Sstevel@tonic-gate (rsm_send_q_handle_t iq); 450*7c478bd9Sstevel@tonic-gate int (* rsm_send) 451*7c478bd9Sstevel@tonic-gate (rsm_send_q_handle_t iq, 452*7c478bd9Sstevel@tonic-gate rsm_send_t *is, 453*7c478bd9Sstevel@tonic-gate rsm_barrier_t *barrier); 454*7c478bd9Sstevel@tonic-gate 455*7c478bd9Sstevel@tonic-gate 456*7c478bd9Sstevel@tonic-gate /* 457*7c478bd9Sstevel@tonic-gate * receiving side interrupt operations: 458*7c478bd9Sstevel@tonic-gate */ 459*7c478bd9Sstevel@tonic-gate int (* rsm_register_handler) 460*7c478bd9Sstevel@tonic-gate (rsm_controller_handle_t controller, 461*7c478bd9Sstevel@tonic-gate rsm_controller_object_t *controller_obj, 462*7c478bd9Sstevel@tonic-gate rsm_intr_t type, 463*7c478bd9Sstevel@tonic-gate rsm_intr_hand_t handler, 464*7c478bd9Sstevel@tonic-gate rsm_intr_hand_arg_t handler_arg, 465*7c478bd9Sstevel@tonic-gate rsm_addr_t senders_list[], 466*7c478bd9Sstevel@tonic-gate uint_t senders_list_length); 467*7c478bd9Sstevel@tonic-gate 468*7c478bd9Sstevel@tonic-gate int (* rsm_unregister_handler) 469*7c478bd9Sstevel@tonic-gate (rsm_controller_handle_t controller, 470*7c478bd9Sstevel@tonic-gate rsm_intr_t type, 471*7c478bd9Sstevel@tonic-gate rsm_intr_hand_t handler, 472*7c478bd9Sstevel@tonic-gate rsm_intr_hand_arg_t handler_arg); 473*7c478bd9Sstevel@tonic-gate 474*7c478bd9Sstevel@tonic-gate 475*7c478bd9Sstevel@tonic-gate /* scatter-gather I/O */ 476*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_getv) 477*7c478bd9Sstevel@tonic-gate (rsm_controller_handle_t cp, 478*7c478bd9Sstevel@tonic-gate rsmpi_scat_gath_t *sg_io); 479*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_putv) 480*7c478bd9Sstevel@tonic-gate (rsm_controller_handle_t cp, 481*7c478bd9Sstevel@tonic-gate rsmpi_scat_gath_t *sg_io); 482*7c478bd9Sstevel@tonic-gate 483*7c478bd9Sstevel@tonic-gate /* Management operation */ 484*7c478bd9Sstevel@tonic-gate int (*rsm_get_peers) 485*7c478bd9Sstevel@tonic-gate (rsm_controller_handle_t controller, 486*7c478bd9Sstevel@tonic-gate rsm_addr_t *addr_list, 487*7c478bd9Sstevel@tonic-gate uint_t count, 488*7c478bd9Sstevel@tonic-gate uint_t *num_addrs); 489*7c478bd9Sstevel@tonic-gate 490*7c478bd9Sstevel@tonic-gate /* Extension operation */ 491*7c478bd9Sstevel@tonic-gate int (*rsm_extension) 492*7c478bd9Sstevel@tonic-gate (rsm_controller_handle_t controller, 493*7c478bd9Sstevel@tonic-gate char *extname, 494*7c478bd9Sstevel@tonic-gate void *extobj); 495*7c478bd9Sstevel@tonic-gate 496*7c478bd9Sstevel@tonic-gate } rsm_ops_t; 497*7c478bd9Sstevel@tonic-gate 498*7c478bd9Sstevel@tonic-gate /* 499*7c478bd9Sstevel@tonic-gate * service module function templates: 500*7c478bd9Sstevel@tonic-gate */ 501*7c478bd9Sstevel@tonic-gate 502*7c478bd9Sstevel@tonic-gate int rsm_get_controller(const char *name, uint_t number, 503*7c478bd9Sstevel@tonic-gate rsm_controller_object_t *controller, 504*7c478bd9Sstevel@tonic-gate uint_t version); 505*7c478bd9Sstevel@tonic-gate 506*7c478bd9Sstevel@tonic-gate int rsm_release_controller(const char *name, uint_t number, 507*7c478bd9Sstevel@tonic-gate rsm_controller_object_t *controller); 508*7c478bd9Sstevel@tonic-gate 509*7c478bd9Sstevel@tonic-gate int rsm_get_controller_attr(rsm_controller_handle_t, 510*7c478bd9Sstevel@tonic-gate rsm_controller_attr_t **attrp); 511*7c478bd9Sstevel@tonic-gate /* 512*7c478bd9Sstevel@tonic-gate * MACROS for Clients requesting services via RSMPI module 513*7c478bd9Sstevel@tonic-gate */ 514*7c478bd9Sstevel@tonic-gate 515*7c478bd9Sstevel@tonic-gate /* 516*7c478bd9Sstevel@tonic-gate * Export Side segment operations 517*7c478bd9Sstevel@tonic-gate */ 518*7c478bd9Sstevel@tonic-gate 519*7c478bd9Sstevel@tonic-gate #define RSM_SEG_CREATE(controller, memseg, size, flags, memory, callback, \ 520*7c478bd9Sstevel@tonic-gate callback_arg) \ 521*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_seg_create)) \ 522*7c478bd9Sstevel@tonic-gate ((controller).handle, (memseg), (size), (flags), (memory), \ 523*7c478bd9Sstevel@tonic-gate (callback), (callback_arg)) 524*7c478bd9Sstevel@tonic-gate #define RSM_SEG_DESTROY(controller, memseg) \ 525*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_seg_destroy)) \ 526*7c478bd9Sstevel@tonic-gate ((memseg)) 527*7c478bd9Sstevel@tonic-gate #define RSM_BIND(controller, memseg, offset, memory, callback, \ 528*7c478bd9Sstevel@tonic-gate callback_arg) \ 529*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_bind)) \ 530*7c478bd9Sstevel@tonic-gate ((memseg), offset, (memory), (callback), (callback_arg)) 531*7c478bd9Sstevel@tonic-gate #define RSM_UNBIND(controller, memseg, offset, length) \ 532*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_unbind)) \ 533*7c478bd9Sstevel@tonic-gate ((memseg), (offset), (length)) 534*7c478bd9Sstevel@tonic-gate #define RSM_REBIND(controller, memseg, offset, memory, callback, \ 535*7c478bd9Sstevel@tonic-gate callback_arg) \ 536*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_rebind)) \ 537*7c478bd9Sstevel@tonic-gate ((memseg), offset, (memory), (callback), (callback_arg)) 538*7c478bd9Sstevel@tonic-gate #define RSM_PUBLISH(controller, memseg, access_list, access_list_length, \ 539*7c478bd9Sstevel@tonic-gate segment_id, callback, callback_arg) \ 540*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_publish)) \ 541*7c478bd9Sstevel@tonic-gate ((memseg), access_list, access_list_length, segment_id, \ 542*7c478bd9Sstevel@tonic-gate (callback), (callback_arg)) 543*7c478bd9Sstevel@tonic-gate #define RSM_UNPUBLISH(controller, memseg) \ 544*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_unpublish)) \ 545*7c478bd9Sstevel@tonic-gate ((memseg)) 546*7c478bd9Sstevel@tonic-gate #define RSM_REPUBLISH(controller, memseg, access_list, access_list_length, \ 547*7c478bd9Sstevel@tonic-gate callback, callback_arg) \ 548*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_republish)) \ 549*7c478bd9Sstevel@tonic-gate ((memseg), (access_list), (access_list_length), (callback), \ 550*7c478bd9Sstevel@tonic-gate (callback_arg)) 551*7c478bd9Sstevel@tonic-gate #define RSM_CONNECT(controller, addr, segment_id, im_memseg) \ 552*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_connect)) \ 553*7c478bd9Sstevel@tonic-gate ((controller).handle, (addr), (segment_id), (im_memseg)) 554*7c478bd9Sstevel@tonic-gate #define RSM_DISCONNECT(controller, im_memseg) \ 555*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_disconnect)) \ 556*7c478bd9Sstevel@tonic-gate ((im_memseg)) 557*7c478bd9Sstevel@tonic-gate 558*7c478bd9Sstevel@tonic-gate /* 559*7c478bd9Sstevel@tonic-gate * import side memory segment operations (read access functions) 560*7c478bd9Sstevel@tonic-gate */ 561*7c478bd9Sstevel@tonic-gate 562*7c478bd9Sstevel@tonic-gate #define RSM_GET8(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ 563*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_get8)) \ 564*7c478bd9Sstevel@tonic-gate ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) 565*7c478bd9Sstevel@tonic-gate #define RSM_GET16(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ 566*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_get16)) \ 567*7c478bd9Sstevel@tonic-gate ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) 568*7c478bd9Sstevel@tonic-gate #define RSM_GET32(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ 569*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_get32)) \ 570*7c478bd9Sstevel@tonic-gate ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) 571*7c478bd9Sstevel@tonic-gate #define RSM_GET64(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ 572*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_get64)) \ 573*7c478bd9Sstevel@tonic-gate ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) 574*7c478bd9Sstevel@tonic-gate #define RSM_GET(controller, im_memseg, offset, dst_addr, length) \ 575*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_get)) \ 576*7c478bd9Sstevel@tonic-gate ((im_memseg), (offset), (dst_addr), (length)) 577*7c478bd9Sstevel@tonic-gate 578*7c478bd9Sstevel@tonic-gate /* 579*7c478bd9Sstevel@tonic-gate * import side memory segment operations (write access functions) 580*7c478bd9Sstevel@tonic-gate */ 581*7c478bd9Sstevel@tonic-gate 582*7c478bd9Sstevel@tonic-gate #define RSM_PUT8(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ 583*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_put8)) \ 584*7c478bd9Sstevel@tonic-gate ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) 585*7c478bd9Sstevel@tonic-gate #define RSM_PUT16(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ 586*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_put16)) \ 587*7c478bd9Sstevel@tonic-gate ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) 588*7c478bd9Sstevel@tonic-gate #define RSM_PUT32(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ 589*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_put32)) \ 590*7c478bd9Sstevel@tonic-gate ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) 591*7c478bd9Sstevel@tonic-gate #define RSM_PUT64(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ 592*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_put64)) \ 593*7c478bd9Sstevel@tonic-gate ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) 594*7c478bd9Sstevel@tonic-gate #define RSM_PUT(controller, im_memseg, offset, datap, length) \ 595*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_put)) \ 596*7c478bd9Sstevel@tonic-gate ((im_memseg), (offset), (datap), (length)) 597*7c478bd9Sstevel@tonic-gate 598*7c478bd9Sstevel@tonic-gate /* 599*7c478bd9Sstevel@tonic-gate * import side memory segment operations (mapping): 600*7c478bd9Sstevel@tonic-gate */ 601*7c478bd9Sstevel@tonic-gate 602*7c478bd9Sstevel@tonic-gate #define RSM_MAP(controller, im_memseg, offset, length, maplen, dipp, \ 603*7c478bd9Sstevel@tonic-gate dev_register, dev_offset, callback, arg) \ 604*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_map)) \ 605*7c478bd9Sstevel@tonic-gate ((im_memseg), (offset), (length), (maplen), (dipp), (dev_register), \ 606*7c478bd9Sstevel@tonic-gate (dev_offset), (callback), (arg)) 607*7c478bd9Sstevel@tonic-gate #define RSM_UNMAP(controller, im_memseg) \ 608*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_unmap)) \ 609*7c478bd9Sstevel@tonic-gate ((im_memseg)) 610*7c478bd9Sstevel@tonic-gate 611*7c478bd9Sstevel@tonic-gate /* 612*7c478bd9Sstevel@tonic-gate * import side memory segment operations (barriers): 613*7c478bd9Sstevel@tonic-gate */ 614*7c478bd9Sstevel@tonic-gate 615*7c478bd9Sstevel@tonic-gate #define RSM_OPEN_BARRIER_REGION(controller, region, barrier) \ 616*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_open_barrier_region)) \ 617*7c478bd9Sstevel@tonic-gate ((region), (barrier)) 618*7c478bd9Sstevel@tonic-gate #define RSM_OPEN_BARRIER_REGIONS(controller, regions, num_regions, barrier) \ 619*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_open_barrier_regions)) \ 620*7c478bd9Sstevel@tonic-gate ((regions), (num_regions), (barrier)) 621*7c478bd9Sstevel@tonic-gate #define RSM_OPEN_BARRIER_NODE(controller, addr, barrier) \ 622*7c478bd9Sstevel@tonic-gate (*((controller).ops-> rsm_open_barrier_node)) \ 623*7c478bd9Sstevel@tonic-gate ((controller).handle, (addr), (barrier)) 624*7c478bd9Sstevel@tonic-gate #define RSM_OPEN_BARRIER_CTRL(controller, barrier) \ 625*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_open_barrier_ctrl)) \ 626*7c478bd9Sstevel@tonic-gate ((controller).handle, (barrier)) 627*7c478bd9Sstevel@tonic-gate #define RSM_OPEN_BARRIER_REGION_THR(controller, region, barrier) \ 628*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_open_barrier_region_thr)) \ 629*7c478bd9Sstevel@tonic-gate ((region), (barrier)) 630*7c478bd9Sstevel@tonic-gate #define RSM_OPEN_BARRIER_REGIONS_THR(controller, regions, num_regions, barrier)\ 631*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_open_barrier_regions_thr)) \ 632*7c478bd9Sstevel@tonic-gate ((regions), (num_regions), (barrier)) 633*7c478bd9Sstevel@tonic-gate #define RSM_OPEN_BARRIER_NODE_THR(controller, addr, barrier) \ 634*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_open_barrier_node_thr)) \ 635*7c478bd9Sstevel@tonic-gate ((controller).handle, (addr), (barrier)) 636*7c478bd9Sstevel@tonic-gate #define RSM_OPEN_BARRIER_CTRL_THR(controller, barrier) \ 637*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_open_barrier_ctrl_thr)) \ 638*7c478bd9Sstevel@tonic-gate ((controller).handle, (barrier)); 639*7c478bd9Sstevel@tonic-gate #define RSM_CLOSE_BARRIER(controller, barrier) \ 640*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_close_barrier)) \ 641*7c478bd9Sstevel@tonic-gate ((barrier)) 642*7c478bd9Sstevel@tonic-gate #define RSM_REOPEN_BARRIER(controller, barrier) \ 643*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_reopen_barrier)) \ 644*7c478bd9Sstevel@tonic-gate ((barrier)); 645*7c478bd9Sstevel@tonic-gate #define RSM_ORDER_BARRIER(controller, barrier) \ 646*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_order_barrier)) \ 647*7c478bd9Sstevel@tonic-gate ((barrier)) 648*7c478bd9Sstevel@tonic-gate #define RSM_THREAD_INIT(controller) \ 649*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_thread_init)) \ 650*7c478bd9Sstevel@tonic-gate ((controller).handle) 651*7c478bd9Sstevel@tonic-gate #define RSM_THREAD_FINI(controller) \ 652*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_thread_fini)) \ 653*7c478bd9Sstevel@tonic-gate ((controller).handle) 654*7c478bd9Sstevel@tonic-gate #define RSM_GET_BARRIER_MODE(controller, im_memseg, mode) \ 655*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_get_barrier_mode)) \ 656*7c478bd9Sstevel@tonic-gate ((im_memseg), (mode)) 657*7c478bd9Sstevel@tonic-gate #define RSM_SET_BARRIER_MODE(controller, im_memseg, mode) \ 658*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_set_barrier_mode)) \ 659*7c478bd9Sstevel@tonic-gate ((im_memseg), (mode)) 660*7c478bd9Sstevel@tonic-gate /* 661*7c478bd9Sstevel@tonic-gate * sending side interrupt operations: 662*7c478bd9Sstevel@tonic-gate */ 663*7c478bd9Sstevel@tonic-gate 664*7c478bd9Sstevel@tonic-gate #define RSM_SENDQ_CREATE(controller, addr, service, pri, qdepth, flags, \ 665*7c478bd9Sstevel@tonic-gate callback, arg, iqp) \ 666*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_sendq_create)) \ 667*7c478bd9Sstevel@tonic-gate ((controller).handle, (addr), (service), (pri), (qdepth), (flags), \ 668*7c478bd9Sstevel@tonic-gate (callback), (arg), (iqp)) 669*7c478bd9Sstevel@tonic-gate #define RSM_SENDQ_CONFIG(controller, iq, pri, qdepth, flags, callback, arg) \ 670*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_sendq_config)) \ 671*7c478bd9Sstevel@tonic-gate ((iq), (pri), (qdepth), (flags), \ 672*7c478bd9Sstevel@tonic-gate (callback), (arg)) 673*7c478bd9Sstevel@tonic-gate #define RSM_SENDQ_DESTROY(controller, iq) \ 674*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_sendq_destroy)) \ 675*7c478bd9Sstevel@tonic-gate ((iq)) 676*7c478bd9Sstevel@tonic-gate #define RSM_SEND(controller, iq, is, barrier) \ 677*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_send)) \ 678*7c478bd9Sstevel@tonic-gate ((iq), (is), (barrier)) 679*7c478bd9Sstevel@tonic-gate 680*7c478bd9Sstevel@tonic-gate /* 681*7c478bd9Sstevel@tonic-gate * receiving side interrupt operations: 682*7c478bd9Sstevel@tonic-gate */ 683*7c478bd9Sstevel@tonic-gate #define RSM_REGISTER_HANDLER(controller, type, handler, handler_arg, \ 684*7c478bd9Sstevel@tonic-gate senders_list, senders_list_length) \ 685*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_register_handler)) \ 686*7c478bd9Sstevel@tonic-gate ((controller).handle, &(controller), (type), (handler), (handler_arg), \ 687*7c478bd9Sstevel@tonic-gate (senders_list), (senders_list_length)) 688*7c478bd9Sstevel@tonic-gate #define RSM_UNREGISTER_HANDLER(controller, type, handler, handler_arg) \ 689*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_unregister_handler)) \ 690*7c478bd9Sstevel@tonic-gate ((controller).handle, (type), (handler), (handler_arg)) 691*7c478bd9Sstevel@tonic-gate #define RSM_GETV(controller, sg_io) \ 692*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_memseg_import_getv)) \ 693*7c478bd9Sstevel@tonic-gate ((controller).handle, (sg_io)) 694*7c478bd9Sstevel@tonic-gate #define RSM_PUTV(controller, sg_io) \ 695*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_memseg_import_putv)) \ 696*7c478bd9Sstevel@tonic-gate ((controller).handle, (sg_io)) 697*7c478bd9Sstevel@tonic-gate #define RSM_GET_PEERS(controller, addr_list, count, num_addrs) \ 698*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_get_peers)) \ 699*7c478bd9Sstevel@tonic-gate ((controller).handle, (addr_list), (count), (num_addrs)) 700*7c478bd9Sstevel@tonic-gate #define RSM_EXTENSION(controller, extname, extobj) \ 701*7c478bd9Sstevel@tonic-gate (*((controller).ops->rsm_extension)) \ 702*7c478bd9Sstevel@tonic-gate ((controller).handle, (extname), (extobj)) 703*7c478bd9Sstevel@tonic-gate 704*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus 705*7c478bd9Sstevel@tonic-gate } 706*7c478bd9Sstevel@tonic-gate #endif 707*7c478bd9Sstevel@tonic-gate 708*7c478bd9Sstevel@tonic-gate 709*7c478bd9Sstevel@tonic-gate #endif /* _SYS_RSM_RSMPI_H */ 710