doc: Add serial to list of ci file reserved words
[charm.git] / src / conv-core / cmidirect.h
1 #ifndef _CMIDIRECT_H_
2 #define _CMIDIRECT_H_
3 /* This file provides an interface for users to the CmiDirect functionality.
4
5 */
6 #ifdef CMK_BLUEGENEP
7 typedef struct {
8     CmiFloat8 space[2];
9 } cmkquad;  
10 /* is equivalent to DCQUAD, but without including dmcf.h */
11 #endif
12
13
14 /* handle type definition */
15 /* sender is the one who initiates the request.
16    recver is the one who receives the request.
17    Put: sender=source recver=target of the one-sided buffer operation
18    Get: sender=target recver=source of the one-sided buffer operation
19 */
20 #ifdef CMK_BLUEGENEP
21 #include "dcmf.h"
22 #elif  CMK_CONVERSE_GEMINI_UGNI
23 #include "gni_pub.h"
24 #endif
25 typedef struct infiDirectUserHandle{
26     int handle;
27 #ifdef CMK_BLUEGENEP
28     int senderNode;
29     int recverNode;
30     void *recverBuf;
31     int recverBufSize;
32     void *senderBuf;
33     void (*callbackFnPtr)(void *);
34     void *callbackData;
35     void *DCMF_notify_buf;
36     DCMF_Request_t *DCMF_rq_trecv;
37     DCMF_Request_t *DCMF_rq_tsend;
38     DCMF_Memregion_t DCMF_recverMemregion;
39     DCMF_Memregion_t DCMF_senderMemregion;
40     DCMF_Callback_t DCMF_notify_cb;
41 #elif  CMK_CONVERSE_GEMINI_UGNI
42     int localNode;
43     int remoteRank;
44     int remoteNode;
45     void *remoteBuf;
46     void *remoteHandler;
47     int transSize;
48     void *localBuf;
49     void (*callbackFnPtr)(void *);
50     void *callbackData;
51     gni_mem_handle_t    localMdh;
52     gni_mem_handle_t    remoteMdh;
53 #else
54     int senderNode;
55     int recverNode;
56     void *recverBuf;
57     int recverBufSize;
58         char recverKey[64];
59 #endif
60         double initialValue;
61 }CmiDirectUserHandle;
62
63 #ifdef  CMK_CONVERSE_GEMINI_UGNI
64 typedef gni_mem_handle_t    CmiDirectMemoryHandler;
65 CmiDirectMemoryHandler CmiDirect_registerMemory(void *buff, int size);
66 struct infiDirectUserHandle CmiDirect_createHandle_mem(CmiDirectMemoryHandler *mem_hndl, void *recvBuf, int recvBufSize, void (*callbackFnPtr)(void *), void *callbackData);
67 void CmiDirect_assocLocalBuffer_mem(struct infiDirectUserHandle *userHandle, CmiDirectMemoryHandler *mem_hndl, void *sendBuf,int sendBufSize);
68 void CmiDirect_saveHandler(CmiDirectUserHandle* h, void *ptr);
69 #endif
70 /* functions */
71
72 #ifdef __cplusplus
73 extern "C" {
74 #endif
75 /**
76  To be called on the receiver to create a handle and return its number
77 **/
78 struct infiDirectUserHandle CmiDirect_createHandle(int senderNode,void *recvBuf, int recvBufSize, void (*callbackFnPtr)(void *), void *callbackData,double initialValue);
79
80 /****
81  To be called on the sender to attach the sender's buffer to this handle
82 ******/
83 void CmiDirect_assocLocalBuffer(struct infiDirectUserHandle *userHandle,void *sendBuf,int sendBufSize);
84
85
86 /**** up to the user to safely call this */
87 void CmiDirect_deassocLocalBuffer(struct infiDirectUserHandle *userHandle);
88
89 /**** up to the user to safely call this */
90 void CmiDirect_destroyHandle(struct infiDirectUserHandle *userHandle);
91
92 /****
93 To be called on the sender to do the actual data transfer
94 ******/
95 void CmiDirect_put(struct infiDirectUserHandle *userHandle);
96
97
98 /****
99 To be called on the receiver to initiate the actual data transfer
100 ******/
101 void CmiDirect_get(struct infiDirectUserHandle *userHandle);
102
103 /**** Should not be called the first time *********/
104 void CmiDirect_ready(struct infiDirectUserHandle *userHandle);
105
106 /**** Should not be called the first time *********/
107 void CmiDirect_readyMark(struct infiDirectUserHandle *userHandle);
108
109 /**** Should not be called the first time *********/
110 void CmiDirect_readyPollQ(struct infiDirectUserHandle *userHandle);
111 #ifdef __cplusplus
112 }
113 #endif
114
115 #endif