summaryrefslogtreecommitdiffstats
path: root/src/mercury/include/mercury_types.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mercury/include/mercury_types.h')
-rw-r--r--src/mercury/include/mercury_types.h96
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 */