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

📄 sf_api.c

📁 华为 HI3510 BOOTLOADER HIBOOT 源码包
💻 C
📖 第 1 页 / 共 5 页
字号:
	pu32StaticCnt->pkts128_255 = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0028));	        	pu32StaticCnt->pkts256_511 = *(UINT32 *) (SF_Statis + (AddrForPort | 0x002c));	        	pu32StaticCnt->pkts512_1023 = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0030));	        	pu32StaticCnt->pkts1024_1518 = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0034));	        	pu32StaticCnt->pkts_1518 = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0038));	        	pu32StaticCnt->ifinucastpkts = *(UINT32 *) (SF_Statis + (AddrForPort | 0x003c));	        	pu32StaticCnt->ifinnucastpkts = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0040));	        	pu32StaticCnt->ifindiscards = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0044));	        	pu32StaticCnt->ifinerrors = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0048));	        	pu32StaticCnt->ifinmulticast = *(UINT32 *) (SF_Statis + (AddrForPort | 0x004c));	        	pu32StaticCnt->ifinbroadcast = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0050));	        	pu32StaticCnt->dot3alignmenterr = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0054));		pu32StaticCnt->dot3fcserr = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0058));	        	pu32StaticCnt->dot3internalrecerr = *(UINT32 *) (SF_Statis + (AddrForPort | 0x005c));      	pu32StaticCnt->dot3inpause = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0060));	        	pu32StaticCnt->dot3unkpause = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0064));	        	pu32StaticCnt->dot3dribble = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0068));	        	pu32StaticCnt->octets = *(UINT32 *) (SF_Statis + (AddrForPort | 0x006c));	 	        	pu32StaticCnt->pkts = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0070));		        	pu32StaticCnt->ifinoctets = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0074));	        	pu32StaticCnt->broadcastpkts_tx =	*(UINT32 *) (SF_Statis + (AddrForPort | 0x0080));	pu32StaticCnt->multicastpkts_tx =	*(UINT32 *) (SF_Statis + (AddrForPort | 0x0084));	pu32StaticCnt->ifoutdiscards = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0088));	        	pu32StaticCnt->ifouterrors = *(UINT32 *) (SF_Statis + (AddrForPort | 0x008c));	        	pu32StaticCnt->ifoutucastpkts = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0090));	        	pu32StaticCnt->ifoutnucastpkts = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0094));	 	pu32StaticCnt->ifoutmulticast = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0098));	        	pu32StaticCnt->ifoutbroadcast = *(UINT32 *) (SF_Statis + (AddrForPort | 0x009c));	        	pu32StaticCnt->pkts64_tx = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00a0));	        	pu32StaticCnt->pkts65_127_tx = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00a4));	        	pu32StaticCnt->pkts128_255_tx = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00a8));	        	pu32StaticCnt->pkts256_511_tx = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00ac));	        	pu32StaticCnt->pkts512_1023_tx = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00b0));	 	pu32StaticCnt->pkts1024_1518_tx = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00b4));		pu32StaticCnt->pkts_1518_tx = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00b8));	        	pu32StaticCnt->dot3singlecol = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00bc));	        	pu32StaticCnt->dot3multiplecol = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00c0));		pu32StaticCnt->dot3latecol = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00c4));	        	pu32StaticCnt->dot3excessivecol =	*(UINT32 *) (SF_Statis + (AddrForPort | 0x00c8));	pu32StaticCnt->dot3colcnt = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00cc));	        	pu32StaticCnt->dot3defer = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00d0));	        	pu32StaticCnt->pkts_tx = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00d4));	 		pu32StaticCnt->octets_tx = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00d8));	        	pu32StaticCnt->collisions = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00dc));	        	pu32StaticCnt->ifoutoctets = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00e0));	        	pu32StaticCnt->dot3outpause = *(UINT32 *) (SF_Statis + (AddrForPort | 0x00e4));	        	#ifdef SfTest		SF_Print("SF count information is %ld\n",pu32StaticCnt->drop_event);		SF_Print("SF count information is %ld\n",pu32StaticCnt->crcerr);		SF_Print("SF count information is %ld\n",pu32StaticCnt->undersizepkts);		SF_Print("SF count information is %ld\n",pu32StaticCnt->oversizepkts);		SF_Print("SF count information is %ld\n",pu32StaticCnt->fragments);		SF_Print("SF count information is %ld\n",pu32StaticCnt->jabber);		SF_Print("SF count information is %ld\n",pu32StaticCnt->broadcastpkts);		SF_Print("SF count information is %ld\n",pu32StaticCnt->multicastpkts);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts64);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts65_127);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts128_255);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts256_511);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts512_1023);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts1024_1518);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts_1518);		SF_Print("SF count information is %ld\n",pu32StaticCnt->ifinucastpkts);		SF_Print("SF count information is %ld\n",pu32StaticCnt->ifinnucastpkts);		SF_Print("SF count information is %ld\n",pu32StaticCnt->ifindiscards);		SF_Print("SF count information is %ld\n",pu32StaticCnt->ifinerrors);		SF_Print("SF count information is %ld\n",pu32StaticCnt->ifinmulticast);		SF_Print("SF count information is %ld\n",pu32StaticCnt->ifinbroadcast);		SF_Print("SF count information is %ld\n",pu32StaticCnt->dot3alignmenterr);		SF_Print("SF count information is %ld\n",pu32StaticCnt->dot3fcserr);		SF_Print("SF count information is %ld\n",pu32StaticCnt->dot3internalrecerr);		SF_Print("SF count information is %ld\n",pu32StaticCnt->dot3inpause);		SF_Print("SF count information is %ld\n",pu32StaticCnt->dot3unkpause);		SF_Print("SF count information is %ld\n",pu32StaticCnt->dot3dribble);		SF_Print("SF count information is %ld\n",pu32StaticCnt->octets);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts);		SF_Print("SF count information is %ld\n",pu32StaticCnt->ifinoctets);		SF_Print("SF count information is %ld\n",pu32StaticCnt->broadcastpkts_tx);		SF_Print("SF count information is %ld\n",pu32StaticCnt->multicastpkts_tx);		SF_Print("SF count information is %ld\n",pu32StaticCnt->ifoutdiscards);		SF_Print("SF count information is %ld\n",pu32StaticCnt->ifouterrors);		SF_Print("SF count information is %ld\n",pu32StaticCnt->ifoutucastpkts);		SF_Print("SF count information is %ld\n",pu32StaticCnt->ifoutnucastpkts);		SF_Print("SF count information is %ld\n",pu32StaticCnt->ifoutmulticast);		SF_Print("SF count information is %ld\n",pu32StaticCnt->ifoutbroadcast);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts64_tx);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts65_127_tx);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts128_255_tx);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts256_511_tx);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts512_1023_tx);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts1024_1518_tx);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts_1518_tx);		SF_Print("SF count information is %ld\n",pu32StaticCnt->dot3singlecol);		SF_Print("SF count information is %ld\n",pu32StaticCnt->dot3multiplecol);		SF_Print("SF count information is %ld\n",pu32StaticCnt->dot3latecol);		SF_Print("SF count information is %ld\n",pu32StaticCnt->dot3excessivecol);		SF_Print("SF count information is %ld\n",pu32StaticCnt->dot3colcnt);		SF_Print("SF count information is %ld\n",pu32StaticCnt->dot3defer);		SF_Print("SF count information is %ld\n",pu32StaticCnt->pkts_tx);		SF_Print("SF count information is %ld\n",pu32StaticCnt->octets_tx);		SF_Print("SF count information is %ld\n",pu32StaticCnt->collisions);		SF_Print("SF count information is %ld\n",pu32StaticCnt->ifoutoctets);		SF_Print("SF count information is %ld\n",pu32StaticCnt->dot3outpause);	#endif}/*======================================================================= *  函数名称:void SF_ReadFrameCRCErrorFlag ( In UINT8 u8PortNo, Out UINT32 *u32RecFraCRCErr, Out UINT32 *u32TraFraCRCErr)  *  初稿完成:2005/1/15    *  作    者:   *  函数功能:读取的接收帧CRC校验出错标志,读取的发送帧CRC校验出错标志 *  输入参数:端口号 *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static void SF_ReadFrameCRCErrorFlag ( In UINT8 u8PortNo, Out UINT32 *u32RecFraCRCErr, Out UINT32 *u32TraFraCRCErr){	Port_Conf_U FrameCRCError;	if (u8PortNo == 0)	{		FrameCRCError.w32 = *SF_MAC0_DIO(0);		*(UINT32 *)u32RecFraCRCErr = FrameCRCError.bits.crc_rx;		*(UINT32 *)u32TraFraCRCErr = FrameCRCError.bits.txcrc_bad;		#ifdef SfTest			SF_Print("SF_MAC0_DIO(0)-SF p0 Receive CRC error ? %lx;SF p0 Transmit CRC error ? %lx\n",*(UINT32 *)u32RecFraCRCErr,*(UINT32 *)u32TraFraCRCErr);		#endif	}	else if (u8PortNo == 1)	{		FrameCRCError.w32 = *SF_MAC0_DIO(4);		*(UINT32 *)u32RecFraCRCErr = FrameCRCError.bits.crc_rx;		*(UINT32 *)u32TraFraCRCErr = FrameCRCError.bits.txcrc_bad;		#ifdef SfTest			SF_Print("SF_MAC0_DIO(4)-SF p1 Receive CRC error ? %lx;SF p1 Transmit CRC error ? %lx\n",*(UINT32 *)u32RecFraCRCErr,*(UINT32 *)u32TraFraCRCErr);		#endif	}	else	{		#ifdef SfTest			SF_Print("SF CRC error read failure\n");		#endif	}}/*======================================================================= *  函数名称:void SF_SetFrameCRCCtlRebuild ( In UINT8 u8PortNo, In UINT32 u32CRCRebuild) *  初稿完成:2005/1/15    *  作    者:   *  函数功能:CRC生成时是否需要修改原来的CRC位,重新计算CRC *  输入参数:端口号(上行口或者下行口),CRC重新生成设置位,0->recalculate;1->not recalculate CRC *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static void SF_SetFrameCRCCtlRebuild ( In UINT8 u8PortNo, In UINT32 u32CRCRebuild){	Port_Conf_U FrameCRCRebuild;	if (u8PortNo == 0)	{		FrameCRCRebuild.w32 = *SF_MAC0_DIO(0);		FrameCRCRebuild.bits.crcgen_dis= u32CRCRebuild;		*SF_MAC0_DIO(0) = FrameCRCRebuild.w32;		#ifdef SfTest			outinfor = * ( UINT32 * ) SF_MAC0_DIO(0);			TChangeHEXToBin(outinfor,OutBinary);			SF_Print("SF_MAC0_DIO(0)-SF p0 CRC rebuild enable flag %s\n",OutBinary);		#endif	}	else if (u8PortNo == 1)	{		FrameCRCRebuild.w32 = *SF_MAC0_DIO(4);		FrameCRCRebuild.bits.crcgen_dis = u32CRCRebuild;		*SF_MAC0_DIO(4) = FrameCRCRebuild.w32;		#ifdef SfTest			outinfor = * ( UINT32 * ) SF_MAC0_DIO(4);			TChangeHEXToBin(outinfor,OutBinary);			SF_Print("SF_MAC0_DIO(4)-SF p1 CRC rebuild enable flag %s\n",OutBinary);		#endif	}	else	{		#ifdef SfTest			SF_Print("SF CRC rebuild enable flag set error\n");		#endif	}}/*======================================================================= *  函数名称:void SF_SetConflictTimesStatistic ( In UINT8 u8PortNo, In UINT32 u32ConflictTimes) *  初稿完成:2005/1/15    *  作    者:   *  函数功能:设置冲突计数器计数的帧数是冲突了多少次的帧计数。默认是冲突1次的帧计数。 *  输入参数:端口号(上行口或者下行口),冲突次数设置 *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static void SF_SetConflictTimesStatistic ( In UINT8 u8PortNo, In UINT32 u32ConflictTimes){	Port_Conf_U FrameConflictTimes;	if (u8PortNo == 0)	{		FrameConflictTimes.w32 = *SF_MAC0_DIO(0);		FrameConflictTimes.bits.colthreshold = u32ConflictTimes;		*SF_MAC0_DIO(0) = FrameConflictTimes.w32;		#ifdef SfTest			outinfor = * ( UINT32 * ) SF_MAC0_DIO(0);			TChangeHEXToBin(outinfor,OutBinary);			SF_Print("SF_MAC0_DIO(0)-SF p0 Conflict times setting %s\n",OutBinary);		#endif	}	else if (u8PortNo == 1)	{		FrameConflictTimes.w32 = *SF_MAC0_DIO(4);		FrameConflictTimes.bits.colthreshold = u32ConflictTimes;		*SF_MAC0_DIO(4) = FrameConflictTimes.w32;		#ifdef SfTest			outinfor = * ( UINT32 * ) SF_MAC0_DIO(4);			TChangeHEXToBin(outinfor,OutBinary);			SF_Print("SF_MAC0_DIO(4)-SF p1 Conflict times setting %s\n",OutBinary);		#endif	}	else	{		#ifdef SfTest			SF_Print("SF Conflict times setting error\n");		#endif	}}/*=======================================================================*							配置VLAN功能**=======================================================================*//*======================================================================= *  函数名称:UINT32 SF_CreateVlanContent( In UINT8 u8Index, In UINT32 u32VlanID, In UINT32 u32vpri,  			 In UINT32 u32Ipm_vid, In UINT32 u32Fix_vid, In UINT32 u32Vmem, In UINT32 u32Vtag) *  初稿完成:2005/1/6    *  作    者:   *  函数功能:添加VLAN记录 *  输入参数:VLAN表项的索引值,各个表项参数的值 *			u8Index->VLAN信息表索引值 *			u32VlanID->待创建VLAN的VLAN ID  *			u32vpri->VLAN对应表项的优先级 (1-7) *			u32Ipm_vid->VLAN对应表项是否是IP多播报文或特殊帧对应的VID,1有效 *			u32Fix_vid->VLAN对应表项是否是 固定的VID,1有效 *			u32Vmem->VLAN对应表项对应的成员,基于端口(2bit->CPU,1bit->上行口,0bit->下行口) *			u32Vtag->VLAN对应表项是否带tag输出,基于端口(2bit->CPU,1bit->上行口,0bit->下行口) *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static UINT32 SF_CreateVlanContent( In UINT8 u8Index, In UINT32 u32VlanID, In UINT32 u32vpri,  			 In UINT32 u32Ipm_vid, In UINT32 u32Fix_vid, In UINT32 u32Vmem, In UINT32 u32Vtag){	VLAN_Form_U VLANAdd;	if ((u8Index < 8))	{		VLANAdd.bits.vid = u32VlanID;		VLANAdd.bits.vpri= u32vpri;		VLANAdd.bits.ipm_vid= u32Ipm_vid;		VLANAdd.bits.fix_vid= u32Fix_vid;		VLANAdd.bits.vmem= u32Vmem;		VLANAdd.bits.vtag= u32Vtag;		* SF_VLAN(u8Index) = VLANAdd.w32;		#ifdef SfTest			outinfor = * SF_VLAN(u8Index);			TChangeHEXToBin(outinfor,OutBinary);			SF_Print("SF VLAN content is %s\n",OutBinary);		#endif		return Success;	}	else	{		#ifdef SfTest			SF_Print("SF add VLAN failure\n");		#endif		return Failure;			}}/*======================================================================= *  函数名称:UINT32 SF_ModifyVlanMember (In UINT32 u32VlanID, In UINT32 u32VlanMem) *  初稿完成:2005/1/6    *  作    者:   *  函数功能:修改指定VLAN ID表项中的VLAN成员 *  输入参数:VLAN ID,需要修改的VLAN成员表 *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static UINT32 SF_ModifyVlanMember (In UINT32 u32VlanID, In UINT32 u32VlanMem){	VLAN_Form_U VLANMemModi;	UINT8 u8Index = 0;	while (u8Index < 8)	{		VLANMemModi.w32 = *SF_VLAN(u8Index);		if (VLANMemModi.bits.vid == u32VlanID)		{			VLANMemModi.bits.vmem = u32VlanMem;			*SF_VLAN(u8Index) = VLANMemModi.w32;			#ifdef SfTest				outinfor = * SF_VLAN(u8Index);				TChangeHEXToBin(outinfor,OutBinary);				SF_Print("SF VLAN modify content is %s\n",OutBinary);			#endif			return Success;		}		u8Index++ ;	}	#ifdef SfTest		SF_Print("SF VLAN modify content failure\n");	#endif	return Failure;}/*======================================================================= *  函数名称:void SF_SetVlanTransmitMode(In UINT32 u32TransCtrl, In UINT32 u32FieldLimit )  *  初稿完成:2005/1/6    *  作    者:   *  函数功能:使能或者禁止SF的Vlan转发控制;以及使能转发控制后转发是否限制在VLAN域内 *  输入参数:VLAN转发使能标志(0->enable;1->disable), *           VLAN转发限制标志(0->un limit;1->limit) *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static void SF_SetVlanTransmitMode(In UINT32 u32TransCtrl, In UINT32 u32FieldLimit ) {	VLAN_TransCtrl_U VlanSetMode;

⌨️ 快捷键说明

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