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

📄 ixethacccodeletmain.c

📁 intel IXP400系列cpu(2.3版)的库文件
💻 C
📖 第 1 页 / 共 4 页
字号:
     * System initialisation done. Now initialise Access components.      *     ***********************************************************************/    /* Initialise Queue Manager */    printf("Initialising Queue Manager...\n");    if (ixQMgrInit() != IX_SUCCESS)    {	printf("CodeletMain: Error initialising queue manager!\n");	return (IX_FAIL);    }    /* Start the Queue Manager dispatcher */       if(ixEthAccCodeletDispatcherStart(IX_ETH_CODELET_QMGR_DISPATCH_MODE)        != IX_SUCCESS)    {	printf("CodeletMain: Error starting queue manager dispatch loop!\n");	return (IX_FAIL);    }    /* Initialise NPE Message handler */    printf("\nStarting NPE message handler...\n");    if(ixNpeMhInitialize(IX_NPEMH_NPEINTERRUPTS_YES) != IX_SUCCESS)    {	printf("CodeletMain: Error initialising NPE Message handler!\n");	return (IX_FAIL);    }    /* Initialise NPEs firmware */    printf ("Initialising NPEs...\n");    if (ixEthAccCodeletHardwareExists[IX_ETH_PORT_1])    {        if ((operationType == IX_ETHACC_CODELET_BRIDGE_WIFI) && (inPort == IX_ETH_PORT_1))        {            printf("CodeletMain: the 802.3 <=> 802.11 header conversion image is loaded on NPE B\n");            ETH_NPEB_IMAGEID = IX_NPEDL_NPEIMAGE_NPEB_ETH_SPAN_VLAN_QOS_HDR_CONV_EXTMIB;        }	if (IX_SUCCESS != ixNpeDlNpeInitAndStart(ETH_NPEB_IMAGEID))        {	    printf ("CodeletMain: Error initialising and starting NPE B!\n");	    return (IX_FAIL);	}    }    if (ixEthAccCodeletHardwareExists[IX_ETH_PORT_2])    {        if ((operationType == IX_ETHACC_CODELET_BRIDGE_WIFI) && (inPort == IX_ETH_PORT_2))        {            printf("CodeletMain: the 802.3 <=> 802.11 header conversion image is loaded on NPE C\n");            ETH_NPEC_IMAGEID = IX_NPEDL_NPEIMAGE_NPEC_ETH_SPAN_VLAN_QOS_HDR_CONV_EXTMIB;        }	if (IX_SUCCESS != ixNpeDlNpeInitAndStart(ETH_NPEC_IMAGEID))        {	    printf ("CodeletMain: Error initialising and starting NPE C!\n");	    return (IX_FAIL);	}    }#ifdef __ixp46X    if (ixEthAccCodeletHardwareExists[IX_ETH_PORT_3])    {        if ((operationType == IX_ETHACC_CODELET_BRIDGE_WIFI) && (inPort == IX_ETH_PORT_3))        {            printf("CodeletMain: the 802.3 <=> 802.11 header conversion image is loaded on NPE A\n");            ETH_NPEA_IMAGEID = IX_NPEDL_NPEIMAGE_NPEA_ETH_SPAN_VLAN_QOS_HDR_CONV_EXTMIB;        }	if (IX_SUCCESS != ixNpeDlNpeInitAndStart(ETH_NPEA_IMAGEID))        {	    printf ("CodeletMain: Error initialising and starting NPE A!\n");	    return (IX_FAIL);	}    }#endif    printf ("Initialising Access Layers\n");    /* Enable QoS on ethDB. This has to be done before ethAcc initialisation */    if (operationType == IX_ETHACC_CODELET_BRIDGE_QOS)    {	printf("Enabling QoS\n");        if (IX_ETH_DB_SUCCESS != ixEthDBInit())	{	    printf ("CodeletMain: Error initialising EthDB\n");	    return (IX_FAIL);	}	(void)ixEthDBPortInit(inPort);        if (IX_ETH_DB_SUCCESS != ixEthDBFeatureEnable(inPort, 						      IX_ETH_DB_VLAN_QOS, 						      TRUE))	{            printf("CodeletMain: Error enabling QoS on port %d\n",inPort);	    return (IX_FAIL);        }    }    /* initialise ethAcc : QoS, if needed is already configured */    if (ixEthAccInit() != IX_ETH_ACC_SUCCESS)    {	printf("CodeletMain: Error initialising Ethernet access driver!\n");	return (IX_FAIL);    }    /***********************************************************************     *     * Access components initialisation done. Now initialize the ports     *     ***********************************************************************/    /* Configure all available ports */    for (portId = 0; portId < IX_ETHACC_CODELET_MAX_PORT; portId++)    {	if (ixEthAccCodeletHardwareExists[portId])	{	    if(ixEthAccCodeletPortInit(portId) != IX_ETH_ACC_SUCCESS)            {   	        printf("CodeletMain: Error setup port %u\n",		       portId);	        return (IX_FAIL);            }        }    }    /* Find and initialise all available PHYs */    printf ("Discover and reset the PHYs...\n");    if(ixEthAccCodeletPhyInit() != IX_SUCCESS)    {	printf("CodeletMain: Error initialising Ethernet phy(s)!\n");	return (IX_FAIL);    }    /***********************************************************************     *     * PortInitialization done. Now start the codelet features     *     ***********************************************************************/    /* starts ethDB maintenance running from a different task */    if (ixEthAccCodeletDBMaintenanceStart()	!= IX_SUCCESS)    {	printf("CodeletMain: Error spawning DB maintenance task\n");	return (IX_FAIL);    }    /* Starts the traffic display (in a different task) this is initially     * set to FALSE in order to allow the traffic stats to start only     * once traffic is started to be received      */    ixEthAccCodeletTrafficPollEnabled = FALSE;    if (ixOsalThreadCreate(&statsPollThread,			   &threadAttr,			   (IxOsalVoidFnVoidPtr) ixEthAccCodeletStatsPollTask,			   NULL)		!= IX_SUCCESS)    {	printf("CodeletMain: Error spawning stats task\n");	return (IX_FAIL);    }     /* Start the thread */    if (ixOsalThreadStart(&statsPollThread) != IX_SUCCESS)    {	printf("CodeletMain: Error failed to start the stats thread\n");        return IX_FAIL;    }    ixEthAccCodeletInitialised = TRUE;    return (IX_SUCCESS);}/* * Function definition: ixEthAccCodeletUninit() * * Stop all threads and interrupts */IX_STATUS ixEthAccCodeletUninit(void){      IxEthAccPortId portId;    IxEthAccStatus status;    if(!ixEthAccCodeletInitialised)     {	/* already uninitialized */	return(IX_SUCCESS);    }    if (!ixEthAccCodeletStatsPollTaskStop)    {	ixEthAccCodeletStatsPollTaskStop = TRUE;	if (ixOsalMutexLock (&ixEthAccCodeletStatsPollTaskRunning, 			     IX_OSAL_WAIT_FOREVER)	    != IX_SUCCESS)	{	    printf("CodeletMain: Error stopping Statistics Polling thread!\n");	    return (IX_FAIL);	}	ixOsalMutexUnlock (&ixEthAccCodeletStatsPollTaskRunning);    }    for (portId = IX_ETH_PORT_1; portId < IX_ETHACC_CODELET_MAX_PORT; portId++)    {	status = ixEthAccPortDisable (portId);	if (IX_ETH_ACC_SUCCESS != status)	{	    printf("CodeletMain: Failed to disable port %d, error code %d\n", portId, status); 	    return (IX_FAIL);	}     }    if (ixEthAccCodeletDBMaintenanceStop() != IX_SUCCESS)    {	printf("CodeletMain: Error stopping DB Maintenance task!\n");	return (IX_FAIL);    }    if (ixEthAccUninit() != IX_SUCCESS)    {	printf("CodeletMain: Failed to uninitialize Ethernet Access Layer!\n");	return (IX_FAIL);    }#ifdef __ixp46X    if (ixNpeDlNpeStopAndReset(IX_NPEDL_NPEID_NPEA) != IX_SUCCESS)    {	printf("CodeletMain: Failed to stop and reset NPE A!\n");	return (IX_FAIL);    }#endif    if (ixNpeDlNpeStopAndReset(IX_NPEDL_NPEID_NPEB) != IX_SUCCESS)    {	printf("CodeletMain: Failed to stop and reset NPE B!\n");	return (IX_FAIL);    }    if (ixNpeDlNpeStopAndReset(IX_NPEDL_NPEID_NPEC) != IX_SUCCESS)    {	printf("CodeletMain: Failed to stop and reset NPE C!\n");	return (IX_FAIL);    }    if (ixNpeDlUnload() != IX_SUCCESS)    {	printf("CodeletMain: Failed to unload NPE Downloader!\n");	return (IX_FAIL);    }    if (ixNpeMhUnload() != IX_SUCCESS)    {	printf("CodeletMain: Failed to unload NPE Message Handler!\n");	return (IX_FAIL);    }    if (ixEthAccCodeletDispatcherStop(IX_ETH_CODELET_QMGR_DISPATCH_MODE)	!= IX_SUCCESS)    {	printf("CodeletMain: Error stopping QMgr Dispatcher loop!\n");	return (IX_FAIL);    }    if (ixQMgrUnload() != IX_SUCCESS)    {	printf("CodeletMain: Failed to unload QMgr!\n");	return (IX_FAIL);    }    if (ixEthAccCodeletMemPoolFree() != IX_SUCCESS)    {	printf("CodeletMain: Failed to free memory pool!\n");	return (IX_FAIL);    }    ixEthAccCodeletInitialised = FALSE;    return (IX_SUCCESS);}/* * Function definition: ixEthAccCodeletRxSink() * * See header file for documentation. */IX_STATUS ixEthAccCodeletRxSink(void){    IxEthAccPortId portId;     IX_ETHACC_IS_CODELET_INITIALISED();    /* Configure all available ports and start traffic */    for (portId = 0; portId < IX_ETHACC_CODELET_MAX_PORT; portId++)    {	if (ixEthAccCodeletHardwareExists[portId])	{	    if (ixEthAccCodeletRxSinkStart(portId) 		!= IX_ETH_ACC_SUCCESS)	    {		printf("CodeletMain: Failed to configure the RX Sink Operation Port %u\n",		       (UINT32)portId);		return IX_FAIL;	    }	}    }    printf("\n");    printf("Rx Sink Operation started.\n");    printf("Begin sending packets in from external source\n");    printf("\n");    /* wait for user input */    if(ixEthAccCodeletLoop() != IX_SUCCESS)    {	printf("CodeletMain: Failed to get User Input (should never happen)");	return (IX_FAIL);    }        /* Stop traffic and unconfigure all available ports */    for (portId = 0; portId < IX_ETHACC_CODELET_MAX_PORT; portId++)    {	if (ixEthAccCodeletHardwareExists[portId])	{	    if (ixEthAccCodeletRxSinkStop(portId) 		!= IX_ETH_ACC_SUCCESS)	    {		printf("CodeletMain: Failed to unconfigure the RX Sink Operation Port %u\n",		       (UINT32)portId);		return IX_FAIL;	    }	}    }    /* wait for pending traffic to be completely received */    if (ixEthAccCodeletRecoverBuffers() 	!= IX_SUCCESS)    {	printf("CodeletMain: Warning! Not all buffers are accounted for\n");    }    return (IX_SUCCESS);}/* * Function definition: ixEthAccCodeletSwLoopback() * * See header file for documentation. */IX_STATUS ixEthAccCodeletSwLoopback(void){    IxEthAccPortId portId;     IX_ETHACC_IS_CODELET_INITIALISED();    /* Configure all available ports */    for (portId = 0; portId < IX_ETHACC_CODELET_MAX_PORT; portId++)    {	if (ixEthAccCodeletHardwareExists[portId])	{	    if (ixEthAccCodeletSwLoopbackStart(portId) 		!= IX_ETH_ACC_SUCCESS)	    {		printf("CodeletMain: Failed to configure the RX Sink Operation Port %u\n",		       (UINT32)portId);		return IX_FAIL;	    }	}    }    printf("\n");    printf("Software loopback successfully started.\n");    printf("Begin sending packets from external source\n");      printf("\n");    /* wait for user input */    if(ixEthAccCodeletLoop() != IX_SUCCESS)    {	return (IX_FAIL);    }    /* Stop traffic and unconfigure all available ports */    for (portId = 0; portId < IX_ETHACC_CODELET_MAX_PORT; portId++)    {	if (ixEthAccCodeletHardwareExists[portId])	{	    if (ixEthAccCodeletSwLoopbackStop(portId) 		!= IX_ETH_ACC_SUCCESS)	    {		printf("CodeletMain: Failed to unconfigure the RX Sink Operation Port %u\n",		       (UINT32)portId);		return IX_FAIL;	    }	}    }    /* wait for pending traffic to be completely received */    if (ixEthAccCodeletRecoverBuffers() 	!= IX_SUCCESS)    {	printf("CodeletMain: Warning! Not all buffers are accounted for\n");    }    return (IX_SUCCESS);}/* * Function definition: ixEthAccCodeletTxGenRxSinkLoopback() * * See header file for documentation. */IX_STATUS ixEthAccCodeletTxGenRxSinkLoopback(IxEthAccPortId inPort,				   IxEthAccPortId outPort)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -