doc: Add serial to list of ci file reserved words
[charm.git] / src / conv-core / persistent.h
1 /*****************************************************************************
2                   Persistent Communication API for ELAN
3
4 * PersistentHandle: 
5         persistent communication handler, created by CmiCreatePersistent()
6 * void CmiPersistentInit():
7         initialize persistent communication module, used by converseInit.
8 * PersistentHandle CmiCreatePersistent(int destPE, int maxBytes):
9         Sender initiates the setting up of persistent communication.
10         create a persistent communication handler, with dest PE and maximum 
11         bytes for this persistent communication. Machine layer will send 
12         message to destPE and setup a persistent communication. a buffer 
13         of size maxBytes is allocated in the destination PE.
14 * PersistentReq CmiCreateReceiverPersistent(int maxBytes);
15   PersistentHandle CmiRegisterReceivePersistent(PersistentReq req);
16         Alternatively, a receiver can initiate the setting up of persistent 
17         communication.
18         At receiver side, user calls CmiCreateReceiverPersistent() which 
19         returns a temporary handle type - PersistentRecvHandle. Send this 
20         handle to the sender side and the sender should call 
21         CmiRegisterReceivePersistent() to setup the persistent communication. 
22         The function returns a PersistentHandle which can then be used for 
23         the following persistent communication.
24 * void CmiUsePersistentHandle(PersistentHandle *p, int n);
25         ask Charm machine layer to use an array of PersistentHandle "p" 
26         (array size of n) for all the following communication. Calling with 
27         p = NULL will cancel the persistent communication. n = 1 is for 
28         sending message to one Chare, n > 1 is for message in multicast - 
29         one PersistentHandle for each PE.
30 * void CmiDestoryPersistent(PersistentHandle h);
31         Destory a persistent communication specified by PersistentHandle h.
32 * void CmiDestoryAllPersistent();
33         Destory all persistent communication on the local processor.
34
35 *****************************************************************************/
36
37 #include "conv-config.h"
38
39 #ifndef __PERSISTENT_H__
40 #define __PERSISTENT_H__
41
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45
46 typedef void * PersistentHandle;
47
48 #if CMK_PERSISTENT_COMM
49
50 typedef struct {
51   int pe;
52   int maxBytes;
53   void **bufPtr;
54   PersistentHandle myHand;
55 } PersistentReq;
56
57 void CmiPersistentInit();
58 PersistentHandle CmiCreatePersistent(int destPE, int maxBytes);
59 PersistentHandle CmiCreateNodePersistent(int destNode, int maxBytes);
60 PersistentReq CmiCreateReceiverPersistent(int maxBytes);
61 PersistentHandle CmiRegisterReceivePersistent(PersistentReq req);
62 void CmiUsePersistentHandle(PersistentHandle *p, int n);
63 void CmiDestoryPersistent(PersistentHandle h);
64 void CmiDestoryAllPersistent();
65
66 void CmiPersistentOneSend();
67 #else
68
69 typedef int PersistentRecvHandle;
70
71 #define CmiPersistentInit()
72 #define CmiCreatePersistent(x,y)  0
73 #define CmiCreateReceiverPersistent(maxBytes)   0
74 #define CmiRegisterReceivePersistent(req)  0
75 #define CmiUsePersistentHandle(x,y)
76 #define CmiDestoryAllPersistent()
77
78 #endif
79
80 #ifdef __cplusplus
81 }
82 #endif
83
84 #endif