diff options
Diffstat (limited to 'src/mercury/include/mercury_types.h')
-rw-r--r-- | src/mercury/include/mercury_types.h | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/mercury/include/mercury_types.h b/src/mercury/include/mercury_types.h new file mode 100644 index 0000000..7ea6b17 --- /dev/null +++ b/src/mercury/include/mercury_types.h @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2013-2020 Argonne National Laboratory, Department of Energy, + * UChicago Argonne, LLC and The HDF Group. + * All rights reserved. + * + * The full copyright notice, including terms governing use, modification, + * and redistribution, is contained in the COPYING file that can be + * found at the root of the source code distribution tree. + */ + +#ifndef MERCURY_TYPES_H +#define MERCURY_TYPES_H + +#include "mercury_core_types.h" + +/*************************************/ +/* Public Type and Struct Definition */ +/*************************************/ + +typedef struct hg_class hg_class_t; /* Opaque HG class */ +typedef struct hg_context hg_context_t; /* Opaque HG context */ +typedef struct hg_addr * hg_addr_t; /* Abstract HG address */ +typedef struct hg_handle *hg_handle_t; /* Abstract RPC handle */ +typedef struct hg_bulk * hg_bulk_t; /* Abstract bulk data handle */ +typedef struct hg_proc * hg_proc_t; /* Abstract serialization processor */ +typedef struct hg_op_id * hg_op_id_t; /* Abstract operation id */ + +/* HG info struct */ +struct hg_info { + hg_class_t * hg_class; /* HG class */ + hg_context_t *context; /* HG context */ + hg_addr_t addr; /* HG address at target/origin */ + hg_id_t id; /* RPC ID */ + hg_uint8_t context_id; /* Context ID at target/origin */ +}; + +/** + * Bulk transfer operators. + */ +typedef enum { + HG_BULK_PUSH, /*!< push data to origin */ + HG_BULK_PULL /*!< pull data from origin */ +} hg_bulk_op_t; + +/* Callback info structs */ +struct hg_cb_info_lookup { + hg_addr_t addr; /* HG address */ +}; + +struct hg_cb_info_forward { + hg_handle_t handle; /* HG handle */ +}; + +struct hg_cb_info_respond { + hg_handle_t handle; /* HG handle */ +}; + +struct hg_cb_info_bulk { + hg_bulk_t origin_handle; /* HG Bulk origin handle */ + hg_bulk_t local_handle; /* HG Bulk local handle */ + hg_bulk_op_t op; /* Operation type */ + hg_size_t size; /* Total size transferred */ +}; + +struct hg_cb_info { + union { /* Union of callback info structures */ + struct hg_cb_info_lookup lookup; + struct hg_cb_info_forward forward; + struct hg_cb_info_respond respond; + struct hg_cb_info_bulk bulk; + } info; + void * arg; /* User data */ + hg_cb_type_t type; /* Callback type */ + hg_return_t ret; /* Return value */ +}; + +/* RPC / HG callbacks */ +typedef hg_return_t (*hg_rpc_cb_t)(hg_handle_t handle); +typedef hg_return_t (*hg_cb_t)(const struct hg_cb_info *callback_info); + +/* Proc callback for serializing/deserializing parameters */ +typedef hg_return_t (*hg_proc_cb_t)(hg_proc_t proc, void *data); + +/*****************/ +/* Public Macros */ +/*****************/ + +/* Constant values */ +#define HG_ADDR_NULL ((hg_addr_t)0) +#define HG_HANDLE_NULL ((hg_handle_t)0) +#define HG_BULK_NULL ((hg_bulk_t)0) +#define HG_PROC_NULL ((hg_proc_t)0) +#define HG_OP_ID_NULL ((hg_op_id_t)0) +#define HG_OP_ID_IGNORE ((hg_op_id_t *)1) + +#endif /* MERCURY_TYPES_H */ |