mpidpkt.h 17.8 KB
Newer Older
1
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
2 3 4 5 6 7 8
/*
 *  (C) 2001 by Argonne National Laboratory.
 *      See COPYRIGHT in top-level directory.
 */

#ifndef HAVE_MPIDPKT_H
#define HAVE_MPIDPKT_H
9

10 11
#include "oputil.h"

12 13 14 15 16 17 18
#ifdef HAVE_STDINT_H
#  include <stdint.h>
#endif
#ifdef HAVE_INTTYPES_H
#  include <inttypes.h>
#endif

19 20 21
/* Enable the use of data within the message packet for small messages */
#define USE_EAGER_SHORT
#define MPIDI_EAGER_SHORT_INTS 4
22
/* FIXME: This appears to assume that sizeof(int) == 4 (or at least >= 4) */
23 24
#define MPIDI_EAGER_SHORT_SIZE 16

25 26 27
/* This is the number of ints that can be carried within an RMA packet */
#define MPIDI_RMA_IMMED_INTS 1

28 29 30
/* Union over all types (integer, logical, and multi-language types) that are
   allowed in a CAS operation.  This is used to allocate enough space in the
   packet header for immediate data.  */
31
typedef union {
32
#define MPIR_OP_TYPE_MACRO(mpi_type_, c_type_, type_name_) c_type_ cas_##type_name_;
33 34 35 36 37 38 39 40
    MPIR_OP_TYPE_GROUP(C_INTEGER)
    MPIR_OP_TYPE_GROUP(FORTRAN_INTEGER)
    MPIR_OP_TYPE_GROUP(LOGICAL)
    MPIR_OP_TYPE_GROUP(BYTE)
    MPIR_OP_TYPE_GROUP(C_INTEGER_EXTRA)
    MPIR_OP_TYPE_GROUP(FORTRAN_INTEGER_EXTRA)
    MPIR_OP_TYPE_GROUP(LOGICAL_EXTRA)
    MPIR_OP_TYPE_GROUP(BYTE_EXTRA)
41
#undef MPIR_OP_TYPE_MACRO
42 43
} MPIDI_CH3_CAS_Immed_u;

44 45 46 47 48 49 50
/* Union over all types (all predefined types) that are allowed in a
   Fetch-and-op operation.  This can be too large for the packet header, so we
   limit the immediate space in the header to FOP_IMMED_INTS. */

#define MPIDI_RMA_FOP_IMMED_INTS 2
#define MPIDI_RMA_FOP_RESP_IMMED_INTS 8

51 52 53
/* *INDENT-OFF* */
/* Indentation turned off because "indent" is getting confused with
 * the lack of a semi-colon in the fields below */
54
typedef union {
55
#define MPIR_OP_TYPE_MACRO(mpi_type_, c_type_, type_name_) c_type_ fop##type_name_;
56 57
    MPIR_OP_TYPE_GROUP_ALL_BASIC
    MPIR_OP_TYPE_GROUP_ALL_EXTRA
58
#undef MPIR_OP_TYPE_MACRO
59
} MPIDI_CH3_FOP_Immed_u;
60
/* *INDENT-ON* */
61

62
/*
63
 * Predefined packet types.  This simplifies some of the code.
64
 */
65 66
/* FIXME: Having predefined names makes it harder to add new message types,
   such as different RMA types. */
Pavan Balaji's avatar
Pavan Balaji committed
67 68 69
/* We start with an arbitrarily chosen number (42), to help with
 * debugging when a packet type is not initialized or wrongly
 * initialized. */
