sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget1/translations/zh_CN/driver-api/firmware/efi/indexmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/zh_TW/driver-api/firmware/efi/indexmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/it_IT/driver-api/firmware/efi/indexmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/ja_JP/driver-api/firmware/efi/indexmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/ko_KR/driver-api/firmware/efi/indexmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/pt_BR/driver-api/firmware/efi/indexmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/sp_SP/driver-api/firmware/efi/indexmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhK/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index.rsthKubhsection)}(hhh](htitle)}(h4Unified Extensible Firmware Interface (UEFI) Supporth]h4Unified Extensible Firmware Interface (UEFI) Support}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hUEFI stub library functionsh]hUEFI stub library functions}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singleefi_get_memory_map (C function)c.efi_get_memory_maphNtauh1hhhhhhNhNubhdesc)}(hhh](hdesc_signature)}(hTefi_status_t efi_get_memory_map (struct efi_boot_memmap **map, bool install_cfg_tbl)h]hdesc_signature_line)}(hSefi_status_t efi_get_memory_map(struct efi_boot_memmap **map, bool install_cfg_tbl)h](h)}(hhh]h desc_sig_name)}(h efi_status_th]h efi_status_t}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j2 ASTIdentifier)}j-efi_get_memory_mapsbc.efi_get_memory_mapasbuh1hhj hhhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chK ubhdesc_sig_space)}(h h]h }(hjChhhNhNubah}(h]h ]wah"]h$]h&]uh1jAhj hhhj@hK ubh desc_name)}(hefi_get_memory_maph]j)}(hj=h]hefi_get_memory_map}(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjTubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jRhj hhhj@hK ubhdesc_parameterlist)}(h4(struct efi_boot_memmap **map, bool install_cfg_tbl)h](hdesc_parameter)}(hstruct efi_boot_memmap **maph](hdesc_sig_keyword)}(hstructh]hstruct}(hj{hhhNhNubah}(h]h ]kah"]h$]h&]uh1jyhjuubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjuubh)}(hhh]j)}(hefi_boot_memmaph]hefi_boot_memmap}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj+reftypej- reftargetjmodnameN classnameNj1j4)}j7]j;c.efi_get_memory_mapasbuh1hhjuubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjuubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjuubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hmaph]hmap}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjoubjt)}(hbool install_cfg_tblh](hdesc_sig_keyword_type)}(hboolh]hbool}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(hinstall_cfg_tblh]hinstall_cfg_tbl}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjoubeh}(h]h ]h"]h$]h&]hhuh1jmhj hhhj@hK ubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1j sphinx_line_type declaratorhjhhhj@hK ubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhj@hK hjhhubh desc_content)}(hhh]h paragraph)}(hget memory maph]hget memory map}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chK hjNhhubah}(h]h ]h"]h$]h&]uh1jLhjhhhj@hK ubeh}(h]h ](j+functioneh"]h$]h&]domainj+objtypejkdesctypejknoindex noindexentrynocontentsentryuh1hhhhhhNhNubh container)}(hX**Parameters** ``struct efi_boot_memmap **map`` pointer to memory map pointer to which to assign the newly allocated memory map ``bool install_cfg_tbl`` whether or not to install the boot memory map as a configuration table **Description** Retrieve the UEFI memory map. The allocated memory leaves room for up to EFI_MMAP_NR_SLACK_SLOTS additional memory map entries. **Return** status codeh](jR)}(h**Parameters**h]hstrong)}(hj}h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chK hjwubhdefinition_list)}(hhh](hdefinition_list_item)}(hq``struct efi_boot_memmap **map`` pointer to memory map pointer to which to assign the newly allocated memory map h](hterm)}(h ``struct efi_boot_memmap **map``h]hliteral)}(hjh]hstruct efi_boot_memmap **map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chK hjubh definition)}(hhh]jR)}(hOpointer to memory map pointer to which to assign the newly allocated memory maph]hOpointer to memory map pointer to which to assign the newly allocated memory map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK hjubj)}(h```bool install_cfg_tbl`` whether or not to install the boot memory map as a configuration table h](j)}(h``bool install_cfg_tbl``h]j)}(hjh]hbool install_cfg_tbl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chK hjubj)}(hhh]jR)}(hFwhether or not to install the boot memory map as a configuration tableh]hFwhether or not to install the boot memory map as a configuration table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK hjubeh}(h]h ]h"]h$]h&]uh1jhjwubjR)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKhjwubjR)}(hRetrieve the UEFI memory map. The allocated memory leaves room for up to EFI_MMAP_NR_SLACK_SLOTS additional memory map entries.h]hRetrieve the UEFI memory map. The allocated memory leaves room for up to EFI_MMAP_NR_SLACK_SLOTS additional memory map entries.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKhjwubjR)}(h **Return**h]j)}(hjEh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKhjwubjR)}(h status codeh]h status code}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1juhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hefi_allocate_pages (C function)c.efi_allocate_pageshNtauh1hhhhhhNhNubj)}(hhh](j)}(h\efi_status_t efi_allocate_pages (unsigned long size, unsigned long *addr, unsigned long max)h]j )}(h[efi_status_t efi_allocate_pages(unsigned long size, unsigned long *addr, unsigned long max)h](h)}(hhh]j)}(h efi_status_th]h efi_status_t}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj+reftypej- reftargetjmodnameN classnameNj1j4)}j7]j:)}j-efi_allocate_pagessbc.efi_allocate_pagesasbuh1hhjhhhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKDubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjhhhjhKDubjS)}(hefi_allocate_pagesh]j)}(hjh]hefi_allocate_pages}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](jhjieh"]h$]h&]hhuh1jRhjhhhjhKDubjn)}(h<(unsigned long size, unsigned long *addr, unsigned long max)h](jt)}(hunsigned long sizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjubjt)}(hunsigned long *addrh](j)}(hunsignedh]hunsigned}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubjB)}(h h]h }(hj;hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj)ubj)}(hlongh]hlong}(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubjB)}(h h]h }(hjWhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj)ubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(haddrh]haddr}(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjubjt)}(hunsigned long maxh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(hmaxh]hmax}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjubeh}(h]h ]h"]h$]h&]hhuh1jmhjhhhjhKDubeh}(h]h ]h"]h$]h&]hhj>uh1j j?j@hjhhhjhKDubah}(h]j}ah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhjhKDhjhhubjM)}(hhh]jR)}(hAllocate memory pagesh]hAllocate memory pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKDhjhhubah}(h]h ]h"]h$]h&]uh1jLhjhhhjhKDubeh}(h]h ](j+functioneh"]h$]h&]joj+jpjjqjjrjsjtuh1hhhhhhNhNubjv)}(hXA**Parameters** ``unsigned long size`` minimum number of bytes to allocate ``unsigned long *addr`` On return the address of the first allocated page. The first allocated page has alignment EFI_ALLOC_ALIGN which is an architecture dependent multiple of the page size. ``unsigned long max`` the address that the last allocated memory page shall not exceed **Description** Allocate pages as EFI_LOADER_DATA. The allocated pages are aligned according to EFI_ALLOC_ALIGN. The last allocated page will not exceed the address given by **max**. **Return** status codeh](jR)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKHhj ubj)}(hhh](j)}(h;``unsigned long size`` minimum number of bytes to allocate h](j)}(h``unsigned long size``h]j)}(hj.h]hunsigned long size}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKEhj(ubj)}(hhh]jR)}(h#minimum number of bytes to allocateh]h#minimum number of bytes to allocate}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjChKEhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChKEhj%ubj)}(h``unsigned long *addr`` On return the address of the first allocated page. The first allocated page has alignment EFI_ALLOC_ALIGN which is an architecture dependent multiple of the page size. h](j)}(h``unsigned long *addr``h]j)}(hjgh]hunsigned long *addr}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKHhjaubj)}(hhh]jR)}(hOn return the address of the first allocated page. The first allocated page has alignment EFI_ALLOC_ALIGN which is an architecture dependent multiple of the page size.h]hOn return the address of the first allocated page. The first allocated page has alignment EFI_ALLOC_ALIGN which is an architecture dependent multiple of the page size.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKFhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hKHhj%ubj)}(hW``unsigned long max`` the address that the last allocated memory page shall not exceed h](j)}(h``unsigned long max``h]j)}(hjh]hunsigned long max}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKJhjubj)}(hhh]jR)}(h@the address that the last allocated memory page shall not exceedh]h@the address that the last allocated memory page shall not exceed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKJhj%ubeh}(h]h ]h"]h$]h&]uh1jhj ubjR)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKLhj ubjR)}(hAllocate pages as EFI_LOADER_DATA. The allocated pages are aligned according to EFI_ALLOC_ALIGN. The last allocated page will not exceed the address given by **max**.h](hAllocate pages as EFI_LOADER_DATA. The allocated pages are aligned according to EFI_ALLOC_ALIGN. The last allocated page will not exceed the address given by }(hjhhhNhNubj)}(h**max**h]hmax}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKKhj ubjR)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKOhj ubjR)}(h status codeh]h status code}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKPhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1juhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hefi_free (C function) c.efi_freehNtauh1hhhhhhNhNubj)}(hhh](j)}(h6void efi_free (unsigned long size, unsigned long addr)h]j )}(h5void efi_free(unsigned long size, unsigned long addr)h](j)}(hvoidh]hvoid}(hj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWhhhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKkubjB)}(h h]h }(hjjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjWhhhjihKkubjS)}(hefi_freeh]j)}(hefi_freeh]hefi_free}(hj|hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjxubah}(h]h ](jhjieh"]h$]h&]hhuh1jRhjWhhhjihKkubjn)}(h((unsigned long size, unsigned long addr)h](jt)}(hunsigned long sizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjubjt)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(haddrh]haddr}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjubeh}(h]h ]h"]h$]h&]hhuh1jmhjWhhhjihKkubeh}(h]h ]h"]h$]h&]hhj>uh1j j?j@hjShhhjihKkubah}(h]jNah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhjihKkhjPhhubjM)}(hhh]jR)}(hfree memory pagesh]hfree memory pages}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKkhjHhhubah}(h]h ]h"]h$]h&]uh1jLhjPhhhjihKkubeh}(h]h ](j+functioneh"]h$]h&]joj+jpjcjqjcjrjsjtuh1hhhhhhNhNubjv)}(hX**Parameters** ``unsigned long size`` size of the memory area to free in bytes ``unsigned long addr`` start of the memory area to free (must be EFI_PAGE_SIZE aligned) **Description** **size** is rounded up to a multiple of EFI_ALLOC_ALIGN which is an architecture specific multiple of EFI_PAGE_SIZE. So this function should only be used to return pages allocated with efi_allocate_pages() or efi_low_alloc_above().h](jR)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKohjgubj)}(hhh](j)}(h@``unsigned long size`` size of the memory area to free in bytes h](j)}(h``unsigned long size``h]j)}(hjh]hunsigned long size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKlhjubj)}(hhh]jR)}(h(size of the memory area to free in bytesh]h(size of the memory area to free in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjhKlhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKlhjubj)}(hX``unsigned long addr`` start of the memory area to free (must be EFI_PAGE_SIZE aligned) h](j)}(h``unsigned long addr``h]j)}(hjh]hunsigned long addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKnhjubj)}(hhh]jR)}(h@start of the memory area to free (must be EFI_PAGE_SIZE aligned)h]h@start of the memory area to free (must be EFI_PAGE_SIZE aligned)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKnhjubeh}(h]h ]h"]h$]h&]uh1jhjgubjR)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKphjgubjR)}(h**size** is rounded up to a multiple of EFI_ALLOC_ALIGN which is an architecture specific multiple of EFI_PAGE_SIZE. So this function should only be used to return pages allocated with efi_allocate_pages() or efi_low_alloc_above().h](j)}(h**size**h]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is rounded up to a multiple of EFI_ALLOC_ALIGN which is an architecture specific multiple of EFI_PAGE_SIZE. So this function should only be used to return pages allocated with efi_allocate_pages() or efi_low_alloc_above().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKohjgubeh}(h]h ] kernelindentah"]h$]h&]uh1juhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h efi_low_alloc_above (C function)c.efi_low_alloc_abovehNtauh1hhhhhhNhNubj)}(hhh](j)}(hrefi_status_t efi_low_alloc_above (unsigned long size, unsigned long align, unsigned long *addr, unsigned long min)h]j )}(hqefi_status_t efi_low_alloc_above(unsigned long size, unsigned long align, unsigned long *addr, unsigned long min)h](h)}(hhh]j)}(h efi_status_th]h efi_status_t}(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainj+reftypej- reftargetjYmodnameN classnameNj1j4)}j7]j:)}j-efi_low_alloc_abovesbc.efi_low_alloc_aboveasbuh1hhjPhhhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKubjB)}(h h]h }(hjyhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjPhhhjxhKubjS)}(hefi_low_alloc_aboveh]j)}(hjuh]hefi_low_alloc_above}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](jhjieh"]h$]h&]hhuh1jRhjPhhhjxhKubjn)}(hQ(unsigned long size, unsigned long align, unsigned long *addr, unsigned long min)h](jt)}(hunsigned long sizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjubjt)}(hunsigned long alignh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hj hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hj! hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(halignh]halign}(hj/ hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjubjt)}(hunsigned long *addrh](j)}(hunsignedh]hunsigned}(hjH hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjD ubjB)}(h h]h }(hjV hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjD ubj)}(hlongh]hlong}(hjd hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjD ubjB)}(h h]h }(hjr hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjD ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD ubj)}(haddrh]haddr}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjD ubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjubjt)}(hunsigned long minh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubjB)}(h h]h }(hj hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj ubj)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubjB)}(h h]h }(hj hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj ubj)}(hminh]hmin}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjubeh}(h]h ]h"]h$]h&]hhuh1jmhjPhhhjxhKubeh}(h]h ]h"]h$]h&]hhj>uh1j j?j@hjLhhhjxhKubah}(h]jGah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhjxhKhjIhhubjM)}(hhh]jR)}(h(allocate pages at or above given addressh]h(allocate pages at or above given address}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKhj hhubah}(h]h ]h"]h$]h&]uh1jLhjIhhhjxhKubeh}(h]h ](j+functioneh"]h$]h&]joj+jpj jqj jrjsjtuh1hhhhhhNhNubjv)}(hXa**Parameters** ``unsigned long size`` size of the memory area to allocate ``unsigned long align`` minimum alignment of the allocated memory area. It should a power of two. ``unsigned long *addr`` on exit the address of the allocated memory ``unsigned long min`` minimum address to used for the memory allocation **Description** Allocate at the lowest possible address that is not below **min** as EFI_LOADER_DATA. The allocated pages are aligned according to **align** but at least EFI_ALLOC_ALIGN. The first allocated page will not below the address given by **min**. **Return** status codeh](jR)}(h**Parameters**h]j)}(hj* h]h Parameters}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj( ubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKhj$ ubj)}(hhh](j)}(h;``unsigned long size`` size of the memory area to allocate h](j)}(h``unsigned long size``h]j)}(hjI h]hunsigned long size}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG ubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKhjC ubj)}(hhh]jR)}(h#size of the memory area to allocateh]h#size of the memory area to allocate}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj^ hKhj_ ubah}(h]h ]h"]h$]h&]uh1jhjC ubeh}(h]h ]h"]h$]h&]uh1jhj^ hKhj@ ubj)}(hb``unsigned long align`` minimum alignment of the allocated memory area. It should a power of two. h](j)}(h``unsigned long align``h]j)}(hj h]hunsigned long align}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKhj| ubj)}(hhh]jR)}(hIminimum alignment of the allocated memory area. It should a power of two.h]hIminimum alignment of the allocated memory area. It should a power of two.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKhj ubah}(h]h ]h"]h$]h&]uh1jhj| ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj@ ubj)}(hD``unsigned long *addr`` on exit the address of the allocated memory h](j)}(h``unsigned long *addr``h]j)}(hj h]hunsigned long *addr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKhj ubj)}(hhh]jR)}(h+on exit the address of the allocated memoryh]h+on exit the address of the allocated memory}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj@ ubj)}(hH``unsigned long min`` minimum address to used for the memory allocation h](j)}(h``unsigned long min``h]j)}(hj h]hunsigned long min}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKhj ubj)}(hhh]jR)}(h1minimum address to used for the memory allocationh]h1minimum address to used for the memory allocation}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj@ ubeh}(h]h ]h"]h$]h&]uh1jhj$ ubjR)}(h**Description**h]j)}(hj0 h]h Description}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj. ubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKhj$ ubjR)}(hAllocate at the lowest possible address that is not below **min** as EFI_LOADER_DATA. The allocated pages are aligned according to **align** but at least EFI_ALLOC_ALIGN. The first allocated page will not below the address given by **min**.h](h:Allocate at the lowest possible address that is not below }(hjF hhhNhNubj)}(h**min**h]hmin}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF ubhB as EFI_LOADER_DATA. The allocated pages are aligned according to }(hjF hhhNhNubj)}(h **align**h]halign}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF ubh\ but at least EFI_ALLOC_ALIGN. The first allocated page will not below the address given by }(hjF hhhNhNubj)}(h**min**h]hmin}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF ubh.}(hjF hhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKhj$ ubjR)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKhj$ ubjR)}(h status codeh]h status code}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhp/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:10: ./drivers/firmware/efi/libstub/mem.chKhj$ ubeh}(h]h ] kernelindentah"]h$]h&]uh1juhhhhhNhNubeh}(h]uefi-stub-library-functionsah ]h"]uefi stub library functionsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h2UEFI Common Platform Error Record (CPER) functionsh]h2UEFI Common Platform Error Record (CPER) functions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcper_print_bits (C function)c.cper_print_bitshNtauh1hhj hhhNhNubj)}(hhh](j)}(hlvoid cper_print_bits (const char *pfx, unsigned int bits, const char * const strs[], unsigned int strs_size)h]j )}(hjvoid cper_print_bits(const char *pfx, unsigned int bits, const char *const strs[], unsigned int strs_size)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKJubjB)}(h h]h }(hj hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj hhhj hKJubjS)}(hcper_print_bitsh]j)}(hcper_print_bitsh]hcper_print_bits}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubah}(h]h ](jhjieh"]h$]h&]hhuh1jRhj hhhj hKJubjn)}(hV(const char *pfx, unsigned int bits, const char *const strs[], unsigned int strs_size)h](jt)}(hconst char *pfxh](jz)}(hconsth]hconst}(hj( hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj$ ubjB)}(h h]h }(hj6 hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj$ ubj)}(hcharh]hchar}(hjD hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ ubjB)}(h h]h }(hjR hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj$ ubj)}(hjh]h*}(hj` hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ ubj)}(hpfxh]hpfx}(hjm hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ ubeh}(h]h ]h"]h$]h&]noemphhhuh1jshj ubjt)}(hunsigned int bitsh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubjB)}(h h]h }(hj hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj ubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubjB)}(h h]h }(hj hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj ubj)}(hbitsh]hbits}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jshj ubjt)}(hconst char *const strs[]h](jz)}(hj* h]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj ubjB)}(h h]h }(hj hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj ubj)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubjB)}(h h]h }(hj hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjz)}(hj* h]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj ubjB)}(h h]h }(hj( hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj ubj)}(hstrsh]hstrs}(hj6 hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj)}(h[h]h[}(hjD hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h]h]h]}(hjR hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jshj ubjt)}(hunsigned int strs_sizeh](j)}(hunsignedh]hunsigned}(hjk hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjg ubjB)}(h h]h }(hjy hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjg ubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjg ubjB)}(h h]h }(hj hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjg ubj)}(h strs_sizeh]h strs_size}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjg ubeh}(h]h ]h"]h$]h&]noemphhhuh1jshj ubeh}(h]h ]h"]h$]h&]hhuh1jmhj hhhj hKJubeh}(h]h ]h"]h$]h&]hhj>uh1j j?j@hj hhhj hKJubah}(h]j ah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhj hKJhj hhubjM)}(hhh]jR)}(hprint strings for set bitsh]hprint strings for set bits}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKJhj hhubah}(h]h ]h"]h$]h&]uh1jLhj hhhj hKJubeh}(h]h ](j+functioneh"]h$]h&]joj+jpj jqj jrjsjtuh1hhhhj hNhNubjv)}(hX**Parameters** ``const char *pfx`` prefix for each line, including log level and prefix string ``unsigned int bits`` bit mask ``const char * const strs[]`` string array, indexed by bit position ``unsigned int strs_size`` size of the string array: **strs** **Description** For each set bit in **bits**, print the corresponding string in **strs**. If the output length is longer than 80, multiple line will be printed, with **pfx** is printed at the beginning of each line.h](jR)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jQhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKNhj ubj)}(hhh](j)}(hP``const char *pfx`` prefix for each line, including log level and prefix string h](j)}(h``const char *pfx``h]j)}(hjh]hconst char *pfx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKKhjubj)}(hhh]jR)}(h;prefix for each line, including log level and prefix stringh]h;prefix for each line, including log level and prefix string}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj#hKKhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hKKhjubj)}(h``unsigned int bits`` bit mask h](j)}(h``unsigned int bits``h]j)}(hjGh]hunsigned int bits}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKLhjAubj)}(hhh]jR)}(hbit maskh]hbit mask}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj\hKLhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hKLhjubj)}(hD``const char * const strs[]`` string array, indexed by bit position h](j)}(h``const char * const strs[]``h]j)}(hjh]hconst char * const strs[]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKMhjzubj)}(hhh]jR)}(h%string array, indexed by bit positionh]h%string array, indexed by bit position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjhKMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhKMhjubj)}(h>``unsigned int strs_size`` size of the string array: **strs** h](j)}(h``unsigned int strs_size``h]j)}(hjh]hunsigned int strs_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKNhjubj)}(hhh]jR)}(h"size of the string array: **strs**h](hsize of the string array: }(hjhhhNhNubj)}(h**strs**h]hstrs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jQhjhKNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKNhjubeh}(h]h ]h"]h$]h&]uh1jhj ubjR)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jQhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKPhj ubjR)}(hFor each set bit in **bits**, print the corresponding string in **strs**. If the output length is longer than 80, multiple line will be printed, with **pfx** is printed at the beginning of each line.h](hFor each set bit in }(hjhhhNhNubj)}(h**bits**h]hbits}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$, print the corresponding string in }(hjhhhNhNubj)}(h**strs**h]hstrs}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhN. If the output length is longer than 80, multiple line will be printed, with }(hjhhhNhNubj)}(h**pfx**h]hpfx}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh* is printed at the beginning of each line.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKOhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1juhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcper_bits_to_str (C function)c.cper_bits_to_strhNtauh1hhj hhhNhNubj)}(hhh](j)}(huint cper_bits_to_str (char *buf, int buf_size, unsigned long bits, const char * const strs[], unsigned int strs_size)h]j )}(hsint cper_bits_to_str(char *buf, int buf_size, unsigned long bits, const char *const strs[], unsigned int strs_size)h](j)}(hinth]hint}(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjyhhhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKoubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjyhhhjhKoubjS)}(hcper_bits_to_strh]j)}(hcper_bits_to_strh]hcper_bits_to_str}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](jhjieh"]h$]h&]hhuh1jRhjyhhhjhKoubjn)}(h_(char *buf, int buf_size, unsigned long bits, const char *const strs[], unsigned int strs_size)h](jt)}(h char *bufh](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjubjt)}(h int buf_sizeh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hj hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(hbuf_sizeh]hbuf_size}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjubjt)}(hunsigned long bitsh](j)}(hunsignedh]hunsigned}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubjB)}(h h]h }(hj?hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj-ubj)}(hlongh]hlong}(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubjB)}(h h]h }(hj[hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj-ubj)}(hbitsh]hbits}(hjihhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjubjt)}(hconst char *const strs[]h](jz)}(hj* h]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj~ubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj~ubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj~ubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj~ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubjz)}(hj* h]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj~ubjB)}(h h]h }(hjhhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhj~ubj)}(hstrsh]hstrs}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj~ubj)}(hjF h]h[}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hjT h]h]}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjubjt)}(hunsigned int strs_sizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hj"hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(hinth]hint}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjB)}(h h]h }(hj>hhhNhNubah}(h]h ]jNah"]h$]h&]uh1jAhjubj)}(h strs_sizeh]h strs_size}(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jshjubeh}(h]h ]h"]h$]h&]hhuh1jmhjyhhhjhKoubeh}(h]h ]h"]h$]h&]hhj>uh1j j?j@hjuhhhjhKoubah}(h]jpah ](jDjEeh"]h$]h&]jIjJ)jKhuh1jhjhKohjrhhubjM)}(hhh]jR)}(hreturn a string for set bitsh]hreturn a string for set bits}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKohjshhubah}(h]h ]h"]h$]h&]uh1jLhjrhhhjhKoubeh}(h]h ](j+functioneh"]h$]h&]joj+jpjjqjjrjsjtuh1hhhhj hNhNubjv)}(hX**Parameters** ``char *buf`` buffer to store the output string ``int buf_size`` size of the output string buffer ``unsigned long bits`` bit mask ``const char * const strs[]`` string array, indexed by bit position ``unsigned int strs_size`` size of the string array: **strs** **Description** Add to **buf** the bitmask in hexadecimal. Then, for each set bit in **bits**, add the corresponding string describing the bit in **strs** to **buf**. A typical example is:: const char * const bits[] = { "bit 3 name", "bit 4 name", "bit 5 name", }; char str[120]; unsigned int bitmask = BIT(3) | BIT(5); #define MASK GENMASK(5,3) cper_bits_to_str(str, sizeof(str), FIELD_GET(MASK, bitmask), bits, ARRAY_SIZE(bits)); The above code fills the string ``str`` with ``bit 3 name|bit 5 name``. **Return** number of bytes stored or an error code if lower than zero.h](jR)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jQhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKshjubj)}(hhh](j)}(h0``char *buf`` buffer to store the output string h](j)}(h ``char *buf``h]j)}(hjh]h char *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKphjubj)}(hhh]jR)}(h!buffer to store the output stringh]h!buffer to store the output string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjhKphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKphjubj)}(h2``int buf_size`` size of the output string buffer h](j)}(h``int buf_size``h]j)}(hjh]h int buf_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKqhjubj)}(hhh]jR)}(h size of the output string bufferh]h size of the output string buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjhKqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKqhjubj)}(h ``unsigned long bits`` bit mask h](j)}(h``unsigned long bits``h]j)}(hj)h]hunsigned long bits}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKrhj#ubj)}(hhh]jR)}(hbit maskh]hbit mask}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj>hKrhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hKrhjubj)}(hD``const char * const strs[]`` string array, indexed by bit position h](j)}(h``const char * const strs[]``h]j)}(hjbh]hconst char * const strs[]}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKshj\ubj)}(hhh]jR)}(h%string array, indexed by bit positionh]h%string array, indexed by bit position}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjwhKshjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhKshjubj)}(h>``unsigned int strs_size`` size of the string array: **strs** h](j)}(h``unsigned int strs_size``h]j)}(hjh]hunsigned int strs_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKthjubj)}(hhh]jR)}(h"size of the string array: **strs**h](hsize of the string array: }(hjhhhNhNubj)}(h**strs**h]hstrs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jQhjhKthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKthjubeh}(h]h ]h"]h$]h&]uh1jhjubjR)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jQhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKvhjubjR)}(hAdd to **buf** the bitmask in hexadecimal. Then, for each set bit in **bits**, add the corresponding string describing the bit in **strs** to **buf**.h](hAdd to }(hjhhhNhNubj)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh7 the bitmask in hexadecimal. Then, for each set bit in }(hjhhhNhNubj)}(h**bits**h]hbits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh5, add the corresponding string describing the bit in }(hjhhhNhNubj)}(h**strs**h]hstrs}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**buf**h]hbuf}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKuhjubjR)}(hA typical example is::h]hA typical example is:}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKxhjubh literal_block)}(hXconst char * const bits[] = { "bit 3 name", "bit 4 name", "bit 5 name", }; char str[120]; unsigned int bitmask = BIT(3) | BIT(5); #define MASK GENMASK(5,3) cper_bits_to_str(str, sizeof(str), FIELD_GET(MASK, bitmask), bits, ARRAY_SIZE(bits));h]hXconst char * const bits[] = { "bit 3 name", "bit 4 name", "bit 5 name", }; char str[120]; unsigned int bitmask = BIT(3) | BIT(5); #define MASK GENMASK(5,3) cper_bits_to_str(str, sizeof(str), FIELD_GET(MASK, bitmask), bits, ARRAY_SIZE(bits));}hjbsbah}(h]h ]h"]h$]h&]hhuh1j`hi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKzhjubjR)}(hGThe above code fills the string ``str`` with ``bit 3 name|bit 5 name``.h](h The above code fills the string }(hjqhhhNhNubj)}(h``str``h]hstr}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh with }(hjqhhhNhNubj)}(h``bit 3 name|bit 5 name``h]hbit 3 name|bit 5 name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKhjubjR)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jQhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKhjubjR)}(h;number of bytes stored or an error code if lower than zero.h]h;number of bytes stored or an error code if lower than zero.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhi/var/lib/git/docbuild/linux/Documentation/driver-api/firmware/efi/index:16: ./drivers/firmware/efi/cper.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1juhj hhhNhNubeh}(h]0uefi-common-platform-error-record-cper-functionsah ]h"]2uefi common platform error record (cper) functionsah$]h&]uh1hhhhhhhhKubeh}(h]2unified-extensible-firmware-interface-uefi-supportah ]h"]4unified extensible firmware interface (uefi) supportah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjj j jju nametypes}(jj juh}(jhj hhjj}jjNjSjGjLjj j j jpjuu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.