📄 sf_api.c
字号:
{ ClearSpeLinDupChangeFlag.w32 = *SF_MAC_DIO(6); ClearSpeLinDupChangeFlag.bits.down_speed_stat_ch = u32Speed; ClearSpeLinDupChangeFlag.bits.down_duplex_stat_ch = u32Duplex; ClearSpeLinDupChangeFlag.bits.down_link_stat_ch = u32Link; *SF_MAC_DIO(6) = ClearSpeLinDupChangeFlag.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC_DIO(6); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC_DIO(6)-SF p0 CPU clear mode change flag is %s\n",OutBinary); #endif } else if (u8PortNo == 1)/*up port*/ { ClearSpeLinDupChangeFlag.w32 = *SF_MAC_DIO(6); ClearSpeLinDupChangeFlag.bits.up_speed_stat_ch = u32Speed; ClearSpeLinDupChangeFlag.bits.up_duplex_stat_ch = u32Duplex; ClearSpeLinDupChangeFlag.bits.up_link_stat_ch = u32Link; *SF_MAC_DIO(6) = ClearSpeLinDupChangeFlag.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC_DIO(6); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC_DIO(6)-SF p1 CPU clear mode change flag is %s\n",OutBinary); #endif } else { #ifdef SfTest SF_Print("SF CPU clear mode change flag error\n"); #endif }}/*======================================================================= * 函数名称:void SF_SetRMIIOrMII(In UINT8 u8PortNo, In UINT32 u32MIIOrRMIIMode) * 初稿完成:2005/1/6 * 作 者: * 函数功能:设置端口与PHY之间RMII与MII接口模式选择(0-MII,1-RMII) * 输入参数:端口号 * RMII/MII模式 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static void SF_SetRMIIOrMII (In UINT8 u8PortNo, In UINT32 u32MIIOrRMIIMode) { Set_RMII_MII_U SetRMIIOrMII; if (u8PortNo == 0)/*down port*/ { SetRMIIOrMII.w32 = *SF_GLB_DIO(18); SetRMIIOrMII.bits.down_mode_rmii = u32MIIOrRMIIMode; *SF_GLB_DIO(18) = SetRMIIOrMII.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_GLB_DIO(18); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_GLB_DIO(18)-SF p0 RMII/MII mode is %s\n",OutBinary); #endif } else if (u8PortNo == 1)/*up port*/ { SetRMIIOrMII.w32 = *SF_GLB_DIO(18); SetRMIIOrMII.bits.up_mode_rmii = u32MIIOrRMIIMode; *SF_GLB_DIO(18) = SetRMIIOrMII.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_GLB_DIO(18); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_GLB_DIO(18)-SF p1 RMII/MII mode is %s\n",OutBinary); #endif } else { #ifdef SfTest SF_Print("SF RMII/MII mode set error\n"); #endif }}/*======================================================================= * 函数名称:void SF_SetCntReadClean(In UINT8 u8PortNo, In UINT32 u32CntAuCleEn) * 初稿完成:2005/1/6 * 作 者: * 函数功能:设置端口统计寄存器读清空使能/禁止 * 输入参数:端口号 * 读清空设置,1->read clean enable; 0-> read clean disable. * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static void SF_SetCntReadClean(In UINT8 u8PortNo, In UINT32 u32CntAuCleEn){ Port_Conf_U SetCntAuCleEn; if (u8PortNo == 0) { SetCntAuCleEn.w32 = *SF_MAC0_DIO(0); SetCntAuCleEn.bits.cntr_rdclr_en = u32CntAuCleEn; *SF_MAC0_DIO(0) = SetCntAuCleEn.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC0_DIO(0); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC0_DIO(0)-SF p0 read clear mode is %s\n",OutBinary); #endif } else if (u8PortNo == 1) { SetCntAuCleEn.w32 = *SF_MAC0_DIO(4); SetCntAuCleEn.bits.cntr_rdclr_en = u32CntAuCleEn; *SF_MAC0_DIO(4) = SetCntAuCleEn.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC0_DIO(4); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC0_DIO(4)-SF p1 read clear mode is %s\n",OutBinary); #endif } else { #ifdef SfTest SF_Print("SF set read clear mode error\n"); #endif }}/*======================================================================= * 函数名称:void SF_SetShortFrameReceive(In UINT8 u8PortNo, In UINT32 u32ShorReceEn) * 初稿完成:2005/1/6 * 作 者: * 函数功能:设置端口短帧接收使能/禁止 * 输入参数:端口号 * 短帧接收使能->1/禁止设置->0 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static void SF_SetShortFrameReceive(In UINT8 u8PortNo, In UINT32 u32ShorReceEn){ Port_Conf_U SetShorReceEn; if (u8PortNo == 0) { SetShorReceEn.w32 = *SF_MAC0_DIO(0); SetShorReceEn.bits.rx_shframe_en = u32ShorReceEn; *SF_MAC0_DIO(0) = SetShorReceEn.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC0_DIO(0); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC0_DIO(0)-SF p0 short frame receive enable mode is %s\n",OutBinary); #endif } else if (u8PortNo == 1) { SetShorReceEn.w32 = *SF_MAC0_DIO(4); SetShorReceEn.bits.rx_shframe_en = u32ShorReceEn; *SF_MAC0_DIO(4) = SetShorReceEn.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC0_DIO(4); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC0_DIO(4)-SF p0 short frame receive enable mode is %s\n",OutBinary); #endif } else { #ifdef SfTest SF_Print("SF set short frame receive enable mode error\n"); #endif }}/*======================================================================= * 函数名称:void SF_SetPostFrameSendEnable(In UINT8 u8PortNo, In UINT32 u32PostFraSenEn) * 初稿完成:2005/1/6 * 作 者: * 函数功能:设置端口流控帧发送使能/禁止 * 输入参数:端口号 * 流控帧发送使能->1/禁止设置->0 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static void SF_SetPostFrameSendEnable(In UINT8 u8PortNo, In UINT32 u32PostFraSenEn){ Port_Conf_U SetPostFraSenEn; if (u8PortNo == 0) { SetPostFraSenEn.w32 = *SF_MAC0_DIO(0); SetPostFraSenEn.bits.pause_en = u32PostFraSenEn; *SF_MAC0_DIO(0) = SetPostFraSenEn.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC0_DIO(0); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC0_DIO(0)-SF p0 post frame transmit enable mode is %s\n",OutBinary); #endif } else if (u8PortNo == 1) { SetPostFraSenEn.w32 = *SF_MAC0_DIO(4); SetPostFraSenEn.bits.pause_en = u32PostFraSenEn; *SF_MAC0_DIO(4) = SetPostFraSenEn.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC0_DIO(4); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC0_DIO(4)-SF p1 post frame transmit enable mode is %s\n",OutBinary); #endif } else { #ifdef SfTest SF_Print("SF post frame transmit enable mode set error\n"); #endif }}/*======================================================================= * 函数名称:void SF_SetPortStatusFetchMode(In UINT8 u8PortNo, In UINT32 u32PortStatMode) * 初稿完成:2005/1/6 * 作 者: * 函数功能:设置端口状态信息获得方式 * 输入参数:端口号 * 端口状态信息获得方式设置(2'b10表示使用cpu设定的状态信息,其他是从mdio获取状态信息) * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/void SF_SetPortStatusFetchMode(In UINT8 u8PortNo, In UINT32 u32PortStatMode) { Port_Stat_Choice_U SetPortStatMode; UINT32 u32HelpSetStatM = 0; if (u8PortNo == 0) { SetPortStatMode.w32 = *SF_MAC_DIO(2); u32HelpSetStatM = (SetPortStatMode.bits.stat_ctrl & (0xc)); u32HelpSetStatM = (u32HelpSetStatM | ( u32PortStatMode )); SetPortStatMode.bits.stat_ctrl = u32HelpSetStatM; *SF_MAC_DIO(2) = SetPortStatMode.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC_DIO(2); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC_DIO(2)-SF p0 information fetching mode is %s\n",OutBinary); #endif } else if (u8PortNo == 1) { SetPortStatMode.w32 = *SF_MAC_DIO(2); u32HelpSetStatM = (SetPortStatMode.bits.stat_ctrl & (0x3)); u32HelpSetStatM = (u32HelpSetStatM | (( u32PortStatMode ) << 2 )); SetPortStatMode.bits.stat_ctrl = u32HelpSetStatM; *SF_MAC_DIO(2) = SetPortStatMode.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC_DIO(2); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC_DIO(2)-SF p1 information fetching mode is %s\n",OutBinary); #endif } else { #ifdef SfTest SF_Print("SF port fetching mode set error\n"); #endif }}/*======================================================================= * 函数名称:void SF_SetPortCountRollZeroEnable( In UINT8 u8PortNo, In UINT32 u32Value) * 初稿完成:2005/1/6 * 作 者: * 函数功能:设置端口的统计信息计满是否回零 * 输入参数:端口号(上行口或者下行口), * 需要设置计数器满回零的端口置1,否则置0 * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static void SF_SetPortCountRollZeroEnable( In UINT8 u8PortNo, In UINT32 u32Value) { Port_Conf_U CntRollCtrl; if (u8PortNo == 0) { CntRollCtrl.w32 = *SF_MAC0_DIO(0); CntRollCtrl.bits.cntr_roll_dis = u32Value; *SF_MAC0_DIO(0) = CntRollCtrl.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC0_DIO(0); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC0_DIO(0)-SF p0 count roll zero is %s\n",OutBinary); #endif } else if (u8PortNo == 1) { CntRollCtrl.w32 = *SF_MAC0_DIO(4); CntRollCtrl.bits.cntr_roll_dis = u32Value; *SF_MAC0_DIO(4) = CntRollCtrl.w32; #ifdef SfTest outinfor = * ( UINT32 * ) SF_MAC0_DIO(4); TChangeHEXToBin(outinfor,OutBinary); SF_Print("SF_MAC0_DIO(4)-SF p1 count roll zero is %s\n",OutBinary); #endif } else { #ifdef SfTest SF_Print("SF port count roll zero set error\n"); #endif }}/*======================================================================= * 函数名称:void SF_CountPortStatistic( In UINT8 u8PortNo, Out Port_Cnt_S *pu32StaticCnt) * 初稿完成:2005/1/6 * 作 者: * 函数功能:统计端口的统计信息 * 输入参数:端口号(上行口或者下行口), * 输出参数: * 返回类型: 无 * 其他说明: * 调用函数: 建议 * 主调函数: 建议 *========================================================================*/static void SF_CountPortStatistic( In UINT8 u8PortNo, Out Port_Cnt_S *pu32StaticCnt) { UINT32 AddrForPort = 0; if (u8PortNo == 1) { AddrForPort = 0x0100; } pu32StaticCnt->drop_event = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0000)); pu32StaticCnt->crcerr = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0004)); pu32StaticCnt->undersizepkts = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0008)); pu32StaticCnt->oversizepkts = *(UINT32 *) (SF_Statis + (AddrForPort | 0x000c)); pu32StaticCnt->fragments = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0010)); pu32StaticCnt->jabber = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0014)); pu32StaticCnt->broadcastpkts = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0018)); pu32StaticCnt->multicastpkts = *(UINT32 *) (SF_Statis + (AddrForPort | 0x001c)); pu32StaticCnt->pkts64 = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0020)); pu32StaticCnt->pkts65_127 = *(UINT32 *) (SF_Statis + (AddrForPort | 0x0024));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -