€•Œ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”Œ8/translations/zh_CN/driver-api/firmware/request_firmware”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ8/translations/zh_TW/driver-api/firmware/request_firmware”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ8/translations/it_IT/driver-api/firmware/request_firmware”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ8/translations/ja_JP/driver-api/firmware/request_firmware”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ8/translations/ko_KR/driver-api/firmware/request_firmware”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ8/translations/pt_BR/driver-api/firmware/request_firmware”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ8/translations/sp_SP/driver-api/firmware/request_firmware”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒrequest_firmware API”h]”hŒrequest_firmware API”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware.rst”h´KubhŒ paragraph”“”)�”}”(hŒ€You would typically load firmware and then load it into your device somehow. The typical firmware work flow is reflected below::”h]”hŒYou would typically load firmware and then load it into your device somehow. The typical firmware work flow is reflected below:”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhŒ literal_block”“”)�”}”(hŒ�if(request_firmware(&fw_entry, $FIRMWARE, device) == 0) copy_fw_to_device(fw_entry->data, fw_entry->size); release_firmware(fw_entry);”h]”hŒ�if(request_firmware(&fw_entry, $FIRMWARE, device) == 0) copy_fw_to_device(fw_entry->data, fw_entry->size); release_firmware(fw_entry);”…”�”}”hhÝsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hÛh³hÊh´Khh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒSynchronous firmware requests”h]”hŒSynchronous firmware requests”…”�”}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhíh²hh³hÊh´K ubhÌ)�”}”(hŒbSynchronous firmware requests will wait until the firmware is found or until an error is returned.”h]”hŒbSynchronous firmware requests will wait until the firmware is found or until an error is returned.”…”�”}”(hhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khhíh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒrequest_firmware”h]”hŒrequest_firmware”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´KubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œrequest_firmware (C function)”Œc.request_firmware”hNt”auh1jhj h²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒbint request_firmware (const struct firmware **firmware_p, const char *name, struct device *device)”h]”hŒdesc_signature_line”“”)�”}”(hŒaint request_firmware(const struct firmware **firmware_p, const char *name, struct device *device)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒint”h]”hŒint”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j?hj;h²hh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:20: ./drivers/base/firmware_loader/main.c”h´M—ubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jQhj;h²hh³jPh´M—ubhŒ desc_name”“”)�”}”(hŒrequest_firmware”h]”hŒ desc_sig_name”“”)�”}”(hŒrequest_firmware”h]”hŒrequest_firmware”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jhhjdubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hëhìuh1jbhj;h²hh³jPh´M—ubhŒdesc_parameterlist”“”)�”}”(hŒM(const struct firmware **firmware_p, const char *name, struct device *device)”h]”(hŒdesc_parameter”“”)�”}”(hŒ"const struct firmware **firmware_p”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒconst”h]”hŒconst”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1j�hj‰ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj‰ubjŽ)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hj‰ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj‰ubh)�”}”(hhh]”ji)�”}”(hŒfirmware”h]”hŒfirmware”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjÈubah}”(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âjlsbŒc.request_firmware”†”asbuh1hhj‰ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj‰ubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jhj‰ubj)�”}”(hjh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‰ubji)�”}”(hŒ firmware_p”h]”hŒ firmware_p”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj‰ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjƒubjˆ)�”}”(hŒconst char *name”h]”(jŽ)�”}”(hj‘h]”hŒconst”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hj5ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj5ubj@)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hj5ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj5ubj)�”}”(hjh]”hŒ*”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5ubji)�”}”(hŒname”h]”hŒname”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjƒubjˆ)�”}”(hŒstruct device *device”h]”(jŽ)�”}”(hj®h]”hŒstruct”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hj’ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj’ubh)�”}”(hhh]”ji)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj±ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jàŒreftype”j⌠reftarget”j¶Œmodname”NŒ classname”Njæjé)�”}”jì]”jðŒc.request_firmware”†”asbuh1hhj’ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj’ubj)�”}”(hjh]”hŒ*”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’ubji)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjƒubeh}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j�hj;h²hh³jPh´M—ubeh}”(h]”h ]”h"]”h$]”h&]”hëhìŒ add_permalink”ˆuh1j9Œsphinx_line_type”Œ declarator”hj5h²hh³jPh´M—ubah}”(h]”j,ah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1j3h³jPh´M—hj0h²hubhŒ desc_content”“”)�”}”(hhh]”hÌ)�”}”(hŒ%send firmware request and wait for it”h]”hŒ%send firmware request and wait for it”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:20: ./drivers/base/firmware_loader/main.c”h´M—hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0h²hh³jPh´M—ubeh}”(h]”h ]”(jàŒfunction”eh"]”h$]”h&]”Œdomain”jàŒobjtype”j9Œdesctype”j9Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1j.h²hhj h³Nh´NubhŒ container”“”)�”}”(hXO**Parameters** ``const struct firmware **firmware_p`` pointer to firmware image ``const char *name`` name of firmware file ``struct device *device`` device for which firmware is being loaded **Description** **firmware_p** will be used to return a firmware image by the name of **name** for device **device**. Should be called from user context where sleeping is allowed. **name** will be used as $FIRMWARE in the uevent environment and should be distinctive enough not to be confused with any other firmware image for this or any other device. It must not contain any ".." path components - "foo/bar..bin" is allowed, but "foo/../bar.bin" is not. Caller must hold the reference count of **device**. The function can be called safely inside device's suspend and resume callback.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hjKh]”hŒ Parameters”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:20: ./drivers/base/firmware_loader/main.c”h´M›hjEubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒA``const struct firmware **firmware_p`` pointer to firmware image ”h]”(hŒterm”“”)�”}”(hŒ&``const struct firmware **firmware_p``”h]”hŒliteral”“”)�”}”(hjrh]”hŒ"const struct firmware **firmware_p”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:20: ./drivers/base/firmware_loader/main.c”h´M˜hjjubhŒ definition”“”)�”}”(hhh]”hÌ)�”}”(hŒpointer to firmware image”h]”hŒpointer to firmware image”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j‰h´M˜hjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j‰h´M˜hjeubji)�”}”(hŒ+``const char *name`` name of firmware file ”h]”(jo)�”}”(hŒ``const char *name``”h]”ju)�”}”(hj¯h]”hŒconst char *name”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:20: ./drivers/base/firmware_loader/main.c”h´M™hj©ubj‹)�”}”(hhh]”hÌ)�”}”(hŒname of firmware file”h]”hŒname of firmware file”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÄh´M™hjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jÄh´M™hjeubji)�”}”(hŒD``struct device *device`` device for which firmware is being loaded ”h]”(jo)�”}”(hŒ``struct device *device``”h]”ju)�”}”(hjèh]”hŒstruct device *device”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:20: ./drivers/base/firmware_loader/main.c”h´Mšhjâubj‹)�”}”(hhh]”hÌ)�”}”(hŒ)device for which firmware is being loaded”h]”hŒ)device for which firmware is being loaded”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jýh´Mšhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jýh´Mšhjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jchjEubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hj#h]”hŒ Description”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:20: ./drivers/base/firmware_loader/main.c”h´MœhjEubhŒ block_quote”“”)�”}”(hX>**firmware_p** will be used to return a firmware image by the name of **name** for device **device**. Should be called from user context where sleeping is allowed. **name** will be used as $FIRMWARE in the uevent environment and should be distinctive enough not to be confused with any other firmware image for this or any other device. It must not contain any ".." path components - "foo/bar..bin" is allowed, but "foo/../bar.bin" is not. Caller must hold the reference count of **device**. The function can be called safely inside device's suspend and resume callback.”h]”(hÌ)�”}”(hŒe**firmware_p** will be used to return a firmware image by the name of **name** for device **device**.”h]”(jN)�”}”(hŒ**firmware_p**”h]”hŒ firmware_p”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj?ubhŒ8 will be used to return a firmware image by the name of ”…”�”}”(hj?h²hh³Nh´NubjN)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj?ubhŒ for device ”…”�”}”(hj?h²hh³Nh´NubjN)�”}”(hŒ **device**”h]”hŒdevice”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj?ubhŒ.”…”�”}”(hj?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:20: ./drivers/base/firmware_loader/main.c”h´M›hj;ubhÌ)�”}”(hŒ=Should be called from user context where sleeping is allowed.”h]”hŒ=Should be called from user context where sleeping is allowed.”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:20: ./drivers/base/firmware_loader/main.c”h´Mžhj;ubhÌ)�”}”(hX**name** will be used as $FIRMWARE in the uevent environment and should be distinctive enough not to be confused with any other firmware image for this or any other device. It must not contain any ".." path components - "foo/bar..bin" is allowed, but "foo/../bar.bin" is not.”h]”(jN)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj�ubhX will be used as $FIRMWARE in the uevent environment and should be distinctive enough not to be confused with any other firmware image for this or any other device. It must not contain any “..â€� path components - “foo/bar..binâ€� is allowed, but “foo/../bar.binâ€� is not.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:20: ./drivers/base/firmware_loader/main.c”h´M hj;ubhÌ)�”}”(hŒ3Caller must hold the reference count of **device**.”h]”(hŒ(Caller must hold the reference count of ”…”�”}”(hj¬h²hh³Nh´NubjN)�”}”(hŒ **device**”h]”hŒdevice”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj¬ubhŒ.”…”�”}”(hj¬h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:20: ./drivers/base/firmware_loader/main.c”h´M¦hj;ubhÌ)�”}”(hŒNThe function can be called safely inside device's suspend and resume callback.”h]”hŒPThe function can be called safely inside device’s suspend and resume callback.”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:20: ./drivers/base/firmware_loader/main.c”h´M¨hj;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j9h³jh´M›hjEubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jChj h²hh³Nh´Nubeh}”(h]”Œrequest-firmware”ah ]”h"]”Œrequest_firmware”ah$]”h&]”uh1hµhhíh²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒfirmware_request_nowarn”h]”hŒfirmware_request_nowarn”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjñh²hh³hÊh´Kubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j*Œ$firmware_request_nowarn (C function)”Œc.firmware_request_nowarn”hNt”auh1jhjñh²hh³Nh´Nubj/)�”}”(hhh]”(j4)�”}”(hŒgint firmware_request_nowarn (const struct firmware **firmware, const char *name, struct device *device)”h]”j:)�”}”(hŒfint firmware_request_nowarn(const struct firmware **firmware, const char *name, struct device *device)”h]”(j@)�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hjh²hh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:25: ./drivers/base/firmware_loader/main.c”h´M¼ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjh²hh³j)h´M¼ubjc)�”}”(hŒfirmware_request_nowarn”h]”ji)�”}”(hŒfirmware_request_nowarn”h]”hŒfirmware_request_nowarn”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj8ubah}”(h]”h ]”(j|j}eh"]”h$]”h&]”hëhìuh1jbhjh²hh³j)h´M¼ubj‚)�”}”(hŒK(const struct firmware **firmware, const char *name, struct device *device)”h]”(jˆ)�”}”(hŒ const struct firmware **firmware”h]”(jŽ)�”}”(hj‘h]”hŒconst”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjTubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjTubjŽ)�”}”(hj®h]”hŒstruct”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjTubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjTubh)�”}”(hhh]”ji)�”}”(hŒfirmware”h]”hŒfirmware”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjŽubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jàŒreftype”j⌠reftarget”j“Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâj>sbŒc.firmware_request_nowarn”†”asbuh1hhjTubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjTubj)�”}”(hjh]”hŒ*”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTubj)�”}”(hjh]”hŒ*”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTubji)�”}”(hŒfirmware”h]”hŒfirmware”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjPubjˆ)�”}”(hŒconst char *name”h]”(jŽ)�”}”(hj‘h]”hŒconst”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjîubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjîubj@)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hjîubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjîubj)�”}”(hjh]”hŒ*”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîubji)�”}”(hŒname”h]”hŒname”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjîubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjPubjˆ)�”}”(hŒstruct device *device”h]”(jŽ)�”}”(hj®h]”hŒstruct”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjKubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjKubh)�”}”(hhh]”ji)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jàŒreftype”j⌠reftarget”joŒmodname”NŒ classname”Njæjé)�”}”jì]”j­Œc.firmware_request_nowarn”†”asbuh1hhjKubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjKubj)�”}”(hjh]”hŒ*”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjKubji)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjKubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjPubeh}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j�hjh²hh³j)h´M¼ubeh}”(h]”h ]”h"]”h$]”h&]”hëhìjˆuh1j9jjhjh²hh³j)h´M¼ubah}”(h]”jah ]”(jjeh"]”h$]”h&]”jˆj)jhuh1j3h³j)h´M¼hjh²hubj)�”}”(hhh]”hÌ)�”}”(hŒ!request for an optional fw module”h]”hŒ!request for an optional fw module”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:25: ./drivers/base/firmware_loader/main.c”h´M¼hjÍh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³j)h´M¼ubeh}”(h]”h ]”(jàŒfunction”eh"]”h$]”h&]”j=jàj>jèj?jèj@‰jA‰jB‰uh1j.h²hhjñh³Nh´NubjD)�”}”(hXn**Parameters** ``const struct firmware **firmware`` pointer to firmware image ``const char *name`` name of firmware file ``struct device *device`` device for which firmware is being loaded **Description** This function is similar in behaviour to request_firmware(), except it doesn't produce warning messages when the file is not found. The sysfs fallback mechanism is enabled if direct filesystem lookup fails. However, failures to find the firmware file with it are still suppressed. It is therefore up to the driver to check for the return value of this call and to decide when to inform the users of errors.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hjòh]”hŒ Parameters”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:25: ./drivers/base/firmware_loader/main.c”h´MÀhjìubjd)�”}”(hhh]”(ji)�”}”(hŒ?``const struct firmware **firmware`` pointer to firmware image ”h]”(jo)�”}”(hŒ$``const struct firmware **firmware``”h]”ju)�”}”(hjh]”hŒ const struct firmware **firmware”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:25: ./drivers/base/firmware_loader/main.c”h´M½hj ubj‹)�”}”(hhh]”hÌ)�”}”(hŒpointer to firmware image”h]”hŒpointer to firmware image”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j&h´M½hj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j&h´M½hjubji)�”}”(hŒ+``const char *name`` name of firmware file ”h]”(jo)�”}”(hŒ``const char *name``”h]”ju)�”}”(hjJh]”hŒconst char *name”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:25: ./drivers/base/firmware_loader/main.c”h´M¾hjDubj‹)�”}”(hhh]”hÌ)�”}”(hŒname of firmware file”h]”hŒname of firmware file”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j_h´M¾hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j_h´M¾hjubji)�”}”(hŒD``struct device *device`` device for which firmware is being loaded ”h]”(jo)�”}”(hŒ``struct device *device``”h]”ju)�”}”(hjƒh]”hŒstruct device *device”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:25: ./drivers/base/firmware_loader/main.c”h´M¿hj}ubj‹)�”}”(hhh]”hÌ)�”}”(hŒ)device for which firmware is being loaded”h]”hŒ)device for which firmware is being loaded”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j˜h´M¿hj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j˜h´M¿hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jchjìubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hj¾h]”hŒ Description”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:25: ./drivers/base/firmware_loader/main.c”h´MÁhjìubhÌ)�”}”(hX–This function is similar in behaviour to request_firmware(), except it doesn't produce warning messages when the file is not found. The sysfs fallback mechanism is enabled if direct filesystem lookup fails. However, failures to find the firmware file with it are still suppressed. It is therefore up to the driver to check for the return value of this call and to decide when to inform the users of errors.”h]”hX˜This function is similar in behaviour to request_firmware(), except it doesn’t produce warning messages when the file is not found. The sysfs fallback mechanism is enabled if direct filesystem lookup fails. However, failures to find the firmware file with it are still suppressed. It is therefore up to the driver to check for the return value of this call and to decide when to inform the users of errors.”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:25: ./drivers/base/firmware_loader/main.c”h´MÀhjìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jChjñh²hh³Nh´Nubeh}”(h]”Œfirmware-request-nowarn”ah ]”h"]”Œfirmware_request_nowarn”ah$]”h&]”uh1hµhhíh²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒfirmware_request_platform”h]”hŒfirmware_request_platform”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjòh²hh³hÊh´Kubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j*Œ&firmware_request_platform (C function)”Œc.firmware_request_platform”hNt”auh1jhjòh²hh³Nh´Nubj/)�”}”(hhh]”(j4)�”}”(hŒiint firmware_request_platform (const struct firmware **firmware, const char *name, struct device *device)”h]”j:)�”}”(hŒhint firmware_request_platform(const struct firmware **firmware, const char *name, struct device *device)”h]”(j@)�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hjh²hh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:30: ./drivers/base/firmware_loader/main.c”h´MðubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjh²hh³j*h´Mðubjc)�”}”(hŒfirmware_request_platform”h]”ji)�”}”(hŒfirmware_request_platform”h]”hŒfirmware_request_platform”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj9ubah}”(h]”h ]”(j|j}eh"]”h$]”h&]”hëhìuh1jbhjh²hh³j*h´Mðubj‚)�”}”(hŒK(const struct firmware **firmware, const char *name, struct device *device)”h]”(jˆ)�”}”(hŒ const struct firmware **firmware”h]”(jŽ)�”}”(hj‘h]”hŒconst”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjUubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjUubjŽ)�”}”(hj®h]”hŒstruct”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjUubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjUubh)�”}”(hhh]”ji)�”}”(hŒfirmware”h]”hŒfirmware”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jàŒreftype”j⌠reftarget”j”Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâj?sbŒc.firmware_request_platform”†”asbuh1hhjUubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjUubj)�”}”(hjh]”hŒ*”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUubj)�”}”(hjh]”hŒ*”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUubji)�”}”(hŒfirmware”h]”hŒfirmware”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjQubjˆ)�”}”(hŒconst char *name”h]”(jŽ)�”}”(hj‘h]”hŒconst”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjïubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjïubj@)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hjïubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjïubj)�”}”(hjh]”hŒ*”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjïubji)�”}”(hŒname”h]”hŒname”…”�”}”(hj7 h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjQubjˆ)�”}”(hŒstruct device *device”h]”(jŽ)�”}”(hj®h]”hŒstruct”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjL ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj] h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjL ubh)�”}”(hhh]”ji)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjk ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jàŒreftype”j⌠reftarget”jp Œmodname”NŒ classname”Njæjé)�”}”jì]”j®Œc.firmware_request_platform”†”asbuh1hhjL ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjL ubj)�”}”(hjh]”hŒ*”…”�”}”(hjš h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjL ubji)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjL ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjQubeh}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j�hjh²hh³j*h´Mðubeh}”(h]”h ]”h"]”h$]”h&]”hëhìjˆuh1j9jjhjh²hh³j*h´Mðubah}”(h]”jah ]”(jjeh"]”h$]”h&]”jˆj)jhuh1j3h³j*h´Mðhjh²hubj)�”}”(hhh]”hÌ)�”}”(hŒ*request firmware with platform-fw fallback”h]”hŒ*request firmware with platform-fw fallback”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:30: ./drivers/base/firmware_loader/main.c”h´MðhjÎ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³j*h´Mðubeh}”(h]”h ]”(jàŒfunction”eh"]”h$]”h&]”j=jàj>jé j?jé j@‰jA‰jB‰uh1j.h²hhjòh³Nh´NubjD)�”}”(hX¸**Parameters** ``const struct firmware **firmware`` pointer to firmware image ``const char *name`` name of firmware file ``struct device *device`` device for which firmware is being loaded **Description** This function is similar in behaviour to request_firmware, except that if direct filesystem lookup fails, it will fallback to looking for a copy of the requested firmware embedded in the platform's main (e.g. UEFI) firmware.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hjó h]”hŒ Parameters”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjñ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:30: ./drivers/base/firmware_loader/main.c”h´Môhjí ubjd)�”}”(hhh]”(ji)�”}”(hŒ?``const struct firmware **firmware`` pointer to firmware image ”h]”(jo)�”}”(hŒ$``const struct firmware **firmware``”h]”ju)�”}”(hj h]”hŒ const struct firmware **firmware”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:30: ./drivers/base/firmware_loader/main.c”h´Mñhj ubj‹)�”}”(hhh]”hÌ)�”}”(hŒpointer to firmware image”h]”hŒpointer to firmware image”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j' h´Mñhj( ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j' h´Mñhj ubji)�”}”(hŒ+``const char *name`` name of firmware file ”h]”(jo)�”}”(hŒ``const char *name``”h]”ju)�”}”(hjK h]”hŒconst char *name”…”�”}”(hjM h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjI ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:30: ./drivers/base/firmware_loader/main.c”h´MòhjE ubj‹)�”}”(hhh]”hÌ)�”}”(hŒname of firmware file”h]”hŒname of firmware file”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j` h´Mòhja ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjE ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j` h´Mòhj ubji)�”}”(hŒD``struct device *device`` device for which firmware is being loaded ”h]”(jo)�”}”(hŒ``struct device *device``”h]”ju)�”}”(hj„ h]”hŒstruct device *device”…”�”}”(hj† h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthj‚ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:30: ./drivers/base/firmware_loader/main.c”h´Móhj~ ubj‹)�”}”(hhh]”hÌ)�”}”(hŒ)device for which firmware is being loaded”h]”hŒ)device for which firmware is being loaded”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j™ h´Móhjš ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj~ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j™ h´Móhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jchjí ubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hj¿ h]”hŒ Description”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj½ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:30: ./drivers/base/firmware_loader/main.c”h´Mõhjí ubhÌ)�”}”(hŒàThis function is similar in behaviour to request_firmware, except that if direct filesystem lookup fails, it will fallback to looking for a copy of the requested firmware embedded in the platform's main (e.g. UEFI) firmware.”h]”hŒâThis function is similar in behaviour to request_firmware, except that if direct filesystem lookup fails, it will fallback to looking for a copy of the requested firmware embedded in the platform’s main (e.g. UEFI) firmware.”…”�”}”(hjÕ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:30: ./drivers/base/firmware_loader/main.c”h´Môhjí ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jChjòh²hh³Nh´Nubeh}”(h]”Œfirmware-request-platform”ah ]”h"]”Œfirmware_request_platform”ah$]”h&]”uh1hµhhíh²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒrequest_firmware_direct”h]”hŒrequest_firmware_direct”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjó h²hh³hÊh´K"ubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j*Œ$request_firmware_direct (C function)”Œc.request_firmware_direct”hNt”auh1jhjó h²hh³Nh´Nubj/)�”}”(hhh]”(j4)�”}”(hŒiint request_firmware_direct (const struct firmware **firmware_p, const char *name, struct device *device)”h]”j:)�”}”(hŒhint request_firmware_direct(const struct firmware **firmware_p, const char *name, struct device *device)”h]”(j@)�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hj h²hh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:35: ./drivers/base/firmware_loader/main.c”h´M×ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj h²hh³j+ h´M×ubjc)�”}”(hŒrequest_firmware_direct”h]”ji)�”}”(hŒrequest_firmware_direct”h]”hŒrequest_firmware_direct”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj: ubah}”(h]”h ]”(j|j}eh"]”h$]”h&]”hëhìuh1jbhj h²hh³j+ h´M×ubj‚)�”}”(hŒM(const struct firmware **firmware_p, const char *name, struct device *device)”h]”(jˆ)�”}”(hŒ"const struct firmware **firmware_p”h]”(jŽ)�”}”(hj‘h]”hŒconst”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjV ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjV ubjŽ)�”}”(hj®h]”hŒstruct”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjV ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjV ubh)�”}”(hhh]”ji)�”}”(hŒfirmware”h]”hŒfirmware”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj� ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jàŒreftype”j⌠reftarget”j• Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâj@ sbŒc.request_firmware_direct”†”asbuh1hhjV ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjV ubj)�”}”(hjh]”hŒ*”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjV ubj)�”}”(hjh]”hŒ*”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjV ubji)�”}”(hŒ firmware_p”h]”hŒ firmware_p”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjV ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjR ubjˆ)�”}”(hŒconst char *name”h]”(jŽ)�”}”(hj‘h]”hŒconst”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjð ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjð ubj@)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hjð ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjð ubj)�”}”(hjh]”hŒ*”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjð ubji)�”}”(hŒname”h]”hŒname”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjð ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjR ubjˆ)�”}”(hŒstruct device *device”h]”(jŽ)�”}”(hj®h]”hŒstruct”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjM ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjM ubh)�”}”(hhh]”ji)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjl ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jàŒreftype”j⌠reftarget”jq Œmodname”NŒ classname”Njæjé)�”}”jì]”j¯ Œc.request_firmware_direct”†”asbuh1hhjM ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjM ubj)�”}”(hjh]”hŒ*”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjM ubji)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjM ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjR ubeh}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j�hj h²hh³j+ h´M×ubeh}”(h]”h ]”h"]”h$]”h&]”hëhìjˆuh1j9jjhj h²hh³j+ h´M×ubah}”(h]”j ah ]”(jjeh"]”h$]”h&]”jˆj)jhuh1j3h³j+ h´M×hj h²hubj)�”}”(hhh]”hÌ)�”}”(hŒ.load firmware directly without usermode helper”h]”hŒ.load firmware directly without usermode helper”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:35: ./drivers/base/firmware_loader/main.c”h´M×hjÏ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj h²hh³j+ h´M×ubeh}”(h]”h ]”(jàŒfunction”eh"]”h$]”h&]”j=jàj>jê j?jê j@‰jA‰jB‰uh1j.h²hhjó h³Nh´NubjD)�”}”(hXï**Parameters** ``const struct firmware **firmware_p`` pointer to firmware image ``const char *name`` name of firmware file ``struct device *device`` device for which firmware is being loaded **Description** This function works pretty much like request_firmware(), but this doesn't fall back to usermode helper even if the firmware couldn't be loaded directly from fs. Hence it's useful for loading optional firmwares, which aren't always present, without extra long timeouts of udev.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hjô h]”hŒ Parameters”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjò ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:35: ./drivers/base/firmware_loader/main.c”h´MÛhjî ubjd)�”}”(hhh]”(ji)�”}”(hŒA``const struct firmware **firmware_p`` pointer to firmware image ”h]”(jo)�”}”(hŒ&``const struct firmware **firmware_p``”h]”ju)�”}”(hj h]”hŒ"const struct firmware **firmware_p”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:35: ./drivers/base/firmware_loader/main.c”h´MØhj ubj‹)�”}”(hhh]”hÌ)�”}”(hŒpointer to firmware image”h]”hŒpointer to firmware image”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j( h´MØhj) ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j( h´MØhj ubji)�”}”(hŒ+``const char *name`` name of firmware file ”h]”(jo)�”}”(hŒ``const char *name``”h]”ju)�”}”(hjL h]”hŒconst char *name”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjJ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:35: ./drivers/base/firmware_loader/main.c”h´MÙhjF ubj‹)�”}”(hhh]”hÌ)�”}”(hŒname of firmware file”h]”hŒname of firmware file”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³ja h´MÙhjb ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjF ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³ja h´MÙhj ubji)�”}”(hŒD``struct device *device`` device for which firmware is being loaded ”h]”(jo)�”}”(hŒ``struct device *device``”h]”ju)�”}”(hj… h]”hŒstruct device *device”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjƒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:35: ./drivers/base/firmware_loader/main.c”h´MÚhj ubj‹)�”}”(hhh]”hÌ)�”}”(hŒ)device for which firmware is being loaded”h]”hŒ)device for which firmware is being loaded”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jš h´MÚhj› ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jš h´MÚhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jchjî ubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hjÀ h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj¾ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:35: ./drivers/base/firmware_loader/main.c”h´MÜhjî ubhÌ)�”}”(hXThis function works pretty much like request_firmware(), but this doesn't fall back to usermode helper even if the firmware couldn't be loaded directly from fs. Hence it's useful for loading optional firmwares, which aren't always present, without extra long timeouts of udev.”h]”hXThis function works pretty much like request_firmware(), but this doesn’t fall back to usermode helper even if the firmware couldn’t be loaded directly from fs. Hence it’s useful for loading optional firmwares, which aren’t always present, without extra long timeouts of udev.”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:35: ./drivers/base/firmware_loader/main.c”h´MÛhjî ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jChjó h²hh³Nh´Nubeh}”(h]”Œrequest-firmware-direct”ah ]”h"]”Œrequest_firmware_direct”ah$]”h&]”uh1hµhhíh²hh³hÊh´K"ubh¶)�”}”(hhh]”(h»)�”}”(hŒrequest_firmware_into_buf”h]”hŒrequest_firmware_into_buf”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjô h²hh³hÊh´K'ubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j*Œ&request_firmware_into_buf (C function)”Œc.request_firmware_into_buf”hNt”auh1jhjô h²hh³Nh´Nubj/)�”}”(hhh]”(j4)�”}”(hŒƒint request_firmware_into_buf (const struct firmware **firmware_p, const char *name, struct device *device, void *buf, size_t size)”h]”j:)�”}”(hŒ‚int request_firmware_into_buf(const struct firmware **firmware_p, const char *name, struct device *device, void *buf, size_t size)”h]”(j@)�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hjh²hh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:40: ./drivers/base/firmware_loader/main.c”h´M ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjh²hh³j,h´M ubjc)�”}”(hŒrequest_firmware_into_buf”h]”ji)�”}”(hŒrequest_firmware_into_buf”h]”hŒrequest_firmware_into_buf”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj;ubah}”(h]”h ]”(j|j}eh"]”h$]”h&]”hëhìuh1jbhjh²hh³j,h´M ubj‚)�”}”(hŒe(const struct firmware **firmware_p, const char *name, struct device *device, void *buf, size_t size)”h]”(jˆ)�”}”(hŒ"const struct firmware **firmware_p”h]”(jŽ)�”}”(hj‘h]”hŒconst”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjWubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjWubjŽ)�”}”(hj®h]”hŒstruct”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjWubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjWubh)�”}”(hhh]”ji)�”}”(hŒfirmware”h]”hŒfirmware”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jàŒreftype”j⌠reftarget”j–Œmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjAsbŒc.request_firmware_into_buf”†”asbuh1hhjWubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjWubj)�”}”(hjh]”hŒ*”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWubj)�”}”(hjh]”hŒ*”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWubji)�”}”(hŒ firmware_p”h]”hŒ firmware_p”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjSubjˆ)�”}”(hŒconst char *name”h]”(jŽ)�”}”(hj‘h]”hŒconst”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjñubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjñubj@)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hjñubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjñubj)�”}”(hjh]”hŒ*”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñubji)�”}”(hŒname”h]”hŒname”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjSubjˆ)�”}”(hŒstruct device *device”h]”(jŽ)�”}”(hj®h]”hŒstruct”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjNubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjNubh)�”}”(hhh]”ji)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjmubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jàŒreftype”j⌠reftarget”jrŒmodname”NŒ classname”Njæjé)�”}”jì]”j°Œc.request_firmware_into_buf”†”asbuh1hhjNubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjNubj)�”}”(hjh]”hŒ*”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNubji)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjSubjˆ)�”}”(hŒ void *buf”h]”(j@)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hj¾ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj¾ubj)�”}”(hjh]”hŒ*”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾ubji)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjSubjˆ)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”ji)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jàŒreftype”j⌠reftarget”j Œmodname”NŒ classname”Njæjé)�”}”jì]”j°Œc.request_firmware_into_buf”†”asbuh1hhjubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjubji)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hjSubeh}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j�hjh²hh³j,h´M ubeh}”(h]”h ]”h"]”h$]”h&]”hëhìjˆuh1j9jjhjh²hh³j,h´M ubah}”(h]”jah ]”(jjeh"]”h$]”h&]”jˆj)jhuh1j3h³j,h´M hjh²hubj)�”}”(hhh]”hÌ)�”}”(hŒ0load firmware into a previously allocated buffer”h]”hŒ0load firmware into a previously allocated buffer”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:40: ./drivers/base/firmware_loader/main.c”h´M hjZh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³j,h´M ubeh}”(h]”h ]”(jàŒfunction”eh"]”h$]”h&]”j=jàj>juj?juj@‰jA‰jB‰uh1j.h²hhjô h³Nh´NubjD)�”}”(hXy**Parameters** ``const struct firmware **firmware_p`` pointer to firmware image ``const char *name`` name of firmware file ``struct device *device`` device for which firmware is being loaded and DMA region allocated ``void *buf`` address of buffer to load firmware into ``size_t size`` size of buffer **Description** This function works pretty much like request_firmware(), but it doesn't allocate a buffer to hold the firmware data. Instead, the firmware is loaded directly into the buffer pointed to by **buf** and the **firmware_p** data member is pointed at **buf**. This function doesn't cache firmware either.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hjh]”hŒ Parameters”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:40: ./drivers/base/firmware_loader/main.c”h´M$hjyubjd)�”}”(hhh]”(ji)�”}”(hŒA``const struct firmware **firmware_p`` pointer to firmware image ”h]”(jo)�”}”(hŒ&``const struct firmware **firmware_p``”h]”ju)�”}”(hjžh]”hŒ"const struct firmware **firmware_p”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjœubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:40: ./drivers/base/firmware_loader/main.c”h´M!hj˜ubj‹)�”}”(hhh]”hÌ)�”}”(hŒpointer to firmware image”h]”hŒpointer to firmware image”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j³h´M!hj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j³h´M!hj•ubji)�”}”(hŒ+``const char *name`` name of firmware file ”h]”(jo)�”}”(hŒ``const char *name``”h]”ju)�”}”(hj×h]”hŒconst char *name”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:40: ./drivers/base/firmware_loader/main.c”h´M"hjÑubj‹)�”}”(hhh]”hÌ)�”}”(hŒname of firmware file”h]”hŒname of firmware file”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jìh´M"hjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jìh´M"hj•ubji)�”}”(hŒ]``struct device *device`` device for which firmware is being loaded and DMA region allocated ”h]”(jo)�”}”(hŒ``struct device *device``”h]”ju)�”}”(hjh]”hŒstruct device *device”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:40: ./drivers/base/firmware_loader/main.c”h´M#hj ubj‹)�”}”(hhh]”hÌ)�”}”(hŒBdevice for which firmware is being loaded and DMA region allocated”h]”hŒBdevice for which firmware is being loaded and DMA region allocated”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j%h´M#hj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j%h´M#hj•ubji)�”}”(hŒ6``void *buf`` address of buffer to load firmware into ”h]”(jo)�”}”(hŒ ``void *buf``”h]”ju)�”}”(hjIh]”hŒ void *buf”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:40: ./drivers/base/firmware_loader/main.c”h´M$hjCubj‹)�”}”(hhh]”hÌ)�”}”(hŒ'address of buffer to load firmware into”h]”hŒ'address of buffer to load firmware into”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j^h´M$hj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j^h´M$hj•ubji)�”}”(hŒ``size_t size`` size of buffer ”h]”(jo)�”}”(hŒ``size_t size``”h]”ju)�”}”(hj‚h]”hŒ size_t size”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:40: ./drivers/base/firmware_loader/main.c”h´M%hj|ubj‹)�”}”(hhh]”hÌ)�”}”(hŒsize of buffer”h]”hŒsize of buffer”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j—h´M%hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j—h´M%hj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jchjyubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hj½h]”hŒ Description”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:40: ./drivers/base/firmware_loader/main.c”h´M'hjyubhÌ)�”}”(hŒýThis function works pretty much like request_firmware(), but it doesn't allocate a buffer to hold the firmware data. Instead, the firmware is loaded directly into the buffer pointed to by **buf** and the **firmware_p** data member is pointed at **buf**.”h]”(hŒ¾This function works pretty much like request_firmware(), but it doesn’t allocate a buffer to hold the firmware data. Instead, the firmware is loaded directly into the buffer pointed to by ”…”�”}”(hjÓh²hh³Nh´NubjN)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjÓubhŒ and the ”…”�”}”(hjÓh²hh³Nh´NubjN)�”}”(hŒ**firmware_p**”h]”hŒ firmware_p”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjÓubhŒ data member is pointed at ”…”�”}”(hjÓh²hh³Nh´NubjN)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjÓubhŒ.”…”�”}”(hjÓh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:40: ./drivers/base/firmware_loader/main.c”h´M&hjyubhÌ)�”}”(hŒ,This function doesn't cache firmware either.”h]”hŒ.This function doesn’t cache firmware either.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:40: ./drivers/base/firmware_loader/main.c”h´M+hjyubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jChjô h²hh³Nh´Nubeh}”(h]”Œrequest-firmware-into-buf”ah ]”h"]”Œrequest_firmware_into_buf”ah$]”h&]”uh1hµhhíh²hh³hÊh´K'ubeh}”(h]”Œsynchronous-firmware-requests”ah ]”h"]”Œsynchronous firmware requests”ah$]”h&]”uh1hµhh·h²hh³hÊh´K ubh¶)�”}”(hhh]”(h»)�”}”(hŒAsynchronous firmware requests”h]”hŒAsynchronous firmware requests”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj>h²hh³hÊh´K,ubhÌ)�”}”(hX+Asynchronous firmware requests allow driver code to not have to wait until the firmware or an error is returned. Function callbacks are provided so that when the firmware or an error is found the driver is informed through the callback. request_firmware_nowait() cannot be called in atomic contexts.”h]”hX+Asynchronous firmware requests allow driver code to not have to wait until the firmware or an error is returned. Function callbacks are provided so that when the firmware or an error is found the driver is informed through the callback. request_firmware_nowait() cannot be called in atomic contexts.”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K.hj>h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒrequest_firmware_nowait”h]”hŒrequest_firmware_nowait”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj]h²hh³hÊh´K5ubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j*Œ$request_firmware_nowait (C function)”Œc.request_firmware_nowait”hNt”auh1jhj]h²hh³Nh´Nubj/)�”}”(hhh]”(j4)�”}”(hŒ»int request_firmware_nowait (struct module *module, bool uevent, const char *name, struct device *device, gfp_t gfp, void *context, void (*cont)(const struct firmware *fw, void *context))”h]”j:)�”}”(hŒºint request_firmware_nowait(struct module *module, bool uevent, const char *name, struct device *device, gfp_t gfp, void *context, void (*cont)(const struct firmware *fw, void *context))”h]”(j@)�”}”(hŒint”h]”hŒint”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hjƒh²hh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÊubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjƒh²hh³j•h´MÊubjc)�”}”(hŒrequest_firmware_nowait”h]”ji)�”}”(hŒrequest_firmware_nowait”h]”hŒrequest_firmware_nowait”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj¤ubah}”(h]”h ]”(j|j}eh"]”h$]”h&]”hëhìuh1jbhjƒh²hh³j•h´MÊubj‚)�”}”(hŒŸ(struct module *module, bool uevent, const char *name, struct device *device, gfp_t gfp, void *context, void (*cont)(const struct firmware *fw, void *context))”h]”(jˆ)�”}”(hŒstruct module *module”h]”(jŽ)�”}”(hj®h]”hŒstruct”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjÀubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjÀubh)�”}”(hhh]”ji)�”}”(hŒmodule”h]”hŒmodule”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjßubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jàŒreftype”j⌠reftarget”jäŒmodname”NŒ classname”Njæjé)�”}”jì]”jï)�”}”jâjªsbŒc.request_firmware_nowait”†”asbuh1hhjÀubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjÀubj)�”}”(hjh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀubji)�”}”(hŒmodule”h]”hŒmodule”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjÀubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hj¼ubjˆ)�”}”(hŒ bool uevent”h]”(j@)�”}”(hŒbool”h]”hŒbool”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hj2ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj2ubji)�”}”(hŒuevent”h]”hŒuevent”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hj¼ubjˆ)�”}”(hŒconst char *name”h]”(jŽ)�”}”(hj‘h]”hŒconst”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjgubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjgubj@)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hjgubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjgubj)�”}”(hjh]”hŒ*”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgubji)�”}”(hŒname”h]”hŒname”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hj¼ubjˆ)�”}”(hŒstruct device *device”h]”(jŽ)�”}”(hj®h]”hŒstruct”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hjÄubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjÄubh)�”}”(hhh]”ji)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jàŒreftype”j⌠reftarget”jèŒmodname”NŒ classname”Njæjé)�”}”jì]”jþŒc.request_firmware_nowait”†”asbuh1hhjÄubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhjÄubj)�”}”(hjh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÄubji)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hj¼ubjˆ)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”ji)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jàŒreftype”j⌠reftarget”j=Œmodname”NŒ classname”Njæjé)�”}”jì]”jþŒc.request_firmware_nowait”†”asbuh1hhj4ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj4ubji)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hj¼ubjˆ)�”}”(hŒ void *context”h]”(j@)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hj|ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj|ubj)�”}”(hjh]”hŒ*”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|ubji)�”}”(hŒcontext”h]”hŒcontext”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hj¼ubjˆ)�”}”(hŒ6void (*cont)(const struct firmware *fw, void *context)”h]”(j@)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hj¾ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj¾ubj)�”}”(hŒ(”h]”hŒ(”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾ubj)�”}”(hjh]”hŒ*”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾ubji)�”}”(hŒcont”h]”hŒcont”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj¾ubj)�”}”(hŒ)”h]”hŒ)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾ubj)�”}”(hjàh]”hŒ(”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾ubjŽ)�”}”(hj‘h]”hŒconst”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hj¾ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj¾ubjŽ)�”}”(hj®h]”hŒstruct”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jšah"]”h$]”h&]”uh1j�hj¾ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj¾ubh)�”}”(hhh]”ji)�”}”(hŒfirmware”h]”hŒfirmware”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhjXubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jàŒreftype”j⌠reftarget”j]Œmodname”NŒ classname”Njæjé)�”}”jì]”jþŒc.request_firmware_nowait”†”asbuh1hhj¾ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj¾ubj)�”}”(hjh]”hŒ*”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾ubji)�”}”(hŒfw”h]”hŒfw”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj¾ubj)�”}”(hŒ,”h]”hŒ,”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj¾ubj@)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jLah"]”h$]”h&]”uh1j?hj¾ubjR)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j^ah"]”h$]”h&]”uh1jQhj¾ubj)�”}”(hjh]”hŒ*”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾ubji)�”}”(hŒcontext”•Î`h]”hŒcontext”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”juah"]”h$]”h&]”uh1jhhj¾ubj)�”}”(hj h]”hŒ)”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhëhìuh1j‡hj¼ubeh}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j�hjƒh²hh³j•h´MÊubeh}”(h]”h ]”h"]”h$]”h&]”hëhìjˆuh1j9jjhjh²hh³j•h´MÊubah}”(h]”jzah ]”(jjeh"]”h$]”h&]”jˆj)jhuh1j3h³j•h´MÊhj|h²hubj)�”}”(hhh]”hÌ)�”}”(hŒ(asynchronous version of request_firmware”h]”hŒ(asynchronous version of request_firmware”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÊhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|h²hh³j•h´MÊubeh}”(h]”h ]”(jàŒfunction”eh"]”h$]”h&]”j=jàj>j6j?j6j@‰jA‰jB‰uh1j.h²hhj]h³Nh´NubjD)�”}”(hX**Parameters** ``struct module *module`` module requesting the firmware ``bool uevent`` sends uevent to copy the firmware image if this flag is non-zero else the firmware copy must be done manually. ``const char *name`` name of firmware file ``struct device *device`` device for which firmware is being loaded ``gfp_t gfp`` allocation flags ``void *context`` will be passed over to **cont**, and **fw** may be ``NULL`` if firmware request fails. ``void (*cont)(const struct firmware *fw, void *context)`` function will be called asynchronously when the firmware request is over. **Description** Caller must hold the reference count of **device**. Asynchronous variant of request_firmware() for user contexts: - sleep for as small periods as possible since it may increase kernel boot time of built-in device drivers requesting firmware in their ->probe() methods, if **gfp** is GFP_KERNEL. - can't sleep at all if **gfp** is GFP_ATOMIC.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hj@h]”hŒ Parameters”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÎhj:ubjd)�”}”(hhh]”(ji)�”}”(hŒ9``struct module *module`` module requesting the firmware ”h]”(jo)�”}”(hŒ``struct module *module``”h]”ju)�”}”(hj_h]”hŒstruct module *module”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MËhjYubj‹)�”}”(hhh]”hÌ)�”}”(hŒmodule requesting the firmware”h]”hŒmodule requesting the firmware”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jth´MËhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jth´MËhjVubji)�”}”(hŒ``bool uevent`` sends uevent to copy the firmware image if this flag is non-zero else the firmware copy must be done manually. ”h]”(jo)�”}”(hŒ``bool uevent``”h]”ju)�”}”(hj˜h]”hŒ bool uevent”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÍhj’ubj‹)�”}”(hhh]”hÌ)�”}”(hŒnsends uevent to copy the firmware image if this flag is non-zero else the firmware copy must be done manually.”h]”hŒnsends uevent to copy the firmware image if this flag is non-zero else the firmware copy must be done manually.”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÌhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j­h´MÍhjVubji)�”}”(hŒ+``const char *name`` name of firmware file ”h]”(jo)�”}”(hŒ``const char *name``”h]”ju)�”}”(hjÒh]”hŒconst char *name”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÎhjÌubj‹)�”}”(hhh]”hÌ)�”}”(hŒname of firmware file”h]”hŒname of firmware file”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jçh´MÎhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jçh´MÎhjVubji)�”}”(hŒD``struct device *device`` device for which firmware is being loaded ”h]”(jo)�”}”(hŒ``struct device *device``”h]”ju)�”}”(hj h]”hŒstruct device *device”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÏhjubj‹)�”}”(hhh]”hÌ)�”}”(hŒ)device for which firmware is being loaded”h]”hŒ)device for which firmware is being loaded”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j h´MÏhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j h´MÏhjVubji)�”}”(hŒ``gfp_t gfp`` allocation flags ”h]”(jo)�”}”(hŒ ``gfp_t gfp``”h]”ju)�”}”(hjDh]”hŒ gfp_t gfp”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÐhj>ubj‹)�”}”(hhh]”hÌ)�”}”(hŒallocation flags”h]”hŒallocation flags”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jYh´MÐhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jYh´MÐhjVubji)�”}”(hŒi``void *context`` will be passed over to **cont**, and **fw** may be ``NULL`` if firmware request fails. ”h]”(jo)�”}”(hŒ``void *context``”h]”ju)�”}”(hj}h]”hŒ void *context”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÒhjwubj‹)�”}”(hhh]”hÌ)�”}”(hŒVwill be passed over to **cont**, and **fw** may be ``NULL`` if firmware request fails.”h]”(hŒwill be passed over to ”…”�”}”(hj–h²hh³Nh´NubjN)�”}”(hŒ**cont**”h]”hŒcont”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj–ubhŒ, and ”…”�”}”(hj–h²hh³Nh´NubjN)�”}”(hŒ**fw**”h]”hŒfw”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj–ubhŒ may be ”…”�”}”(hj–h²hh³Nh´Nubju)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthj–ubhŒ if firmware request fails.”…”�”}”(hj–h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÑhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j’h´MÒhjVubji)�”}”(hŒ…``void (*cont)(const struct firmware *fw, void *context)`` function will be called asynchronously when the firmware request is over. ”h]”(jo)�”}”(hŒ:``void (*cont)(const struct firmware *fw, void *context)``”h]”ju)�”}”(hjíh]”hŒ6void (*cont)(const struct firmware *fw, void *context)”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÔhjçubj‹)�”}”(hhh]”hÌ)�”}”(hŒIfunction will be called asynchronously when the firmware request is over.”h]”hŒIfunction will be called asynchronously when the firmware request is over.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÓhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jh´MÔhjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jchj:ubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hj)h]”hŒ Description”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÖhj:ubj:)�”}”(hX…Caller must hold the reference count of **device**. Asynchronous variant of request_firmware() for user contexts: - sleep for as small periods as possible since it may increase kernel boot time of built-in device drivers requesting firmware in their ->probe() methods, if **gfp** is GFP_KERNEL. - can't sleep at all if **gfp** is GFP_ATOMIC.”h]”(hÌ)�”}”(hŒ3Caller must hold the reference count of **device**.”h]”(hŒ(Caller must hold the reference count of ”…”�”}”(hjCh²hh³Nh´NubjN)�”}”(hŒ **device**”h]”hŒdevice”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjCubhŒ.”…”�”}”(hjCh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÕhj?ubjd)�”}”(hhh]”ji)�”}”(hX(Asynchronous variant of request_firmware() for user contexts: - sleep for as small periods as possible since it may increase kernel boot time of built-in device drivers requesting firmware in their ->probe() methods, if **gfp** is GFP_KERNEL. - can't sleep at all if **gfp** is GFP_ATOMIC.”h]”(jo)�”}”(hŒ=Asynchronous variant of request_firmware() for user contexts:”h]”hŒ=Asynchronous variant of request_firmware() for user contexts:”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÜhjgubj‹)�”}”(hhh]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ³sleep for as small periods as possible since it may increase kernel boot time of built-in device drivers requesting firmware in their ->probe() methods, if **gfp** is GFP_KERNEL. ”h]”hÌ)�”}”(hŒ²sleep for as small periods as possible since it may increase kernel boot time of built-in device drivers requesting firmware in their ->probe() methods, if **gfp** is GFP_KERNEL.”h]”(hŒœsleep for as small periods as possible since it may increase kernel boot time of built-in device drivers requesting firmware in their ->probe() methods, if ”…”�”}”(hjˆh²hh³Nh´NubjN)�”}”(hŒ**gfp**”h]”hŒgfp”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjˆubhŒ is GFP_KERNEL.”…”�”}”(hjˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MØhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjubjƒ)�”}”(hŒ,can't sleep at all if **gfp** is GFP_ATOMIC.”h]”hÌ)�”}”(hj±h]”(hŒcan’t sleep at all if ”…”�”}”(hj³h²hh³Nh´NubjN)�”}”(hŒ**gfp**”h]”hŒgfp”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj³ubhŒ is GFP_ATOMIC.”…”�”}”(hj³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:54: ./drivers/base/firmware_loader/main.c”h´MÝhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j}h³j¨h´MØhjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jyh´MÜhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jchj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j9h³jch´MÕhj:ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jChj]h²hh³Nh´Nubeh}”(h]”Œrequest-firmware-nowait”ah ]”h"]”Œrequest_firmware_nowait”ah$]”h&]”uh1hµhj>h²hh³hÊh´K5ubeh}”(h]”Œasynchronous-firmware-requests”ah ]”h"]”Œasynchronous firmware requests”ah$]”h&]”uh1hµhh·h²hh³hÊh´K,ubh¶)�”}”(hhh]”(h»)�”}”(hŒSpecial optimizations on reboot”h]”hŒSpecial optimizations on reboot”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´K:ubhÌ)�”}”(hXASome devices have an optimization in place to enable the firmware to be retained during system reboot. When such optimizations are used the driver author must ensure the firmware is still available on resume from suspend, this can be done with firmware_request_cache() instead of requesting for the firmware to be loaded.”h]”hXASome devices have an optimization in place to enable the firmware to be retained during system reboot. When such optimizations are used the driver author must ensure the firmware is still available on resume from suspend, this can be done with firmware_request_cache() instead of requesting for the firmware to be loaded.”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KjŽj?jŽj@‰jA‰jB‰uh1j.h²hhj/h³Nh´NubjD)�”}”(hXJ**Parameters** ``struct device *device`` device for which firmware should be cached for ``const char *name`` name of firmware file **Description** There are some devices with an optimization that enables the device to not require loading firmware on system reboot. This optimization may still require the firmware present on resume from suspend. This routine can be used to ensure the firmware is present on resume from suspend in these situations. This helper is not compatible with drivers which use request_firmware_into_buf() or request_firmware_nowait() with no uevent set.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jN)�”}”(hj˜h]”hŒ Parameters”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:68: ./drivers/base/firmware_loader/main.c”h´M hj’ubjd)�”}”(hhh]”(ji)�”}”(hŒI``struct device *device`` device for which firmware should be cached for ”h]”(jo)�”}”(hŒ``struct device *device``”h]”ju)�”}”(hj·h]”hŒstruct device *device”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:68: ./drivers/base/firmware_loader/main.c”h´M hj±ubj‹)�”}”(hhh]”hÌ)�”}”(hŒ.device for which firmware should be cached for”h]”hŒ.device for which firmware should be cached for”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÌh´M hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jÌh´M hj®ubji)�”}”(hŒ+``const char *name`` name of firmware file ”h]”(jo)�”}”(hŒ``const char *name``”h]”ju)�”}”(hjðh]”hŒconst char *name”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jthjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jnh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:68: ./drivers/base/firmware_loader/main.c”h´M hjêubj‹)�”}”(hhh]”hÌ)�”}”(hŒname of firmware file”h]”hŒname of firmware file”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´M hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jh´M hj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jchj’ubhÌ)�”}”(hŒ**Description**”h]”jN)�”}”(hj+h]”hŒ Description”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:68: ./drivers/base/firmware_loader/main.c”h´M hj’ubhÌ)�”}”(hX¯There are some devices with an optimization that enables the device to not require loading firmware on system reboot. This optimization may still require the firmware present on resume from suspend. This routine can be used to ensure the firmware is present on resume from suspend in these situations. This helper is not compatible with drivers which use request_firmware_into_buf() or request_firmware_nowait() with no uevent set.”h]”hX¯There are some devices with an optimization that enables the device to not require loading firmware on system reboot. This optimization may still require the firmware present on resume from suspend. This routine can be used to ensure the firmware is present on resume from suspend in these situations. This helper is not compatible with drivers which use request_firmware_into_buf() or request_firmware_nowait() with no uevent set.”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œx/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/request_firmware:68: ./drivers/base/firmware_loader/main.c”h´M hj’ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jChj/h²hh³Nh´Nubeh}”(h]”Œfirmware-request-cache”ah ]”h"]”Œfirmware_request_cache()”ah$]”h&]”uh1hµhjh²hh³hÊh´KCubeh}”(h]”Œspecial-optimizations-on-reboot”ah ]”h"]”Œspecial optimizations on reboot”ah$]”h&]”uh1hµhh·h²hh³hÊh´K:ubh¶)�”}”(hhh]”(h»)�”}”(hŒ(request firmware API expected driver use”h]”hŒ(request firmware API expected driver use”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjgh²hh³hÊh´KHubhÌ)�”}”(hXÀOnce an API call returns you process the firmware and then release the firmware. For example if you used request_firmware() and it returns, the driver has the firmware image accessible in fw_entry->{data,size}. If something went wrong request_firmware() returns non-zero and fw_entry is set to NULL. Once your driver is done with processing the firmware it can call release_firmware(fw_entry) to release the firmware image and any related resource.”h]”hXÀOnce an API call returns you process the firmware and then release the firmware. For example if you used request_firmware() and it returns, the driver has the firmware image accessible in fw_entry->{data,size}. If something went wrong request_firmware() returns non-zero and fw_entry is set to NULL. Once your driver is done with processing the firmware it can call release_firmware(fw_entry) to release the firmware image and any related resource.”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KJhjgh²hubeh}”(h]”Œ(request-firmware-api-expected-driver-use”ah ]”h"]”Œ(request firmware api expected driver use”ah$]”h&]”uh1hµhh·h²hh³hÊh´KHubeh}”(h]”Œrequest-firmware-api”ah ]”h"]”Œrequest_firmware api”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í jñ jî j3j0j j jjjdjaj\jYj‹jˆuŒ nametypes”}”(j“‰j;‰jî‰jï‰jð ‰jñ ‰j3‰j ‰j‰jd‰j\‰j‹‰uh}”(j�h·j8híjëj j,j5jìjñjjjí jòjjjî jó j j j0jô jjj j>jj]jzjjajjYj/jLjQjˆjguŒ 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.