📄 ixqmgrinit.c
字号:
/** * @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.1 * * -- Copyright Notice -- * * @par * Copyright (c) 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_STATUSixQMgrInit (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_STATUSixQMgrUnload (void){
if (!qMgrIsInitialized) {
return IX_FAIL; } /* Uninitialise the QCfg component */ ixQMgrQCfgUninit (); /* Uninitialization complete */ qMgrIsInitialized = FALSE; return IX_SUCCESS;}voidixQMgrShow (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; i<IX_QMGR_MAX_NUM_QUEUES; i++) { if (ixQMgrQIsConfigured(i)) { ixQMgrQShow(i); } } printf("============================\n");}IX_STATUSixQMgrQShow (IxQMgrQId qId){ IxQMgrQCfgStats *qCfgStats = NULL; IxQMgrDispatcherStats *dispatcherStats = NULL; if (!ixQMgrQIsConfigured(qId)) { return IX_QMGR_Q_NOT_CONFIGURED; } dispatcherStats = ixQMgrDispatcherStatsGet (); qCfgStats = ixQMgrQCfgQStatsGet (qId); printf("QId %d\n", qId); printf("======\n"); printf(" IxQMgrQCfg Stats\n"); printf(" Name..................... \"%s\"\n", qCfgStats->qStats[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;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -