1c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*
2c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Copyright (C) 2004-2010 NXP Software
3c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Copyright (C) 2010 The Android Open Source Project
4c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent *
5c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License");
6c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * you may not use this file except in compliance with the License.
7c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * You may obtain a copy of the License at
8c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent *
9c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent *      http://www.apache.org/licenses/LICENSE-2.0
10c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent *
11c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * Unless required by applicable law or agreed to in writing, software
12c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS,
13c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * See the License for the specific language governing permissions and
15c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent * limitations under the License.
16c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent */
17c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
18c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/****************************************************************************************/
19c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*                                                                                      */
20c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  Includes                                                                            */
21c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*                                                                                      */
22c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/****************************************************************************************/
23c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent#include "LVREV_Private.h"
24c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent#include "InstAlloc.h"
25c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
26c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/****************************************************************************************/
27c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*                                                                                      */
28c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* FUNCTION:                LVREV_GetMemoryTable                                        */
29c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*                                                                                      */
30c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* DESCRIPTION:                                                                         */
31c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  This function is used for memory allocation and free. It can be called in           */
32c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  two ways:                                                                           */
33c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*                                                                                      */
34c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  hInstance = NULL                Returns the memory requirements                     */
35c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  hInstance = Instance handle     Returns the memory requirements and allocated       */
36c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*                                  base addresses.                                     */
37c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*                                                                                      */
38c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  When this function is called for memory allocation (hInstance=NULL) the memory      */
39c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  base address pointers are NULL on return.                                           */
40c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*                                                                                      */
41c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  When the function is called for free (hInstance = Instance Handle) the memory       */
42c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  table returns the allocated memory and base addresses used during initialisation.   */
43c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*                                                                                      */
44c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* PARAMETERS:                                                                          */
45c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  hInstance               Instance Handle                                             */
46c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  pMemoryTable            Pointer to an empty memory table                            */
47c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  pInstanceParams         Pointer to the instance parameters                          */
48c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*                                                                                      */
49c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* RETURNS:                                                                             */
50c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  LVREV_Success           Succeeded                                                   */
51c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  LVREV_NULLADDRESS       When pMemoryTable is NULL                                   */
52c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  LVREV_NULLADDRESS       When requesting memory requirements and pInstanceParams     */
53c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*                          is NULL                                                     */
54c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*                                                                                      */
55c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* NOTES:                                                                               */
56c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*  1.  This function may be interrupted by the LVREV_Process function                  */
57c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/*                                                                                      */
58c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/****************************************************************************************/
59c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric LaurentLVREV_ReturnStatus_en LVREV_GetMemoryTable(LVREV_Handle_t           hInstance,
60c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent                                           LVREV_MemoryTable_st     *pMemoryTable,
61c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent                                           LVREV_InstanceParams_st  *pInstanceParams)
62c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent{
63c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
64c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    INST_ALLOC              SlowData;
65c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    INST_ALLOC              FastData;
66c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    INST_ALLOC              FastCoef;
67c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    INST_ALLOC              Temporary;
68c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    LVM_INT16               i;
69c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    LVM_UINT16              MaxBlockSize;
70c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
71c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
72c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    /*
73c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent     * Check for error conditions
74c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent     */
75c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    /* Check for NULL pointer */
76c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    if (pMemoryTable == LVM_NULL)
77c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    {
78c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        return(LVREV_NULLADDRESS);
79c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    }
80c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
81c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    /*
82c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent     * Check all instance parameters are in range
83c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent     */
84c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    if (pInstanceParams != LVM_NULL)
85c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    {
86c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        /*
87c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         * Call for memory allocation, so check the parameters
88c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         */
89c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        /* Check for a non-zero block size */
90c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        if (pInstanceParams->MaxBlockSize == 0)
91c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        {
92c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            return LVREV_OUTOFRANGE;
93c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        }
94c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
95c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        /* Check for a valid number of delay lines */
96c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        if ((pInstanceParams->NumDelays != LVREV_DELAYLINES_1) &&
97c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            (pInstanceParams->NumDelays != LVREV_DELAYLINES_2) &&
98c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            (pInstanceParams->NumDelays != LVREV_DELAYLINES_4))
99c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        {
100c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            return LVREV_OUTOFRANGE;
101c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        }
102c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    }
103c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
104c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    /*
105c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent     * Initialise the InstAlloc instances
106c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent     */
107c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    InstAlloc_Init(&SlowData,  (void *)LVM_NULL);
108c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    InstAlloc_Init(&FastData,  (void *)LVM_NULL);
109c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    InstAlloc_Init(&FastCoef,  (void *)LVM_NULL);
110c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    InstAlloc_Init(&Temporary, (void *)LVM_NULL);
111c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
112c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
113c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    /*
114c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent     * Fill in the memory table
115c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent     */
116c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    if (hInstance == LVM_NULL)
117c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    {
118c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        /*
119c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         * Check for null pointers
120c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         */
121c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        if (pInstanceParams == LVM_NULL)
122c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        {
123c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            return(LVREV_NULLADDRESS);
124c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        }
125c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
126c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
127c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        /*
128c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         * Select the maximum internal block size
129c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         */
130c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        if(pInstanceParams->NumDelays ==LVREV_DELAYLINES_4)
131c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        {
132c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            MaxBlockSize = LVREV_MAX_AP3_DELAY;
133c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        }
134c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        else if(pInstanceParams->NumDelays ==LVREV_DELAYLINES_2)
135c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        {
136c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            MaxBlockSize = LVREV_MAX_AP1_DELAY;
137c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        }
138c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        else
139c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        {
140c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            MaxBlockSize = LVREV_MAX_AP0_DELAY;
141c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        }
142c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
143c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        if(MaxBlockSize>pInstanceParams->MaxBlockSize)
144c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        {
145c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            MaxBlockSize=pInstanceParams->MaxBlockSize;
146c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        }
147c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
148c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
149c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        /*
150c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         * Slow data memory
151c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         */
152c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        InstAlloc_AddMember(&SlowData, sizeof(LVREV_Instance_st));
153c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].Size         = InstAlloc_GetTotal(&SlowData);
154c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].Type         = LVM_PERSISTENT_SLOW_DATA;
155c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].pBaseAddress = LVM_NULL;
156c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
157c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
158c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        /*
159c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         * Persistent fast data memory
160c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         */
161c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        InstAlloc_AddMember(&FastData, sizeof(LVREV_FastData_st));
162c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        if(pInstanceParams->NumDelays == LVREV_DELAYLINES_4)
163c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        {
164c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            InstAlloc_AddMember(&FastData, LVREV_MAX_T3_DELAY  * sizeof(LVM_INT32));
165c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            InstAlloc_AddMember(&FastData, LVREV_MAX_T2_DELAY  * sizeof(LVM_INT32));
166c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_INT32));
167c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_INT32));
168c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        }
169c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
170c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        if(pInstanceParams->NumDelays == LVREV_DELAYLINES_2)
171c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        {
172c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_INT32));
173c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_INT32));
174c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        }
175c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
176c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        if(pInstanceParams->NumDelays == LVREV_DELAYLINES_1)
177c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        {
178c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_INT32));
179c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        }
180c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
181c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].Size         = InstAlloc_GetTotal(&FastData);
182c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].Type         = LVM_PERSISTENT_FAST_DATA;
183c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].pBaseAddress = LVM_NULL;
184c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
185c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
186c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        /*
187c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         * Persistent fast coefficient memory
188c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         */
189c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        InstAlloc_AddMember(&FastCoef, sizeof(LVREV_FastCoef_st));
190c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].Size         = InstAlloc_GetTotal(&FastCoef);
191c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].Type         = LVM_PERSISTENT_FAST_COEF;
192c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].pBaseAddress = LVM_NULL;
193c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
194c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
195c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        /*
196c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         * Temporary fast memory
197c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         */
198c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize);          /* General purpose scratch memory */
199c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        InstAlloc_AddMember(&Temporary, 2*sizeof(LVM_INT32) * MaxBlockSize);        /* Mono->stereo input saved for end mix */
200c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
201c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        if(pInstanceParams->NumDelays == LVREV_DELAYLINES_4)
202c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        {
203c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            for(i=0; i<4; i++)
204c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            {
205c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent                InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize);      /* A Scratch buffer for each delay line */
206c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            }
207c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        }
208c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
209c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        if(pInstanceParams->NumDelays == LVREV_DELAYLINES_2)
210c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        {
211c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            for(i=0; i<2; i++)
212c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            {
213c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent                InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize);      /* A Scratch buffer for each delay line */
214c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            }
215c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        }
216c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
217c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        if(pInstanceParams->NumDelays == LVREV_DELAYLINES_1)
218c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        {
219c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            for(i=0; i<1; i++)
220c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            {
221c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent                InstAlloc_AddMember(&Temporary, sizeof(LVM_INT32) * MaxBlockSize);      /* A Scratch buffer for each delay line */
222c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent            }
223c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        }
224c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
225c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        pMemoryTable->Region[LVM_TEMPORARY_FAST].Size         = InstAlloc_GetTotal(&Temporary);
226c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        pMemoryTable->Region[LVM_TEMPORARY_FAST].Type         = LVM_TEMPORARY_FAST;
227c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        pMemoryTable->Region[LVM_TEMPORARY_FAST].pBaseAddress = LVM_NULL;
228c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
229c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    }
230c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    else
231c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    {
232c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        LVREV_Instance_st   *pLVREV_Private = (LVREV_Instance_st *)hInstance;
233c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
234c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
235c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        /*
236c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         * Read back memory allocation table
237c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent         */
238c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent        *pMemoryTable = pLVREV_Private->MemoryTable;
239c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    }
240c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
241c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
242c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent    return(LVREV_SUCCESS);
243c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent}
244c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent
245c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent/* End of file */
246