70
typedef enum {
Pavan Balaji's avatar
Pavan Balaji committed
71
    MPIDI_CH3_PKT_EAGER_SEND = 42,
72
#if defined(USE_EAGER_SHORT)
73
    MPIDI_CH3_PKT_EAGERSHORT_SEND,
74
#endif /* defined(USE_EAGER_SHORT) */
75
    MPIDI_CH3_PKT_EAGER_SYNC_SEND,      /* FIXME: no sync eager */
76 77 78 79
    MPIDI_CH3_PKT_EAGER_SYNC_ACK,
    MPIDI_CH3_PKT_READY_SEND,
    MPIDI_CH3_PKT_RNDV_REQ_TO_SEND,
    MPIDI_CH3_PKT_RNDV_CLR_TO_SEND,
80
    MPIDI_CH3_PKT_RNDV_SEND,    /* FIXME: should be stream put */
81 82
    MPIDI_CH3_PKT_CANCEL_SEND_REQ,
    MPIDI_CH3_PKT_CANCEL_SEND_RESP,
83
    MPIDI_CH3_PKT_PUT,  /* RMA Packets begin here */
84 85 86 87 88
    MPIDI_CH3_PKT_GET,
    MPIDI_CH3_PKT_GET_RESP,
    MPIDI_CH3_PKT_ACCUMULATE,
    MPIDI_CH3_PKT_LOCK,
    MPIDI_CH3_PKT_LOCK_GRANTED,
89
    MPIDI_CH3_PKT_UNLOCK,
90
    MPIDI_CH3_PKT_FLUSH,
Xin Zhao's avatar
Xin Zhao committed
91
    MPIDI_CH3_PKT_FLUSH_ACK,
92 93 94 95 96
    MPIDI_CH3_PKT_LOCK_PUT_UNLOCK,      /* optimization for single puts */
    MPIDI_CH3_PKT_LOCK_GET_UNLOCK,      /* optimization for single gets */
    MPIDI_CH3_PKT_LOCK_ACCUM_UNLOCK,    /* optimization for single accumulates */
    /* RMA Packets end here */
    MPIDI_CH3_PKT_ACCUM_IMMED,  /* optimization for short accumulate */
97
    /* FIXME: Add PUT, GET_IMMED packet types */
98 99
    MPIDI_CH3_PKT_CAS,
    MPIDI_CH3_PKT_CAS_RESP,
100 101
    MPIDI_CH3_PKT_FOP,
    MPIDI_CH3_PKT_FOP_RESP,
102 103
    MPIDI_CH3_PKT_GET_ACCUM,
    MPIDI_CH3_PKT_GET_ACCUM_RESP,
104
    MPIDI_CH3_PKT_FLOW_CNTL_UPDATE,     /* FIXME: Unused */
105
    MPIDI_CH3_PKT_CLOSE,
Wesley Bland's avatar
Wesley Bland committed
106
    MPIDI_CH3_PKT_REVOKE,
Pavan Balaji's avatar
Pavan Balaji committed
107
    MPIDI_CH3_PKT_END_CH3,
108
    /* The channel can define additional types by defining the value
109
     * MPIDI_CH3_PKT_ENUM */
110
# if defined(MPIDI_CH3_PKT_ENUM)
Pavan Balaji's avatar
Pavan Balaji committed
111
    MPIDI_CH3_PKT_ENUM,
112
# endif
Pavan Balaji's avatar
Pavan Balaji committed
113
    MPIDI_CH3_PKT_END_ALL,
114
    MPIDI_CH3_PKT_INVALID = -1  /* forces a signed enum to quash warnings */
Pavan Balaji's avatar
Pavan Balaji committed
115
} MPIDI_CH3_Pkt_type_t;
116

117
/* These flags can be "OR'ed" together */
118 119 120 121 122 123 124 125 126 127 128
typedef enum {
    MPIDI_CH3_PKT_FLAG_NONE = 0,
    MPIDI_CH3_PKT_FLAG_RMA_LOCK = 1,
    MPIDI_CH3_PKT_FLAG_RMA_UNLOCK = 2,
    MPIDI_CH3_PKT_FLAG_RMA_FLUSH = 4,
    MPIDI_CH3_PKT_FLAG_RMA_REQ_ACK = 8,
    MPIDI_CH3_PKT_FLAG_RMA_AT_COMPLETE = 16,
    MPIDI_CH3_PKT_FLAG_RMA_NOCHECK = 32,
    MPIDI_CH3_PKT_FLAG_RMA_SHARED = 64,
    MPIDI_CH3_PKT_FLAG_RMA_EXCLUSIVE = 128
} MPIDI_CH3_Pkt_flags_t;
129

130
typedef struct MPIDI_CH3_Pkt_send {
131 132
    MPIDI_CH3_Pkt_type_t type;  /* XXX - uint8_t to conserve space ??? */
    MPIDI_Message_match match;
133
    MPI_Request sender_req_id;  /* needed for ssend and send cancel */
134 135 136
    MPIDI_msg_sz_t data_sz;
#if defined(MPID_USE_SEQUENCE_NUMBERS)
    MPID_Seqnum_t seqnum;
137 138
#endif
} MPIDI_CH3_Pkt_send_t;
139

140
/* NOTE: Normal and synchronous eager sends, as well as all ready-mode sends,
141 142 143 144
   use the same structure but have a different type value. */
