📄 ixparityenaccmain.c
字号:
} /* end of ixNpePEInternalCallback() function */voidixAqmPEInternalCallback (UINT32 irqNum, IxParityENAccPEIsr isrAddr){ /* Output the AQM interrupt information for debug purpose */ IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_USER, IX_OSAL_LOG_DEV_STDOUT, "ixAqmPEInternalCallback(): AQM interrupt detected\n" "IRQ #:%x ISR Address:%p\n", irqNum, (UINT32)isrAddr, 0,0,0,0); /* Signal the client application of the interrupt condition */ ixParityENAccInvokeClientCallback(irqNum);} /* end of ixAqmPEInternalCallback() function */void ixEbcPEInternalCallback (UINT32 irqNum, IxParityENAccPEIsr isrAddr){ /* Output the EBC interrupt information for debug purpose */ IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_USER, IX_OSAL_LOG_DEV_STDOUT, "ixEbcPEInternalCallback(): EBCs interrupt detected\n" "IRQ #:%x ISR Address:%p\n", irqNum, (UINT32)isrAddr, 0,0,0,0); /* Signal the client application of the interrupt condition */ ixParityENAccInvokeClientCallback(irqNum);} /* end of ixEbcPEInternalCallback() function */void ixPbcPEInternalCallback (UINT32 irqNum, IxParityENAccPEIsr isrAddr){ /* Output the PBC interrupt information for debug purpose */ IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_USER, IX_OSAL_LOG_DEV_STDOUT, "ixPbcPEInternalCallback(): PBC interrupt detected\n" "IRQ #:%x ISR Address:%p\n", irqNum, (UINT32)isrAddr, 0,0,0,0); /* Signal the client application of the interrupt condition */ ixParityENAccInvokeClientCallback(irqNum);} /* end of ixPbcPEInternalCallback() function */void ixSwcpPEInternalCallback (UINT32 irqNum, IxParityENAccPEIsr isrAddr){ /* Output the SWCP interrupt information for debug purpose */ IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_USER, IX_OSAL_LOG_DEV_STDOUT, "ixSwcpPEInternalCallback(): SWCP interrupt detected\n" "IRQ #:%x ISR Address:%p\n", irqNum, (UINT32)isrAddr, 0,0,0,0); /* Signal the client application of the interrupt condition */ if (IX_PARITYENACC_ENABLE == ixParityENAccParityConfigStatus.swcpEnabled) { ixParityENAccInvokeClientCallback(irqNum); } /* end of if */} /* end of ixSwcpPEInternalCallback() function *//* * -------------------------------------------------------------------------- * * Public API definitions * * -------------------------------------------------------------------------- * */PUBLIC IxParityENAccStatusixParityENAccInit (void){ /* Initialised before? */ if (TRUE == ixParityENAccInitStatus) { IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "Already Initialised\n", 0,0,0,0,0,0); return IX_PARITYENACC_ALREADY_INITIALISED; } /* end of if */ /* Initialise sub modules */ if (IX_SUCCESS != ixParityENAccConfigInit()) { IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "Config Init Failed\n", 0,0,0,0,0,0); return IX_PARITYENACC_OPERATION_FAILED; } /* end of if */ /* Initialise sub modules */ if (IX_SUCCESS != ixParityENAccModulesInit()) { IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "Modules Init Failed\n", 0,0,0,0,0,0); return IX_PARITYENACC_OPERATION_FAILED; } /* end of if */ ixParityENAccInitStatus = TRUE; return IX_PARITYENACC_SUCCESS;} /* end of ixParityENAccInit() function */PUBLIC IxParityENAccStatusixParityENAccCallbackRegister (IxParityENAccCallback parityErrNfyCallback){ IxParityENAccParityConfigStatus nullCfgStatus; /* Not initialised before? */ if (FALSE == ixParityENAccInitStatus) { return IX_PARITYENACC_NOT_INITIALISED; } /* end of if */ /* Verify the callback */ if ((IxParityENAccCallback)NULL == parityErrNfyCallback) { return IX_PARITYENACC_INVALID_PARAMETERS; } /* end of if */ /* Clear off the contents to zeros */ memset((void *) &nullCfgStatus, 0, sizeof(IxParityENAccParityConfigStatus)); /* * Verify for the parity error detection disable state * after excluding the parity type. */ nullCfgStatus.npeAConfig.parityOddEven = ixParityENAccParityConfigStatus.npeAConfig.parityOddEven; nullCfgStatus.npeBConfig.parityOddEven = ixParityENAccParityConfigStatus.npeBConfig.parityOddEven; nullCfgStatus.npeCConfig.parityOddEven = ixParityENAccParityConfigStatus.npeCConfig.parityOddEven; nullCfgStatus.ebcConfig.parityOddEven = ixParityENAccParityConfigStatus.ebcConfig.parityOddEven; /* Parity detection disabled on all hardware modules? */ if (0 != memcmp((const void *)&nullCfgStatus, (const void *)&ixParityENAccParityConfigStatus, sizeof(ixParityENAccParityConfigStatus))) { return IX_PARITYENACC_OPERATION_FAILED; } /* end of if */#ifndef NDEBUG if ((IxParityENAccCallback)NULL == ixParityENAccClientCb) { IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_USER, IX_OSAL_LOG_DEV_STDOUT, "ixParityENAccCallbackRegister(): New Callback:%p\n", (UINT32)parityErrNfyCallback, 0,0,0,0,0); } else { IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_USER, IX_OSAL_LOG_DEV_STDOUT, "ixParityENAccCallbackRegister(): Re-registered Callback:%p\n", (UINT32)parityErrNfyCallback, 0,0,0,0,0); } /* end of if */#endif /* end of #ifndef NDEBUG */ ixParityENAccClientCb = parityErrNfyCallback; return IX_PARITYENACC_SUCCESS;} /* end of ixParityENAccCallbackRegister() function */PUBLIC IxParityENAccStatusixParityENAccParityDetectionConfigure ( const IxParityENAccHWParityConfig *hwParityConfig){ /* Local Variables */ IxParityENAccNpePEConfigOption ixNpePDCfg; IxParityENAccMcuPEConfigOption ixMcuPDCfg; IxParityENAccAqmPEConfigOption ixAqmPDCfg; IxParityENAccEbcPEConfigOption ixEbcPDCfg; IxParityENAccSwcpPEConfigOption ixSwcpPDCfg; BOOL ixPbcPrevInitTgtDisableCurrInitOrTgtEnable = FALSE; BOOL ixPbcPrevInitTgtEnableCurrInitAndTgtDisable = FALSE; BOOL ixPbcPrevInitEnableCurrInitDisable = FALSE; BOOL ixPbcPrevTgtEnableCurrTgtDisable = FALSE; IX_STATUS ixReturnStatus = IX_SUCCESS; /* Not initialised before? */ if (FALSE == ixParityENAccInitStatus) { return IX_PARITYENACC_NOT_INITIALISED; } /* end of if */ if ((IxParityENAccHWParityConfig *) NULL == hwParityConfig) { return IX_PARITYENACC_INVALID_PARAMETERS; } /* end of if */ /* * Change in parity type on NPE-A/B/C? */ if (((hwParityConfig->npeAConfig.ideEnabled != ixParityENAccParityConfigStatus.npeAConfig.ideEnabled) || ((hwParityConfig->npeAConfig.parityOddEven != ixParityENAccParityConfigStatus.npeAConfig.parityOddEven) && (hwParityConfig->npeAConfig.ideEnabled == IX_PARITYENACC_ENABLE))) && (FALSE == IXP400_PARITYENACC_VAL_BIT_CHECK(ixParityENAccFusedModules, IXP400_PARITYENACC_FUSED_MODULE_NPEA))) { ixNpePDCfg.ideEnabled = hwParityConfig->npeAConfig.ideEnabled; ixNpePDCfg.parityOddEven = hwParityConfig->npeAConfig.parityOddEven; if (IX_SUCCESS == ixParityENAccNpePEDetectionConfigure( IXP400_PARITYENACC_PE_NPE_A,ixNpePDCfg)) { ixParityENAccParityConfigStatus.npeAConfig.ideEnabled = hwParityConfig->npeAConfig.ideEnabled; ixParityENAccParityConfigStatus.npeAConfig.parityOddEven = hwParityConfig->npeAConfig.parityOddEven; } /* end/else of if */#ifndef NDEBUG else { IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixParityENAccParityDetectionConfigure(): " "NPE-A Configuration failed\n",0,0,0,0,0,0); ixReturnStatus = IX_FAIL; } /* end of if */#endif /* end of #ifndef NDEBUG */ } /* end of if */ if (((hwParityConfig->npeBConfig.ideEnabled != ixParityENAccParityConfigStatus.npeBConfig.ideEnabled) || ((hwParityConfig->npeBConfig.parityOddEven != ixParityENAccParityConfigStatus.npeBConfig.parityOddEven) && (hwParityConfig->npeBConfig.ideEnabled == IX_PARITYENACC_ENABLE))) && (FALSE == IXP400_PARITYENACC_VAL_BIT_CHECK(ixParityENAccFusedModules, IXP400_PARITYENACC_FUSED_MODULE_NPEB))) { ixNpePDCfg.ideEnabled = hwParityConfig->npeBConfig.ideEnabled; ixNpePDCfg.parityOddEven = hwParityConfig->npeBConfig.parityOddEven; if (IX_SUCCESS == ixParityENAccNpePEDetectionConfigure( IXP400_PARITYENACC_PE_NPE_B,ixNpePDCfg)) { ixParityENAccParityConfigStatus.npeBConfig.ideEnabled = hwParityConfig->npeBConfig.ideEnabled; ixParityENAccParityConfigStatus.npeBConfig.parityOddEven = hwParityConfig->npeBConfig.parityOddEven; } /* end/else of if */#ifndef NDEBUG else { IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixParityENAccParityDetectionConfigure(): " "NPE-B Configuration failed\n",0,0,0,0,0,0); ixReturnStatus = IX_FAIL; } /* end of if */#endif /* end of #ifndef NDEBUG */ } /* end of if */ if (((hwParityConfig->npeCConfig.ideEnabled != ixParityENAccParityConfigStatus.npeCConfig.ideEnabled) || ((hwParityConfig->npeCConfig.parityOddEven != ixParityENAccParityConfigStatus.npeCConfig.parityOddEven) && (hwParityConfig->npeCConfig.ideEnabled == IX_PARITYENACC_ENABLE))) && (FALSE == IXP400_PARITYENACC_VAL_BIT_CHECK(ixParityENAccFusedModules, IXP400_PARITYENACC_FUSED_MODULE_NPEC))) { ixNpePDCfg.ideEnabled = hwParityConfig->npeCConfig.ideEnabled; ixNpePDCfg.parityOddEven = hwParityConfig->npeCConfig.parityOddEven; if (IX_SUCCESS == ixParityENAccNpePEDetectionConfigure( IXP400_PARITYENACC_PE_NPE_C, ixNpePDCfg)) { ixParityENAccParityConfigStatus.npeCConfig.ideEnabled = hwParityConfig->npeCConfig.ideEnabled; ixParityENAccParityConfigStatus.npeCConfig.parityOddEven = hwParityConfig->npeCConfig.parityOddEven; } /* else/end of if */#ifndef NDEBUG else { IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixParityENAccParityDetectionConfigure(): " "NPE-C Configuration failed\n",0,0,0,0,0,0); ixReturnStatus = IX_FAIL; } /* end of if */#endif /* end of #ifndef NDEBUG */ } /* end of if */ /* * Change in configuration of MCU ECC? */ if (((hwParityConfig->mcuConfig.singlebitDetectEnabled != ixParityENAccParityConfigStatus.mcuConfig.singlebitDetectEnabled) || (hwParityConfig->mcuConfig.singlebitCorrectionEnabled != ixParityENAccParityConfigStatus.mcuConfig.singlebitCorrectionEnabled) || (hwParityConfig->mcuConfig.multibitDetectionEnabled != ixParityENAccParityConfigStatus.mcuConfig.multibitDetectionEnabled)) && (FALSE == IXP400_PARITYENACC_VAL_BIT_CHECK(ixParityENAccFusedModules, IXP400_PARITYENACC_FUSED_MODULE_MCU_ECC))) { ixMcuPDCfg.singlebitDetectEnabled = hwParityConfig->mcuConfig.singlebitDetectEnabled; ixMcuPDCfg.singlebitCorrectionEnabled = hwParityConfig->mcuConfig.singlebitCorrectionEnabled; ixMcuPDCfg.multibitDetectionEnabled = hwParityConfig->mcuConfig.multibitDetectionEnabled; if (IX_SUCCESS == ixParityENAccMcuPEDetectionConfigure(ixMcuPDCfg)) { ixParityENAccParityConfigStatus.mcuConfig.singlebitDetectEnabled = hwParityConfig->mcuConfig.singlebitDetectEnabled; ixParityENAccParityConfigStatus.mcuConfig.singlebitCorrectionEnabled = hwParityConfig->mcuConfig.singlebitCorrectionEnabled; ixParityENAccParityConfigStatus.mcuConfig.multibitDetectionEnabled = hwParityConfig->mcuConfig.multibitDetectionEnabled; } /* end/else of if */#ifndef NDEBUG else { IXP400_PARITYENACC_MSGLOG(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixParityENAccParityDetectionConfigure(): " "MCU ECC Configuration failed\n",0,0,0,0,0,0); ixReturnStatus = IX_FAIL; } /* end of if */#endif /* end of #ifndef NDEBUG */ } /* end of if */ /* * Change in configuration of SWCP? */ if (hwParityConfig->swcpEnabled != ixParityENAccParityConfigStatus.swcpEnabled) { ixSwcpPDCfg = hwParityConfig->swcpEnabled; if (IX_SUCCESS == ixParityENAccSwcpPEDetectionConfigure(ixSwcpPDCfg)) { ixParityENAccParityConfigStatus.swcpEnabled = hwParityConfig->swcpEnabled; } /* end/else of if */#ifndef NDEBUG else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -