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 1999-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 _RSMAPI_H 28*7c478bd9Sstevel@tonic-gate #define _RSMAPI_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 <poll.h> 37*7c478bd9Sstevel@tonic-gate #include <sys/param.h> 38*7c478bd9Sstevel@tonic-gate #include <sys/rsm/rsm_common.h> 39*7c478bd9Sstevel@tonic-gate #include <sys/rsm/rsmapi_common.h> 40*7c478bd9Sstevel@tonic-gate 41*7c478bd9Sstevel@tonic-gate typedef enum { 42*7c478bd9Sstevel@tonic-gate RSM_MAP_NONE = 0x0, 43*7c478bd9Sstevel@tonic-gate RSM_MAP_FIXED = 0x1, 44*7c478bd9Sstevel@tonic-gate RSM_MAP_RESERVED = 0x2 45*7c478bd9Sstevel@tonic-gate }rsm_attribute_t; 46*7c478bd9Sstevel@tonic-gate 47*7c478bd9Sstevel@tonic-gate /* 48*7c478bd9Sstevel@tonic-gate * Topology data structures - The primary structure is struct rsm_topology_t 49*7c478bd9Sstevel@tonic-gate * 50*7c478bd9Sstevel@tonic-gate * The key interconnect data required for segment operations includes the 51*7c478bd9Sstevel@tonic-gate * cluster nodeids and the controllers (name, hardware address); with 52*7c478bd9Sstevel@tonic-gate * the fundamental constraint that the controller specified for a segment 53*7c478bd9Sstevel@tonic-gate * import must have a physical connection with the contorller used in the 54*7c478bd9Sstevel@tonic-gate * export of the segment. To facilitate applications in the establishment 55*7c478bd9Sstevel@tonic-gate * of proper and efficient export and import policies, a delineation of the 56*7c478bd9Sstevel@tonic-gate * interconnect topology is provided by these data structures. 57*7c478bd9Sstevel@tonic-gate * 58*7c478bd9Sstevel@tonic-gate */ 59*7c478bd9Sstevel@tonic-gate 60*7c478bd9Sstevel@tonic-gate 61*7c478bd9Sstevel@tonic-gate #define RSM_CONNECTION_ACTIVE 3 62*7c478bd9Sstevel@tonic-gate 63*7c478bd9Sstevel@tonic-gate 64*7c478bd9Sstevel@tonic-gate typedef struct rsm_topology_hdr { 65*7c478bd9Sstevel@tonic-gate rsm_node_id_t local_nodeid; 66*7c478bd9Sstevel@tonic-gate uint_t local_cntlr_count; 67*7c478bd9Sstevel@tonic-gate } rsm_topology_hdr_t; 68*7c478bd9Sstevel@tonic-gate 69*7c478bd9Sstevel@tonic-gate 70*7c478bd9Sstevel@tonic-gate typedef struct rsm_connections_hdr { 71*7c478bd9Sstevel@tonic-gate char cntlr_name[MAXNAMELEN]; /* <cntlr_type><unit> */ 72*7c478bd9Sstevel@tonic-gate rsm_addr_t local_hwaddr; 73*7c478bd9Sstevel@tonic-gate int remote_cntlr_count; 74*7c478bd9Sstevel@tonic-gate } rsm_connections_hdr_t; 75*7c478bd9Sstevel@tonic-gate 76*7c478bd9Sstevel@tonic-gate 77*7c478bd9Sstevel@tonic-gate /* 78*7c478bd9Sstevel@tonic-gate * The remote cntrlname element should be used for matching with the 79*7c478bd9Sstevel@tonic-gate * cntrlname of an exported segment. 80*7c478bd9Sstevel@tonic-gate * 81*7c478bd9Sstevel@tonic-gate * An application must not attempt to use a connection unless the 82*7c478bd9Sstevel@tonic-gate * the connection_state element of struct rsm_remote_cntlr_t is equal to 83*7c478bd9Sstevel@tonic-gate * RSM_CONNECTION_ACTIVE 84*7c478bd9Sstevel@tonic-gate */ 85*7c478bd9Sstevel@tonic-gate typedef struct rsm_remote_cntlr { 86*7c478bd9Sstevel@tonic-gate rsm_node_id_t remote_nodeid; 87*7c478bd9Sstevel@tonic-gate char remote_cntlrname[MAXNAMELEN]; 88*7c478bd9Sstevel@tonic-gate rsm_addr_t remote_hwaddr; 89*7c478bd9Sstevel@tonic-gate uint_t connection_state; 90*7c478bd9Sstevel@tonic-gate } rsm_remote_cntlr_t; 91*7c478bd9Sstevel@tonic-gate 92*7c478bd9Sstevel@tonic-gate 93*7c478bd9Sstevel@tonic-gate /* 94*7c478bd9Sstevel@tonic-gate * The actual size of the remote_cntlr array is equal to the remote_cntlr_count 95*7c478bd9Sstevel@tonic-gate * of the rsm_connections_hdr_t struct. 96*7c478bd9Sstevel@tonic-gate */ 97*7c478bd9Sstevel@tonic-gate typedef struct rsm_connection { 98*7c478bd9Sstevel@tonic-gate rsm_connections_hdr_t hdr; 99*7c478bd9Sstevel@tonic-gate rsm_remote_cntlr_t remote_cntlr[1]; 100*7c478bd9Sstevel@tonic-gate } rsm_connections_t; 101*7c478bd9Sstevel@tonic-gate 102*7c478bd9Sstevel@tonic-gate 103*7c478bd9Sstevel@tonic-gate /* 104*7c478bd9Sstevel@tonic-gate * A pointer to an instance of this structure type is returned by a call 105*7c478bd9Sstevel@tonic-gate * to rsm_get_interconnect_topology(). The actual size of the connections 106*7c478bd9Sstevel@tonic-gate * array is equal to the local_cntlr_count of the rsm_topology_hdr_t struct. 107*7c478bd9Sstevel@tonic-gate */ 108*7c478bd9Sstevel@tonic-gate typedef struct rsm_topology { 109*7c478bd9Sstevel@tonic-gate rsm_topology_hdr_t topology_hdr; 110*7c478bd9Sstevel@tonic-gate rsm_connections_t *connections[1]; 111*7c478bd9Sstevel@tonic-gate } rsm_topology_t; 112*7c478bd9Sstevel@tonic-gate 113*7c478bd9Sstevel@tonic-gate /* 114*7c478bd9Sstevel@tonic-gate * function templates: 115*7c478bd9Sstevel@tonic-gate */ 116*7c478bd9Sstevel@tonic-gate 117*7c478bd9Sstevel@tonic-gate int rsm_get_controller(char *name, rsmapi_controller_handle_t *controller); 118*7c478bd9Sstevel@tonic-gate 119*7c478bd9Sstevel@tonic-gate int rsm_get_controller_attr(rsmapi_controller_handle_t chdl, 120*7c478bd9Sstevel@tonic-gate rsmapi_controller_attr_t *attr); 121*7c478bd9Sstevel@tonic-gate 122*7c478bd9Sstevel@tonic-gate int rsm_release_controller(rsmapi_controller_handle_t controller); 123*7c478bd9Sstevel@tonic-gate 124*7c478bd9Sstevel@tonic-gate /* 125*7c478bd9Sstevel@tonic-gate * Export side memory segment operations 126*7c478bd9Sstevel@tonic-gate */ 127*7c478bd9Sstevel@tonic-gate int rsm_memseg_export_create(rsmapi_controller_handle_t controller, 128*7c478bd9Sstevel@tonic-gate rsm_memseg_export_handle_t *memseg, 129*7c478bd9Sstevel@tonic-gate void *vaddr, size_t size, uint_t flags); 130*7c478bd9Sstevel@tonic-gate 131*7c478bd9Sstevel@tonic-gate 132*7c478bd9Sstevel@tonic-gate int rsm_memseg_export_destroy(rsm_memseg_export_handle_t memseg); 133*7c478bd9Sstevel@tonic-gate 134*7c478bd9Sstevel@tonic-gate 135*7c478bd9Sstevel@tonic-gate 136*7c478bd9Sstevel@tonic-gate int rsm_memseg_export_rebind(rsm_memseg_export_handle_t memseg, 137*7c478bd9Sstevel@tonic-gate void *vaddr, offset_t off, size_t size); 138*7c478bd9Sstevel@tonic-gate 139*7c478bd9Sstevel@tonic-gate 140*7c478bd9Sstevel@tonic-gate 141*7c478bd9Sstevel@tonic-gate int rsm_memseg_export_publish(rsm_memseg_export_handle_t memseg, 142*7c478bd9Sstevel@tonic-gate rsm_memseg_id_t *segment_id, 143*7c478bd9Sstevel@tonic-gate rsmapi_access_entry_t access_list[], 144*7c478bd9Sstevel@tonic-gate uint_t access_list_length); 145*7c478bd9Sstevel@tonic-gate 146*7c478bd9Sstevel@tonic-gate 147*7c478bd9Sstevel@tonic-gate int rsm_memseg_export_unpublish(rsm_memseg_export_handle_t memseg); 148*7c478bd9Sstevel@tonic-gate 149*7c478bd9Sstevel@tonic-gate int rsm_memseg_export_republish(rsm_memseg_export_handle_t memseg, 150*7c478bd9Sstevel@tonic-gate rsmapi_access_entry_t access_list[], 151*7c478bd9Sstevel@tonic-gate uint_t access_list_length); 152*7c478bd9Sstevel@tonic-gate 153*7c478bd9Sstevel@tonic-gate 154*7c478bd9Sstevel@tonic-gate 155*7c478bd9Sstevel@tonic-gate 156*7c478bd9Sstevel@tonic-gate 157*7c478bd9Sstevel@tonic-gate 158*7c478bd9Sstevel@tonic-gate 159*7c478bd9Sstevel@tonic-gate /* 160*7c478bd9Sstevel@tonic-gate * import side memory segment operations: 161*7c478bd9Sstevel@tonic-gate */ 162*7c478bd9Sstevel@tonic-gate 163*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_connect(rsmapi_controller_handle_t controller, 164*7c478bd9Sstevel@tonic-gate rsm_node_id_t node_id, 165*7c478bd9Sstevel@tonic-gate rsm_memseg_id_t segment_id, 166*7c478bd9Sstevel@tonic-gate rsm_permission_t perm, 167*7c478bd9Sstevel@tonic-gate rsm_memseg_import_handle_t *im_memseg); 168*7c478bd9Sstevel@tonic-gate 169*7c478bd9Sstevel@tonic-gate 170*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_disconnect(rsm_memseg_import_handle_t im_memseg); 171*7c478bd9Sstevel@tonic-gate 172*7c478bd9Sstevel@tonic-gate 173*7c478bd9Sstevel@tonic-gate 174*7c478bd9Sstevel@tonic-gate /* 175*7c478bd9Sstevel@tonic-gate * import side memory segment operations (read access functions): 176*7c478bd9Sstevel@tonic-gate */ 177*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_get8(rsm_memseg_import_handle_t im_memseg, 178*7c478bd9Sstevel@tonic-gate off_t offset, 179*7c478bd9Sstevel@tonic-gate uint8_t *datap, 180*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt); 181*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_get16(rsm_memseg_import_handle_t im_memseg, 182*7c478bd9Sstevel@tonic-gate off_t offset, 183*7c478bd9Sstevel@tonic-gate uint16_t *datap, 184*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt); 185*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_get32(rsm_memseg_import_handle_t im_memseg, 186*7c478bd9Sstevel@tonic-gate off_t offset, 187*7c478bd9Sstevel@tonic-gate uint32_t *datap, 188*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt); 189*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_get64(rsm_memseg_import_handle_t im_memseg, 190*7c478bd9Sstevel@tonic-gate off_t offset, 191*7c478bd9Sstevel@tonic-gate uint64_t *datap, 192*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt); 193*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_get(rsm_memseg_import_handle_t im_memseg, 194*7c478bd9Sstevel@tonic-gate off_t offset, 195*7c478bd9Sstevel@tonic-gate void *dst_addr, 196*7c478bd9Sstevel@tonic-gate size_t length); 197*7c478bd9Sstevel@tonic-gate 198*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_getv(rsm_scat_gath_t *); 199*7c478bd9Sstevel@tonic-gate 200*7c478bd9Sstevel@tonic-gate 201*7c478bd9Sstevel@tonic-gate 202*7c478bd9Sstevel@tonic-gate /* 203*7c478bd9Sstevel@tonic-gate * import side memory segment operations (write access functions): 204*7c478bd9Sstevel@tonic-gate */ 205*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_put8(rsm_memseg_import_handle_t im_memseg, 206*7c478bd9Sstevel@tonic-gate off_t offset, 207*7c478bd9Sstevel@tonic-gate uint8_t *datap, 208*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt); 209*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_put16(rsm_memseg_import_handle_t im_memseg, 210*7c478bd9Sstevel@tonic-gate off_t offset, 211*7c478bd9Sstevel@tonic-gate uint16_t *datap, 212*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt); 213*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_put32(rsm_memseg_import_handle_t im_memseg, 214*7c478bd9Sstevel@tonic-gate off_t offset, 215*7c478bd9Sstevel@tonic-gate uint32_t *datap, 216*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt); 217*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_put64(rsm_memseg_import_handle_t im_memseg, 218*7c478bd9Sstevel@tonic-gate off_t offset, 219*7c478bd9Sstevel@tonic-gate uint64_t *datap, 220*7c478bd9Sstevel@tonic-gate ulong_t rep_cnt); 221*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_put(rsm_memseg_import_handle_t im_memseg, 222*7c478bd9Sstevel@tonic-gate off_t offset, 223*7c478bd9Sstevel@tonic-gate void *src_addr, 224*7c478bd9Sstevel@tonic-gate size_t length); 225*7c478bd9Sstevel@tonic-gate 226*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_putv(rsm_scat_gath_t *); 227*7c478bd9Sstevel@tonic-gate 228*7c478bd9Sstevel@tonic-gate 229*7c478bd9Sstevel@tonic-gate /* 230*7c478bd9Sstevel@tonic-gate * import side memory segment operations (mapping): 231*7c478bd9Sstevel@tonic-gate */ 232*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_map(rsm_memseg_import_handle_t im_memseg, 233*7c478bd9Sstevel@tonic-gate void **address, 234*7c478bd9Sstevel@tonic-gate rsm_attribute_t attr, 235*7c478bd9Sstevel@tonic-gate rsm_permission_t perm, 236*7c478bd9Sstevel@tonic-gate off_t offset, size_t length); 237*7c478bd9Sstevel@tonic-gate 238*7c478bd9Sstevel@tonic-gate 239*7c478bd9Sstevel@tonic-gate 240*7c478bd9Sstevel@tonic-gate 241*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_unmap(rsm_memseg_import_handle_t im_memseg); 242*7c478bd9Sstevel@tonic-gate 243*7c478bd9Sstevel@tonic-gate 244*7c478bd9Sstevel@tonic-gate 245*7c478bd9Sstevel@tonic-gate /* 246*7c478bd9Sstevel@tonic-gate * import side memory segment operations (barriers): 247*7c478bd9Sstevel@tonic-gate */ 248*7c478bd9Sstevel@tonic-gate 249*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_init_barrier(rsm_memseg_import_handle_t im_memseg, 250*7c478bd9Sstevel@tonic-gate rsm_barrier_type_t type, 251*7c478bd9Sstevel@tonic-gate rsmapi_barrier_t *barrier); 252*7c478bd9Sstevel@tonic-gate 253*7c478bd9Sstevel@tonic-gate 254*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_open_barrier(rsmapi_barrier_t *barrier); 255*7c478bd9Sstevel@tonic-gate 256*7c478bd9Sstevel@tonic-gate 257*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_close_barrier(rsmapi_barrier_t *barrier); 258*7c478bd9Sstevel@tonic-gate 259*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_order_barrier(rsmapi_barrier_t *barrier); 260*7c478bd9Sstevel@tonic-gate 261*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_destroy_barrier(rsmapi_barrier_t *barrier); 262*7c478bd9Sstevel@tonic-gate 263*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_get_mode(rsm_memseg_import_handle_t im_memseg, 264*7c478bd9Sstevel@tonic-gate rsm_barrier_mode_t *mode); 265*7c478bd9Sstevel@tonic-gate 266*7c478bd9Sstevel@tonic-gate int rsm_memseg_import_set_mode(rsm_memseg_import_handle_t im_memseg, 267*7c478bd9Sstevel@tonic-gate rsm_barrier_mode_t mode); 268*7c478bd9Sstevel@tonic-gate 269*7c478bd9Sstevel@tonic-gate 270*7c478bd9Sstevel@tonic-gate 271*7c478bd9Sstevel@tonic-gate 272*7c478bd9Sstevel@tonic-gate int rsm_intr_signal_post(void * im_memseg, uint_t flags); 273*7c478bd9Sstevel@tonic-gate 274*7c478bd9Sstevel@tonic-gate int rsm_intr_signal_wait(void * im_memseg, int timeout); 275*7c478bd9Sstevel@tonic-gate 276*7c478bd9Sstevel@tonic-gate int rsm_memseg_get_pollfd(void *, struct pollfd *); 277*7c478bd9Sstevel@tonic-gate int rsm_memseg_release_pollfd(void *); 278*7c478bd9Sstevel@tonic-gate 279*7c478bd9Sstevel@tonic-gate int rsm_get_interconnect_topology(rsm_topology_t **); 280*7c478bd9Sstevel@tonic-gate void rsm_free_interconnect_topology(rsm_topology_t *); 281*7c478bd9Sstevel@tonic-gate 282*7c478bd9Sstevel@tonic-gate int rsm_create_localmemory_handle(rsmapi_controller_handle_t, 283*7c478bd9Sstevel@tonic-gate rsm_localmemory_handle_t *, 284*7c478bd9Sstevel@tonic-gate caddr_t, size_t); 285*7c478bd9Sstevel@tonic-gate 286*7c478bd9Sstevel@tonic-gate int rsm_free_localmemory_handle(rsmapi_controller_handle_t, 287*7c478bd9Sstevel@tonic-gate rsm_localmemory_handle_t); 288*7c478bd9Sstevel@tonic-gate 289*7c478bd9Sstevel@tonic-gate int rsm_get_segmentid_range(const char *, rsm_memseg_id_t *, uint32_t *); 290*7c478bd9Sstevel@tonic-gate 291*7c478bd9Sstevel@tonic-gate int rsm_intr_signal_wait_pollfd(struct pollfd [], nfds_t, int, int *); 292*7c478bd9Sstevel@tonic-gate 293*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus 294*7c478bd9Sstevel@tonic-gate } 295*7c478bd9Sstevel@tonic-gate #endif 296*7c478bd9Sstevel@tonic-gate 297*7c478bd9Sstevel@tonic-gate #endif /* _RSMAPI_H */ 298