📄 sf_api.c
字号:
*SF_MAC0_DIO(4) = ClearCountInf.w32; #ifdef SfTest SF_Print("SF_MAC0_DIO(4) clear statistic-Set ok!\r\n"); #endif return Success; } else /*Error port*/ { #ifdef SfTest SF_Print("SF_MAC0_DIO(0/4)-clear statistic error!\r\n"); #endif return Failure; }}/*======================================================================= * 函数名称:UINT32 SF_SetLoopBackEnable( In UINT8 u8PortNo, In UINT32 u32ExLoop, In UINT32 u32InLoop) * 初稿完成:2005/1/5 * 作 者: * 函数功能:设置内环回和外环回使能 * 输入参数:使能-1,否则-0 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static UINT32 SF_SetLoopBackEnable( In UINT8 u8PortNo, In UINT32 u32ExLoop, In UINT32 u32InLoop){ Port_Conf_U SetLoopBack; if (u8PortNo == 0) /*down port*/ { SetLoopBack.w32 = *SF_MAC0_DIO(0); SetLoopBack.bits.ex_loop_en = u32ExLoop; SetLoopBack.bits.in_loop_en = u32InLoop; *SF_MAC0_DIO(0) = SetLoopBack.w32; #ifdef SfTest SF_Print("SF_MAC0_DIO(0) set loop back ok!\r\n"); #endif return Success; } else if (u8PortNo == 1) /*up port*/ { SetLoopBack.w32 = *SF_MAC0_DIO(4); SetLoopBack.bits.ex_loop_en = u32ExLoop; SetLoopBack.bits.in_loop_en = u32InLoop; *SF_MAC0_DIO(4) = SetLoopBack.w32; #ifdef SfTest SF_Print("SF_MAC0_DIO(4) set loop back ok!\r\n"); #endif return Success; } else /*Error port*/ { #ifdef SfTest SF_Print("SF_MAC0_DIO(0/4)-set loop back error!\r\n"); #endif return Failure; }}/*======================================================================= * 函数名称:UINT32 SF_FetchPortStatisticInformation(In UINT8 u8PortNo, In UINT8 u8Index, Out UINT32 *pu32ValueAddr) * 初稿完成:2005/1/5 * 作 者: * 函数功能:读取指定端口列表的统计信息 * 输入参数:端口号 * 读取统计信息的索引值 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static UINT32 SF_FetchPortStatisticInformation( In UINT8 u8PortNo, In UINT8 u8Index, Out UINT32 *pu32ValueAddr){ Port_Count_U FetchCnt0; Port_Rec_Cnt_U FetchCnt1; Port_Tra_Cnt_U FetchCnt2; if (u8PortNo == 0) /*down port*/ { FetchCnt0.w32 = * ( UINT32 *) SF_MAC0_DIO(1); FetchCnt1.w32 = * ( UINT32 *) SF_MAC0_DIO(2); FetchCnt2.w32 = * ( UINT32 *) SF_MAC0_DIO(3); switch ( u8Index ) { case 1 : *pu32ValueAddr = FetchCnt0.bits.txcrcbad_cnt; break; case 2 : *pu32ValueAddr = FetchCnt0.bits.txcrcok_cnt; break; case 3 : *pu32ValueAddr = FetchCnt0.bits.txeof_cnt; break; case 4 : *pu32ValueAddr = FetchCnt0.bits.txsof_cnt; break; case 5 : *pu32ValueAddr = FetchCnt0.bits.rxcrcbad_cnt; break; case 6 : *pu32ValueAddr = FetchCnt0.bits.rxcrcok_cnt; break; case 7 : *pu32ValueAddr = FetchCnt0.bits.rxeof_cnt; break; case 8 : *pu32ValueAddr = FetchCnt0.bits.rxsof_cnt; break; case 9 : *pu32ValueAddr = FetchCnt1.bits.cntr_stat_rx; break; case 10 : *pu32ValueAddr = FetchCnt2.bits.cntr_stat_tx; break; default : *pu32ValueAddr = 0; return Failure; } #ifdef SfTest SF_Print("SF_MAC0_DIO(1/2/3)-SF port0 count number is %ld\n",*(UINT32 *)pu32ValueAddr); #endif return Success; } else if (u8PortNo == 1) /*up port*/ { FetchCnt0.w32 = * ( UINT32 *) SF_MAC0_DIO(5); FetchCnt1.w32 = * ( UINT32 *) SF_MAC0_DIO(6); FetchCnt2.w32 = * ( UINT32 *) SF_MAC0_DIO(7); switch ( u8Index ) { case 1 : *pu32ValueAddr = FetchCnt0.bits.rxcrcbad_cnt; break; case 2 : *pu32ValueAddr = FetchCnt0.bits.rxcrcok_cnt; break; case 3 : *pu32ValueAddr = FetchCnt0.bits.rxeof_cnt; break; case 4 : *pu32ValueAddr = FetchCnt0.bits.rxsof_cnt; break; case 5 : *pu32ValueAddr = FetchCnt0.bits.txcrcbad_cnt; break; case 6 : *pu32ValueAddr = FetchCnt0.bits.txcrcok_cnt; break; case 7 : *pu32ValueAddr = FetchCnt0.bits.txeof_cnt; break; case 8 : *pu32ValueAddr = FetchCnt0.bits.txsof_cnt; break; case 9 : *pu32ValueAddr = FetchCnt1.bits.cntr_stat_rx; break; case 10 : *pu32ValueAddr = FetchCnt2.bits.cntr_stat_tx; break; default : *pu32ValueAddr = 0; return Failure; } #ifdef SfTest SF_Print("SF_MAC0_DIO(1/2/3)-SF port1 count number is %ld\n",*pu32ValueAddr); #endif return Success; } else /*Error port*/ { #ifdef SfTest SF_Print("SF_MAC0_DIO(1/2/3/5/6/7)-SF set error\n"); #endif return Failure; }}#if 0/*======================================================================= * 函数名称:void SF_PortRingback( In UINT8 u8PortNo, In UINT8 u8RingbackSet) * 初稿完成:2005/1/5 * 作 者: * 函数功能:使能/禁止端口的内环回/外环回 * 输入参数:内环回=2;外环回=1;禁止环回=0 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/void SF_PortRingback( In UINT8 u8PortNo, In UINT32 u32RingbackSet) { if ( u32RingbackSet != 0 ) { if (u8PortNo == 0) /*Down port*/ { *SF_MAC0_DIO(0) = *SF_MAC0_DIO(0) | (u32RingbackSet << 20); } else if (u8PortNo == 1) /*Down port*/ { *SF_MAC0_DIO(4) = *SF_MAC0_DIO(4) | (u32RingbackSet << 20); } else { #ifdef SfTest SF_Print("SF ring mode set error\n"); #endif } } else { if (u8PortNo == 0) /*Down port*/ { *SF_MAC0_DIO(0) = *SF_MAC0_DIO(0) & ~(3 << 20); } else if (u8PortNo == 1) /*Down port*/ { *SF_MAC0_DIO(4) = *SF_MAC0_DIO(4) & ~(3 << 20); } else { #ifdef SfTest SF_Print("SF ring mode set error\n"); #endif } }}#endif/*======================================================================= * 函数名称:void SF_ReadSpeedLinkDuplexMode(In UINT8 u8PortNo, Out UINT8 *u8Speed, Out UINT8 *u8Link, Out UINT8 *u8Duplex) * 初稿完成:2005/1/6 * 作 者: * 函数功能:读取端口的速度、链接状态、双工模式 * 输入参数:端口号 * 输出参数: 速度(1-100M,0-10M)、链接状态(1-链接,0-无链接)、双工模式(1-双工,0-半双工)对应的指针数据, * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static void SF_ReadSpeedLinkDuplexMode(In UINT8 u8PortNo, Out UINT32 *pu32Speed, Out UINT32 *pu32Link, Out UINT32 *pu32Duplex) { Set_CPUSpeLinDup_U ReadSpeLinDupMode; if (u8PortNo == 0)/*down port*/ { ReadSpeLinDupMode.w32 = *SF_MAC_DIO(4); *pu32Speed = (ReadSpeLinDupMode.bits.down_speed_stat_dio); *pu32Duplex = (ReadSpeLinDupMode.bits.down_duplex_stat_dio); *pu32Link = (ReadSpeLinDupMode.bits.down_link_stat_dio); #ifdef SfTest SF_Print("SF p0 speed is %ld\nSF duplex is %ld\nSF link is %ld\n",*pu32Speed,*pu32Duplex,*pu32Link); #endif } else if (u8PortNo == 1)/*up port*/ { ReadSpeLinDupMode.w32 = *SF_MAC_DIO(4); *pu32Speed = (ReadSpeLinDupMode.bits.up_speed_stat_dio); *pu32Duplex = (ReadSpeLinDupMode.bits.up_duplex_stat_dio); *pu32Link = (ReadSpeLinDupMode.bits.up_link_stat_dio); #ifdef SfTest SF_Print("SF p1 speed is %ld\nSF duplex is %ld\nSF link is %ld\n",*pu32Speed,*pu32Duplex,*pu32Link); #endif } else { #ifdef SfTest SF_Print("SF port speed/duplex/link set error\n"); #endif }}/*======================================================================= * 函数名称:void SF_SetSpeedLinkDuplexMode(In UINT8 u8PortNo, In UINT32 u32Speed, In UINT32 u32Link, In UINT32 u32Duplex) * 初稿完成:2005/1/6 * 作 者: * 函数功能:CPU设置速度、链接状态、双工模式 * 输入参数:端口号,速度(1-100M,0-10M)、链接状态(1-链接,0-无链接)、双工模式(1-双工,0-半双工)对应的指针数据 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/void SF_SetSpeedLinkDuplexMode(In UINT8 u8PortNo, In UINT32 u32Speed, In UINT32 u32Link, In UINT32 u32Duplex){ Set_CPUSpeLinDup_U SetSpeLinDupMode; if (u8PortNo == 0)/*down port*/ { SetSpeLinDupMode.w32 = *SF_MAC_DIO(4); SetSpeLinDupMode.bits.down_speed_stat_dio = u32Speed; SetSpeLinDupMode.bits.down_duplex_stat_dio = u32Duplex; SetSpeLinDupMode.bits.down_link_stat_dio = u32Link; *SF_MAC_DIO(4) = SetSpeLinDupMode.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC_DIO(4); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC_DIO(4)-SF p0 CPU set work mode is %s\n",OutBinary); #endif } else if (u8PortNo == 1)/*up port*/ { SetSpeLinDupMode.w32 = *SF_MAC_DIO(4); SetSpeLinDupMode.bits.up_speed_stat_dio = u32Speed; SetSpeLinDupMode.bits.up_duplex_stat_dio = u32Duplex; SetSpeLinDupMode.bits.up_link_stat_dio = u32Link; *SF_MAC_DIO(4) = SetSpeLinDupMode.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC_DIO(4); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC_DIO(4)-SF p1 CPU set work mode is %s\n",OutBinary); #endif } else { #ifdef SfTest SF_Print("SF CPU set work mode error\n"); #endif }}/*======================================================================= * 函数名称:void SF_ReadSpeedLinkDuplexChangeFlag(In UINT8 u8PortNo, Out UINT32 *pu32Speed, Out UINT32 *pu32Link, Out UINT32 *pu32Duplex) * 初稿完成:2005/1/6 * 作 者: * 函数功能:读取速度、链接状态、双工模式改变标志 * 输入参数:端口号,速度(1-100M,0-10M)、链接状态(1-链接,0-无链接)、双工模式(1-双工,0-半双工)改变指示对应的指针数据 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static void SF_ReadSpeedLinkDuplexChangeFlag(In UINT8 u8PortNo, Out UINT32 *pu32Speed, Out UINT32 *pu32Link, Out UINT32 *pu32Duplex){ Changed_SpeLinDup_U ReadSpeLinDupChangeFlag; if (u8PortNo == 0)/*down port*/ { ReadSpeLinDupChangeFlag.w32 = *SF_MAC_DIO(6); *pu32Speed = (ReadSpeLinDupChangeFlag.bits.down_speed_stat_ch); *pu32Duplex = (ReadSpeLinDupChangeFlag.bits.down_duplex_stat_ch); *pu32Link = (ReadSpeLinDupChangeFlag.bits.down_link_stat_ch); #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC_DIO(6); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC_DIO(6)-SF p0 read mode change flag is %s\n",OutBinary); #endif } else if (u8PortNo == 1)/*up port*/ { ReadSpeLinDupChangeFlag.w32 = *SF_MAC_DIO(6); *pu32Speed = (ReadSpeLinDupChangeFlag.bits.up_speed_stat_ch); *pu32Duplex = (ReadSpeLinDupChangeFlag.bits.up_duplex_stat_ch); *pu32Link = (ReadSpeLinDupChangeFlag.bits.up_link_stat_ch); #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC_DIO(6); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC_DIO(6)-SF p1 read mode change flag is %s\n",OutBinary); #endif } else { #ifdef SfTest SF_Print("SF CPU read mode change flag error\n"); #endif }}/*======================================================================= * 函数名称:void SF_ClearSpeedLinkDuplexChangeFlag(In UINT8 u8PortNo, In UINT32 u32Speed, In UINT32 u32Link, In UINT32 u32Duplex) * 初稿完成:2005/1/6 * 作 者: * 函数功能:清除速度、链接状态、双工模式改变标志 * 输入参数:端口号,速度(1-100M,0-10M)、链接状态(1-链接,0-无链接)、双工模式(1-双工,0-半双工)改变指示清空对应的指针数据。 * 写1清空 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static void SF_ClearSpeedLinkDuplexChangeFlag(In UINT8 u8PortNo, In UINT32 u32Speed, In UINT32 u32Link, In UINT32 u32Duplex){ Changed_SpeLinDup_U ClearSpeLinDupChangeFlag; if (u8PortNo == 0)/*down port*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -