📄 sf_api.c
字号:
VlanSetMode.bits.disable_vlan = u32TransCtrl; VlanSetMode.bits.vlan_mode = u32FieldLimit; *SF_IQM_DIO(4) = VlanSetMode.w32; #ifdef SfTest outinfor = * SF_IQM_DIO(4); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_IQM_DIO(4)-SF VLAN transmit setting is %s\n",OutBinary); #endif}/*======================================================================= * 函数名称:UINT32 SF_SetVlanOutputFrameTagMod(In UINT32 u32TagType, In UINT32 u32TagPort1, In UINT32 u32TagPort0 ) * 初稿完成:2005/1/6 * 作 者: * 函数功能:帧输出帧的tag格式的选择 * 对上下行口是否要往发送帧中添加VLAN tag控制进行设定 * 输入参数:输出帧的tag格式选择标志 * 上下行口输出是否添加tag控制标志 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static UINT32 SF_SetVlanOutputFrameTagMod(In UINT32 u32TagType, In UINT32 u32TagPort1, In UINT32 u32TagPort0 ) { Frame_SetOutTag_U VlanFraTagMode; VlanFraTagMode.w32 = *SF_IQM_DIO(3); VlanFraTagMode.bits.tag_type = u32TagType; VlanFraTagMode.bits.tag_port1 = u32TagPort1; VlanFraTagMode.bits.tag_port0 = u32TagPort0; *SF_IQM_DIO(3) = VlanFraTagMode.w32; #ifdef SfTest outinfor = * SF_IQM_DIO(3); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_IQM_DIO(3)-SF output frame tag setting is %s\n",OutBinary); #endif return Success;}/*======================================================================= * 函数名称:UINT32 SF_SetVlanFrameReceiveMod( In UINT8 u8PortNo, In UINT32 u32FrameFormat) * 初稿完成:2005/1/6 * 作 者: * 函数功能:配置端口可接收帧VLAN格式控制 * 输入参数:端口号 * 可接收的帧格式标志位: * 端口1可接收帧VLAN格式控制,缺省为3'b000 * 3'b001:只接收不带TAG的帧和优先级帧; * 3'b010:只接收不带TAG的帧和TAG有效帧; * 3'b011:只接收带TAG的帧; * 3'b100:只能接收TAG有效帧; * 3'b101:可以接收VID为FID的帧; * 3'b110:可以接收所有的帧; * 其他:可以接收所有的帧。 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static UINT32 SF_SetVlanFrameReceiveMod( In UINT8 u8PortNo, In UINT32 u32FrameFormat) { VLAN_ReceiFraCtrl_U SetFraRecMode; if (u8PortNo == 0) { SetFraRecMode.w32 = *SF_IQM_DIO(5); SetFraRecMode.bits.vlanmode_port0 = u32FrameFormat; *SF_IQM_DIO(5) = SetFraRecMode.w32; #ifdef SfTest outinfor = * SF_IQM_DIO(5); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_IQM_DIO(5)-SF p0 can receive VLAN frame formation is %s\n",OutBinary); #endif return Success; } else if (u8PortNo == 1) { SetFraRecMode.w32 = *SF_IQM_DIO(5); SetFraRecMode.bits.vlanmode_port1 = u32FrameFormat; *SF_IQM_DIO(5) = SetFraRecMode.w32; #ifdef SfTest outinfor = * SF_IQM_DIO(5); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_IQM_DIO(5)-SF p1 can receive VLAN frame formation is %s\n",OutBinary); #endif return Success; } else { #ifdef SfTest SF_Print("SF can receive VLAN frame formation set error\n"); #endif return Failure; }}/*======================================================================= * 函数名称:UINT32 SF_SetSendUnknownVlanWithTag( In UINT32 u32Port0, In UINT32 u32Port1) * 初稿完成:2005/1/6 * 作 者: * 函数功能:用于设置未知VLAN对应帧在输出的时候是否带tag * 输入参数:端口的配置值 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static UINT32 SF_SetSendUnknownVlanWithTag( In UINT32 u32Port0, In UINT32 u32Port1) { UNKnVLAN_Ctrl_U UnkVlanTagCtrl; UnkVlanTagCtrl.w32 = *SF_IQM_DIO(6); UnkVlanTagCtrl.bits.unkvlan_tag = ((u32Port1 << 1) | (u32Port0)); *SF_IQM_DIO(6) = UnkVlanTagCtrl.w32; #ifdef SfTest outinfor = * SF_IQM_DIO(6); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_IQM_DIO(6)-SF add tag to the output frame or not: %s\n",OutBinary); #endif return Success;}/*======================================================================= * 函数名称:UINT32 SF_SetUnknownVlanReceiveEnable(In UINT32 u32Port0, In UINT32 u32Port1) * 初稿完成:2005/1/6 * 作 者: * 函数功能:用于设置端口是否允许接收未知VLAN * 输入参数:端口的配置值 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static UINT32 SF_SetUnknownVlanReceiveEnable(In UINT32 u32Port0, In UINT32 u32Port1) { UNKnVLAN_Ctrl_U UnkVlanRecCtrl; UnkVlanRecCtrl.w32 = *SF_IQM_DIO(6); UnkVlanRecCtrl.bits.pass_mode = ((u32Port1 << 1) | (u32Port0)); *SF_IQM_DIO(6) = UnkVlanRecCtrl.w32; #ifdef SfTest outinfor = * SF_IQM_DIO(6); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_IQM_DIO(6)-SF port can receive unknown vlan frame or not: %s\n",OutBinary); #endif return Success;}/*======================================================================= * 函数名称:UINT32 SF_TransmitUnknownVlanToPortWithTag(In UINT32 u32PortD, In UINT32 u32PortU, In UINT32 u32CPU) * 初稿完成:2005/1/6 * 作 者: * 函数功能:未知VLAN对应的Tag格式控制,输出到相应的端口带不带VLAN Tag。 * 输入参数:端口的配置值 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static UINT32 SF_TransmitUnknownVlanToPortWithTag(In UINT32 u32PortD, In UINT32 u32PortU, In UINT32 u32CPU) { UNKnVLAN_Ctrl_U UnkVlanTranCtrl; UnkVlanTranCtrl.w32 = *SF_IQM_DIO(6); UnkVlanTranCtrl.bits.unkvlan_ctrl = ((u32CPU << 2) | (u32PortU << 1) | (u32PortD)); *SF_IQM_DIO(6) = UnkVlanTranCtrl.w32; #ifdef SfTest outinfor = * SF_IQM_DIO(6); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_IQM_DIO(6)-SF transmit the unknown vlan frame to the port or not: %s\n",OutBinary); #endif return Success;}/*======================================================================= * 函数名称:UINT32 SF_ReceiveUnknownVlanMember (In UINT32 u32Port0, In UINT32 u32Port1) * 初稿完成:2005/1/6 * 作 者: * 函数功能:用于设置端口是否允许接收未知VLAN成员 * 输入参数:端口的配置值 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static UINT32 SF_ReceiveUnknownVlanMember (In UINT32 u32Port0, In UINT32 u32Port1) { UNKnVLANMem_Ctrl_U UnkVlanMemRecCtrl; UnkVlanMemRecCtrl.w32 = *SF_IQM_DIO(7); UnkVlanMemRecCtrl.bits.rxfilter = ((u32Port1 << 1) | (u32Port0)); *SF_IQM_DIO(7) = UnkVlanMemRecCtrl.w32; #ifdef SfTest outinfor = * SF_IQM_DIO(7); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_IQM_DIO(7)-SF port can receive unknown vlan member frame or not: %s\n",OutBinary); #endif return Success;}/*======================================================================= * 函数名称:UINT32 SF_ForceTransmitUnknownVlanMember (In UINT32 u32PortD, In UINT32 u32PortU, In UINT32 u32CPU) * 初稿完成:2005/1/6 * 作 者: * 函数功能:用于设置端口是否将未知VLAN成员帧强制转发到该端口 * 输入参数:端口的配置值 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static UINT32 SF_ForceTransmitUnknownVlanMember (In UINT32 u32PortD, In UINT32 u32PortU, In UINT32 u32CPU) { UNKnVLANMem_Ctrl_U UnkVlanMemTraCtrl; UnkVlanMemTraCtrl.w32 = *SF_IQM_DIO(7); UnkVlanMemTraCtrl.bits.unkmem_ctrl = ((u32CPU << 2) | (u32PortU << 1) | (u32PortD)); *SF_IQM_DIO(7) = UnkVlanMemTraCtrl.w32; #ifdef SfTest outinfor = * SF_IQM_DIO(7); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_IQM_DIO(7)-SF transmit the unknown vlan member frame to the port or not: %s\n",OutBinary); #endif return Success;}/*======================================================================= * 函数名称:UINT32 SF_ReadUnknownVlanMemberSourcePortVID( Out UINT32 *pu32RUVMSPtID, Out UINT32 *pu32RUVMVlanID) * 初稿完成:2005/1/6 * 作 者: * 函数功能:用于读取未知VLAN成员对应源端口号/未知VLAN成员对应VLAN ID * 输入参数: * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static UINT32 SF_ReadUnknownVlanMemberSourcePortVID( Out UINT32 *pu32RUVMSPtID, Out UINT32 *pu32RUVMVlanID) { UNKnVLAN_Infor_U RUnkVlanMemSPtVID; RUnkVlanMemSPtVID.w32 = *SF_IQM_DIO(8); *pu32RUVMSPtID = RUnkVlanMemSPtVID.bits.unkmemport; *pu32RUVMVlanID = RUnkVlanMemSPtVID.bits.unkmemid; #ifdef SfTest SF_Print("SF_IQM_DIO(8)-SF the port number of the unknown vlan member is %ld\nthe unknown vlan id is %ld\n",*pu32RUVMSPtID,*pu32RUVMVlanID); #endif return Success;}/*======================================================================= * 函数名称:UINT32 SF_ReadUnknownVlanVID(Out UINT32 *pu32RUVVlanID) * 初稿完成:2005/1/6 * 作 者: * 函数功能:用于读取未知VLAN对应VLAN ID * 输入参数: * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static UINT32 SF_ReadUnknownVlanVID(Out UINT32 *pu32RUVVlanID) { UNKnVLAN_Infor_U RUnkVlanID; RUnkVlanID.w32 = *SF_IQM_DIO(8); *pu32RUVVlanID = RUnkVlanID.bits.unkvlanid; #ifdef SfTest SF_Print("SF_IQM_DIO(8)-SF the unknown vlan id is %ld\n",*pu32RUVVlanID); #endif return Success;} /*======================================================================= * 函数名称:UINT32 SF_SetPortVlanID(In UINT8 u8PortNo, In UINT32 u32VlanID) * 初稿完成:2005/1/6 * 作 者: * 函数功能:设置对应端口的VLAN ID * 输入参数: * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static UINT32 SF_SetPortVlanID(In UINT8 u8PortNo, In UINT32 u32VlanID) { Set_Port_VLANID_U SetPortVlanID; if (u8PortNo == 0) { SetPortVlanID.w32 = *SF_IERF_DIO(0); SetPortVlanID.bits.port_vid_0 = u32VlanID; *SF_IERF_DIO(0) = SetPortVlanID.w32; #ifdef SfTest outinfor = * SF_IERF_DIO(0); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_IERF_DIO(0)-SF set port0 vlan id is: %s\n",OutBinary); #endif return Success; } else if (u8PortNo == 1) { SetPortVlanID.w32 = *SF_IERF_DIO(0); SetPortVlanID.bits.port_vid_1 = u32VlanID; *SF_IERF_DIO(0) = SetPortVlanID.w32; #ifdef SfTest outinfor = * SF_IERF_DIO(0); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_IERF_DIO(0)-SF set port1 vlan id is: %s\n",OutBinary); #endif return Success; } else { #ifdef SfTest SF_Print("SF set port vlan id error\n"); #endif return Failure; }}/*======================================================================= * 函数名称: void SF_SetDivReportPacketAging (In UINT32 u32ReflashTimeCnt, In UINT32 u32FormLiveTime) * 初稿完成:2005/1/7 * 作 者: * 函数功能:用于配置分片报文表老化时间 * 输入参数:表项更新时间计数值; * 表项生存时间 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static void SF_SetDivReportPacketAging (In UINT32 u32ReflashTimeCnt, In UINT32 u32FormLiveTime) { Set_DivMesAgeTime_U SetDivMesAging; SetDivMesAging.w32 = *SF_NAT_DIO(7); SetDivMesAging.bits.div_age_time = ((u32ReflashTimeCnt << 8) | u32FormLiveTime); *SF_NAT_DIO(7) = SetDivMesAging.w32; #ifdef SfTest outinfor = * SF_NAT_DIO(7); TChangeHEXToBin(outinfor,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -