WBRF - Wifi 频段 RFI 缓解¶
由于某些平台设计中的电气和机械限制,GPU 内存时钟的相对高功率谐波可能会干扰某些 Wifi 频段使用的本地无线模块频段。
为了缓解可能的 RFI 干扰,生产者可以公布正在使用的频率,消费者可以使用此信息来避免将这些频率用于敏感功能。
如果已知平台中的任何包含的设备存在此问题,平台设计者将通过带有设备特定方法 (_DSM) 的 ACPI 设备来公布此功能的可用性。 * 带有此 _DSM 的生产者将能够公布正在使用的频率。 * 带有此 _DSM 的消费者将能够注册以接收正在使用的频率的通知。
一些通用术语¶
生产者:指可以产生高功率无线电频率的组件 消费者:指可以调整其使用中频率以响应其他组件的无线电频率,从而减轻可能的 RFI 的组件。
为了使该机制发挥作用,这些生产者应通知其特定频率的活跃使用情况,以便其他消费者可以根据需要进行相应的内部调整,以避免这种共振。
ACPI 接口¶
尽管最初用于 wifi + dGPU 用例,但 ACPI 接口可以扩展到平台设计者发现可能导致干扰的任何类型的设备。
用于 _DSM 的 GUID 是 7B7656CF-DC3D-4C1C-83E9-66E721DE3070。
此 _DSM 中有 3 个功能可用
0:发现可用功能的数量
1:记录正在使用的 RF 频段
2:检索正在使用的 RF 频段
驱动程序编程接口¶
-
int acpi_amd_wbrf_add_remove(struct device *dev, uint8_t action, struct wbrf_ranges_in_out *in)¶
添加或删除设备正在使用的频段
参数
struct device *dev
设备指针
uint8_t action
将频段添加到 bios 或从 bios 中移除
struct wbrf_ranges_in_out *in
包含设备正在使用的频段的输入结构
描述
向其他消费者广播设备开始使用的频段。 在表面之下,信息首先被缓存到内部缓冲区中。 然后,向所有已注册的消费者发送通知。 因此,他们可以检索该缓冲区以了解最新的活动频段。 尚未注册的消费者可以在注册时从缓存中检索信息。
返回
成功添加/删除 wifi 频段时返回 0。 失败时返回负错误代码。
参数
struct device *dev
设备指针
描述
检查平台是否配备了必要的实现来支持 WBRF,以使设备充当生产者。
返回
如果支持 WBRF,则为 true,否则返回 false
参数
struct device *dev
设备指针
描述
确定平台是否配备了必要的实现来支持 WBRF,以使设备充当消费者。
返回
如果支持 WBRF,则为 true,否则返回 false。
参数
struct device *dev
设备指针
struct wbrf_ranges_in_out *out
包含所有活动频段的输出结构
描述
检索由其他生产者广播的当前活动频段。 调用此 API 的消费者应采取适当的措施,以防任何频段可能导致与其自身使用的频段发生 RFI。
返回
成功获取 wifi 频段时返回 0。 失败时返回负错误代码。
-
int amd_wbrf_register_notifier(struct notifier_block *nb)¶
注册以接收频段更新的通知
参数
struct notifier_block *nb
驱动程序通知程序块
描述
消费者应通过此 API 注册自己,以便它可以接收来自其他生产者的频段更新的通知。
返回
成功注册消费者驱动程序时返回 0。 失败时返回负错误代码。
-
int amd_wbrf_unregister_notifier(struct notifier_block *nb)¶
取消注册以接收频段更新的通知
参数
struct notifier_block *nb
驱动程序通知程序块
描述
当消费者不再对来自其他生产者的频段更新感兴趣时,应调用此 API。 通常,这应在驱动程序清理期间执行。
返回
用于取消注册消费者驱动程序时返回 0。 失败时返回负错误代码。
用法示例¶
生产者的预期流程: 1. 在探测期间,调用 acpi_amd_wbrf_supported_producer 以检查是否可以为设备启用 WBRF。 2. 在使用某些频段时,调用 acpi_amd_wbrf_add_remove 并带有“add”参数,以使其他消费者获得适当的通知。 3. 或者,在停止使用某些频段时,调用 acpi_amd_wbrf_add_remove 并带有“remove”参数,以通知其他消费者。
消费者的预期流程: 1. 在探测期间,调用 acpi_amd_wbrf_supported_consumer 以检查是否可以为设备启用 WBRF。 2. 调用 amd_wbrf_register_notifier 注册以接收来自其他生产者的频段更改(添加或删除)的通知。 3. 最初调用 amd_wbrf_retrieve_freq_band 以检索当前的活动频段,因为某些生产者可能会在消费者启动之前广播此类信息。 4. 在接收到频段更改的通知时,再次运行 amd_wbrf_retrieve_freq_band 以检索最新的活动频段。 5. 在驱动程序清理期间,调用 amd_wbrf_unregister_notifier 以取消注册通知程序。