1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 #ifndef BTL_PORTALS_H_HAS_BEEN_INCLUDED
  25 #define BTL_PORTALS_H_HAS_BEEN_INCLUDED
  26 
  27 #include <portals4.h>
  28 #include <btl_portals4_frag.h>
  29 
  30 #include "opal/class/opal_free_list.h"
  31 #include "opal/class/opal_list.h"
  32 #include "opal/datatype/opal_convertor.h"
  33 #include "opal/mca/btl/btl.h"
  34 #include "opal/mca/btl/base/base.h"
  35 #include "opal/mca/btl/base/btl_base_error.h"
  36 
  37 BEGIN_C_DECLS
  38 
  39 
  40 
  41 
  42 struct mca_btl_portals4_component_t {
  43     
  44     mca_btl_base_component_2_0_0_t super;
  45 
  46     unsigned int num_btls;
  47     unsigned int max_btls; 
  48 
  49     struct mca_btl_portals4_module_t** btls; 
  50 
  51     
  52     int need_init;
  53 
  54     
  55     int use_logical;
  56 
  57     
  58     int portals_free_list_init_num;
  59     
  60     int portals_free_list_max_num;
  61     
  62     int portals_free_list_inc_num;
  63 
  64     
  65     int portals_free_list_eager_max_num;
  66 
  67     
  68     int portals_need_ack;
  69 
  70     
  71     int recv_queue_size;
  72 
  73     
  74     int32_t portals_max_outstanding_ops;
  75 
  76     
  77     int portals_recv_mds_num;
  78     int portals_recv_mds_size;
  79 
  80     
  81     ptl_handle_eq_t *eqs_h;
  82 
  83     
  84     unsigned long portals_max_msg_size;
  85 };
  86 
  87 typedef struct mca_btl_portals4_component_t mca_btl_portals4_component_t;
  88 
  89 struct mca_btl_portals4_module_t {
  90     
  91     mca_btl_base_module_t super;
  92 
  93     
  94 
  95     opal_atomic_int32_t portals_num_procs;
  96 
  97     
  98     uint32_t interface_num;
  99 
 100     
 101     opal_free_list_t portals_frag_eager;
 102     opal_free_list_t portals_frag_max;
 103     opal_free_list_t portals_frag_user;
 104 
 105     opal_list_t portals_recv_blocks;
 106 
 107     
 108     int recv_queue_size;
 109 
 110     
 111     ptl_handle_eq_t recv_eq_h;
 112 
 113     
 114     opal_atomic_int32_t portals_outstanding_ops;
 115     int32_t portals_max_outstanding_ops;
 116 
 117     
 118     opal_atomic_int64_t portals_rdma_key;
 119 
 120     
 121     ptl_handle_ni_t portals_ni_h;
 122 
 123     
 124     ptl_pt_index_t recv_idx;
 125 
 126     
 127     ptl_handle_md_t zero_md_h;
 128 
 129     
 130     ptl_handle_md_t send_md_h;
 131 
 132     
 133 
 134     ptl_handle_me_t long_overflow_me_h;
 135 };
 136 
 137 typedef struct mca_btl_portals4_module_t mca_btl_portals4_module_t;
 138 
 139 
 140 
 141 
 142 
 143 
 144 
 145 
 146 
 147 
 148 #define BTL_PORTALS4_PROTOCOL_MASK  0xF000000000000000ULL
 149 #define BTL_PORTALS4_CONTEXT_MASK   0x0FFF000000000000ULL
 150 #define BTL_PORTALS4_SOURCE_MASK    0x0000FFFF00000000ULL
 151 #define BTL_PORTALS4_TAG_MASK       0x00000000FFFFFFFFULL
 152 
 153 #define BTL_PORTALS4_PROTOCOL_IGNR  BTL_PORTALS4_PROTOCOL_MASK
 154 #define BTL_PORTALS4_CONTEXT_IGNR   BTL_PORTALS4_CONTEXT_MASK
 155 #define BTL_PORTALS4_SOURCE_IGNR    BTL_PORTALS4_SOURCE_MASK
 156 #define BTL_PORTALS4_TAG_IGNR       0x000000007FFFFFFFULL
 157 
 158 #define BTL_PORTALS4_SHORT_MSG      0x1000000000000000ULL
 159 #define BTL_PORTALS4_LONG_MSG       0x2000000000000000ULL
 160 
 161 
 162 #define BTL_PORTALS4_SET_SEND_BITS(match_bits, contextid, source, tag, type) \
 163     {                                                                   \
 164         match_bits = contextid;                                         \
 165         match_bits = (match_bits << 16);                                \
 166         match_bits |= source;                                           \
 167         match_bits = (match_bits << 32);                                \
 168         match_bits |= (BTL_PORTALS4_TAG_MASK & tag) | type;             \
 169     }
 170 
 171 #define BTL_PORTALS4_SET_HDR_DATA(hdr_data, opcount, length, sync)   \
 172     {                                                                \
 173         hdr_data = (sync) ? 1 : 0;                                   \
 174         hdr_data = (hdr_data << 15);                                 \
 175         hdr_data |= opcount & 0x7FFFULL;                             \
 176         hdr_data = (hdr_data << 48);                                 \
 177         hdr_data |= (length & 0xFFFFFFFFFFFFULL);                    \
 178     }
 179 
 180 #define REQ_BTL_TABLE_ID        2
 181 
 182 int mca_btl_portals4_component_progress(void);
 183 void mca_btl_portals4_free_module(mca_btl_portals4_module_t *portals4_btl);
 184 
 185 
 186 int mca_btl_portals4_finalize(struct mca_btl_base_module_t* btl_base);
 187 
 188 
 189 int mca_btl_portals4_add_procs(struct mca_btl_base_module_t* btl_base,
 190                               size_t nprocs,
 191                               struct opal_proc_t **procs,
 192                               struct mca_btl_base_endpoint_t** peers,
 193                               opal_bitmap_t* reachable);
 194 
 195 int mca_btl_portals4_del_procs(struct mca_btl_base_module_t* btl_base,
 196                               size_t nprocs,
 197                               struct opal_proc_t **procs,
 198                               struct mca_btl_base_endpoint_t** peers);
 199 
 200 mca_btl_base_descriptor_t*
 201 mca_btl_portals4_alloc(struct mca_btl_base_module_t* btl_base,
 202                       struct mca_btl_base_endpoint_t* endpoint,
 203                       uint8_t order,
 204                       size_t size,
 205                       uint32_t flags);
 206 
 207 int mca_btl_portals4_free(struct mca_btl_base_module_t* btl_base,
 208                          mca_btl_base_descriptor_t* des);
 209 
 210 mca_btl_base_descriptor_t*
 211 mca_btl_portals4_prepare_src(struct mca_btl_base_module_t* btl_base,
 212                             struct mca_btl_base_endpoint_t* peer,
 213                             struct opal_convertor_t* convertor,
 214                             uint8_t order,
 215                             size_t reserve,
 216                             size_t* size,
 217                             uint32_t flags);
 218 
 219 int mca_btl_portals4_send(struct mca_btl_base_module_t* btl_base,
 220                          struct mca_btl_base_endpoint_t* btl_peer,
 221                          struct mca_btl_base_descriptor_t* descriptor,
 222                          mca_btl_base_tag_t tag);
 223 
 224 
 225 int mca_btl_portals4_sendi(struct mca_btl_base_module_t* btl_base,
 226                           struct mca_btl_base_endpoint_t* endpoint,
 227                           struct opal_convertor_t* convertor,
 228                           void* header,
 229                           size_t header_size,
 230                           size_t payload_size,
 231                           uint8_t order,
 232                           uint32_t flags,
 233                           mca_btl_base_tag_t tag,
 234                           mca_btl_base_descriptor_t** des);
 235 
 236 int mca_btl_portals4_put(struct mca_btl_base_module_t* btl_base,
 237                         struct mca_btl_base_endpoint_t* btl_peer,
 238                         struct mca_btl_base_descriptor_t* decriptor);
 239 
 240 
 241 int mca_btl_portals4_get(struct mca_btl_base_module_t* btl_base,
 242                         struct mca_btl_base_endpoint_t* btl_peer,
 243                         void *local_address,
 244                         uint64_t remote_address,
 245                         struct mca_btl_base_registration_handle_t *local_handle,
 246                         struct mca_btl_base_registration_handle_t *remote_handle,
 247                         size_t size,
 248                         int flags,
 249                         int order,
 250                         mca_btl_base_rdma_completion_fn_t cbfunc,
 251                         void *cbcontext,
 252                         void *cbdata);
 253 
 254 int mca_btl_portals4_get_error(int ptl_error);
 255 
 256 struct mca_btl_base_registration_handle_t {
 257     
 258     ptl_match_bits_t key;
 259     
 260     ptl_handle_me_t me_h;
 261     
 262     ptl_size_t remote_offset;
 263 };
 264 
 265 
 266 
 267 
 268 OPAL_MODULE_DECLSPEC extern mca_btl_portals4_component_t mca_btl_portals4_component;
 269 extern mca_btl_portals4_module_t mca_btl_portals4_module;
 270 
 271 
 272 
 273 
 274 
 275 
 276 
 277 struct mca_btl_base_endpoint_t {
 278     ptl_process_t ptl_proc;
 279 };
 280 typedef struct mca_btl_base_endpoint_t mca_btl_base_endpoint_t;
 281 
 282 END_C_DECLS
 283 
 284 #endif