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 以取消註冊通知程式。