FreeCalypso > hg > fc-tourmaline
comparison src/gpf/ccd/ccd_store.c @ 0:4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:23:26 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4e78acac3d88 |
---|---|
1 /* | |
2 +----------------------------------------------------------------------------- | |
3 | Project : | |
4 | Modul : ccd_store.c | |
5 +----------------------------------------------------------------------------- | |
6 | Copyright 2004 Texas Instruments Deutschland, GmbH | |
7 | All rights reserved. | |
8 | | |
9 | This file is confidential and a trade secret of Texas | |
10 | Instruments Berlin, AG | |
11 | The receipt of or possession of this file does not convey | |
12 | any rights to reproduce or disclose its contents or to | |
13 | manufacture, use, or sell anything it may describe, in | |
14 | whole, or in part, without the specific written consent of | |
15 | Texas Instruments Berlin, AG. | |
16 +----------------------------------------------------------------------------- | |
17 | Purpose : CCD - Definition of store handling routines | |
18 +----------------------------------------------------------------------------- | |
19 */ | |
20 | |
21 #define CCD_STO_C | |
22 | |
23 #include <stdio.h> | |
24 #include <stdlib.h> | |
25 #include <stdarg.h> | |
26 #include <string.h> | |
27 #include <setjmp.h> | |
28 | |
29 /* | |
30 * Standard definitions like UCHAR, ERROR etc. | |
31 */ | |
32 #include "typedefs.h" | |
33 #include "header.h" | |
34 | |
35 /* | |
36 * Types and constants used by CCD | |
37 */ | |
38 #include "ccd_globs.h" | |
39 | |
40 /* | |
41 * Type definitions for CCD data tables | |
42 */ | |
43 #include "ccdtable.h" | |
44 | |
45 /* | |
46 * Function prototypes of CCD-CCDDATA interface | |
47 */ | |
48 #include "ccddata.h" | |
49 | |
50 /* | |
51 * Prototypes of ccd internal functions | |
52 */ | |
53 #include "ccd.h" | |
54 | |
55 | |
56 extern T_CCD_TASK_TABLE* ccd_task_list[]; | |
57 | |
58 #ifndef RUN_INT_RAM | |
59 /* Attention for RUN_...: static function */ | |
60 /* | |
61 +------------------------------------------------------------------------------ | |
62 | Function : ccd_store_alloc | |
63 +------------------------------------------------------------------------------ | |
64 | Description : This function allocates a the entity's store entry and | |
65 | set its next pointer to 0. | |
66 | The members of the entry must not reset with each | |
67 | coding/decoding action. | |
68 | | |
69 | Parameters : - | |
70 | | |
71 | Return : pointer to struct of type T_CCD_STORE_LIST | |
72 +------------------------------------------------------------------------------ | |
73 */ | |
74 static T_CCD_STORE_LIST* ccd_store_alloc () | |
75 { | |
76 T_CCD_STORE_LIST* stoentry; | |
77 int i; | |
78 #if defined (CCD_TEST) | |
79 stoentry = malloc (sizeof(T_CCD_STORE_LIST)); | |
80 #else | |
81 stoentry = D_ALLOC (sizeof(T_CCD_STORE_LIST)); | |
82 #endif | |
83 /* for future use to extend register capacity */ | |
84 /* stoentry->next = NULL */ | |
85 if (stoentry) | |
86 { | |
87 for (i = 0; i < 3; i++) | |
88 { | |
89 stoentry->store[i] = 0; | |
90 } | |
91 /* for future use to extend register capacity */ | |
92 /* (*stoentry)->next = NULL */ | |
93 } | |
94 return stoentry; | |
95 } | |
96 #endif /* !RUN_INT_RAM */ | |
97 | |
98 #ifndef RUN_INT_RAM | |
99 /* | |
100 +------------------------------------------------------------------------------ | |
101 | Function : ccd_store_init | |
102 +------------------------------------------------------------------------------ | |
103 | Description : This function initializes the entity's store entry | |
104 | | |
105 | Parameters : eentry - pointing to the entity's error entry | |
106 | | |
107 | Return : 1 in case of error, 0 otherwise | |
108 +------------------------------------------------------------------------------ | |
109 */ | |
110 int ccd_store_init (T_CCD_STORE_LIST** stoentry) | |
111 { | |
112 if (!*stoentry) | |
113 { | |
114 #if defined (CCD_TEST) | |
115 *stoentry = malloc (sizeof(T_CCD_STORE_LIST)); | |
116 #else | |
117 *stoentry = D_ALLOC (sizeof(T_CCD_STORE_LIST)); | |
118 #endif | |
119 } | |
120 if (*stoentry) | |
121 { | |
122 int i; | |
123 for (i = 0; i < 3; i++) | |
124 { | |
125 (*stoentry)->store[i] = 0; | |
126 } | |
127 /* for future use to extend register capacity */ | |
128 /* (*stoentry)->next = NULL */ | |
129 return 0; | |
130 } | |
131 return 1; | |
132 } | |
133 #endif /* !RUN_INT_RAM */ | |
134 | |
135 #ifndef RUN_INT_RAM | |
136 /* | |
137 +------------------------------------------------------------------------------ | |
138 | Function : ccd_store_exit | |
139 +------------------------------------------------------------------------------ | |
140 | Description : This function frees the task related store entry in | |
141 | ccd_task_list. | |
142 | | |
143 | Parameters : - | |
144 | | |
145 | Return : - | |
146 +------------------------------------------------------------------------------ | |
147 */ | |
148 void ccd_store_exit (void) | |
149 { | |
150 T_CCD_STORE_LIST** entry; | |
151 #if defined (CCD_TEST) | |
152 entry = &ccd_task_list[0]->ccd_store; | |
153 if (*entry) | |
154 { | |
155 /* for future use: This function frees the task related store list in case */ | |
156 /* of extended register capacity */ | |
157 /* ccd_sto_free(*stoentry); */ | |
158 free (*entry); | |
159 } | |
160 #else | |
161 T_HANDLE me = vsi_e_handle (0, NULL); | |
162 if (me == VSI_ERROR) | |
163 me = 0; | |
164 entry = &ccd_task_list[me]->ccd_store; | |
165 if (*entry) | |
166 { | |
167 /* for future use: This function frees the task related store list in case */ | |
168 /* of extended register capacity */ | |
169 /* ccd_sto_free(*stoentry); */ | |
170 D_FREE (*entry); | |
171 } | |
172 #endif | |
173 *entry = 0; | |
174 } | |
175 #endif /* !RUN_INT_RAM */ | |
176 | |
177 #ifndef RUN_INT_RAM | |
178 /* | |
179 +------------------------------------------------------------------------------ | |
180 | Function : ccd_writeStore | |
181 +------------------------------------------------------------------------------ | |
182 | Description : This function copies information to the register | |
183 | retaining its entries after CCD actions are finished. | |
184 | | |
185 | Parameters : globs - the current variable set | |
186 | regNo - to select one of the CCD STORE Registers | |
187 | value - information to write to CCD STORE Register | |
188 | | |
189 | Return : 1 in case of error, 0 otherwise | |
190 +------------------------------------------------------------------------------ | |
191 */ | |
192 | |
193 UBYTE ccd_writeStore (T_CCD_Globs *globs, ULONG regNo, ULONG value) | |
194 { | |
195 T_CCD_STORE_LIST* it; | |
196 /* | |
197 #if defined (CCD_TEST) | |
198 it = ccd_task_list[0]->ccd_store; | |
199 #else | |
200 T_HANDLE me = vsi_e_handle (0, NULL); | |
201 if (me == VSI_ERROR) | |
202 me = 0; | |
203 it = ccd_task_list[me]->ccd_store; | |
204 #endif | |
205 */ | |
206 it = ccd_task_list[globs->me]->ccd_store; | |
207 | |
208 #ifdef DEBUG_CCD | |
209 TRACE_CCD (globs, "Writing %x to STO[%d] ", value, regNo); | |
210 #endif | |
211 | |
212 if (regNo < 3) | |
213 { | |
214 if (!it) | |
215 { | |
216 it = ccd_store_alloc (); | |
217 } | |
218 | |
219 if (it) | |
220 { | |
221 it->store[regNo] = value; | |
222 } | |
223 | |
224 else | |
225 { | |
226 /* Memory allocation failed */ | |
227 #ifdef DEBUG_CCD | |
228 TRACE_CCD (globs, "Memory allocation failed!"); | |
229 #endif | |
230 return 1; | |
231 } | |
232 } | |
233 | |
234 else | |
235 { | |
236 /* for future use: extended register capacity requested */ | |
237 #ifdef DEBUG_CCD | |
238 TRACE_CCD (globs, "Invalid register number STO[%d] ", regNo); | |
239 #endif | |
240 return 1; | |
241 } | |
242 | |
243 return 0; | |
244 } | |
245 #endif /* !RUN_INT_RAM */ | |
246 | |
247 #ifndef RUN_INT_RAM | |
248 /* | |
249 +------------------------------------------------------------------------------ | |
250 | Function : ccd_setStore | |
251 +------------------------------------------------------------------------------ | |
252 | Description : This function copies information from the user to the CCD | |
253 | STORE Register. It retains its entries after CCD actions | |
254 | are finished. | |
255 | | |
256 | Parameters : regNo - to select one of the CCD STORE Registers | |
257 | value - information to write to CCD STORE Register | |
258 | | |
259 | Return : 1 in case of error, 0 otherwise | |
260 +------------------------------------------------------------------------------ | |
261 */ | |
262 | |
263 UBYTE ccd_setStore ( ULONG regNo, ULONG value) | |
264 { | |
265 T_CCD_Globs* entry; | |
266 #if defined (CCD_TEST) | |
267 entry = ccd_task_list[0]->ccd_globs; | |
268 #else | |
269 T_HANDLE me = vsi_e_handle (0, NULL); | |
270 if (me == VSI_ERROR) | |
271 me = 0; | |
272 entry = ccd_task_list[me]->ccd_globs; | |
273 entry->me = me; | |
274 #endif | |
275 | |
276 return ccd_writeStore (entry, regNo, value); | |
277 } | |
278 #endif /* !RUN_INT_RAM */ | |
279 | |
280 #ifndef RUN_INT_RAM | |
281 /* | |
282 +------------------------------------------------------------------------------ | |
283 | Function : ccd_getStore | |
284 +------------------------------------------------------------------------------ | |
285 | Description : This function reads information from the CCD STORE Register | |
286 | and provides it to CCD. | |
287 | (CCD STORE Register retains its entries after CCD actions | |
288 | are finished.) | |
289 | | |
290 | Parameters : globs - the current variable set | |
291 | regNo - to select one of the CCD STORE Registers | |
292 | value - information to write to CCD STORE Register | |
293 | | |
294 | Return : 1 in case of error, 0 otherwise | |
295 +------------------------------------------------------------------------------ | |
296 */ | |
297 | |
298 UBYTE ccd_getStore (T_CCD_Globs *globs, ULONG regNo, ULONG *value) | |
299 { | |
300 T_CCD_STORE_LIST* it = ccd_task_list[globs->me]->ccd_store; | |
301 | |
302 #ifdef DEBUG_CCD | |
303 TRACE_CCD (globs, "Reading from STO[%d] ", regNo); | |
304 #endif | |
305 | |
306 if (regNo < 3) | |
307 { | |
308 if (it) | |
309 { | |
310 *value = it->store[regNo]; | |
311 } | |
312 else | |
313 { | |
314 #ifdef DEBUG_CCD | |
315 TRACE_CCD (globs, "No CCD STORE Register persent!"); | |
316 #endif | |
317 return 1; | |
318 } | |
319 } | |
320 | |
321 else | |
322 { | |
323 /* for future use: extended register capacity requested */ | |
324 #ifdef DEBUG_CCD | |
325 TRACE_CCD (globs, "Invalid register number STO[%d] ", regNo); | |
326 #endif | |
327 return 1; | |
328 } | |
329 | |
330 return 0; | |
331 } | |
332 #endif /* !RUN_INT_RAM */ |