⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ixperfprofaccbuspmu.c

📁 有关ARM开发板上的IXP400网络驱动程序的源码以。
💻 C
📖 第 1 页 / 共 3 页
字号:
    srVirtualAddress  =  (UINT32)IX_OSAL_MEM_MAP(PMU_SR,IX_OSAL_IXP400_PMU_MAP_SIZE);    #endif    if (IX_PERFPROF_ACC_BUS_PMU_MODE_HALT == mode )    {        return (IX_PERFPROF_ACC_STATUS_BUS_PMU_MODE_ERROR);    }    status = ixPerfProfAccLock();    if (IX_PERFPROF_ACC_STATUS_SUCCESS != status)    {        return IX_PERFPROF_ACC_STATUS_ANOTHER_UTIL_IN_PROGRESS;    }    else    {        /* Store input parameters into a structure */        eventsPerCounter.counterMode = mode;        eventsPerCounter.counterEvent1 = pecEvent1;        eventsPerCounter.counterEvent2 = pecEvent2;        eventsPerCounter.counterEvent3 = pecEvent3;        eventsPerCounter.counterEvent4 = pecEvent4;        eventsPerCounter.counterEvent5 = pecEvent5;        eventsPerCounter.counterEvent6 = pecEvent6;        eventsPerCounter.counterEvent7 = pecEvent7;        /* Initialise 59 bit supporting counters */        for (PecCounter = 0; IX_PERFPROF_ACC_BUS_PMU_MAX_PECS > PecCounter; PecCounter++)        {            upper32BitCounter[PecCounter] = 0;        } /* End of for loop */        /* Bind interrupt handler to increment counter when an overflow occurs */        if (IX_SUCCESS != ixOsalIrqBind (	                      IX_OSAL_IXP400_AHB_PMU_IRQ_LVL,                              (IxOsalVoidFnVoidPtr)ixPerfProfAccBusPmuPecOverflowHdlr,                              NULL))        {            ixPerfProfAccUnlock();            return IX_PERFPROF_ACC_STATUS_FAIL;        }        else        {            /* Call setup function to setup Event Status Register */            status = ixPerfProfAccBusPmuSetup(eventsPerCounter);            if (IX_SUCCESS != status)            {                /* Unbind the interrupt */                ixOsalIrqUnbind (IX_OSAL_IXP400_AHB_PMU_IRQ_LVL);#ifdef __vxworks                IX_OSAL_MEM_UNMAP(esrVirtualAddress);                IX_OSAL_MEM_UNMAP(srVirtualAddress);#endif                ixPerfProfAccUnlock();                startFlag = FALSE;            }            else            {                startFlag = TRUE;            }        } /* End of if-else */        return status;    } /* End of if-else */} /* End of function ixPerfProfAccBusPmuStart *//** * * Function to check the validity of choices for PEC1 to PEC7 for North Mode * Return errors if choice/s are not valid, otherwise set Event Select Register * and mode to North * **/IxPerfProfAccStatusixPerfProfAccBusPmuNorthCheckAndSelect (IxPerfProfAccBusPmuModeEvents modeEvents){    /* Variable for event select register. Set to 0 initially */    UINT32 esrValue = 0;    /* Check if PEC1 selection is within range for North Mode */    if((modeEvents.counterEvent1 < IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_NPEA_GRANT_SELECT)||        (modeEvents.counterEvent1 > IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_NPEC_REQ_SELECT))    {        return IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC1_ERROR;    }    /* Event select for PEC1 */    SET_PMU_PEC(esrValue,PEC1,ixPerfProfAccBusPmuEventMap[modeEvents.counterEvent1]);    /* Check if PEC2 selection is within range for North Mode */    if((modeEvents.counterEvent2 < IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_NPEA_XFER_SELECT)||        (modeEvents.counterEvent2 > IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_NPEC_OWN_SELECT))    {        return IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC2_ERROR;    }    /* Event select for PEC2 */    SET_PMU_PEC(esrValue,PEC2,ixPerfProfAccBusPmuEventMap[modeEvents.counterEvent2]);    /* Check if PEC3 selection is within range for North Mode */    if((modeEvents.counterEvent3 < IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_NPEA_RETRY_SELECT)||        (modeEvents.counterEvent3 > IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_NPEC_WRITE_SELECT))    {        return IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC3_ERROR;    }    /* Event select for PEC3 */    SET_PMU_PEC(esrValue,PEC3,ixPerfProfAccBusPmuEventMap[modeEvents.counterEvent3]);    /* Check if PEC4 selection is within range for North Mode */    if((modeEvents.counterEvent4 < IX_PERFPROF_ACC_BUS_PMU_PEC4_NORTH_ABB_SPLIT_SELECT)||        (modeEvents.counterEvent4 > IX_PERFPROF_ACC_BUS_PMU_PEC4_NORTH_NPEC_READ_SELECT))    {        return IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC4_ERROR;    }    /* Event select for PEC4 */    SET_PMU_PEC(esrValue,PEC4,ixPerfProfAccBusPmuEventMap[modeEvents.counterEvent4]);    /* Check if PEC5 selection is within range for North Mode */    if((modeEvents.counterEvent5 < IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_GRANT_SELECT)||        (modeEvents.counterEvent5 > IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_READ_SELECT))    {        return IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC5_ERROR;    }    /* Event select for PEC5 */    SET_PMU_PEC(esrValue,PEC5,ixPerfProfAccBusPmuEventMap[modeEvents.counterEvent5]);    /* Check if PEC6 selection is within range for North Mode */    if((modeEvents.counterEvent6 < IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEC_GRANT_SELECT)||        (modeEvents.counterEvent6 > IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEC_READ_SELECT))    {        return IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC6_ERROR;    }    /* Event select for PEC6 */    SET_PMU_PEC(esrValue,PEC6,ixPerfProfAccBusPmuEventMap[modeEvents.counterEvent6]);    /* Check if PEC7 selection is within range for North Mode */    if(modeEvents.counterEvent7 != IX_PERFPROF_ACC_BUS_PMU_PEC7_CYCLE_COUNT_SELECT)    {        return IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC7_ERROR;    }    /* Event select for PEC7 */    SET_PMU_PEC(esrValue,PEC7,ixPerfProfAccBusPmuEventMap[modeEvents.counterEvent7]);    SET_PMU_MODE(esrValue, IX_PERFPROF_ACC_BUS_PMU_MODE_NORTH);    SET_PMU_ESR(esrValue);    return IX_PERFPROF_ACC_STATUS_SUCCESS;} /* end of ixPerfProfAccBusPmuNorthCheckAndSelect () *//** * * Function to check the validity of choices for PEC1 to PEC7 for South Mode * Return errors if choice/s are not valid, otherwise set Event Select Register * and mode to South * **/IxPerfProfAccStatusixPerfProfAccBusPmuSouthCheckAndSelect (IxPerfProfAccBusPmuModeEvents modeEvents){    /* Variable for event select register. Set to 0 initially */    UINT32 esrValue = 0;    /* Check if PEC1 selection is within range for South Mode */    if((modeEvents.counterEvent1 < IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_GSKT_GRANT_SELECT)||        (modeEvents.counterEvent1 > IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_APB_REQ_SELECT))    {        return IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC1_ERROR;    }    /* Event select for PEC1 */    SET_PMU_PEC(esrValue,PEC1,ixPerfProfAccBusPmuEventMap[modeEvents.counterEvent1]);    /* Check if PEC2 selection is within range for South Mode */    if((modeEvents.counterEvent2 < IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_GSKT_XFER_SELECT)||        (modeEvents.counterEvent2 > IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_APB_OWN_SELECT))    {        return IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC2_ERROR;    }    /* Event select for PEC2 */    SET_PMU_PEC(esrValue,PEC2,ixPerfProfAccBusPmuEventMap[modeEvents.counterEvent2]);    /* Check if PEC3 selection is within range for South Mode */    if((modeEvents.counterEvent3 < IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_GSKT_RETRY_SELECT)||        (modeEvents.counterEvent3 > IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_APB_WRITE_SELECT))    {        return IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC3_ERROR;    }    /* Event select for PEC3 */    SET_PMU_PEC(esrValue,PEC3,ixPerfProfAccBusPmuEventMap[modeEvents.counterEvent3]);    /* Check if PEC4 selection is within range for South Mode */    if((modeEvents.counterEvent4 < IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_PCI_SPLIT_SELECT)||        (modeEvents.counterEvent4 > IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_APB_READ_SELECT))    {        return IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC4_ERROR;    }    /* Event select for PEC4 */    SET_PMU_PEC(esrValue,PEC4,ixPerfProfAccBusPmuEventMap[modeEvents.counterEvent4]);    /* Check if PEC5 selection is within range for South Mode */    if((modeEvents.counterEvent5 < IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_ABB_GRANT_SELECT)||        (modeEvents.counterEvent5 > IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_BUS_IDLE_SELECT))    {        return IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC5_ERROR;    }    /* Event select for PEC5 */    SET_PMU_PEC(esrValue,PEC5,ixPerfProfAccBusPmuEventMap[modeEvents.counterEvent5]);    /* Check if PEC6 selection is within range for South Mode */    if((modeEvents.counterEvent6 < IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_PCI_GRANT_SELECT)||        (modeEvents.counterEvent6 > IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_BUS_WRITE_SELECT))    {        return IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC6_ERROR;    }    /* Event select for PEC6 */    SET_PMU_PEC(esrValue,PEC6,ixPerfProfAccBusPmuEventMap[modeEvents.counterEvent6]);    /* Check if PEC7 selection is within range for South Mode */    if((modeEvents.counterEvent7 < IX_PERFPROF_ACC_BUS_PMU_PEC7_SOUTH_APB_RETRY_SELECT)||        (modeEvents.counterEvent7 > IX_PERFPROF_ACC_BUS_PMU_PEC7_CYCLE_COUNT_SELECT))    {        return IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC7_ERROR;    }    /* Event select for PEC7 */    SET_PMU_PEC(esrValue,PEC7,ixPerfProfAccBusPmuEventMap[modeEvents.counterEvent7]);    SET_PMU_MODE(esrValue, IX_PERFPROF_ACC_BUS_PMU_MODE_SOUTH);    SET_PMU_ESR(esrValue);    return IX_PERFPROF_ACC_STATUS_SUCCESS;} /* end of ixPerfProfAccBusPmuSouthCheckAndSelect () *//** * * Function to check the validity of choices for PEC1 to PEC7 for Sdram Mode * Return errors if choice/s are not valid, otherwise set Event Select Register * and mode to Sdram * **/IxPerfProfAccStatusixPerfProfAccBusPmuSdramCheckAndSelect (IxPerfProfAccBusPmuModeEvents modeEvents){    /* Variable for event select register. Set to 0 initially */    UINT32 esrValue = 0;    /* Check if PEC1 selection is within range for Sdram Mode */    if((modeEvents.counterEvent1 < IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_0_HIT_SELECT)||

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -