mpidpkt.h 20.2 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
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,
127 128
    MPIDI_CH3_PKT_FLAG_RMA_EXCLUSIVE = 128,
    MPIDI_CH3_PKT_FLAG_RMA_FLUSH_ACK = 256
129
} MPIDI_CH3_Pkt_flags_t;
130

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

141
/* NOTE: Normal and synchronous eager sends, as well as all ready-mode sends,
142 143 144 145
   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;
146 147

#if defined(USE_EAGER_SHORT)
148
typedef struct MPIDI_CH3_Pkt_eagershort_send {
149 150 151 152 153 154
    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
155 156
    int data[MPIDI_EAGER_SHORT_INTS];   /* FIXME: Experimental for now */
} MPIDI_CH3_Pkt_eagershort_send_t;
157
#endif /* defined(USE_EAGER_SHORT) */
158

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

typedef MPIDI_CH3_Pkt_send_t MPIDI_CH3_Pkt_rndv_req_to_send_t;

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

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

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

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

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

197 198 199 200 201 202 203 204 205 206 207 208 209
#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):                                \
            datatype_ = pkt_.accum.datatype;                            \
            break;                                                      \
Xin Zhao's avatar
Xin Zhao committed
210 211 212
        case (MPIDI_CH3_PKT_GET_ACCUM):                                 \
            datatype_ = pkt_.get_accum.datatype;                        \
            break;                                                      \
213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235
        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); \
        }                                                               \
    }

