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

📄 sf_api.c

📁 华为 HI3510 BOOTLOADER HIBOOT 源码包
💻 C
📖 第 1 页 / 共 5 页
字号:
		*SF_MAC0_DIO(4) = ClearCountInf.w32;		#ifdef SfTest                                      			SF_Print("SF_MAC0_DIO(4) clear statistic-Set ok!\r\n");   		#endif                                             		return Success;	}	else /*Error port*/	{		#ifdef SfTest                                      			SF_Print("SF_MAC0_DIO(0/4)-clear statistic error!\r\n");   		#endif                                             		return Failure;	}}/*======================================================================= *  函数名称:UINT32 SF_SetLoopBackEnable( In UINT8 u8PortNo, In UINT32 u32ExLoop, In UINT32 u32InLoop) *  初稿完成:2005/1/5    *  作    者:   *  函数功能:设置内环回和外环回使能 *  输入参数:使能-1,否则-0 *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static UINT32 SF_SetLoopBackEnable( In UINT8 u8PortNo, In UINT32 u32ExLoop, In UINT32 u32InLoop){	Port_Conf_U SetLoopBack;	if (u8PortNo == 0)	/*down port*/	{		SetLoopBack.w32 = *SF_MAC0_DIO(0);		SetLoopBack.bits.ex_loop_en = u32ExLoop;		SetLoopBack.bits.in_loop_en = u32InLoop;		*SF_MAC0_DIO(0) = SetLoopBack.w32;		#ifdef SfTest                                      			SF_Print("SF_MAC0_DIO(0) set loop back ok!\r\n");   		#endif                                             		return Success;	}	else if (u8PortNo == 1) /*up port*/	{		SetLoopBack.w32 = *SF_MAC0_DIO(4);		SetLoopBack.bits.ex_loop_en = u32ExLoop;		SetLoopBack.bits.in_loop_en = u32InLoop;		*SF_MAC0_DIO(4) = SetLoopBack.w32;		#ifdef SfTest                                      			SF_Print("SF_MAC0_DIO(4) set loop back ok!\r\n");   		#endif                                             		return Success;	}	else /*Error port*/	{		#ifdef SfTest                                      			SF_Print("SF_MAC0_DIO(0/4)-set loop back error!\r\n");   		#endif                                             		return Failure;	}}/*======================================================================= *  函数名称:UINT32 SF_FetchPortStatisticInformation(In UINT8 u8PortNo, In UINT8 u8Index, Out UINT32 *pu32ValueAddr)  *  初稿完成:2005/1/5    *  作    者:   *  函数功能:读取指定端口列表的统计信息 *  输入参数:端口号 *           读取统计信息的索引值 *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static UINT32 SF_FetchPortStatisticInformation( In UINT8 u8PortNo, In UINT8 u8Index, Out UINT32 *pu32ValueAddr){	Port_Count_U FetchCnt0;	Port_Rec_Cnt_U FetchCnt1;	Port_Tra_Cnt_U FetchCnt2;	if (u8PortNo == 0) /*down port*/	{		FetchCnt0.w32 = * ( UINT32 *) SF_MAC0_DIO(1);		FetchCnt1.w32 = * ( UINT32 *) SF_MAC0_DIO(2);		FetchCnt2.w32 = * ( UINT32 *) SF_MAC0_DIO(3);					switch ( u8Index )		{			case 1 : *pu32ValueAddr = FetchCnt0.bits.txcrcbad_cnt; break;			case 2 : *pu32ValueAddr = FetchCnt0.bits.txcrcok_cnt; break;			case 3 : *pu32ValueAddr = FetchCnt0.bits.txeof_cnt; break; 			case 4 : *pu32ValueAddr = FetchCnt0.bits.txsof_cnt; break;			case 5 : *pu32ValueAddr = FetchCnt0.bits.rxcrcbad_cnt; break;			case 6 : *pu32ValueAddr = FetchCnt0.bits.rxcrcok_cnt; break;			case 7 : *pu32ValueAddr = FetchCnt0.bits.rxeof_cnt; break;			case 8 : *pu32ValueAddr = FetchCnt0.bits.rxsof_cnt; break;			case 9 : *pu32ValueAddr = FetchCnt1.bits.cntr_stat_rx; break;			case 10 : *pu32ValueAddr = FetchCnt2.bits.cntr_stat_tx; break;			default : *pu32ValueAddr = 0; return Failure;		}		#ifdef SfTest			SF_Print("SF_MAC0_DIO(1/2/3)-SF port0 count number is %ld\n",*(UINT32 *)pu32ValueAddr);		#endif		return Success;	}	else if (u8PortNo == 1) /*up port*/	{		FetchCnt0.w32 = * ( UINT32 *) SF_MAC0_DIO(5);		FetchCnt1.w32 = * ( UINT32 *) SF_MAC0_DIO(6);		FetchCnt2.w32 = * ( UINT32 *) SF_MAC0_DIO(7);					switch ( u8Index )		{			case 1 : *pu32ValueAddr = FetchCnt0.bits.rxcrcbad_cnt; break;			case 2 : *pu32ValueAddr = FetchCnt0.bits.rxcrcok_cnt; break;			case 3 : *pu32ValueAddr = FetchCnt0.bits.rxeof_cnt; break; 			case 4 : *pu32ValueAddr = FetchCnt0.bits.rxsof_cnt; break;			case 5 : *pu32ValueAddr = FetchCnt0.bits.txcrcbad_cnt; break;			case 6 : *pu32ValueAddr = FetchCnt0.bits.txcrcok_cnt; break;			case 7 : *pu32ValueAddr = FetchCnt0.bits.txeof_cnt; break;			case 8 : *pu32ValueAddr = FetchCnt0.bits.txsof_cnt; break;			case 9 : *pu32ValueAddr = FetchCnt1.bits.cntr_stat_rx; break;			case 10 : *pu32ValueAddr = FetchCnt2.bits.cntr_stat_tx; break;			default : *pu32ValueAddr = 0; return Failure;		}		#ifdef SfTest			SF_Print("SF_MAC0_DIO(1/2/3)-SF port1 count number is %ld\n",*pu32ValueAddr);		#endif		return Success;	}	else /*Error port*/	{		#ifdef SfTest			SF_Print("SF_MAC0_DIO(1/2/3/5/6/7)-SF set error\n");		#endif		return Failure;	}}#if 0/*======================================================================= *  函数名称:void SF_PortRingback( In UINT8 u8PortNo, In UINT8 u8RingbackSet)  *  初稿完成:2005/1/5    *  作    者:   *  函数功能:使能/禁止端口的内环回/外环回 *  输入参数:内环回=2;外环回=1;禁止环回=0 *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/void SF_PortRingback( In UINT8 u8PortNo, In UINT32 u32RingbackSet) {	if ( u32RingbackSet != 0 )	{		if (u8PortNo == 0) /*Down port*/		{			 *SF_MAC0_DIO(0) =  *SF_MAC0_DIO(0) | (u32RingbackSet << 20);		}		else if (u8PortNo == 1) /*Down port*/		{			 *SF_MAC0_DIO(4) =  *SF_MAC0_DIO(4) | (u32RingbackSet << 20);		}		else		{			#ifdef SfTest				SF_Print("SF ring mode set error\n");			#endif		}	}	else	{		if (u8PortNo == 0) /*Down port*/		{			 *SF_MAC0_DIO(0) =  *SF_MAC0_DIO(0) & ~(3 << 20);		}		else if (u8PortNo == 1) /*Down port*/		{			 *SF_MAC0_DIO(4) =  *SF_MAC0_DIO(4) & ~(3 << 20);		}		else		{			#ifdef SfTest				SF_Print("SF ring mode set error\n");			#endif		}	}}#endif/*======================================================================= *  函数名称:void SF_ReadSpeedLinkDuplexMode(In UINT8 u8PortNo, Out UINT8 *u8Speed, Out UINT8 *u8Link, Out UINT8 *u8Duplex) *  初稿完成:2005/1/6    *  作    者:   *  函数功能:读取端口的速度、链接状态、双工模式 *  输入参数:端口号 *  输出参数:  速度(1-100M,0-10M)、链接状态(1-链接,0-无链接)、双工模式(1-双工,0-半双工)对应的指针数据, *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static void SF_ReadSpeedLinkDuplexMode(In UINT8 u8PortNo, Out UINT32 *pu32Speed, Out UINT32 *pu32Link, Out UINT32 *pu32Duplex) {	Set_CPUSpeLinDup_U ReadSpeLinDupMode;	if (u8PortNo == 0)/*down port*/	{		ReadSpeLinDupMode.w32 = *SF_MAC_DIO(4);		*pu32Speed = (ReadSpeLinDupMode.bits.down_speed_stat_dio);		*pu32Duplex = (ReadSpeLinDupMode.bits.down_duplex_stat_dio);		*pu32Link = (ReadSpeLinDupMode.bits.down_link_stat_dio);		#ifdef SfTest			SF_Print("SF p0 speed is %ld\nSF duplex is %ld\nSF link is %ld\n",*pu32Speed,*pu32Duplex,*pu32Link);		#endif	}	else if (u8PortNo == 1)/*up port*/	{		ReadSpeLinDupMode.w32 = *SF_MAC_DIO(4);		*pu32Speed = (ReadSpeLinDupMode.bits.up_speed_stat_dio);		*pu32Duplex = (ReadSpeLinDupMode.bits.up_duplex_stat_dio);		*pu32Link = (ReadSpeLinDupMode.bits.up_link_stat_dio);		#ifdef SfTest			SF_Print("SF p1 speed is %ld\nSF duplex is %ld\nSF link is %ld\n",*pu32Speed,*pu32Duplex,*pu32Link);		#endif	}	else	{		#ifdef SfTest			SF_Print("SF port speed/duplex/link set error\n");		#endif	}}/*======================================================================= *  函数名称:void SF_SetSpeedLinkDuplexMode(In UINT8 u8PortNo, In UINT32 u32Speed, In UINT32 u32Link, In UINT32 u32Duplex) *  初稿完成:2005/1/6    *  作    者:   *  函数功能:CPU设置速度、链接状态、双工模式 *  输入参数:端口号,速度(1-100M,0-10M)、链接状态(1-链接,0-无链接)、双工模式(1-双工,0-半双工)对应的指针数据 *  输出参数:   *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/void SF_SetSpeedLinkDuplexMode(In UINT8 u8PortNo, In UINT32 u32Speed, In UINT32 u32Link, In UINT32 u32Duplex){	Set_CPUSpeLinDup_U SetSpeLinDupMode;	if (u8PortNo == 0)/*down port*/	{		SetSpeLinDupMode.w32 = *SF_MAC_DIO(4);		SetSpeLinDupMode.bits.down_speed_stat_dio = u32Speed;		SetSpeLinDupMode.bits.down_duplex_stat_dio = u32Duplex;		SetSpeLinDupMode.bits.down_link_stat_dio = u32Link;		*SF_MAC_DIO(4) = SetSpeLinDupMode.w32;		#ifdef SfTest			outinfor = * ( UINT32 * ) SF_MAC_DIO(4);			TChangeHEXToBin(outinfor,OutBinary);			SF_Print("SF_MAC_DIO(4)-SF p0 CPU set work mode is %s\n",OutBinary);		#endif	}	else if (u8PortNo == 1)/*up port*/	{		SetSpeLinDupMode.w32 = *SF_MAC_DIO(4);		SetSpeLinDupMode.bits.up_speed_stat_dio = u32Speed;		SetSpeLinDupMode.bits.up_duplex_stat_dio = u32Duplex;		SetSpeLinDupMode.bits.up_link_stat_dio = u32Link;		*SF_MAC_DIO(4) = SetSpeLinDupMode.w32;		#ifdef SfTest			outinfor = * ( UINT32 * ) SF_MAC_DIO(4);			TChangeHEXToBin(outinfor,OutBinary);			SF_Print("SF_MAC_DIO(4)-SF p1 CPU set work mode is %s\n",OutBinary);		#endif	}	else	{		#ifdef SfTest			SF_Print("SF CPU set work mode error\n");		#endif	}}/*======================================================================= *  函数名称:void SF_ReadSpeedLinkDuplexChangeFlag(In UINT8 u8PortNo, Out UINT32 *pu32Speed, Out UINT32 *pu32Link, Out UINT32 *pu32Duplex) *  初稿完成:2005/1/6    *  作    者:   *  函数功能:读取速度、链接状态、双工模式改变标志 *  输入参数:端口号,速度(1-100M,0-10M)、链接状态(1-链接,0-无链接)、双工模式(1-双工,0-半双工)改变指示对应的指针数据 *  输出参数:   *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static void SF_ReadSpeedLinkDuplexChangeFlag(In UINT8 u8PortNo, Out UINT32 *pu32Speed, Out UINT32 *pu32Link, Out UINT32 *pu32Duplex){	Changed_SpeLinDup_U ReadSpeLinDupChangeFlag;	if (u8PortNo == 0)/*down port*/	{		ReadSpeLinDupChangeFlag.w32 = *SF_MAC_DIO(6);		*pu32Speed = (ReadSpeLinDupChangeFlag.bits.down_speed_stat_ch);		*pu32Duplex = (ReadSpeLinDupChangeFlag.bits.down_duplex_stat_ch);		*pu32Link = (ReadSpeLinDupChangeFlag.bits.down_link_stat_ch);		#ifdef SfTest			outinfor = * ( UINT32 * ) SF_MAC_DIO(6);			TChangeHEXToBin(outinfor,OutBinary);			SF_Print("SF_MAC_DIO(6)-SF p0 read mode change flag is %s\n",OutBinary);		#endif	}	else if (u8PortNo == 1)/*up port*/	{		ReadSpeLinDupChangeFlag.w32 = *SF_MAC_DIO(6);		*pu32Speed = (ReadSpeLinDupChangeFlag.bits.up_speed_stat_ch);		*pu32Duplex = (ReadSpeLinDupChangeFlag.bits.up_duplex_stat_ch);		*pu32Link = (ReadSpeLinDupChangeFlag.bits.up_link_stat_ch);		#ifdef SfTest			outinfor = * ( UINT32 * ) SF_MAC_DIO(6);			TChangeHEXToBin(outinfor,OutBinary);			SF_Print("SF_MAC_DIO(6)-SF p1 read mode change flag is %s\n",OutBinary);		#endif	}	else	{		#ifdef SfTest			SF_Print("SF CPU read mode change flag error\n");		#endif	}}/*======================================================================= *  函数名称:void SF_ClearSpeedLinkDuplexChangeFlag(In UINT8 u8PortNo, In UINT32 u32Speed, In UINT32 u32Link, In UINT32 u32Duplex) *  初稿完成:2005/1/6    *  作    者:   *  函数功能:清除速度、链接状态、双工模式改变标志 *  输入参数:端口号,速度(1-100M,0-10M)、链接状态(1-链接,0-无链接)、双工模式(1-双工,0-半双工)改变指示清空对应的指针数据。 *			写1清空 *  输出参数:   *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static void SF_ClearSpeedLinkDuplexChangeFlag(In UINT8 u8PortNo, In UINT32 u32Speed, In UINT32 u32Link, In UINT32 u32Duplex){	Changed_SpeLinDup_U ClearSpeLinDupChangeFlag;	if (u8PortNo == 0)/*down port*/

⌨️ 快捷键说明

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