[ipc/ipcdev.git] / qnx / src / ipc3x_dev / ti / syslink / family / common / vayu / vayudsp / VAYUDspProc.c
diff --git a/qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspProc.c b/qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspProc.c
index 7bd73f730d6be196210698980bcd08d50fd94711..65bd52ac1760beb3455a385d5cdad06feb37461c 100644 (file)
*
* ============================================================================
*
- * Copyright (c) 2013, Texas Instruments Incorporated
+ * Copyright (c) 2013-2016, Texas Instruments Incorporated
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
/*!
* @brief Number of static entries in address translation table.
*/
-#define AddrTable_STATIC_COUNT 0
+#define AddrTable_STATIC_COUNT 3
/*!
* @brief Max entries in address translation table.
*/
#define AddrTable_SIZE 32
-/* config param for dsp mmu */
-#define PARAMS_MAX_NAMELENGTH 64
-#define PARAMS_mmuEnable "ProcMgr.proc[DSP1].mmuEnable="
-#define PARAMS_carveoutAddr "ProcMgr.proc[DSP1].carveoutAddr"
-#define PARAMS_carveoutSize "ProcMgr.proc[DSP1].carveoutSize"
+/* Number of DSPs supported */
+#define NUM_DSPS 2
+
+/* Convert procId to DSP # */
+#define PROCID_TO_DSP(procId) (procId == VAYUDSPPROC_state.dsp1ProcId ?\
+ 0 : 1)
/*!
/*!< Processor handle array. */
IGateProvider_Handle gateHandle;
/*!< Handle of gate to be used for local thread safety */
+ UInt16 dsp1ProcId;
+ /*!< MultiProc id of DSP1 (to avoid multiple lookups) */
} VAYUDSPPROC_ModuleObject;
/* Default memory regions */
-static UInt32 AddrTable_count = AddrTable_STATIC_COUNT;
+static UInt32 AddrTable_count[NUM_DSPS] = {
+ AddrTable_STATIC_COUNT,
+ AddrTable_STATIC_COUNT
+};
-/* static memory regions
+/*
+ * Address translation table
+ * static memory regions
* CAUTION: AddrTable_STATIC_COUNT must match number of entries below.
*/
-static ProcMgr_AddrInfo AddrTable[AddrTable_SIZE] =
+static ProcMgr_AddrInfo AddrTable_DSP1[AddrTable_SIZE] =
+ {
+ /* L2 RAM */
+ {
+ .addr[ProcMgr_AddrType_MasterKnlVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterUsrVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterPhys] = 0x40800000u,
+ .addr[ProcMgr_AddrType_SlaveVirt] = 0x800000u,
+ .addr[ProcMgr_AddrType_SlavePhys] = -1u,
+ .size = 0x40000u,
+ .isCached = FALSE,
+ .mapMask = ProcMgr_SLAVEVIRT,
+ .isMapped = TRUE,
+ .refCount = 0u /* refCount set to 0 for static entry */
+ },
+
+ /* L1P RAM */
+ {
+ .addr[ProcMgr_AddrType_MasterKnlVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterUsrVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterPhys] = 0x40E00000u,
+ .addr[ProcMgr_AddrType_SlaveVirt] = 0xE00000u,
+ .addr[ProcMgr_AddrType_SlavePhys] = -1u,
+ .size = 0x8000u,
+ .isCached = FALSE,
+ .mapMask = ProcMgr_SLAVEVIRT,
+ .isMapped = TRUE,
+ .refCount = 0u /* refCount set to 0 for static entry */
+ },
+
+ /* L1D RAM */
+ {
+ .addr[ProcMgr_AddrType_MasterKnlVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterUsrVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterPhys] = 0x40F00000u,
+ .addr[ProcMgr_AddrType_SlaveVirt] = 0xF00000u,
+ .addr[ProcMgr_AddrType_SlavePhys] = -1u,
+ .size = 0x8000u,
+ .isCached = FALSE,
+ .mapMask = ProcMgr_SLAVEVIRT,
+ .isMapped = TRUE,
+ .refCount = 0u /* refCount set to 0 for static entry */
+ },
+ };
+
+static ProcMgr_AddrInfo AddrTable_DSP2[AddrTable_SIZE] =
{
+ /* L2 RAM */
+ {
+ .addr[ProcMgr_AddrType_MasterKnlVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterUsrVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterPhys] = 0x41000000u,
+ .addr[ProcMgr_AddrType_SlaveVirt] = 0x800000u,
+ .addr[ProcMgr_AddrType_SlavePhys] = -1u,
+ .size = 0x40000u,
+ .isCached = FALSE,
+ .mapMask = ProcMgr_SLAVEVIRT,
+ .isMapped = TRUE,
+ .refCount = 0u /* refCount set to 0 for static entry */
+ },
+
+ /* L1P RAM */
+ {
+ .addr[ProcMgr_AddrType_MasterKnlVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterUsrVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterPhys] = 0x41600000u,
+ .addr[ProcMgr_AddrType_SlaveVirt] = 0xE00000u,
+ .addr[ProcMgr_AddrType_SlavePhys] = -1u,
+ .size = 0x8000u,
+ .isCached = FALSE,
+ .mapMask = ProcMgr_SLAVEVIRT,
+ .isMapped = TRUE,
+ .refCount = 0u /* refCount set to 0 for static entry */
+ },
+
+ /* L1D RAM */
+ {
+ .addr[ProcMgr_AddrType_MasterKnlVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterUsrVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterPhys] = 0x41700000u,
+ .addr[ProcMgr_AddrType_SlaveVirt] = 0xF00000u,
+ .addr[ProcMgr_AddrType_SlavePhys] = -1u,
+ .size = 0x8000u,
+ .isCached = FALSE,
+ .mapMask = ProcMgr_SLAVEVIRT,
+ .isMapped = TRUE,
+ .refCount = 0u /* refCount set to 0 for static entry */
+ },
};
+static ProcMgr_AddrInfo * AddrTable[NUM_DSPS] =
+{
+ AddrTable_DSP1,
+ AddrTable_DSP2
+};
+
/* =============================================================================
* Globals
* =============================================================================
*
* @brief VAYUDSPPROC state object variable
*/
-#if !defined(SYSLINK_BUILD_DEBUG)
+#if !defined(IPC_BUILD_DEBUG)
static
-#endif /* if !defined(SYSLINK_BUILD_DEBUG) */
+#endif /* if !defined(IPC_BUILD_DEBUG) */
VAYUDSPPROC_ModuleObject VAYUDSPPROC_state =
{
.isSetup = FALSE,
.configSize = sizeof(VAYUDSPPROC_Config),
.gateHandle = NULL,
- .defInstParams.mmuEnable = FALSE,
.defInstParams.numMemEntries = AddrTable_STATIC_COUNT
};
-/* config override specified in SysLinkCfg.c, defined in ProcMgr.c */
-extern String ProcMgr_sysLinkCfgParams;
/* =============================================================================
* APIs directly called by applications
GT_assert (curTrace, (cfg != NULL));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (cfg == NULL) {
GT_setFailureReason (curTrace,
GT_4CLASS,
"is null!");
}
else {
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
Memory_copy (cfg,
&(VAYUDSPPROC_state.defCfg),
sizeof (VAYUDSPPROC_Config));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
GT_0trace (curTrace, GT_LEAVE, "VAYUDSPPROC_getConfig");
}
/* Create a default gate handle for local module protection. */
VAYUDSPPROC_state.gateHandle = (IGateProvider_Handle)
GateMutex_create ((GateMutex_Params *)NULL, &eb);
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (VAYUDSPPROC_state.gateHandle == NULL) {
/*! @retval PROCESSOR_E_FAIL Failed to create GateMutex! */
status = PROCESSOR_E_FAIL;
"Failed to create GateMutex!");
}
else {
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
/* Copy the user provided values into the state object. */
Memory_copy (&VAYUDSPPROC_state.cfg,
cfg,
Memory_set (&VAYUDSPPROC_state.procHandles,
0,
(sizeof (VAYUDSPPROC_Handle) * MultiProc_MAXPROCESSORS));
+
+ VAYUDSPPROC_state.dsp1ProcId = MultiProc_getId("DSP1");
VAYUDSPPROC_state.isSetup = TRUE;
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
GT_1trace (curTrace, GT_LEAVE, "VAYUDSPPROC_setup", status);
VAYUDSPPROC_Params * params)
{
VAYUDSPPROC_Object * procObject = (VAYUDSPPROC_Object *) handle;
- Int i = 0;
- ProcMgr_AddrInfo * ai = NULL;
GT_2trace (curTrace, GT_ENTER, "VAYUDSPPROC_Params_init", handle, params);
GT_assert (curTrace, (params != NULL));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (params == NULL) {
GT_setFailureReason (curTrace,
GT_4CLASS,
#endif
if (handle == NULL) {
- /* check for instance params override */
- Cfg_propBool(PARAMS_mmuEnable, ProcMgr_sysLinkCfgParams,
- &(VAYUDSPPROC_state.defInstParams.mmuEnable));
-
Memory_copy(params, &(VAYUDSPPROC_state.defInstParams),
sizeof(VAYUDSPPROC_Params));
-
- /* initialize the translation table */
- for (i = AddrTable_count; i < AddrTable_SIZE; i++) {
- ai = &AddrTable[i];
- ai->addr[ProcMgr_AddrType_MasterKnlVirt] = -1u;
- ai->addr[ProcMgr_AddrType_MasterUsrVirt] = -1u;
- ai->addr[ProcMgr_AddrType_MasterPhys] = -1u;
- ai->addr[ProcMgr_AddrType_SlaveVirt] = -1u;
- ai->addr[ProcMgr_AddrType_SlavePhys] = -1u;
- ai->size = 0u;
- ai->isCached = FALSE;
- ai->mapMask = 0u;
- ai->isMapped = FALSE;
- }
-
- /* initialize refCount for all entries - both static and dynamic */
- for(i = 0; i < AddrTable_SIZE; i++) {
- AddrTable[i].refCount = 0u;
- }
- Memory_copy((Ptr)params->memEntries, AddrTable, sizeof(AddrTable));
}
else {
/* return updated VAYUDSPPROC instance specific parameters */
Memory_copy(params, &(procObject->params), sizeof(VAYUDSPPROC_Params));
}
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
#endif
Int status = PROCESSOR_SUCCESS;
Processor_Object * handle = NULL;
VAYUDSPPROC_Object * object = NULL;
+ Int i = 0;
+ ProcMgr_AddrInfo *ai = NULL;
IArg key;
List_Params listParams;
GT_assert (curTrace, IS_VALID_PROCID (procId));
GT_assert (curTrace, (params != NULL));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (!IS_VALID_PROCID (procId)) {
/* Not setting status here since this function does not return status.*/
GT_setFailureReason (curTrace,
"params passed is NULL!");
}
else {
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
/* Enter critical section protection. */
key = IGateProvider_enter (VAYUDSPPROC_state.gateHandle);
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
/* Check if the Processor already exists for specified procId. */
if (VAYUDSPPROC_state.procHandles [procId] != NULL) {
status = PROCESSOR_E_ALREADYEXIST;
"Processor already exists for specified procId!");
}
else {
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
/* Allocate memory for the handle */
handle = (Processor_Object *) Memory_calloc (NULL,
sizeof (Processor_Object),
handle->procFxnTable.map = &VAYUDSPPROC_map;
handle->procFxnTable.unmap = &VAYUDSPPROC_unmap;
handle->procFxnTable.translateAddr = &VAYUDSPPROC_translate;
+ handle->procFxnTable.translateFromPte = NULL;
+
handle->state = ProcMgr_State_Unknown;
/* Allocate memory for the VAYUDSPPROC handle */
Memory_copy (&(object->params),
(Ptr) params,
sizeof (VAYUDSPPROC_Params));
+
+ /* initialize the translation table */
+ for (i = AddrTable_count[PROCID_TO_DSP(procId)];
+ i < AddrTable_SIZE; i++) {
+ ai = &AddrTable[PROCID_TO_DSP(procId)][i];
+ ai->addr[ProcMgr_AddrType_MasterKnlVirt] = -1u;
+ ai->addr[ProcMgr_AddrType_MasterUsrVirt] = -1u;
+ ai->addr[ProcMgr_AddrType_MasterPhys] = -1u;
+ ai->addr[ProcMgr_AddrType_SlaveVirt] = -1u;
+ ai->addr[ProcMgr_AddrType_SlavePhys] = -1u;
+ ai->size = 0u;
+ ai->isCached = FALSE;
+ ai->mapMask = 0u;
+ ai->isMapped = FALSE;
+ }
+
+ /*
+ * initialize refCount for all entries
+ */
+ for (i = 0; i < AddrTable_SIZE; i++) {
+ AddrTable[PROCID_TO_DSP(procId)][i].refCount = 0u;
+ }
+ Memory_copy((Ptr)(object->params.memEntries),
+ AddrTable[PROCID_TO_DSP(procId)],
+ (procId == VAYUDSPPROC_state.dsp1ProcId ?
+ sizeof(AddrTable_DSP1) : sizeof(AddrTable_DSP2)));
+
/* Set the handle in the state object. */
VAYUDSPPROC_state.procHandles [procId] =
(VAYUDSPPROC_Handle) object;
List_Params_init(&listParams);
handle->registeredNotifiers = List_create(&listParams);
-#if !defined(SYSLINK_BUILD_OPTIMIZE)
+#if !defined(IPC_BUILD_OPTIMIZE)
if (handle->registeredNotifiers == NULL) {
/*! @retval PROCESSOR_E_FAIL OsalIsr_create failed */
status = PROCESSOR_E_FAIL;
"List_create failed");
}
else {
-#endif /* if !defined(SYSLINK_BUILD_OPTIMIZE) */
+#endif /* if !defined(IPC_BUILD_OPTIMIZE) */
handle->notifiersLock =
OsalMutex_create(OsalMutex_Type_Interruptible);
-#if !defined(SYSLINK_BUILD_OPTIMIZE)
+#if !defined(IPC_BUILD_OPTIMIZE)
if (handle->notifiersLock == NULL) {
/*! @retval PROCESSOR_E_FAIL OsalIsr_create failed*/
status = PROCESSOR_E_FAIL;
"OsalMutex_create failed");
}
}
-#endif /* if !defined(SYSLINK_BUILD_OPTIMIZE) */
+#endif /* if !defined(IPC_BUILD_OPTIMIZE) */
}
}
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
/* Leave critical section protection. */
IGateProvider_leave (VAYUDSPPROC_state.gateHandle, key);
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
if (status < 0) {
if (handle != NULL) {
GT_assert (curTrace, (handlePtr != NULL));
GT_assert (curTrace, ((handlePtr != NULL) && (*handlePtr != NULL)));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (handlePtr == NULL) {
/*! @retval PROCESSOR_E_INVALIDARG Invalid NULL handlePtr pointer
specified*/
"Invalid NULL *handlePtr specified");
}
else {
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
handle = (Processor_Object *) (*handlePtr);
/* Enter critical section protection. */
key = IGateProvider_enter (VAYUDSPPROC_state.gateHandle);
/* Leave critical section protection. */
IGateProvider_leave (VAYUDSPPROC_state.gateHandle, key);
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
GT_1trace (curTrace, GT_LEAVE, "VAYUDSPPROC_delete", status);
GT_assert (curTrace, (handlePtr != NULL));
GT_assert (curTrace, IS_VALID_PROCID (procId));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (handlePtr == NULL) {
/*! @retval PROCESSOR_E_HANDLE Invalid NULL handlePtr specified */
status = PROCESSOR_E_HANDLE;
"Invalid procId specified");
}
else {
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
/* Initialize return parameter handle. */
*handlePtr = NULL;
else {
*handlePtr = VAYUDSPPROC_state.procHandles [procId];
}
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
GT_1trace (curTrace, GT_LEAVE, "VAYUDSPPROC_open", status);
GT_assert (curTrace, (handlePtr != NULL));
GT_assert (curTrace, ((handlePtr != NULL) && (*handlePtr != NULL)));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (handlePtr == NULL) {
/*! @retval PROCESSOR_E_INVALIDARG Invalid NULL handlePtr pointer
specified*/
"Invalid NULL *handlePtr specified");
}
else {
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
/* Nothing to be done for close. */
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
GT_1trace (curTrace, GT_LEAVE, "VAYUDSPPROC_close", status);
Int status = PROCESSOR_SUCCESS;
Processor_Object * procHandle = (Processor_Object *)handle;
- VAYUDSPPROC_Object * object = NULL;
+ VAYUDSPPROC_Object * object = NULL;
UInt32 i = 0;
UInt32 index = 0;
ProcMgr_AddrInfo * me;
- SysLink_MemEntry * entry;
- SysLink_MemEntry_Block memBlock;
- Char prop[PARAMS_MAX_NAMELENGTH];
- Char configProp[PARAMS_MAX_NAMELENGTH];
- UInt32 numCarveouts = 0;
+ Ipc_MemEntry * entry;
+ Ipc_MemEntry_Block memBlock;
VAYUDSP_HalMmuCtrlArgs_Enable mmuEnableArgs;
VAYUDSP_HalParams halParams;
GT_assert (curTrace, (handle != NULL));
GT_assert (curTrace, (params != NULL));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (handle == NULL) {
/*! @retval PROCESSOR_E_HANDLE Invalid argument */
status = PROCESSOR_E_HANDLE;
object = (VAYUDSPPROC_Object *) procHandle->object;
GT_assert (curTrace, (object != NULL));
- params->procArch = Processor_ProcArch_C66x;
+ /* Initialize halObject */
+ halParams.procId = procHandle->procId;
+ status = VAYUDSP_halInit(&(object->halObject), &halParams);
- /* check for instance params override */
- Cfg_propBool(PARAMS_mmuEnable, ProcMgr_sysLinkCfgParams,
- &(object->params.mmuEnable));
-
- /* check for carveout params override */
- for (i = 0; i < ProcMgr_MAX_MEMORY_REGIONS; i++) {
- snprintf (prop, PARAMS_MAX_NAMELENGTH, PARAMS_carveoutAddr"%d", i);
- strcat(prop, "=");
- if (!Cfg_prop(prop, ProcMgr_sysLinkCfgParams, configProp))
- break;
- object->params.carveoutAddr[i] = strtoul(configProp, 0, 16);
- snprintf (prop, PARAMS_MAX_NAMELENGTH, PARAMS_carveoutSize"%d", i);
- strcat(prop, "=");
- if (!Cfg_prop(prop, ProcMgr_sysLinkCfgParams, configProp))
- break;
- object->params.carveoutSize[i] = strtoul(configProp, 0, 16);
- numCarveouts++;
+ if (status < 0) {
+ GT_setFailureReason(curTrace, GT_4CLASS,
+ "VAYUDSPPROC_attach", status,
+ "VAYUDSP_halInit failed");
}
+ params->procArch = Processor_ProcArch_C66x;
object->pmHandle = params->pmHandle;
GT_0trace(curTrace, GT_1CLASS,
"VAYUDSPPROC_attach: Mapping memory regions");
/* search for dsp memory map */
- status = RscTable_process(procHandle->procId, object->params.mmuEnable,
- numCarveouts,
- (Ptr)object->params.carveoutAddr,
- object->params.carveoutSize, TRUE,
- &memBlock.numEntries);
- if (status < 0 || memBlock.numEntries > SYSLINK_MAX_MEMENTRIES) {
+ status = RscTable_process(procHandle->procId,
+ TRUE,
+ &memBlock.numEntries,
+ procHandle,
+ procHandle->bootMode);
+ if (status < 0 || memBlock.numEntries > IPC_MAX_MEMENTRIES) {
/*! @retval PROCESSOR_E_INVALIDARG Invalid argument */
status = PROCESSOR_E_INVALIDARG;
GT_setFailureReason (curTrace,
if (entry->map == FALSE) {
/* update table with entries which don't require mapping */
- if (AddrTable_count != AddrTable_SIZE) {
- me = &AddrTable[AddrTable_count];
+ if (AddrTable_count[PROCID_TO_DSP(procHandle->procId)] !=
+ AddrTable_SIZE) {
+ me = &AddrTable[PROCID_TO_DSP(procHandle->procId)][
+ AddrTable_count[PROCID_TO_DSP(procHandle->procId)]];
me->addr[ProcMgr_AddrType_MasterKnlVirt] = -1u;
me->addr[ProcMgr_AddrType_MasterUsrVirt] = -1u;
me->addr[ProcMgr_AddrType_MasterPhys] =
- entry->masterPhysAddr;
+ entry->masterPhysAddr;
me->addr[ProcMgr_AddrType_SlaveVirt] = entry->slaveVirtAddr;
me->addr[ProcMgr_AddrType_SlavePhys] = -1u;
me->size = entry->size;
me->isCached = entry->isCached;
me->mapMask = entry->mapMask;
- AddrTable_count++;
+ AddrTable_count[PROCID_TO_DSP(procHandle->procId)]++;
}
else {
status = PROCESSOR_E_FAIL;
me->addr[ProcMgr_AddrType_MasterKnlVirt] = -1u;
me->addr[ProcMgr_AddrType_MasterUsrVirt] = -1u;
me->addr[ProcMgr_AddrType_MasterPhys] =
- entry->masterPhysAddr;
+ entry->masterPhysAddr;
me->addr[ProcMgr_AddrType_SlaveVirt] = entry->slaveVirtAddr;
me->addr[ProcMgr_AddrType_SlavePhys] = -1u;
me->size = entry->size;
memcpy((Ptr)params->memEntries, (Ptr)object->params.memEntries,
sizeof(ProcMgr_AddrInfo) * params->numMemEntries);
- halParams.procId = procHandle->procId;
- status = VAYUDSP_halInit(&(object->halObject), &halParams);
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
- if (status < 0) {
- GT_setFailureReason(curTrace, GT_4CLASS,
- "VAYUDSPPROC_attach", status,
- "VAYUDSP_halInit failed");
- }
- else {
+ /* Setup the xbar for MMU fault interrupts */
+ GT_0trace(curTrace, GT_3CLASS,
+ "VAYUDSPPROC_attach: slave is now in reset");
+
+ mmuEnableArgs.numMemEntries = 0;
+ status = VAYUDSP_halMmuCtrl(object->halObject,
+ Processor_MmuCtrlCmd_Enable, &mmuEnableArgs);
+
+ if ((procHandle->bootMode == ProcMgr_BootMode_Boot)
+ || (procHandle->bootMode == ProcMgr_BootMode_NoLoad_Pwr)) {
+#if !defined(IPC_BUILD_OPTIMIZE)
+ if (status < 0) {
+ GT_setFailureReason(curTrace, GT_4CLASS,
+ "VAYUDSPPROC_attach", status,
+ "Failed to enable the slave MMU");
+ }
+ else {
#endif
- if ((procHandle->bootMode == ProcMgr_BootMode_Boot)
- || (procHandle->bootMode == ProcMgr_BootMode_NoLoad_Pwr)) {
+ GT_0trace(curTrace, GT_2CLASS,
+ "VAYUDSPPROC_attach: Slave MMU "
+ "is configured!");
-#if !defined(SYSLINK_BUILD_OPTIMIZE)
+ /*
+ * Pull DSP MMU out of reset to make internal
+ * memory "loadable"
+ */
+ status = VAYUDSP_halResetCtrl(
+ object->halObject,
+ Processor_ResetCtrlCmd_MMU_Release);
if (status < 0) {
- GT_setFailureReason(curTrace, GT_4CLASS,
- "VAYUDSPPROC_attach", status,
- "Failed to reset the slave processor");
- }
- else {
-#endif
- GT_0trace(curTrace, GT_3CLASS,
- "VAYUDSPPROC_attach: slave is now in reset");
-
- if (object->params.mmuEnable) {
- mmuEnableArgs.numMemEntries = 0;
- status = VAYUDSP_halMmuCtrl(object->halObject,
- Processor_MmuCtrlCmd_Enable, &mmuEnableArgs);
-
-#if !defined(SYSLINK_BUILD_OPTIMIZE)
- if (status < 0) {
- GT_setFailureReason(curTrace, GT_4CLASS,
- "VAYUDSPPROC_attach", status,
- "Failed to enable the slave MMU");
- }
-#endif
- GT_0trace(curTrace, GT_2CLASS,
- "VAYUDSPPROC_attach: Slave MMU "
- "is configured!");
- }
-#if !defined(SYSLINK_BUILD_OPTIMIZE)
+ /*! @retval status */
+ GT_setFailureReason(curTrace,
+ GT_4CLASS,
+ "VAYUDSP_halResetCtrl",
+ status,
+ "Reset MMU_Release failed");
}
-#endif
+#if !defined(IPC_BUILD_OPTIMIZE)
}
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
- }
#endif
+ }
+
}
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
#endif
GT_assert (curTrace, (handle != NULL));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (handle == NULL) {
/*! @retval PROCESSOR_E_HANDLE Invalid argument */
status = PROCESSOR_E_HANDLE;
if ( (procHandle->bootMode == ProcMgr_BootMode_Boot)
|| (procHandle->bootMode == ProcMgr_BootMode_NoLoad_Pwr)) {
- if (object->params.mmuEnable) {
- GT_0trace(curTrace, GT_2CLASS,
- "VAYUDSPPROC_detach: Disabling Slave MMU ...");
-
- status = VAYUDSP_halMmuCtrl(object->halObject,
- Processor_MmuCtrlCmd_Disable, NULL);
+ GT_0trace(curTrace, GT_2CLASS,
+ "VAYUDSPPROC_detach: Disabling Slave MMU ...");
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
- if (status < 0) {
- GT_setFailureReason(curTrace, GT_4CLASS,
- "VAYUDSPPROC_detach", status,
- "Failed to disable the slave MMU");
- }
-#endif
+ status = VAYUDSP_halResetCtrl(object->halObject,
+ Processor_ResetCtrlCmd_MMU_Reset);
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
+ if (status < 0) {
+ /*! @retval status */
+ GT_setFailureReason (curTrace,
+ GT_4CLASS,
+ "VAYUDSP_halResetCtrl",
+ status,
+ "Reset MMU failed");
}
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
- /* delete all dynamically added entries */
- for (i = AddrTable_STATIC_COUNT; i < AddrTable_count; i++) {
- ai = &AddrTable[i];
- ai->addr[ProcMgr_AddrType_MasterKnlVirt] = -1u;
- ai->addr[ProcMgr_AddrType_MasterUsrVirt] = -1u;
- ai->addr[ProcMgr_AddrType_MasterPhys] = -1u;
- ai->addr[ProcMgr_AddrType_SlaveVirt] = -1u;
- ai->addr[ProcMgr_AddrType_SlavePhys] = -1u;
- ai->size = 0u;
- ai->isCached = FALSE;
- ai->mapMask = 0u;
- ai->isMapped = FALSE;
- ai->refCount = 0u;
+ status = VAYUDSP_halMmuCtrl(object->halObject,
+ Processor_MmuCtrlCmd_Disable, NULL);
+
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
+ if (status < 0) {
+ GT_setFailureReason(curTrace, GT_4CLASS,
+ "VAYUDSPPROC_detach", status,
+ "Failed to disable the slave MMU");
}
- object->params.numMemEntries = AddrTable_STATIC_COUNT;
- AddrTable_count = AddrTable_STATIC_COUNT;
+#endif
+ }
- //No need to reset.. that will be done in STOP
- /*tmpStatus = VAYUDSP_halResetCtrl(object->halObject,
- VAYUDspHal_Reset_Detach);
+ /* delete all dynamically added entries */
+ for (i = AddrTable_STATIC_COUNT; i <
+ AddrTable_count[PROCID_TO_DSP(procHandle->procId)]; i++) {
+ ai = &AddrTable[PROCID_TO_DSP(procHandle->procId)][i];
+ ai->addr[ProcMgr_AddrType_MasterKnlVirt] = -1u;
+ ai->addr[ProcMgr_AddrType_MasterUsrVirt] = -1u;
+ ai->addr[ProcMgr_AddrType_MasterPhys] = -1u;
+ ai->addr[ProcMgr_AddrType_SlaveVirt] = -1u;
+ ai->addr[ProcMgr_AddrType_SlavePhys] = -1u;
+ ai->size = 0u;
+ ai->isCached = FALSE;
+ ai->mapMask = 0u;
+ ai->isMapped = FALSE;
+ ai->refCount = 0u;
+ }
+ object->params.numMemEntries = AddrTable_STATIC_COUNT;
+ AddrTable_count[PROCID_TO_DSP(procHandle->procId)] = AddrTable_STATIC_COUNT;
- GT_0trace(curTrace, GT_2CLASS,
- "VAYUDSPPROC_detach: Slave processor is now in reset");*/
+ //No need to reset.. that will be done in STOP
+ /*tmpStatus = VAYUDSP_halResetCtrl(object->halObject,
+ VAYUDspHal_Reset_Detach);
-#if !defined(SYSLINK_BUILD_OPTIMIZE)
- if ((tmpStatus < 0) && (status >= 0)) {
- status = tmpStatus;
- GT_setFailureReason(curTrace,
- GT_4CLASS,
- "VAYUDSPPROC_detach",
- status,
- "Failed to reset the slave processor");
- }
-#endif
+ GT_0trace(curTrace, GT_2CLASS,
+ "VAYUDSPPROC_detach: Slave processor is now in reset");*/
+
+#if !defined(IPC_BUILD_OPTIMIZE)
+ if ((tmpStatus < 0) && (status >= 0)) {
+ status = tmpStatus;
+ GT_setFailureReason (curTrace,
+ GT_4CLASS,
+ "VAYUDSPPROC_detach",
+ status,
+ "Failed to reset the slave processor");
}
+#endif
GT_0trace (curTrace,
GT_2CLASS,
" VAYUDSPPROC_detach: Unmapping memory regions\n");
tmpStatus = VAYUDSP_halExit (object->halObject);
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if ((tmpStatus < 0) && (status >= 0)) {
status = tmpStatus;
GT_setFailureReason (curTrace,
GT_assert (curTrace, (handle != NULL));
GT_assert (curTrace, (params != NULL));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (handle == NULL) {
/*! @retval PROCESSOR_E_HANDLE Invalid argument */
status = PROCESSOR_E_HANDLE;
"Invalid params specified");
}
else {
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
object = (VAYUDSPPROC_Object *) procHandle->object;
GT_assert (curTrace, (object != NULL));
if ( (procHandle->bootMode == ProcMgr_BootMode_Boot)
status = VAYUDSP_halBootCtrl (object->halObject,
Processor_BootCtrlCmd_SetEntryPoint,
(Ptr) entryPt);
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (status < 0) {
GT_setFailureReason (curTrace,
GT_4CLASS,
"Failed to set slave boot entry point");
}
else {
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
- if (object->params.mmuEnable) {
- status = VAYUDSP_halResetCtrl(object->halObject,
- Processor_ResetCtrlCmd_MMU_Release);
- if (status < 0) {
- /*! @retval status */
- GT_setFailureReason (curTrace,
- GT_4CLASS,
- "VAYUDSP_halResetCtrl",
- status,
- "Reset MMU_Release failed");
- }
- else {
- status = rproc_dsp_setup(object->halObject,
- object->params.memEntries,
- object->params.numMemEntries);
- if (status < 0) {
- /*! @retval status */
- GT_setFailureReason (curTrace,
- GT_4CLASS,
- "VAYUDSP_halResetCtrl",
- status,
- "rproc_dsp_setup failed");
- }
- }
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
+ status = rproc_dsp_setup(object->halObject,
+ object->params.memEntries,
+ object->params.numMemEntries);
+ if (status < 0) {
+ /*! @retval status */
+ GT_setFailureReason (curTrace,
+ GT_4CLASS,
+ "VAYUDSP_halResetCtrl",
+ status,
+ "rproc_dsp_setup failed");
}
/* release the slave cpu from reset */
if (status >= 0) {
status = VAYUDSP_halResetCtrl(object->halObject,
Processor_ResetCtrlCmd_Release);
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (status < 0) {
GT_setFailureReason (curTrace,
GT_4CLASS,
status,
"Failed to release slave from reset");
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
}
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
}
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
if (status >= 0) {
GT_0trace (curTrace,
GT_assert (curTrace, (handle != NULL));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (handle == NULL) {
/*! @retval PROCESSOR_E_HANDLE Invalid argument */
status = PROCESSOR_E_HANDLE;
GT_0trace (curTrace,
GT_1CLASS,
" VAYUDSPPROC_stop: Slave is now in reset!\n");
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (status < 0) {
GT_setFailureReason (curTrace,
GT_4CLASS,
status,
"Failed to place slave in reset");
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
- if (object->params.mmuEnable) {
- rproc_dsp_destroy(object->halObject);
- status = VAYUDSP_halResetCtrl(object->halObject,
- Processor_ResetCtrlCmd_MMU_Reset);
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
- if (status < 0) {
- /*! @retval status */
- GT_setFailureReason (curTrace,
- GT_4CLASS,
- "VAYUDSP_halResetCtrl",
- status,
- "Reset MMU failed");
- }
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
- }
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
+ rproc_dsp_destroy(object->halObject);
}
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
GT_1trace (curTrace, GT_LEAVE, "VAYUDSPPROC_stop", status);
/*! @retval PROCESSOR_SUCCESS Operation successful */
GT_assert (curTrace, (numBytes != NULL));
GT_assert (curTrace, (buffer != NULL));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (handle == NULL) {
/*! @retval PROCESSOR_E_HANDLE Invalid argument */
status = PROCESSOR_E_HANDLE;
"Invalid buffer specified");
}
else {
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
procPtr8 = (UInt8 *) procAddr ;
buffer = Memory_copy (buffer, procPtr8, *numBytes);
GT_assert (curTrace, (buffer != (UInt32) NULL));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (buffer == (UInt32) NULL) {
/*! @retval PROCESSOR_E_FAIL Failed in memcpy */
status = PROCESSOR_E_FAIL;
*numBytes = 0;
}
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
GT_1trace (curTrace, GT_LEAVE, "VAYUDSPPROC_read",status);
GT_assert (curTrace, (numBytes != NULL));
GT_assert (curTrace, (buffer != NULL));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (handle == NULL) {
/*! @retval PROCESSOR_E_HANDLE Invalid argument */
status = PROCESSOR_E_HANDLE;
"Invalid buffer specified");
}
else {
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
if (*numBytes != sizeof (UInt32)) {
procPtr8 = (UInt8 *) procAddr ;
procAddr = (UInt32) Memory_copy (procPtr8,
buffer,
*numBytes);
GT_assert (curTrace, (procAddr != (UInt32) NULL));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (procAddr == (UInt32) NULL) {
/*! @retval PROCESSOR_E_FAIL Failed in Memory_copy */
status = PROCESSOR_E_FAIL;
"Failed in Memory_copy");
*numBytes = 0;
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
}
else {
/* For 4 bytes, directly write as a UInt32 */
| ((UInt32) temp8_1));
*((UInt32*) procAddr) = temp;
}
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
GT_1trace (curTrace, GT_LEAVE, "VAYUDSPPROC_write",status);
GT_assert (curTrace, (handle != NULL));
/* cmd and arg can be 0/NULL, so cannot check for validity. */
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (handle == NULL) {
/*! @retval PROCESSOR_E_HANDLE Invalid argument */
status = PROCESSOR_E_HANDLE;
"Invalid handle specified");
}
else {
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
/* No control operations currently implemented. */
/*! @retval PROCESSOR_E_NOTSUPPORTED No control operations are supported
for this device. */
status = PROCESSOR_E_NOTSUPPORTED;
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
-#endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS) */
+#endif /* #if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS) */
GT_1trace (curTrace, GT_LEAVE, "VAYUDSPPROC_control",status);
/*! @retval PROCESSOR_SUCCESS Operation successful */
GT_assert (curTrace, (handle != NULL));
GT_assert (curTrace, (dstAddr != NULL));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (handle == NULL) {
/*! @retval PROCESSOR_E_HANDLE Invalid argument */
status = PROCESSOR_E_HANDLE;
GT_assert(curTrace, (object != NULL));
*dstAddr = -1u;
- for (i = 0; i < AddrTable_count; i++) {
- ai = &AddrTable[i];
+ /* search all entries AddrTable */
+ for (i = 0; i < AddrTable_count[PROCID_TO_DSP(procHandle->procId)];
+ i++) {
+ ai = &AddrTable[PROCID_TO_DSP(procHandle->procId)][i];
startAddr = ai->addr[ProcMgr_AddrType_SlaveVirt];
endAddr = startAddr + ai->size;
if ((startAddr <= srcAddr) && (srcAddr < endAddr)) {
offset = srcAddr - startAddr;
*dstAddr = ai->addr[ProcMgr_AddrType_MasterPhys] + offset;
+ GT_3trace(curTrace, GT_1CLASS, "VAYUDSPPROC_translate: "
+ "translated [%d] srcAddr=0x%x --> dstAddr=0x%x",
+ i, srcAddr, *dstAddr);
break;
}
}
if (*dstAddr == -1u) {
- if (!object->params.mmuEnable) {
- /* default to direct mapping (i.e. v=p) */
- *dstAddr = srcAddr;
- }
- else {
- /* srcAddr not found in slave address space */
- status = PROCESSOR_E_INVALIDARG;
- GT_setFailureReason(curTrace, GT_4CLASS,
- "VAYUDSPPROC_translate", status,
- "srcAddr not found in slave address space");
- }
+ /* srcAddr not found in slave address space */
+ status = PROCESSOR_E_INVALIDARG;
+ GT_setFailureReason(curTrace, GT_4CLASS,
+ "VAYUDSPPROC_translate", status,
+ "srcAddr not found in slave address space");
}
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
#endif
GT_1trace(curTrace, GT_LEAVE,
return status;
}
-
/*!
* @brief Map the given address translation into the slave mmu
*
UInt32 i;
UInt32 j;
ProcMgr_AddrInfo * ai = NULL;
- VAYUDSP_HalMmuCtrlArgs_AddEntry addEntryArgs;
GT_4trace (curTrace, GT_ENTER, "VAYUDSPPROC_map",
handle, dstAddr, nSegs, sglist);
GT_assert (curTrace, (sglist != NULL));
GT_assert (curTrace, (nSegs > 0));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (handle == NULL) {
/*! @retval PROCESSOR_E_HANDLE Invalid argument */
status = PROCESSOR_E_HANDLE;
* is required. Add the entry only if the range does not exist
* in the translation table.
*/
-
/* check in static entries first */
- for (j = 0; j < AddrTable_STATIC_COUNT; j++) {
- ai = &AddrTable [j];
+ for (j = 0;
+ j < AddrTable_STATIC_COUNT; j++) {
+ ai = &AddrTable[PROCID_TO_DSP(procHandle->procId)][j];
startAddr = ai->addr[ProcMgr_AddrType_SlaveVirt];
endAddr = startAddr + ai->size;
if ((startAddr <= *dstAddr) && (*dstAddr < endAddr)) {
found = TRUE;
- ai->refCount++;
+
+ /* refCount does not need to be incremented for static entries */
+
break;
}
}
/* if not found in static entries, check in dynamic entries */
if (!found) {
- for (j = AddrTable_STATIC_COUNT; j < AddrTable_count; j++) {
- ai = &AddrTable [j];
+ for (j = AddrTable_STATIC_COUNT;
+ j < AddrTable_count[PROCID_TO_DSP(procHandle->procId)]; j++) {
+ ai = &AddrTable[PROCID_TO_DSP(procHandle->procId)][j];
if (ai->isMapped == TRUE) {
startAddr = ai->addr[ProcMgr_AddrType_SlaveVirt];
/* if not found and mmu is enabled, add new entry to table */
if (!found) {
- if (object->params.mmuEnable) {
- if (AddrTable_count != AddrTable_SIZE) {
- ai = &AddrTable[AddrTable_count];
-
- ai->addr[ProcMgr_AddrType_MasterKnlVirt] = -1u;
- ai->addr[ProcMgr_AddrType_MasterUsrVirt] = -1u;
- ai->addr[ProcMgr_AddrType_MasterPhys] = sglist[i].paddr;
- ai->addr[ProcMgr_AddrType_SlaveVirt] = *dstAddr;
- ai->addr[ProcMgr_AddrType_SlavePhys] = -1u;
- ai->size = sglist[i].size;
- ai->isCached = sglist[i].isCached;
- ai->refCount++;
+ if (AddrTable_count[PROCID_TO_DSP(procHandle->procId)] !=
+ AddrTable_SIZE) {
+ ai = &AddrTable[PROCID_TO_DSP(procHandle->procId)]
+ [AddrTable_count[PROCID_TO_DSP
+ (procHandle->procId)]];
+ ai->addr[ProcMgr_AddrType_MasterKnlVirt] = -1u;
+ ai->addr[ProcMgr_AddrType_MasterUsrVirt] = -1u;
+ ai->addr[ProcMgr_AddrType_MasterPhys] = sglist[i].paddr;
+ ai->addr[ProcMgr_AddrType_SlaveVirt] = *dstAddr;
+ ai->addr[ProcMgr_AddrType_SlavePhys] = -1u;
+ ai->size = sglist[i].size;
+ ai->isCached = sglist[i].isCached;
+ ai->refCount++;
+ ai->isMapped = TRUE;
- AddrTable_count++;
- }
- else {
- status = PROCESSOR_E_FAIL;
- GT_setFailureReason(curTrace, GT_4CLASS,
- "VAYUDSPPROC_map", status,
- "AddrTable_SIZE reached!");
- }
+ AddrTable_count[PROCID_TO_DSP(procHandle->procId)]++;
}
else {
- /* if mmu disabled, AddrTable not updated */
- ai = NULL;
- }
- }
-
- /* if new entry, map into dsp mmu */
- if ((ai != NULL) && (ai->refCount == 1) && (status >= 0)) {
- ai->isMapped = TRUE;
-
- if (object->params.mmuEnable) {
- /* Add entry to Dsp mmu */
- addEntryArgs.masterPhyAddr = sglist [i].paddr;
- addEntryArgs.size = sglist [i].size;
- addEntryArgs.slaveVirtAddr = (UInt32)*dstAddr;
- /* TBD: elementSize, endianism, mixedSized are
- * hard coded now, must be configurable later
- */
- addEntryArgs.elementSize = ELEM_SIZE_16BIT;
- addEntryArgs.endianism = LITTLE_ENDIAN;
- addEntryArgs.mixedSize = MMU_TLBES;
- status = VAYUDSP_halMmuCtrl(object->halObject,
- Processor_MmuCtrlCmd_AddEntry, &addEntryArgs);
-#if !defined(SYSLINK_BUILD_OPTIMIZE)
- if (status < 0) {
- GT_setFailureReason(curTrace, GT_4CLASS,
- "VAYUDSPPROC_map", status,
- "Processor_MmuCtrlCmd_AddEntry failed");
- }
-#endif
+ status = PROCESSOR_E_FAIL;
+ GT_setFailureReason(curTrace, GT_4CLASS,
+ "VAYUDSPPROC_map", status,
+ "AddrTable_SIZE reached!");
}
}
-#if !defined(SYSLINK_BUILD_OPTIMIZE)
- if (status < 0) {
- GT_setFailureReason(curTrace, GT_4CLASS,
- "VAYUDSPPROC_map", status,
- "DSP MMU configuration failed");
- }
-#endif
}
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
#endif
GT_1trace(curTrace, GT_LEAVE, "VAYUDSPPROC_map", status);
GT_assert (curTrace, (handle != NULL));
GT_assert (curTrace, (size != 0));
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
if (handle == NULL) {
/*! @retval PROCESSOR_E_HANDLE Invalid argument */
status = PROCESSOR_E_HANDLE;
object = (VAYUDSPPROC_Object *) procHandle->object;
GT_assert (curTrace, (object != NULL));
- /* Delete dynamically added non-default entries from translation
+ /* Delete entries from translation
* table only in last unmap called on that entry
*/
- for (i = AddrTable_STATIC_COUNT; i < AddrTable_count; i++) {
- ai = &AddrTable[i];
+ for (i = 0;
+ i < AddrTable_count[PROCID_TO_DSP(procHandle->procId)]; i++) {
+ ai = &AddrTable[PROCID_TO_DSP(procHandle->procId)][i];
if (!ai->isMapped) {
continue;
ai->mapMask = 0u;
ai->isMapped = FALSE;
- if (object->params.mmuEnable) {
- /* Remove the entry from the DSP MMU also */
- deleteEntryArgs.size = size;
- deleteEntryArgs.slaveVirtAddr = addr;
- /* TBD: elementSize, endianism, mixedSized are
- * hard coded now, must be configurable later
- */
- deleteEntryArgs.elementSize = ELEM_SIZE_16BIT;
- deleteEntryArgs.endianism = LITTLE_ENDIAN;
- deleteEntryArgs.mixedSize = MMU_TLBES;
-
- status = VAYUDSP_halMmuCtrl(object->halObject,
- Processor_MmuCtrlCmd_DeleteEntry, &deleteEntryArgs);
-#if !defined(SYSLINK_BUILD_OPTIMIZE)
- if (status < 0) {
- GT_setFailureReason(curTrace, GT_4CLASS,
- "VAYUDSPPROC_unmap", status,
- "DSP MMU configuration failed");
- }
-#endif
+ /* Remove the entry from the DSP MMU also */
+ deleteEntryArgs.size = size;
+ deleteEntryArgs.slaveVirtAddr = addr;
+ /* TBD: elementSize, endianism, mixedSized are
+ * hard coded now, must be configurable later
+ */
+ deleteEntryArgs.elementSize = ELEM_SIZE_16BIT;
+ deleteEntryArgs.endianism = LITTLE_ENDIAN;
+ deleteEntryArgs.mixedSize = MMU_TLBES;
+
+ status = VAYUDSP_halMmuCtrl(object->halObject,
+ Processor_MmuCtrlCmd_DeleteEntry, &deleteEntryArgs);
+#if !defined(IPC_BUILD_OPTIMIZE)
+ if (status < 0) {
+ GT_setFailureReason(curTrace, GT_4CLASS,
+ "VAYUDSPPROC_unmap", status,
+ "DSP MMU configuration failed");
}
+#endif
}
}
}
-#if !defined(SYSLINK_BUILD_OPTIMIZE) && defined (SYSLINK_BUILD_HLOS)
+#if !defined(IPC_BUILD_OPTIMIZE) && defined (IPC_BUILD_HLOS)
}
#endif
GT_1trace(curTrace, GT_LEAVE, "VAYUDSPPROC_unmap", status);