typedef MPIDI_CH3_Pkt_send_t MPIDI_CH3_Pkt_eager_send_t;
typedef MPIDI_CH3_Pkt_send_t MPIDI_CH3_Pkt_eager_sync_send_t;
typedef MPIDI_CH3_Pkt_send_t MPIDI_CH3_Pkt_ready_send_t;
145 146

#if defined(USE_EAGER_SHORT)
147
typedef struct MPIDI_CH3_Pkt_eagershort_send {
148 149 150 151 152 153
    MPIDI_CH3_Pkt_type_t type;  /* XXX - uint8_t to conserve space ??? */
    MPIDI_Message_match match;
    MPIDI_msg_sz_t data_sz;
#if defined(MPID_USE_SEQUENCE_NUMBERS)
    MPID_Seqnum_t seqnum;
#endif
154 155
    int data[MPIDI_EAGER_SHORT_INTS];   /* FIXME: Experimental for now */
} MPIDI_CH3_Pkt_eagershort_send_t;
156
#endif /* defined(USE_EAGER_SHORT) */
157

158
typedef struct MPIDI_CH3_Pkt_eager_sync_ack {
159 160
    MPIDI_CH3_Pkt_type_t type;
    MPI_Request sender_req_id;
161
} MPIDI_CH3_Pkt_eager_sync_ack_t;
162 163 164

typedef MPIDI_CH3_Pkt_send_t MPIDI_CH3_Pkt_rndv_req_to_send_t;

165
typedef struct MPIDI_CH3_Pkt_rndv_clr_to_send {
166 167 168
    MPIDI_CH3_Pkt_type_t type;
    MPI_Request sender_req_id;
    MPI_Request receiver_req_id;
169
} MPIDI_CH3_Pkt_rndv_clr_to_send_t;
170

171
typedef struct MPIDI_CH3_Pkt_rndv_send {
172 173
    MPIDI_CH3_Pkt_type_t type;
    MPI_Request receiver_req_id;
174
} MPIDI_CH3_Pkt_rndv_send_t;
175

176
typedef struct MPIDI_CH3_Pkt_cancel_send_req {
177 178 179
    MPIDI_CH3_Pkt_type_t type;
    MPIDI_Message_match match;
    MPI_Request sender_req_id;
180
} MPIDI_CH3_Pkt_cancel_send_req_t;
181

182
typedef struct MPIDI_CH3_Pkt_cancel_send_resp {
183 184 185
    MPIDI_CH3_Pkt_type_t type;
    MPI_Request sender_req_id;
    int ack;
186
} MPIDI_CH3_Pkt_cancel_send_resp_t;
187

188 189 190
/* *INDENT-OFF* */
/* Indentation turned off because "indent" is getting confused with
 * the lack of a semi-colon in the field below */
191 192 193
#if defined(MPIDI_CH3_PKT_DEFS)
MPIDI_CH3_PKT_DEFS
#endif
194
/* *INDENT-ON* */
195

196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
#define MPIDI_CH3_PKT_RMA_GET_TARGET_DATATYPE(pkt_, datatype_, err_)    \
    {                                                                   \
        err_ = MPI_SUCCESS;                                             \
        switch(pkt_.type) {                                             \
        case (MPIDI_CH3_PKT_PUT):                                       \
            datatype_ = pkt_.put.datatype;                              \
            break;                                                      \
        case (MPIDI_CH3_PKT_GET):                                       \
            datatype_ = pkt_.get.datatype;                              \
            break;                                                      \
        case (MPIDI_CH3_PKT_ACCUMULATE):                                \
        case (MPIDI_CH3_PKT_GET_ACCUM):                                 \
            datatype_ = pkt_.accum.datatype;                            \
            break;                                                      \
        case (MPIDI_CH3_PKT_CAS):                                       \
            datatype_ = pkt_.cas.datatype;                              \
            break;                                                      \
        case (MPIDI_CH3_PKT_FOP):                                       \
            datatype_ = pkt_.fop.datatype;                              \
            break;                                                      \
        case (MPIDI_CH3_PKT_LOCK_PUT_UNLOCK):                           \
            datatype_ = pkt_.lock_put_unlock.datatype;                  \
            break;                                                      \
        case (MPIDI_CH3_PKT_LOCK_GET_UNLOCK):                           \
            datatype_ = pkt_.lock_get_unlock.datatype;                  \
            break;                                                      \
        case (MPIDI_CH3_PKT_LOCK_ACCUM_UNLOCK):                         \
            datatype_ = pkt_.lock_accum_unlock.datatype;                \
            break;                                                      \
        case (MPIDI_CH3_PKT_ACCUM_IMMED):                               \
            datatype_ = pkt_.accum_immed.datatype;                      \
            break;                                                      \
        default:                                                        \
            MPIU_ERR_SETANDJUMP1(err_, MPI_ERR_OTHER, "**invalidpkt", "**invalidpkt %d", pkt_.type); \
        }                                                               \
    }

