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

📄 ixqmgrinit.c

📁 有关ARM开发板上的IXP400网络驱动程序的源码以。
💻 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 + -