FreeBSD bnxt以太网驱动源码阅读记录三:

FreeBSD里面的media status(2022/8/1)

在这里插入图片描述
在FreeBSD的Linux系统中,使用ifconfig命令会看到这样的信息:
media: Ethernet autoselect (100baseTX )
media: Ethernet autoselect (1000baseT )
media: Ethernet autoselect (10Gbase-SR )
media: Ethernet autoselect <full-duplex,rxpause,txpause> (25GBase-CR <full-duplex,rxpause>)
media: Ethernet autoselect <full-duplex,rxpause,txpause> (40Gbase-SR4 <full-duplex,rxpause,txpause>)
media: Ethernet autoselect <full-duplex,rxpause,txpause> (100GBase-CR4 <full-duplex,rxpause>)
100BASE-T是IEEE定义的以速度100Mbps传输的非屏蔽双绞线电缆及其以太网的各个方面的标准。以此类推:
10baseT的传输速率是10Mbps, 即1.25MB/sec
100baseT为100Mbps,即12.5MB/sec
1000baseT为1000Mbps, 即125MB/sec
10Gbase为10,000Mbps, 即1250MB/sec
40Gbase为40,000Mbps,即12.2GB/sec
100Gbase为100,000Mbps,即122GB/sec
注意:
注意,网卡的这个属性是和其所连接的交换机协商的结果,可能我们的网卡是1000base的,但是连接的交换机的口是100base的,或者网线是100base的,那么可能刚刚启动的时候,运行ifconfig会看到是1000base的,但是数据量多一点,就会改为100base的了。注意更换网口或者相匹配的网线即可修复。
参考:https://www.cnblogs.com/awpatp/p/14261899.html
代码里面有关这方面的代码是:

一:
bnxt_def_cp_task
		bnxt_handle_async_event
				bnxt_media_status
						bnxt_get_baudrate
						ifmedia_baudrate
						bnxt_report_link(iflib_link_state_change, ifmedia_removeall
						bnxt_add_media_types,ifmedia_set)
						bnxt_update_link(bnxt_hwrm_port_phy_qcfg)
二:
bnxt_media_change
    bnxt_hwrm_set_link_setting;
    bnxt_media_status;

这里的media和status的设置是在bnxt_attach_post函数里完成的,
该函数首先bnxt_probe_phy,bnxt_update_link一个个函数的调用,最终会调用到bnxt_hwrm_port_phy_qcfg查询链路的状态,然后得到一个的信息,最终通过 bnxt_add_media_types(softc);和
ifmedia_set(softc->media, IFM_ETHER | IFM_AUTO);两个函数设置
media和status。如果插入模块以后bnxt_attach_post函数是必然会被执行的。

而这个函数bnxt_media_status是更新media和status的状态,它们最终是通过调用bnxt_report_link函数,而bnxt_report_link函数里面也是通过掉到bnxt_hwrm_port_phy_qcfg查询链路的状态,然后调用iflib_link_state_change改变链路的状态,同时,会移除用来的media值,然后还是一样再次bnxt_add_media_types和设置ifmedia_set。。

这个函数(bnxt_media_status)应该是每隔一段事件会调用一次,从而不间断的查询链路的状态,然后将他们的值实时的反应出来。

而bnxt_media_change函数就是去设置链路的状态,他通过bnxt_hwrm_set_link_setting函数去设置的。设置完以后会去调用
bnxt_media_status该函数,该函数里面其实就是先查询,因为我刚刚设置了,我得知道我有没有设置成功吧,查询完了以后呢?在通过iflib那边的几个函数,iflib_link_state_change, ifmedia_removeall
,bnxt_add_media_types,ifmedia_set 把这设置,下去,然后程序到的值更新到iflib那边去。。。这样我就可以达到我的目的了,即改变链路的设置。

总结:其实概况下来主要有3步。
第一步,初始化的时候对链路状态进行查询。
第二步是,每隔一段时间的查询。
第三步是,我想去改变链路的设置。

设置和查询的接口分别是,bnxt_hwrm_set_link_setting,bnxt_hwrm_port_phy_qcfg。

FreeBSD里面的media status相关函数深入研究(2022/8/3)

在这里插入图片描述
经过不懈的努力,现在使用ifconfig时可以看到驱动已经成功的挂载上去了。。
但是,现在代码是写死了,所以在media和status哪里只是显示一些默认的值,现在需要花几天的时间完善这些工作,后面再到收发包相关的工作。
go go go !!!

查询链路状态当中,最主要用到的字段含义为:

link:当前的链路状态(0,1,2,,可以正常检测到值是2)
link_speed:(当前的链路速度)
duplex_cfg:(0,1 全双工和半双工模式)
pause:(取值为01, this value represents the autoneg results of pause configuration)
support_speeds:(控制器支持的链路速度,如果支持,相应的位会被置为1)
force_link_speeds:()
auto_mode:(取值为,012,一般值应该是2)
auto_pause:(取值为,012)
auto_link_speed:(这个字段仅在auto_mode设置位2时,设置才有效)
auto_link_speed_mask:
media_type:(0-unknown, 1-tp, 2-dac, 3-fibre)
preemphasis:(current setting for preemphasis)
xcvr_pkg_type:(收发器类型,取值为12)
eee_config_phy_addr:(0-4,5-7是eee相关的配置)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值