233
typedef struct MPIDI_CH3_Pkt_put {
234
    MPIDI_CH3_Pkt_type_t type;
235
    MPIDI_CH3_Pkt_flags_t flags;
236 237 238
    void *addr;
    int count;
    MPI_Datatype datatype;
239 240 241 242 243 244 245 246 247 248 249
    int dataloop_size;          /* for derived datatypes */
    MPI_Win target_win_handle;  /* Used in the last RMA operation in each
                                 * epoch for decrementing rma op counter in
                                 * active target rma and for unlocking window
                                 * in passive target rma. Otherwise set to NULL*/
    MPI_Win source_win_handle;  /* Used in the last RMA operation in an
                                 * epoch in the case of passive target rma
                                 * with shared locks. Otherwise set to NULL*/
} MPIDI_CH3_Pkt_put_t;

typedef struct MPIDI_CH3_Pkt_get {
250
    MPIDI_CH3_Pkt_type_t type;
251
    MPIDI_CH3_Pkt_flags_t flags;
252 253 254
    void *addr;
    int count;
    MPI_Datatype datatype;
255
    int dataloop_size;          /* for derived datatypes */
256
    MPI_Request request_handle;
257 258 259 260 261 262 263 264 265 266
    MPI_Win target_win_handle;  /* Used in the last RMA operation in each
                                 * epoch for decrementing rma op counter in
                                 * active target rma and for unlocking window
                                 * in passive target rma. Otherwise set to NULL*/
    MPI_Win source_win_handle;  /* Used in the last RMA operation in an
                                 * epoch in the case of passive target rma
                                 * with shared locks. Otherwise set to NULL*/
} MPIDI_CH3_Pkt_get_t;

typedef struct MPIDI_CH3_Pkt_get_resp {
267 268
    MPIDI_CH3_Pkt_type_t type;
    MPI_Request request_handle;
269
} MPIDI_CH3_Pkt_get_resp_t;
270

271
typedef struct MPIDI_CH3_Pkt_accum {
272
    MPIDI_CH3_Pkt_type_t type;
273
    MPIDI_CH3_Pkt_flags_t flags;
274
    MPI_Request request_handle; /* For get_accumulate response */
275 276 277
    void *addr;
    int count;
    MPI_Datatype datatype;
278
    int dataloop_size;          /* for derived datatypes */
279
    MPI_Op op;
280 281 282 283 284 285 286 287 288 289
    MPI_Win target_win_handle;  /* Used in the last RMA operation in each
                                 * epoch for decrementing rma op counter in
                                 * active target rma and for unlocking window
                                 * in passive target rma. Otherwise set to NULL*/
    MPI_Win source_win_handle;  /* Used in the last RMA operation in an
                                 * epoch in the case of passive target rma
                                 * with shared locks. Otherwise set to NULL*/
} MPIDI_CH3_Pkt_accum_t;

typedef struct MPIDI_CH3_Pkt_get_accum_resp {
290 291
    MPIDI_CH3_Pkt_type_t type;
    MPI_Request request_handle;
292
} MPIDI_CH3_Pkt_get_accum_resp_t;
293

294
typedef struct MPIDI_CH3_Pkt_accum_immed {
295
    MPIDI_CH3_Pkt_type_t type;
296
    MPIDI_CH3_Pkt_flags_t flags;
297 298 299 300 301 302
    void *addr;
    int count;
    /* FIXME: Compress datatype/op into a single word (immedate mode) */
    MPI_Datatype datatype;
    MPI_Op op;
    /* FIXME: do we need these (use a regular accum packet if we do?) */
303 304 305 306 307 308 309
    MPI_Win target_win_handle;  /* Used in the last RMA operation in each
                                 * epoch for decrementing rma op counter in
                                 * active target rma and for unlocking window
                                 * in passive target rma. Otherwise set to NULL*/
    MPI_Win source_win_handle;  /* Used in the last RMA operation in an
                                 * epoch in the case of passive target rma
                                 * with shared locks. Otherwise set to NULL*/
310
    int data[MPIDI_RMA_IMMED_INTS];
311
} MPIDI_CH3_Pkt_accum_immed_t;
312

