#ifndef _RSMAPI_H
#define _RSMAPI_H
#ifdef __cplusplus
extern "C" {
#endif
#include <poll.h>
#include <sys/param.h>
#include <sys/rsm/rsm_common.h>
#include <sys/rsm/rsmapi_common.h>
typedef enum {
RSM_MAP_NONE = 0x0,
RSM_MAP_FIXED = 0x1,
RSM_MAP_RESERVED = 0x2
}rsm_attribute_t;
#define RSM_CONNECTION_ACTIVE 3
typedef struct rsm_topology_hdr {
rsm_node_id_t local_nodeid;
uint_t local_cntlr_count;
} rsm_topology_hdr_t;
typedef struct rsm_connections_hdr {
char cntlr_name[MAXNAMELEN];
rsm_addr_t local_hwaddr;
int remote_cntlr_count;
} rsm_connections_hdr_t;
typedef struct rsm_remote_cntlr {
rsm_node_id_t remote_nodeid;
char remote_cntlrname[MAXNAMELEN];
rsm_addr_t remote_hwaddr;
uint_t connection_state;
} rsm_remote_cntlr_t;
typedef struct rsm_connection {
rsm_connections_hdr_t hdr;
rsm_remote_cntlr_t remote_cntlr[1];
} rsm_connections_t;
typedef struct rsm_topology {
rsm_topology_hdr_t topology_hdr;
rsm_connections_t *connections[1];
} rsm_topology_t;
int rsm_get_controller(char *name, rsmapi_controller_handle_t *controller);
int rsm_get_controller_attr(rsmapi_controller_handle_t chdl,
rsmapi_controller_attr_t *attr);
int rsm_release_controller(rsmapi_controller_handle_t controller);
int rsm_memseg_export_create(rsmapi_controller_handle_t controller,
rsm_memseg_export_handle_t *memseg,
void *vaddr, size_t size, uint_t flags);
int rsm_memseg_export_destroy(rsm_memseg_export_handle_t memseg);
int rsm_memseg_export_rebind(rsm_memseg_export_handle_t memseg,
void *vaddr, offset_t off, size_t size);
int rsm_memseg_export_publish(rsm_memseg_export_handle_t memseg,
rsm_memseg_id_t *segment_id,
rsmapi_access_entry_t access_list[],
uint_t access_list_length);
int rsm_memseg_export_unpublish(rsm_memseg_export_handle_t memseg);
int rsm_memseg_export_republish(rsm_memseg_export_handle_t memseg,
rsmapi_access_entry_t access_list[],
uint_t access_list_length);
int rsm_memseg_import_connect(rsmapi_controller_handle_t controller,
rsm_node_id_t node_id,
rsm_memseg_id_t segment_id,
rsm_permission_t perm,
rsm_memseg_import_handle_t *im_memseg);
int rsm_memseg_import_disconnect(rsm_memseg_import_handle_t im_memseg);
int rsm_memseg_import_get8(rsm_memseg_import_handle_t im_memseg,
off_t offset,
uint8_t *datap,
ulong_t rep_cnt);
int rsm_memseg_import_get16(rsm_memseg_import_handle_t im_memseg,
off_t offset,
uint16_t *datap,
ulong_t rep_cnt);
int rsm_memseg_import_get32(rsm_memseg_import_handle_t im_memseg,
off_t offset,
uint32_t *datap,
ulong_t rep_cnt);
int rsm_memseg_import_get64(rsm_memseg_import_handle_t im_memseg,
off_t offset,
uint64_t *datap,
ulong_t rep_cnt);
int rsm_memseg_import_get(rsm_memseg_import_handle_t im_memseg,
off_t offset,
void *dst_addr,
size_t length);
int rsm_memseg_import_getv(rsm_scat_gath_t *);
int rsm_memseg_import_put8(rsm_memseg_import_handle_t im_memseg,
off_t offset,
uint8_t *datap,
ulong_t rep_cnt);
int rsm_memseg_import_put16(rsm_memseg_import_handle_t im_memseg,
off_t offset,
uint16_t *datap,
ulong_t rep_cnt);
int rsm_memseg_import_put32(rsm_memseg_import_handle_t im_memseg,
off_t offset,
uint32_t *datap,
ulong_t rep_cnt);
int rsm_memseg_import_put64(rsm_memseg_import_handle_t im_memseg,
off_t offset,
uint64_t *datap,
ulong_t rep_cnt);
int rsm_memseg_import_put(rsm_memseg_import_handle_t im_memseg,
off_t offset,
void *src_addr,
size_t length);
int rsm_memseg_import_putv(rsm_scat_gath_t *);
int rsm_memseg_import_map(rsm_memseg_import_handle_t im_memseg,
void **address,
rsm_attribute_t attr,
rsm_permission_t perm,
off_t offset, size_t length);
int rsm_memseg_import_unmap(rsm_memseg_import_handle_t im_memseg);
int rsm_memseg_import_init_barrier(rsm_memseg_import_handle_t im_memseg,
rsm_barrier_type_t type,
rsmapi_barrier_t *barrier);
int rsm_memseg_import_open_barrier(rsmapi_barrier_t *barrier);
int rsm_memseg_import_close_barrier(rsmapi_barrier_t *barrier);
int rsm_memseg_import_order_barrier(rsmapi_barrier_t *barrier);
int rsm_memseg_import_destroy_barrier(rsmapi_barrier_t *barrier);
int rsm_memseg_import_get_mode(rsm_memseg_import_handle_t im_memseg,
rsm_barrier_mode_t *mode);
int rsm_memseg_import_set_mode(rsm_memseg_import_handle_t im_memseg,
rsm_barrier_mode_t mode);
int rsm_intr_signal_post(void * im_memseg, uint_t flags);
int rsm_intr_signal_wait(void * im_memseg, int timeout);
int rsm_memseg_get_pollfd(void *, struct pollfd *);
int rsm_memseg_release_pollfd(void *);
int rsm_get_interconnect_topology(rsm_topology_t **);
void rsm_free_interconnect_topology(rsm_topology_t *);
int rsm_create_localmemory_handle(rsmapi_controller_handle_t,
rsm_localmemory_handle_t *,
caddr_t, size_t);
int rsm_free_localmemory_handle(rsmapi_controller_handle_t,
rsm_localmemory_handle_t);
int rsm_get_segmentid_range(const char *, rsm_memseg_id_t *, uint32_t *);
int rsm_intr_signal_wait_pollfd(struct pollfd [], nfds_t, int, int *);
#ifdef __cplusplus
}
#endif
#endif