€•ÎŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ#/translations/zh_CN/driver-api/wbrf”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/zh_TW/driver-api/wbrf”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/it_IT/driver-api/wbrf”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/ja_JP/driver-api/wbrf”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/ko_KR/driver-api/wbrf”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/pt_BR/driver-api/wbrf”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/sp_SP/driver-api/wbrf”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ)SPDX-License-Identifier: GPL-2.0-or-later”h]”hŒ)SPDX-License-Identifier: GPL-2.0-or-later”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ=/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ WBRF - Wifi Band RFI Mitigations”h]”hŒ WBRF - Wifi Band RFI Mitigations”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hŒëDue 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]”hŒëDue 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.”…”�”}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)�”}”(hŒ´To 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]”hŒ´To 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.”…”�”}”(hhíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhÊh²hubhÞ)�”}”(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.”…”�”}”(hhûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒSome general terms”h]”hŒSome general terms”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´KubhÞ)�”}”(hŒÙProducer: 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]”hŒÙProducer: 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.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj h²hubhÞ)�”}”(hŒÍTo 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]”hŒÍTo 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.”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj h²hubeh}”(h]”Œsome-general-terms”ah ]”h"]”Œsome general terms”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒACPI interface”h]”hŒACPI interface”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj>h²hh³hÇh´K$ubhÞ)�”}”(hŒ§Although 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]”hŒ§Although 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.”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K&hj>h²hubhÞ)�”}”(hŒCThe GUID used for the _DSM is 7B7656CF-DC3D-4C1C-83E9-66E721DE3070.”h]”hŒCThe GUID used for the _DSM is 7B7656CF-DC3D-4C1C-83E9-66E721DE3070.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K*hj>h²hubhÞ)�”}”(hŒ'3 functions are available in this _DSM:”h]”hŒ'3 functions are available in this _DSM:”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K,hj>h²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ$0: discover # of functions available”h]”hÞ)�”}”(hj‚h]”hŒ$0: discover # of functions available”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K.hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj{h²hh³hÇh´Nubj)�”}”(hŒ1: record RF bands in use”h]”hÞ)�”}”(hj™h]”hŒ1: record RF bands in use”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K/hj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj{h²hh³hÇh´Nubj)�”}”(hŒ2: retrieve RF bands in use ”h]”hÞ)�”}”(hŒ2: retrieve RF bands in use”h]”hŒ2: retrieve RF bands in use”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K0hj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj{h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1jyh³hÇh´K.hj>h²hubeh}”(h]”Œacpi-interface”ah ]”h"]”Œacpi interface”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K$ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒDriver programming interface”h]”hŒDriver programming interface”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÖh²hh³hÇh´K3ubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œ%acpi_amd_wbrf_add_remove (C function)”Œc.acpi_amd_wbrf_add_remove”hNt”auh1jçhjÖh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ`int acpi_amd_wbrf_add_remove (struct device *dev, uint8_t action, struct wbrf_ranges_in_out *in)”h]”hŒdesc_signature_line”“”)�”}”(hŒ_int acpi_amd_wbrf_add_remove(struct device *dev, uint8_t action, struct wbrf_ranges_in_out *in)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j hjh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´KyubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jhjh²hh³jh´KyubhŒ desc_name”“”)�”}”(hŒacpi_amd_wbrf_add_remove”h]”hŒ desc_sig_name”“”)�”}”(hŒacpi_amd_wbrf_add_remove”h]”hŒacpi_amd_wbrf_add_remove”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j2hj.ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1j,hjh²hh³jh´KyubhŒdesc_parameterlist”“”)�”}”(hŒC(struct device *dev, uint8_t action, struct wbrf_ranges_in_out *in)”h]”(hŒdesc_parameter”“”)�”}”(hŒstruct device *dev”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jWhjSubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjSubh)�”}”(hhh]”j3)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjvubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”Œc”Œreftype”Œ identifier”Œ reftarget”j{Œmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”j•Œ ASTIdentifier”“”)�”}”j�j6sbŒc.acpi_amd_wbrf_add_remove”†”asbuh1hhjSubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjSubhŒdesc_sig_punctuation”“”)�”}”(hjÍh]”hŒ*”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j°hjSubj3)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jQhjMubjR)�”}”(hŒuint8_t action”h]”(h)�”}”(hhh]”j3)�”}”(hŒuint8_t”h]”hŒuint8_t”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjÙubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŽŒreftype”j�Œ reftarget”jÞŒmodname”NŒ classname”Nj”j—)�”}”jš]”jžŒc.acpi_amd_wbrf_add_remove”†”asbuh1hhjÕubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjÕubj3)�”}”(hŒaction”h]”hŒaction”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjÕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jQhjMubjR)�”}”(hŒstruct wbrf_ranges_in_out *in”h]”(jX)�”}”(hj[h]”hŒstruct”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jdah"]”h$]”h&]”uh1jWhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjubh)�”}”(hhh]”j3)�”}”(hŒwbrf_ranges_in_out”h]”hŒwbrf_ranges_in_out”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŽŒreftype”j�Œ reftarget”jAŒmodname”NŒ classname”Nj”j—)�”}”jš]”jžŒc.acpi_amd_wbrf_add_remove”†”asbuh1hhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjubj±)�”}”(hjÍh]”hŒ*”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j°hjubj3)�”}”(hŒin”h]”hŒin”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jQhjMubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jKhjh²hh³jh´Kyubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1jŒsphinx_line_type”Œ declarator”hjÿh²hh³jh´Kyubah}”(h]”jöah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jýh³jh´Kyhjúh²hubhŒ desc_content”“”)�”}”(hhh]”hÞ)�”}”(hŒ4add or remove the frequency band the device is using”h]”hŒ4add or remove the frequency band the device is using”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´Kyhj©h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j§hjúh²hh³jh´Kyubeh}”(h]”h ]”(jŽŒfunction”eh"]”h$]”h&]”Œdomain”jŽŒobjtype”jÄŒdesctype”jÄŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jøh²hhjÖh³Nh´NubhŒ 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]”hŒstrong”“”)�”}”(hjÖh]”hŒ Parameters”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K}hjÐubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ&``struct device *dev`` device pointer ”h]”(hŒterm”“”)�”}”(hŒ``struct device *dev``”h]”hŒliteral”“”)�”}”(hjýh]”hŒstruct device *dev”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1jùh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K{hjõubhŒ definition”“”)�”}”(hhh]”hÞ)�”}”(hŒdevice pointer”h]”hŒdevice pointer”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´K{hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jóh³jh´K{hjðubjô)�”}”(hŒ>``uint8_t action`` remove or add the frequency band into bios ”h]”(jú)�”}”(hŒ``uint8_t action``”h]”j)�”}”(hj:h]”hŒuint8_t action”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jùh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K|hj4ubj)�”}”(hhh]”hÞ)�”}”(hŒ*remove or add the frequency band into bios”h]”hŒ*remove or add the frequency band into bios”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jOh´K|hjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jóh³jOh´K|hjðubjô)�”}”(hŒd``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)�”}”(hjsh]”hŒstruct wbrf_ranges_in_out *in”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jùh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K}hjmubj)�”}”(hhh]”hÞ)�”}”(hŒAinput structure containing the frequency band the device is using”h]”hŒAinput structure containing the frequency band the device is using”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jˆh´K}hj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jóh³jˆh´K}hjðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jîhjÐubhÞ)�”}”(hŒ**Description**”h]”jÙ)�”}”(hj®h]”hŒ Description”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´KhjÐubhÞ)�”}”(hX”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.”h]”hX–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.”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K~hjÐubhÞ)�”}”(hŒ **Return**”h]”jÙ)�”}”(hjÕh]”hŒReturn”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K†hjÐubhÞ)�”}”(hŒX0 for success add/remove wifi frequency band. Returns a negative error code for failure.”h]”hŒX0 for success add/remove wifi frequency band. Returns a negative error code for failure.”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K‡hjÐubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jÎhjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒ-acpi_amd_wbrf_supported_producer (C function)”Œ"c.acpi_amd_wbrf_supported_producer”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒ:bool acpi_amd_wbrf_supported_producer (struct device *dev)”h]”j)�”}”(hŒ9bool acpi_amd_wbrf_supported_producer(struct device *dev)”h]”(j )�”}”(hŒbool”h]”hŒbool”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´KŸubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjh²hh³j(h´KŸubj-)�”}”(hŒ acpi_amd_wbrf_supported_producer”h]”j3)�”}”(hŒ acpi_amd_wbrf_supported_producer”h]”hŒ acpi_amd_wbrf_supported_producer”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj7ubah}”(h]”h ]”(jFjGeh"]”h$]”h&]”hÅhÆuh1j,hjh²hh³j(h´KŸubjL)�”}”(hŒ(struct device *dev)”h]”jR)�”}”(hŒstruct device *dev”h]”(jX)�”}”(hj[h]”hŒstruct”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”jdah"]”h$]”h&]”uh1jWhjSubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjSubh)�”}”(hhh]”j3)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŽŒreftype”j�Œ reftarget”jwŒmodname”NŒ classname”Nj”j—)�”}”jš]”j�)�”}”j�j=sbŒ"c.acpi_amd_wbrf_supported_producer”†”asbuh1hhjSubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjSubj±)�”}”(hjÍh]”hŒ*”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j°hjSubj3)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jQhjOubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jKhjh²hh³j(h´KŸubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj™ˆuh1jjšj›hjh²hh³j(h´KŸubah}”(h]”j ah ]”(jŸj eh"]”h$]”h&]”j¤ˆj¥)j¦huh1jýh³j(h´KŸhjh²hubj¨)�”}”(hhh]”hÞ)�”}”(hŒAdetermine if the WBRF can be enabled for the device as a producer”h]”hŒAdetermine if the WBRF can be enabled for the device as a producer”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´KŸhj×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j§hjh²hh³j(h´KŸubeh}”(h]”h ]”(jŽŒfunction”eh"]”h$]”h&]”jÈjŽjÉjòjÊjòjˉj̉j͉uh1jøh²hhjÖh³Nh´NubjÏ)�”}”(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 false”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jÙ)�”}”(hjüh]”hŒ Parameters”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K£hjöubjï)�”}”(hhh]”jô)�”}”(hŒ&``struct device *dev`` device pointer ”h]”(jú)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjh]”hŒstruct device *dev”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jùh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K¢hjubj)�”}”(hhh]”hÞ)�”}”(hŒdevice pointer”h]”hŒdevice pointer”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j0h´K¢hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jóh³j0h´K¢hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhjöubhÞ)�”}”(hŒ**Description**”h]”jÙ)�”}”(hjVh]”hŒ Description”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K¤hjöubhÞ)�”}”(hŒkCheck if the platform equipped with necessary implementations to support WBRF for the device as a producer.”h]”hŒkCheck if the platform equipped with necessary implementations to support WBRF for the device as a producer.”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K£hjöubhÞ)�”}”(hŒ **Return**”h]”jÙ)�”}”(hj}h]”hŒReturn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K¦hjöubhÞ)�”}”(hŒ2true if WBRF is supported, otherwise returns false”h]”hŒ2true if WBRF is supported, otherwise returns false”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K§hjöubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jÎhjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒ-acpi_amd_wbrf_supported_consumer (C function)”Œ"c.acpi_amd_wbrf_supported_consumer”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒ:bool acpi_amd_wbrf_supported_consumer (struct device *dev)”h]”j)�”}”(hŒ9bool acpi_amd_wbrf_supported_consumer(struct device *dev)”h]”(j )�”}”(hjh]”hŒbool”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¾h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K¸ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj¾h²hh³jÏh´K¸ubj-)�”}”(hŒ acpi_amd_wbrf_supported_consumer”h]”j3)�”}”(hŒ acpi_amd_wbrf_supported_consumer”h]”hŒ acpi_amd_wbrf_supported_consumer”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjÞubah}”(h]”h ]”(jFjGeh"]”h$]”h&]”hÅhÆuh1j,hj¾h²hh³jÏh´K¸ubjL)�”}”(hŒ(struct device *dev)”h]”jR)�”}”(hŒstruct device *dev”h]”(jX)�”}”(hj[h]”hŒstruct”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jdah"]”h$]”h&]”uh1jWhjúubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjúubh)�”}”(hhh]”j3)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŽŒreftype”j�Œ reftarget”jŒmodname”NŒ classname”Nj”j—)�”}”jš]”j�)�”}”j�jäsbŒ"c.acpi_amd_wbrf_supported_consumer”†”asbuh1hhjúubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjúubj±)�”}”(hjÍh]”hŒ*”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j°hjúubj3)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjúubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jQhjöubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jKhj¾h²hh³jÏh´K¸ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj™ˆuh1jjšj›hjºh²hh³jÏh´K¸ubah}”(h]”jµah ]”(jŸj eh"]”h$]”h&]”j¤ˆj¥)j¦huh1jýh³jÏh´K¸hj·h²hubj¨)�”}”(hhh]”hÞ)�”}”(hŒAdetermine if the WBRF can be enabled for the device as a consumer”h]”hŒAdetermine if the WBRF can be enabled for the device as a consumer”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K¸hj~h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j§hj·h²hh³jÏh´K¸ubeh}”(h]”h ]”(jŽŒfunction”eh"]”h$]”h&]”jÈjŽjÉj™jÊj™jˉj̉j͉uh1jøh²hhjÖh³Nh´NubjÏ)�”}”(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Ù)�”}”(hj£h]”hŒ Parameters”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K¼hj�ubjï)�”}”(hhh]”jô)�”}”(hŒ&``struct device *dev`` device pointer ”h]”(jú)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjÂh]”hŒstruct device *dev”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿhjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jùh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K»hj¼ubj)�”}”(hhh]”hÞ)�”}”(hŒdevice pointer”h]”hŒdevice pointer”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j×h´K»hjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jóh³j×h´K»hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhj�ubhÞ)�”}”(hŒ**Description**”h]”jÙ)�”}”(hjýh]”hŒ Description”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K½hj�ubhÞ)�”}”(hŒoDetermine if the platform equipped with necessary implementations to support WBRF for the device as a consumer.”h]”hŒoDetermine if the platform equipped with necessary implementations to support WBRF for the device as a consumer.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K¼hj�ubhÞ)�”}”(hŒ **Return**”h]”jÙ)�”}”(hj$h]”hŒReturn”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´K¿hj�ubhÞ)�”}”(hŒ3true if WBRF is supported, otherwise returns false.”h]”hŒ3true if WBRF is supported, otherwise returns false.”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´KÀhj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jÎhjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒ(amd_wbrf_retrieve_freq_band (C function)”Œc.amd_wbrf_retrieve_freq_band”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒTint amd_wbrf_retrieve_freq_band (struct device *dev, struct wbrf_ranges_in_out *out)”h]”j)�”}”(hŒSint amd_wbrf_retrieve_freq_band(struct device *dev, struct wbrf_ranges_in_out *out)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjeh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´KÑubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjeh²hh³jwh´KÑubj-)�”}”(hŒamd_wbrf_retrieve_freq_band”h]”j3)�”}”(hŒamd_wbrf_retrieve_freq_band”h]”hŒamd_wbrf_retrieve_freq_band”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj†ubah}”(h]”h ]”(jFjGeh"]”h$]”h&]”hÅhÆuh1j,hjeh²hh³jwh´KÑubjL)�”}”(hŒ4(struct device *dev, struct wbrf_ranges_in_out *out)”h]”(jR)�”}”(hŒstruct device *dev”h]”(jX)�”}”(hj[h]”hŒstruct”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jdah"]”h$]”h&]”uh1jWhj¢ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj¢ubh)�”}”(hhh]”j3)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjÁubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŽŒreftype”j�Œ reftarget”jÆŒmodname”NŒ classname”Nj”j—)�”}”jš]”j�)�”}”j�jŒsbŒc.amd_wbrf_retrieve_freq_band”†”asbuh1hhj¢ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj¢ubj±)�”}”(hjÍh]”hŒ*”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j°hj¢ubj3)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jQhjžubjR)�”}”(hŒstruct wbrf_ranges_in_out *out”h]”(jX)�”}”(hj[h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jdah"]”h$]”h&]”uh1jWhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj% h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj ubh)�”}”(hhh]”j3)�”}”(hŒwbrf_ranges_in_out”h]”hŒwbrf_ranges_in_out”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj3 ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŽŒreftype”j�Œ reftarget”j8 Œmodname”NŒ classname”Nj”j—)�”}”jš]”jàŒc.amd_wbrf_retrieve_freq_band”†”asbuh1hhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj ubj±)�”}”(hjÍh]”hŒ*”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j°hj ubj3)�”}”(hŒout”h]”hŒout”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jQhjžubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jKhjeh²hh³jwh´KÑubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj™ˆuh1jjšj›hjah²hh³jwh´KÑubah}”(h]”j\ah ]”(jŸj eh"]”h$]”h&]”j¤ˆj¥)j¦huh1jýh³jwh´KÑhj^h²hubj¨)�”}”(hhh]”hÞ)�”}”(hŒ'retrieve current active frequency bands”h]”hŒ'retrieve current active frequency bands”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´KÑhj– h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j§hj^h²hh³jwh´KÑubeh}”(h]”h ]”(jŽŒfunction”eh"]”h$]”h&]”jÈjŽjÉj± jÊj± jˉj̉j͉uh1jøh²hhjÖh³Nh´NubjÏ)�”}”(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½ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj¹ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´KÕhjµ ubjï)�”}”(hhh]”(jô)�”}”(hŒ&``struct device *dev`` device pointer ”h]”(jú)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjÚ h]”hŒstruct device *dev”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿhjØ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jùh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´KÓhjÔ ubj)�”}”(hhh]”hÞ)�”}”(hŒdevice pointer”h]”hŒdevice pointer”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jï h´KÓhjð ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jóh³jï h´KÓhjÑ 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]”hŒstruct wbrf_ranges_in_out *out”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jùh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´KÔhj ubj)�”}”(hhh]”hÞ)�”}”(hŒ:output structure containing all the active frequency bands”h]”hŒ:output structure containing all the active frequency bands”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j( h´KÔhj) ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jóh³j( h´KÔhjÑ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jîhjµ ubhÞ)�”}”(hŒ**Description**”h]”jÙ)�”}”(hjN h]”hŒ Description”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjL ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´KÖhjµ ubhÞ)�”}”(hŒÞ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.”h]”hŒÞ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.”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´KÕhjµ ubhÞ)�”}”(hŒ **Return**”h]”jÙ)�”}”(hju h]”hŒReturn”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjs ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´KÚhjµ ubhÞ)�”}”(hŒU0 for getting wifi freq band successfully. Returns a negative error code for failure.”h]”hŒU0 for getting wifi freq band successfully. Returns a negative error code for failure.”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´KÛhjµ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jÎhjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒ'amd_wbrf_register_notifier (C function)”Œc.amd_wbrf_register_notifier”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒ:int amd_wbrf_register_notifier (struct notifier_block *nb)”h]”j)�”}”(hŒ9int amd_wbrf_register_notifier(struct notifier_block *nb)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¶ h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj¶ h²hh³jÈ h´Mubj-)�”}”(hŒamd_wbrf_register_notifier”h]”j3)�”}”(hŒamd_wbrf_register_notifier”h]”hŒamd_wbrf_register_notifier”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj× ubah}”(h]”h ]”(jFjGeh"]”h$]”h&]”hÅhÆuh1j,hj¶ h²hh³jÈ h´MubjL)�”}”(hŒ(struct notifier_block *nb)”h]”jR)�”}”(hŒstruct notifier_block *nb”h]”(jX)�”}”(hj[h]”hŒstruct”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”jdah"]”h$]”h&]”uh1jWhjó ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjó ubh)�”}”(hhh]”j3)�”}”(hŒnotifier_block”h]”hŒnotifier_block”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŽŒreftype”j�Œ reftarget”j Œmodname”NŒ classname”Nj”j—)�”}”jš]”j�)�”}”j�jÝ sbŒc.amd_wbrf_register_notifier”†”asbuh1hhjó ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjó ubj±)�”}”(hjÍh]”hŒ*”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j°hjó ubj3)�”}”(hŒnb”h]”hŒnb”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjó ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jQhjï ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jKhj¶ h²hh³jÈ h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj™ˆuh1jjšj›hj² h²hh³jÈ h´Mubah}”(h]”j­ ah ]”(jŸj eh"]”h$]”h&]”j¤ˆj¥)j¦huh1jýh³jÈ h´Mhj¯ h²hubj¨)�”}”(hhh]”hÞ)�”}”(hŒ3register for notifications of frequency band update”h]”hŒ3register for notifications of frequency band update”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´Mhjw h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j§hj¯ h²hh³jÈ h´Mubeh}”(h]”h ]”(jŽŒfunction”eh"]”h$]”h&]”jÈjŽjÉj’ jÊj’ jˉj̉j͉uh1jøh²hhjÖh³Nh´NubjÏ)�”}”(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ž h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjš ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´Mhj– ubjï)�”}”(hhh]”jô)�”}”(hŒ4``struct notifier_block *nb`` driver notifier block ”h]”(jú)�”}”(hŒ``struct notifier_block *nb``”h]”j)�”}”(hj» h]”hŒstruct notifier_block *nb”…”�”}”(hj½ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿhj¹ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jùh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´Mhjµ ubj)�”}”(hhh]”hÞ)�”}”(hŒdriver notifier block”h]”hŒdriver notifier block”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÐ h´MhjÑ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jóh³jÐ h´Mhj² ubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhj– ubhÞ)�”}”(hŒ**Description**”h]”jÙ)�”}”(hjö h]”hŒ Description”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjô ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´Mhj– ubhÞ)�”}”(hŒ€The consumer should register itself via this API so that it can get notified on the frequency band updates from other producers.”h]”hŒ€The consumer should register itself via this API so that it can get notified on the frequency band updates from other producers.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´Mhj– ubhÞ)�”}”(hŒ **Return**”h]”jÙ)�”}”(hj h]”hŒReturn”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´Mhj– 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.”…”�”}”(hj3 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´Mhj– ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jÎhjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒ)amd_wbrf_unregister_notifier (C function)”Œc.amd_wbrf_unregister_notifier”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒ ubjï)�”}”(hhh]”jô)�”}”(hŒ4``struct notifier_block *nb`` driver notifier block ”h]”(jú)�”}”(hŒ``struct notifier_block *nb``”h]”j)�”}”(hjc h]”hŒstruct notifier_block *nb”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÿhja ubah}”(h]”h ]”h"]”h$]”h&]”uh1jùh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´M)hj] ubj)�”}”(hhh]”hÞ)�”}”(hŒdriver notifier block”h]”hŒdriver notifier block”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jx h´M)hjy ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj] ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jóh³jx h´M)hjZ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhj> ubhÞ)�”}”(hŒ**Description**”h]”jÙ)�”}”(hjž h]”hŒ Description”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjœ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´M+hj> ubhÞ)�”}”(hŒ­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.”h]”hŒ­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.”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´M*hj> ubhÞ)�”}”(hŒ **Return**”h]”jÙ)�”}”(hjÅ h]”hŒReturn”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØhjà ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´M.hj> ubhÞ)�”}”(hŒQ0 for unregistering a consumer driver. Returns a negative error code for failure.”h]”hŒQ0 for unregistering a consumer driver. Returns a negative error code for failure.”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/wbrf:53: ./drivers/platform/x86/amd/wbrf.c”h´M/hj> ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jÎhjÖh²hh³Nh´Nubeh}”(h]”Œdriver-programming-interface”ah ]”h"]”Œdriver programming interface”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K3ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Sample Usage”h]”hŒ Sample Usage”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjù h²hh³hÇh´K8ubhÞ)�”}”(hX‹The 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 h²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ"`acpi_amd_wbrf_supported_producer`”h]”hŒ acpi_amd_wbrf_supported_producer”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒW to check if WBRF can be enabled for the device. 2. On using some frequency band, call ”…”�”}”(hj h²hh³Nh´Nubj)�”}”(hŒ`acpi_amd_wbrf_add_remove`”h]”hŒacpi_amd_wbrf_add_remove”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒr with ‘add’ param to get other consumers properly notified. 3. Or on stopping using some frequency band, call ”…”�”}”(hj h²hh³Nh´Nubj)�”}”(hŒ`acpi_amd_wbrf_add_remove`”h]”hŒacpi_amd_wbrf_add_remove”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ9 with ‘remove’ param to get other consumers notified.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K:hjù h²hubhÞ)�”}”(hX¬The 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 ”…”�”}”(hjPh²hh³Nh´Nubj)�”}”(hŒ"`acpi_amd_wbrf_supported_consumer`”h]”hŒ acpi_amd_wbrf_supported_consumer”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubhŒ9 to check if WBRF can be enabled for the device. 2. Call ”…”�”}”(hjPh²hh³Nh´Nubj)�”}”(hŒ`amd_wbrf_register_notifier`”h]”hŒamd_wbrf_register_notifier”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubhŒh to register for notification of frequency band change(add or remove) from other producers. 3. Call the ”…”�”}”(hjPh²hh³Nh´Nubj)�”}”(hŒ`amd_wbrf_retrieve_freq_band`”h]”hŒamd_wbrf_retrieve_freq_band”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubhŒÉ 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 ”…”�”}”(hjPh²hh³Nh´Nubj)�”}”(hŒ`amd_wbrf_retrieve_freq_band`”h]”hŒamd_wbrf_retrieve_freq_band”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubhŒU again to retrieve the latest active frequency bands. 5. During driver cleanup, call ”…”�”}”(hjPh²hh³Nh´Nubj)�”}”(hŒ`amd_wbrf_unregister_notifier`”h]”hŒamd_wbrf_unregister_notifier”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubhŒ to unregister the notifier.”…”�”}”(hjPh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KBhjù h²hubeh}”(h]”Œ sample-usage”ah ]”h"]”Œ sample usage”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K8ubeh}”(h]”Œwbrf-wifi-band-rfi-mitigations”ah ]”h"]”Œ wbrf - wifi band rfi mitigations”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jëŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jÅjÂj;j8jÓjÐjö jó j½jºuŒ nametypes”}”(jʼnj;‰jÓ‰jö ‰j½‰uh}”(jÂhÊj8j jÐj>jó jÖjöjÿj jjµjºj\jaj­ j² jU jZ jºjù uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.