| rev |
line source |
|
Me@6
|
1 /*
|
|
Me@6
|
2 * Copyright 2009 OpenSourceStewardshipFoundation.org
|
|
Me@6
|
3 * Licensed under GNU General Public License version 2
|
|
Me@6
|
4 *
|
|
Me@6
|
5 * Author: seanhalle@yahoo.com
|
|
Me@6
|
6 *
|
|
Me@6
|
7 */
|
|
Me@6
|
8
|
|
Me@6
|
9 #ifndef _SSR_H
|
|
Me@6
|
10 #define _SSR_H
|
|
Me@6
|
11
|
|
Me@6
|
12 #include "VMS/Queue_impl/PrivateQueue.h"
|
|
Me@6
|
13 #include "VMS/Hash_impl/PrivateHash.h"
|
|
Me@6
|
14 #include "VMS/VMS.h"
|
|
Me@6
|
15
|
|
Me@17
|
16
|
|
Me@17
|
17 //===========================================================================
|
|
Me@17
|
18 #define NUM_STRUCS_IN_SEM_ENV 1000
|
|
Me@17
|
19
|
|
Me@17
|
20 //===========================================================================
|
|
Me@6
|
21 /*This header defines everything specific to the SSR semantic plug-in
|
|
Me@6
|
22 */
|
|
Me@6
|
23 typedef struct _SSRSemReq SSRSemReq;
|
|
Me@17
|
24 typedef void (*PtrToAtomicFn ) ( void * ); //executed atomically in master
|
|
Me@17
|
25 //===========================================================================
|
|
Me@6
|
26
|
|
Me@6
|
27 /*Semantic layer-specific data sent inside a request from lib called in app
|
|
Me@6
|
28 * to request handler called in MasterLoop
|
|
Me@6
|
29 */
|
|
Me@6
|
30 enum SSRReqType
|
|
Me@6
|
31 {
|
|
Me@6
|
32 send_type = 1,
|
|
Me@6
|
33 send_from_to,
|
|
Me@6
|
34 receive_any, //order and grouping matter -- send before receive
|
|
Me@6
|
35 receive_type, // and receive_any first of the receives -- Handlers
|
|
Me@6
|
36 receive_from_to,// rely upon this ordering of enum
|
|
Me@6
|
37 transfer_to,
|
|
Me@17
|
38 transfer_out,
|
|
Me@17
|
39 malloc_req,
|
|
Me@17
|
40 free_req,
|
|
Me@17
|
41 singleton,
|
|
Me@17
|
42 atomic,
|
|
Me@17
|
43 trans_start,
|
|
Me@17
|
44 trans_end
|
|
Me@6
|
45 };
|
|
Me@6
|
46
|
|
Me@6
|
47 struct _SSRSemReq
|
|
Me@6
|
48 { enum SSRReqType reqType;
|
|
Me@17
|
49 VirtProcr *sendPr;
|
|
Me@17
|
50 VirtProcr *receivePr;
|
|
Me@17
|
51 int32 msgType;
|
|
Me@17
|
52 void *msg;
|
|
Me@6
|
53 SSRSemReq *nextReqInHashEntry;
|
|
Me@17
|
54
|
|
Me@17
|
55 void *initData;
|
|
Me@17
|
56 VirtProcrFnPtr fnPtr;
|
|
Me@17
|
57 int32 coreToScheduleOnto;
|
|
Me@17
|
58
|
|
Me@17
|
59 int32 sizeToMalloc;
|
|
Me@17
|
60 void *ptrToFree;
|
|
Me@17
|
61
|
|
Me@17
|
62 int32 singletonID;
|
|
Me@17
|
63 void *endJumpPt;
|
|
Me@17
|
64
|
|
Me@17
|
65 PtrToAtomicFn fnToExecInMaster;
|
|
Me@17
|
66 void *dataForFn;
|
|
Me@17
|
67
|
|
Me@17
|
68 int32 transID;
|
|
Me@6
|
69 }
|
|
Me@6
|
70 /* SSRSemReq */;
|
|
Me@6
|
71
|
|
Me@17
|
72
|
|
Me@17
|
73 typedef struct
|
|
Me@17
|
74 {
|
|
Me@17
|
75 VirtProcr *VPCurrentlyExecuting;
|
|
Me@17
|
76 PrivQueueStruc *waitingVPQ;
|
|
Me@17
|
77 }
|
|
Me@17
|
78 SSRTrans;
|
|
Me@17
|
79
|
|
Me@6
|
80 typedef struct
|
|
Me@6
|
81 {
|
|
Me@6
|
82 PrivQueueStruc **readyVPQs;
|
|
Me@14
|
83 HashTable *commHashTbl;
|
|
Me@14
|
84 int32 numVirtPr;
|
|
Me@14
|
85 int32 nextCoreToGetNewPr;
|
|
Me@14
|
86 int32 primitiveStartTime;
|
|
Me@17
|
87
|
|
Me@17
|
88 //fix limit on num with dynArray
|
|
Me@17
|
89 int32 singletonHasBeenExecutedFlags[NUM_STRUCS_IN_SEM_ENV];
|
|
Me@17
|
90 SSRTrans transactionStrucs[NUM_STRUCS_IN_SEM_ENV];
|
|
Me@6
|
91 }
|
|
Me@6
|
92 SSRSemEnv;
|
|
Me@6
|
93
|
|
Me@6
|
94
|
|
Me@17
|
95 typedef struct _TransListElem TransListElem;
|
|
Me@17
|
96 struct _TransListElem
|
|
Me@17
|
97 {
|
|
Me@17
|
98 int32 transID;
|
|
Me@17
|
99 TransListElem *nextTrans;
|
|
Me@17
|
100 };
|
|
Me@18
|
101 //TransListElem
|
|
Me@18
|
102
|
|
Me@17
|
103 typedef struct
|
|
Me@17
|
104 {
|
|
Me@17
|
105 int32 highestTransEntered;
|
|
Me@17
|
106 TransListElem *lastTransEntered;
|
|
Me@17
|
107 }
|
|
Me@17
|
108 SSRSemData;
|
|
Me@17
|
109
|
|
Me@6
|
110 //===========================================================================
|
|
Me@6
|
111
|
|
Me@6
|
112 void
|
|
Me@6
|
113 SSR__create_seed_procr_and_do_work( VirtProcrFnPtr fn, void *initData );
|
|
Me@6
|
114
|
|
Me@14
|
115 int32
|
|
Me@14
|
116 SSR__giveMinWorkUnitCycles( float32 percentOverhead );
|
|
Me@14
|
117
|
|
Me@14
|
118 void inline
|
|
Me@14
|
119 SSR__start_primitive();
|
|
Me@14
|
120
|
|
Me@14
|
121 int32 inline
|
|
Me@14
|
122 SSR__end_primitive_and_give_cycles();
|
|
Me@14
|
123
|
|
Me@16
|
124 int32
|
|
Me@16
|
125 SSR__giveIdealNumWorkUnits();
|
|
Me@14
|
126
|
|
Me@17
|
127 int32
|
|
Me@17
|
128 SSR__give_number_of_cores_to_schedule_onto();
|
|
Me@17
|
129
|
|
Me@6
|
130 //=======================
|
|
Me@6
|
131
|
|
Me@6
|
132 void
|
|
Me@6
|
133 SSR__init();
|
|
Me@6
|
134
|
|
Me@6
|
135 void
|
|
Me@6
|
136 SSR__cleanup_after_shutdown();
|
|
Me@6
|
137
|
|
Me@6
|
138 //=======================
|
|
Me@6
|
139
|
|
Me@6
|
140 inline VirtProcr *
|
|
Me@6
|
141 SSR__create_procr_with( VirtProcrFnPtr fnPtr, void *initData,
|
|
Me@6
|
142 VirtProcr *creatingPr );
|
|
Me@6
|
143
|
|
Me@17
|
144 inline VirtProcr *
|
|
Me@17
|
145 SSR__create_procr_with_affinity( VirtProcrFnPtr fnPtr, void *initData,
|
|
Me@17
|
146 VirtProcr *creatingPr, int32 coreToScheduleOnto);
|
|
Me@17
|
147
|
|
Me@6
|
148 void
|
|
Me@6
|
149 SSR__dissipate_procr( VirtProcr *procrToDissipate );
|
|
Me@6
|
150
|
|
Me@6
|
151 //=======================
|
|
Me@6
|
152 void *
|
|
Me@17
|
153 SSR__malloc_to( int numBytes, VirtProcr *ownerPr );
|
|
Me@17
|
154
|
|
Me@17
|
155 void
|
|
Me@17
|
156 SSR__free( void *ptrToFree, VirtProcr *owningPr );
|
|
Me@6
|
157
|
|
Me@6
|
158 void
|
|
Me@6
|
159 SSR__transfer_ownership_of_from_to( void *data, VirtProcr *oldOwnerPr,
|
|
Me@6
|
160 VirtProcr *newOwnerPr );
|
|
Me@6
|
161
|
|
Me@6
|
162 void
|
|
Me@6
|
163 SSR__add_ownership_by_to( VirtProcr *newOwnerPr, void *data );
|
|
Me@6
|
164
|
|
Me@6
|
165 void
|
|
Me@6
|
166 SSR__remove_ownership_by_from( VirtProcr *loserPr, void *dataLosing );
|
|
Me@6
|
167
|
|
Me@6
|
168 void
|
|
Me@6
|
169 SSR__transfer_ownership_to_outside( void *dataToTransferOwnershipOf );
|
|
Me@6
|
170
|
|
Me@6
|
171
|
|
Me@6
|
172
|
|
Me@6
|
173 //=======================
|
|
Me@6
|
174 void
|
|
Me@6
|
175 SSR__send_of_type_to( VirtProcr *sendPr, void *msg, const int type,
|
|
Me@6
|
176 VirtProcr *receivePr);
|
|
Me@6
|
177
|
|
Me@6
|
178 void
|
|
Me@6
|
179 SSR__send_from_to( void *msg, VirtProcr *sendPr, VirtProcr *receivePr);
|
|
Me@6
|
180
|
|
Me@6
|
181 void *
|
|
Me@6
|
182 SSR__receive_type_to( const int type, VirtProcr *receivePr );
|
|
Me@6
|
183
|
|
Me@6
|
184 void *
|
|
Me@6
|
185 SSR__receive_from_to( VirtProcr *sendPr, VirtProcr *receivePr );
|
|
Me@6
|
186
|
|
Me@6
|
187
|
|
Me@17
|
188 //======================= Concurrency Stuff ======================
|
|
Me@17
|
189 void
|
|
Me@17
|
190 SSR__start_singleton( int32 singletonID, void *endSingletonLabelAddr,
|
|
Me@17
|
191 VirtProcr *animPr );
|
|
Me@6
|
192
|
|
Me@6
|
193 void
|
|
Me@17
|
194 SSR__animate_short_fn_in_isolation( PtrToAtomicFn ptrToFnToExecInMaster,
|
|
Me@17
|
195 void *data, VirtProcr *animPr );
|
|
Me@17
|
196
|
|
Me@17
|
197 void
|
|
Me@17
|
198 SSR__start_transaction( int32 transactionID, VirtProcr *animPr );
|
|
Me@17
|
199
|
|
Me@17
|
200 void
|
|
Me@17
|
201 SSR__end_transaction( int32 transactionID, VirtProcr *animPr );
|
|
Me@6
|
202
|
|
Me@6
|
203
|
|
Me@6
|
204 //========================= Internal use only =============================
|
|
Me@6
|
205 void
|
|
Me@6
|
206 SSR__Request_Handler( VirtProcr *requestingPr, void *_semEnv );
|
|
Me@6
|
207
|
|
Me@6
|
208 VirtProcr *
|
|
Me@6
|
209 SSR__schedule_virt_procr( void *_semEnv, int coreNum );
|
|
Me@6
|
210
|
|
Me@6
|
211
|
|
Me@6
|
212 #endif /* _SSR_H */
|
|
Me@6
|
213
|