236
typedef struct MPIDI_CH3_Pkt_put {
237
    MPIDI_CH3_Pkt_type_t type;
238
    MPIDI_CH3_Pkt_flags_t flags;
239 240 241
    void *addr;
    int count;
    MPI_Datatype datatype;
242 243 244 245 246 247 248 249 250 251 252
    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 {
253
    MPIDI_CH3_Pkt_type_t type;
254
    MPIDI_CH3_Pkt_flags_t flags;
255 256 257
    void *addr;
    int count;
    MPI_Datatype datatype;
258
    int dataloop_size;          /* for derived datatypes */
259
    MPI_Request request_handle;
260 261 262 263 264 265 266 267 268 269
    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 {
270 271
    MPIDI_CH3_Pkt_type_t type;
    MPI_Request request_handle;
272 273 274 275
    /* followings are used to decrement ack_counter at origin */
    int target_rank;
    MPI_Win source_win_handle;
    MPIDI_CH3_Pkt_flags_t flags;
276
} MPIDI_CH3_Pkt_get_resp_t;
277

278
typedef struct MPIDI_CH3_Pkt_accum {
279
    MPIDI_CH3_Pkt_type_t type;
280
    MPIDI_CH3_Pkt_flags_t flags;
281 282 283
    void *addr;
    int count;
    MPI_Datatype datatype;
284
    int dataloop_size;          /* for derived datatypes */
285
    MPI_Op op;
286 287 288 289 290 291 292 293 294
    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;

Xin Zhao's avatar
Xin Zhao committed
295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312
typedef struct MPIDI_CH3_Pkt_get_accum {
    MPIDI_CH3_Pkt_type_t type;
    MPIDI_CH3_Pkt_flags_t flags;
    MPI_Request request_handle; /* For get_accumulate response */
    void *addr;
    int count;
    MPI_Datatype datatype;
    int dataloop_size;          /* for derived datatypes */
    MPI_Op op;
    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_accum_t;

313
typedef struct MPIDI_CH3_Pkt_get_accum_resp {
314 315
    MPIDI_CH3_Pkt_type_t type;
    MPI_Request request_handle;
316 317 318 319
    /* followings are used to decrement ack_counter at origin */
    int target_rank;
    MPI_Win source_win_handle;
    MPIDI_CH3_Pkt_flags_t flags;
320
} MPIDI_CH3_Pkt_get_accum_resp_t;
321

322
typedef struct MPIDI_CH3_Pkt_accum_immed {
323
    MPIDI_CH3_Pkt_type_t type;
324
    MPIDI_CH3_Pkt_flags_t flags;
325 326 327 328 329 330
    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?) */
331 332 333 334 335 336 337
    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*/
338
    int data[MPIDI_RMA_IMMED_INTS];
339
} MPIDI_CH3_Pkt_accum_immed_t;
340

341
typedef struct MPIDI_CH3_Pkt_cas {
342
    MPIDI_CH3_Pkt_type_t type;
343
    MPIDI_CH3_Pkt_flags_t flags;
344
    MPI_Datatype datatype;
345
    void *addr;
346
    MPI_Request request_handle;
347
    MPI_Win source_win_handle;
348 349 350 351
    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*/
352 353
    MPIDI_CH3_CAS_Immed_u origin_data;
    MPIDI_CH3_CAS_Immed_u compare_data;
354
} MPIDI_CH3_Pkt_cas_t;
355

356
typedef struct MPIDI_CH3_Pkt_cas_resp {
357 358 359
    MPIDI_CH3_Pkt_type_t type;
    MPI_Request request_handle;
    MPIDI_CH3_CAS_Immed_u data;
360 361 362 363
    /* followings are used to decrement ack_counter at orign */
    int target_rank;
    MPI_Win source_win_handle;
    MPIDI_CH3_Pkt_flags_t flags;
364
} MPIDI_CH3_Pkt_cas_resp_t;
365

366
typedef struct MPIDI_CH3_Pkt_fop {
367
    MPIDI_CH3_Pkt_type_t type;
368
    MPIDI_CH3_Pkt_flags_t flags;
369 370 371 372
    MPI_Datatype datatype;
    void *addr;
    MPI_Op op;
    MPI_Request request_handle;
373
    MPI_Win source_win_handle;
374 375 376 377
    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*/
378
    int origin_data[MPIDI_RMA_FOP_IMMED_INTS];
379
} MPIDI_CH3_Pkt_fop_t;
380

381
typedef struct MPIDI_CH3_Pkt_fop_resp {
382 383
    MPIDI_CH3_Pkt_type_t type;
    MPI_Request request_handle;
384
    int data[MPIDI_RMA_FOP_RESP_IMMED_INTS];
385 386 387 388
    /* followings are used to decrement ack_counter at orign */
    int target_rank;
    MPI_Win source_win_handle;
    MPIDI_CH3_Pkt_flags_t flags;
389
} MPIDI_CH3_Pkt_fop_resp_t;
390

391
typedef struct MPIDI_CH3_Pkt_lock {
392 393 394 395
    MPIDI_CH3_Pkt_type_t type;
    int lock_type;
    MPI_Win target_win_handle;
    MPI_Win source_win_handle;
396
    int target_rank;            /* Used in unluck/flush response to look up the
397
                                 * target state at the origin. */
398
    int origin_rank;
399
} MPIDI_CH3_Pkt_lock_t;
400

Xin Zhao's avatar
Xin Zhao committed
401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420
typedef struct MPIDI_CH3_Pkt_unlock {
    MPIDI_CH3_Pkt_type_t type;
    int lock_type;
    MPI_Win target_win_handle;
    MPI_Win source_win_handle;
    int target_rank;            /* Used in unluck/flush response to look up the
                                 * target state at the origin. */
    int origin_rank;
} MPIDI_CH3_Pkt_unlock_t;

typedef struct MPIDI_CH3_Pkt_flush {
    MPIDI_CH3_Pkt_type_t type;
    int lock_type;
    MPI_Win target_win_handle;
    MPI_Win source_win_handle;
    int target_rank;            /* Used in unluck/flush response to look up the
                                 * target state at the origin. */
    int origin_rank;
} MPIDI_CH3_Pkt_flush_t;

421
typedef struct MPIDI_CH3_Pkt_lock_granted {
422 423
    MPIDI_CH3_Pkt_type_t type;
    MPI_Win source_win_handle;
Xin Zhao's avatar
Xin Zhao committed
424
    int target_rank;            /* Used in flush_ack response to look up the
425 426
                                 * target state at the origin. */
} MPIDI_CH3_Pkt_lock_granted_t;
427

Xin Zhao's avatar
Xin Zhao committed
428 429 430 431 432 433
typedef struct MPIDI_CH3_Pkt_flush_ack {
    MPIDI_CH3_Pkt_type_t type;
    MPI_Win source_win_handle;
    int target_rank;            /* Used in flush_ack response to look up the
                                 * target state at the origin. */
} MPIDI_CH3_Pkt_flush_ack_t;
434

435
typedef struct MPIDI_CH3_Pkt_lock_put_unlock {
436
    MPIDI_CH3_Pkt_type_t type;
437
    MPIDI_CH3_Pkt_flags_t flags;
438 439
    MPI_Win target_win_handle;
    MPI_Win source_win_handle;
440
    int origin_rank;
441 442 443 444
    int lock_type;
    void *addr;
    int count;
    MPI_Datatype datatype;
445
} MPIDI_CH3_Pkt_lock_put_unlock_t;
446

447
typedef struct MPIDI_CH3_Pkt_lock_get_unlock {
448
    MPIDI_CH3_Pkt_type_t type;
449
    MPIDI_CH3_Pkt_flags_t flags;
450 451
    MPI_Win target_win_handle;
    MPI_Win source_win_handle;
452
    int origin_rank;
453 454 455 456 457
    int lock_type;
    void *addr;
    int count;
    MPI_Datatype datatype;
    MPI_Request request_handle;
458
} MPIDI_CH3_Pkt_lock_get_unlock_t;
459

460
typedef struct MPIDI_CH3_Pkt_lock_accum_unlock {
461
    MPIDI_CH3_Pkt_type_t type;
462
    MPIDI_CH3_Pkt_flags_t flags;
463 464
    MPI_Win target_win_handle;
    MPI_Win source_win_handle;
465
    int origin_rank;
466 467 468 469 470
    int lock_type;
    void *addr;
    int count;
    MPI_Datatype datatype;
    MPI_Op op;
471
} MPIDI_CH3_Pkt_lock_accum_unlock_t;
472 473


474
typedef struct MPIDI_CH3_Pkt_close {
475 476
    MPIDI_CH3_Pkt_type_t type;
    int ack;
477
} MPIDI_CH3_Pkt_close_t;
478

479
typedef struct MPIDI_CH3_Pkt_revoke {
Wesley Bland's avatar
Wesley Bland committed
480 481
    MPIDI_CH3_Pkt_type_t type;
    MPIR_Context_id_t revoked_comm;
482
} MPIDI_CH3_Pkt_revoke_t;
Wesley Bland's avatar
Wesley Bland committed
483

484
typedef union MPIDI_CH3_Pkt {
485 486
    MPIDI_CH3_Pkt_type_t type;
    MPIDI_CH3_Pkt_eager_send_t eager_send;
487
#if defined(USE_EAGER_SHORT)
488
    MPIDI_CH3_Pkt_eagershort_send_t eagershort_send;
489
#endif                          /* defined(USE_EAGER_SHORT) */
490 491 492 493 494 495 496 497 498 499 500 501
    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;
502
    MPIDI_CH3_Pkt_accum_immed_t accum_immed;
Xin Zhao's avatar
Xin Zhao committed
503
    MPIDI_CH3_Pkt_get_accum_t get_accum;
504 505
    MPIDI_CH3_Pkt_lock_t lock;
    MPIDI_CH3_Pkt_lock_granted_t lock_granted;
506
    MPIDI_CH3_Pkt_unlock_t unlock;
507
    MPIDI_CH3_Pkt_flush_t flush;
Xin Zhao's avatar
Xin Zhao committed
508
    MPIDI_CH3_Pkt_flush_ack_t flush_ack;
509 510 511 512
    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;
513 514
    MPIDI_CH3_Pkt_cas_t cas;
    MPIDI_CH3_Pkt_cas_resp_t cas_resp;
515 516
    MPIDI_CH3_Pkt_fop_t fop;
    MPIDI_CH3_Pkt_fop_resp_t fop_resp;
517
    MPIDI_CH3_Pkt_get_accum_resp_t get_accum_resp;
Wesley Bland's avatar
Wesley Bland committed
518
    MPIDI_CH3_Pkt_revoke_t revoke;
519
# if defined(MPIDI_CH3_PKT_DECL)
520
     MPIDI_CH3_PKT_DECL
521
# endif
522
} MPIDI_CH3_Pkt_t;
523 524

#if defined(MPID_USE_SEQUENCE_NUMBERS)
525
typedef struct MPIDI_CH3_Pkt_send_container {
526
    MPIDI_CH3_Pkt_send_t pkt;
527 528
    struct MPIDI_CH3_Pkt_send_container_s *next;
} MPIDI_CH3_Pkt_send_container_t;
529 530 531
#endif

#endif