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

📄 sf_api.c

📁 华为 HI3510 BOOTLOADER HIBOOT 源码包
💻 C
📖 第 1 页 / 共 5 页
字号:
/************************************************************************ *                                                                      * *                          SF_API.C                                  	* *                                                                      * *  Project Code:       SD592  SF                                       	* *  Create Date:        2005/1/5                                      	* *  Author:             	tangbenbing                                     * *  Modify Date:        2005/5/5                                                * *  Document:                                                           * *  Function:                                                           * *  Others:                                                             * *----------------------------------------------------------------------* *                                                                      * * Copyright 2005-20** SD592 Team HuaWei Tech, Inc.  					* *                     ALL RIGHTS RESERVED                              * *                                                                      * *----------------------------------------------------------------------* ************************************************************************/#include <linux-adapter.h>#ifdef __U_BOOT_OSHAL_NET__#include <config.h>#else#include <linux/config.h>#include <linux/module.h>#include <linux/errno.h>#include <linux/netdevice.h>#include <linux/etherdevice.h>#include <linux/kernel.h>#include <linux/types.h>#include <linux/fcntl.h>#include <linux/interrupt.h>#include <linux/ioport.h>#include <linux/in.h>#include <linux/skbuff.h>#include <linux/slab.h>#include <linux/spinlock.h>#include <linux/string.h>#include <linux/init.h>#include <linux/bitops.h>#include <linux/vmalloc.h>#include <linux/string.h>#include <asm/system.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/delay.h>#endif /* __U_BOOT_OSHAL_NET__ */#include "SF_TypeDef.h"#include "SF_Reg.h"#include "SF_RegStruct.h"#include "hisilicon-sf.h"/*#ifdef SfTest*/#if 1UINT32 outinfor = 0;UINT8 OutBinary[32];#endif#define ETH_FRAME_LEN_MIN	60 //the min length of frame//adwei#define printf(...)//#define DEBUG_FRAME_TRANS#if 0void memd(void* p, int len){	unsigned char* mem=(unsigned char*)p;	int i;	for(i=0; i<len; i++)	{		if(!(i%16))			printf("\n0x%04X:",i);		if(!(i%8))			printf(" ");		printf("%02X",mem[i]);	}}#endif#if 0#define SF_Print printf#undef Vxworks#ifdef Vxworks#include "vxWorks.h"#include "config.h"#include "intLib.h"#include "semLib.h"#include "taskLib.h"#include "logLib.h"#define SF_Print printf#endif#ifdef WinCE#undef SfTest#endif#ifdef Linux#define SF_Print printk#endif#ifdef SfTestUINT32 outinfor = 0;UINT8 OutBinary[32];#endif#endif#if 0#endif#if 0/*declare the function that defined in this file*/UINT32 Drv_Frame_CPUTransmit (UINT32 u32Cnt, UINT32 u32C2PortNo, UINT32 u32SpecFrame,	 UINT32 u32TagOut, UINT32 u32FrameLen, UINT32 u32TagIn,	 UINT32 u32Prior, UINT32 *pu32FrameTransmitData);UINT32 D_CheckDivFrame(UINT32 *pi32FrameAddr);	 void D_FillDivInf(UINT32 ui8FrameType, UINT32 ui32Length, UINT32 *pi32FrameAddr,struct S_DivPKT *pSDivInf);UINT32 D_DivFrameAddQueue(struct S_DivPKT *pSDivInf);UINT32 D_InsteadDMAC(UINT32 *pu32DIP, UINT32 *pu32DMACH16,  UINT32 *pu32DMACL32);UINT32 ARP_SendFrame(UINT32 u32DIP, UINT32 u32DMACH16, UINT32 u32DMACL32);UINT32 D_DelUnPKT(UINT32 u32DIP);UINT32 D_CheckNeedARPFrame(UINT32 *pi32FrameAddr, UINT32 u32ReceiveFrameLength);UINT32 CPU_ARPFrameSend(UINT32 DIP);UINT32 D_StatPPPoETcpUdpNo(UINT32 *pi32FrameAddr);/*==============================================*/#endif/*=======================================================================*				SF common function=======================================================================*//*======================================================================= *  函数名称:void SF_FormSearchFailControl(In UINT32 u32DownIPMAC, In UINT32 u32DownPortMap, In UINT32 u32UpPortMap,  In UINT32 u32DownDivMap, In UINT32 u32UpDivMap)   *  初稿完成:2005/5/14   *  作    者:   *  函数功能:查找各个表没有找到的时候的处理模式。1表示发给cpu,0表示直接丢弃 *  输入参数:u32DownIPMAC->下行口ipmac表查找失败控制 *			u32DownPortMap->下行口portmap表查找失败控制 *			u32UpPortMap->上行口portmap表查找失败控制 *			u32DownDivMap->下行口divmap表查找失败控制 *			u32UpDivMap->上行口divmap表查找失败控制 *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static void SF_FormSearchFailControl(In UINT32 u32DownIPMAC, In UINT32 u32DownPortMap, In UINT32 u32UpPortMap,  In UINT32 u32DownDivMap, In UINT32 u32UpDivMap)  {	/*Write IP-MAC IP&MAC Addr.*/		NATControl_U FormSearchFail;	UINT32 u32SetDefaultTramsportEnable;	/*enable the default frame handle mode , enable to send to cpu to handle, up port*/	u32SetDefaultTramsportEnable = *SF_IQM_DIO(0);	u32SetDefaultTramsportEnable = u32SetDefaultTramsportEnable | 0x1;	*SF_IQM_DIO(0) = u32SetDefaultTramsportEnable;	/*enable the default frame handle mode , enable to send to cpu to handle, down port*/	u32SetDefaultTramsportEnable = *SF_IQM_DIO(1);	u32SetDefaultTramsportEnable = u32SetDefaultTramsportEnable | 0x1;	*SF_IQM_DIO(1) = u32SetDefaultTramsportEnable;	/*set default frame handle mode */	FormSearchFail.w32 = *SF_IQM_DIO(9);	FormSearchFail.bits.down_fdiv_ctrl = u32DownDivMap;	FormSearchFail.bits.up_fdiv_ctrl = u32UpDivMap;	FormSearchFail.bits.down_fpm_ctrl = u32DownPortMap;	FormSearchFail.bits.up_fpm_ctrl = u32UpPortMap;	FormSearchFail.bits.fim_ctrl = u32DownIPMAC;	*SF_IQM_DIO(9) = FormSearchFail.w32;}/*======================================================================= *  函数名称:void SF_IPUnTCPUDPReportDealEnable (In UINT32 u32IPUnTCPUDPDealEnable)  *  初稿完成:2005/1/11    *  作    者:   *  函数功能:普通IP报文(非tcp、udp)处理控制,1发cpu,0 丢 *  输入参数: u32UpIPUnTCPUDPDealEnable:上行口普通IP报文(非tcp、udp)处理控制 *			u32DownIPUnTCPUDPDealEnable:下行口普通IP报文(非tcp、udp)处理控制 *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static void SF_IPUnTCPUDPReportDealEnable (In UINT32 u32UpIPUnTCPUDPDealEnable,In UINT32 u32DownIPUnTCPUDPDealEnable) {	NATControl_U IPUnTCPUDPDeal;		IPUnTCPUDPDeal.w32 = *SF_IQM_DIO(9);	IPUnTCPUDPDeal.bits.down_nmip_ctrl = u32DownIPUnTCPUDPDealEnable;	IPUnTCPUDPDeal.bits.up_nmip_ctrl = u32UpIPUnTCPUDPDealEnable;	*SF_IQM_DIO(9) = IPUnTCPUDPDeal.w32;}/*======================================================================= *  函数名称:void SF_NATSetPortHigh4 (In UINT32 u32PortHigh4Bits) *  初稿完成:2005/1/6    *  作    者:   *  函数功能:设置协议端口号高4位 *  输入参数: *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static void SF_NATSetPortHigh4 (In UINT32 u32PortHigh4Bits){	*SF_NAT_DIO(1) = (u32PortHigh4Bits >> 28);}/*======================================================================= *  函数名称:  void TChangeHEXToBin(In UINT32 u32Hex, Out UINT8 u8Bin[32]) *  初稿完成:       *  作    者:            *  函数功能:  用于将UINT32数据转换成二进制字符串输出 *  输入参数:  UINT32 数据 *  输出参数:  二进制数据字符串 *  返回类型:      *  其他说明:   *  调用函数:   *  主调函数:   *========================================================================*/static void TChangeHEXToBin(In UINT32 u32Hex, Out UINT8 u8Bin[32]){	UINT8 i = 0, u8Cnt = 32;	UINT32 u32ForHelpCheck = 0x80000000;		while (u8Cnt > 0)	{		if (u32Hex & u32ForHelpCheck)		{			u8Bin[i] = '1';		}		else			u8Bin[i] = '0';		u32ForHelpCheck = u32ForHelpCheck >> 1;		u8Cnt --;		i ++;	} }/*=======================================================================*					配置端口和获取端口状态以及统计信息功能=======================================================================*//*======================================================================= *  函数名称:void SF_SetPortWorkMode(In UINT8 u8PortNo, In UINT32 u32MonitEnable, In UINT32 u32WorkMode)  *  初稿完成:2005/1/5    *  作    者:   *  函数功能:设置端口的工作模式 *			(包括普通模式,NAT模式,监听模式,以及在监听模式下监听端口的选择) *  输入参数:u8PortNo--监听端口选择,1选择上行口为监听端口,缺省为0; *			u32MonitEnable--监听使能信号,1表示进行监听; *			u32WorkMode--SF工作模式选择,00对应普通模式,01对应NAT模式,缺省为00. *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static void SF_SetPortWorkMode(In UINT8 u8PortNo, In UINT32 u32MonitEnable, In UINT32 u32WorkMode){	Set_PortMode_PPPOE_U Port_SetWorkMode;	Port_SetWorkMode.w32 = * ( UINT32 * ) SF_GLB_DIO(11);	Port_SetWorkMode.bits.mode = u32WorkMode;	Port_SetWorkMode.bits.monitor_en = u32MonitEnable;	Port_SetWorkMode.bits.monitor_port = u8PortNo;	* ( UINT32 * ) SF_GLB_DIO(11) = Port_SetWorkMode.w32;}/*======================================================================= *  函数名称:void SF_SetExternRamEndian(In UINT32 u32Value)  *  初稿完成:2005/1/5    *  作    者:   *  函数功能:配置SF片外数据大小端转换使能 *  输入参数:u32Value-1表示小端;0表示大端 *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static void SF_SetExternRamEndian(In UINT32 u32Value) {	SF2ExtRam_Endian_U ExternRamEndian;	ExternRamEndian.w32 = * ( UINT32 * ) SF_BM_DIO(17);	ExternRamEndian.bits.swap_en = u32Value;	* ( UINT32 * ) SF_BM_DIO(17) = ExternRamEndian.w32;}/*======================================================================= *  函数名称:UINT8 SF_ClearPortCountInformation( In UINT8 u8PortNo, In UINT32 u32Value)  *  初稿完成:2005/1/5    *  作    者:   *  函数功能:清除指定端口列表的计数信息 *  输入参数:端口号 *           需要清除统计信息的端口置1,否则置0 *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/static UINT8 SF_ClearPortCountInformation( In UINT8 u8PortNo, In UINT32 u32Value){	Port_Conf_U ClearCountInf;	if (u8PortNo == 0)	/*down port*/	{		ClearCountInf.w32 = *SF_MAC0_DIO(0);		ClearCountInf.bits.cntr_clr_all = u32Value;		*SF_MAC0_DIO(0) = ClearCountInf.w32;		ClearCountInf.bits.cntr_clr_all = 0;		*SF_MAC0_DIO(0) = ClearCountInf.w32;		#ifdef SfTest                                      			SF_Print("SF_MAC0_DIO(0) clear statistic ok!\r\n");   		#endif                                             		return Success;	}	else if (u8PortNo == 1) /*up port*/	{		ClearCountInf.w32 = *SF_MAC0_DIO(4);		ClearCountInf.bits.cntr_clr_all = u32Value;		*SF_MAC0_DIO(4) = ClearCountInf.w32;		ClearCountInf.bits.cntr_clr_all = 0;

⌨️ 快捷键说明

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