:sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget#/translations/zh_CN/driver-api/wbrfmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/zh_TW/driver-api/wbrfmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/it_IT/driver-api/wbrfmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ja_JP/driver-api/wbrfmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ko_KR/driver-api/wbrfmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/sp_SP/driver-api/wbrfmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h)SPDX-License-Identifier: GPL-2.0-or-laterh]h)SPDX-License-Identifier: GPL-2.0-or-later}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh=/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf.rsthKubhsection)}(hhh](htitle)}(h WBRF - Wifi Band RFI Mitigationsh]h WBRF - Wifi Band RFI Mitigations}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hDue to electrical and mechanical constraints in certain platform designs there may be likely interference of relatively high-powered harmonics of the GPU memory clocks with local radio module frequency bands used by certain Wifi bands.h]hDue to electrical and mechanical constraints in certain platform designs there may be likely interference of relatively high-powered harmonics of the GPU memory clocks with local radio module frequency bands used by certain Wifi bands.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hTo mitigate possible RFI interference producers can advertise the frequencies in use and consumers can use this information to avoid using these frequencies for sensitive features.h]hTo mitigate possible RFI interference producers can advertise the frequencies in use and consumers can use this information to avoid using these frequencies for sensitive features.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hXnWhen a platform is known to have this issue with any contained devices, the platform designer will advertise the availability of this feature via ACPI devices with a device specific method (_DSM). * Producers with this _DSM will be able to advertise the frequencies in use. * Consumers with this _DSM will be able to register for notifications of frequencies in use.h]hXnWhen a platform is known to have this issue with any contained devices, the platform designer will advertise the availability of this feature via ACPI devices with a device specific method (_DSM). * Producers with this _DSM will be able to advertise the frequencies in use. * Consumers with this _DSM will be able to register for notifications of frequencies in use.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(hSome general termsh]hSome general terms}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hProducer: such component who can produce high-powered radio frequency Consumer: such component who can adjust its in-use frequency in response to the radio frequencies of other components to mitigate the possible RFI.h]hProducer: such component who can produce high-powered radio frequency Consumer: such component who can adjust its in-use frequency in response to the radio frequencies of other components to mitigate the possible RFI.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hTo make the mechanism function, those producers should notify active use of their particular frequencies so that other consumers can make relative internal adjustments as necessary to avoid this resonance.h]hTo make the mechanism function, those producers should notify active use of their particular frequencies so that other consumers can make relative internal adjustments as necessary to avoid this resonance.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]some-general-termsah ]h"]some general termsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hACPI interfaceh]hACPI interface}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hhhhhK$ubh)}(hAlthough initially used by for wifi + dGPU use cases, the ACPI interface can be scaled to any type of device that a platform designer discovers can cause interference.h]hAlthough initially used by for wifi + dGPU use cases, the ACPI interface can be scaled to any type of device that a platform designer discovers can cause interference.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hj*hhubh)}(hCThe GUID used for the _DSM is 7B7656CF-DC3D-4C1C-83E9-66E721DE3070.h]hCThe GUID used for the _DSM is 7B7656CF-DC3D-4C1C-83E9-66E721DE3070.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hj*hhubh)}(h'3 functions are available in this _DSM:h]h'3 functions are available in this _DSM:}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hj*hhubh bullet_list)}(hhh](h list_item)}(h$0: discover # of functions availableh]h)}(hjnh]h$0: discover # of functions available}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hjlubah}(h]h ]h"]h$]h&]uh1jjhjghhhhhNubjk)}(h1: record RF bands in useh]h)}(hjh]h1: record RF bands in use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjubah}(h]h ]h"]h$]h&]uh1jjhjghhhhhNubjk)}(h2: retrieve RF bands in use h]h)}(h2: retrieve RF bands in useh]h2: retrieve RF bands in use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hjubah}(h]h ]h"]h$]h&]uh1jjhjghhhhhNubeh}(h]h ]h"]h$]h&]bullet*uh1jehhhK.hj*hhubeh}(h]acpi-interfaceah ]h"]acpi interfaceah$]h&]uh1hhhhhhhhK$ubh)}(hhh](h)}(hDriver programming interfaceh]hDriver programming interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK3ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single%acpi_amd_wbrf_add_remove (C function)c.acpi_amd_wbrf_add_removehNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(h`int acpi_amd_wbrf_add_remove (struct device *dev, uint8_t action, struct wbrf_ranges_in_out *in)h]hdesc_signature_line)}(h_int acpi_amd_wbrf_add_remove(struct device *dev, uint8_t action, struct wbrf_ranges_in_out *in)h](hdesc_sig_keyword_type)}(hinth]hint}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKubhdesc_sig_space)}(h h]h }(hj hhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(hacpi_amd_wbrf_add_removeh]h desc_sig_name)}(hacpi_amd_wbrf_add_removeh]hacpi_amd_wbrf_add_remove}(hj hhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhKubhdesc_parameterlist)}(hC(struct device *dev, uint8_t action, struct wbrf_ranges_in_out *in)h](hdesc_parameter)}(hstruct device *devh](hdesc_sig_keyword)}(hstructh]hstruct}(hjEhhhNhNubah}(h]h ]kah"]h$]h&]uh1jChj?ubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]j)}(hdeviceh]hdevice}(hjehhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetjgmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}j|j"sbc.acpi_amd_wbrf_add_removeasbuh1hhj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubhdesc_sig_punctuation)}(hjh]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhj?ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1j=hj9ubj>)}(huint8_t actionh](h)}(hhh]j)}(huint8_th]huint8_t}(hjhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjzreftypej| reftargetjmodnameN classnameNjj)}j]jc.acpi_amd_wbrf_add_removeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hactionh]haction}(hjhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j=hj9ubj>)}(hstruct wbrf_ranges_in_out *inh](jD)}(hjGh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hwbrf_ranges_in_outh]hwbrf_ranges_in_out}(hj+hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjzreftypej| reftargetj-modnameN classnameNjj)}j]jc.acpi_amd_wbrf_add_removeasbuh1hhj ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hinh]hin}(hjdhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j=hj9ubeh}(h]h ]h"]h$]h&]hhuh1j7hjhhhjhKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhKhjhhubh desc_content)}(hhh]h)}(h4add or remove the frequency band the device is usingh]h4add or remove the frequency band the device is using}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jzfunctioneh"]h$]h&]domainjzobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(hX**Parameters** ``struct device *dev`` device pointer ``uint8_t action`` remove or add the frequency band into bios ``struct wbrf_ranges_in_out *in`` input structure containing the frequency band the device is using **Description** Broadcast to other consumers the frequency band the device starts to use. Underneath the surface the information is cached into an internal buffer first. Then a notification is sent to all those registered consumers. So then they can retrieve that buffer to know the latest active frequency bands. Consumers that haven't yet been registered can retrieve the information from the cache when they register. **Return** 0 for success add/remove wifi frequency band. Returns a negative error code for failure.h](h)}(h**Parameters**h]hstrong)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubhdefinition_list)}(hhh](hdefinition_list_item)}(h&``struct device *dev`` device pointer h](hterm)}(h``struct device *dev``h]hliteral)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubh definition)}(hhh]h)}(hdevice pointerh]hdevice pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h>``uint8_t action`` remove or add the frequency band into bios h](j)}(h``uint8_t action``h]j)}(hj&h]huint8_t action}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhj ubj)}(hhh]h)}(h*remove or add the frequency band into biosh]h*remove or add the frequency band into bios}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hKhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hKhjubj)}(hd``struct wbrf_ranges_in_out *in`` input structure containing the frequency band the device is using h](j)}(h!``struct wbrf_ranges_in_out *in``h]j)}(hj_h]hstruct wbrf_ranges_in_out *in}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjYubj)}(hhh]h)}(hAinput structure containing the frequency band the device is usingh]hAinput structure containing the frequency band the device is using}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthKhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubh)}(hXBroadcast to other consumers the frequency band the device starts to use. Underneath the surface the information is cached into an internal buffer first. Then a notification is sent to all those registered consumers. So then they can retrieve that buffer to know the latest active frequency bands. Consumers that haven't yet been registered can retrieve the information from the cache when they register.h]hXBroadcast to other consumers the frequency band the device starts to use. Underneath the surface the information is cached into an internal buffer first. Then a notification is sent to all those registered consumers. So then they can retrieve that buffer to know the latest active frequency bands. Consumers that haven’t yet been registered can retrieve the information from the cache when they register.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubh)}(hX0 for success add/remove wifi frequency band. Returns a negative error code for failure.h]hX0 for success add/remove wifi frequency band. Returns a negative error code for failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j-acpi_amd_wbrf_supported_producer (C function)"c.acpi_amd_wbrf_supported_producerhNtauh1jhjhhhNhNubj)}(hhh](j)}(h:bool acpi_amd_wbrf_supported_producer (struct device *dev)h]j)}(h9bool acpi_amd_wbrf_supported_producer(struct device *dev)h](j)}(hboolh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h acpi_amd_wbrf_supported_producerh]j)}(h acpi_amd_wbrf_supported_producerh]h acpi_amd_wbrf_supported_producer}(hj'hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj#ubah}(h]h ](j2j3eh"]h$]h&]hhuh1jhjhhhjhKubj8)}(h(struct device *dev)h]j>)}(hstruct device *devh](jD)}(hjGh]hstruct}(hjChhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj?ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]j)}(hdeviceh]hdevice}(hjahhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjzreftypej| reftargetjcmodnameN classnameNjj)}j]j)}j|j)sb"c.acpi_amd_wbrf_supported_producerasbuh1hhj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1j=hj;ubah}(h]h ]h"]h$]h&]hhuh1j7hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hAdetermine if the WBRF can be enabled for the device as a producerh]hAdetermine if the WBRF can be enabled for the device as a producer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jzfunctioneh"]h$]h&]jjzjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct device *dev`` device pointer **Description** Check if the platform equipped with necessary implementations to support WBRF for the device as a producer. **Return** true if WBRF is supported, otherwise returns falseh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubj)}(hhh]j)}(h&``struct device *dev`` device pointer h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubj)}(hhh]h)}(hdevice pointerh]hdevice pointer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjBh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubh)}(hkCheck if the platform equipped with necessary implementations to support WBRF for the device as a producer.h]hkCheck if the platform equipped with necessary implementations to support WBRF for the device as a producer.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubh)}(h **Return**h]j)}(hjih]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubh)}(h2true if WBRF is supported, otherwise returns falseh]h2true if WBRF is supported, otherwise returns false}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j-acpi_amd_wbrf_supported_consumer (C function)"c.acpi_amd_wbrf_supported_consumerhNtauh1jhjhhhNhNubj)}(hhh](j)}(h:bool acpi_amd_wbrf_supported_consumer (struct device *dev)h]j)}(h9bool acpi_amd_wbrf_supported_consumer(struct device *dev)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h acpi_amd_wbrf_supported_consumerh]j)}(h acpi_amd_wbrf_supported_consumerh]h acpi_amd_wbrf_supported_consumer}(hjhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhjubah}(h]h ](j2j3eh"]h$]h&]hhuh1jhjhhhjhKubj8)}(h(struct device *dev)h]j>)}(hstruct device *devh](jD)}(hjGh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjzreftypej| reftargetj modnameN classnameNjj)}j]j)}j|jsb"c.acpi_amd_wbrf_supported_consumerasbuh1hhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjChhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j=hjubah}(h]h ]h"]h$]h&]hhuh1j7hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hAdetermine if the WBRF can be enabled for the device as a consumerh]hAdetermine if the WBRF can be enabled for the device as a consumer}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jzfunctioneh"]h$]h&]jjzjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct device *dev`` device pointer **Description** Determine if the platform equipped with necessary implementations to support WBRF for the device as a consumer. **Return** true if WBRF is supported, otherwise returns false.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubj)}(hhh]j)}(h&``struct device *dev`` device pointer h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubj)}(hhh]h)}(hdevice pointerh]hdevice pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubh)}(hoDetermine if the platform equipped with necessary implementations to support WBRF for the device as a consumer.h]hoDetermine if the platform equipped with necessary implementations to support WBRF for the device as a consumer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubh)}(h3true if WBRF is supported, otherwise returns false.h]h3true if WBRF is supported, otherwise returns false.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(amd_wbrf_retrieve_freq_band (C function)c.amd_wbrf_retrieve_freq_bandhNtauh1jhjhhhNhNubj)}(hhh](j)}(hTint amd_wbrf_retrieve_freq_band (struct device *dev, struct wbrf_ranges_in_out *out)h]j)}(hSint amd_wbrf_retrieve_freq_band(struct device *dev, struct wbrf_ranges_in_out *out)h](j)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhjchKubj)}(hamd_wbrf_retrieve_freq_bandh]j)}(hamd_wbrf_retrieve_freq_bandh]hamd_wbrf_retrieve_freq_band}(hjvhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhjrubah}(h]h ](j2j3eh"]h$]h&]hhuh1jhjQhhhjchKubj8)}(h4(struct device *dev, struct wbrf_ranges_in_out *out)h](j>)}(hstruct device *devh](jD)}(hjGh]hstruct}(hjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjzreftypej| reftargetjmodnameN classnameNjj)}j]j)}j|jxsbc.amd_wbrf_retrieve_freq_bandasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j=hjubj>)}(hstruct wbrf_ranges_in_out *outh](jD)}(hjGh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hwbrf_ranges_in_outh]hwbrf_ranges_in_out}(hj" hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjzreftypej| reftargetj$ modnameN classnameNjj)}j]jc.amd_wbrf_retrieve_freq_bandasbuh1hhj ubj)}(h h]h }(hj@ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hjN hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(houth]hout}(hj[ hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j=hjubeh}(h]h ]h"]h$]h&]hhuh1j7hjQhhhjchKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjMhhhjchKubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1jhjchKhjJhhubj)}(hhh]h)}(h'retrieve current active frequency bandsh]h'retrieve current active frequency bands}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhj hhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjchKubeh}(h]h ](jzfunctioneh"]h$]h&]jjzjj jj jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct device *dev`` device pointer ``struct wbrf_ranges_in_out *out`` output structure containing all the active frequency bands **Description** Retrieve the current active frequency bands which were broadcasted by other producers. The consumer who calls this API should take proper actions if any of the frequency band may cause RFI with its own frequency band used. **Return** 0 for getting wifi freq band successfully. Returns a negative error code for failure.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhj ubj)}(hhh](j)}(h&``struct device *dev`` device pointer h](j)}(h``struct device *dev``h]j)}(hj h]hstruct device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhj ubj)}(hhh]h)}(hdevice pointerh]hdevice pointer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(h^``struct wbrf_ranges_in_out *out`` output structure containing all the active frequency bands h](j)}(h"``struct wbrf_ranges_in_out *out``h]j)}(hj h]hstruct wbrf_ranges_in_out *out}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhj ubj)}(hhh]h)}(h:output structure containing all the active frequency bandsh]h:output structure containing all the active frequency bands}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hj: h]h Description}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8 ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhj ubh)}(hRetrieve the current active frequency bands which were broadcasted by other producers. The consumer who calls this API should take proper actions if any of the frequency band may cause RFI with its own frequency band used.h]hRetrieve the current active frequency bands which were broadcasted by other producers. The consumer who calls this API should take proper actions if any of the frequency band may cause RFI with its own frequency band used.}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhj ubh)}(h **Return**h]j)}(hja h]hReturn}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhj ubh)}(hU0 for getting wifi freq band successfully. Returns a negative error code for failure.h]hU0 for getting wifi freq band successfully. Returns a negative error code for failure.}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'amd_wbrf_register_notifier (C function)c.amd_wbrf_register_notifierhNtauh1jhjhhhNhNubj)}(hhh](j)}(h:int amd_wbrf_register_notifier (struct notifier_block *nb)h]j)}(h9int amd_wbrf_register_notifier(struct notifier_block *nb)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chM%ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hM%ubj)}(hamd_wbrf_register_notifierh]j)}(hamd_wbrf_register_notifierh]hamd_wbrf_register_notifier}(hj hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj ubah}(h]h ](j2j3eh"]h$]h&]hhuh1jhj hhhj hM%ubj8)}(h(struct notifier_block *nb)h]j>)}(hstruct notifier_block *nbh](jD)}(hjGh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hnotifier_blockh]hnotifier_block}(hj hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjzreftypej| reftargetj modnameN classnameNjj)}j]j)}j|j sbc.amd_wbrf_register_notifierasbuh1hhj ubj)}(h h]h }(hj! hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj/ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hnbh]hnb}(hj< hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j=hj ubah}(h]h ]h"]h$]h&]hhuh1j7hj hhhj hM%ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hM%ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hM%hj hhubj)}(hhh]h)}(h3register for notifications of frequency band updateh]h3register for notifications of frequency band update}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chMhjc hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM%ubeh}(h]h ](jzfunctioneh"]h$]h&]jjzjj~ jj~ jjjuh1jhhhjhNhNubj)}(hXB**Parameters** ``struct notifier_block *nb`` driver notifier block **Description** The consumer should register itself via this API so that it can get notified on the frequency band updates from other producers. **Return** 0 for registering a consumer driver successfully. Returns a negative error code for failure.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chMhj ubj)}(hhh]j)}(h4``struct notifier_block *nb`` driver notifier block h](j)}(h``struct notifier_block *nb``h]j)}(hj h]hstruct notifier_block *nb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chMhj ubj)}(hhh]h)}(hdriver notifier blockh]hdriver notifier block}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chMhj ubh)}(hThe consumer should register itself via this API so that it can get notified on the frequency band updates from other producers.h]hThe consumer should register itself via this API so that it can get notified on the frequency band updates from other producers.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chMhj ubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chM!hj ubh)}(h\0 for registering a consumer driver successfully. Returns a negative error code for failure.h]h\0 for registering a consumer driver successfully. Returns a negative error code for failure.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chM!hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)amd_wbrf_unregister_notifier (C function)c.amd_wbrf_unregister_notifierhNtauh1jhjhhhNhNubj)}(hhh](j)}(h)}(hstruct notifier_block *nbh](jD)}(hjGh]hstruct}(hj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hnotifier_blockh]hnotifier_block}(hj hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjzreftypej| reftargetj modnameN classnameNjj)}j]j)}j|jq sbc.amd_wbrf_unregister_notifierasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hnbh]hnb}(hj hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j=hj ubah}(h]h ]h"]h$]h&]hhuh1j7hjJ hhhj\ hM9ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjF hhhj\ hM9ubah}(h]jA ah ](jjeh"]h$]h&]jj)jhuh1jhj\ hM9hjC hhubj)}(hhh]h)}(h5unregister for notifications of frequency band updateh]h5unregister for notifications of frequency band update}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chM,hj hhubah}(h]h ]h"]h$]h&]uh1jhjC hhhj\ hM9ubeh}(h]h ](jzfunctioneh"]h$]h&]jjzjj& jj& jjjuh1jhhhjhNhNubj)}(hXd**Parameters** ``struct notifier_block *nb`` driver notifier block **Description** The consumer should call this API when it is longer interested with the frequency band updates from other producers. Usually, this should be performed during driver cleanup. **Return** 0 for unregistering a consumer driver. Returns a negative error code for failure.h](h)}(h**Parameters**h]j)}(hj0 h]h Parameters}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj. ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chM0hj* ubj)}(hhh]j)}(h4``struct notifier_block *nb`` driver notifier block h](j)}(h``struct notifier_block *nb``h]j)}(hjO h]hstruct notifier_block *nb}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chM/hjI ubj)}(hhh]h)}(hdriver notifier blockh]hdriver notifier block}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd hM/hje ubah}(h]h ]h"]h$]h&]uh1jhjI ubeh}(h]h ]h"]h$]h&]uh1jhjd hM/hjF ubah}(h]h ]h"]h$]h&]uh1jhj* ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chM1hj* ubh)}(hThe consumer should call this API when it is longer interested with the frequency band updates from other producers. Usually, this should be performed during driver cleanup.h]hThe consumer should call this API when it is longer interested with the frequency band updates from other producers. Usually, this should be performed during driver cleanup.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chM1hj* ubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chM5hj* ubh)}(hQ0 for unregistering a consumer driver. Returns a negative error code for failure.h]hQ0 for unregistering a consumer driver. Returns a negative error code for failure.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chM5hj* ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]driver-programming-interfaceah ]h"]driver programming interfaceah$]h&]uh1hhhhhhhhK3ubh)}(hhh](h)}(h Sample Usageh]h Sample Usage}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhK8ubh)}(hXThe expected flow for the producers: 1. During probe, call `acpi_amd_wbrf_supported_producer` to check if WBRF can be enabled for the device. 2. On using some frequency band, call `acpi_amd_wbrf_add_remove` with 'add' param to get other consumers properly notified. 3. Or on stopping using some frequency band, call `acpi_amd_wbrf_add_remove` with 'remove' param to get other consumers notified.h](h;The expected flow for the producers: 1. During probe, call }(hj hhhNhNubhtitle_reference)}(h"`acpi_amd_wbrf_supported_producer`h]h acpi_amd_wbrf_supported_producer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubhW to check if WBRF can be enabled for the device. 2. On using some frequency band, call }(hj hhhNhNubj )}(h`acpi_amd_wbrf_add_remove`h]hacpi_amd_wbrf_add_remove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubhr with ‘add’ param to get other consumers properly notified. 3. Or on stopping using some frequency band, call }(hj hhhNhNubj )}(h`acpi_amd_wbrf_add_remove`h]hacpi_amd_wbrf_add_remove}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh9 with ‘remove’ param to get other consumers notified.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK:hj hhubh)}(hXThe expected flow for the consumers: 1. During probe, call `acpi_amd_wbrf_supported_consumer` to check if WBRF can be enabled for the device. 2. Call `amd_wbrf_register_notifier` to register for notification of frequency band change(add or remove) from other producers. 3. Call the `amd_wbrf_retrieve_freq_band` initially to retrieve current active frequency bands considering some producers may broadcast such information before the consumer is up. 4. On receiving a notification for frequency band change, run `amd_wbrf_retrieve_freq_band` again to retrieve the latest active frequency bands. 5. During driver cleanup, call `amd_wbrf_unregister_notifier` to unregister the notifier.h](h;The expected flow for the consumers: 1. During probe, call }(hj<hhhNhNubj )}(h"`acpi_amd_wbrf_supported_consumer`h]h acpi_amd_wbrf_supported_consumer}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubh9 to check if WBRF can be enabled for the device. 2. Call }(hj<hhhNhNubj )}(h`amd_wbrf_register_notifier`h]hamd_wbrf_register_notifier}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubhh to register for notification of frequency band change(add or remove) from other producers. 3. Call the }(hj<hhhNhNubj )}(h`amd_wbrf_retrieve_freq_band`h]hamd_wbrf_retrieve_freq_band}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubh initially to retrieve current active frequency bands considering some producers may broadcast such information before the consumer is up. 4. On receiving a notification for frequency band change, run }(hj<hhhNhNubj )}(h`amd_wbrf_retrieve_freq_band`h]hamd_wbrf_retrieve_freq_band}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubhU again to retrieve the latest active frequency bands. 5. During driver cleanup, call }(hj<hhhNhNubj )}(h`amd_wbrf_unregister_notifier`h]hamd_wbrf_unregister_notifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubh to unregister the notifier.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKBhj hhubeh}(h] sample-usageah ]h"] sample usageah$]h&]uh1hhhhhhhhK8ubeh}(h]wbrf-wifi-band-rfi-mitigationsah ]h"] wbrf - wifi band rfi mitigationsah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjj'j$jjj j jju nametypes}(jj'jj juh}(jhj$hjj*j jjjjjjjjHjMj j jA jF jj u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.