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

📄 ixtimesyncacccodelet.c

📁 有关ARM开发板上的IXP400网络驱动程序的源码以。
💻 C
📖 第 1 页 / 共 4 页
字号:
	{		ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletEthInit: this device is not IXP46x\n",			0, 0, 0, 0, 0, 0);		return IX_FAIL;	}	/* check if all NPEs are enabled */	for (channel = 0, npe = IX_FEATURECTRL_NPEA; npe <= IX_FEATURECTRL_NPEC; npe++, channel++)	{		if (IX_FEATURE_CTRL_COMPONENT_ENABLED != ixFeatureCtrlComponentCheck (npe))		{			ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletEthInit: %s is not enabled\n",				(UINT32) ixTimeSyncAccCodeletTSChannelLabel[channel], 0, 0, 0, 0, 0);			return IX_FAIL;		}	}	/* allocate mBufs */	ixTimeSyncAccCodeletUninitFuncMap[IX_TIMESYNCACC_CODELET_MBUF_ALLOC].initialized = TRUE;	for (count = 0; count < IX_TIMESYNCACC_CODELET_MAX_TS_CHANNELS; count++)	{		mBufPtr = ixTimeSyncAccCodeletMbufAllocate ();		if (NULL != mBufPtr)		{			ixTimeSyncAccCodeletGlobalMBuf[count] = mBufPtr;		}		else		{			ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletEthInit: failed to allocate mBufs\n",			0, 0, 0, 0, 0, 0);					return IX_FAIL;			}	}	/* initialize Q Mgr */	if (IX_SUCCESS != ixQMgrInit ())	{		ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletEthInit: failed to initialize queue manager\n",			0, 0, 0, 0, 0, 0);		return IX_FAIL;	}	ixTimeSyncAccCodeletUninitFuncMap[IX_TIMESYNCACC_CODELET_Q_MGR].initialized = TRUE;	/* start Q Mgr dispatcher */	if (IX_SUCCESS != ixTimeSyncAccCodeletDispatcherStart ())	{		ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletEthInit: failed to start queue manager dispatch loop\n",			0, 0, 0, 0, 0, 0);		return IX_FAIL;	}	ixTimeSyncAccCodeletUninitFuncMap[IX_TIMESYNCACC_CODELET_DISPATCHER].initialized = TRUE;		/* initialize NPE message handler */	if (IX_SUCCESS != ixNpeMhInitialize (IX_NPEMH_NPEINTERRUPTS_YES))	{		ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletEthInit: failed to initialize NPE Message Handler\n",			0, 0, 0, 0, 0, 0);		return IX_FAIL;	}	ixTimeSyncAccCodeletUninitFuncMap[IX_TIMESYNCACC_CODELET_NPE_MH].initialized = TRUE;	/* download NPE A's image with basic Ethernet Rx/Tx and activate NPE A */ 	if (IX_SUCCESS != ixNpeDlNpeInitAndStart (IX_NPEDL_NPEIMAGE_NPEA_ETH))	{		ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletEthInit: failed to initialize and start NPE A\n",			0, 0, 0, 0, 0, 0);		return IX_FAIL;	}	ixTimeSyncAccCodeletUninitFuncMap[IX_TIMESYNCACC_CODELET_NPE_A].initialized = TRUE;	ixTimeSyncAccCodeletUninitFuncMap[IX_TIMESYNCACC_CODELET_NPE_DL].initialized = TRUE;	/* download NPE B's image with basic Ethernet Rx/Tx and activate NPE B */ 	if (IX_SUCCESS != ixNpeDlNpeInitAndStart (IX_NPEDL_NPEIMAGE_NPEB_ETH))	{		ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletEthInit: failed to initialize and start NPE B\n",			0, 0, 0, 0, 0, 0);				return IX_FAIL;	}	ixTimeSyncAccCodeletUninitFuncMap[IX_TIMESYNCACC_CODELET_NPE_B].initialized = TRUE;	/* download NPE C's image with basic Ethernet Rx/Tx and activate NPE C */ 	if (IX_SUCCESS != ixNpeDlNpeInitAndStart (IX_NPEDL_NPEIMAGE_NPEC_ETH))	{		ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletEthInit: failed to initialize and start NPE C\n",			0, 0, 0, 0, 0, 0);				return IX_FAIL;	}	ixTimeSyncAccCodeletUninitFuncMap[IX_TIMESYNCACC_CODELET_NPE_C].initialized = TRUE;	/* initialize Ethernet Access component */	if (IX_ETH_ACC_SUCCESS != ixEthAccInit())	{		ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletEthInit: failed to initialize Ethernet access driver\n",			0, 0, 0, 0, 0, 0);		return IX_FAIL;	}	ixTimeSyncAccCodeletUninitFuncMap[IX_TIMESYNCACC_CODELET_ETH_ACC].initialized = TRUE;	/* initialize all ethernet ports */	for (portId = IX_ETH_PORT_1; portId <= IX_ETH_PORT_3; portId++)	{		if (IX_ETH_ACC_SUCCESS != ixEthAccPortInit (portId))		{			ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletEthInit: failed to initialize Ethernet port %d\n",				portId, 0, 0, 0, 0, 0);			return IX_FAIL;		}	}	ixTimeSyncAccCodeletUninitFuncMap[IX_TIMESYNCACC_CODELET_ETH_PORTS].initialized = TRUE;		/* spawn new thread to transmit PTP message from each NPEs */	if (IX_SUCCESS != ixTimeSyncAccCodeletNewThreadCreate ((IxOsalVoidFnPtr)ixTimeSyncAccCodeletPTPMsgTransmit, "Tx Thread"))	{		ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletEthInit: failed to spawn Tx Thread\n",			0, 0, 0, 0, 0, 0);		return IX_FAIL;	}	ixTimeSyncAccCodeletUninitFuncMap[IX_TIMESYNCACC_CODELET_TX_PTP].initialized = TRUE;	return IX_SUCCESS;} /* end of ixTimeSyncAccCodeletEthInit function *//** * @ingroup IxTimeSyncAccCodelet * * @fn ixTimeSyncAccCodeletPortDisable () * * @brief Disable all ports  * * @return void */PRIVATE void ixTimeSyncAccCodeletPortDisable (){		IxEthAccPortId portId;	IxEthAccStatus status;	for (portId = IX_ETH_PORT_1; portId <= IX_ETH_PORT_3; portId++)	{		status = ixEthAccPortDisable (portId);		if (IX_ETH_ACC_SUCCESS != status)		{			ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletPortDisable: failed to disable port %d, error code %d\n", 				portId, status, 0, 0, 0, 0);		} 	}} /* end of ixTimeSyncAccCodeletPortDisable function *//** * @ingroup IxTimeSyncAccCodelet * * @fn ixTimeSyncAccCodeletMbufAllocate () * * @brief  Allocate memory for mBuf and its associated data buffer * * @return  * 	@li IX_OSAL_MBUF * - successfully allocated memory for mBuf *	@li NULL - fail */PRIVATE IX_OSAL_MBUF  *ixTimeSyncAccCodeletMbufAllocate (){	IX_OSAL_MBUF *mBufPtr;		UINT8 *dataPtr;	/* Allocate cache-aligned memory for mbuf header */	mBufPtr = (IX_OSAL_MBUF *) IX_OSAL_CACHE_DMA_MALLOC (sizeof (IX_OSAL_MBUF));	if (NULL == mBufPtr)	{		ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletMbufAllocate: failed to allocate memory for mBuf\n",			0, 0, 0, 0, 0, 0);		return NULL;	}	/* initialize mBuf */	memset (mBufPtr, 0, sizeof (IX_OSAL_MBUF));	/* Allocate cache-aligned memory for mbuf data */	dataPtr = (UINT8 *) IX_OSAL_CACHE_DMA_MALLOC (IX_TIMESYNCACC_CODELET_UDP_FRAME_LEN);	if (NULL == dataPtr)	{		ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletMbufAllocate: failed to allocate memory for mBuf's data buffer\n",			0, 0, 0, 0, 0, 0);		return NULL;	}	/* initialize mBuf's data buffer */	memset (dataPtr, 0, IX_TIMESYNCACC_CODELET_UDP_FRAME_LEN);	/* Fill in mbuf header fields */	IX_OSAL_MBUF_MDATA (mBufPtr) = dataPtr;	IX_OSAL_MBUF_ALLOCATED_BUFF_DATA (mBufPtr) = (UINT32)dataPtr;	IX_OSAL_MBUF_MLEN (mBufPtr) = IX_TIMESYNCACC_CODELET_UDP_FRAME_LEN;	IX_OSAL_MBUF_ALLOCATED_BUFF_LEN (mBufPtr) = IX_TIMESYNCACC_CODELET_UDP_FRAME_LEN;	IX_OSAL_MBUF_PKT_LEN (mBufPtr) = IX_TIMESYNCACC_CODELET_UDP_FRAME_LEN;	return mBufPtr;} /* end of ixTimeSyncAccCodeletMbufAllocate function *//** * @ingroup IxTimeSyncAccCodelet * * @fn ixTimeSyncAccCodeletMbufsFree () * * @brief Free all allocated mBufs and their associated data buffer * * @return void */PRIVATE void ixTimeSyncAccCodeletMbufsFree (){	UINT32 count;	IX_OSAL_MBUF *mBufPtr;		UINT8 *dataPtr;	/* free mBufs */	for (count = 0; count < IX_TIMESYNCACC_CODELET_MAX_TS_CHANNELS; count++)	{		mBufPtr = ixTimeSyncAccCodeletGlobalMBuf[count];		if (NULL != mBufPtr)		{			dataPtr = (UINT8 *) IX_OSAL_MBUF_MDATA (mBufPtr);				if (NULL != dataPtr)			{				IX_OSAL_CACHE_DMA_FREE (dataPtr);			}			IX_OSAL_CACHE_DMA_FREE (mBufPtr); 			ixTimeSyncAccCodeletGlobalMBuf[count] = NULL;		}	}	} /* end of ixTimeSyncAccCodeletMbufsFree function *//** * @ingroup IxTimeSyncAccCodelet * * @fn ixTimeSyncAccCodeletDispatcherStart () * * @brief Hook the QM QLOW dispatcher to the interrupt controller * * @return  IX_STATUS *          @li IX_SUCCESS - all function operations complete successfully  *          @li IX_FAIL    - any operation fails */PRIVATE IX_STATUS ixTimeSyncAccCodeletDispatcherStart (){ 	/* get dispatcher function pointer, this should be initialized once */	ixQMgrDispatcherLoopGet(&ixTimeSyncAccCodeletDispatcherFunc);	if (NULL == ixTimeSyncAccCodeletDispatcherFunc)	{		ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletDispatcherStart: failed to get dispatcher function pointer\n",			0, 0, 0, 0, 0, 0);			return IX_FAIL;	}	/* Hook the QM QLOW dispatcher to the interrupt controller */ 	if (IX_SUCCESS != ixOsalIrqBind(IX_OSAL_IXP400_QM1_IRQ_LVL,					(IxOsalVoidFnVoidPtr)(ixTimeSyncAccCodeletDispatcherFunc),					(void *)IX_QMGR_QUELOW_GROUP))	{		ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletDispatcherStart: failed to hook QM QLOW dispatcher to the interrupt controller\n",			0, 0, 0, 0, 0, 0);		return IX_FAIL;	}	return (IX_SUCCESS);} /* end of ixTimeSyncAccCodeletDispatcherStart function *//** * @ingroup IxTimeSyncAccCodelet * * @fn ixTimeSyncAccCodeletDispatcherStop () * * @brief Unbind to QM1 interrupt * * @return void */PRIVATE void ixTimeSyncAccCodeletDispatcherStop (){	if (IX_SUCCESS != ixOsalIrqUnbind (IX_OSAL_IXP400_QM1_IRQ_LVL))	{		ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletDispatcherStop: failed to unbind to QM1 interrupt\n",			0, 0, 0, 0, 0, 0);	}} /* end of ixTimeSyncAccCodeletDispatcherStop function *//** * @ingroup IxTimeSyncAccCodelet * * @fn ixTimeSyncAccCodeletDummyCB (	UINT32 cbTag, 	IX_OSAL_MBUF* mBufPtr, 	UINT32 reserved) * * @brief Rx callback. TimeSync codelet does not handle receiving PTP message. *	  Thus, this function is just a dummy function. Rx callback registration *	  is required by ethernet component.  * * @param  * cbTag UINT32 [in] - argument passed to callback  * * @param  * mBufPtr IX_OSAL_MBUF* [in] - pointer to mBuf * * @param  * reserved UINT32 [in] - reserved parameter  * * @return void */PRIVATE voidixTimeSyncAccCodeletDummyCB (	UINT32 cbTag, 	IX_OSAL_MBUF *mBufPtr, 	UINT32 reserved){} /* end of ixTimeSyncAccCodeletDummyCB function *//** * @ingroup IxTimeSyncAccCodelet * * @fn ixTimeSyncAccCodeletTxDoneCB (	UINT32 cbTag, 	IX_OSAL_MBUF* mBufPtr,  * * @brief Tx callback. This function gives semaphore to allow  *	  ixTimeSyncAccCodeletPTPMsgTransmit function to transmit * 	  next PTP message.  * * @param  * cbTag UINT32 [in] - argument passed to callback  * * @param  * mBufPtr IX_OSAL_MBUF* [in] - pointer to mBuf * * @return void */PRIVATE void ixTimeSyncAccCodeletTxDoneCB (	UINT32 cbTag, 	IX_OSAL_MBUF* mBufPtr){	if (IX_SUCCESS != ixOsalSemaphorePost (&ixTimeSyncAccCodeletSemId))	{		ixOsalLog (IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDERR, "ixTimeSyncAccCodeletTxDoneCB: Failed to give semaphore, port Id %d\n",				cbTag, 0, 0, 0, 0, 0);	}} /* end of ixTimeSyncAccCodeletTxDoneCB function *//** * @ingroup IxTimeSyncAccCodelet * * @fn ixTimeSyncAccCodeletPortConfigure (	IxEthAccPortId portId) *

⌨️ 快捷键说明

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