982b54044a20099c81fb73fc5aa9fa88a550b21d
[charm.git] / src / arch / template / machine-TEMPLATE.c
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7
8 /** @file
9  * A template machine layer
10  * @ingroup Machine
11  */
12 /*@{*/
13
14 /*TODO: define the machine layer name, such as lapi, mpi etc. */
15 #define MACHNAME
16
17 #include <stdio.h>
18 #include <errno.h>
19 #include "converse.h"
20 #include <MACHNAME.h>
21
22 /*Support for ++debug: */
23 #if defined(_WIN32) && ! defined(__CYGWIN__)
24 #include <windows.h>
25 #include <wincon.h>
26 #include <sys/types.h>
27 #include <sys/timeb.h>
28 static void sleep(int secs) {
29     Sleep(1000*secs);
30 }
31 #else
32 #include <unistd.h> /*For getpid()*/
33 #endif
34 #include <stdlib.h> /*For sleep()*/
35
36 #include "machine.h"
37
38 /* TODO: macros regarding redefining locks that will affect pcqueue.h*/
39 #include "pcqueue.h"
40
41 /* =======Beginning of Definitions of Performance-Specific Macros =======*/
42 /* TODO: add any that are related */
43 /* =======End of Definitions of Performance-Specific Macros =======*/
44
45
46 /* =====Beginning of Definitions of Message-Corruption Related Macros=====*/
47 /* TODO: add any that are related */
48 /* =====End of Definitions of Message-Corruption Related Macros=====*/
49
50
51 /* =====Beginning of Declarations of Machine Specific Variables===== */
52 /* TODO: add any that are related */
53 /* =====End of Declarations of Machine Specific Variables===== */
54
55
56 /* =====Beginning of Declarations of Machine Specific Functions===== */
57 /* Utility functions */
58 /* TODO: add any that are related */
59
60 /* TODO: The machine-specific send function */
61 /*
62 static CmiCommHandle MachineSpecificSend(int destPE, int size, char *msg, int mode);
63 #define CmiMachineSpecificSendFunc "function name defined above"
64 */
65
66 /* ### Beginning of Machine-startup Related Functions ### */
67 /* TODO: */
68 /*
69 static void MachineInitFor${MACHNAME}(int argc, char **argv, int *numNodes, int *myNodeID);
70 #define MachineSpecificInit "function name defined above"
71 */
72
73 /*
74 static void MachinePreCommonInitFor${MACHNAME}(int everReturn);
75 static void MachinePostCommonInitFor${MACHNAME}(int everReturn);
76 #define MachineSpecificPreCommonInit "function name defined above1"
77 #define MachineSpecificPostCommonInit "function name defined above2"
78 */
79 /* ### End of Machine-startup Related Functions ### */
80
81 /* ### Beginning of Machine-running Related Functions ### */
82 /* TODO:
83 static void AdvanceCommunicationFor${MACHNAME}();
84 #define MachineSpecificAdvanceCommunication "function name defined above2"
85
86 static void DrainResourcesFor${MACHNAME}(); //used when exit
87 #define MachineSpecificDrainResources "function name defined above2"
88
89
90 static void MachineExitFor${MACHNAME}();
91 #define MachineSpecificExit
92 */
93 /* ### End of Machine-running Related Functions ### */
94
95 /* ### Beginning of Idle-state Related Functions ### */
96
97 /* ### End of Idle-state Related Functions ### */
98
99 /* TODO: if there's any related
100 void MachinePostNonLocalForMPI();
101 #define MachineSpecificPostNonLocal MachinePostNonLocalForMPI
102 */
103
104 /* =====End of Declarations of Machine Specific Functions===== */
105
106 /**
107    * Functions that requires machine specific implementation:
108    * 1. void CmiReleaseCommHandle(CmiCommHandle c);
109    * 2. int CmiAsyncMsgSent(CmiCommHandle c);
110    * 3. char *CmiGetNonLocalNodeQ(void)
111    * 4. void *CmiGetNonLocal(void)
112    */
113
114 #include "machine-common.c"
115
116 /* The machine specific msg-sending function */
117
118 /* TODO: machine specific send operation */
119
120
121 /* TODO: machine specific functions for driving communication */
122 /* ######Beginning of functions related with communication progress ###### */
123 /* ######End of functions related with communication progress ###### */
124
125 /* Network progress function is used to poll the network when for
126    messages. This flushes receive buffers on some  implementations*/
127 #if CMK_MACHINE_PROGRESS_DEFINED
128 void CmiMachineProgressImpl() {
129 }
130 #endif
131
132 /* TODO: */
133 /* ######Beginning of functions related with exiting programs###### */
134 /* 1. functions to drain resources */
135 /* 2. functions to exit */
136 /* ######End of functions related with exiting programs###### */
137
138
139 /* ######Beginning of functions related with starting programs###### */
140 /* TODO */
141 /* 1. machine init function */
142 /* 2. machine pre/post common init functions */
143 /**
144  *  Obtain the number of nodes, my node id, and consuming machine layer
145  *  specific arguments
146  */
147 /* ######End of functions related with starting programs###### */
148
149 /***********************************************************************
150  *
151  * Abort function:
152  *
153  ************************************************************************/
154
155 void CmiAbort(const char *message) {
156 }
157
158 /**************************  TIMER FUNCTIONS **************************/
159
160 /************Barrier Related Functions****************/
161
162 /*@}*/
163