bake-rpc.h 5.3 KB
Newer Older
Philip Carns's avatar
Philip Carns committed
1 2 3 4 5 6
/*
 * (C) 2015 The University of Chicago
 * 
 * See COPYRIGHT in top-level directory.
 */

7 8
#ifndef __BAKE_RPC
#define __BAKE_RPC
Philip Carns's avatar
Philip Carns committed
9 10

#include <margo.h>
11
#include <mercury_proc_string.h>
12
#include <bake.h>
Philip Carns's avatar
Philip Carns committed
13

14
/* encoders for BAKE-specific types */
15
static inline hg_return_t hg_proc_bake_target_id_t(hg_proc_t proc, bake_target_id_t *bti);
16
static inline hg_return_t hg_proc_bake_region_id_t(hg_proc_t proc, bake_region_id_t *rid);
Philip Carns's avatar
Philip Carns committed
17

18 19 20 21 22
/* BAKE shutdown */
DECLARE_MARGO_RPC_HANDLER(bake_shutdown_ult)

/* BAKE create */
MERCURY_GEN_PROC(bake_create_in_t,
23 24
    ((bake_target_id_t)(bti))\
    ((uint64_t)(region_size)))
25
MERCURY_GEN_PROC(bake_create_out_t,
26
    ((int32_t)(ret))\
27 28
    ((bake_region_id_t)(rid)))
DECLARE_MARGO_RPC_HANDLER(bake_create_ult)
29

30 31
/* BAKE write */
MERCURY_GEN_PROC(bake_write_in_t,
Philip Carns's avatar
Philip Carns committed
32
    ((bake_target_id_t)(bti))\
33
    ((bake_region_id_t)(rid))\
Philip Carns's avatar
Philip Carns committed
34
    ((uint64_t)(region_offset))\
35 36 37 38
    ((hg_bulk_t)(bulk_handle))\
    ((uint64_t)(bulk_offset))\
    ((uint64_t)(bulk_size))\
    ((hg_string_t)(remote_addr_str)))
39
MERCURY_GEN_PROC(bake_write_out_t,
Philip Carns's avatar
Philip Carns committed
40
    ((int32_t)(ret)))
41
DECLARE_MARGO_RPC_HANDLER(bake_write_ult)
42

43
/* BAKE eager write */
Philip Carns's avatar
Philip Carns committed
44 45 46
typedef struct 
{
    bake_target_id_t bti;
47
    bake_region_id_t rid;
Philip Carns's avatar
Philip Carns committed
48 49 50
    uint64_t region_offset;
    uint32_t size;
    char * buffer;
51 52 53
} bake_eager_write_in_t;
static inline hg_return_t hg_proc_bake_eager_write_in_t(hg_proc_t proc, void *v_out_p);
MERCURY_GEN_PROC(bake_eager_write_out_t,
Philip Carns's avatar
Philip Carns committed
54
    ((int32_t)(ret)))
55
DECLARE_MARGO_RPC_HANDLER(bake_eager_write_ult)
Philip Carns's avatar
Philip Carns committed
56

57 58
/* BAKE persist */
MERCURY_GEN_PROC(bake_persist_in_t,
Philip Carns's avatar
Philip Carns committed
59
    ((bake_target_id_t)(bti))\
60 61
    ((bake_region_id_t)(rid)))
MERCURY_GEN_PROC(bake_persist_out_t,
Philip Carns's avatar
Philip Carns committed
62
    ((int32_t)(ret)))
63
DECLARE_MARGO_RPC_HANDLER(bake_persist_ult)
Philip Carns's avatar
Philip Carns committed
64

65 66 67 68 69 70 71 72 73 74 75 76 77 78
/* BAKE create/write/persist */
MERCURY_GEN_PROC(bake_create_write_persist_in_t,
    ((bake_target_id_t)(bti))\
    ((uint64_t)(region_size))\
    ((uint64_t)(region_offset))\
    ((hg_bulk_t)(bulk_handle))\
    ((uint64_t)(bulk_offset))\
    ((uint64_t)(bulk_size))\
    ((hg_string_t)(remote_addr_str)))
MERCURY_GEN_PROC(bake_create_write_persist_out_t,
    ((int32_t)(ret))\
    ((bake_region_id_t)(rid)))
DECLARE_MARGO_RPC_HANDLER(bake_create_write_persist_ult)

79 80
/* BAKE get size */
MERCURY_GEN_PROC(bake_get_size_in_t,
81
    ((bake_target_id_t)(bti))\
82 83
    ((bake_region_id_t)(rid)))
MERCURY_GEN_PROC(bake_get_size_out_t,
84 85
    ((int32_t)(ret))\
    ((uint64_t)(size)))
86
DECLARE_MARGO_RPC_HANDLER(bake_get_size_ult)
87

88 89
/* BAKE read */
MERCURY_GEN_PROC(bake_read_in_t,
90
    ((bake_target_id_t)(bti))\
91
    ((bake_region_id_t)(rid))\
92
    ((uint64_t)(region_offset))\
93 94 95 96
    ((hg_bulk_t)(bulk_handle))\
    ((uint64_t)(bulk_offset))\
    ((uint64_t)(bulk_size))\
    ((hg_string_t)(remote_addr_str)))
