OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / frameworks / base / media / libeffects / lvm / lib / Common / src / InstAlloc.c
1 /*
2  * Copyright (C) 2004-2010 NXP Software
3  * Copyright (C) 2010 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 #include "InstAlloc.h"
19
20 /****************************************************************************************
21  *  Name        : InstAlloc_Init()
22  *  Input       : pms  - Pointer to the INST_ALLOC instance
23                   StartAddr - Base address of the instance memory
24  *  Returns     : Error code
25  *  Description : Initializes the instance distribution and memory size calculation function
26  *  Remarks     :
27  ****************************************************************************************/
28
29 void    InstAlloc_Init( INST_ALLOC      *pms,
30                         void            *StartAddr )
31 {
32     pms->TotalSize = 3;
33     pms->pNextMember = (LVM_UINT32)(((LVM_UINT32)StartAddr + 3) & 0xFFFFFFFC);/* This code will fail if the platform address space is more than 32-bits*/
34 }
35
36
37 /****************************************************************************************
38  *  Name        : InstAlloc_AddMember()
39  *  Input       : pms  - Pointer to the INST_ALLOC instance
40                   Size - The size in bytes of the new added member
41  *  Returns     : A pointer to the new added member
42  *  Description : Allocates space for a new member in the instance memory and returns
43                   a pointer to this new member.  The start address of all members will
44                   be 32 bit alligned.
45  *  Remarks     :
46  ****************************************************************************************/
47
48 void*   InstAlloc_AddMember( INST_ALLOC         *pms,
49                              LVM_UINT32           Size )
50 {
51     void *NewMemberAddress; /* Variable to temporarily store the return value */
52     NewMemberAddress = (void*)pms->pNextMember;
53
54     Size = ((Size + 3) & 0xFFFFFFFC); /* Ceil the size to a multiple of four */
55
56     pms->TotalSize += Size;
57     pms->pNextMember += Size;
58
59     return(NewMemberAddress);
60 }
61
62
63 /****************************************************************************************
64  *  Name        : InstAlloc_GetTotal()
65  *  Input       : pms  - Pointer to the INST_ALLOC instance
66  *  Returns     : The instance memory size
67  *  Description : This functions returns the calculated instance memory size
68  *  Remarks     :
69  ****************************************************************************************/
70
71 LVM_UINT32 InstAlloc_GetTotal( INST_ALLOC *pms)
72 {
73     if (pms->TotalSize > 3)
74     {
75         return(pms->TotalSize);
76     }
77     else
78     {
79         return 0;           /* No memory added */
80     }
81 }
82
83
84 void    InstAlloc_InitAll( INST_ALLOC                      *pms,
85                            LVM_MemoryTable_st             *pMemoryTable)
86 {
87     LVM_UINT32 StartAddr;
88
89     StartAddr = (LVM_UINT32)pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].pBaseAddress;
90
91     pms[0].TotalSize = 3;
92     pms[0].pNextMember = (LVM_UINT32)(((LVM_UINT32)StartAddr + 3) & 0xFFFFFFFC);
93
94
95     StartAddr = (LVM_UINT32)pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].pBaseAddress;
96
97     pms[1].TotalSize = 3;
98     pms[1].pNextMember = (LVM_UINT32)(((LVM_UINT32)StartAddr + 3) & 0xFFFFFFFC);
99
100
101     StartAddr = (LVM_UINT32)pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].pBaseAddress;
102
103     pms[2].TotalSize = 3;
104     pms[2].pNextMember = (LVM_UINT32)(((LVM_UINT32)StartAddr + 3) & 0xFFFFFFFC);
105
106
107     StartAddr = (LVM_UINT32)pMemoryTable->Region[LVM_TEMPORARY_FAST].pBaseAddress;
108
109     pms[3].TotalSize = 3;
110     pms[3].pNextMember = (LVM_UINT32)(((LVM_UINT32)StartAddr + 3) & 0xFFFFFFFC);
111
112 }
113
114 /****************************************************************************************
115  *  Name        : InstAlloc_InitAll_NULL()
116  *  Input       : pms  - Pointer to array of four INST_ALLOC instances
117  *  Returns     : Nothing
118  *  Description : This function reserves Size of 3 bytes for all memory regions and
119  *                intializes pNextMember for all regions to 0
120  *  Remarks     :
121  ****************************************************************************************/
122
123 void    InstAlloc_InitAll_NULL( INST_ALLOC  *pms)
124 {
125     pms[0].TotalSize = 3;
126     pms[0].pNextMember = 0;
127
128
129     pms[1].TotalSize = 3;
130     pms[1].pNextMember = 0;
131
132     pms[2].TotalSize = 3;
133     pms[2].pNextMember = 0;
134
135     pms[3].TotalSize = 3;
136     pms[3].pNextMember = 0;
137
138 }
139
140
141 void*   InstAlloc_AddMemberAll( INST_ALLOC                     *pms,
142                                  LVM_UINT32                   Size[],
143                                  LVM_MemoryTable_st           *pMemoryTable)
144 {
145     void *NewMemberAddress; /* Variable to temporarily store the return value */
146
147     /* coverity[returned_pointer] Ignore coverity warning that ptr is not used */
148     NewMemberAddress = InstAlloc_AddMember(&pms[LVM_PERSISTENT_SLOW_DATA], Size[LVM_PERSISTENT_SLOW_DATA]);
149
150     pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].Size         = InstAlloc_GetTotal(&pms[LVM_PERSISTENT_SLOW_DATA]);
151     pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].Type         = LVM_PERSISTENT_SLOW_DATA;
152     pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].pBaseAddress = LVM_NULL;
153
154     NewMemberAddress = InstAlloc_AddMember(&pms[LVM_PERSISTENT_FAST_DATA], Size[LVM_PERSISTENT_FAST_DATA]);
155
156     pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].Size         = InstAlloc_GetTotal(&pms[LVM_PERSISTENT_FAST_DATA]);
157     pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].Type         = LVM_PERSISTENT_FAST_DATA;
158     pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].pBaseAddress = LVM_NULL;
159
160     NewMemberAddress = InstAlloc_AddMember(&pms[LVM_PERSISTENT_FAST_COEF], Size[LVM_PERSISTENT_FAST_COEF]);
161
162     pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].Size         = InstAlloc_GetTotal(&pms[LVM_PERSISTENT_FAST_COEF]);
163     pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].Type         = LVM_PERSISTENT_FAST_COEF;
164     pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].pBaseAddress = LVM_NULL;
165
166     NewMemberAddress = InstAlloc_AddMember(&pms[LVM_TEMPORARY_FAST], Size[LVM_TEMPORARY_FAST]);
167
168     pMemoryTable->Region[LVM_TEMPORARY_FAST].Size                 = InstAlloc_GetTotal(&pms[LVM_TEMPORARY_FAST]);
169     pMemoryTable->Region[LVM_TEMPORARY_FAST].Type                 = LVM_TEMPORARY_FAST;
170     pMemoryTable->Region[LVM_TEMPORARY_FAST].pBaseAddress         = LVM_NULL;
171
172     return(NewMemberAddress);
173 }
174
175
176 void*   InstAlloc_AddMemberAllRet(     INST_ALLOC                 *pms,
177                                      LVM_UINT32               Size[],
178                                      void                    **ptr)
179 {
180     ptr[0] = InstAlloc_AddMember(&pms[LVM_PERSISTENT_SLOW_DATA], Size[LVM_PERSISTENT_SLOW_DATA]);
181     ptr[1] = InstAlloc_AddMember(&pms[LVM_PERSISTENT_FAST_DATA], Size[LVM_PERSISTENT_FAST_DATA]);
182     ptr[2] = InstAlloc_AddMember(&pms[LVM_PERSISTENT_FAST_COEF], Size[LVM_PERSISTENT_FAST_COEF]);
183     ptr[3] = InstAlloc_AddMember(&pms[LVM_TEMPORARY_FAST], Size[LVM_TEMPORARY_FAST]);
184
185     return (ptr[0]);
186 }