313
typedef struct MPIDI_CH3_Pkt_cas {
314
    MPIDI_CH3_Pkt_type_t type;
315
    MPIDI_CH3_Pkt_flags_t flags;
316
    MPI_Datatype datatype;
317
    void *addr;
318
    MPI_Request request_handle;
319
    MPI_Win source_win_handle;
320 321 322 323
    MPI_Win target_win_handle;  /* Used in the last RMA operation in each
                                 * epoch for decrementing rma op counter in
                                 * active target rma and for unlocking window
                                 * in passive target rma. Otherwise set to NULL*/
324 325
    MPIDI_CH3_CAS_Immed_u origin_data;
    MPIDI_CH3_CAS_Immed_u compare_data;
326
} MPIDI_CH3_Pkt_cas_t;
327

328
typedef struct MPIDI_CH3_Pkt_cas_resp {
329 330 331
    MPIDI_CH3_Pkt_type_t type;
    MPI_Request request_handle;
    MPIDI_CH3_CAS_Immed_u data;
332
} MPIDI_CH3_Pkt_cas_resp_t;
333

334
typedef struct MPIDI_CH3_Pkt_fop {
335
    MPIDI_CH3_Pkt_type_t type;
336
    MPIDI_CH3_Pkt_flags_t flags;
337 338 339 340
    MPI_Datatype datatype;
    void *addr;
    MPI_Op op;
    MPI_Request request_handle;
341
    MPI_Win source_win_handle;
342 343 344 345
    MPI_Win target_win_handle;  /* Used in the last RMA operation in each
                                 * epoch for decrementing rma op counter in
                                 * active target rma and for unlocking window
                                 * in passive target rma. Otherwise set to NULL*/
346
    int origin_data[MPIDI_RMA_FOP_IMMED_INTS];
347
} MPIDI_CH3_Pkt_fop_t;
348

349
typedef struct MPIDI_CH3_Pkt_fop_resp {
350 351
    MPIDI_CH3_Pkt_type_t type;
    MPI_Request request_handle;
352
    int data[MPIDI_RMA_FOP_RESP_IMMED_INTS];
353
} MPIDI_CH3_Pkt_fop_resp_t;
354

355
typedef struct MPIDI_CH3_Pkt_lock {
356 357 358 359
    MPIDI_CH3_Pkt_type_t type;
    int lock_type;
    MPI_Win target_win_handle;
    MPI_Win source_win_handle;
360
    int target_rank;            /* Used in unluck/flush response to look up the
361
                                 * target state at the origin. */
362
    int origin_rank;
363
} MPIDI_CH3_Pkt_lock_t;
364

365
typedef struct MPIDI_CH3_Pkt_lock_granted {
366 367
    MPIDI_CH3_Pkt_type_t type;
    MPI_Win source_win_handle;
Xin Zhao's avatar
Xin Zhao committed
368
    int target_rank;            /* Used in flush_ack response to look up the
369 370
                                 * target state at the origin. */
} MPIDI_CH3_Pkt_lock_granted_t;
371

Xin Zhao's avatar
Xin Zhao committed
372
typedef MPIDI_CH3_Pkt_lock_granted_t MPIDI_CH3_Pkt_flush_ack_t;
373
typedef MPIDI_CH3_Pkt_lock_t MPIDI_CH3_Pkt_unlock_t;
374
typedef MPIDI_CH3_Pkt_lock_t MPIDI_CH3_Pkt_flush_t;
375

376
typedef struct MPIDI_CH3_Pkt_lock_put_unlock {
377
    MPIDI_CH3_Pkt_type_t type;
378
    MPIDI_CH3_Pkt_flags_t flags;
379 380
    MPI_Win target_win_handle;
    MPI_Win source_win_handle;
381
    int origin_rank;
382 383 384 385
    int lock_type;
    void *addr;
    int count;
    MPI_Datatype datatype;
386
} MPIDI_CH3_Pkt_lock_put_unlock_t;
387

388
typedef struct MPIDI_CH3_Pkt_lock_get_unlock {
389
    MPIDI_CH3_Pkt_type_t type;
390
    MPIDI_CH3_Pkt_flags_t flags;
391 392
    MPI_Win target_win_handle;
    MPI_Win source_win_handle;
393
    int origin_rank;
394 395 396 397 398
    int lock_type;
    void *addr;
    int count;
    MPI_Datatype datatype;
    MPI_Request request_handle;
399
} MPIDI_CH3_Pkt_lock_get_unlock_t;
400

