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

📄 fec__hdl.c

📁 基于vxworks操作系统的电话语音平台系统
💻 C
字号:
/************************************************************************/
/*                                                              		*/
/*                                                              		*/
/* (C) Copyright Bangyan Information Technology Ltd, 2000/9.            */
/*  All right reserved                                          		*/
/*                                                              		*/
/* Author: Zhuguosheng 	                                  				*/
/*                                                              		*/
/* Description:                                                 		*/
/*     Driver Set - FEC Handle pecific routines.            			*/
/*                                                              		*/
/* Routines                                                     		*/
/*                                                                      */
/************************************************************************/
#include "PUB\PUB_INCL.H"
#include "DRVs\DRV860\PUB\NETCOMM.H"       /* global defines */
#include "DRVs\DRV860\PUB\D860_PUB.H"
#include "DRVs\DRV860\PUB\MPC860.H"       /* IMMR definitions and declarations */
#include "DRVs\DRV860\PUB\MASKS860.h"      /* Global masks header file */
#include "FEC.H"


extern EPPC *quicc;
extern QUICC_BD	FecRxBd[MAX_FEC_RX_BDS], FecTxBd[MAX_FEC_TX_BDS];
extern UI CurFecRxBd,CurFecTxBd;
extern VOID FecRecvDataHdl(UI len, VOID *buf);
extern NU_SEMAPHORE Semaphore_EthernetSend;


BOOL FecSendToBuf( UI buf_len, VOID *buffer )
{
	UI i;

	NU_Obtain_Semaphore(&Semaphore_EthernetSend, NU_SUSPEND);

	i=CurFecTxBd;
	if( (FecTxBd[i].status&TX_BD_R)==TX_BD_R ) //Ring full
	{
		NU_Release_Semaphore(&Semaphore_EthernetSend) ;
		return FALSE;
	}
	else
	{
		FecTxBd[i].status |= (TX_BD_R | TX_BD_L | TX_BD_TC);
		FecTxBd[i].length = buf_len;
		memcpy( FecTxBd[i].buf, buffer, buf_len );

		CurFecTxBd++;
		if( CurFecTxBd==MAX_FEC_TX_BDS )
			CurFecTxBd=0;

		quicc->t_x_des_active =  FEC_BD_ACTIVE;

		NU_Release_Semaphore(&Semaphore_EthernetSend) ;
		return TRUE;
	}
}

VOID FecSendFrameComp(VOID)
{
}

VOID FecRecvFromBuf( VOID )
{
	while( (FecRxBd[CurFecRxBd].status&RX_BD_E)!=RX_BD_E )
	{
		if( (FecRxBd[CurFecRxBd].status&RX_BD_LG)==RX_BD_LG )
		{
		}
		if( (FecRxBd[CurFecRxBd].status&RX_BD_NO)==RX_BD_NO )
		{
		}
		if( (FecRxBd[CurFecRxBd].status&RX_BD_SH)==RX_BD_SH )
		{
		}
		if((FecRxBd[CurFecRxBd].status&RX_BD_CR)==RX_BD_CR )
		{
		}
		if((FecRxBd[CurFecRxBd].status&RX_BD_OV)==RX_BD_OV )
		{
		}
		if((FecRxBd[CurFecRxBd].status&RX_BD_TR)==RX_BD_TR )
		{
		}
		if( ((FecRxBd[CurFecRxBd].status&RX_BD_LG)!=RX_BD_LG) &&
			((FecRxBd[CurFecRxBd].status&RX_BD_NO)!=RX_BD_NO) &&
			((FecRxBd[CurFecRxBd].status&RX_BD_SH)!=RX_BD_SH) &&
			((FecRxBd[CurFecRxBd].status&RX_BD_CR)!=RX_BD_CR) &&
			((FecRxBd[CurFecRxBd].status&RX_BD_OV)!=RX_BD_OV) &&
			((FecRxBd[CurFecRxBd].status&RX_BD_TR)!=RX_BD_TR)  )
		{
			/* ATTENTION!!! */

			/* Send This Data To TCP/IP moduler. */
			FecRecvDataHdl(FecRxBd[CurFecRxBd].length-4, FecRxBd[CurFecRxBd].buf);

			FecRxBd[CurFecRxBd].status |= RX_BD_E;
			FecRxBd[CurFecRxBd].length = 0;

			CurFecRxBd++;
			if( CurFecRxBd==MAX_FEC_RX_BDS )
				CurFecRxBd=0;
		}
	}
}

VOID FecPollingEvtHdl( VOID )
{
	UL sivec_ic;
	UL fec_event;
	UI fec_bd_status;

   //Get FEC Event Register.
	fec_event = quicc->t_ievent; /* Save off t_ievent */

	if( fec_event!=0 )
	{
		if( (fec_event&T_IEVENT_HEARTBEATERROR)==T_IEVENT_HEARTBEATERROR )
		{
			quicc->t_ievent=T_IEVENT_HEARTBEATERROR;
		}
		if( (fec_event&T_IEVENT_BABBLINGRECEIVER)==T_IEVENT_BABBLINGRECEIVER )
		{
			quicc->t_ievent=T_IEVENT_BABBLINGRECEIVER;
		}
		if( (fec_event&T_IEVENT_BABBLINGTRANSMIT)==T_IEVENT_BABBLINGTRANSMIT )
		{
			quicc->t_ievent=T_IEVENT_BABBLINGTRANSMIT;
		}
		if( (fec_event&T_IEVENT_GRACEFULSTOPACK)==T_IEVENT_GRACEFULSTOPACK )
		{
			quicc->t_ievent=T_IEVENT_GRACEFULSTOPACK;
		}
		if( (fec_event&T_IEVENT_TRANSMITBUFINT)==T_IEVENT_TRANSMITBUFINT )
		{
			quicc->t_ievent=T_IEVENT_TRANSMITBUFINT;
		}
		if( (fec_event&T_IEVENT_RECEIVEBUFINT)==T_IEVENT_RECEIVEBUFINT )
		{
			quicc->t_ievent=T_IEVENT_RECEIVEBUFINT;
		}
		if( (fec_event&T_IEVENT_MIIINT)==T_IEVENT_MIIINT )
		{
			quicc->t_ievent=T_IEVENT_MIIINT;
		}
		if( (fec_event&T_IEVENT_ETHERNETBUSERROR)==T_IEVENT_ETHERNETBUSERROR )
		{
			quicc->t_ievent=T_IEVENT_ETHERNETBUSERROR;
		}
		if( (fec_event&T_IEVENT_TRANSMITFRAMEINT)==T_IEVENT_TRANSMITFRAMEINT )
		{
			quicc->t_ievent=T_IEVENT_TRANSMITFRAMEINT;
			FecSendFrameComp();
		}
		if( (fec_event&T_IEVENT_RECEIVEFRAMEINT)==T_IEVENT_RECEIVEFRAMEINT )
		{
			quicc->t_ievent=T_IEVENT_RECEIVEFRAMEINT;
			FecRecvFromBuf();
		}
	}
}

⌨️ 快捷键说明

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