PUBLIC t_cm_error cm_SRV_allocateTraceBufferMemory(t_nmf_core_id coreId, t_cm_domain_id domainId) { t_ee_state *state = cm_EEM_getExecutiveEngine(coreId); state->traceDataHandle = cm_DM_Alloc(domainId, SDRAM_EXT16, TRACE_BUFFER_SIZE * sizeof(struct t_nmf_trace) / 2, CM_MM_ALIGN_WORD, TRUE); if (state->traceDataHandle == INVALID_MEMORY_HANDLE) return CM_NO_MORE_MEMORY; else { t_uint32 mmdspAddr; int i; state->traceDataAddr = (struct t_nmf_trace*)cm_DSP_GetHostLogicalAddress(state->traceDataHandle); cm_DSP_GetDspAddress(state->traceDataHandle, &mmdspAddr); cm_writeAttribute(state->instance, "rtos/commonpart/traceDataAddr", mmdspAddr); eeState[coreId].readTracePointer = 0; eeState[coreId].lastReadedTraceRevision = 0; for(i = 0; i < TRACE_BUFFER_SIZE; i++) state->traceDataAddr[i].revision = 0; return CM_OK; } }
PUBLIC EXPORT_SHARED t_cm_error CM_ENGINE_WriteComponentAttribute( const t_cm_instance_handle instance, const char* attrName, t_uint24 attrValue) { t_cm_error error; t_component_instance* component; OSAL_LOCK_API(); component = cm_lookupComponent(instance); if (NULL == component) error = CM_INVALID_COMPONENT_HANDLE; else { if ((error = cm_EEM_ForceWakeup(component->Template->dspId)) != CM_OK) goto out; //t_uint24 -> t_uint32 possible since we know it same size error = cm_writeAttribute(component, attrName, attrValue); cm_EEM_AllowSleep(component->Template->dspId); } out: OSAL_UNLOCK_API(); return error; }
/*! * Create Shared FIFO and set stub and skeleton to it */ PRIVATE t_cm_error cm_createParamsFifo(t_component_instance *stub, t_component_instance *skeleton, t_cm_domain_id domainId, t_uint32 fifosize, t_nmf_fifo_arm_desc **fifo, t_uint32 *fifoElemSize, t_uint32 bcDescSize) { t_nmf_core_id stubcore = (stub != NULL) ?(stub->Template->dspId): ARM_CORE_ID; t_nmf_core_id skelcore = (skeleton != NULL) ?(skeleton->Template->dspId) : ARM_CORE_ID; t_component_instance *bcnotnull = (stub != NULL) ? stub : skeleton; int _fifoelemsize; CM_ASSERT(bcnotnull != NULL); /* Get fifo param elem size (which was store in FIFO by convention) */ _fifoelemsize = cm_readAttributeNoError(bcnotnull, "FIFO"); LOG_INTERNAL(3, "Fifo Params element size = %d\n", _fifoelemsize, 0, 0, 0, 0, 0); if(fifoElemSize != NULL) *fifoElemSize = _fifoelemsize; /* Allocation of the fifo params */ *fifo = fifo_alloc(stubcore, skelcore, _fifoelemsize, fifosize, 1+bcDescSize, paramsLocation, extendedFieldLocation, domainId); /* 1+nbMethods fro hostBCThis_or_TOP space */ if(*fifo == NULL) { ERROR("CM_NO_MORE_MEMORY: fifo_alloc() failed in cm_createParamsFifo()\n", 0, 0, 0, 0, 0, 0); return CM_NO_MORE_MEMORY; } if(stub != NULL) { /* Set stub FIFO attribute (Error mut not occure) */ cm_writeAttribute(stub, "FIFO", (*fifo)->dspAdress); LOG_INTERNAL(2, " FIFO param %x:%x\n", *fifo, (*fifo)->dspAdress, 0, 0, 0, 0); } if(skeleton != NULL) { /* Set Skeleton FIFO attribute (Error mut not occure) */ cm_writeAttribute(skeleton, "FIFO", (*fifo)->dspAdress); LOG_INTERNAL(2, " FIFO param %x:%x\n", *fifo, (*fifo)->dspAdress, 0, 0, 0, 0); } return CM_OK; }
PUBLIC EXPORT_SHARED t_cm_error CM_ReadMPCString( t_nmf_core_id coreId, t_uint32 dspAddress, char * buffer, t_uint32 bufferSize) { while(--bufferSize > 0) { char ch = cm_DSP_ReadXRamWord(coreId, dspAddress++); if(ch == 0) break; *buffer++ = ch; }; *buffer = 0; // Reset panicReason cm_writeAttribute(cm_EEM_getExecutiveEngine(coreId)->instance, "rtos/commonpart/serviceReason", MPC_SERVICE_NONE); return CM_OK; }