401
typedef struct MPIDI_CH3_Pkt_lock_accum_unlock {
402
    MPIDI_CH3_Pkt_type_t type;
403
    MPIDI_CH3_Pkt_flags_t flags;
404 405
    MPI_Win target_win_handle;
    MPI_Win source_win_handle;
406
    int origin_rank;
407 408 409 410 411
    int lock_type;
    void *addr;
    int count;
    MPI_Datatype datatype;
    MPI_Op op;
412
} MPIDI_CH3_Pkt_lock_accum_unlock_t;
413 414


415
typedef struct MPIDI_CH3_Pkt_close {
416 417
    MPIDI_CH3_Pkt_type_t type;
    int ack;
418
} MPIDI_CH3_Pkt_close_t;
419

420
typedef struct MPIDI_CH3_Pkt_revoke {
Wesley Bland's avatar
Wesley Bland committed
421 422
    MPIDI_CH3_Pkt_type_t type;
    MPIR_Context_id_t revoked_comm;
423
} MPIDI_CH3_Pkt_revoke_t;
Wesley Bland's avatar
Wesley Bland committed
424

425
typedef union MPIDI_CH3_Pkt {
426 427
    MPIDI_CH3_Pkt_type_t type;
    MPIDI_CH3_Pkt_eager_send_t eager_send;
428
#if defined(USE_EAGER_SHORT)
429
    MPIDI_CH3_Pkt_eagershort_send_t eagershort_send;
430
#endif                          /* defined(USE_EAGER_SHORT) */
431 432 433 434 435 436 437 438 439 440 441 442
    MPIDI_CH3_Pkt_eager_sync_send_t eager_sync_send;
    MPIDI_CH3_Pkt_eager_sync_ack_t eager_sync_ack;
    MPIDI_CH3_Pkt_eager_send_t ready_send;
    MPIDI_CH3_Pkt_rndv_req_to_send_t rndv_req_to_send;
    MPIDI_CH3_Pkt_rndv_clr_to_send_t rndv_clr_to_send;
    MPIDI_CH3_Pkt_rndv_send_t rndv_send;
    MPIDI_CH3_Pkt_cancel_send_req_t cancel_send_req;
    MPIDI_CH3_Pkt_cancel_send_resp_t cancel_send_resp;
    MPIDI_CH3_Pkt_put_t put;
    MPIDI_CH3_Pkt_get_t get;
    MPIDI_CH3_Pkt_get_resp_t get_resp;
    MPIDI_CH3_Pkt_accum_t accum;
443
    MPIDI_CH3_Pkt_accum_immed_t accum_immed;
444 445
    MPIDI_CH3_Pkt_lock_t lock;
    MPIDI_CH3_Pkt_lock_granted_t lock_granted;
446
    MPIDI_CH3_Pkt_unlock_t unlock;
447
    MPIDI_CH3_Pkt_flush_t flush;
Xin Zhao's avatar
Xin Zhao committed
448
    MPIDI_CH3_Pkt_flush_ack_t flush_ack;
449 450 451 452
    MPIDI_CH3_Pkt_lock_put_unlock_t lock_put_unlock;
    MPIDI_CH3_Pkt_lock_get_unlock_t lock_get_unlock;
    MPIDI_CH3_Pkt_lock_accum_unlock_t lock_accum_unlock;
    MPIDI_CH3_Pkt_close_t close;
453 454
    MPIDI_CH3_Pkt_cas_t cas;
    MPIDI_CH3_Pkt_cas_resp_t cas_resp;
455 456
    MPIDI_CH3_Pkt_fop_t fop;
    MPIDI_CH3_Pkt_fop_resp_t fop_resp;
457
    MPIDI_CH3_Pkt_get_accum_resp_t get_accum_resp;
Wesley Bland's avatar
Wesley Bland committed
458
    MPIDI_CH3_Pkt_revoke_t revoke;
459
# if defined(MPIDI_CH3_PKT_DECL)
460
     MPIDI_CH3_PKT_DECL
461
# endif
462
} MPIDI_CH3_Pkt_t;
463 464

#if defined(MPID_USE_SEQUENCE_NUMBERS)
465
typedef struct MPIDI_CH3_Pkt_send_container {
466
    MPIDI_CH3_Pkt_send_t pkt;
467 468
    struct MPIDI_CH3_Pkt_send_container_s *next;
} MPIDI_CH3_Pkt_send_container_t;
469 470 471
#endif

#endif