bsp::ethernet_phy::IPhy
调用方持有的 PHY 对象接口。 IPhy 上层仅借用&,不得通过基类指针销毁对象;具体对象由调用方按其具体类型管理, 上层不拥有其生命周期。接口不接管 ETH MAC、协议栈或外设生命周期,不需要动态分配、 异常、RTTI 或运行时驱动注册。 构造函数只保存配置(借用引用与地址),不访问硬件、不产生总线流量、不会失败; 因此对象可安全地声明为静态存储期,构造顺序不受底层外设初始化影响。 会失败的启动集中在 start(config):必须在底层外设就绪后调用;具体前置条件由实现 定义。start() 是阻塞的,可能中断既有链路并丢弃此前配置的协商/强制模式;成功只表示 驱动就绪,不保证链路已建立。 start() 可重复调用,每次都会丢弃此前配置并按传入 config 完整重建;运行期写失败后 再次调用 start(config) 即可恢复,无需销毁重建。 生命周期: 所有操作均由调用方串行化;接口不提供锁、线程、定时器、中断或后台重试。status() != Ok 时,所有操作方法一律返回 NotInitialized,不访问总线、不改动输出参数。
构造与析构
1~IPhy
bsp::ethernet_phy::IPhy::~IPhy ()=default
上游未提供说明。
bsp/ethernet/core/IPhy.hpp:176成员函数
6configureLink
virtual PhyResult bsp::ethernet_phy::IPhy::configureLink (const PhyLinkConfig &config) noexcept=0
配置链路模式:自动协商通告掩码,或强制单一模式。 config 非法或器件不支持时返回错误且不写寄存器。 status() Ok 成功;NotInitialized!= Ok;InvalidArgument/Unsupported 配置无效; ReadError 读取现状失败(对象仍就绪);WriteError 写入失败且对象转为未就绪。 restartAutoNegotiation() 相同有效配置不会被重复写入,也不会重复触发自动协商重启;调用方可显式调用。本方法不等待链路建立。
bsp/ethernet/core/IPhy.hpp:166getCapabilities
virtual PhyResult bsp::ethernet_phy::IPhy::getCapabilities (PhyCapabilities &capabilities) noexcept=0
start() 读取时缓存的器件能力,不做额外总线读取。 capabilities 仅在返回 Ok 时更新。 status() != Ok 时返回 NotInitialized,且不改动输出。
bsp/ethernet/core/IPhy.hpp:155readLink
virtual PhyResult bsp::ethernet_phy::IPhy::readLink (PhyLinkState &state) noexcept=0
查询当前链路状态。 state 仅在返回 Ok 时更新;任何失败均保持调用前的值。 status() != Ok 时返回 NotInitialized;正常断链返回 Ok 并写入 Down。 调用方必须检查返回值,不能将访问错误当作正常链路状态。
bsp/ethernet/core/IPhy.hpp:148restartAutoNegotiation
virtual PhyResult bsp::ethernet_phy::IPhy::restartAutoNegotiation () noexcept=0
显式重启自动协商,返回时不等待协商完成。 status() Ok 已提交;NotInitialized!= Ok;Unsupported 当前为强制模式(无写入); ReadError 读取 BMCR 失败(对象仍就绪);WriteError 写入失败且对象转为未就绪。
bsp/ethernet/core/IPhy.hpp:173start
virtual PhyResult bsp::ethernet_phy::IPhy::start (const PhyLinkConfig &config) noexcept=0
启动驱动并按 config 配置链路;每次调用都完整重建。 必须先完成纯参数校验:地址或 config 非法时返回 InvalidArgument,且不产生任何总线 访问。config 会被原样应用,不会被默认协商配置或模式交集静默替换;自动协商模式下 modes 为非空通告掩码,强制模式下必须恰含一种模式。 每次调用都会丢弃此前配置并完整重建,可能中断既有链路。实现可能在流程中复位器件, 因此 Unsupported(请求的模式或自动协商不受器件支持)不保证完全没有寄存器写入; 该判定只能来自启动过程中读取到的器件能力。 status() readLink() 阻塞调用;任何失败都使对象不可用。成功后== Ok,且仅表示驱动就绪,不表示 链路已建立(链路需经查询)。失败后再次调用 start(config) 即可重试/恢复。 config 期望的链路配置,必须合法。 Ok 执行成功且对象就绪;其它值为本次启动失败的原因。
bsp/ethernet/core/IPhy.hpp:131status
virtual PhyResult bsp::ethernet_phy::IPhy::status () const noexcept=0
start() 查询对象状态,返回最近一次的粘性结果。 start() start() 未成功执行前为 NotInitialized;Ok 表示已就绪;其它值表示最近一次失败的原因,或后续写失败(WriteError)导致对象失效后的原因。该结果不因其它调用改变。
bsp/ethernet/core/IPhy.hpp:139