This source file includes following definitions.
- common_send_seg_helper
- chunk_seg_constructor
- frag_seg_constructor
- ack_seg_constructor
- recv_seg_constructor
- send_frag_constructor
- send_frag_destructor
- small_send_frag_constructor
- small_send_frag_destructor
- large_send_frag_constructor
- put_dest_frag_constructor
- put_dest_frag_destructor
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 #include "opal_config.h"
  23 
  24 #include <string.h>
  25 
  26 #include "btl_usnic.h"
  27 #include "btl_usnic_endpoint.h"
  28 #include "btl_usnic_module.h"
  29 #include "btl_usnic_frag.h"
  30 #include "btl_usnic_ack.h"
  31 
  32 static void
  33 common_send_seg_helper(opal_btl_usnic_send_segment_t *seg)
  34 {
  35     opal_btl_usnic_segment_t *bseg;
  36 
  37     
  38 
  39     seg->ss_ptr = (uint8_t *) seg->ss_base.us_list.ptr;
  40     seg->ss_send_posted = 0;
  41     seg->ss_ack_pending = false;
  42 
  43     
  44 
  45     bseg = &seg->ss_base;
  46     bseg->us_btl_header = (opal_btl_usnic_btl_header_t *)
  47         (seg->ss_ptr + mca_btl_usnic_component.prefix_send_offset);
  48     bseg->us_btl_header->sender = mca_btl_usnic_component.my_hashed_rte_name;
  49 }
  50 
  51 static void
  52 chunk_seg_constructor(
  53     opal_btl_usnic_chunk_segment_t *cseg)
  54 {
  55     opal_btl_usnic_segment_t *bseg;
  56 
  57     bseg = &cseg->ss_base;
  58     bseg->us_type = OPAL_BTL_USNIC_SEG_CHUNK;
  59 
  60     
  61     common_send_seg_helper(cseg);
  62 
  63     
  64     bseg->us_payload.raw = (uint8_t *)(bseg->us_btl_chunk_header + 1);
  65 
  66     bseg->us_btl_header->payload_type = OPAL_BTL_USNIC_PAYLOAD_TYPE_CHUNK;
  67 }
  68 
  69 static void
  70 frag_seg_constructor(
  71     opal_btl_usnic_frag_segment_t *fseg)
  72 {
  73     opal_btl_usnic_segment_t *bseg;
  74 
  75     bseg = &fseg->ss_base;
  76     bseg->us_type = OPAL_BTL_USNIC_SEG_FRAG;
  77 
  78     
  79     common_send_seg_helper(fseg);
  80 
  81     
  82     bseg->us_payload.raw = (uint8_t *)(bseg->us_btl_header + 1);
  83 
  84     bseg->us_btl_header->payload_type = OPAL_BTL_USNIC_PAYLOAD_TYPE_FRAG;
  85 }
  86 
  87 static void
  88 ack_seg_constructor(
  89     opal_btl_usnic_ack_segment_t *ack)
  90 {
  91     opal_btl_usnic_segment_t *bseg;
  92 
  93     bseg = &ack->ss_base;
  94     bseg->us_type = OPAL_BTL_USNIC_SEG_ACK;
  95 
  96     
  97     common_send_seg_helper(ack);
  98 
  99     
 100     bseg->us_btl_header->payload_type = OPAL_BTL_USNIC_PAYLOAD_TYPE_ACK;
 101     bseg->us_btl_header->payload_len = 0;
 102     bseg->us_btl_header->ack_present = 1;
 103 
 104     ack->ss_len = sizeof(bseg->us_btl_header);
 105 }
 106 
 107 
 108 static void
 109 recv_seg_constructor(
 110     opal_btl_usnic_recv_segment_t *seg)
 111 {
 112     opal_btl_usnic_segment_t *bseg;
 113 
 114     bseg = &seg->rs_base;
 115     bseg->us_type = OPAL_BTL_USNIC_SEG_RECV;
 116 
 117     
 118     seg->rs_protocol_header = bseg->us_list.ptr;
 119     bseg->us_btl_header = (opal_btl_usnic_btl_header_t *)(
 120         ((char *) seg->rs_protocol_header) +
 121         mca_btl_usnic_component.transport_header_len);
 122 
 123     
 124     
 125 
 126 
 127 
 128 
 129 
 130     seg->rs_desc.USNIC_RECV_REMOTE = NULL;
 131     seg->rs_desc.USNIC_RECV_REMOTE_COUNT = 0;
 132 
 133     seg->rs_desc.USNIC_RECV_LOCAL = &seg->rs_segment;
 134     seg->rs_desc.USNIC_RECV_LOCAL_COUNT = 1;
 135 
 136     
 137 
 138 
 139 
 140 
 141     bseg->us_payload.ompi_header = (mca_btl_base_header_t *)
 142         (bseg->us_btl_header+1);
 143     seg->rs_segment.seg_addr.pval = bseg->us_payload.ompi_header;
 144 }
 145 
 146 static void
 147 send_frag_constructor(opal_btl_usnic_send_frag_t *frag)
 148 {
 149     mca_btl_base_descriptor_t *desc;
 150 
 151     
 152     desc = &frag->sf_base.uf_base;
 153 
 154     
 155 
 156 
 157 
 158 
 159 
 160     desc->USNIC_SEND_REMOTE = frag->sf_base.uf_remote_seg;
 161     desc->USNIC_SEND_REMOTE_COUNT = 0;
 162 
 163     desc->USNIC_SEND_LOCAL = frag->sf_base.uf_local_seg;
 164     frag->sf_base.uf_local_seg[0].seg_len = 0;
 165     frag->sf_base.uf_local_seg[1].seg_len = 0;
 166     desc->USNIC_SEND_LOCAL_COUNT = 2;
 167 
 168     desc->order = MCA_BTL_NO_ORDER;
 169     desc->des_flags = 0;
 170 
 171     OBJ_CONSTRUCT(&frag->sf_convertor, opal_convertor_t);
 172     frag->sf_seg_post_cnt = 0;
 173 }
 174 
 175 static void
 176 send_frag_destructor(opal_btl_usnic_send_frag_t *frag)
 177 {
 178 #if OPAL_ENABLE_DEBUG
 179     
 180     mca_btl_base_descriptor_t *desc;
 181     desc = &frag->sf_base.uf_base;
 182     assert(desc->USNIC_SEND_LOCAL == frag->sf_base.uf_local_seg);
 183     assert(0 == frag->sf_base.uf_local_seg[0].seg_len);
 184 #endif
 185 
 186     
 187 
 188 
 189     OBJ_DESTRUCT(&frag->sf_convertor);
 190 }
 191 
 192 static void
 193 small_send_frag_constructor(opal_btl_usnic_small_send_frag_t *frag)
 194 {
 195     opal_btl_usnic_frag_segment_t *fseg;
 196 
 197     
 198     fseg = &frag->ssf_segment;
 199     
 200     fseg->ss_base.us_list.ptr = frag->ssf_base.sf_base.uf_base.super.ptr;
 201     OBJ_CONSTRUCT(fseg, opal_btl_usnic_frag_segment_t);
 202 
 203     
 204     fseg->ss_parent_frag = (struct opal_btl_usnic_send_frag_t *)frag;
 205 
 206     frag->ssf_base.sf_base.uf_type = OPAL_BTL_USNIC_FRAG_SMALL_SEND;
 207 
 208     
 209     frag->ssf_base.sf_base.uf_local_seg[0].seg_addr.pval =
 210         fseg->ss_base.us_payload.raw;
 211 }
 212 
 213 static void
 214 small_send_frag_destructor(opal_btl_usnic_small_send_frag_t *frag)
 215 {
 216     opal_btl_usnic_frag_segment_t *fseg;
 217 
 218     fseg = &frag->ssf_segment;
 219     assert(fseg->ss_parent_frag == (struct opal_btl_usnic_send_frag_t *)frag);
 220     assert(frag->ssf_base.sf_base.uf_type == OPAL_BTL_USNIC_FRAG_SMALL_SEND);
 221     assert(frag->ssf_base.sf_base.uf_local_seg[0].seg_addr.pval ==
 222            fseg->ss_base.us_payload.raw);
 223     OBJ_DESTRUCT(fseg);
 224 }
 225 
 226 static void
 227 large_send_frag_constructor(opal_btl_usnic_large_send_frag_t *lfrag)
 228 {
 229     lfrag->lsf_base.sf_base.uf_type = OPAL_BTL_USNIC_FRAG_LARGE_SEND;
 230 
 231     
 232     lfrag->lsf_base.sf_base.uf_local_seg[0].seg_addr.pval =
 233                     &lfrag->lsf_ompi_header;
 234 
 235     lfrag->lsf_buffer = NULL;
 236     OBJ_CONSTRUCT(&lfrag->lsf_seg_chain, opal_list_t);
 237     lfrag->lsf_pack_on_the_fly = false;
 238 }
 239 
 240 static void
 241 put_dest_frag_constructor(opal_btl_usnic_put_dest_frag_t *pfrag)
 242 {
 243     pfrag->uf_type = OPAL_BTL_USNIC_FRAG_PUT_DEST;
 244 
 245     
 246     pfrag->uf_base.USNIC_PUT_LOCAL = pfrag->uf_remote_seg;
 247     pfrag->uf_base.USNIC_PUT_LOCAL_COUNT = 1;
 248 }
 249 
 250 static void
 251 put_dest_frag_destructor(opal_btl_usnic_put_dest_frag_t *pfrag)
 252 {
 253     assert(pfrag->uf_base.USNIC_PUT_LOCAL == pfrag->uf_remote_seg);
 254     assert(1 == pfrag->uf_base.USNIC_PUT_LOCAL_COUNT);
 255 }
 256 
 257 OBJ_CLASS_INSTANCE(opal_btl_usnic_segment_t,
 258                    opal_free_list_item_t,
 259                    NULL,
 260                    NULL);
 261 
 262 OBJ_CLASS_INSTANCE(opal_btl_usnic_frag_segment_t,
 263                    opal_btl_usnic_segment_t,
 264                    frag_seg_constructor,
 265                    NULL);
 266 
 267 OBJ_CLASS_INSTANCE(opal_btl_usnic_chunk_segment_t,
 268                    opal_btl_usnic_segment_t,
 269                    chunk_seg_constructor,
 270                    NULL);
 271 
 272 OBJ_CLASS_INSTANCE(opal_btl_usnic_recv_segment_t,
 273                    opal_btl_usnic_segment_t,
 274                    recv_seg_constructor,
 275                    NULL);
 276 
 277 OBJ_CLASS_INSTANCE(opal_btl_usnic_ack_segment_t,
 278                    opal_btl_usnic_segment_t,
 279                    ack_seg_constructor,
 280                    NULL);
 281 
 282 
 283 
 284 
 285 OBJ_CLASS_INSTANCE(opal_btl_usnic_frag_t,
 286                    mca_btl_base_descriptor_t,
 287                    NULL,
 288                    NULL);
 289 
 290 OBJ_CLASS_INSTANCE(opal_btl_usnic_send_frag_t,
 291                    opal_btl_usnic_frag_t,
 292                    send_frag_constructor,
 293                    send_frag_destructor);
 294 
 295 OBJ_CLASS_INSTANCE(opal_btl_usnic_large_send_frag_t,
 296                    opal_btl_usnic_send_frag_t,
 297                    large_send_frag_constructor,
 298                    NULL);
 299 
 300 OBJ_CLASS_INSTANCE(opal_btl_usnic_small_send_frag_t,
 301                    opal_btl_usnic_send_frag_t,
 302                    small_send_frag_constructor,
 303                    small_send_frag_destructor);
 304 
 305 OBJ_CLASS_INSTANCE(opal_btl_usnic_put_dest_frag_t,
 306                    opal_btl_usnic_frag_t,
 307                    put_dest_frag_constructor,
 308                    put_dest_frag_destructor);
 309 
 310 OBJ_CLASS_INSTANCE(opal_btl_usnic_rx_buf_t,
 311                    opal_free_list_item_t,
 312                    NULL,
 313                    NULL);