annotate gsm-fw/riviera/rvm/rvm_mem.c @ 419:3a46728e054b

tfc139: -a and -s options to override IRAM payload and stack smash addresses
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Tue, 17 Jun 2014 21:08:06 +0000
parents afceeeb2cba1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
118
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
1 /**
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
2 *
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
3 * @file rvm_mem.c
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
4 *
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
5 * This file contains the functions related to memory management within RVM.
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
6 *
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
7 * @author David Lamy-Charrier (d-lamy@ti.com)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
8 * @version 0.1
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
9 *
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
10 */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
11
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
12 /*
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
13 * Revision History:
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
14 *
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
15 * 10/26/2001 David Lamy-Charrier Create for Riviera 1.6.
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
16 *
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
17 * (C) Copyright 2001 by Texas Instruments Incorporated, All Rights Reserved
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
18 */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
19
121
15e972110527 RVM compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 118
diff changeset
20 #include "rvm_i.h"
15e972110527 RVM compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 118
diff changeset
21 #include "rvm_gen.h"
15e972110527 RVM compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 118
diff changeset
22 #include "rvm_api.h"
15e972110527 RVM compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 118
diff changeset
23 #include "rvm_use_id_list.h"
15e972110527 RVM compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 118
diff changeset
24 #include "../rvf/rvf_env.h"
118
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
25
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
26 extern T_RVM_GET_INFO_FUNC RVM_SWE_GET_INFO_ARRAY[];
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
27
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
28 extern T_RVM_KNOWN_SWE * rvm_swe_array;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
29
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
30 /*******************************************************************************
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
31 ** Function rvm_delete_used_memory
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
32 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
33 ** Description Internal function which deletes used local mem if an error
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
34 ** was received or at the end of the start/stop process.
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
35 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
36 *******************************************************************************/
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
37 T_RVM_RETURN rvm_delete_used_memory ( T_RVM_PROCESSING_SWE * appli)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
38 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
39 T_RVF_BUFFER_Q buffer_to_free_q = {0, 0, 0};
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
40 T_RVM_PROCESSING_SWE * cur_elem = appli;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
41
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
42 while (cur_elem != NULL)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
43 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
44 rvf_enqueue (&buffer_to_free_q, cur_elem);
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
45 cur_elem = cur_elem->next_swe;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
46 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
47
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
48 while (buffer_to_free_q.p_first)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
49 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
50 rvf_free_buf (rvf_dequeue (&buffer_to_free_q));
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
51 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
52
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
53 return RVM_OK;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
54 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
55
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
56
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
57 /*******************************************************************************
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
58 ** Function rvm_delete_created_mb
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
59 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
60 ** Description Internal function which deletes all created MB if an error
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
61 ** was received, or in case application has to be stopped.
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
62 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
63 *******************************************************************************/
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
64 T_RVM_RETURN rvm_delete_created_mb (T_RVM_PROCESSING_SWE * appli)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
65 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
66 UINT8 mb_index;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
67 T_RVM_PROCESSING_SWE * cur_elem = appli;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
68 volatile T_RV_RET ret_value = RV_OK;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
69 UINT8 mb_to_delete;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
70
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
71 while (cur_elem != NULL )
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
72 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
73 UINT8 swe_index = cur_elem->swe_id;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
74
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
75 /* If more than one appli is using this SWE, cannot delete MB
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
76 Process to the next SWE. */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
77 if (rvm_swe_array[swe_index].nb_using_appli > 1)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
78 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
79 cur_elem = cur_elem->next_swe; /* process the next SWE */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
80 continue;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
81 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
82
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
83 /* If the state is running, it means that this SWE has not
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
84 to be stopped. */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
85 if (rvm_swe_array[swe_index].swe_state == SWE_RUNNING)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
86 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
87 cur_elem = cur_elem->next_swe; /* process the next SWE */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
88 continue;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
89 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
90
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
91 /* We're here:
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
92 - either because swe_state == SWE_NOT_STARTED => error in starting prcess
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
93 - either because swe_state == SWE_STOPPING => regular stopping process */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
94
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
95 if (cur_elem->nb_created_mb == 0)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
96 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
97 cur_elem = cur_elem->next_swe; /* process the next SWE */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
98 continue;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
99 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
100
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
101 mb_to_delete = cur_elem->nb_created_mb;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
102
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
103 for( mb_index = 0; mb_index < mb_to_delete; mb_index++)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
104 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
105 ret_value = rvf_delete_mb(cur_elem->swe_mem_bank[mb_index].mb_name);
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
106 if (ret_value != RV_OK)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
107 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
108 rvf_send_trace("RVM: Error in deletion of memory bank: ", 39, NULL_PARAM, RV_TRACE_LEVEL_WARNING, RVM_USE_ID );
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
109 rvf_send_trace(cur_elem->swe_mem_bank[mb_index].mb_name, RVF_MAX_MB_LEN, NULL_PARAM, RV_TRACE_LEVEL_WARNING, RVM_USE_ID );
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
110 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
111 else
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
112 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
113 (cur_elem->nb_created_mb)--;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
114 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
115
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
116 ret_value = RVM_OK;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
117 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
118
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
119 cur_elem = cur_elem->next_swe; /* process the next SWE */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
120 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
121
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
122 return ret_value;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
123 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
124
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
125 /*******************************************************************************
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
126 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
127 ** Function rvm_check_memory_requirement
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
128 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
129 ** Description This function checks if there is enough memory
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
130 ** to start a SWE(and all the linked SWEs)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
131 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
132 ** Parameters: T_RVM_PROCESSING_SWE * appli: list of required SWEs with their parameters.
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
133 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
134 ** Returns T_RVM_RETURN: RVM_OK if there is enough memory, else RVM_MEMORY_ERR.
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
135 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
136 *******************************************************************************/
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
137 T_RVM_RETURN rvm_verify_memory_requirement( T_RVM_PROCESSING_SWE * appli,
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
138 T_RVM_GROUP_DIRECTIVE* gd,
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
139 UINT8 cnt) {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
140 T_RVM_PROCESSING_SWE * cur_swe = appli;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
141 UINT32 required_mem = 0;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
142 UINT32 total_mem = 0;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
143 UINT32 used_mem = 0;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
144 UINT8 mb_index;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
145 UINT8 i=0;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
146 UINT16 host_task_mem=0;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
147
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
148
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
149 /* get available memory from the rvf */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
150 if ( rvf_get_available_mem( &total_mem, &used_mem) != RVF_OK )
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
151 { return RVM_MEMORY_ERR;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
152 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
153
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
154 /* count required memory */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
155 while (cur_swe !=NULL ) /* for each SWE */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
156 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
157 UINT8 swe_index = cur_swe->swe_id;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
158
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
159 /*
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
160 ** If SWE is already running => MB already created => do nothing
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
161 */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
162 if (rvm_swe_array[swe_index].swe_state != SWE_RUNNING )
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
163 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
164 for( mb_index = 0; mb_index < cur_swe->nb_requested_mb; mb_index++) /* for each mb */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
165 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
166 required_mem += cur_swe->swe_mem_bank[mb_index].mb_initial_param.size;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
167 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
168
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
169 /* add the necessary stack sizes */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
170 /* TO DO: add the stack size for host groups not yet started */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
171 if( (cur_swe->swe_type == RVM_SWE_TYPE_3)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
172 || (cur_swe->swe_type == RVM_SWE_TYPE_4) )
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
173 /* || ((cur_swe->swe_type == RVM_SWE_TYPE_2) && (rvm_swe_array[swe_index].group_index == RVM_OWN_GROUP) )) */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
174 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
175 required_mem += rvm_swe_array[swe_index].swe_stack_size;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
176 required_mem += SYSTEM_TASK_MEM; /* only for type 3 & 4. A-M-E-N-D-E-D! */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
177 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
178
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
179 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
180 cur_swe = cur_swe->next_swe;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
181 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
182
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
183 /* type 2 group host system and stack mem. is catered for here */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
184 for(i=0; i<cnt; i++) host_task_mem+=gd[i].stack_size; /* A-M-E-N-D-E-D! */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
185 host_task_mem+=(cnt*SYSTEM_TASK_MEM);
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
186
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
187 /* compare available memory and required memory (eventually, use a percentage to improve performances) */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
188 if ((required_mem+host_task_mem) + used_mem > total_mem ) { /* A-M-E-N-D-E-D! */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
189 RVM_TRACE_WARNING_PARAM("RVM: Memory required (incl. used): ", (UINT32)(required_mem+host_task_mem+ used_mem) );
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
190 RVM_TRACE_WARNING_PARAM("RVM: Total Memory available : ", (UINT32)total_mem);
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
191 return RVM_MEMORY_ERR;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
192 } else{
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
193 return RVM_OK;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
194 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
195 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
196
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
197
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
198 /*******************************************************************************
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
199 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
200 ** Function rvm_allocate_mem
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
201 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
202 ** Description This function creates all the required memory banks or
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
203 ** increases their size if needed, to start a SWE.
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
204 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
205 ** Parameters: T_RVM_PROCESSING_SWE * appli: list of required SWEs with their parameters.
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
206 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
207 ** Returns T_RVM_RETURN: RVM_OK if all allocations are successful,
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
208 ** else RVM_MEMORY_ERR and it releases all the allocated memory.
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
209 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
210 *******************************************************************************/
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
211 T_RVM_RETURN rvm_allocate_mb( T_RVM_PROCESSING_SWE * appli)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
212 { T_RVM_PROCESSING_SWE * cur_swe = appli;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
213 UINT8 mb_index;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
214 volatile T_RVM_RETURN rvm_ret_value = RVM_OK;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
215
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
216 /* for each SWE in the list */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
217 while ((cur_swe != NULL ) && (rvm_ret_value == RVM_OK))
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
218 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
219 UINT8 swe_index = cur_swe->swe_id;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
220
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
221 if (rvm_swe_array[swe_index].swe_state == SWE_NOT_STARTED)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
222 /* If the state is not SWE_RUNNING, then the MBs have to be created */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
223 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
224 for( mb_index = 0; mb_index < cur_swe->nb_requested_mb; mb_index++) /* for each mb */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
225 { T_RVF_MB_PARAM mb_param;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
226 /* add the initial size */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
227 mb_param.size = cur_swe->swe_mem_bank[mb_index].mb_initial_param.size;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
228 mb_param.watermark = cur_swe->swe_mem_bank[mb_index].mb_initial_param.watermark;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
229
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
230 /* create the mb */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
231 if ( mb_param.size != 0)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
232 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
233 /* create the mb */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
234 if ( rvf_create_mb( cur_swe->swe_mem_bank[mb_index].mb_name, mb_param, &(cur_swe->bk_id_table[mb_index]) ) != RVF_OK)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
235 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
236 /* if an error occurs */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
237 rvm_ret_value = RVM_MEMORY_ERR;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
238 break;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
239 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
240 else
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
241 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
242 cur_swe->nb_created_mb++;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
243 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
244 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
245 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
246 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
247
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
248 cur_swe = cur_swe->next_swe; /* process the next SWE */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
249 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
250
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
251 if (rvm_ret_value != RVM_OK)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
252 /* Something went wrong, should release all used memory */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
253 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
254 rvf_send_trace("RVM: Problem in memory bank creation !!!", 40, NULL_PARAM, RV_TRACE_LEVEL_WARNING, RVM_USE_ID );
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
255 if (rvm_delete_created_mb (appli) != RVM_OK)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
256 {
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
257 rvf_send_trace("RVM: MB deleting error!!!", 25, NULL_PARAM, RV_TRACE_LEVEL_WARNING, RVM_USE_ID );
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
258 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
259
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
260 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
261 return rvm_ret_value;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
262 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
263
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
264
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
265 /*******************************************************************************
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
266 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
267 ** Function rvm_allocate_stack_buffer
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
268 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
269 ** Description This function allocates a buffer for the stack of a new
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
270 ** task created by RVM.
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
271 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
272 ** Parameters: UINT32 stack_size: size of stack.
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
273 ** T_RVF_BUFFER** stack_ptr: pointer to the allocated buffer.
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
274 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
275 ** Returns T_RVM_RETURN: RVM_OK if all allocation is successful,
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
276 ** else RVM_MEMORY_ERR.
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
277 **
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
278 *******************************************************************************/
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
279 T_RVM_RETURN rvm_allocate_stack_buffer( UINT32 stack_size, T_RVF_BUFFER** stack_ptr )
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
280 { T_RVF_MB_PARAM mb_params;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
281
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
282 /* increase the size of the stack MB before allocating the new buffer */
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
283 if( rvf_get_mb_param( RVM_STACK_MB, &mb_params) != RV_OK)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
284 { return RVM_MEMORY_ERR;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
285 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
286
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
287 mb_params.size += stack_size;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
288 mb_params.watermark += stack_size;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
289
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
290 if( rvf_set_mb_param( RVM_STACK_MB, &mb_params) != RV_OK)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
291 { return RVM_MEMORY_ERR;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
292 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
293
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
294 if( rvf_get_buf( rvm_stack_mem_bank, stack_size, stack_ptr) == RVF_RED)
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
295 { return RVM_MEMORY_ERR;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
296 }
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
297 return RVM_OK;
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
298
21de8d8e6ea7 checking in Riviera code from the Sotomodem version
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
299 }