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