📄 ixparityenaccmain.c
字号:
"ixParityENAccParityDetectionConfigure(): " "EBC Configuration of CS6 failed\n",0,0,0,0,0,0); ixReturnStatus = IX_FAIL; } /* end of if */#endif /* end of #ifndef NDEBUG */ } /* end of if */ if ((hwParityConfig->ebcConfig.ebcCs7Enabled != ixParityENAccParityConfigStatus.ebcConfig.ebcCs7Enabled) || ((hwParityConfig->ebcConfig.parityOddEven != ixParityENAccParityConfigStatus.ebcConfig.parityOddEven) && (hwParityConfig->ebcConfig.ebcCs7Enabled == IX_PARITYENACC_ENABLE))) { ixEbcPDCfg.ebcCsExtSource = IXP400_PARITYENACC_PE_EBC_CS; ixEbcPDCfg.ebcInOrOutbound.ebcCsEnabled = hwParityConfig->ebcConfig.ebcCs7Enabled; ixEbcPDCfg.ebcCsId = IXP400_PARITYENACC_PE_EBC_CHIPSEL7; ixEbcPDCfg.parityOddEven = hwParityConfig->ebcConfig.parityOddEven; if (IX_SUCCESS == ixParityENAccEbcPEDetectionConfigure(ixEbcPDCfg)) { ixParityENAccParityConfigStatus.ebcConfig.ebcCs7Enabled = hwParityConfig->ebcConfig.ebcCs7Enabled; ixParityENAccParityConfigStatus.ebcConfig.parityOddEven = hwParityConfig->ebcConfig.parityOddEven; } /* else/end of if */#ifndef NDEBUG else { IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixParityENAccParityDetectionConfigure(): " "EBC Configuration of CS7 failed\n",0,0,0,0,0,0); ixReturnStatus = IX_FAIL; } /* end of if */#endif /* end of #ifndef NDEBUG */ } /* end of if */ if ((hwParityConfig->ebcConfig.ebcExtMstEnabled != ixParityENAccParityConfigStatus.ebcConfig.ebcExtMstEnabled) || ((hwParityConfig->ebcConfig.parityOddEven != ixParityENAccParityConfigStatus.ebcConfig.parityOddEven) && (hwParityConfig->ebcConfig.ebcExtMstEnabled == IX_PARITYENACC_ENABLE))) { ixEbcPDCfg.ebcCsExtSource = IXP400_PARITYENACC_PE_EBC_EXTMST; ixEbcPDCfg.ebcInOrOutbound.ebcExtMstEnabled = hwParityConfig->ebcConfig.ebcExtMstEnabled; ixEbcPDCfg.parityOddEven = hwParityConfig->ebcConfig.parityOddEven; if (IX_SUCCESS == ixParityENAccEbcPEDetectionConfigure(ixEbcPDCfg)) { ixParityENAccParityConfigStatus.ebcConfig.ebcExtMstEnabled = hwParityConfig->ebcConfig.ebcExtMstEnabled; ixParityENAccParityConfigStatus.ebcConfig.parityOddEven = hwParityConfig->ebcConfig.parityOddEven; } /* else/end of if */#ifndef NDEBUG else { IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixParityENAccParityDetectionConfigure(): " "EBC Configuration of EXT failed\n",0,0,0,0,0,0); ixReturnStatus = IX_FAIL; } /* end of if */#endif /* end of #ifndef NDEBUG */ } /* end of if */ if (IX_FAIL == ixReturnStatus) { IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixParityENAccParityDetectionConfigure(): " "One/More of hardware block's Configuration failed\n", 0,0,0,0,0,0); } /* end of if */ return IX_PARITYENACC_SUCCESS;} /* end of ixParityENAccParityDetectionConfigure() function */PUBLIC IxParityENAccStatusixParityENAccParityDetectionQuery( IxParityENAccHWParityConfig * const hwParityConfig){ /* Not initialised before? */ if (FALSE == ixParityENAccInitStatus) { return IX_PARITYENACC_NOT_INITIALISED; } /* end of if */ /* Verify the parameter reference */ if ((IxParityENAccHWParityConfig *)NULL == hwParityConfig) { return IX_PARITYENACC_INVALID_PARAMETERS; } /* end of if */ /* Return the current config status of all hardware blocks */ memcpy((void *)hwParityConfig, (void *)&ixParityENAccParityConfigStatus, sizeof(IxParityENAccHWParityConfig)); return IX_PARITYENACC_SUCCESS;} /* end of ixParityENAccParityDetectionQuery() function */PUBLIC IxParityENAccStatusixParityENAccParityErrorContextGet( IxParityENAccParityErrorContextMessage * const pecMessage){ /* Local Variables */ IxParityENAccIcParityInterruptStatus ixIcParityInterruptStatus = { FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE }; IxParityENAccMcuPEParityErrorContext ixMcuPECMsg; IxParityENAccNpePEParityErrorContext ixNpePECMsg; IxParityENAccSwcpPEParityErrorContext ixSwcpPECMsg; IxParityENAccAqmPEParityErrorContext ixAqmPECMsg; IxParityENAccPbcPEParityErrorContext ixPbcPECMsg; IxParityENAccEbcPEParityErrorContext ixEbcPECMsg; IxParityENAccPmuEAHBErrorTransaction ixPmuAhbTransactionStatus; /* Not initialised before? */ if (FALSE == ixParityENAccInitStatus) { return IX_PARITYENACC_NOT_INITIALISED; } /* end of if */ if ((IxParityENAccParityErrorContextMessage *) NULL == pecMessage) { return IX_PARITYENACC_INVALID_PARAMETERS; } /* end of if */ /* Get the pending parity interrupts status */ if (IX_SUCCESS != ixParityENAccIcInterruptStatusGet( &ixIcParityInterruptStatus)) { return IX_PARITYENACC_OPERATION_FAILED; } /* end of if */ /* * Process interrupts as per the following priority * * 0 - MCU (Multi, Single-bit, Overflow in that order) * 1 - NPE-A (IMem, DMem and Ext Error in that order) * 2 - NPE-B (IMem, DMem and Ext Error in that order) * 3 - NPE-C (IMem, DMem and Ext Error in that order) * 4 - SWCP * 5 - QM * 6 - PCI (Initiator Rd, Target Wr and Initiator Wr in that order) * 7 - EXP (Inbound Wr, Outbound Rd in that order) */ if (TRUE == ixIcParityInterruptStatus.mcuParityInterrupt) { if (IX_SUCCESS != ixParityENAccMcuPEParityErrorContextFetch(&ixMcuPECMsg)) { return IX_PARITYENACC_OPERATION_FAILED; } /* end of if */ /* No Parity! Might have been cleared by data/prefetch abort * Exception Handler before this function is invoked */ if (IXP400_PARITYENACC_PE_MCU_NOPARITY == ixMcuPECMsg.mcuParitySource) { return IX_PARITYENACC_NO_PARITY; } /* end of if */ pecMessage->pecParitySource = ixMcuPECMsg.mcuParitySource; pecMessage->pecAccessType = ixMcuPECMsg.mcuAccessType; pecMessage->pecRequester = ixMcuPECMsg.mcuRequester; pecMessage->pecAddress = ixMcuPECMsg.mcuParityAddress; pecMessage->pecData = ixMcuPECMsg.mcuParityData; /* Get Last Erroneous AHB Transaction Master & Slave details */ if (IX_SUCCESS != ixParityENAccPmuEAHBTransactionStatus ( &ixPmuAhbTransactionStatus)) { return IX_PARITYENACC_OPERATION_FAILED; } /* end of if */ pecMessage->ahbErrorTran.ahbErrorMaster = ixPmuAhbTransactionStatus.ahbErrorMaster; pecMessage->ahbErrorTran.ahbErrorSlave = ixPmuAhbTransactionStatus.ahbErrorSlave; /* Increment statistics */ switch (pecMessage->pecParitySource) { case IX_PARITYENACC_MCU_SBIT: { ixParityENAccPEParityErrorStats.mcuStats.parityErrorsSingleBit++; break; } /* end of case MCU SBIT */ case IX_PARITYENACC_MCU_MBIT: { ixParityENAccPEParityErrorStats.mcuStats.parityErrorsMultiBit++; break; } /* end of case MCU MBIT */ case IX_PARITYENACC_MCU_OVERFLOW: { ixParityENAccPEParityErrorStats.mcuStats.parityErrorsOverflow++; break; } /* end of case MCU OVERFLOW */ default: { IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixParityENAccParityErrorContextGet(): " "Invalid Parity Source: %0x\n", pecMessage->pecParitySource, 0,0,0,0,0); return IX_PARITYENACC_OPERATION_FAILED; } /* end of case default */ } /* end of switch */ return IX_PARITYENACC_SUCCESS; } /* end of if (TRUE == ixIcParityInterruptStatus.mcuParityInterrupt) */ if (TRUE == ixIcParityInterruptStatus.npeAParityInterrupt) { if (IX_SUCCESS != ixParityENAccNpePEParityErrorContextFetch ( IXP400_PARITYENACC_PE_NPE_A, &ixNpePECMsg)) { return IX_PARITYENACC_OPERATION_FAILED; } /* end of if */ pecMessage->pecParitySource = (IXP400_PARITYENACC_PE_NPE_IMEM == ixNpePECMsg.npeParitySource) ? IX_PARITYENACC_NPE_A_IMEM : (IXP400_PARITYENACC_PE_NPE_DMEM == ixNpePECMsg.npeParitySource) ? IX_PARITYENACC_NPE_A_DMEM : IX_PARITYENACC_NPE_A_EXT; pecMessage->pecAccessType = ixNpePECMsg.npeAccessType; /* Increment statistics */ switch (pecMessage->pecParitySource) { case IX_PARITYENACC_NPE_A_IMEM: { ixParityENAccPEParityErrorStats.npeStats.parityErrorsIMem++; break; } /* end of case NPE - A IMEM */ case IX_PARITYENACC_NPE_A_DMEM: { ixParityENAccPEParityErrorStats.npeStats.parityErrorsDMem++; break; } /* end of case NPE - A DMEM */ case IX_PARITYENACC_NPE_A_EXT: { ixParityENAccPEParityErrorStats.npeStats.parityErrorsExternal++; break; } /* end of case NPE - A EXT */ default: { IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixParityENAccParityErrorContextGet(): " "Invalid Parity Source: %0x\n", pecMessage->pecParitySource, 0,0,0,0,0); return IX_PARITYENACC_OPERATION_FAILED; } /* end of case default */ } /* end of switch */ return IX_PARITYENACC_SUCCESS; } /* end of if (TRUE == ixIcParityInterruptStatus.npeAParityInterrupt) */ if (TRUE == ixIcParityInterruptStatus.npeBParityInterrupt) { if (IX_SUCCESS != ixParityENAccNpePEParityErrorContextFetch ( IXP400_PARITYENACC_PE_NPE_B, &ixNpePECMsg)) { return IX_PARITYENACC_OPERATION_FAILED; } /* end of if */ pecMessage->pecParitySource = (IXP400_PARITYENACC_PE_NPE_IMEM == ixNpePECMsg.npeParitySource) ? IX_PARITYENACC_NPE_B_IMEM : (IXP400_PARITYENACC_PE_NPE_DMEM == ixNpePECMsg.npeParitySource) ? IX_PARITYENACC_NPE_B_DMEM : IX_PARITYENACC_NPE_B_EXT; pecMessage->pecAccessType = ixNpePECMsg.npeAccessType; /* Increment statistics */ switch (pecMessage->pecParitySource) { case IX_PARITYENACC_NPE_B_IMEM: { ixParityENAccPEParityErrorStats.npeStats.parityErrorsIMem++; break; } /* end of case NPE - B IMEM */ case IX_PARITYENACC_NPE_B_DMEM: { ixParityENAccPEParityErrorStats.npeStats.parityErrorsDMem++; break; } /* end of case NPE - B DMEM */ case IX_PARITYENACC_NPE_B_EXT: { ixParityENAccPEParityErrorStats.npeStats.parityErrorsExternal++; break; } /* end of case NPE - B EXT */ default: { IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixParityENAccParityErrorContextGet(): " "Invalid Parity Source: %0x\n", pecMessage->pecParitySource, 0,0,0,0,0); return IX_PARITYENACC_OPERATION_FAILED; } /* end of case default */ } /* end of switch */ return IX_PARITYENACC_SUCCESS; } /* end of if (TRUE == ixIcParityInterruptStatus.npeBParityInterrupt) */ if (TRUE == ixIcParityInterruptStatus.npeCParityInterrupt) { if (IX_SUCCESS != ixParityENAccNpePEParityErrorContextFetch ( IXP400_PARITYENACC_PE_NPE_C, &ixNpePECMsg)) { return IX_PARITYENACC_OPERATION_FAILED; } /* end of if */ pecMessage->pecParitySource = (IXP400_PARITYENACC_PE_NPE_IMEM == ixNpePECMsg.npeParitySource) ? IX_PARITYENACC_NPE_C_IMEM : (IXP400_PARITYENACC_PE_NPE_DMEM == ixNpePECMsg.npeParitySource) ? IX_PARITYENACC_NPE_C_DMEM : IX_PARITYENACC_NPE_C_EXT; pecMessage->pecAccessType = ixNpePECMsg.npeAccessType; /* Increment statistics */ switch (pecMessage->pecParitySource) { case IX_PARITYENACC_NPE_C_IMEM: { ixParityENAccPEParityErrorStats.npeStats.parityErrorsIMem++; break; } /* end of case NPE - C IMEM */ case IX_PARITYENACC_NPE_C_DMEM: { ixParityENAccPEParityErrorStats.npeStats.parityErrorsDMem++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -