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