1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
2 /*
3  * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
4  *                         University Research and Technology
5  *                         Corporation.  All rights reserved.
6  * Copyright (c) 2004-2009 The University of Tennessee and The University
7  *                         of Tennessee Research Foundation.  All rights
8  *                         reserved.
9  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
10  *                         University of Stuttgart.  All rights reserved.
11  * Copyright (c) 2004-2005 The Regents of the University of California.
12  *                         All rights reserved.
13  * Copyright (c) 2009      Cisco Systems, Inc.  All rights reserved.
14  * Copyright (c) 2012      NVIDIA Corporation.  All rights reserved.
15  * Copyright (c) 2015      Los Alamos National Security, LLC. All rights
16  *                         reserved.
17  * $COPYRIGHT$
18  *
19  * Additional copyrights may follow
20  *
21  * $HEADER$
22  */
23 #include "opal_config.h"
24 #include "btl_smcuda_frag.h"
25 
26 
mca_btl_smcuda_frag_common_constructor(mca_btl_smcuda_frag_t * frag)27 static inline void mca_btl_smcuda_frag_common_constructor(mca_btl_smcuda_frag_t* frag)
28 {
29     frag->hdr = (mca_btl_smcuda_hdr_t*)frag->base.super.ptr;
30     if(frag->hdr != NULL) {
31         frag->hdr->frag = (mca_btl_smcuda_frag_t*)((uintptr_t)frag |
32             MCA_BTL_SMCUDA_FRAG_ACK);
33         frag->segment.seg_addr.pval = ((char*)frag->hdr) +
34             sizeof(mca_btl_smcuda_hdr_t);
35         frag->hdr->my_smp_rank = mca_btl_smcuda_component.my_smp_rank;
36     }
37     frag->segment.seg_len = frag->size;
38     frag->base.des_segments = &frag->segment;
39     frag->base.des_segment_count = 1;
40     frag->base.des_flags = 0;
41 #if OPAL_CUDA_SUPPORT
42     frag->registration = NULL;
43 #endif /* OPAL_CUDA_SUPPORT */
44 }
45 
mca_btl_smcuda_frag1_constructor(mca_btl_smcuda_frag_t * frag)46 static void mca_btl_smcuda_frag1_constructor(mca_btl_smcuda_frag_t* frag)
47 {
48     frag->size = mca_btl_smcuda_component.eager_limit;
49     frag->my_list = &mca_btl_smcuda_component.sm_frags_eager;
50     mca_btl_smcuda_frag_common_constructor(frag);
51 }
52 
mca_btl_smcuda_frag2_constructor(mca_btl_smcuda_frag_t * frag)53 static void mca_btl_smcuda_frag2_constructor(mca_btl_smcuda_frag_t* frag)
54 {
55     frag->size = mca_btl_smcuda_component.max_frag_size;
56     frag->my_list = &mca_btl_smcuda_component.sm_frags_max;
57     mca_btl_smcuda_frag_common_constructor(frag);
58 }
59 
mca_btl_smcuda_user_constructor(mca_btl_smcuda_frag_t * frag)60 static void mca_btl_smcuda_user_constructor(mca_btl_smcuda_frag_t* frag)
61 {
62 	frag->size = 0;
63 	frag->my_list = &mca_btl_smcuda_component.sm_frags_user;
64 	mca_btl_smcuda_frag_common_constructor(frag);
65 }
66 
67 OBJ_CLASS_INSTANCE(
68     mca_btl_smcuda_frag1_t,
69     mca_btl_base_descriptor_t,
70     mca_btl_smcuda_frag1_constructor,
71     NULL);
72 
73 OBJ_CLASS_INSTANCE(
74     mca_btl_smcuda_frag2_t,
75     mca_btl_base_descriptor_t,
76     mca_btl_smcuda_frag2_constructor,
77     NULL);
78 
79 OBJ_CLASS_INSTANCE(
80     mca_btl_smcuda_user_t,
81     mca_btl_base_descriptor_t,
82     mca_btl_smcuda_user_constructor,
83     NULL);
84