diff options
Diffstat (limited to 'usr/src/uts/common/sys/rsm/rsmpi.h')
| -rw-r--r-- | usr/src/uts/common/sys/rsm/rsmpi.h | 709 |
1 files changed, 709 insertions, 0 deletions
diff --git a/usr/src/uts/common/sys/rsm/rsmpi.h b/usr/src/uts/common/sys/rsm/rsmpi.h new file mode 100644 index 0000000000..129be9974c --- /dev/null +++ b/usr/src/uts/common/sys/rsm/rsmpi.h @@ -0,0 +1,709 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 1998-2001 by Sun Microsystems, Inc. + * All rights reserved. + */ + +#ifndef _SYS_RSM_RSMPI_H +#define _SYS_RSM_RSMPI_H + +#pragma ident "%Z%%M% %I% %E% SMI" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _KERNEL +typedef void * ddi_as_handle_t; +#endif + +#include <sys/sunddi.h> +#include <sys/rsm/rsm_common.h> + +struct __rsm_resource_callback_arg; +typedef struct __rsm_resource_callback_arg *rsm_resource_callback_arg_t; + +typedef void (*rsm_resource_callback_t)(rsm_resource_callback_arg_t); + +struct __rsm_callback_arg; +typedef struct __rsm_callback_arg *rsm_callback_arg_t; + +typedef void (*rsm_callback_t)(rsm_callback_arg_t); + +/* Values for resource callback function pointer */ +#define RSM_RESOURCE_SLEEP (rsm_resource_callback_t)0 +#define RSM_RESOURCE_DONTWAIT (rsm_resource_callback_t)-1 + +/* rsm_seg_create() flags values */ +#define RSM_ALLOW_UNBIND_REBIND 0x01 + +typedef uint_t rsm_intr_t; +typedef rsm_intr_t rsm_intr_service_t; +/* The following definitions used to describe the ranges fro rsm_intr_t */ +#define RSM_INTR_T_DRV_BASE 0 +#define RSM_INTR_T_DRV_END 0x3F +#define RSM_INTR_T_FRM_BASE 0x40 +#define RSM_INTR_T_FRM_END 0x4F +#define RSM_INTR_T_RESERVED_BASE 0x50 +#define RSM_INTR_T_RESERVED_END 0x5F +#define RSM_INTR_T_SUN_BASE 0x60 +#define RSM_INTR_T_SUN_END 0xDF +#define RSM_INTR_T_USR_BASE 0xE0 +#define RSM_INTR_T_USR_END 0xFF +#define RSM_INTR_T_NSVC 0x100 + +/* kstat's ks_name for RSMPI controller drivers */ +#define RSM_KS_NAME "rsmpi_stat" + +/* named kstat component names */ +#define RSM_KS_CTLR_STATE "ctlr_state" /* CHAR */ +#define RSM_KS_ADDR "addr" /* UINT64 */ +#define RSM_KS_EX_MEMSEGS "ex_memsegs" /* UINT32 */ +#define RSM_KS_EX_MEMSEGS_PUB "ex_memsegs_pub" /* UINT32 */ +#define RSM_KS_EX_MEMSEGS_CON "ex_memsegs_con" /* UINT32 */ +#define RSM_KS_BYTES_BOUND "bytes_bound" /* UINT64 */ +#define RSM_KS_IM_MEMSEGS_CON "im_memsegs_con" /* UINT32 */ +#define RSM_KS_SENDQS "sendqs" /* UINT64 */ +#define RSM_KS_HANDLERS "handlers" /* UINT64 */ + +/* The following are the possible values of RSM_KS_CTLR_STATE */ +#define RSM_AE_CTLR_DOWN "rsm_down" +#define RSM_AE_CTLR_UP "rsm_up" + + +struct __rsm_send_q_handle; +typedef struct __rsm_send_q_handle *rsm_send_q_handle_t; + +/* rsm_intr_send_q_create flags values */ +#define RSM_INTR_SEND_Q_NO_FENCE 0x1 +#define RSM_INTR_SEND_Q_FULL_FAIL 0x2 +#define RSM_INTR_SEND_Q_UNRELIABLE 0x4 + +typedef struct { + void *is_data; + size_t is_size; + int is_flags; + clock_t is_wait; +} rsm_send_t; + +/* rsm_send_t flags values */ +#define RSM_INTR_SEND_QUEUE 0x1 +#define RSM_INTR_SEND_DELIVER 0x2 +#define RSM_INTR_SEND_POLL 0x4 +#define RSM_INTR_SEND_SLEEP 0x8 +#define RSM_INTR_SEND_LOWER_FENCE 0x10 + +typedef enum { + RSM_INTR_HAND_UNCLAIMED = 0, + RSM_INTR_HAND_CLAIMED = 1, + RSM_INTR_HAND_CLAIMED_EXCLUSIVE = 2 +} rsm_intr_hand_ret_t; + +typedef enum { + RSM_INTR_Q_OP_CREATE, + RSM_INTR_Q_OP_CONFIGURE, + RSM_INTR_Q_OP_DESTROY, + RSM_INTR_Q_OP_RECEIVE, + RSM_INTR_Q_OP_DROP +} rsm_intr_q_op_t; + +struct __rsm_intr_hand_arg; +typedef struct __rsm_intr_hand_arg *rsm_intr_hand_arg_t; + +struct __rsm_registry_item; +typedef struct __rsm_registry_item *rsm_registry_item_t; + +typedef int rsm_intr_pri_t; + +typedef struct { + rsm_addr_t ae_addr; /* node hwaddr allowed access */ + rsm_permission_t ae_permission; /* permissions for node */ +} rsm_access_entry_t; +/* + * ae_addr can be set to the following value to mean that the permissions + * should apply to all nodes accessible through this RSM controller + */ +#define RSM_ACCESS_PUBLIC 0xFFFF + +struct __rsm_controller_handle; +typedef struct __rsm_controller_handle *rsm_controller_handle_t; + +/* + * The following typedef is used to represent a controller object. + */ +typedef struct rsm_controller_object { + struct rsm_ops *ops; + rsm_controller_handle_t handle; +} rsm_controller_object_t; + +typedef rsm_intr_hand_ret_t (*rsm_intr_hand_t)( + rsm_controller_object_t *controller, + rsm_intr_q_op_t operation, + rsm_addr_t sender, + void *data, + size_t size, + rsm_intr_hand_arg_t arg); + +typedef struct { + enum { RSM_MEM_VADDR, + RSM_MEM_BUF, + RSM_MEM_HANDLE, + RSM_MEM_INVALID } ms_type; + union { + struct { + void *vaddr; + size_t length; + ddi_as_handle_t as; + } vr; + struct buf *bp; + rsm_memseg_export_handle_t handle; + } ms_memory; +#define ms_bp ms_memory.bp +#define ms_vaddr ms_memory.vr.vaddr +#define ms_length ms_memory.vr.length +#define ms_as ms_memory.vr.as +} rsm_memory_local_t; + +typedef struct { + rsm_memory_local_t local_mem; + size_t local_offset; + rsm_memseg_import_handle_t remote_handle; + size_t remote_offset; + size_t transfer_length; +} rsmpi_iovec_t; + +typedef struct { + ulong_t io_request_count; /* size of iovec array */ + ulong_t io_residual_count; /* zero for success */ + uio_seg_t io_segflg; /* user/kernel addr */ + rsmpi_iovec_t *iovec; /* ptr to array */ +} rsmpi_scat_gath_t; + +typedef struct { + char *attr_name; + rsm_addr_t attr_controller_addr; + uint_t attr_direct_access_sizes; + uint_t attr_atomic_sizes; + uint_t attr_error_sizes; + uint_t attr_error_behavior; + boolean_t attr_mmu_protections; + size_t attr_page_size; + size_t attr_max_export_segment_size; + size_t attr_tot_export_segment_size; + ulong_t attr_max_export_segments; + size_t attr_max_import_map_size; + size_t attr_tot_import_map_size; + ulong_t attr_max_import_segments; + boolean_t attr_io_space_exportable; + boolean_t attr_imported_space_ioable; + boolean_t attr_intr_sender_ident; + size_t attr_intr_data_size_max; + uint_t attr_intr_data_align; + boolean_t attr_intr_piggyback; + boolean_t attr_resource_callbacks; +} rsm_controller_attr_t; + +/* + * The following three defines are possible values for attr_error_behavior + * field of the rsm_controller_attr_t struct. + */ +#define RSM_ERR_NOCHANGE 0 +#define RSM_ERR_ZEROES 0x1 +#define RSM_ERR_RANDOM 0x2 + +typedef struct rsm_ops { + + /* + * structure revision number: + */ + uint_t rsm_version; + + /* + * export side memory segment operations: + */ + int (*rsm_seg_create) + (rsm_controller_handle_t controller, + rsm_memseg_export_handle_t *memseg, + size_t size, + uint_t flags, + rsm_memory_local_t *memory, + rsm_resource_callback_t callback, + rsm_resource_callback_arg_t callback_arg); + int (*rsm_seg_destroy) + (rsm_memseg_export_handle_t handle); + int (*rsm_bind) + (rsm_memseg_export_handle_t memseg, + off_t offset, + rsm_memory_local_t *memory, + rsm_resource_callback_t callback, + rsm_resource_callback_arg_t callback_arg); + int (*rsm_unbind) + (rsm_memseg_export_handle_t memseg, + off_t offset, + size_t length); + int (*rsm_rebind) + (rsm_memseg_export_handle_t memseg, + off_t offset, + rsm_memory_local_t *memory, + rsm_resource_callback_t callback, + rsm_resource_callback_arg_t callback_arg); + int (*rsm_publish) + (rsm_memseg_export_handle_t memseg, + rsm_access_entry_t access_list[], + uint_t access_list_length, + rsm_memseg_id_t segment_id, + rsm_resource_callback_t callback, + rsm_resource_callback_arg_t callback_arg); + int (*rsm_unpublish) + (rsm_memseg_export_handle_t memseg); + int (*rsm_republish) + (rsm_memseg_export_handle_t memseg, + rsm_access_entry_t access_list[], + uint_t access_list_length, + rsm_resource_callback_t callback, + rsm_resource_callback_arg_t callback_arg); + + /* + * import side memory segment operations + */ + int (*rsm_connect) + (rsm_controller_handle_t controller, + rsm_addr_t addr, + rsm_memseg_id_t segment_id, + rsm_memseg_import_handle_t *im_memseg); + + int (*rsm_disconnect) + (rsm_memseg_import_handle_t im_memseg); + + /* + * import side memory segment operations (read access functions): + */ + int (* rsm_get8) + (rsm_memseg_import_handle_t im_memseg, + off_t offset, + uint8_t *datap, + ulong_t rep_cnt, + boolean_t byte_swap); + int (* rsm_get16) + (rsm_memseg_import_handle_t im_memseg, + off_t offset, + uint16_t *datap, + ulong_t rep_cnt, + boolean_t byte_swap); + int (* rsm_get32) + (rsm_memseg_import_handle_t im_memseg, + off_t offset, + uint32_t *datap, + ulong_t rep_cnt, + boolean_t byte_swap); + int (* rsm_get64) + (rsm_memseg_import_handle_t im_memseg, + off_t offset, + uint64_t *datap, + ulong_t rep_cnt, + boolean_t byte_swap); + int (* rsm_get) + (rsm_memseg_import_handle_t im_memseg, + off_t offset, + void *datap, + size_t length); + + /* + * import side memory segment operations (write access functions) + */ + int (* rsm_put8) + (rsm_memseg_import_handle_t im_memseg, + off_t offset, + uint8_t *datap, + ulong_t rep_cnt, + boolean_t byte_swap); + int (* rsm_put16) + (rsm_memseg_import_handle_t im_memseg, + off_t offset, + uint16_t *datap, + ulong_t rep_cnt, + boolean_t byte_swap); + int (* rsm_put32) + (rsm_memseg_import_handle_t im_memseg, + off_t offset, + uint32_t *datap, + ulong_t rep_cnt, + boolean_t byte_swap); + int (* rsm_put64) + (rsm_memseg_import_handle_t im_memseg, + off_t offset, + uint64_t *datap, + ulong_t rep_cnt, + boolean_t byte_swap); + int (* rsm_put) + (rsm_memseg_import_handle_t im_memseg, + off_t offset, + void *datap, + size_t length); + + /* + * import side memory segment operations (mapping) + */ + int (*rsm_map)(rsm_memseg_import_handle_t im_memseg, + off_t offset, + size_t len, + size_t *maplen, + dev_info_t **dipp, + uint_t *register_number, + off_t *register_offset, + rsm_resource_callback_t callback, + rsm_resource_callback_arg_t callback_arg); + + int (*rsm_unmap) + (rsm_memseg_import_handle_t im_memseg); + + /* + * import side memory segment operations (barriers): + */ + int (* rsm_open_barrier_region) + (rsm_memseg_import_handle_t region, + rsm_barrier_t *barrier); + int (* rsm_open_barrier_regions) + (rsm_memseg_import_handle_t regions[], + uint_t num_regions, + rsm_barrier_t *barrier); + int (* rsm_open_barrier_node) + (rsm_controller_handle_t controller, + rsm_addr_t addr, + rsm_barrier_t *barrier); + int (* rsm_open_barrier_ctrl) + (rsm_controller_handle_t controller, + rsm_barrier_t *barrier); + int (* rsm_open_barrier_region_thr) + (rsm_memseg_import_handle_t region, + rsm_barrier_t *barrier); + int (* rsm_open_barrier_regions_thr) + (rsm_memseg_import_handle_t regions[], + uint_t num_regions, + rsm_barrier_t *barrier); + int (* rsm_open_barrier_node_thr) + (rsm_controller_handle_t controller, + rsm_addr_t addr, + rsm_barrier_t *barrier); + int (* rsm_open_barrier_ctrl_thr) + (rsm_controller_handle_t controller, + rsm_barrier_t *barrier); + int (* rsm_close_barrier) + (rsm_barrier_t *barrier); + int (* rsm_reopen_barrier) + (rsm_barrier_t *barrier); + int (* rsm_order_barrier) + (rsm_barrier_t *barrier); + int (* rsm_thread_init) + (rsm_controller_handle_t controller); + int (* rsm_thread_fini) + (rsm_controller_handle_t controller); + int (* rsm_get_barrier_mode) + (rsm_memseg_import_handle_t im_memseg, + rsm_barrier_mode_t *mode); + int (* rsm_set_barrier_mode) + (rsm_memseg_import_handle_t im_memseg, + rsm_barrier_mode_t mode); + + /* + * sending side interrupt operations: + */ + int (* rsm_sendq_create) + (rsm_controller_handle_t controller, + rsm_addr_t addr, + rsm_intr_service_t service, + rsm_intr_pri_t pri, + ulong_t qdepth, + uint_t flags, + rsm_resource_callback_t callback, + rsm_resource_callback_arg_t arg, + rsm_send_q_handle_t *iqp); + int (* rsm_sendq_config) + (rsm_send_q_handle_t iq, + rsm_intr_pri_t pri, + ulong_t qdepth, + uint_t flags, + rsm_resource_callback_t callback, + rsm_resource_callback_arg_t arg); + int (* rsm_sendq_destroy) + (rsm_send_q_handle_t iq); + int (* rsm_send) + (rsm_send_q_handle_t iq, + rsm_send_t *is, + rsm_barrier_t *barrier); + + + /* + * receiving side interrupt operations: + */ + int (* rsm_register_handler) + (rsm_controller_handle_t controller, + rsm_controller_object_t *controller_obj, + rsm_intr_t type, + rsm_intr_hand_t handler, + rsm_intr_hand_arg_t handler_arg, + rsm_addr_t senders_list[], + uint_t senders_list_length); + + int (* rsm_unregister_handler) + (rsm_controller_handle_t controller, + rsm_intr_t type, + rsm_intr_hand_t handler, + rsm_intr_hand_arg_t handler_arg); + + + /* scatter-gather I/O */ + int (* rsm_memseg_import_getv) + (rsm_controller_handle_t cp, + rsmpi_scat_gath_t *sg_io); + int (* rsm_memseg_import_putv) + (rsm_controller_handle_t cp, + rsmpi_scat_gath_t *sg_io); + + /* Management operation */ + int (*rsm_get_peers) + (rsm_controller_handle_t controller, + rsm_addr_t *addr_list, + uint_t count, + uint_t *num_addrs); + + /* Extension operation */ + int (*rsm_extension) + (rsm_controller_handle_t controller, + char *extname, + void *extobj); + +} rsm_ops_t; + +/* + * service module function templates: + */ + +int rsm_get_controller(const char *name, uint_t number, + rsm_controller_object_t *controller, + uint_t version); + +int rsm_release_controller(const char *name, uint_t number, + rsm_controller_object_t *controller); + +int rsm_get_controller_attr(rsm_controller_handle_t, + rsm_controller_attr_t **attrp); +/* + * MACROS for Clients requesting services via RSMPI module + */ + +/* + * Export Side segment operations + */ + +#define RSM_SEG_CREATE(controller, memseg, size, flags, memory, callback, \ + callback_arg) \ + (*((controller).ops->rsm_seg_create)) \ + ((controller).handle, (memseg), (size), (flags), (memory), \ + (callback), (callback_arg)) +#define RSM_SEG_DESTROY(controller, memseg) \ + (*((controller).ops->rsm_seg_destroy)) \ + ((memseg)) +#define RSM_BIND(controller, memseg, offset, memory, callback, \ + callback_arg) \ + (*((controller).ops->rsm_bind)) \ + ((memseg), offset, (memory), (callback), (callback_arg)) +#define RSM_UNBIND(controller, memseg, offset, length) \ + (*((controller).ops->rsm_unbind)) \ + ((memseg), (offset), (length)) +#define RSM_REBIND(controller, memseg, offset, memory, callback, \ + callback_arg) \ + (*((controller).ops->rsm_rebind)) \ + ((memseg), offset, (memory), (callback), (callback_arg)) +#define RSM_PUBLISH(controller, memseg, access_list, access_list_length, \ + segment_id, callback, callback_arg) \ + (*((controller).ops->rsm_publish)) \ + ((memseg), access_list, access_list_length, segment_id, \ + (callback), (callback_arg)) +#define RSM_UNPUBLISH(controller, memseg) \ + (*((controller).ops->rsm_unpublish)) \ + ((memseg)) +#define RSM_REPUBLISH(controller, memseg, access_list, access_list_length, \ + callback, callback_arg) \ + (*((controller).ops->rsm_republish)) \ + ((memseg), (access_list), (access_list_length), (callback), \ + (callback_arg)) +#define RSM_CONNECT(controller, addr, segment_id, im_memseg) \ + (*((controller).ops->rsm_connect)) \ + ((controller).handle, (addr), (segment_id), (im_memseg)) +#define RSM_DISCONNECT(controller, im_memseg) \ + (*((controller).ops->rsm_disconnect)) \ + ((im_memseg)) + + /* + * import side memory segment operations (read access functions) + */ + +#define RSM_GET8(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ + (*((controller).ops->rsm_get8)) \ + ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) +#define RSM_GET16(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ + (*((controller).ops->rsm_get16)) \ + ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) +#define RSM_GET32(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ + (*((controller).ops->rsm_get32)) \ + ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) +#define RSM_GET64(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ + (*((controller).ops->rsm_get64)) \ + ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) +#define RSM_GET(controller, im_memseg, offset, dst_addr, length) \ + (*((controller).ops->rsm_get)) \ + ((im_memseg), (offset), (dst_addr), (length)) + + /* + * import side memory segment operations (write access functions) + */ + +#define RSM_PUT8(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ + (*((controller).ops->rsm_put8)) \ + ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) +#define RSM_PUT16(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ + (*((controller).ops->rsm_put16)) \ + ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) +#define RSM_PUT32(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ + (*((controller).ops->rsm_put32)) \ + ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) +#define RSM_PUT64(controller, im_memseg, offset, datap, rep_cnt, byte_swap) \ + (*((controller).ops->rsm_put64)) \ + ((im_memseg), (offset), (datap), (rep_cnt), (byte_swap)) +#define RSM_PUT(controller, im_memseg, offset, datap, length) \ + (*((controller).ops->rsm_put)) \ + ((im_memseg), (offset), (datap), (length)) + + /* + * import side memory segment operations (mapping): + */ + +#define RSM_MAP(controller, im_memseg, offset, length, maplen, dipp, \ + dev_register, dev_offset, callback, arg) \ + (*((controller).ops->rsm_map)) \ + ((im_memseg), (offset), (length), (maplen), (dipp), (dev_register), \ + (dev_offset), (callback), (arg)) +#define RSM_UNMAP(controller, im_memseg) \ + (*((controller).ops->rsm_unmap)) \ + ((im_memseg)) + + /* + * import side memory segment operations (barriers): + */ + +#define RSM_OPEN_BARRIER_REGION(controller, region, barrier) \ + (*((controller).ops->rsm_open_barrier_region)) \ + ((region), (barrier)) +#define RSM_OPEN_BARRIER_REGIONS(controller, regions, num_regions, barrier) \ + (*((controller).ops->rsm_open_barrier_regions)) \ + ((regions), (num_regions), (barrier)) +#define RSM_OPEN_BARRIER_NODE(controller, addr, barrier) \ + (*((controller).ops-> rsm_open_barrier_node)) \ + ((controller).handle, (addr), (barrier)) +#define RSM_OPEN_BARRIER_CTRL(controller, barrier) \ + (*((controller).ops->rsm_open_barrier_ctrl)) \ + ((controller).handle, (barrier)) +#define RSM_OPEN_BARRIER_REGION_THR(controller, region, barrier) \ + (*((controller).ops->rsm_open_barrier_region_thr)) \ + ((region), (barrier)) +#define RSM_OPEN_BARRIER_REGIONS_THR(controller, regions, num_regions, barrier)\ + (*((controller).ops->rsm_open_barrier_regions_thr)) \ + ((regions), (num_regions), (barrier)) +#define RSM_OPEN_BARRIER_NODE_THR(controller, addr, barrier) \ + (*((controller).ops->rsm_open_barrier_node_thr)) \ + ((controller).handle, (addr), (barrier)) +#define RSM_OPEN_BARRIER_CTRL_THR(controller, barrier) \ + (*((controller).ops->rsm_open_barrier_ctrl_thr)) \ + ((controller).handle, (barrier)); +#define RSM_CLOSE_BARRIER(controller, barrier) \ + (*((controller).ops->rsm_close_barrier)) \ + ((barrier)) +#define RSM_REOPEN_BARRIER(controller, barrier) \ + (*((controller).ops->rsm_reopen_barrier)) \ + ((barrier)); +#define RSM_ORDER_BARRIER(controller, barrier) \ + (*((controller).ops->rsm_order_barrier)) \ + ((barrier)) +#define RSM_THREAD_INIT(controller) \ + (*((controller).ops->rsm_thread_init)) \ + ((controller).handle) +#define RSM_THREAD_FINI(controller) \ + (*((controller).ops->rsm_thread_fini)) \ + ((controller).handle) +#define RSM_GET_BARRIER_MODE(controller, im_memseg, mode) \ + (*((controller).ops->rsm_get_barrier_mode)) \ + ((im_memseg), (mode)) +#define RSM_SET_BARRIER_MODE(controller, im_memseg, mode) \ + (*((controller).ops->rsm_set_barrier_mode)) \ + ((im_memseg), (mode)) + /* + * sending side interrupt operations: + */ + +#define RSM_SENDQ_CREATE(controller, addr, service, pri, qdepth, flags, \ + callback, arg, iqp) \ + (*((controller).ops->rsm_sendq_create)) \ + ((controller).handle, (addr), (service), (pri), (qdepth), (flags), \ + (callback), (arg), (iqp)) +#define RSM_SENDQ_CONFIG(controller, iq, pri, qdepth, flags, callback, arg) \ + (*((controller).ops->rsm_sendq_config)) \ + ((iq), (pri), (qdepth), (flags), \ + (callback), (arg)) +#define RSM_SENDQ_DESTROY(controller, iq) \ + (*((controller).ops->rsm_sendq_destroy)) \ + ((iq)) +#define RSM_SEND(controller, iq, is, barrier) \ + (*((controller).ops->rsm_send)) \ + ((iq), (is), (barrier)) + + /* + * receiving side interrupt operations: + */ +#define RSM_REGISTER_HANDLER(controller, type, handler, handler_arg, \ + senders_list, senders_list_length) \ + (*((controller).ops->rsm_register_handler)) \ + ((controller).handle, &(controller), (type), (handler), (handler_arg), \ + (senders_list), (senders_list_length)) +#define RSM_UNREGISTER_HANDLER(controller, type, handler, handler_arg) \ + (*((controller).ops->rsm_unregister_handler)) \ + ((controller).handle, (type), (handler), (handler_arg)) +#define RSM_GETV(controller, sg_io) \ + (*((controller).ops->rsm_memseg_import_getv)) \ + ((controller).handle, (sg_io)) +#define RSM_PUTV(controller, sg_io) \ + (*((controller).ops->rsm_memseg_import_putv)) \ + ((controller).handle, (sg_io)) +#define RSM_GET_PEERS(controller, addr_list, count, num_addrs) \ + (*((controller).ops->rsm_get_peers)) \ + ((controller).handle, (addr_list), (count), (num_addrs)) +#define RSM_EXTENSION(controller, extname, extobj) \ + (*((controller).ops->rsm_extension)) \ + ((controller).handle, (extname), (extobj)) + +#ifdef __cplusplus +} +#endif + + +#endif /* _SYS_RSM_RSMPI_H */ |
