&sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}(hhparenthuba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget#/translations/zh_CN/driver-api/wbrfmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}(hhhh2ubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/zh_TW/driver-api/wbrfmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}(hhhhFubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/it_IT/driver-api/wbrfmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}(hhhhZubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ja_JP/driver-api/wbrfmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}(hhhhnubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ko_KR/driver-api/wbrfmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}(hhhhubah}(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}(hhhhubah}(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}(hhhhhhhNhNubah}(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.}(hhhhhhhNhNubah}(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.}(hhhhhhhNhNubah}(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.}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(hSome general termsh]hSome general terms}(hhhhhhhNhNubah}(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.}(hjhjhhhNhNubah}(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.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]some-general-termsah ]h"]some general termsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hACPI interfaceh]hACPI interface}(hj/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=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.}(hjKhjIhhhNhNubah}(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:}(hjYhjWhhhNhNubah}(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}(hjnhjphhhNhNubah}(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}(hjhjhhhNhNubah}(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}(hjhjhhhNhNubah}(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}(hjhjhhhNhNubah}(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}(hhhjhhhNhNubah}(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 }(hhhj 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}(hhhj 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}(hhhjEhhhNhNubah}(h]h ]kah"]h$]h&]uh1jChj?ubj)}(h h]h }(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]j)}(hdeviceh]hdevice}(hhhjehhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubhdesc_sig_punctuation)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhj?ubj)}(hdevh]hdev}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hactionh]haction}(hhhjhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j=hj9ubj>)}(hstruct wbrf_ranges_in_out *inh](jD)}(hjGh]hstruct}(hhhj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hwbrf_ranges_in_outh]hwbrf_ranges_in_out}(hhhj+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 }(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hinh]hin}(hhhjdhhhNhNubah}(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_multilineuh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjhhubh desc_content)}(hhh]h)}(h4add or remove the frequency band the device is usingh]h4add or remove the frequency band the device is using}(hjhjhhhNhNubah}(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&]domainjzobjtypejdesctypejnoindexuh1jhhhjhNhNubh 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}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(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}(hjhjhhhNhNubah}(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}(hhhj%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.chKhjubj)}(hhh]h)}(h*remove or add the frequency band into biosh]h*remove or add the frequency band into bios}(hj>hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hKhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hKhjubj)}(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}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjVubj)}(hhh]h)}(hAinput structure containing the frequency band the device is usingh]hAinput structure containing the frequency band the device is using}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhKhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hhhjhhhNhNubah}(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.}(hjhjhhhNhNubah}(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}(hhhjhhhNhNubah}(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.}(hjhjhhhNhNubah}(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}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(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}(hhhj$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}(hhhj@hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj<ubj)}(h h]h }(hhhjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hhh]j)}(hdeviceh]hdevice}(hhhj^hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainjzreftypej| reftargetj`modnameN classnameNjj)}j]j)}j|j&sb"c.acpi_amd_wbrf_supported_producerasbuh1hhj<ubj)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hdevh]hdev}(hhhjhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j=hj8ubah}(h]h ]h"]h$]h&]hhuh1j7hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]juh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjhhubj)}(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}(hjhjhhhNhNubah}(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&]jjzjjjjjuh1jhhhjhNhNubj)}(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}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(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 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)}(hj@h]h Description}(hhhjBhhhNhNubah}(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.}(hjXhjVhhhNhNubah}(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)}(hjgh]hReturn}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(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}(hjhj}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-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}(hhhjhhhNhNubah}(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 }(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hhhjhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjzreftypej| reftargetjmodnameN classnameNjj)}j]j)}j|jsb"c.acpi_amd_wbrf_supported_consumerasbuh1hhjubj)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hhhjAhhhNhNubah}(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&]juh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjhhubj)}(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}(hjnhjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jzfunctioneh"]h$]h&]jjzjjjjjuh1jhhhjhNhNubj)}(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}(hhhjhhhNhNubah}(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}(hhhjhhhNhNubah}(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}(hjhjhhhNhNubah}(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}(hhhjhhhNhNubah}(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.}(hjhjhhhNhNubah}(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}(hhhjhhhNhNubah}(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)}(h3true if WBRF is supported, otherwise returns false.h]h3true if WBRF is supported, otherwise returns false.}(hj'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}(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKubj)}(h h]h }(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhjbhKubj)}(hamd_wbrf_retrieve_freq_bandh]j)}(hamd_wbrf_retrieve_freq_bandh]hamd_wbrf_retrieve_freq_band}(hhhjuhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhjqubah}(h]h ](j2j3eh"]h$]h&]hhuh1jhjPhhhjbhKubj8)}(h4(struct device *dev, struct wbrf_ranges_in_out *out)h](j>)}(hstruct device *devh](jD)}(hjGh]hstruct}(hhhjhhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hhhjhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjzreftypej| reftargetjmodnameN classnameNjj)}j]j)}j|jwsbc.amd_wbrf_retrieve_freq_bandasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hhhjhhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j=hjubj>)}(hstruct wbrf_ranges_in_out *outh](jD)}(hjGh]hstruct}(hhhj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hwbrf_ranges_in_outh]hwbrf_ranges_in_out}(hhhj! hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjzreftypej| reftargetj# modnameN classnameNjj)}j]jc.amd_wbrf_retrieve_freq_bandasbuh1hhjubj)}(h h]h }(hhhj? hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hhhjM hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(houth]hout}(hhhjZ hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j=hjubeh}(h]h ]h"]h$]h&]hhuh1j7hjPhhhjbhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjLhhhjbhKubah}(h]jGah ](jjeh"]h$]h&]juh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chKhjIhhubj)}(hhh]h)}(h'retrieve current active frequency bandsh]h'retrieve current active frequency bands}(hj 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&]uh1jhjIhhhjbhKubeh}(h]h ](jzfunctioneh"]h$]h&]jjzjj jj juh1jhhhjhNhNubj)}(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}(hhhj 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}(hhhj 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 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}(hhhj 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 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}(hhhj< 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.}(hjR 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}(hhhjc 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.}(hjy 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}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chMubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(hamd_wbrf_register_notifierh]j)}(hamd_wbrf_register_notifierh]hamd_wbrf_register_notifier}(hhhj hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj ubah}(h]h ](j2j3eh"]h$]h&]hhuh1jhj hhhj hMubj8)}(h(struct notifier_block *nb)h]j>)}(hstruct notifier_block *nbh](jD)}(hjGh]hstruct}(hhhj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hnotifier_blockh]hnotifier_block}(hhhj 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 }(hhhj! hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hhhj/ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hnbh]hnb}(hhhj< hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j=hj ubah}(h]h ]h"]h$]h&]hhuh1j7hj hhhj hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]juh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chM%hj hhubj)}(hhh]h)}(h3register for notifications of frequency band updateh]h3register for notifications of frequency band update}(hji hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chMhjd hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jzfunctioneh"]h$]h&]jjzjj jj juh1jhhhjhNhNubj)}(hXD**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}(hhhj 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}(hhhj 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 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}(hhhj 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 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}(hhhj 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" 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}(hhhj hhhNhNubah}(h]h ]jPah"]h$]h&]uh1jChj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hnotifier_blockh]hnotifier_block}(hhhj hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjzreftypej| reftargetj modnameN classnameNjj)}j]j)}j|jr sbc.amd_wbrf_unregister_notifierasbuh1hhj ubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hnbh]hnb}(hhhj hhhNhNubah}(h]h ]j+ah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j=hj ubah}(h]h ]h"]h$]h&]hhuh1j7hjK hhhj] hM-ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjG hhhj] hM-ubah}(h]jB ah ](jjeh"]h$]h&]juh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chM9hjD hhubj)}(hhh]h)}(h5unregister for notifications of frequency band updateh]h5unregister for notifications of frequency band update}(hj 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&]uh1jhjD hhhj] hM-ubeh}(h]h ](jzfunctioneh"]h$]h&]jjzjj( jj( juh1jhhhjhNhNubj)}(hXf**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)}(hj2 h]h Parameters}(hhhj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 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)}(hjQ h]hstruct notifier_block *nb}(hhhjS hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chM/hjK ubj)}(hhh]h)}(hdriver notifier blockh]hdriver notifier block}(hjl hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjf hM/hjg ubah}(h]h ]h"]h$]h&]uh1jhjK ubeh}(h]h ]h"]h$]h&]uh1jhjf hM/hjH ubah}(h]h ]h"]h$]h&]uh1jhj, ubh)}(h**Description**h]j)}(hj h]h Description}(hhhj 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 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}(hhhj 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 hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.chM7hj, 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 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 }(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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhW to check if WBRF can be enabled for the device. 2. On using some frequency band, call }(hW 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}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhr with ‘add’ param to get other consumers properly notified. 3. Or on stopping using some frequency band, call }(hn 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}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh9 with ‘remove’ param to get other consumers notified.}(h5 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 }(h;The expected flow for the consumers: 1. During probe, call hjBhhhNhNubj)}(h"`acpi_amd_wbrf_supported_consumer`h]h acpi_amd_wbrf_supported_consumer}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh9 to check if WBRF can be enabled for the device. 2. Call }(h9 to check if WBRF can be enabled for the device. 2. Call hjBhhhNhNubj)}(h`amd_wbrf_register_notifier`h]hamd_wbrf_register_notifier}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubhh to register for notification of frequency band change(add or remove) from other producers. 3. Call the }(hh to register for notification of frequency band change(add or remove) from other producers. 3. Call the hjBhhhNhNubj)}(h`amd_wbrf_retrieve_freq_band`h]hamd_wbrf_retrieve_freq_band}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh 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 }(h 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 hjBhhhNhNubj)}(h`amd_wbrf_retrieve_freq_band`h]hamd_wbrf_retrieve_freq_band}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubhU again to retrieve the latest active frequency bands. 5. During driver cleanup, call }(hU again to retrieve the latest active frequency bands. 5. During driver cleanup, call hjBhhhNhNubj)}(h`amd_wbrf_unregister_notifier`h]hamd_wbrf_unregister_notifier}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh to unregister the notifier.}(h to unregister the notifier.hjBhhhNhNubeh}(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.confapep_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_spacefile_insertion_enabled raw_enabledKline_length_limitM'syntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_link embed_imagesenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjj'j$jjj j jju nametypes}(jNj'NjNj NjNuh}(jhj$hjj*j jjjjjjjjGjLj j jB jG 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.