summaryrefslogtreecommitdiff
path: root/drivers/staging/nmf-cm/cm/engine/component/src/loader.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/nmf-cm/cm/engine/component/src/loader.c')
-rw-r--r--drivers/staging/nmf-cm/cm/engine/component/src/loader.c63
1 files changed, 54 insertions, 9 deletions
diff --git a/drivers/staging/nmf-cm/cm/engine/component/src/loader.c b/drivers/staging/nmf-cm/cm/engine/component/src/loader.c
index a128b7aa8c7..3d81e8308f9 100644
--- a/drivers/staging/nmf-cm/cm/engine/component/src/loader.c
+++ b/drivers/staging/nmf-cm/cm/engine/component/src/loader.c
@@ -111,12 +111,13 @@ t_uint32 cm_resolvSymbol(
for(i = 0; i < ee->Template->provideNumber; i++)
{
t_interface_provide* provide = &ee->Template->provides[i];
+ t_interface_provide_loaded* provideLoaded = &ee->Template->providesLoaded[i];
for(j = 0; j < provide->interface->methodNumber; j++)
{
if(provide->interface->methodNames[j] == symbolName)
{
- return provide->indexes[0][j].methodAddresses; // Here we assume no collection provided !!
+ return provideLoaded->indexesLoaded[0][j].methodAddresses; // Here we assume no collection provided !!
}
}
}
@@ -244,17 +245,40 @@ t_cm_error cm_loadComponent(
template->LCCConstructAddress = cm_EEM_getExecutiveEngine(coreId)->voidAddr;
// Compute provide methodIndex
- for(i = 0; i < template->provideNumber; i++)
+ if(template->provideNumber != 0)
{
- for(j = 0; j < template->provides[i].collectionSize; j++)
+ template->providesLoaded =
+ (t_interface_provide_loaded*)OSAL_Alloc_Zero(sizeof(t_interface_provide_loaded) * template->provideNumber);
+ if(template->providesLoaded == NULL)
+ goto oom;
+
+ for(i = 0; i < template->provideNumber; i++)
{
- for(k = 0; k < template->provides[i].interface->methodNumber; k++)
- {
- template->provides[i].indexes[j][k].methodAddresses =
- MemoryToDspAdress(template, &template->provides[i].indexes[j][k].memory);
+ template->providesLoaded[i].indexesLoaded = (t_interface_provide_index_loaded**)OSAL_Alloc_Zero(
+ sizeof(t_interface_provide_index_loaded*) * template->provides[i].collectionSize);
+ if(template->providesLoaded[i].indexesLoaded == NULL)
+ goto oom;
- LOG_INTERNAL(2, " [%d, %d] method '%s' @ %x\n",
- j, k, template->provides[i].interface->methodNames[k], template->provides[i].indexes[j][k].methodAddresses, 0, 0);
+ if(template->provides[i].interface->methodNumber != 0)
+ {
+ for(j = 0; j < template->provides[i].collectionSize; j++)
+ {
+ template->providesLoaded[i].indexesLoaded[j] = (t_interface_provide_index_loaded*)OSAL_Alloc(
+ sizeof(t_interface_provide_index_loaded) * template->provides[i].interface->methodNumber);
+ if(template->providesLoaded[i].indexesLoaded[j] == NULL)
+ goto oom;
+
+ for(k = 0; k < template->provides[i].interface->methodNumber; k++)
+ {
+ template->providesLoaded[i].indexesLoaded[j][k].methodAddresses =
+ MemoryToDspAdress(template, &template->provides[i].indexes[j][k].memory);
+
+ LOG_INTERNAL(2, " [%d, %d] method '%s' @ %x\n",
+ j, k, template->provides[i].interface->methodNames[k],
+ template->providesLoaded[i].indexesLoaded[j][k].methodAddresses, 0, 0);
+ }
+
+ }
}
}
}
@@ -282,6 +306,8 @@ t_cm_error cm_loadComponent(
templateAdd(template);
return CM_OK;
+ oom:
+ error = CM_NO_MORE_MEMORY;
out:
cm_unloadComponent(template);
return error;
@@ -317,6 +343,25 @@ PUBLIC t_cm_error cm_unloadComponent(
OSAL_Free(tofree);
}
+ if(template->providesLoaded != NULL)
+ {
+ int i, j;
+
+ for(i = 0; i < template->provideNumber; i++)
+ {
+ if(template->providesLoaded[i].indexesLoaded != NULL)
+ {
+ for(j = 0; j < template->provides[i].collectionSize; j++)
+ {
+ OSAL_Free(template->providesLoaded[i].indexesLoaded[j]);
+ }
+ OSAL_Free(template->providesLoaded[i].indexesLoaded);
+ }
+ }
+
+ OSAL_Free(template->providesLoaded);
+ }
+
if(template->descriptionAssociatedWithTemplate)
{
cm_ELF_ReleaseDescription(