/** * @file IxQMgrInit.c * * @author Intel Corporation * @date 30-Oct-2001 * * @brief: Provided initialization of the QMgr component and its subcomponents. * * * @par * IXP400 SW Release version 2.0 * * -- Copyright Notice -- * * @par * Copyright 2001-2005, Intel Corporation. * All rights reserved. * * @par * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the Intel Corporation nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * @par * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * @par * -- End of Copyright Notice -- */ /* * System defined include files. */ /* * User defined include files. */ #include "IxOsal.h" #include "IxQMgr.h" #include "IxQMgrQCfg_p.h" #include "IxQMgrDispatcher_p.h" #include "IxQMgrLog_p.h" #include "IxQMgrQAccess_p.h" #include "IxQMgrDefines_p.h" #include "IxQMgrAqmIf_p.h" /* * Set to true if initialized * N.B. global so integration/unit tests can reinitialize */ BOOL qMgrIsInitialized = FALSE; /* * Function definitions. */ IX_STATUS ixQMgrInit (void) { if (qMgrIsInitialized) { IX_QMGR_LOG0("ixQMgrInit: IxQMgr already initialised\n"); return IX_FAIL; } /* Initialise the QCfg component */ ixQMgrQCfgInit (); /* Initialise the Dispatcher component */ ixQMgrDispatcherInit (); /* Initialise the Access component */ ixQMgrQAccessInit (); /* Initialization complete */ qMgrIsInitialized = TRUE; return IX_SUCCESS; } IX_STATUS ixQMgrUnload (void) { if (!qMgrIsInitialized) { return IX_FAIL; } /* Uninitialise the QCfg component */ ixQMgrQCfgUninit (); /* Uninitialization complete */ qMgrIsInitialized = FALSE; return IX_SUCCESS; } void ixQMgrShow (void) { IxQMgrQCfgStats *qCfgStats = NULL; IxQMgrDispatcherStats *dispatcherStats = NULL; int i; UINT32 lowIntRegRead, upIntRegRead; qCfgStats = ixQMgrQCfgStatsGet (); dispatcherStats = ixQMgrDispatcherStatsGet (); ixQMgrAqmIfQInterruptRegRead (IX_QMGR_QUELOW_GROUP, &lowIntRegRead); ixQMgrAqmIfQInterruptRegRead (IX_QMGR_QUEUPP_GROUP, &upIntRegRead); printf("Generic Stats........\n"); printf("=====================\n"); printf("Loop Run Count..........%u\n",dispatcherStats->loopRunCnt); printf("Watermark set count.....%d\n", qCfgStats->wmSetCnt); printf("===========================================\n"); printf("On the fly Interrupt Register Stats........\n"); printf("===========================================\n"); printf("Lower Interrupt Register............0x%08x\n",lowIntRegRead); printf("Upper Interrupt Register............0x%08x\n",upIntRegRead); printf("==============================================\n"); printf("Queue Specific Stats........\n"); printf("============================\n"); for (i=0; iqStats[qId].qName); printf(" Size in words............ %u\n", qCfgStats->qStats[qId].qSizeInWords); printf(" Entry size in words...... %u\n", qCfgStats->qStats[qId].qEntrySizeInWords); printf(" Nearly empty watermark... %u\n", qCfgStats->qStats[qId].ne); printf(" Nearly full watermark.... %u\n", qCfgStats->qStats[qId].nf); printf(" Number of full entries... %u\n", qCfgStats->qStats[qId].numEntries); printf(" Sram base address........ 0x%X\n", qCfgStats->qStats[qId].baseAddress); printf(" Read pointer............. 0x%X\n", qCfgStats->qStats[qId].readPtr); printf(" Write pointer............ 0x%X\n", qCfgStats->qStats[qId].writePtr); #ifndef NDEBUG if (dispatcherStats->queueStats[qId].notificationEnabled) { char *localEvent = "none ????"; switch (dispatcherStats->queueStats[qId].srcSel) { case IX_QMGR_Q_SOURCE_ID_E: localEvent = "Empty"; break; case IX_QMGR_Q_SOURCE_ID_NE: localEvent = "Nearly Empty"; break; case IX_QMGR_Q_SOURCE_ID_NF: localEvent = "Nearly Full"; break; case IX_QMGR_Q_SOURCE_ID_F: localEvent = "Full"; break; case IX_QMGR_Q_SOURCE_ID_NOT_E: localEvent = "Not Empty"; break; case IX_QMGR_Q_SOURCE_ID_NOT_NE: localEvent = "Not Nearly Empty"; break; case IX_QMGR_Q_SOURCE_ID_NOT_NF: localEvent = "Not Nearly Full"; break; case IX_QMGR_Q_SOURCE_ID_NOT_F: localEvent = "Not Full"; break; default : break; } printf(" Notifications localEvent...... %s\n", localEvent); } else { printf(" Notifications............ not enabled\n"); } printf(" IxQMgrDispatcher Stats\n"); printf(" Callback count................%d\n", dispatcherStats->queueStats[qId].callbackCnt); printf(" Priority change count.........%d\n", dispatcherStats->queueStats[qId].priorityChangeCnt); printf(" Interrupt no callback count...%d\n", dispatcherStats->queueStats[qId].intNoCallbackCnt); printf(" Interrupt lost callback count...%d\n", dispatcherStats->queueStats[qId].intLostCallbackCnt); #endif return IX_SUCCESS; }