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 2001-2002 Sun Microsystems, Inc. All rights reserved. 24*7c478bd9Sstevel@tonic-gate * Use is subject to license terms. 25*7c478bd9Sstevel@tonic-gate */ 26*7c478bd9Sstevel@tonic-gate 27*7c478bd9Sstevel@tonic-gate #ifndef _SYS_RSM_RSMNDI_H 28*7c478bd9Sstevel@tonic-gate #define _SYS_RSM_RSMNDI_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 #include <sys/types.h> 37*7c478bd9Sstevel@tonic-gate #include <sys/mman.h> 38*7c478bd9Sstevel@tonic-gate #include <sys/stat.h> 39*7c478bd9Sstevel@tonic-gate #include <fcntl.h> 40*7c478bd9Sstevel@tonic-gate #include <thread.h> 41*7c478bd9Sstevel@tonic-gate #include <synch.h> 42*7c478bd9Sstevel@tonic-gate #include <sys/rsm/rsm_common.h> 43*7c478bd9Sstevel@tonic-gate #include <sys/rsm/rsmapi_common.h> 44*7c478bd9Sstevel@tonic-gate 45*7c478bd9Sstevel@tonic-gate /* 46*7c478bd9Sstevel@tonic-gate * This structure defines the functions implemented in rsmlib 47*7c478bd9Sstevel@tonic-gate * that the NDI library can call. 48*7c478bd9Sstevel@tonic-gate */ 49*7c478bd9Sstevel@tonic-gate typedef struct { 50*7c478bd9Sstevel@tonic-gate int version; 51*7c478bd9Sstevel@tonic-gate #define RSM_LIB_FUNCS_VERSION 1 52*7c478bd9Sstevel@tonic-gate int (* rsm_get_hwaddr)( 53*7c478bd9Sstevel@tonic-gate rsmapi_controller_handle_t handle, 54*7c478bd9Sstevel@tonic-gate rsm_node_id_t nodeid, 55*7c478bd9Sstevel@tonic-gate rsm_addr_t *hwaddrp); 56*7c478bd9Sstevel@tonic-gate int (* rsm_get_nodeid)( 57*7c478bd9Sstevel@tonic-gate rsmapi_controller_handle_t handle, 58*7c478bd9Sstevel@tonic-gate rsm_addr_t hwaddr, 59*7c478bd9Sstevel@tonic-gate rsm_node_id_t *nodeidp); 60*7c478bd9Sstevel@tonic-gate } rsm_lib_funcs_t; 61*7c478bd9Sstevel@tonic-gate 62*7c478bd9Sstevel@tonic-gate /* Library attributes - set by specific NDI libraries */ 63*7c478bd9Sstevel@tonic-gate typedef struct { 64*7c478bd9Sstevel@tonic-gate boolean_t rsm_putget_map_reqd; /* put/get require mapping */ 65*7c478bd9Sstevel@tonic-gate boolean_t rsm_scatgath_map_reqd; /* putv/getv require mapping */ 66*7c478bd9Sstevel@tonic-gate } rsm_ndlib_attr_t; 67*7c478bd9Sstevel@tonic-gate 68*7c478bd9Sstevel@tonic-gate /* The opaque barrier handle used by the RSMNDI plugin for the barrier calls */ 69*7c478bd9Sstevel@tonic-gate typedef struct rsm_barrier *rsm_barrier_handle_t; 70*7c478bd9Sstevel@tonic-gate 71*7c478bd9Sstevel@tonic-gate typedef struct { 72*7c478bd9Sstevel@tonic-gate 73*7c478bd9Sstevel@tonic-gate /* 74*7c478bd9Sstevel@tonic-gate * structure revision number: 75*7c478bd9Sstevel@tonic-gate */ 76*7c478bd9Sstevel@tonic-gate int rsm_version; 77*7c478bd9Sstevel@tonic-gate 78*7c478bd9Sstevel@tonic-gate /* 79*7c478bd9Sstevel@tonic-gate * import side memory segment operations 80*7c478bd9Sstevel@tonic-gate */ 81*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_connect) 82*7c478bd9Sstevel@tonic-gate (rsmapi_controller_handle_t controller, 83*7c478bd9Sstevel@tonic-gate rsm_node_id_t node_id, 84*7c478bd9Sstevel@tonic-gate rsm_memseg_id_t segment_id, 85*7c478bd9Sstevel@tonic-gate rsm_permission_t perm, 86*7c478bd9Sstevel@tonic-gate rsm_memseg_import_handle_t *im_memseg); 87*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_disconnect) 88*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg); 89*7c478bd9Sstevel@tonic-gate 90*7c478bd9Sstevel@tonic-gate /* 91*7c478bd9Sstevel@tonic-gate * import side memory segment operations (read access functions): 92*7c478bd9Sstevel@tonic-gate */ 93*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_get8) 94*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 95*7c478bd9Sstevel@tonic-gate off_t offset, 96*7c478bd9Sstevel@tonic-gate uint8_t *datap, 97*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 98*7c478bd9Sstevel@tonic-gate boolean_t swap); 99*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_get16) 100*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 101*7c478bd9Sstevel@tonic-gate off_t offset, 102*7c478bd9Sstevel@tonic-gate uint16_t *datap, 103*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 104*7c478bd9Sstevel@tonic-gate boolean_t swap); 105*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_get32) 106*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 107*7c478bd9Sstevel@tonic-gate off_t offset, 108*7c478bd9Sstevel@tonic-gate uint32_t *datap, 109*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 110*7c478bd9Sstevel@tonic-gate boolean_t swap); 111*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_get64) 112*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 113*7c478bd9Sstevel@tonic-gate off_t offset, 114*7c478bd9Sstevel@tonic-gate uint64_t *datap, 115*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 116*7c478bd9Sstevel@tonic-gate boolean_t swap); 117*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_get) 118*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 119*7c478bd9Sstevel@tonic-gate off_t offset, 120*7c478bd9Sstevel@tonic-gate void *dst_addr, 121*7c478bd9Sstevel@tonic-gate size_t length); 122*7c478bd9Sstevel@tonic-gate 123*7c478bd9Sstevel@tonic-gate /* 124*7c478bd9Sstevel@tonic-gate * import side memory segment operations (read access functions): 125*7c478bd9Sstevel@tonic-gate */ 126*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_put8) 127*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 128*7c478bd9Sstevel@tonic-gate off_t offset, 129*7c478bd9Sstevel@tonic-gate uint8_t *datap, 130*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 131*7c478bd9Sstevel@tonic-gate boolean_t swap); 132*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_put16) 133*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 134*7c478bd9Sstevel@tonic-gate off_t offset, 135*7c478bd9Sstevel@tonic-gate uint16_t *datap, 136*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 137*7c478bd9Sstevel@tonic-gate boolean_t swap); 138*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_put32) 139*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 140*7c478bd9Sstevel@tonic-gate off_t offset, 141*7c478bd9Sstevel@tonic-gate uint32_t *datap, 142*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 143*7c478bd9Sstevel@tonic-gate boolean_t swap); 144*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_put64) 145*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 146*7c478bd9Sstevel@tonic-gate off_t offset, 147*7c478bd9Sstevel@tonic-gate uint64_t *datap, 148*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt, 149*7c478bd9Sstevel@tonic-gate boolean_t swap); 150*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_put) 151*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 152*7c478bd9Sstevel@tonic-gate off_t offset, 153*7c478bd9Sstevel@tonic-gate void *src_addr, 154*7c478bd9Sstevel@tonic-gate size_t length); 155*7c478bd9Sstevel@tonic-gate 156*7c478bd9Sstevel@tonic-gate /* 157*7c478bd9Sstevel@tonic-gate * import side memory segment operations (barriers): 158*7c478bd9Sstevel@tonic-gate */ 159*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_init_barrier) 160*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 161*7c478bd9Sstevel@tonic-gate rsm_barrier_type_t type, 162*7c478bd9Sstevel@tonic-gate rsm_barrier_handle_t barrier); 163*7c478bd9Sstevel@tonic-gate 164*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_open_barrier)(rsm_barrier_handle_t barrier); 165*7c478bd9Sstevel@tonic-gate 166*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_order_barrier)(rsm_barrier_handle_t barrier); 167*7c478bd9Sstevel@tonic-gate 168*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_close_barrier)(rsm_barrier_handle_t barrier); 169*7c478bd9Sstevel@tonic-gate 170*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_destroy_barrier)(rsm_barrier_handle_t barrier); 171*7c478bd9Sstevel@tonic-gate 172*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_get_mode) 173*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 174*7c478bd9Sstevel@tonic-gate rsm_barrier_mode_t *mode); 175*7c478bd9Sstevel@tonic-gate 176*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_set_mode) 177*7c478bd9Sstevel@tonic-gate (rsm_memseg_import_handle_t im_memseg, 178*7c478bd9Sstevel@tonic-gate rsm_barrier_mode_t mode); 179*7c478bd9Sstevel@tonic-gate 180*7c478bd9Sstevel@tonic-gate 181*7c478bd9Sstevel@tonic-gate /* 182*7c478bd9Sstevel@tonic-gate * import side memory segment data transfer operations. 183*7c478bd9Sstevel@tonic-gate */ 184*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_putv)(rsm_scat_gath_t *sg_io); 185*7c478bd9Sstevel@tonic-gate int (* rsm_memseg_import_getv)(rsm_scat_gath_t *sg_io); 186*7c478bd9Sstevel@tonic-gate 187*7c478bd9Sstevel@tonic-gate int (* rsm_create_localmemory_handle) 188*7c478bd9Sstevel@tonic-gate (rsmapi_controller_handle_t controller, 189*7c478bd9Sstevel@tonic-gate rsm_localmemory_handle_t *local_handle_p, 190*7c478bd9Sstevel@tonic-gate caddr_t local_vaddr, size_t len); 191*7c478bd9Sstevel@tonic-gate 192*7c478bd9Sstevel@tonic-gate int (* rsm_free_localmemory_handle) 193*7c478bd9Sstevel@tonic-gate (rsm_localmemory_handle_t local_handle); 194*7c478bd9Sstevel@tonic-gate 195*7c478bd9Sstevel@tonic-gate int (* rsm_register_lib_funcs) 196*7c478bd9Sstevel@tonic-gate (rsm_lib_funcs_t *libfuncs); 197*7c478bd9Sstevel@tonic-gate int (* rsm_get_lib_attr) 198*7c478bd9Sstevel@tonic-gate (rsm_ndlib_attr_t **libattr); 199*7c478bd9Sstevel@tonic-gate int (* rsm_closedevice) 200*7c478bd9Sstevel@tonic-gate (rsmapi_controller_handle_t controller); 201*7c478bd9Sstevel@tonic-gate } rsm_segops_t; 202*7c478bd9Sstevel@tonic-gate 203*7c478bd9Sstevel@tonic-gate #define RSM_LIB_VERSION 1 204*7c478bd9Sstevel@tonic-gate 205*7c478bd9Sstevel@tonic-gate /* library internal controller attribute structure */ 206*7c478bd9Sstevel@tonic-gate typedef struct { 207*7c478bd9Sstevel@tonic-gate /* following fields should be identical to rsmapi_controller_attr_t */ 208*7c478bd9Sstevel@tonic-gate uint_t attr_direct_access_sizes; 209*7c478bd9Sstevel@tonic-gate uint_t attr_atomic_sizes; 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 /* following fields are for internal use */ 218*7c478bd9Sstevel@tonic-gate rsm_addr_t attr_controller_addr; 219*7c478bd9Sstevel@tonic-gate } rsm_int_controller_attr_t; 220*7c478bd9Sstevel@tonic-gate 221*7c478bd9Sstevel@tonic-gate typedef struct rsm_controller { 222*7c478bd9Sstevel@tonic-gate void *cntr_privdata; 223*7c478bd9Sstevel@tonic-gate struct rsm_controller *cntr_next; 224*7c478bd9Sstevel@tonic-gate int cntr_fd; 225*7c478bd9Sstevel@tonic-gate int cntr_refcnt; 226*7c478bd9Sstevel@tonic-gate int cntr_unit; 227*7c478bd9Sstevel@tonic-gate char *cntr_name; /* generic type eg. sci */ 228*7c478bd9Sstevel@tonic-gate rsm_segops_t *cntr_segops; 229*7c478bd9Sstevel@tonic-gate struct rsmqueue *cntr_rqlist; /* list of receive queues */ 230*7c478bd9Sstevel@tonic-gate rsm_int_controller_attr_t cntr_attr; 231*7c478bd9Sstevel@tonic-gate rsm_ndlib_attr_t *cntr_lib_attr; 232*7c478bd9Sstevel@tonic-gate mutex_t cntr_lock; 233*7c478bd9Sstevel@tonic-gate cond_t cntr_cv; 234*7c478bd9Sstevel@tonic-gate } rsm_controller_t; 235*7c478bd9Sstevel@tonic-gate 236*7c478bd9Sstevel@tonic-gate 237*7c478bd9Sstevel@tonic-gate typedef enum { 238*7c478bd9Sstevel@tonic-gate EXPORT_CREATE = 0x1, 239*7c478bd9Sstevel@tonic-gate EXPORT_BIND, 240*7c478bd9Sstevel@tonic-gate EXPORT_PUBLISH, 241*7c478bd9Sstevel@tonic-gate IMPORT_CONNECT, 242*7c478bd9Sstevel@tonic-gate IMPORT_DISCONNECT, 243*7c478bd9Sstevel@tonic-gate IMPORT_MAP, 244*7c478bd9Sstevel@tonic-gate IMPORT_UNMAP 245*7c478bd9Sstevel@tonic-gate } rsm_seg_state_t; 246*7c478bd9Sstevel@tonic-gate 247*7c478bd9Sstevel@tonic-gate typedef struct { 248*7c478bd9Sstevel@tonic-gate void *rsmseg_privdata; 249*7c478bd9Sstevel@tonic-gate rsm_segops_t *rsmseg_ops; 250*7c478bd9Sstevel@tonic-gate rsm_seg_state_t rsmseg_state; 251*7c478bd9Sstevel@tonic-gate caddr_t rsmseg_vaddr; /* base address of segment */ 252*7c478bd9Sstevel@tonic-gate size_t rsmseg_size; /* size of segment */ 253*7c478bd9Sstevel@tonic-gate size_t rsmseg_maplen; /* length of mapped region */ 254*7c478bd9Sstevel@tonic-gate rsm_node_id_t rsmseg_nodeid; 255*7c478bd9Sstevel@tonic-gate rsm_memseg_id_t rsmseg_keyid; 256*7c478bd9Sstevel@tonic-gate int rsmseg_fd; 257*7c478bd9Sstevel@tonic-gate int rsmseg_pollfd_refcnt; 258*7c478bd9Sstevel@tonic-gate rsm_permission_t rsmseg_perm; 259*7c478bd9Sstevel@tonic-gate rsm_controller_t *rsmseg_controller; 260*7c478bd9Sstevel@tonic-gate rsm_barrier_mode_t rsmseg_barmode; 261*7c478bd9Sstevel@tonic-gate void *rsmseg_data; 262*7c478bd9Sstevel@tonic-gate uint16_t *rsmseg_bar; 263*7c478bd9Sstevel@tonic-gate uint16_t rsmseg_gnum; /* generation number */ 264*7c478bd9Sstevel@tonic-gate int rsmseg_type; 265*7c478bd9Sstevel@tonic-gate mutex_t rsmseg_lock; 266*7c478bd9Sstevel@tonic-gate rsmapi_barrier_t *rsmseg_barrier; /* used in put/get routines */ 267*7c478bd9Sstevel@tonic-gate offset_t rsmseg_mapoffset; /* seg offset where mmapped */ 268*7c478bd9Sstevel@tonic-gate uint32_t rsmseg_flags; 269*7c478bd9Sstevel@tonic-gate minor_t rsmseg_rnum; /* resource number of the segment */ 270*7c478bd9Sstevel@tonic-gate } rsmseg_handle_t; 271*7c478bd9Sstevel@tonic-gate 272*7c478bd9Sstevel@tonic-gate /* 273*7c478bd9Sstevel@tonic-gate * defines for rsmseg_flags 274*7c478bd9Sstevel@tonic-gate */ 275*7c478bd9Sstevel@tonic-gate #define RSM_IMPLICIT_MAP 0x00000001 /* segment mapped implicitly */ 276*7c478bd9Sstevel@tonic-gate 277*7c478bd9Sstevel@tonic-gate /* This is a template for all barrier implementations */ 278*7c478bd9Sstevel@tonic-gate typedef struct { 279*7c478bd9Sstevel@tonic-gate rsmseg_handle_t *rsmbar_seg; 280*7c478bd9Sstevel@tonic-gate uint16_t rsmbar_gen; /* generation number */ 281*7c478bd9Sstevel@tonic-gate void *rsmbar_privdata; 282*7c478bd9Sstevel@tonic-gate } rsmbar_handle_t; 283*7c478bd9Sstevel@tonic-gate 284*7c478bd9Sstevel@tonic-gate /* 285*7c478bd9Sstevel@tonic-gate * These macros set and get the private data pointer in the opaque barrier 286*7c478bd9Sstevel@tonic-gate * structure for Network plugins. 287*7c478bd9Sstevel@tonic-gate */ 288*7c478bd9Sstevel@tonic-gate #define RSMNDI_BARRIER_SETPRIV(HANDLE, ADDR) \ 289*7c478bd9Sstevel@tonic-gate ((rsmbar_handle_t *)HANDLE)->rsmbar_privdata = (void *)ADDR; 290*7c478bd9Sstevel@tonic-gate 291*7c478bd9Sstevel@tonic-gate #define RSMNDI_BARRIER_GETPRIV(HANDLE) \ 292*7c478bd9Sstevel@tonic-gate ((rsmbar_handle_t *)HANDLE)->rsmbar_privdata 293*7c478bd9Sstevel@tonic-gate 294*7c478bd9Sstevel@tonic-gate #define RSMNDI_BARRIER_GETSEG(HANDLE) \ 295*7c478bd9Sstevel@tonic-gate ((rsmbar_handle_t *)HANDLE)->rsmbar_seg 296*7c478bd9Sstevel@tonic-gate 297*7c478bd9Sstevel@tonic-gate #define RSMNDI_BARRIER_GETUNIT(HANDLE) \ 298*7c478bd9Sstevel@tonic-gate ((rsmbar_handle_t *)HANDLE)->rsmbar_seg->rsmseg_controller->cntr_unit 299*7c478bd9Sstevel@tonic-gate 300*7c478bd9Sstevel@tonic-gate /* 301*7c478bd9Sstevel@tonic-gate * These macros set and get the private data pointer in the opaque segment 302*7c478bd9Sstevel@tonic-gate * structure for Network plugins. 303*7c478bd9Sstevel@tonic-gate */ 304*7c478bd9Sstevel@tonic-gate #define RSMNDI_SEG_SETPRIV(HANDLE, ADDR) \ 305*7c478bd9Sstevel@tonic-gate ((rsmseg_handle_t *)HANDLE)->rsmseg_privdata = (void *)ADDR; 306*7c478bd9Sstevel@tonic-gate 307*7c478bd9Sstevel@tonic-gate #define RSMNDI_SEG_GETPRIV(HANDLE) \ 308*7c478bd9Sstevel@tonic-gate ((rsmseg_handle_t *)HANDLE)->rsmseg_privdata 309*7c478bd9Sstevel@tonic-gate 310*7c478bd9Sstevel@tonic-gate /* 311*7c478bd9Sstevel@tonic-gate * Get the controller unit number from a opaque segment structure. 312*7c478bd9Sstevel@tonic-gate */ 313*7c478bd9Sstevel@tonic-gate 314*7c478bd9Sstevel@tonic-gate #define RSMNDI_SEG_GETUNIT(HANDLE) \ 315*7c478bd9Sstevel@tonic-gate ((rsmseg_handle_t *)HANDLE)->rsmseg_controller->cntr_unit 316*7c478bd9Sstevel@tonic-gate 317*7c478bd9Sstevel@tonic-gate /* 318*7c478bd9Sstevel@tonic-gate * These macros set and get the private data pointer in the opaque controller 319*7c478bd9Sstevel@tonic-gate * structure for Network plugins. 320*7c478bd9Sstevel@tonic-gate */ 321*7c478bd9Sstevel@tonic-gate #define RSMNDI_CNTRLR_SETPRIV(HANDLE, ADDR) \ 322*7c478bd9Sstevel@tonic-gate ((rsm_controller_t *)HANDLE)->cntr_privdata = (void *)ADDR; 323*7c478bd9Sstevel@tonic-gate 324*7c478bd9Sstevel@tonic-gate #define RSMNDI_CNTRLR_GETPRIV(HANDLE) \ 325*7c478bd9Sstevel@tonic-gate ((rsm_controller_t *)HANDLE)->cntr_privdata 326*7c478bd9Sstevel@tonic-gate 327*7c478bd9Sstevel@tonic-gate /* 328*7c478bd9Sstevel@tonic-gate * Get the controller unit number from a opaque controller structure. 329*7c478bd9Sstevel@tonic-gate */ 330*7c478bd9Sstevel@tonic-gate #define RSMNDI_CNTRLR_GETUNIT(HANDLE) \ 331*7c478bd9Sstevel@tonic-gate ((rsm_controller_t *)HANDLE)->cntr_unit 332*7c478bd9Sstevel@tonic-gate 333*7c478bd9Sstevel@tonic-gate /* 334*7c478bd9Sstevel@tonic-gate * This macro returns an address inside a segment given the segment handle 335*7c478bd9Sstevel@tonic-gate * and a byte offset. 336*7c478bd9Sstevel@tonic-gate */ 337*7c478bd9Sstevel@tonic-gate #define RSMNDI_GET_MAPADDR(HANDLE, OFFSET) \ 338*7c478bd9Sstevel@tonic-gate (((rsmseg_handle_t *)HANDLE)->rsmseg_vaddr + OFFSET) 339*7c478bd9Sstevel@tonic-gate 340*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus 341*7c478bd9Sstevel@tonic-gate } 342*7c478bd9Sstevel@tonic-gate #endif 343*7c478bd9Sstevel@tonic-gate 344*7c478bd9Sstevel@tonic-gate #endif /* _SYS_RSM_RSMNDI_H */ 345