Esempio n. 1
0
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;
}
Esempio n. 3
0
/*!
 * 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;
}
Esempio n. 4
0
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;
}