1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 #ifndef MCA_FBTL_IME_H
  11 #define MCA_FBTL_IME_H
  12 
  13 #include "ime_native.h"
  14 
  15 #include "ompi_config.h"
  16 #include "ompi/mca/mca.h"
  17 #include "ompi/mca/fbtl/fbtl.h"
  18 #include "ompi/mca/common/ompio/common_ompio.h"
  19 #include "ompi/mca/common/ompio/common_ompio_request.h"
  20 
  21 extern int mca_fbtl_ime_priority;
  22 extern int mca_fbtl_ime_iov_max;
  23 extern int mca_fbtl_ime_aio_reqs_max;
  24 
  25 #define FBTL_IME_BASE_PRIORITY      0
  26 #define FBTL_IME_INCREASED_PRIORITY 50
  27 #define FBTL_IME_AIO_REQS_MAX       128
  28 
  29 #ifdef IME_IOV_MAX
  30 #define FBTL_IME_IOV_MAX IME_IOV_MAX
  31 #else
  32 #define FBTL_IME_IOV_MAX 1024
  33 #endif
  34 
  35 
  36 BEGIN_C_DECLS
  37 
  38 int mca_fbtl_ime_component_init_query(bool enable_progress_threads,
  39                                         bool enable_mpi_threads);
  40 struct mca_fbtl_base_module_1_0_0_t *
  41 mca_fbtl_ime_component_file_query (ompio_file_t *file, int *priority);
  42 int mca_fbtl_ime_component_file_unquery (ompio_file_t *file);
  43 
  44 int mca_fbtl_ime_module_init (ompio_file_t *file);
  45 int mca_fbtl_ime_module_finalize (ompio_file_t *file);
  46 
  47 OMPI_MODULE_DECLSPEC extern mca_fbtl_base_component_2_0_0_t mca_fbtl_ime_component;
  48 
  49 
  50 
  51 
  52 
  53 
  54 ssize_t mca_fbtl_ime_preadv (ompio_file_t *file );
  55 ssize_t mca_fbtl_ime_pwritev (ompio_file_t *file );
  56 ssize_t mca_fbtl_ime_ipreadv (ompio_file_t *file,
  57                                ompi_request_t *request);
  58 ssize_t mca_fbtl_ime_ipwritev (ompio_file_t *file,
  59                                 ompi_request_t *request);
  60 
  61 bool mca_fbtl_ime_progress     (mca_ompio_request_t *req);
  62 void mca_fbtl_ime_request_free (mca_ompio_request_t *req);
  63 void mca_fbtl_ime_complete_cb  (struct ime_aiocb *aiocb, int err, ssize_t bytes);
  64 
  65 struct mca_fbtl_ime_request_data_t {
  66     int            aio_req_count;       
  67     int            aio_open_reqs;       
  68     int            aio_req_type;        
  69     int            aio_req_chunks;      
  70     int            aio_first_active_req; 
  71     int            aio_last_active_req;  
  72     int            aio_req_fail_count;   
  73     struct iovec      *aio_iovecs;       
  74     struct ime_aiocb  *aio_reqs;         
  75     ssize_t           *aio_req_status;  
  76     ssize_t        aio_total_len;       
  77     ompio_file_t  *aio_fh;       
  78     void          *allocated_data; 
  79 
  80 
  81 };
  82 typedef struct mca_fbtl_ime_request_data_t mca_fbtl_ime_request_data_t;
  83 
  84 
  85 #define FBTL_IME_READ 1
  86 #define FBTL_IME_WRITE 2
  87 #define FBTL_IME_IN_PROGRESS -1
  88 #define FBTL_IME_REQ_ERROR   -2
  89 #define FBTL_IME_REQ_CLOSED  -3
  90 
  91 
  92 
  93 
  94 
  95 
  96 
  97 END_C_DECLS
  98 
  99 #endif