97
MERCURY_GEN_PROC(bake_read_out_t,
98
    ((int32_t)(ret)))
99
DECLARE_MARGO_RPC_HANDLER(bake_read_ult)
100

101 102
/* BAKE eager read */
MERCURY_GEN_PROC(bake_eager_read_in_t,
Philip Carns's avatar
Philip Carns committed
103
    ((bake_target_id_t)(bti))\
104
    ((bake_region_id_t)(rid))\
Philip Carns's avatar
Philip Carns committed
105 106 107 108 109 110 111
    ((uint64_t)(region_offset))\
    ((uint32_t)(size)))
typedef struct 
{
    int32_t ret;
    uint32_t size;
    char * buffer;
112 113 114
} bake_eager_read_out_t;
static inline hg_return_t hg_proc_bake_eager_read_out_t(hg_proc_t proc, void *v_out_p);
DECLARE_MARGO_RPC_HANDLER(bake_eager_read_ult)
Philip Carns's avatar
Philip Carns committed
115

116 117
/* BAKE probe */
MERCURY_GEN_PROC(bake_probe_out_t,
118 119
    ((int32_t)(ret))\
    ((bake_target_id_t)(bti)))
120
DECLARE_MARGO_RPC_HANDLER(bake_probe_ult)
121

122 123
/* BAKE noop */
DECLARE_MARGO_RPC_HANDLER(bake_noop_ult)
Philip Carns's avatar
Philip Carns committed
124

Philip Carns's avatar
Philip Carns committed
125

126
static inline hg_return_t hg_proc_bake_region_id_t(hg_proc_t proc, bake_region_id_t *rid)
127 128
{
    /* TODO: update later depending on final region_id_t type */
Philip Carns's avatar
Philip Carns committed
129
    /* TODO: need separate encoders for different backend types */
130 131 132
    int i;
    hg_return_t ret;

Philip Carns's avatar
Philip Carns committed
133
    hg_proc_hg_uint32_t(proc, &rid->type);
134
    for(i=0; i<BAKE_REGION_ID_DATA_SIZE; i++)
135 136 137 138 139 140 141 142 143 144
    {
        ret = hg_proc_hg_uint8_t(proc, (uint8_t*)&rid->data[i]);
        if(ret != HG_SUCCESS)
            return(ret);
    }
    return(HG_SUCCESS);
}

static inline hg_return_t hg_proc_bake_target_id_t(hg_proc_t proc, bake_target_id_t *bti)
{
145 146
    /* TODO: make this portable */
    return(hg_proc_memcpy(proc, bti->id, sizeof(bti->id)));
147 148
}

149
static inline hg_return_t hg_proc_bake_eager_write_in_t(hg_proc_t proc, void *v_out_p)
Philip Carns's avatar
Philip Carns committed
150
{
Philip Carns's avatar
Philip Carns committed
151
    /* TODO: error checking */
152
    bake_eager_write_in_t *in = v_out_p;
153
    void *buf = NULL;
Philip Carns's avatar
Philip Carns committed
154 155

    hg_proc_bake_target_id_t(proc, &in->bti);
156
    hg_proc_bake_region_id_t(proc, &in->rid);
Philip Carns's avatar
Philip Carns committed
157 158
    hg_proc_uint64_t(proc, &in->region_offset);
    hg_proc_uint32_t(proc, &in->size);
159 160 161 162 163 164 165 166 167
    if(in->size)
    {
        buf = hg_proc_save_ptr(proc, in->size);
        if(hg_proc_get_op(proc) == HG_ENCODE)
            memcpy(buf, in->buffer, in->size);
        if(hg_proc_get_op(proc) == HG_DECODE)
            in->buffer = buf;
        hg_proc_restore_ptr(proc, buf, in->size);
    }
Philip Carns's avatar
Philip Carns committed
168

Philip Carns's avatar
Philip Carns committed
169 170 171
    return(HG_SUCCESS);
}

Philip Carns's avatar
Philip Carns committed
172

173
static inline hg_return_t hg_proc_bake_eager_read_out_t(hg_proc_t proc, void *v_out_p)
Philip Carns's avatar
Philip Carns committed
174 175
{
    /* TODO: error checking */
176
    bake_eager_read_out_t *out = v_out_p;
177
    void *buf = NULL;
Philip Carns's avatar
Philip Carns committed
178 179 180

    hg_proc_int32_t(proc, &out->ret);
    hg_proc_uint32_t(proc, &out->size);
181 182 183 184 185 186 187 188 189
    if(out->size)
    {
        buf = hg_proc_save_ptr(proc, out->size);
        if(hg_proc_get_op(proc) == HG_ENCODE)
            memcpy(buf, out->buffer, out->size);
        if(hg_proc_get_op(proc) == HG_DECODE)
            out->buffer = buf;
        hg_proc_restore_ptr(proc, buf, out->size);
    }
Philip Carns's avatar
Philip Carns committed
190 191 192 193

    return(HG_SUCCESS);
}

194
#endif /* __BAKE_RPC */