📄 sf_api.c
字号:
/************************************************************************ * * * 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 + -