€•EŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ*/translations/zh_CN/admin-guide/bootconfig”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/zh_TW/admin-guide/bootconfig”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/it_IT/admin-guide/bootconfig”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ja_JP/admin-guide/bootconfig”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ko_KR/admin-guide/bootconfig”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/pt_BR/admin-guide/bootconfig”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/sp_SP/admin-guide/bootconfig”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒD/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig.rst”h´KubhŒtarget”“”)�”}”(hŒ.. _bootconfig:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œ bootconfig”uh1hÈh´Khhh²hh³hÇubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒBoot Configuration”h]”hŒBoot Configuration”…”�”}”(hhÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhhØh²hh³hÇh´KubhŒ field_list”“”)�”}”(hhh]”hŒfield”“”)�”}”(hhh]”(hŒ field_name”“”)�”}”(hŒAuthor”h]”hŒAuthor”…”�”}”(hh÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhhòh³hÇh´KubhŒ field_body”“”)�”}”(hŒ'Masami Hiramatsu ”h]”hŒ paragraph”“”)�”}”(hŒ&Masami Hiramatsu ”h]”(hŒMasami Hiramatsu <”…”�”}”(hj h²hh³Nh´NubhŒ reference”“”)�”}”(hŒmhiramat@kernel.org”h]”hŒmhiramat@kernel.org”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:mhiramat@kernel.org”uh1jhj ubhŒ>”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhòubeh}”(h]”h ]”h"]”h$]”h&]”uh1hðh³hÇh´K hhíh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhhØh²hh³hÇh´K ubh×)�”}”(hhh]”(hÜ)�”}”(hŒOverview”h]”hŒOverview”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjCh²hh³hÇh´K ubj )�”}”(hŒÑThe boot configuration expands the current kernel command line to support additional key-value data when booting the kernel in an efficient way. This allows administrators to pass a structured-Key config file.”h]”hŒÑThe boot configuration expands the current kernel command line to support additional key-value data when booting the kernel in an efficient way. This allows administrators to pass a structured-Key config file.”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´KhjCh²hubeh}”(h]”Œoverview”ah ]”h"]”Œoverview”ah$]”h&]”uh1hÖhhØh²hh³hÇh´K ubh×)�”}”(hhh]”(hÜ)�”}”(hŒConfig File Syntax”h]”hŒConfig File Syntax”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjjh²hh³hÇh´Kubj )�”}”(hŒßThe boot config syntax is a simple structured key-value. Each key consists of dot-connected-words, and key and value are connected by ``=``. The value string has to be terminated by the following delimiters described below.”h]”(hŒ†The boot config syntax is a simple structured key-value. Each key consists of dot-connected-words, and key and value are connected by ”…”�”}”(hj{h²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``=``”h]”hŒ=”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj{ubhŒT. The value string has to be terminated by the following delimiters described below.”…”�”}”(hj{h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Khjjh²hubj )�”}”(hXEach key word must contain only alphabets, numbers, dash (``-``) or underscore (``_``). And each value only contains printable characters or spaces except for delimiters such as semi-colon (``;``), new-line (``\n``), comma (``,``), hash (``#``) and closing brace (``}``).”h]”(hŒ:Each key word must contain only alphabets, numbers, dash (”…”�”}”(hj�h²hh³Nh´Nubj„)�”}”(hŒ``-``”h]”hŒ-”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj�ubhŒ) or underscore (”…”�”}”(hj�h²hh³Nh´Nubj„)�”}”(hŒ``_``”h]”hŒ_”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj�ubhŒi). And each value only contains printable characters or spaces except for delimiters such as semi-colon (”…”�”}”(hj�h²hh³Nh´Nubj„)�”}”(hŒ``;``”h]”hŒ;”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj�ubhŒ ), new-line (”…”�”}”(hj�h²hh³Nh´Nubj„)�”}”(hŒ``\n``”h]”hŒ\n”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj�ubhŒ ), comma (”…”�”}”(hj�h²hh³Nh´Nubj„)�”}”(hŒ``,``”h]”hŒ,”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj�ubhŒ ), hash (”…”�”}”(hj�h²hh³Nh´Nubj„)�”}”(hŒ``#``”h]”hŒ#”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj�ubhŒ) and closing brace (”…”�”}”(hj�h²hh³Nh´Nubj„)�”}”(hŒ``}``”h]”hŒ}”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj�ubhŒ).”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Khjjh²hubj )�”}”(hŒiIf the ``=`` is followed by whitespace up to one of these delimiters, the key is assigned an empty value.”h]”(hŒIf the ”…”�”}”(hj)h²hh³Nh´Nubj„)�”}”(hŒ``=``”h]”hŒ=”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj)ubhŒ] is followed by whitespace up to one of these delimiters, the key is assigned an empty value.”…”�”}”(hj)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Khjjh²hubj )�”}”(hŒçFor arrays, the array values are comma (``,``) separated, and comments and line breaks with newline (``\n``) are allowed between array values for readability. Thus the first entry of the array must be on the same line as the key.::”h]”(hŒ(For arrays, the array values are comma (”…”�”}”(hjIh²hh³Nh´Nubj„)�”}”(hŒ``,``”h]”hŒ,”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjIubhŒ8) separated, and comments and line breaks with newline (”…”�”}”(hjIh²hh³Nh´Nubj„)�”}”(hŒ``\n``”h]”hŒ\n”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjIubhŒ{) are allowed between array values for readability. Thus the first entry of the array must be on the same line as the key.:”…”�”}”(hjIh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K!hjjh²hubhŒ literal_block”“”)�”}”(hŒ)KEY[.WORD[...]] = VALUE[, VALUE2[...]][;]”h]”hŒ)KEY[.WORD[...]] = VALUE[, VALUE2[...]][;]”…”�”}”hj}sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´K&hjjh²hubj )�”}”(hŒlUnlike the kernel command line syntax, white spaces (including tabs) are ignored around the comma and ``=``.”h]”(hŒfUnlike the kernel command line syntax, white spaces (including tabs) are ignored around the comma and ”…”�”}”(hj‹h²hh³Nh´Nubj„)�”}”(hŒ``=``”h]”hŒ=”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj‹ubhŒ.”…”�”}”(hj‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K(hjjh²hubj )�”}”(hŒ¶If you want to use those delimiters in a value, you can use either double- quotes (``"VALUE"``) or single-quotes (``'VALUE'``) to quote it. Note that you can not escape these quotes.”h]”(hŒSIf you want to use those delimiters in a value, you can use either double- quotes (”…”�”}”(hj«h²hh³Nh´Nubj„)�”}”(hŒ ``"VALUE"``”h]”hŒ"VALUE"”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj«ubhŒ) or single-quotes (”…”�”}”(hj«h²hh³Nh´Nubj„)�”}”(hŒ ``'VALUE'``”h]”hŒ'VALUE'”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj«ubhŒ9) to quote it. Note that you can not escape these quotes.”…”�”}”(hj«h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K+hjjh²hubj )�”}”(hŒŽThere can be a key which doesn't have value or has an empty value. Those keys are used for checking if the key exists or not (like a boolean).”h]”hŒ�There can be a key which doesn’t have value or has an empty value. Those keys are used for checking if the key exists or not (like a boolean).”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K/hjjh²hubh×)�”}”(hhh]”(hÜ)�”}”(hŒKey-Value Syntax”h]”hŒKey-Value Syntax”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjëh²hh³hÇh´K3ubj )�”}”(hŒaThe boot config file syntax allows user to merge partially same word keys by brace. For example::”h]”hŒ`The boot config file syntax allows user to merge partially same word keys by brace. For example:”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K5hjëh²hubj|)�”}”(hŒ.foo.bar.baz = value1 foo.bar.qux.quux = value2”h]”hŒ.foo.bar.baz = value1 foo.bar.qux.quux = value2”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´K8hjëh²hubj )�”}”(hŒThese can be written also in::”h]”hŒThese can be written also in:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K;hjëh²hubj|)�”}”(hŒ0foo.bar { baz = value1 qux.quux = value2 }”h]”hŒ0foo.bar { baz = value1 qux.quux = value2 }”…”�”}”hj&sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´K=hjëh²hubj )�”}”(hŒ'Or more shorter, written as following::”h]”hŒ&Or more shorter, written as following:”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´KBhjëh²hubj|)�”}”(hŒ+foo.bar { baz = value1; qux.quux = value2 }”h]”hŒ+foo.bar { baz = value1; qux.quux = value2 }”…”�”}”hjBsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´KDhjëh²hubj )�”}”(hŒ„In both styles, same key words are automatically merged when parsing it at boot time. So you can append similar trees or key-values.”h]”hŒ„In both styles, same key words are automatically merged when parsing it at boot time. So you can append similar trees or key-values.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´KFhjëh²hubeh}”(h]”Œkey-value-syntax”ah ]”h"]”Œkey-value syntax”ah$]”h&]”uh1hÖhjjh²hh³hÇh´K3ubh×)�”}”(hhh]”(hÜ)�”}”(hŒSame-key Values”h]”hŒSame-key Values”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjfh²hh³hÇh´KJubj )�”}”(hŒSIt is prohibited that two or more values or arrays share a same-key. For example,::”h]”hŒRIt is prohibited that two or more values or arrays share a same-key. For example,:”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´KLhjfh²hubj|)�”}”(hŒAfoo = bar, baz foo = qux # !ERROR! we can not re-define same key”h]”hŒAfoo = bar, baz foo = qux # !ERROR! we can not re-define same key”…”�”}”hj…sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´KOhjfh²hubj )�”}”(hŒdIf you want to update the value, you must use the override operator ``:=`` explicitly. For example::”h]”(hŒDIf you want to update the value, you must use the override operator ”…”�”}”(hj“h²hh³Nh´Nubj„)�”}”(hŒ``:=``”h]”hŒ:=”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj“ubhŒ explicitly. For example:”…”�”}”(hj“h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´KRhjfh²hubj|)�”}”(hŒfoo = bar, baz foo := qux”h]”hŒfoo = bar, baz foo := qux”…”�”}”hj³sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´KUhjfh²hubj )�”}”(hŒ¬then, the ``qux`` is assigned to ``foo`` key. This is useful for overriding the default value by adding (partial) custom bootconfigs without parsing the default bootconfig.”h]”(hŒ then, the ”…”�”}”(hjÁh²hh³Nh´Nubj„)�”}”(hŒ``qux``”h]”hŒqux”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÁubhŒ is assigned to ”…”�”}”(hjÁh²hh³Nh´Nubj„)�”}”(hŒ``foo``”h]”hŒfoo”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÁubhŒ„ key. This is useful for overriding the default value by adding (partial) custom bootconfigs without parsing the default bootconfig.”…”�”}”(hjÁh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´KXhjfh²hubj )�”}”(hŒnIf you want to append the value to existing key as an array member, you can use ``+=`` operator. For example::”h]”(hŒPIf you want to append the value to existing key as an array member, you can use ”…”�”}”(hjóh²hh³Nh´Nubj„)�”}”(hŒ``+=``”h]”hŒ+=”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjóubhŒ operator. For example:”…”�”}”(hjóh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K\hjfh²hubj|)�”}”(hŒfoo = bar, baz foo += qux”h]”hŒfoo = bar, baz foo += qux”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´K_hjfh²hubj )�”}”(hŒ?In this case, the key ``foo`` has ``bar``, ``baz`` and ``qux``.”h]”(hŒIn this case, the key ”…”�”}”(hj!h²hh³Nh´Nubj„)�”}”(hŒ``foo``”h]”hŒfoo”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj!ubhŒ has ”…”�”}”(hj!h²hh³Nh´Nubj„)�”}”(hŒ``bar``”h]”hŒbar”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj!ubhŒ, ”…”�”}”(hj!h²hh³Nh´Nubj„)�”}”(hŒ``baz``”h]”hŒbaz”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj!ubhŒ and ”…”�”}”(hj!h²hh³Nh´Nubj„)�”}”(hŒ``qux``”h]”hŒqux”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj!ubhŒ.”…”�”}”(hj!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Kbhjfh²hubj )�”}”(hŒjMoreover, sub-keys and a value can coexist under a parent key. For example, following config is allowed.::”h]”hŒiMoreover, sub-keys and a value can coexist under a parent key. For example, following config is allowed.:”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Kdhjfh²hubj|)�”}”(hŒKfoo = value1 foo.bar = value2 foo := value3 # This will update foo's value.”h]”hŒKfoo = value1 foo.bar = value2 foo := value3 # This will update foo's value.”…”�”}”hj…sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´Kghjfh²hubj )�”}”(hŒŒNote, since there is no syntax to put a raw value directly under a structured key, you have to define it outside of the brace. For example::”h]”hŒ‹Note, since there is no syntax to put a raw value directly under a structured key, you have to define it outside of the brace. For example:”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Kkhjfh²hubj|)�”}”(hŒRfoo { bar = value1 bar { baz = value2 qux = value3 } }”h]”hŒRfoo { bar = value1 bar { baz = value2 qux = value3 } }”…”�”}”hj¡sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´Knhjfh²hubj )�”}”(hŒ»Also, the order of the value node under a key is fixed. If there are a value and subkeys, the value is always the first child node of the key. Thus if user specifies subkeys first, e.g.::”h]”hŒºAlso, the order of the value node under a key is fixed. If there are a value and subkeys, the value is always the first child node of the key. Thus if user specifies subkeys first, e.g.:”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Kvhjfh²hubj|)�”}”(hŒfoo.bar = value1 foo = value2”h]”hŒfoo.bar = value1 foo = value2”…”�”}”hj½sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´Kzhjfh²hubj )�”}”(hŒBIn the program (and /proc/bootconfig), it will be shown as below::”h]”hŒAIn the program (and /proc/bootconfig), it will be shown as below:”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K}hjfh²hubj|)�”}”(hŒfoo = value2 foo.bar = value1”h]”hŒfoo = value2 foo.bar = value1”…”�”}”hjÙsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´Khjfh²hubeh}”(h]”Œsame-key-values”ah ]”h"]”Œsame-key values”ah$]”h&]”uh1hÖhjjh²hh³hÇh´KJubh×)�”}”(hhh]”(hÜ)�”}”(hŒComments”h]”hŒComments”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjïh²hh³hÇh´Kƒubj )�”}”(hŒ‚The config syntax accepts shell-script style comments. The comments starting with hash ("#") until newline ("\n") will be ignored.”h]”hŒŠThe config syntax accepts shell-script style comments. The comments starting with hash (“#â€�) until newline (â€�nâ€�) will be ignored.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K…hjïh²hubj|)�”}”(hŒv# comment line foo = value # value is set to foo. bar = 1, # 1st element 2, # 2nd element 3 # 3rd element”h]”hŒv# comment line foo = value # value is set to foo. bar = 1, # 1st element 2, # 2nd element 3 # 3rd element”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´KŠhjïh²hubj )�”}”(hŒThis is parsed as below::”h]”hŒThis is parsed as below:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K�hjïh²hubj|)�”}”(hŒfoo = value bar = 1, 2, 3”h]”hŒfoo = value bar = 1, 2, 3”…”�”}”hj*sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´K’hjïh²hubj )�”}”(hŒ�Note that you can NOT put a comment or a newline between value and delimiter (``,`` or ``;``). This means following config has a syntax error ::”h]”(hŒNNote that you can NOT put a comment or a newline between value and delimiter (”…”�”}”(hj8h²hh³Nh´Nubj„)�”}”(hŒ``,``”h]”hŒ,”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj8ubhŒ or ”…”�”}”(hj8h²hh³Nh´Nubj„)�”}”(hŒ``;``”h]”hŒ;”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj8ubhŒ1). This means following config has a syntax error”…”�”}”(hj8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K•hjïh²hubj|)�”}”(hŒkey = 1 # comment ,2”h]”hŒkey = 1 # comment ,2”…”�”}”hjjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´K˜hjïh²hubeh}”(h]”Œcomments”ah ]”h"]”Œcomments”ah$]”h&]”uh1hÖhjjh²hh³hÇh´Kƒubeh}”(h]”Œconfig-file-syntax”ah ]”h"]”Œconfig file syntax”ah$]”h&]”uh1hÖhhØh²hh³hÇh´Kubh×)�”}”(hhh]”(hÜ)�”}”(hŒ/proc/bootconfig”h]”hŒ/proc/bootconfig”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjˆh²hh³hÇh´K�ubj )�”}”(hŒ¿/proc/bootconfig is a user-space interface of the boot config. Unlike /proc/cmdline, this file shows the key-value style list. Each key-value pair is shown in each line with following style::”h]”hŒ¾/proc/bootconfig is a user-space interface of the boot config. Unlike /proc/cmdline, this file shows the key-value style list. Each key-value pair is shown in each line with following style:”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´KŸhjˆh²hubj|)�”}”(hŒ(KEY[.WORDS...] = "[VALUE]"[,"VALUE2"...]”h]”hŒ(KEY[.WORDS...] = "[VALUE]"[,"VALUE2"...]”…”�”}”hj§sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´K£hjˆh²hubeh}”(h]”Œproc-bootconfig”ah ]”h"]”Œ/proc/bootconfig”ah$]”h&]”uh1hÖhhØh²hh³hÇh´K�ubh×)�”}”(hhh]”(hÜ)�”}”(hŒBoot Kernel With a Boot Config”h]”hŒBoot Kernel With a Boot Config”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhj½h²hh³hÇh´K§ubj )�”}”(hŒŒThere are two options to boot the kernel with bootconfig: attaching the bootconfig to the initrd image or embedding it in the kernel itself.”h]”hŒŒThere are two options to boot the kernel with bootconfig: attaching the bootconfig to the initrd image or embedding it in the kernel itself.”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K©hj½h²hubh×)�”}”(hhh]”(hÜ)�”}”(hŒ!Attaching a Boot Config to Initrd”h]”hŒ!Attaching a Boot Config to Initrd”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjÜh²hh³hÇh´K­ubj )�”}”(hŒÂSince the boot configuration file is loaded with initrd by default, it will be added to the end of the initrd (initramfs) image file with padding, size, checksum and 12-byte magic word as below.”h]”hŒÂSince the boot configuration file is loaded with initrd by default, it will be added to the end of the initrd (initramfs) image file with padding, size, checksum and 12-byte magic word as below.”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K¯hjÜh²hubj )�”}”(hŒH[initrd][bootconfig][padding][size(le32)][checksum(le32)][#BOOTCONFIG\n]”h]”hŒH[initrd][bootconfig][padding][size(le32)][checksum(le32)][#BOOTCONFIGn]”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K³hjÜh²hubj )�”}”(hŒDThe size and checksum fields are unsigned 32bit little endian value.”h]”hŒDThe size and checksum fields are unsigned 32bit little endian value.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´KµhjÜh²hubj )�”}”(hŒåWhen the boot configuration is added to the initrd image, the total file size is aligned to 4 bytes. To fill the gap, null characters (``\0``) will be added. Thus the ``size`` is the length of the bootconfig file + padding bytes.”h]”(hŒ‡When the boot configuration is added to the initrd image, the total file size is aligned to 4 bytes. To fill the gap, null characters (”…”�”}”(hjh²hh³Nh´Nubj„)�”}”(hŒ``\0``”h]”hŒ\0”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjubhŒ) will be added. Thus the ”…”�”}”(hjh²hh³Nh´Nubj„)�”}”(hŒ``size``”h]”hŒsize”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjubhŒ6 is the length of the bootconfig file + padding bytes.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K·hjÜh²hubj )�”}”(hXƒThe Linux kernel decodes the last part of the initrd image in memory to get the boot configuration data. Because of this "piggyback" method, there is no need to change or update the boot loader and the kernel image itself as long as the boot loader passes the correct initrd file size. If by any chance, the boot loader passes a longer size, the kernel fails to find the bootconfig data.”h]”hX‡The Linux kernel decodes the last part of the initrd image in memory to get the boot configuration data. Because of this “piggybackâ€� method, there is no need to change or update the boot loader and the kernel image itself as long as the boot loader passes the correct initrd file size. If by any chance, the boot loader passes a longer size, the kernel fails to find the bootconfig data.”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´K¼hjÜh²hubj )�”}”(hŒÒTo do this operation, Linux kernel provides ``bootconfig`` command under tools/bootconfig, which allows admin to apply or delete the config file to/from initrd image. You can build it by the following command::”h]”(hŒ,To do this operation, Linux kernel provides ”…”�”}”(hjWh²hh³Nh´Nubj„)�”}”(hŒ``bootconfig``”h]”hŒ bootconfig”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjWubhŒ— command under tools/bootconfig, which allows admin to apply or delete the config file to/from initrd image. You can build it by the following command:”…”�”}”(hjWh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´KÃhjÜh²hubj|)�”}”(hŒ# make -C tools/bootconfig”h]”hŒ# make -C tools/bootconfig”…”�”}”hjwsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´KÇhjÜh²hubj )�”}”(hŒuTo add your boot config file to initrd image, run bootconfig as below (Old data is removed automatically if exists)::”h]”hŒtTo add your boot config file to initrd image, run bootconfig as below (Old data is removed automatically if exists):”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´KÉhjÜh²hubj|)�”}”(hŒC# tools/bootconfig/bootconfig -a your-config /boot/initrd.img-X.Y.Z”h]”hŒC# tools/bootconfig/bootconfig -a your-config /boot/initrd.img-X.Y.Z”…”�”}”hj“sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´KÌhjÜh²hubj )�”}”(hŒETo remove the config from the image, you can use -d option as below::”h]”hŒDTo remove the config from the image, you can use -d option as below:”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´KÎhjÜh²hubj|)�”}”(hŒ7# tools/bootconfig/bootconfig -d /boot/initrd.img-X.Y.Z”h]”hŒ7# tools/bootconfig/bootconfig -d /boot/initrd.img-X.Y.Z”…”�”}”hj¯sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´KÐhjÜh²hubj )�”}”(hŒäThen add "bootconfig" on the normal kernel command line to tell the kernel to look for the bootconfig at the end of the initrd file. Alternatively, build your kernel with the ``CONFIG_BOOT_CONFIG_FORCE`` Kconfig option selected.”h]”(hŒ³Then add “bootconfigâ€� on the normal kernel command line to tell the kernel to look for the bootconfig at the end of the initrd file. Alternatively, build your kernel with the ”…”�”}”(hj½h²hh³Nh´Nubj„)�”}”(hŒ``CONFIG_BOOT_CONFIG_FORCE``”h]”hŒCONFIG_BOOT_CONFIG_FORCE”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj½ubhŒ Kconfig option selected.”…”�”}”(hj½h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´KÒhjÜh²hubeh}”(h]”Œ!attaching-a-boot-config-to-initrd”ah ]”h"]”Œ!attaching a boot config to initrd”ah$]”h&]”uh1hÖhj½h²hh³hÇh´K­ubh×)�”}”(hhh]”(hÜ)�”}”(hŒ#Embedding a Boot Config into Kernel”h]”hŒ#Embedding a Boot Config into Kernel”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjåh²hh³hÇh´KØubj )�”}”(hŒ¯If you can not use initrd, you can also embed the bootconfig file in the kernel by Kconfig options. In this case, you need to recompile the kernel with the following configs::”h]”hŒ®If you can not use initrd, you can also embed the bootconfig file in the kernel by Kconfig options. In this case, you need to recompile the kernel with the following configs:”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´KÚhjåh²hubj|)�”}”(hŒSCONFIG_BOOT_CONFIG_EMBED=y CONFIG_BOOT_CONFIG_EMBED_FILE="/PATH/TO/BOOTCONFIG/FILE"”h]”hŒSCONFIG_BOOT_CONFIG_EMBED=y CONFIG_BOOT_CONFIG_EMBED_FILE="/PATH/TO/BOOTCONFIG/FILE"”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´KÞhjåh²hubj )�”}”(hŒº``CONFIG_BOOT_CONFIG_EMBED_FILE`` requires an absolute path or a relative path to the bootconfig file from source tree or object tree. The kernel will embed it as the default bootconfig.”h]”(j„)�”}”(hŒ!``CONFIG_BOOT_CONFIG_EMBED_FILE``”h]”hŒCONFIG_BOOT_CONFIG_EMBED_FILE”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjubhŒ™ requires an absolute path or a relative path to the bootconfig file from source tree or object tree. The kernel will embed it as the default bootconfig.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Káhjåh²hubj )�”}”(hŒõJust as when attaching the bootconfig to the initrd, you need ``bootconfig`` option on the kernel command line to enable the embedded bootconfig, or, alternatively, build your kernel with the ``CONFIG_BOOT_CONFIG_FORCE`` Kconfig option selected.”h]”(hŒ>Just as when attaching the bootconfig to the initrd, you need ”…”�”}”(hj.h²hh³Nh´Nubj„)�”}”(hŒ``bootconfig``”h]”hŒ bootconfig”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj.ubhŒt option on the kernel command line to enable the embedded bootconfig, or, alternatively, build your kernel with the ”…”�”}”(hj.h²hh³Nh´Nubj„)�”}”(hŒ``CONFIG_BOOT_CONFIG_FORCE``”h]”hŒCONFIG_BOOT_CONFIG_FORCE”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj.ubhŒ Kconfig option selected.”…”�”}”(hj.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Kåhjåh²hubj )�”}”(hŒƒNote that even if you set this option, you can override the embedded bootconfig by another bootconfig which attached to the initrd.”h]”hŒƒNote that even if you set this option, you can override the embedded bootconfig by another bootconfig which attached to the initrd.”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Kêhjåh²hubeh}”(h]”Œ#embedding-a-boot-config-into-kernel”ah ]”h"]”Œ#embedding a boot config into kernel”ah$]”h&]”uh1hÖhj½h²hh³hÇh´KØubh×)�”}”(hhh]”(hÜ)�”}”(hŒ.Rendering Embedded kernel.* Keys at Build Time”h]”hŒ.Rendering Embedded kernel.* Keys at Build Time”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjvh²hh³hÇh´Kîubj )�”}”(hXBy default, the embedded bootconfig (``CONFIG_BOOT_CONFIG_EMBED=y``) is parsed at runtime, after ``parse_early_param()`` has already run. Early parameter handlers (``mem=``, ``earlycon=``, ``loglevel=``, ...) therefore cannot see values supplied via the embedded ``kernel`` subtree.”h]”(hŒ%By default, the embedded bootconfig (”…”�”}”(hj‡h²hh³Nh´Nubj„)�”}”(hŒ``CONFIG_BOOT_CONFIG_EMBED=y``”h]”hŒCONFIG_BOOT_CONFIG_EMBED=y”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj‡ubhŒ) is parsed at runtime, after ”…”�”}”(hj‡h²hh³Nh´Nubj„)�”}”(hŒ``parse_early_param()``”h]”hŒparse_early_param()”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj‡ubhŒ, has already run. Early parameter handlers (”…”�”}”(hj‡h²hh³Nh´Nubj„)�”}”(hŒ``mem=``”h]”hŒmem=”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj‡ubhŒ, ”…”�”}”(hj‡h²hh³Nh´Nubj„)�”}”(hŒ ``earlycon=``”h]”hŒ earlycon=”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj‡ubhŒ, ”…”�”}”hj‡sbj„)�”}”(hŒ ``loglevel=``”h]”hŒ loglevel=”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj‡ubhŒ=, ...) therefore cannot see values supplied via the embedded ”…”�”}”(hj‡h²hh³Nh´Nubj„)�”}”(hŒ ``kernel``”h]”hŒkernel”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj‡ubhŒ subtree.”…”�”}”(hj‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Kðhjvh²hubj )�”}”(hXG``CONFIG_CMDLINE_FROM_BOOTCONFIG`` resolves this by rendering the ``kernel`` subtree of ``CONFIG_BOOT_CONFIG_EMBED_FILE`` into a flat cmdline string at kernel build time (via ``tools/bootconfig -C``) and prepending it to ``boot_command_line`` during early architecture setup, so the keys are visible to ``parse_early_param()``.”h]”(j„)�”}”(hŒ"``CONFIG_CMDLINE_FROM_BOOTCONFIG``”h]”hŒCONFIG_CMDLINE_FROM_BOOTCONFIG”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjubhŒ resolves this by rendering the ”…”�”}”(hjh²hh³Nh´Nubj„)�”}”(hŒ ``kernel``”h]”hŒkernel”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjubhŒ subtree of ”…”�”}”(hjh²hh³Nh´Nubj„)�”}”(hŒ!``CONFIG_BOOT_CONFIG_EMBED_FILE``”h]”hŒCONFIG_BOOT_CONFIG_EMBED_FILE”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjubhŒ6 into a flat cmdline string at kernel build time (via ”…”�”}”(hjh²hh³Nh´Nubj„)�”}”(hŒ``tools/bootconfig -C``”h]”hŒtools/bootconfig -C”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjubhŒ) and prepending it to ”…”�”}”(hjh²hh³Nh´Nubj„)�”}”(hŒ``boot_command_line``”h]”hŒboot_command_line”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjubhŒ= during early architecture setup, so the keys are visible to ”…”�”}”(hjh²hh³Nh´Nubj„)�”}”(hŒ``parse_early_param()``”h]”hŒparse_early_param()”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjubhŒ.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Kõhjvh²hubj )�”}”(hXZThe option requires ``CONFIG_BOOT_CONFIG_EMBED=y``, a non-empty ``CONFIG_BOOT_CONFIG_EMBED_FILE``, ``CONFIG_CMDLINE`` to be empty, and an architecture that selects ``CONFIG_ARCH_SUPPORTS_CMDLINE_FROM_BOOTCONFIG``. Currently only x86 selects it; on other architectures the embedded bootconfig still works, but only through the late runtime parser.”h]”(hŒThe option requires ”…”�”}”(hjwh²hh³Nh´Nubj„)�”}”(hŒ``CONFIG_BOOT_CONFIG_EMBED=y``”h]”hŒCONFIG_BOOT_CONFIG_EMBED=y”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjwubhŒ, a non-empty ”…”�”}”(hjwh²hh³Nh´Nubj„)�”}”(hŒ!``CONFIG_BOOT_CONFIG_EMBED_FILE``”h]”hŒCONFIG_BOOT_CONFIG_EMBED_FILE”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjwubhŒ, ”…”�”}”(hjwh²hh³Nh´Nubj„)�”}”(hŒ``CONFIG_CMDLINE``”h]”hŒCONFIG_CMDLINE”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjwubhŒ/ to be empty, and an architecture that selects ”…”�”}”(hjwh²hh³Nh´Nubj„)�”}”(hŒ0``CONFIG_ARCH_SUPPORTS_CMDLINE_FROM_BOOTCONFIG``”h]”hŒ,CONFIG_ARCH_SUPPORTS_CMDLINE_FROM_BOOTCONFIG”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjwubhŒ†. Currently only x86 selects it; on other architectures the embedded bootconfig still works, but only through the late runtime parser.”…”�”}”(hjwh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Kûhjvh²hubj )�”}”(hXThe same ``bootconfig`` opt-in applies as elsewhere: the rendered keys are prepended only when ``bootconfig`` (in any form) appears on the kernel command line, or when ``CONFIG_BOOT_CONFIG_FORCE`` is set, which defaults to ``y`` when ``CONFIG_BOOT_CONFIG_EMBED`` is set.”h]”(hŒ The same ”…”�”}”(hjÍh²hh³Nh´Nubj„)�”}”(hŒ``bootconfig``”h]”hŒ bootconfig”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÍubhŒH opt-in applies as elsewhere: the rendered keys are prepended only when ”…”�”}”(hjÍh²hh³Nh´Nubj„)�”}”(hŒ``bootconfig``”h]”hŒ bootconfig”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÍubhŒ; (in any form) appears on the kernel command line, or when ”…”�”}”(hjÍh²hh³Nh´Nubj„)�”}”(hŒ``CONFIG_BOOT_CONFIG_FORCE``”h]”hŒCONFIG_BOOT_CONFIG_FORCE”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÍubhŒ is set, which defaults to ”…”�”}”(hjÍh²hh³Nh´Nubj„)�”}”(hŒ``y``”h]”hŒy”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÍubhŒ when ”…”�”}”(hjÍh²hh³Nh´Nubj„)�”}”(hŒ``CONFIG_BOOT_CONFIG_EMBED``”h]”hŒCONFIG_BOOT_CONFIG_EMBED”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÍubhŒ is set.”…”�”}”(hjÍh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Mhjvh²hubj )�”}”(hŒFor example, given::”h]”hŒFor example, given:”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Mhjvh²hubj|)�”}”(hŒ$kernel { loglevel = 7 mem = 4G }”h]”hŒ$kernel { loglevel = 7 mem = 4G }”…”�”}”hjC sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´Mhjvh²hubj )�”}”(hX’the kernel boots as if ``loglevel=7 mem=4G`` had been prepended to the bootloader command line, with the values visible to early-parsed handlers. Comma-separated values are still expanded into multiple cmdline entries per the bootconfig array convention -- the embedded ``kernel.earlycon = "uart8250,io,0x3f8"`` must be quoted to land as a single ``earlycon=`` entry, exactly as for the runtime parser.”h]”(hŒthe kernel boots as if ”…”�”}”(hjQ h²hh³Nh´Nubj„)�”}”(hŒ``loglevel=7 mem=4G``”h]”hŒloglevel=7 mem=4G”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjQ ubhŒâ had been prepended to the bootloader command line, with the values visible to early-parsed handlers. Comma-separated values are still expanded into multiple cmdline entries per the bootconfig array convention -- the embedded ”…”�”}”(hjQ h²hh³Nh´Nubj„)�”}”(hŒ)``kernel.earlycon = "uart8250,io,0x3f8"``”h]”hŒ%kernel.earlycon = "uart8250,io,0x3f8"”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjQ ubhŒ$ must be quoted to land as a single ”…”�”}”(hjQ h²hh³Nh´Nubj„)�”}”(hŒ ``earlycon=``”h]”hŒ earlycon=”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjQ ubhŒ* entry, exactly as for the runtime parser.”…”�”}”(hjQ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´M hjvh²hubj )�”}”(hŒÎIf the rendered string would not fit in ``COMMAND_LINE_SIZE`` together with the existing command line, the prepend is skipped and an error is logged, so an oversized embedded bootconfig cannot brick a boot.”h]”(hŒ(If the rendered string would not fit in ”…”�”}”(hj• h²hh³Nh´Nubj„)�”}”(hŒ``COMMAND_LINE_SIZE``”h]”hŒCOMMAND_LINE_SIZE”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj• ubhŒ‘ together with the existing command line, the prepend is skipped and an error is logged, so an oversized embedded bootconfig cannot brick a boot.”…”�”}”(hj• h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Mhjvh²hubh×)�”}”(hhh]”(hÜ)�”}”(hŒ:Interaction with other command line and bootconfig sources”h]”hŒ:Interaction with other command line and bootconfig sources”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjµ h²hh³hÇh´Mubj )�”}”(hXxWith ``CONFIG_CMDLINE_FROM_BOOTCONFIG=y`` the rendered ``kernel`` subtree behaves like a build-time command line (similar to ``CONFIG_CMDLINE``), not like a bootconfig source. It is prepended to ``boot_command_line`` in ``setup_arch()``, before ``parse_early_param()`` and long before the runtime parser looks at an initrd. Options can reach the kernel from up to four places:”h]”(hŒWith ”…”�”}”(hjÆ h²hh³Nh´Nubj„)�”}”(hŒ$``CONFIG_CMDLINE_FROM_BOOTCONFIG=y``”h]”hŒ CONFIG_CMDLINE_FROM_BOOTCONFIG=y”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÆ ubhŒ the rendered ”…”�”}”(hjÆ h²hh³Nh´Nubj„)�”}”(hŒ ``kernel``”h]”hŒkernel”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÆ ubhŒ< subtree behaves like a build-time command line (similar to ”…”�”}”(hjÆ h²hh³Nh´Nubj„)�”}”(hŒ``CONFIG_CMDLINE``”h]”hŒCONFIG_CMDLINE”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÆ ubhŒ4), not like a bootconfig source. It is prepended to ”…”�”}”(hjÆ h²hh³Nh´Nubj„)�”}”(hŒ``boot_command_line``”h]”hŒboot_command_line”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÆ ubhŒ in ”…”�”}”(hjÆ h²hh³Nh´Nubj„)�”}”(hŒ``setup_arch()``”h]”hŒ setup_arch()”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÆ ubhŒ , before ”…”�”}”(hjÆ h²hh³Nh´Nubj„)�”}”(hŒ``parse_early_param()``”h]”hŒparse_early_param()”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÆ ubhŒl and long before the runtime parser looks at an initrd. Options can reach the kernel from up to four places:”…”�”}”(hjÆ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Mhjµ h²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒäBootloader command line: the arguments the boot loader passes. The embedded cmdline is prepended in front of them, so for last-one-wins parameters a bootloader option still overrides the embedded value. Visible in /proc/cmdline.”h]”j )�”}”(hŒäBootloader command line: the arguments the boot loader passes. The embedded cmdline is prepended in front of them, so for last-one-wins parameters a bootloader option still overrides the embedded value. Visible in /proc/cmdline.”h]”hŒäBootloader command line: the arguments the boot loader passes. The embedded cmdline is prepended in front of them, so for last-one-wins parameters a bootloader option still overrides the embedded value. Visible in /proc/cmdline.”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´M"hjG ubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hjB h²hh³hÇh´NubjF )�”}”(hŒ”Embedded cmdline (this option): the rendered ``kernel`` subtree, prepended early so it is seen by ``parse_early_param()``. Visible in /proc/cmdline.”h]”j )�”}”(hŒ”Embedded cmdline (this option): the rendered ``kernel`` subtree, prepended early so it is seen by ``parse_early_param()``. Visible in /proc/cmdline.”h]”(hŒ-Embedded cmdline (this option): the rendered ”…”�”}”(hjc h²hh³Nh´Nubj„)�”}”(hŒ ``kernel``”h]”hŒkernel”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjc ubhŒ+ subtree, prepended early so it is seen by ”…”�”}”(hjc h²hh³Nh´Nubj„)�”}”(hŒ``parse_early_param()``”h]”hŒparse_early_param()”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjc ubhŒ. Visible in /proc/cmdline.”…”�”}”(hjc h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´M&hj_ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hjB h²hh³hÇh´NubjF )�”}”(hXHInitrd bootconfig: parsed late in ``setup_boot_config()``; its ``kernel`` keys are placed ahead of ``boot_command_line``, i.e. before the embedded cmdline, so last-wins favors the embedded values. As a bootconfig source, an initrd bootconfig still replaces the embedded bootconfig. Visible in /proc/cmdline and /proc/bootconfig.”h]”j )�”}”(hXHInitrd bootconfig: parsed late in ``setup_boot_config()``; its ``kernel`` keys are placed ahead of ``boot_command_line``, i.e. before the embedded cmdline, so last-wins favors the embedded values. As a bootconfig source, an initrd bootconfig still replaces the embedded bootconfig. Visible in /proc/cmdline and /proc/bootconfig.”h]”(hŒ"Initrd bootconfig: parsed late in ”…”�”}”(hjŸ h²hh³Nh´Nubj„)�”}”(hŒ``setup_boot_config()``”h]”hŒsetup_boot_config()”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjŸ ubhŒ; its ”…”�”}”(hjŸ h²hh³Nh´Nubj„)�”}”(hŒ ``kernel``”h]”hŒkernel”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjŸ ubhŒ keys are placed ahead of ”…”�”}”(hjŸ h²hh³Nh´Nubj„)�”}”(hŒ``boot_command_line``”h]”hŒboot_command_line”…”�”}”(hjË h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjŸ ubhŒÐ, i.e. before the embedded cmdline, so last-wins favors the embedded values. As a bootconfig source, an initrd bootconfig still replaces the embedded bootconfig. Visible in /proc/cmdline and /proc/bootconfig.”…”�”}”(hjŸ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´M)hj› ubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hjB h²hh³hÇh´NubjF )�”}”(hŒ†Embedded bootconfig (runtime): parsed late, only when no initrd bootconfig is present. Visible in /proc/cmdline and /proc/bootconfig. ”h]”j )�”}”(hŒ…Embedded bootconfig (runtime): parsed late, only when no initrd bootconfig is present. Visible in /proc/cmdline and /proc/bootconfig.”h]”hŒ…Embedded bootconfig (runtime): parsed late, only when no initrd bootconfig is present. Visible in /proc/cmdline and /proc/bootconfig.”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´M.hjé ubah}”(h]”h ]”h"]”h$]”h&]”uh1jE hjB h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j@ h³hÇh´M"hjµ h²hubj )�”}”(hXySo with this option the embedded ``kernel.*`` values take precedence over an initrd bootconfig's ``kernel.*`` values: for early parameters the initrd is not parsed yet, and for ordinary parameters the embedded keys land later in the command line. If you need an initrd bootconfig to override the embedded ``kernel.*`` keys, leave this option off and rely on the runtime parser.”h]”(hŒ!So with this option the embedded ”…”�”}”(hj h²hh³Nh´Nubj„)�”}”(hŒ ``kernel.*``”h]”hŒkernel.*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj ubhŒ6 values take precedence over an initrd bootconfig’s ”…”�”}”(hj h²hh³Nh´Nubj„)�”}”(hŒ ``kernel.*``”h]”hŒkernel.*”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj ubhŒÄ values: for early parameters the initrd is not parsed yet, and for ordinary parameters the embedded keys land later in the command line. If you need an initrd bootconfig to override the embedded ”…”�”}”(hj h²hh³Nh´Nubj„)�”}”(hŒ ``kernel.*``”h]”hŒkernel.*”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj ubhŒ< keys, leave this option off and rely on the runtime parser.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´M1hjµ h²hubj )�”}”(hXAThe rendered string is part of the command line, so it appears in /proc/cmdline. It is deliberately not shown in /proc/bootconfig: that file keeps reporting the parsed bootconfig tree -- the initrd bootconfig if present, otherwise the embedded bootconfig -- independent of whether build-time cmdline rendering is enabled.”h]”hXAThe rendered string is part of the command line, so it appears in /proc/cmdline. It is deliberately not shown in /proc/bootconfig: that file keeps reporting the parsed bootconfig tree -- the initrd bootconfig if present, otherwise the embedded bootconfig -- independent of whether build-time cmdline rendering is enabled.”…”�”}”(hjM h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´M8hjµ h²hubeh}”(h]”Œ:interaction-with-other-command-line-and-bootconfig-sources”ah ]”h"]”Œ:interaction with other command line and bootconfig sources”ah$]”h&]”uh1hÖhjvh²hh³hÇh´Mubeh}”(h]”Œ,rendering-embedded-kernel-keys-at-build-time”ah ]”h"]”Œ.rendering embedded kernel.* keys at build time”ah$]”h&]”uh1hÖhj½h²hh³hÇh´Kîubeh}”(h]”Œboot-kernel-with-a-boot-config”ah ]”h"]”Œboot kernel with a boot config”ah$]”h&]”uh1hÖhhØh²hh³hÇh´K§ubh×)�”}”(hhh]”(hÜ)�”}”(hŒ!Kernel parameters via Boot Config”h]”hŒ!Kernel parameters via Boot Config”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjs h²hh³hÇh´M?ubj )�”}”(hX<In addition to the kernel command line, the boot config can be used for passing the kernel parameters. All the key-value pairs under ``kernel`` key will be passed to kernel cmdline directly. Moreover, the key-value pairs under ``init`` will be passed to init process via the cmdline. The parameters are concatenated with user-given kernel cmdline string as the following order, so that the command line parameter can override bootconfig parameters (this depends on how the subsystem handles parameters but in general, earlier parameter will be overwritten by later one.)::”h]”(hŒ…In addition to the kernel command line, the boot config can be used for passing the kernel parameters. All the key-value pairs under ”…”�”}”(hj„ h²hh³Nh´Nubj„)�”}”(hŒ ``kernel``”h]”hŒkernel”…”�”}”(hjŒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj„ ubhŒT key will be passed to kernel cmdline directly. Moreover, the key-value pairs under ”…”�”}”(hj„ h²hh³Nh´Nubj„)�”}”(hŒ``init``”h]”hŒinit”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj„ ubhXP will be passed to init process via the cmdline. The parameters are concatenated with user-given kernel cmdline string as the following order, so that the command line parameter can override bootconfig parameters (this depends on how the subsystem handles parameters but in general, earlier parameter will be overwritten by later one.):”…”�”}”(hj„ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´MAhjs h²hubj|)�”}”(hŒT[bootconfig params][cmdline params] -- [bootconfig init params][cmdline init params]”h]”hŒT[bootconfig params][cmdline params] -- [bootconfig init params][cmdline init params]”…”�”}”hj¶ sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´MJhjs h²hubj )�”}”(hŒGHere is an example of the bootconfig file for kernel/init parameters.::”h]”hŒFHere is an example of the bootconfig file for kernel/init parameters.:”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´MLhjs h²hubj|)�”}”(hŒGkernel { root = 01234567-89ab-cdef-0123-456789abcd } init { splash }”h]”hŒGkernel { root = 01234567-89ab-cdef-0123-456789abcd } init { splash }”…”�”}”hjÒ sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´MNhjs h²hubj )�”}”(hŒEThis will be copied into the kernel cmdline string as the following::”h]”hŒDThis will be copied into the kernel cmdline string as the following:”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´MUhjs h²hubj|)�”}”(hŒ3root="01234567-89ab-cdef-0123-456789abcd" -- splash”h]”hŒ3root="01234567-89ab-cdef-0123-456789abcd" -- splash”…”�”}”hjî sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´MWhjs h²hubj )�”}”(hŒ-If user gives some other command line like,::”h]”hŒ,If user gives some other command line like,:”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´MYhjs h²hubj|)�”}”(hŒro bootconfig -- quiet”h]”hŒro bootconfig -- quiet”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´M[hjs h²hubj )�”}”(hŒ0The final kernel cmdline will be the following::”h]”hŒ/The final kernel cmdline will be the following:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´M]hjs h²hubj|)�”}”(hŒGroot="01234567-89ab-cdef-0123-456789abcd" ro bootconfig -- splash quiet”h]”hŒGroot="01234567-89ab-cdef-0123-456789abcd" ro bootconfig -- splash quiet”…”�”}”hj& sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´M_hjs h²hubeh}”(h]”Œ!kernel-parameters-via-boot-config”ah ]”h"]”Œ!kernel parameters via boot config”ah$]”h&]”uh1hÖhhØh²hh³hÇh´M?ubh×)�”}”(hhh]”(hÜ)�”}”(hŒConfig File Limitation”h]”hŒConfig File Limitation”…”�”}”(hj? h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhj< h²hh³hÇh´Mcubj )�”}”(hXCurrently the maximum config size is 32KB and the total key-words (not key-value entries) must be under 1024 nodes. Note: this is not the number of entries but nodes, an entry must consume more than 2 nodes (a key-word and a value). So theoretically, it will be up to 512 key-value pairs. If keys contains 3 words in average, it can contain 256 key-value pairs. In most cases, the number of config items will be under 100 entries and smaller than 8KB, so it would be enough. If the node number exceeds 1024, parser returns an error even if the file size is smaller than 32KB. (Note that this maximum size is not including the padding null characters.) Anyway, since bootconfig command verifies it when appending a boot config to initrd image, user can notice it before boot.”h]”hXCurrently the maximum config size is 32KB and the total key-words (not key-value entries) must be under 1024 nodes. Note: this is not the number of entries but nodes, an entry must consume more than 2 nodes (a key-word and a value). So theoretically, it will be up to 512 key-value pairs. If keys contains 3 words in average, it can contain 256 key-value pairs. In most cases, the number of config items will be under 100 entries and smaller than 8KB, so it would be enough. If the node number exceeds 1024, parser returns an error even if the file size is smaller than 32KB. (Note that this maximum size is not including the padding null characters.) Anyway, since bootconfig command verifies it when appending a boot config to initrd image, user can notice it before boot.”…”�”}”(hjM h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Mehj< h²hubeh}”(h]”Œconfig-file-limitation”ah ]”h"]”Œconfig file limitation”ah$]”h&]”uh1hÖhhØh²hh³hÇh´Mcubh×)�”}”(hhh]”(hÜ)�”}”(hŒBootconfig APIs”h]”hŒBootconfig APIs”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjc h²hh³hÇh´Mtubj )�”}”(hŒ„User can query or loop on key-value pairs, also it is possible to find a root (prefix) key node and find key-values under that node.”h]”hŒ„User can query or loop on key-value pairs, also it is possible to find a root (prefix) key node and find key-values under that node.”…”�”}”(hjt h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Mvhjc h²hubj )�”}”(hX6If you have a key string, you can query the value directly with the key using xbc_find_value(). If you want to know what keys exist in the boot config, you can use xbc_for_each_key_value() to iterate key-value pairs. Note that you need to use xbc_array_for_each_value() for accessing each array's value, e.g.::”h]”hX7If you have a key string, you can query the value directly with the key using xbc_find_value(). If you want to know what keys exist in the boot config, you can use xbc_for_each_key_value() to iterate key-value pairs. Note that you need to use xbc_array_for_each_value() for accessing each array’s value, e.g.:”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´Myhjc h²hubj|)�”}”(hŒ¤vnode = NULL; xbc_find_value("key.word", &vnode); if (vnode && xbc_node_is_array(vnode)) xbc_array_for_each_value(vnode, value) { printk("%s ", value); }”h]”hŒ¤vnode = NULL; xbc_find_value("key.word", &vnode); if (vnode && xbc_node_is_array(vnode)) xbc_array_for_each_value(vnode, value) { printk("%s ", value); }”…”�”}”hj� sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´Mhjc h²hubj )�”}”(hŒÄIf you want to focus on keys which have a prefix string, you can use xbc_find_node() to find a node by the prefix string, and iterate keys under the prefix node with xbc_node_for_each_key_value().”h]”hŒÄIf you want to focus on keys which have a prefix string, you can use xbc_find_node() to find a node by the prefix string, and iterate keys under the prefix node with xbc_node_for_each_key_value().”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´M†hjc h²hubj )�”}”(hŒpBut the most typical usage is to get the named value under prefix or get the named array under prefix as below::”h]”hŒoBut the most typical usage is to get the named value under prefix or get the named array under prefix as below:”…”�”}”(hj¬ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´MŠhjc h²hubj|)�”}”(hŒ©root = xbc_find_node("key.prefix"); value = xbc_node_find_value(root, "option", &vnode); ... xbc_node_for_each_array_value(root, "array-option", value, anode) { ... }”h]”hŒ©root = xbc_find_node("key.prefix"); value = xbc_node_find_value(root, "option", &vnode); ... xbc_node_for_each_array_value(root, "array-option", value, anode) { ... }”…”�”}”hjº sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j{h³hÇh´M�hjc h²hubj )�”}”(hŒWThis accesses a value of "key.prefix.option" and an array of "key.prefix.array-option".”h]”hŒ_This accesses a value of “key.prefix.optionâ€� and an array of “key.prefix.array-optionâ€�.”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´M”hjc h²hubj )�”}”(hŒ‹Locking is not needed, since after initialization, the config becomes read-only. All data and keys must be copied if you need to modify it.”h]”hŒ‹Locking is not needed, since after initialization, the config becomes read-only. All data and keys must be copied if you need to modify it.”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÇh´M—hjc h²hubeh}”(h]”Œbootconfig-apis”ah ]”h"]”Œbootconfig apis”ah$]”h&]”uh1hÖhhØh²hh³hÇh´Mtubh×)�”}”(hhh]”(hÜ)�”}”(hŒFunctions and structures”h]”hŒFunctions and structures”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjì h²hh³hÇh´MœubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œxbc_calc_checksum (C function)”Œc.xbc_calc_checksum”hNt”auh1jý hjì h²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K‹hj6ubj»)�”}”(hhh]”j )�”}”(hŒ Search key”h]”hŒ Search key”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jQh´K‹hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jQh´K‹hj3ubj›)�”}”(hŒC``struct xbc_node **vnode`` A container pointer of XBC value node. ”h]”(j¡)�”}”(hŒ``struct xbc_node **vnode``”h]”j„)�”}”(hjuh]”hŒstruct xbc_node **vnode”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KŒhjoubj»)�”}”(hhh]”j )�”}”(hŒ&A container pointer of XBC value node.”h]”hŒ&A container pointer of XBC value node.”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jŠh´KŒhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jŠh´KŒhj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hjubj )�”}”(hŒ**Description**”h]”j€)�”}”(hj°h]”hŒ Description”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KŽhjubj )�”}”(hŒïSearch a value whose key matches **key** from whole of XBC tree and return the value if found. Found value node is stored in ***vnode**. Note that this can return 0-length string and store NULL in ***vnode** for key-only (non-value) entry.”h]”(hŒ!Search a value whose key matches ”…”�”}”(hjÆh²hh³Nh´Nubj€)�”}”(hŒ**key**”h]”hŒkey”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆubhŒU from whole of XBC tree and return the value if found. Found value node is stored in ”…”�”}”(hjÆh²hh³Nh´Nubj€)�”}”(hŒ ***vnode**”h]”hŒ*vnode”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆubhŒ>. Note that this can return 0-length string and store NULL in ”…”�”}”(hjÆh²hh³Nh´Nubj€)�”}”(hŒ ***vnode**”h]”hŒ*vnode”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆubhŒ for key-only (non-value) entry.”…”�”}”(hjÆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K�hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œxbc_find_node (C function)”Œc.xbc_find_node”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒ1struct xbc_node * xbc_find_node (const char *key)”h]”j )�”}”(hŒ/struct xbc_node *xbc_find_node(const char *key)”h]”(j‰ )�”}”(hjžh]”hŒstruct”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hj'h²hh³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KšubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj'h²hh³j8h´Kšubh)�”}”(hhh]”j# )�”}”(hŒxbc_node”h]”hŒxbc_node”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjGubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”jLŒmodname”NŒ classname”Nj@ jC )�”}”jF ]”jI )�”}”j< Œ xbc_find_node”sbŒc.xbc_find_node”†”asbuh1hhj'h²hh³j8h´KšubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj'h²hh³j8h´KšubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hj'h²hh³j8h´Kšubjb )�”}”(hŒ xbc_find_node”h]”j# )�”}”(hjhh]”hŒ xbc_find_node”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj†ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hj'h²hh³j8h´Kšubj} )�”}”(hŒ(const char *key)”h]”jƒ )�”}”(hŒconst char *key”h]”(j‰ )�”}”(hjŒ h]”hŒconst”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hj¡ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj¡ubj¨ )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hj¡ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj¡ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hj¡ubj# )�”}”(hŒkey”h]”hŒkey”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hj�ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j| hj'h²hh³j8h´Kšubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhj#h²hh³j8h´Kšubah}”(h]”jah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³j8h´Kšhj h²hubjO)�”}”(hhh]”j )�”}”(hŒ!Find a node which matches the key”h]”hŒ!Find a node which matches the key”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kšhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj h²hh³j8h´Kšubeh}”(h]”h ]”(j: Œfunction”eh"]”h$]”h&]”joj: jpj+jqj+jr‰js‰jt‰uh1j h²hhjì h³Nh´Nubjv)�”}”(hŒÁ**Parameters** ``const char *key`` Search key **Description** Search a (key) node whose key matches **key** from whole of XBC tree and return the node if found. If not found, returns NULL.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hj5h]”hŒ Parameters”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kžhj/ubj–)�”}”(hhh]”j›)�”}”(hŒ``const char *key`` Search key ”h]”(j¡)�”}”(hŒ``const char *key``”h]”j„)�”}”(hjTh]”hŒconst char *key”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K›hjNubj»)�”}”(hhh]”j )�”}”(hŒ Search key”h]”hŒ Search key”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jih´K›hjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjNubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jih´K›hjKubah}”(h]”h ]”h"]”h$]”h&]”uh1j•hj/ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hj�h]”hŒ Description”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K�hj/ubj )�”}”(hŒ~Search a (key) node whose key matches **key** from whole of XBC tree and return the node if found. If not found, returns NULL.”h]”(hŒ&Search a (key) node whose key matches ”…”�”}”(hj¥h²hh³Nh´Nubj€)�”}”(hŒ**key**”h]”hŒkey”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥ubhŒQ from whole of XBC tree and return the node if found. If not found, returns NULL.”…”�”}”(hj¥h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kœhj/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ xbc_node_get_subkey (C function)”Œc.xbc_node_get_subkey”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒ=struct xbc_node * xbc_node_get_subkey (struct xbc_node *node)”h]”j )�”}”(hŒ;struct xbc_node *xbc_node_get_subkey(struct xbc_node *node)”h]”(j‰ )�”}”(hjžh]”hŒstruct”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hjâh²hh³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K¦ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjâh²hh³jóh´K¦ubh)�”}”(hhh]”j# )�”}”(hŒxbc_node”h]”hŒxbc_node”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”jŒmodname”NŒ classname”Nj@ jC )�”}”jF ]”jI )�”}”j< Œxbc_node_get_subkey”sbŒc.xbc_node_get_subkey”†”asbuh1hhjâh²hh³jóh´K¦ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjâh²hh³jóh´K¦ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hjâh²hh³jóh´K¦ubjb )�”}”(hŒxbc_node_get_subkey”h]”j# )�”}”(hj#h]”hŒxbc_node_get_subkey”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjAubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hjâh²hh³jóh´K¦ubj} )�”}”(hŒ(struct xbc_node *node)”h]”jƒ )�”}”(hŒstruct xbc_node *node”h]”(j‰ )�”}”(hjžh]”hŒstruct”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hj\ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj\ubh)�”}”(hhh]”j# )�”}”(hŒxbc_node”h]”hŒxbc_node”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”j€Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”j!Œc.xbc_node_get_subkey”†”asbuh1hhj\ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj\ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hj\ubj# )�”}”(hŒnode”h]”hŒnode”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hjXubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j| hjâh²hh³jóh´K¦ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhjÞh²hh³jóh´K¦ubah}”(h]”jÙah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³jóh´K¦hjÛh²hubjO)�”}”(hhh]”j )�”}”(hŒ&Return the first subkey node if exists”h]”hŒ&Return the first subkey node if exists”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K¦hjÞh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjÛh²hh³jóh´K¦ubeh}”(h]”h ]”(j: Œfunction”eh"]”h$]”h&]”joj: jpjùjqjùjr‰js‰jt‰uh1j h²hhjì h³Nh´Nubjv)�”}”(hŒ¿**Parameters** ``struct xbc_node *node`` Parent node **Description** Return the first subkey node of the **node**. If the **node** has no child or only value node, this will return NULL.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kªhjýubj–)�”}”(hhh]”j›)�”}”(hŒ&``struct xbc_node *node`` Parent node ”h]”(j¡)�”}”(hŒ``struct xbc_node *node``”h]”j„)�”}”(hj"h]”hŒstruct xbc_node *node”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K§hjubj»)�”}”(hhh]”j )�”}”(hŒ Parent node”h]”hŒ Parent node”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j7h´K§hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j7h´K§hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j•hjýubj )�”}”(hŒ**Description**”h]”j€)�”}”(hj]h]”hŒ Description”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K©hjýubj )�”}”(hŒuReturn the first subkey node of the **node**. If the **node** has no child or only value node, this will return NULL.”h]”(hŒ$Return the first subkey node of the ”…”�”}”(hjsh²hh³Nh´Nubj€)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjsubhŒ . If the ”…”�”}”(hjsh²hh³Nh´Nubj€)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjsubhŒ8 has no child or only value node, this will return NULL.”…”�”}”(hjsh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K¨hjýubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"xbc_array_for_each_value (C macro)”Œc.xbc_array_for_each_value”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒxbc_array_for_each_value”h]”j )�”}”(hŒxbc_array_for_each_value”h]”jb )�”}”(hŒxbc_array_for_each_value”h]”j# )�”}”(hjÀh]”hŒxbc_array_for_each_value”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjÆubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hjÂh²hh³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K·ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhj¾h²hh³jÝh´K·ubah}”(h]”j¹ah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³jÝh´K·hj»h²hubjO)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jNhj»h²hh³jÝh´K·ubeh}”(h]”h ]”(j: Œmacro”eh"]”h$]”h&]”joj: jpjöjqjöjr‰js‰jt‰uh1j h²hhjì h³Nh´Nubj )�”}”(hŒ+``xbc_array_for_each_value (anode, value)``”h]”j„)�”}”(hjüh]”hŒ'xbc_array_for_each_value (anode, value)”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K¹hjì h²hubhŒ block_quote”“”)�”}”(hŒ Iterate value nodes on an array ”h]”j )�”}”(hŒIterate value nodes on an array”h]”hŒIterate value nodes on an array”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K·hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³j&h´K·hjì h²hubjv)�”}”(hX**Parameters** ``anode`` An XBC arraied value node ``value`` A value **Description** Iterate array value nodes and values starts from **anode**. This is expected to be used with xbc_find_value() and xbc_node_find_value(), so that user can process each array entry node.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hj3h]”hŒ Parameters”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K»hj-ubj–)�”}”(hhh]”(j›)�”}”(hŒ$``anode`` An XBC arraied value node ”h]”(j¡)�”}”(hŒ ``anode``”h]”j„)�”}”(hjRh]”hŒanode”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K¸hjLubj»)�”}”(hhh]”j )�”}”(hŒAn XBC arraied value node”h]”hŒAn XBC arraied value node”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jgh´K¸hjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jgh´K¸hjIubj›)�”}”(hŒ``value`` A value ”h]”(j¡)�”}”(hŒ ``value``”h]”j„)�”}”(hj‹h]”hŒvalue”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K¹hj…ubj»)�”}”(hhh]”j )�”}”(hŒA value”h]”hŒA value”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j h´K¹hj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j h´K¹hjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hj-ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hjÆh]”hŒ Description”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´K»hj-ubj )�”}”(hŒ¸Iterate array value nodes and values starts from **anode**. This is expected to be used with xbc_find_value() and xbc_node_find_value(), so that user can process each array entry node.”h]”(hŒ1Iterate array value nodes and values starts from ”…”�”}”(hjÜh²hh³Nh´Nubj€)�”}”(hŒ **anode**”h]”hŒanode”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜubhŒ~. This is expected to be used with xbc_find_value() and xbc_node_find_value(), so that user can process each array entry node.”…”�”}”(hjÜh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kºhj-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!xbc_node_for_each_child (C macro)”Œc.xbc_node_for_each_child”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒxbc_node_for_each_child”h]”j )�”}”(hŒxbc_node_for_each_child”h]”jb )�”}”(hŒxbc_node_for_each_child”h]”j# )�”}”(hjh]”hŒxbc_node_for_each_child”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hjh²hh³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÅubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhjh²hh³j4h´KÅubah}”(h]”jah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³j4h´KÅhjh²hubjO)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jNhjh²hh³j4h´KÅubeh}”(h]”h ]”(j: Œmacro”eh"]”h$]”h&]”joj: jpjMjqjMjr‰js‰jt‰uh1j h²hhjì h³Nh´Nubj )�”}”(hŒ+``xbc_node_for_each_child (parent, child)``”h]”j„)�”}”(hjSh]”hŒ'xbc_node_for_each_child (parent, child)”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÇhjì h²hubj)�”}”(hŒIterate child nodes ”h]”j )�”}”(hŒIterate child nodes”h]”hŒIterate child nodes”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÅhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{h´KÅhjì h²hubjv)�”}”(hŒç**Parameters** ``parent`` An XBC node. ``child`` Iterated XBC node. **Description** Iterate child nodes of **parent**. Each child nodes are stored to **child**. The **child** can be mixture of a value node and subkey nodes.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hjˆh]”hŒ Parameters”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÉhj‚ubj–)�”}”(hhh]”(j›)�”}”(hŒ``parent`` An XBC node. ”h]”(j¡)�”}”(hŒ ``parent``”h]”j„)�”}”(hj§h]”hŒparent”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÆhj¡ubj»)�”}”(hhh]”j )�”}”(hŒ An XBC node.”h]”hŒ An XBC node.”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j¼h´KÆhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j¼h´KÆhjžubj›)�”}”(hŒ``child`` Iterated XBC node. ”h]”(j¡)�”}”(hŒ ``child``”h]”j„)�”}”(hjàh]”hŒchild”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÇhjÚubj»)�”}”(hhh]”j )�”}”(hŒIterated XBC node.”h]”hŒIterated XBC node.”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jõh´KÇhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jõh´KÇhjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hj‚ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÉhj‚ubj )�”}”(hŒ‹Iterate child nodes of **parent**. Each child nodes are stored to **child**. The **child** can be mixture of a value node and subkey nodes.”h]”(hŒIterate child nodes of ”…”�”}”(hj1h²hh³Nh´Nubj€)�”}”(hŒ **parent**”h]”hŒparent”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1ubhŒ!. Each child nodes are stored to ”…”�”}”(hj1h²hh³Nh´Nubj€)�”}”(hŒ **child**”h]”hŒchild”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1ubhŒ. The ”…”�”}”(hj1h²hh³Nh´Nubj€)�”}”(hŒ **child**”h]”hŒchild”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1ubhŒ1 can be mixture of a value node and subkey nodes.”…”�”}”(hj1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÈhj‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"xbc_node_for_each_subkey (C macro)”Œc.xbc_node_for_each_subkey”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒxbc_node_for_each_subkey”h]”j )�”}”(hŒxbc_node_for_each_subkey”h]”jb )�”}”(hŒxbc_node_for_each_subkey”h]”j# )�”}”(hj�h]”hŒxbc_node_for_each_subkey”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj–ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hj’h²hh³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÑubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhjŽh²hh³j­h´KÑubah}”(h]”j‰ah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³j­h´KÑhj‹h²hubjO)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jNhj‹h²hh³j­h´KÑubeh}”(h]”h ]”(j: Œmacro”eh"]”h$]”h&]”joj: jpjÆjqjÆjr‰js‰jt‰uh1j h²hhjì h³Nh´Nubj )�”}”(hŒ,``xbc_node_for_each_subkey (parent, child)``”h]”j„)�”}”(hjÌh]”hŒ(xbc_node_for_each_subkey (parent, child)”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÓhjì h²hubj)�”}”(hŒIterate child subkey nodes ”h]”j )�”}”(hŒIterate child subkey nodes”h]”hŒIterate child subkey nodes”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÑhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³jôh´KÑhjì h²hubjv)�”}”(hŒÐ**Parameters** ``parent`` An XBC node. ``child`` Iterated XBC node. **Description** Iterate subkey nodes of **parent**. Each child nodes are stored to **child**. The **child** is only the subkey node.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÕhjûubj–)�”}”(hhh]”(j›)�”}”(hŒ``parent`` An XBC node. ”h]”(j¡)�”}”(hŒ ``parent``”h]”j„)�”}”(hj h]”hŒparent”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÒhjubj»)�”}”(hhh]”j )�”}”(hŒ An XBC node.”h]”hŒ An XBC node.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j5h´KÒhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j5h´KÒhjubj›)�”}”(hŒ``child`` Iterated XBC node. ”h]”(j¡)�”}”(hŒ ``child``”h]”j„)�”}”(hjYh]”hŒchild”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÓhjSubj»)�”}”(hhh]”j )�”}”(hŒIterated XBC node.”h]”hŒIterated XBC node.”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jnh´KÓhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jnh´KÓhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hjûubj )�”}”(hŒ**Description**”h]”j€)�”}”(hj”h]”hŒ Description”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÕhjûubj )�”}”(hŒtIterate subkey nodes of **parent**. Each child nodes are stored to **child**. The **child** is only the subkey node.”h]”(hŒIterate subkey nodes of ”…”�”}”(hjªh²hh³Nh´Nubj€)�”}”(hŒ **parent**”h]”hŒparent”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªubhŒ!. Each child nodes are stored to ”…”�”}”(hjªh²hh³Nh´Nubj€)�”}”(hŒ **child**”h]”hŒchild”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªubhŒ. The ”…”�”}”(hjªh²hh³Nh´Nubj€)�”}”(hŒ **child**”h]”hŒchild”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªubhŒ is only the subkey node.”…”�”}”(hjªh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÔhjûubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'xbc_node_for_each_array_value (C macro)”Œc.xbc_node_for_each_array_value”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒxbc_node_for_each_array_value”h]”j )�”}”(hŒxbc_node_for_each_array_value”h]”jb )�”}”(hŒxbc_node_for_each_array_value”h]”j# )�”}”(hj h]”hŒxbc_node_for_each_array_value”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hj h²hh³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÝubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhj h²hh³j& h´KÝubah}”(h]”j ah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³j& h´KÝhj h²hubjO)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jNhj h²hh³j& h´KÝubeh}”(h]”h ]”(j: Œmacro”eh"]”h$]”h&]”joj: jpj? jqj? jr‰js‰jt‰uh1j h²hhjì h³Nh´Nubj )�”}”(hŒ;``xbc_node_for_each_array_value (node, key, anode, value)``”h]”j„)�”}”(hjE h]”hŒ7xbc_node_for_each_array_value (node, key, anode, value)”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjC ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kßhjì h²hubj)�”}”(hŒ#Iterate array entries of geven key ”h]”j )�”}”(hŒ"Iterate array entries of geven key”h]”hŒ"Iterate array entries of geven key”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÝhj[ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³jm h´KÝhjì h²hubjv)�”}”(hX]**Parameters** ``node`` An XBC node. ``key`` A key string searched under **node** ``anode`` Iterated XBC node of array entry. ``value`` Iterated value of array entry. **Description** Iterate array entries of given **key** under **node**. Each array entry node is stored to **anode** and **value**. If the **node** doesn't have **key** node, it does nothing. Note that even if the found key node has only one value (not array) this executes block once. However, if the found key node has no value (key-only node), this does nothing. So don't use this for testing the key-value pair existence.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hjz h]”hŒ Parameters”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjx ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Káhjt ubj–)�”}”(hhh]”(j›)�”}”(hŒ``node`` An XBC node. ”h]”(j¡)�”}”(hŒ``node``”h]”j„)�”}”(hj™ h]”hŒnode”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj— ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KÞhj“ ubj»)�”}”(hhh]”j )�”}”(hŒ An XBC node.”h]”hŒ An XBC node.”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j® h´KÞhj¯ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj“ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j® h´KÞhj� ubj›)�”}”(hŒ-``key`` A key string searched under **node** ”h]”(j¡)�”}”(hŒ``key``”h]”j„)�”}”(hjÒ h]”hŒkey”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÐ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KßhjÌ ubj»)�”}”(hhh]”j )�”}”(hŒ$A key string searched under **node**”h]”(hŒA key string searched under ”…”�”}”(hjë h²hh³Nh´Nubj€)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjë ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³jç h´Kßhjè ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjÌ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jç h´Kßhj� ubj›)�”}”(hŒ,``anode`` Iterated XBC node of array entry. ”h]”(j¡)�”}”(hŒ ``anode``”h]”j„)�”}”(hj!h]”hŒanode”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kàhj!ubj»)�”}”(hhh]”j )�”}”(hŒ!Iterated XBC node of array entry.”h]”hŒ!Iterated XBC node of array entry.”…”�”}”(hj2!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j.!h´Kàhj/!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j.!h´Kàhj� ubj›)�”}”(hŒ)``value`` Iterated value of array entry. ”h]”(j¡)�”}”(hŒ ``value``”h]”j„)�”}”(hjR!h]”hŒvalue”…”�”}”(hjT!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjP!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KáhjL!ubj»)�”}”(hhh]”j )�”}”(hŒIterated value of array entry.”h]”hŒIterated value of array entry.”…”�”}”(hjk!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jg!h´Káhjh!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjL!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jg!h´Káhj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hjt ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hj�!h]”hŒ Description”…”�”}”(hj�!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kãhjt ubj )�”}”(hX˜Iterate array entries of given **key** under **node**. Each array entry node is stored to **anode** and **value**. If the **node** doesn't have **key** node, it does nothing. Note that even if the found key node has only one value (not array) this executes block once. However, if the found key node has no value (key-only node), this does nothing. So don't use this for testing the key-value pair existence.”h]”(hŒIterate array entries of given ”…”�”}”(hj£!h²hh³Nh´Nubj€)�”}”(hŒ**key**”h]”hŒkey”…”�”}”(hj«!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£!ubhŒ under ”…”�”}”(hj£!h²hh³Nh´Nubj€)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hj½!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£!ubhŒ%. Each array entry node is stored to ”…”�”}”(hj£!h²hh³Nh´Nubj€)�”}”(hŒ **anode**”h]”hŒanode”…”�”}”(hjÏ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£!ubhŒ and ”…”�”}”(hj£!h²hh³Nh´Nubj€)�”}”(hŒ **value**”h]”hŒvalue”…”�”}”(hjá!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£!ubhŒ . If the ”…”�”}”(hj£!h²hh³Nh´Nubj€)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hjó!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£!ubhŒ doesn’t have ”…”�”}”(hj£!h²hh³Nh´Nubj€)�”}”(hŒ**key**”h]”hŒkey”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£!ubhX node, it does nothing. Note that even if the found key node has only one value (not array) this executes block once. However, if the found key node has no value (key-only node), this does nothing. So don’t use this for testing the key-value pair existence.”…”�”}”(hj£!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kâhjt ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%xbc_node_for_each_key_value (C macro)”Œc.xbc_node_for_each_key_value”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒxbc_node_for_each_key_value”h]”j )�”}”(hŒxbc_node_for_each_key_value”h]”jb )�”}”(hŒxbc_node_for_each_key_value”h]”j# )�”}”(hj8"h]”hŒxbc_node_for_each_key_value”…”�”}”(hjB"h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj>"ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hj:"h²hh³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kñubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhj6"h²hh³jU"h´Kñubah}”(h]”j1"ah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³jU"h´Kñhj3"h²hubjO)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jNhj3"h²hh³jU"h´Kñubeh}”(h]”h ]”(j: Œmacro”eh"]”h$]”h&]”joj: jpjn"jqjn"jr‰js‰jt‰uh1j h²hhjì h³Nh´Nubj )�”}”(hŒ4``xbc_node_for_each_key_value (node, knode, value)``”h]”j„)�”}”(hjt"h]”hŒ0xbc_node_for_each_key_value (node, knode, value)”…”�”}”(hjv"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjr"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kóhjì h²hubj)�”}”(hŒ%Iterate key-value pairs under a node ”h]”j )�”}”(hŒ$Iterate key-value pairs under a node”h]”hŒ$Iterate key-value pairs under a node”…”�”}”(hjŽ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KñhjŠ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³jœ"h´Kñhjì h²hubjv)�”}”(hŒö**Parameters** ``node`` An XBC node. ``knode`` Iterated key node ``value`` Iterated value string **Description** Iterate key-value pairs under **node**. Each key node and value string are stored in **knode** and **value** respectively.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hj©"h]”hŒ Parameters”…”�”}”(hj«"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kõhj£"ubj–)�”}”(hhh]”(j›)�”}”(hŒ``node`` An XBC node. ”h]”(j¡)�”}”(hŒ``node``”h]”j„)�”}”(hjÈ"h]”hŒnode”…”�”}”(hjÊ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÆ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´KòhjÂ"ubj»)�”}”(hhh]”j )�”}”(hŒ An XBC node.”h]”hŒ An XBC node.”…”�”}”(hjá"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jÝ"h´KòhjÞ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjÂ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jÝ"h´Kòhj¿"ubj›)�”}”(hŒ``knode`` Iterated key node ”h]”(j¡)�”}”(hŒ ``knode``”h]”j„)�”}”(hj#h]”hŒknode”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÿ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kóhjû"ubj»)�”}”(hhh]”j )�”}”(hŒIterated key node”h]”hŒIterated key node”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j#h´Kóhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjû"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j#h´Kóhj¿"ubj›)�”}”(hŒ ``value`` Iterated value string ”h]”(j¡)�”}”(hŒ ``value``”h]”j„)�”}”(hj:#h]”hŒvalue”…”�”}”(hj<#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj8#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kôhj4#ubj»)�”}”(hhh]”j )�”}”(hŒIterated value string”h]”hŒIterated value string”…”�”}”(hjS#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jO#h´KôhjP#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj4#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jO#h´Kôhj¿"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hj£"ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hju#h]”hŒ Description”…”�”}”(hjw#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjs#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Köhj£"ubj )�”}”(hŒzIterate key-value pairs under **node**. Each key node and value string are stored in **knode** and **value** respectively.”h]”(hŒIterate key-value pairs under ”…”�”}”(hj‹#h²hh³Nh´Nubj€)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hj“#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹#ubhŒ/. Each key node and value string are stored in ”…”�”}”(hj‹#h²hh³Nh´Nubj€)�”}”(hŒ **knode**”h]”hŒknode”…”�”}”(hj¥#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹#ubhŒ and ”…”�”}”(hj‹#h²hh³Nh´Nubj€)�”}”(hŒ **value**”h]”hŒvalue”…”�”}”(hj·#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹#ubhŒ respectively.”…”�”}”(hj‹#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kõhj£"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ xbc_for_each_key_value (C macro)”Œc.xbc_for_each_key_value”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒxbc_for_each_key_value”h]”j )�”}”(hŒxbc_for_each_key_value”h]”jb )�”}”(hŒxbc_for_each_key_value”h]”j# )�”}”(hjê#h]”hŒxbc_for_each_key_value”…”�”}”(hjô#h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjð#ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hjì#h²hh³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kþubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhjè#h²hh³j$h´Kþubah}”(h]”jã#ah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³j$h´Kþhjå#h²hubjO)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jNhjå#h²hh³j$h´Kþubeh}”(h]”h ]”(j: Œmacro”eh"]”h$]”h&]”joj: jpj $jqj $jr‰js‰jt‰uh1j h²hhjì h³Nh´Nubj )�”}”(hŒ)``xbc_for_each_key_value (knode, value)``”h]”j„)�”}”(hj&$h]”hŒ%xbc_for_each_key_value (knode, value)”…”�”}”(hj($h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj$$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Mhjì h²hubj)�”}”(hŒIterate key-value pairs ”h]”j )�”}”(hŒIterate key-value pairs”h]”hŒIterate key-value pairs”…”�”}”(hj@$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kþhj<$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³jN$h´Kþhjì h²hubjv)�”}”(hŒà**Parameters** ``knode`` Iterated key node ``value`` Iterated value string **Description** Iterate key-value pairs in whole XBC tree. Each key node and value string are stored in **knode** and **value** respectively.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hj[$h]”hŒ Parameters”…”�”}”(hj]$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjY$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´MhjU$ubj–)�”}”(hhh]”(j›)�”}”(hŒ``knode`` Iterated key node ”h]”(j¡)�”}”(hŒ ``knode``”h]”j„)�”}”(hjz$h]”hŒknode”…”�”}”(hj|$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjx$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Kÿhjt$ubj»)�”}”(hhh]”j )�”}”(hŒIterated key node”h]”hŒIterated key node”…”�”}”(hj“$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j�$h´Kÿhj�$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjt$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j�$h´Kÿhjq$ubj›)�”}”(hŒ ``value`` Iterated value string ”h]”(j¡)�”}”(hŒ ``value``”h]”j„)�”}”(hj³$h]”hŒvalue”…”�”}”(hjµ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj±$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Mhj­$ubj»)�”}”(hhh]”j )�”}”(hŒIterated value string”h]”hŒIterated value string”…”�”}”(hjÌ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jÈ$h´MhjÉ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj­$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jÈ$h´Mhjq$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hjU$ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hjî$h]”hŒ Description”…”�”}”(hjð$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjì$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´MhjU$ubj )�”}”(hŒ}Iterate key-value pairs in whole XBC tree. Each key node and value string are stored in **knode** and **value** respectively.”h]”(hŒXIterate key-value pairs in whole XBC tree. Each key node and value string are stored in ”…”�”}”(hj%h²hh³Nh´Nubj€)�”}”(hŒ **knode**”h]”hŒknode”…”�”}”(hj %h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%ubhŒ and ”…”�”}”(hj%h²hh³Nh´Nubj€)�”}”(hŒ **value**”h]”hŒvalue”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%ubhŒ respectively.”…”�”}”(hj%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´MhjU$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!xbc_node_compose_key (C function)”Œc.xbc_node_compose_key”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒHint xbc_node_compose_key (struct xbc_node *node, char *buf, size_t size)”h]”j )�”}”(hŒGint xbc_node_compose_key(struct xbc_node *node, char *buf, size_t size)”h]”(j¨ )�”}”(hŒint”h]”hŒint”…”�”}”(hjW%h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hjS%h²hh³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´MubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf%h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjS%h²hh³je%h´Mubjb )�”}”(hŒxbc_node_compose_key”h]”j# )�”}”(hŒxbc_node_compose_key”h]”hŒxbc_node_compose_key”…”�”}”(hjx%h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjt%ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hjS%h²hh³je%h´Mubj} )�”}”(hŒ/(struct xbc_node *node, char *buf, size_t size)”h]”(jƒ )�”}”(hŒstruct xbc_node *node”h]”(j‰ )�”}”(hjžh]”hŒstruct”…”�”}”(hj”%h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hj�%ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡%h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj�%ubh)�”}”(hhh]”j# )�”}”(hŒxbc_node”h]”hŒxbc_node”…”�”}”(hj²%h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj¯%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”j´%Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”jI )�”}”j< jz%sbŒc.xbc_node_compose_key”†”asbuh1hhj�%ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ%h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj�%ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hjà%h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hj�%ubj# )�”}”(hŒnode”h]”hŒnode”…”�”}”(hjí%h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj�%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hjŒ%ubjƒ )�”}”(hŒ char *buf”h]”(j¨ )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hj&ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”u•h1jP hj&ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hj"&h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hj&ubj# )�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj/&h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hjŒ%ubjƒ )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j# )�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjK&h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjH&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”jM&Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”jÎ%Œc.xbc_node_compose_key”†”asbuh1hhjD&ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hji&h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjD&ubj# )�”}”(hŒsize”h]”hŒsize”…”�”}”(hjw&h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjD&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hjŒ%ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j| hjS%h²hh³je%h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhjO%h²hh³je%h´Mubah}”(h]”jJ%ah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³je%h´MhjL%h²hubjO)�”}”(hhh]”j )�”}”(hŒ'Compose full key string of the XBC node”h]”hŒ'Compose full key string of the XBC node”…”�”}”(hj¡&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Mhjž&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjL%h²hh³je%h´Mubeh}”(h]”h ]”(j: Œfunction”eh"]”h$]”h&]”joj: jpj¹&jqj¹&jr‰js‰jt‰uh1j h²hhjì h³Nh´Nubjv)�”}”(hXr**Parameters** ``struct xbc_node *node`` An XBC node. ``char *buf`` A buffer to store the key. ``size_t size`` The size of the **buf**. **Description** Compose the full-length key of the **node** into **buf**. Returns the total length of the key stored in **buf**. Or returns -EINVAL if **node** is NULL, and -ERANGE if the key depth is deeper than max depth.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hjÃ&h]”hŒ Parameters”…”�”}”(hjÅ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Mhj½&ubj–)�”}”(hhh]”(j›)�”}”(hŒ'``struct xbc_node *node`` An XBC node. ”h]”(j¡)�”}”(hŒ``struct xbc_node *node``”h]”j„)�”}”(hjâ&h]”hŒstruct xbc_node *node”…”�”}”(hjä&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjà&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´MhjÜ&ubj»)�”}”(hhh]”j )�”}”(hŒ An XBC node.”h]”hŒ An XBC node.”…”�”}”(hjû&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j÷&h´Mhjø&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjÜ&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j÷&h´MhjÙ&ubj›)�”}”(hŒ)``char *buf`` A buffer to store the key. ”h]”(j¡)�”}”(hŒ ``char *buf``”h]”j„)�”}”(hj'h]”hŒ char *buf”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Mhj'ubj»)�”}”(hhh]”j )�”}”(hŒA buffer to store the key.”h]”hŒA buffer to store the key.”…”�”}”(hj4'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j0'h´Mhj1'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j0'h´MhjÙ&ubj›)�”}”(hŒ)``size_t size`` The size of the **buf**. ”h]”(j¡)�”}”(hŒ``size_t size``”h]”j„)�”}”(hjT'h]”hŒ size_t size”…”�”}”(hjV'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjR'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´MhjN'ubj»)�”}”(hhh]”j )�”}”(hŒThe size of the **buf**.”h]”(hŒThe size of the ”…”�”}”(hjm'h²hh³Nh´Nubj€)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hju'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjm'ubhŒ.”…”�”}”(hjm'h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³ji'h´Mhjj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjN'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³ji'h´MhjÙ&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hj½&ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hj¡'h]”hŒ Description”…”�”}”(hj£'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Mhj½&ubj )�”}”(hŒÏCompose the full-length key of the **node** into **buf**. Returns the total length of the key stored in **buf**. Or returns -EINVAL if **node** is NULL, and -ERANGE if the key depth is deeper than max depth.”h]”(hŒ#Compose the full-length key of the ”…”�”}”(hj·'h²hh³Nh´Nubj€)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hj¿'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·'ubhŒ into ”…”�”}”(hj·'h²hh³Nh´Nubj€)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjÑ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·'ubhŒ0. Returns the total length of the key stored in ”…”�”}”(hj·'h²hh³Nh´Nubj€)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjã'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·'ubhŒ. Or returns -EINVAL if ”…”�”}”(hj·'h²hh³Nh´Nubj€)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hjõ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·'ubhŒ@ is NULL, and -ERANGE if the key depth is deeper than max depth.”…”�”}”(hj·'h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:414: ./include/linux/bootconfig.h”h´Mhj½&ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)xbc_prepend_embedded_cmdline (C function)”Œc.xbc_prepend_embedded_cmdline”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒ:void xbc_prepend_embedded_cmdline (char *dst, size_t size)”h]”j )�”}”(hŒ9void xbc_prepend_embedded_cmdline(char *dst, size_t size)”h]”(j¨ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj.(h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hj*(h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KEubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=(h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj*(h²hh³j<(h´KEubjb )�”}”(hŒxbc_prepend_embedded_cmdline”h]”j# )�”}”(hŒxbc_prepend_embedded_cmdline”h]”hŒxbc_prepend_embedded_cmdline”…”�”}”(hjO(h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjK(ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hj*(h²hh³j<(h´KEubj} )�”}”(hŒ(char *dst, size_t size)”h]”(jƒ )�”}”(hŒ char *dst”h]”(j¨ )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjk(h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hjg(ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjy(h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjg(ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hj‡(h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hjg(ubj# )�”}”(hŒdst”h]”hŒdst”…”�”}”(hj”(h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjg(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hjc(ubjƒ )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j# )�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj°(h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj­(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”j²(Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”jI )�”}”j< jQ(sbŒc.xbc_prepend_embedded_cmdline”†”asbuh1hhj©(ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐ(h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj©(ubj# )�”}”(hŒsize”h]”hŒsize”…”�”}”(hjÞ(h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj©(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hjc(ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j| hj*(h²hh³j<(h´KEubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhj&(h²hh³j<(h´KEubah}”(h]”j!(ah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³j<(h´KEhj#(h²hubjO)�”}”(hhh]”j )�”}”(hŒ#Prepend embedded bootconfig cmdline”h]”hŒ#Prepend embedded bootconfig cmdline”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KEhj)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj#(h²hh³j<(h´KEubeh}”(h]”h ]”(j: Œfunction”eh"]”h$]”h&]”joj: jpj )jqj )jr‰js‰jt‰uh1j h²hhjì h³Nh´Nubjv)�”}”(hX**Parameters** ``char *dst`` cmdline buffer to prepend into (must already contain a NUL byte) ``size_t size`` total capacity of **dst** in bytes **Description** Prepend the build-time-rendered "kernel" subtree of the embedded bootconfig to **dst**. The rendered string already ends with a single space (the xbc_snprint_cmdline() invariant), which serves as the separator between the embedded keys and any existing content of **dst**. On overflow, log an error and leave **dst** untouched rather than silently truncating: booting without the embedded values is better than refusing to boot, and the error message tells the user why their embedded keys are missing. Intended to be called from setup_arch() before parse_early_param() so that early_param() handlers see the embedded values.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hj*)h]”hŒ Parameters”…”�”}”(hj,)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj()ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KIhj$)ubj–)�”}”(hhh]”(j›)�”}”(hŒO``char *dst`` cmdline buffer to prepend into (must already contain a NUL byte) ”h]”(j¡)�”}”(hŒ ``char *dst``”h]”j„)�”}”(hjI)h]”hŒ char *dst”…”�”}”(hjK)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjG)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KFhjC)ubj»)�”}”(hhh]”j )�”}”(hŒ@cmdline buffer to prepend into (must already contain a NUL byte)”h]”hŒ@cmdline buffer to prepend into (must already contain a NUL byte)”…”�”}”(hjb)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j^)h´KFhj_)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjC)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j^)h´KFhj@)ubj›)�”}”(hŒ3``size_t size`` total capacity of **dst** in bytes ”h]”(j¡)�”}”(hŒ``size_t size``”h]”j„)�”}”(hj‚)h]”hŒ size_t size”…”�”}”(hj„)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj€)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KGhj|)ubj»)�”}”(hhh]”j )�”}”(hŒ"total capacity of **dst** in bytes”h]”(hŒtotal capacity of ”…”�”}”(hj›)h²hh³Nh´Nubj€)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj£)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›)ubhŒ in bytes”…”�”}”(hj›)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j—)h´KGhj˜)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj|)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j—)h´KGhj@)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hj$)ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hjÏ)h]”hŒ Description”…”�”}”(hjÑ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KIhj$)ubj )�”}”(hXöPrepend the build-time-rendered "kernel" subtree of the embedded bootconfig to **dst**. The rendered string already ends with a single space (the xbc_snprint_cmdline() invariant), which serves as the separator between the embedded keys and any existing content of **dst**. On overflow, log an error and leave **dst** untouched rather than silently truncating: booting without the embedded values is better than refusing to boot, and the error message tells the user why their embedded keys are missing.”h]”(hŒSPrepend the build-time-rendered “kernelâ€� subtree of the embedded bootconfig to ”…”�”}”(hjå)h²hh³Nh´Nubj€)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjí)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjå)ubhŒ². The rendered string already ends with a single space (the xbc_snprint_cmdline() invariant), which serves as the separator between the embedded keys and any existing content of ”…”�”}”(hjå)h²hh³Nh´Nubj€)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjÿ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjå)ubhŒ&. On overflow, log an error and leave ”…”�”}”(hjå)h²hh³Nh´Nubj€)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjå)ubhŒº untouched rather than silently truncating: booting without the embedded values is better than refusing to boot, and the error message tells the user why their embedded keys are missing.”…”�”}”(hjå)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KHhj$)ubj )�”}”(hŒzIntended to be called from setup_arch() before parse_early_param() so that early_param() handlers see the embedded values.”h]”hŒzIntended to be called from setup_arch() before parse_early_param() so that early_param() handlers see the embedded values.”…”�”}”(hj**h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KQhj$)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)xbc_embedded_cmdline_applied (C function)”Œc.xbc_embedded_cmdline_applied”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒ(bool xbc_embedded_cmdline_applied (void)”h]”j )�”}”(hŒ'bool xbc_embedded_cmdline_applied(void)”h]”(j¨ )�”}”(hjah]”hŒbool”…”�”}”(hjY*h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hjU*h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KjubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg*h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjU*h²hh³jf*h´Kjubjb )�”}”(hŒxbc_embedded_cmdline_applied”h]”j# )�”}”(hŒxbc_embedded_cmdline_applied”h]”hŒxbc_embedded_cmdline_applied”…”�”}”(hjy*h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hju*ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hjU*h²hh³jf*h´Kjubj} )�”}”(hŒ(void)”h]”jƒ )�”}”(hŒvoid”h]”j¨ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj•*h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hj‘*ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hj�*ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j| hjU*h²hh³jf*h´Kjubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhjQ*h²hh³jf*h´Kjubah}”(h]”jL*ah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³jf*h´KjhjN*h²hubjO)�”}”(hhh]”j )�”}”(hŒ'Did the embedded cmdline get prepended?”h]”hŒ'Did the embedded cmdline get prepended?”…”�”}”(hj¿*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Kjhj¼*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjN*h²hh³jf*h´Kjubeh}”(h]”h ]”(j: Œfunction”eh"]”h$]”h&]”joj: jpj×*jqj×*jr‰js‰jt‰uh1j h²hhjì h³Nh´Nubjv)�”}”(hŒç**Parameters** ``void`` no arguments **Description** Return true if xbc_prepend_embedded_cmdline() actually prepended the embedded "kernel" subtree. setup_boot_config() uses this to avoid rendering the same keys a second time.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hjá*h]”hŒ Parameters”…”�”}”(hjã*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjß*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KnhjÛ*ubj–)�”}”(hhh]”j›)�”}”(hŒ``void`` no arguments ”h]”(j¡)�”}”(hŒ``void``”h]”j„)�”}”(hj+h]”hŒvoid”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjþ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Khjú*ubj»)�”}”(hhh]”j )�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j+h´Khj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjú*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j+h´Khj÷*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j•hjÛ*ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hj;+h]”hŒ Description”…”�”}”(hj=+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj9+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KhjÛ*ubj )�”}”(hŒ­Return true if xbc_prepend_embedded_cmdline() actually prepended the embedded "kernel" subtree. setup_boot_config() uses this to avoid rendering the same keys a second time.”h]”hŒ±Return true if xbc_prepend_embedded_cmdline() actually prepended the embedded “kernelâ€� subtree. setup_boot_config() uses this to avoid rendering the same keys a second time.”…”�”}”(hjQ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KkhjÛ*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)bootconfig_cmdline_requested (C function)”Œc.bootconfig_cmdline_requested”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒMbool bootconfig_cmdline_requested (const char *boot_cmdline, int *end_offset)”h]”j )�”}”(hŒLbool bootconfig_cmdline_requested(const char *boot_cmdline, int *end_offset)”h]”(j¨ )�”}”(hjah]”hŒbool”…”�”}”(hj€+h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hj|+h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´K€ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽ+h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj|+h²hh³j�+h´K€ubjb )�”}”(hŒbootconfig_cmdline_requested”h]”j# )�”}”(hŒbootconfig_cmdline_requested”h]”hŒbootconfig_cmdline_requested”…”�”}”(hj +h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjœ+ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hj|+h²hh³j�+h´K€ubj} )�”}”(hŒ+(const char *boot_cmdline, int *end_offset)”h]”(jƒ )�”}”(hŒconst char *boot_cmdline”h]”(j‰ )�”}”(hjŒ h]”hŒconst”…”�”}”(hj¼+h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hj¸+ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ+h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj¸+ubj¨ )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj×+h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hj¸+ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå+h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj¸+ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hjó+h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hj¸+ubj# )�”}”(hŒ boot_cmdline”h]”hŒ boot_cmdline”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj¸+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hj´+ubjƒ )�”}”(hŒint *end_offset”h]”(j¨ )�”}”(hŒint”h]”hŒint”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hj,ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj',h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj,ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hj5,h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hj,ubj# )�”}”(hŒ end_offset”h]”hŒ end_offset”…”�”}”(hjB,h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj,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´K€ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhjx+h²hh³j�+h´K€ubah}”(h]”js+ah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³j�+h´K€hju+h²hubjO)�”}”(hhh]”j )�”}”(hŒ'Was "bootconfig" passed on the cmdline?”h]”hŒ+Was “bootconfigâ€� passed on the cmdline?”…”�”}”(hjl,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´K€hji,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhju+h²hh³j�+h´K€ubeh}”(h]”h ]”(j: Œfunction”eh"]”h$]”h&]”joj: jpj„,jqj„,jr‰js‰jt‰uh1j h²hhjì h³Nh´Nubjv)�”}”(hXÜ**Parameters** ``const char *boot_cmdline`` kernel command line to inspect (not modified) ``int *end_offset`` if non-NULL, set to the offset of the init arguments that follow a "--" separator, or 0 when there is none **Description** Parse a private copy of **boot_cmdline** (parse_args() is destructive) and report whether "bootconfig" is present before the "--" separator. setup_arch() uses this to gate prepending the build-time embedded cmdline; setup_boot_config() uses it for the runtime opt-in and to locate the init arguments via **end_offset**. Sharing one parser keeps the early and late paths agreeing on what counts as opt-in. CONFIG_BOOT_CONFIG_FORCE is not folded in here; callers apply it where they need it.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hjŽ,h]”hŒ Parameters”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŒ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´K„hjˆ,ubj–)�”}”(hhh]”(j›)�”}”(hŒK``const char *boot_cmdline`` kernel command line to inspect (not modified) ”h]”(j¡)�”}”(hŒ``const char *boot_cmdline``”h]”j„)�”}”(hj­,h]”hŒconst char *boot_cmdline”…”�”}”(hj¯,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj«,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´K�hj§,ubj»)�”}”(hhh]”j )�”}”(hŒ-kernel command line to inspect (not modified)”h]”hŒ-kernel command line to inspect (not modified)”…”�”}”(hjÆ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jÂ,h´K�hjÃ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj§,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jÂ,h´K�hj¤,ubj›)�”}”(hŒ``int *end_offset`` if non-NULL, set to the offset of the init arguments that follow a "--" separator, or 0 when there is none ”h]”(j¡)�”}”(hŒ``int *end_offset``”h]”j„)�”}”(hjæ,h]”hŒint *end_offset”…”�”}”(hjè,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjä,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Kƒhjà,ubj»)�”}”(hhh]”j )�”}”(hŒjif non-NULL, set to the offset of the init arguments that follow a "--" separator, or 0 when there is none”h]”hŒnif non-NULL, set to the offset of the init arguments that follow a “--â€� separator, or 0 when there is none”…”�”}”(hjÿ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´K‚hjü,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjà,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jû,h´Kƒhj¤,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hjˆ,ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hj"-h]”hŒ Description”…”�”}”(hj$-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj -ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´K…hjˆ,ubj )�”}”(hXéParse a private copy of **boot_cmdline** (parse_args() is destructive) and report whether "bootconfig" is present before the "--" separator. setup_arch() uses this to gate prepending the build-time embedded cmdline; setup_boot_config() uses it for the runtime opt-in and to locate the init arguments via **end_offset**. Sharing one parser keeps the early and late paths agreeing on what counts as opt-in. CONFIG_BOOT_CONFIG_FORCE is not folded in here; callers apply it where they need it.”h]”(hŒParse a private copy of ”…”�”}”(hj8-h²hh³Nh´Nubj€)�”}”(hŒ**boot_cmdline**”h]”hŒ boot_cmdline”…”�”}”(hj@-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8-ubhX (parse_args() is destructive) and report whether “bootconfigâ€� is present before the “--â€� separator. setup_arch() uses this to gate prepending the build-time embedded cmdline; setup_boot_config() uses it for the runtime opt-in and to locate the init arguments via ”…”�”}”(hj8-h²hh³Nh´Nubj€)�”}”(hŒ**end_offset**”h]”hŒ end_offset”…”�”}”(hjR-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8-ubhŒ«. Sharing one parser keeps the early and late paths agreeing on what counts as opt-in. CONFIG_BOOT_CONFIG_FORCE is not folded in here; callers apply it where they need it.”…”�”}”(hj8-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´K„hjˆ,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œxbc_get_info (C function)”Œc.xbc_get_info”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒ4int xbc_get_info (int *node_size, size_t *data_size)”h]”j )�”}”(hŒ3int xbc_get_info(int *node_size, size_t *data_size)”h]”(j¨ )�”}”(hŒint”h]”hŒint”…”�”}”(hj‹-h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hj‡-h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KÔubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš-h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj‡-h²hh³j™-h´KÔubjb )�”}”(hŒ xbc_get_info”h]”j# )�”}”(hŒ xbc_get_info”h]”hŒ xbc_get_info”…”�”}”(hj¬-h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj¨-ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hj‡-h²hh³j™-h´KÔubj} )�”}”(hŒ#(int *node_size, size_t *data_size)”h]”(jƒ )�”}”(hŒint *node_size”h]”(j¨ )�”}”(hŒint”h]”hŒint”…”�”}”(hjÈ-h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hjÄ-ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖ-h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjÄ-ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hjä-h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hjÄ-ubj# )�”}”(hŒ node_size”h]”hŒ node_size”…”�”}”(hjñ-h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjÄ-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hjÀ-ubjƒ )�”}”(hŒsize_t *data_size”h]”(h)�”}”(hhh]”j# )�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj .h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj .ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”j.Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”jI )�”}”j< j®-sbŒc.xbc_get_info”†”asbuh1hhj.ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-.h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj.ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hj;.h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hj.ubj# )�”}”(hŒ data_size”h]”hŒ data_size”…”�”}”(hjH.h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj.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´KÔubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhjƒ-h²hh³j™-h´KÔubah}”(h]”j~-ah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³j™-h´KÔhj€-h²hubjO)�”}”(hhh]”j )�”}”(hŒ)Get the information of loaded boot config”h]”hŒ)Get the information of loaded boot config”…”�”}”(hjr.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KÔhjo.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj€-h²hh³j™-h´KÔubeh}”(h]”h ]”(j: Œfunction”eh"]”h$]”h&]”joj: jpjŠ.jqjŠ.jr‰js‰jt‰uh1j h²hhjì h³Nh´Nubjv)�”}”(hXk**Parameters** ``int *node_size`` A pointer to store the number of nodes. ``size_t *data_size`` A pointer to store the size of bootconfig data. **Description** Get the number of used nodes in **node_size** if it is not NULL, and the size of bootconfig data in **data_size** if it is not NULL. Return 0 if the boot config is initialized, or return -ENODEV.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hj”.h]”hŒ Parameters”…”�”}”(hj–.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KØhjŽ.ubj–)�”}”(hhh]”(j›)�”}”(hŒ;``int *node_size`` A pointer to store the number of nodes. ”h]”(j¡)�”}”(hŒ``int *node_size``”h]”j„)�”}”(hj³.h]”hŒint *node_size”…”�”}”(hjµ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj±.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KÕhj­.ubj»)�”}”(hhh]”j )�”}”(hŒ'A pointer to store the number of nodes.”h]”hŒ'A pointer to store the number of nodes.”…”�”}”(hjÌ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jÈ.h´KÕhjÉ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj­.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jÈ.h´KÕhjª.ubj›)�”}”(hŒF``size_t *data_size`` A pointer to store the size of bootconfig data. ”h]”(j¡)�”}”(hŒ``size_t *data_size``”h]”j„)�”}”(hjì.h]”hŒsize_t *data_size”…”�”}”(hjî.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjê.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KÖhjæ.ubj»)�”}”(hhh]”j )�”}”(hŒ/A pointer to store the size of bootconfig data.”h]”hŒ/A pointer to store the size of bootconfig data.”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j/h´KÖhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjæ.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j/h´KÖhjª.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hjŽ.ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hj'/h]”hŒ Description”…”�”}”(hj)/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KØhjŽ.ubj )�”}”(hŒÃGet the number of used nodes in **node_size** if it is not NULL, and the size of bootconfig data in **data_size** if it is not NULL. Return 0 if the boot config is initialized, or return -ENODEV.”h]”(hŒ Get the number of used nodes in ”…”�”}”(hj=/h²hh³Nh´Nubj€)�”}”(hŒ **node_size**”h]”hŒ node_size”…”�”}”(hjE/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=/ubhŒ7 if it is not NULL, and the size of bootconfig data in ”…”�”}”(hj=/h²hh³Nh´Nubj€)�”}”(hŒ **data_size**”h]”hŒ data_size”…”�”}”(hjW/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=/ubhŒR if it is not NULL. Return 0 if the boot config is initialized, or return -ENODEV.”…”�”}”(hj=/h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´K×hjŽ.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œxbc_root_node (C function)”Œc.xbc_root_node”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒ&struct xbc_node * xbc_root_node (void)”h]”j )�”}”(hŒ$struct xbc_node *xbc_root_node(void)”h]”(j‰ )�”}”(hjžh]”hŒstruct”…”�”}”(hj�/h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hjŒ/h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KñubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž/h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjŒ/h²hh³j�/h´Kñubh)�”}”(hhh]”j# )�”}”(hŒxbc_node”h]”hŒxbc_node”…”�”}”(hj¯/h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj¬/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”j±/Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”jI )�”}”j< Œ xbc_root_node”sbŒc.xbc_root_node”†”asbuh1hhjŒ/h²hh³j�/h´KñubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐ/h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjŒ/h²hh³j�/h´KñubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hjÞ/h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hjŒ/h²hh³j�/h´Kñubjb )�”}”(hŒ xbc_root_node”h]”j# )�”}”(hjÍ/h]”hŒ xbc_root_node”…”�”}”(hjï/h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjë/ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hjŒ/h²hh³j�/h´Kñubj} )�”}”(hŒ(void)”h]”jƒ )�”}”(hŒvoid”h]”j¨ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj 0h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hj0ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hj0ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j| hjŒ/h²hh³j�/h´Kñubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhjˆ/h²hh³j�/h´Kñubah}”(h]”jƒ/ah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³j�/h´Kñhj…/h²hubjO)�”}”(hhh]”j )�”}”(hŒ)Get the root node of extended boot config”h]”hŒ)Get the root node of extended boot config”…”�”}”(hj40h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Kñhj10h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj…/h²hh³j�/h´Kñubeh}”(h]”h ]”(j: Œfunction”eh"]”h$]”h&]”joj: jpjL0jqjL0jr‰js‰jt‰uh1j h²hhjì h³Nh´Nubjv)�”}”(hŒ¯**Parameters** ``void`` no arguments **Description** Return the address of root node of extended boot config. If the extended boot config is not initialized, return NULL.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hjV0h]”hŒ Parameters”…”�”}”(hjX0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjT0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KõhjP0ubj–)�”}”(hhh]”j›)�”}”(hŒ``void`` no arguments ”h]”(j¡)�”}”(hŒ``void``”h]”j„)�”}”(hju0h]”hŒvoid”…”�”}”(hjw0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjs0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Khjo0ubj»)�”}”(hhh]”j )�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjŽ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jŠ0h´Khj‹0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjo0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jŠ0h´Khjl0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j•hjP0ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hj°0h]”hŒ Description”…”�”}”(hj²0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KhjP0ubj )�”}”(hŒuReturn the address of root node of extended boot config. If the extended boot config is not initialized, return NULL.”h]”hŒuReturn the address of root node of extended boot config. If the extended boot config is not initialized, return NULL.”…”�”}”(hjÆ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KòhjP0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œxbc_node_index (C function)”Œc.xbc_node_index”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒ/uint16_t xbc_node_index (struct xbc_node *node)”h]”j )�”}”(hŒ.uint16_t xbc_node_index(struct xbc_node *node)”h]”(h)�”}”(hhh]”j# )�”}”(hŒuint16_t”h]”hŒuint16_t”…”�”}”(hjø0h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjõ0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”jú0Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”jI )�”}”j< Œxbc_node_index”sbŒc.xbc_node_index”†”asbuh1hhjñ0h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KÿubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjñ0h²hh³j1h´Kÿubjb )�”}”(hŒxbc_node_index”h]”j# )�”}”(hj1h]”hŒxbc_node_index”…”�”}”(hj,1h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj(1ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hjñ0h²hh³j1h´Kÿubj} )�”}”(hŒ(struct xbc_node *node)”h]”jƒ )�”}”(hŒstruct xbc_node *node”h]”(j‰ )�”}”(hjžh]”hŒstruct”…”�”}”(hjG1h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hjC1ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT1h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjC1ubh)�”}”(hhh]”j# )�”}”(hŒxbc_node”h]”hŒxbc_node”…”�”}”(hje1h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjb1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”jg1Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”j1Œc.xbc_node_index”†”asbuh1hhjC1ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ1h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjC1ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hj‘1h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hjC1ubj# )�”}”(hŒnode”h]”hŒnode”…”�”}”(hjž1h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjC1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hj?1ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j| hjñ0h²hh³j1h´Kÿubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhjí0h²hh³j1h´Kÿubah}”(h]”jè0ah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³j1h´Kÿhjê0h²hubjO)�”}”(hhh]”j )�”}”(hŒGet the index of XBC node”h]”hŒGet the index of XBC node”…”�”}”(hjÈ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´KÿhjÅ1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjê0h²hh³j1h´Kÿubeh}”(h]”h ]”(j: Œfunction”eh"]”h$]”h&]”joj: jpjà1jqjà1jr‰js‰jt‰uh1j h²hhjì h³Nh´Nubjv)�”}”(hŒ“**Parameters** ``struct xbc_node *node`` A target node of getting index. **Description** Return the index number of **node** in XBC node list.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hjê1h]”hŒ Parameters”…”�”}”(hjì1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjè1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Mhjä1ubj–)�”}”(hhh]”j›)�”}”(hŒ:``struct xbc_node *node`` A target node of getting index. ”h]”(j¡)�”}”(hŒ``struct xbc_node *node``”h]”j„)�”}”(hj 2h]”hŒstruct xbc_node *node”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Mhj2ubj»)�”}”(hhh]”j )�”}”(hŒA target node of getting index.”h]”hŒA target node of getting index.”…”�”}”(hj"2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j2h´Mhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j2h´Mhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j•hjä1ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hjD2h]”hŒ Description”…”�”}”(hjF2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjB2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Mhjä1ubj )�”}”(hŒ5Return the index number of **node** in XBC node list.”h]”(hŒReturn the index number of ”…”�”}”(hjZ2h²hh³Nh´Nubj€)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hjb2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZ2ubhŒ in XBC node list.”…”�”}”(hjZ2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Mhjä1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ xbc_node_get_parent (C function)”Œc.xbc_node_get_parent”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒ=struct xbc_node * xbc_node_get_parent (struct xbc_node *node)”h]”j )�”}”(hŒ;struct xbc_node *xbc_node_get_parent(struct xbc_node *node)”h]”(j‰ )�”}”(hjžh]”hŒstruct”…”�”}”(hj›2h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hj—2h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´M ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©2h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj—2h²hh³j¨2h´M ubh)�”}”(hhh]”j# )�”}”(hŒxbc_node”h]”hŒxbc_node”…”�”}”(hjº2h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj·2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”j¼2Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”jI )�”}”j< Œxbc_node_get_parent”sbŒc.xbc_node_get_parent”†”asbuh1hhj—2h²hh³j¨2h´M ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ2h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj—2h²hh³j¨2h´M ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hjé2h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hj—2h²hh³j¨2h´M ubjb )�”}”(hŒxbc_node_get_parent”h]”j# )�”}”(hjØ2h]”hŒxbc_node_get_parent”…”�”}”(hjú2h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjö2ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hj—2h²hh³j¨2h´M ubj} )�”}”(hŒ(struct xbc_node *node)”h]”jƒ )�”}”(hŒstruct xbc_node *node”h]”(j‰ )�”}”(hjžh]”hŒstruct”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hj3ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"3h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj3ubh)�”}”(hhh]”j# )�”}”(hŒxbc_node”h]”hŒxbc_node”…”�”}”(hj33h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj03ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”j53Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”jÖ2Œc.xbc_node_get_parent”†”asbuh1hhj3ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ3h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj3ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hj_3h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hj3ubj# )�”}”(hŒnode”h]”hŒnode”…”�”}”(hjl3h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hj 3ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j| hj—2h²hh³j¨2h´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhj“2h²hh³j¨2h´M ubah}”(h]”jŽ2ah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³j¨2h´M hj�2h²hubjO)�”}”(hhh]”j )�”}”(hŒGet the parent XBC node”h]”hŒGet the parent XBC node”…”�”}”(hj–3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´M hj“3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj�2h²hh³j¨2h´M ubeh}”(h]”h ]”(j: Œfunction”eh"]”h$]”h&]”joj: jpj®3jqj®3jr‰js‰jt‰uh1j h²hhjì h³Nh´Nubjv)�”}”(hŒ **Parameters** ``struct xbc_node *node`` An XBC node. **Description** Return the parent node of **node**. If the node is top node of the tree, return NULL.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hj¸3h]”hŒ Parameters”…”�”}”(hjº3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Mhj²3ubj–)�”}”(hhh]”j›)�”}”(hŒ'``struct xbc_node *node`` An XBC node. ”h]”(j¡)�”}”(hŒ``struct xbc_node *node``”h]”j„)�”}”(hj×3h]”hŒstruct xbc_node *node”…”�”}”(hjÙ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjÕ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´M hjÑ3ubj»)�”}”(hhh]”j )�”}”(hŒ An XBC node.”h]”hŒ An XBC node.”…”�”}”(hjð3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jì3h´M hjí3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjÑ3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jì3h´M hjÎ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j•hj²3ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hj4h]”hŒ Description”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´M hj²3ubj )�”}”(hŒUReturn the parent node of **node**. If the node is top node of the tree, return NULL.”h]”(hŒReturn the parent node of ”…”�”}”(hj(4h²hh³Nh´Nubj€)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hj04h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj(4ubhŒ3. If the node is top node of the tree, return NULL.”…”�”}”(hj(4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´M hj²3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œxbc_node_get_child (C function)”Œc.xbc_node_get_child”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒReturn the data (which is always a null terminated string) of ”…”�”}”(hj£9h²hh³Nh´Nubj€)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hj«9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£9ubhŒ5. If the node has invalid data, warn and return NULL.”…”�”}”(hj£9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´M2hj-9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!xbc_node_find_subkey (C function)”Œc.xbc_node_find_subkey”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒQstruct xbc_node * xbc_node_find_subkey (struct xbc_node *parent, const char *key)”h]”j )�”}”(hŒOstruct xbc_node *xbc_node_find_subkey(struct xbc_node *parent, const char *key)”h]”(j‰ )�”}”(hjžh]”hŒstruct”…”�”}”(hjä9h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hjà9h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´MTubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò9h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjà9h²hh³jñ9h´MTubh)�”}”(hhh]”j# )�”}”(hŒxbc_node”h]”hŒxbc_node”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”j:Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”jI )�”}”j< Œxbc_node_find_subkey”sbŒc.xbc_node_find_subkey”†”asbuh1hhjà9h²hh³jñ9h´MTubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$:h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjà9h²hh³jñ9h´MTubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hj2:h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hjà9h²hh³jñ9h´MTubjb )�”}”(hŒxbc_node_find_subkey”h]”j# )�”}”(hj!:h]”hŒxbc_node_find_subkey”…”�”}”(hjC:h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj?:ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hjà9h²hh³jñ9h´MTubj} )�”}”(hŒ*(struct xbc_node *parent, const char *key)”h]”(jƒ )�”}”(hŒstruct xbc_node *parent”h]”(j‰ )�”}”(hjžh]”hŒstruct”…”�”}”(hj^:h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hjZ:ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk:h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjZ:ubh)�”}”(hhh]”j# )�”}”(hŒxbc_node”h]”hŒxbc_node”…”�”}”(hj|:h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjy:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”j~:Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”j:Œc.xbc_node_find_subkey”†”asbuh1hhjZ:ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš:h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjZ:ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hj¨:h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hjZ:ubj# )�”}”(hŒparent”h]”hŒparent”…”�”}”(hjµ:h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjZ:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hjV:ubjƒ )�”}”(hŒconst char *key”h]”(j‰ )�”}”(hjŒ h]”hŒconst”…”�”}”(hjÎ:h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hjÊ:ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ:h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjÊ:ubj¨ )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjé:h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hjÊ:ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷:h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjÊ:ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hjÊ:ubj# )�”}”(hŒkey”h]”hŒkey”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjÊ:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hjV:ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j| hjà9h²hh³jñ9h´MTubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhjÜ9h²hh³jñ9h´MTubah}”(h]”j×9ah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³jñ9h´MThjÙ9h²hubjO)�”}”(hhh]”j )�”}”(hŒ*Find a subkey node which matches given key”h]”hŒ*Find a subkey node which matches given key”…”�”}”(hj<;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´MThj9;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjÙ9h²hh³jñ9h´MTubeh}”(h]”h ]”(j: Œfunction”eh"]”h$]”h&]”joj: jpjT;jqjT;jr‰js‰jt‰uh1j h²hhjì h³Nh´Nubjv)�”}”(hXE**Parameters** ``struct xbc_node *parent`` An XBC node. ``const char *key`` A key string. **Description** Search a key node under **parent** which matches **key**. The **key** can contain several words jointed with '.'. If **parent** is NULL, this searches the node from whole tree. Return NULL if no node is matched.”h]”(•j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hj^;h]”hŒ Parameters”…”�”}”(hj`;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´MXhjX;ubj–)�”}”(hhh]”(j›)�”}”(hŒ)``struct xbc_node *parent`` An XBC node. ”h]”(j¡)�”}”(hŒ``struct xbc_node *parent``”h]”j„)�”}”(hj};h]”hŒstruct xbc_node *parent”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj{;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´MUhjw;ubj»)�”}”(hhh]”j )�”}”(hŒ An XBC node.”h]”hŒ An XBC node.”…”�”}”(hj–;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j’;h´MUhj“;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjw;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j’;h´MUhjt;ubj›)�”}”(hŒ"``const char *key`` A key string. ”h]”(j¡)�”}”(hŒ``const char *key``”h]”j„)�”}”(hj¶;h]”hŒconst char *key”…”�”}”(hj¸;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj´;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´MVhj°;ubj»)�”}”(hhh]”j )�”}”(hŒ A key string.”h]”hŒ A key string.”…”�”}”(hjÏ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jË;h´MVhjÌ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj°;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jË;h´MVhjt;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hjX;ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hjñ;h]”hŒ Description”…”�”}”(hjó;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjï;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´MXhjX;ubj )�”}”(hŒÓSearch a key node under **parent** which matches **key**. The **key** can contain several words jointed with '.'. If **parent** is NULL, this searches the node from whole tree. Return NULL if no node is matched.”h]”(hŒSearch a key node under ”…”�”}”(hj<h²hh³Nh´Nubj€)�”}”(hŒ **parent**”h]”hŒparent”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj<ubhŒ which matches ”…”�”}”(hj<h²hh³Nh´Nubj€)�”}”(hŒ**key**”h]”hŒkey”…”�”}”(hj!<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj<ubhŒ. The ”…”�”}”(hj<h²hh³Nh´Nubj€)�”}”(hŒ**key**”h]”hŒkey”…”�”}”(hj3<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj<ubhŒ4 can contain several words jointed with ‘.’. If ”…”�”}”(hj<h²hh³Nh´Nubj€)�”}”(hŒ **parent**”h]”hŒparent”…”�”}”(hjE<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj<ubhŒT is NULL, this searches the node from whole tree. Return NULL if no node is matched.”…”�”}”(hj<h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´MWhjX;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ xbc_node_find_value (C function)”Œc.xbc_node_find_value”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒdconst char * xbc_node_find_value (struct xbc_node *parent, const char *key, struct xbc_node **vnode)”h]”j )�”}”(hŒbconst char *xbc_node_find_value(struct xbc_node *parent, const char *key, struct xbc_node **vnode)”h]”(j‰ )�”}”(hjŒ h]”hŒconst”…”�”}”(hj~<h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hjz<h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´MsubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ<h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjz<h²hh³j‹<h´Msubj¨ )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjš<h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hjz<h²hh³j‹<h´MsubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨<h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjz<h²hh³j‹<h´MsubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hj¶<h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hjz<h²hh³j‹<h´Msubjb )�”}”(hŒxbc_node_find_value”h]”j# )�”}”(hŒxbc_node_find_value”h]”hŒxbc_node_find_value”…”�”}”(hjÇ<h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjÃ<ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hjz<h²hh³j‹<h´Msubj} )�”}”(hŒC(struct xbc_node *parent, const char *key, struct xbc_node **vnode)”h]”(jƒ )�”}”(hŒstruct xbc_node *parent”h]”(j‰ )�”}”(hjžh]”hŒstruct”…”�”}”(hjã<h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hjß<ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð<h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjß<ubh)�”}”(hhh]”j# )�”}”(hŒxbc_node”h]”hŒxbc_node”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjþ<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”j=Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”jI )�”}”j< jÉ<sbŒc.xbc_node_find_value”†”asbuh1hhjß<ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!=h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjß<ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hj/=h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hjß<ubj# )�”}”(hŒparent”h]”hŒparent”…”�”}”(hj<=h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjß<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hjÛ<ubjƒ )�”}”(hŒconst char *key”h]”(j‰ )�”}”(hjŒ h]”hŒconst”…”�”}”(hjU=h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hjQ=ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb=h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjQ=ubj¨ )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjp=h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hjQ=ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~=h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjQ=ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hjŒ=h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hjQ=ubj# )�”}”(hŒkey”h]”hŒkey”…”�”}”(hj™=h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjQ=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hjÛ<ubjƒ )�”}”(hŒstruct xbc_node **vnode”h]”(j‰ )�”}”(hjžh]”hŒstruct”…”�”}”(hj²=h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hj®=ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿=h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj®=ubh)�”}”(hhh]”j# )�”}”(hŒxbc_node”h]”hŒxbc_node”…”�”}”(hjÐ=h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjÍ=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”jÒ=Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”j=Œc.xbc_node_find_value”†”asbuh1hhj®=ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî=h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj®=ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hjü=h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hj®=ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hj >h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hj®=ubj# )�”}”(hŒvnode”h]”hŒvnode”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj®=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hjÛ<ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j| hjz<h²hh³j‹<h´Msubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj@ˆuh1j jAjBhjv<h²hh³j‹<h´Msubah}”(h]”jq<ah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³j‹<h´Mshjs<h²hubjO)�”}”(hhh]”j )�”}”(hŒ)Find a value node which matches given key”h]”hŒ)Find a value node which matches given key”…”�”}”(hj@>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Mshj=>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjs<h²hh³j‹<h´Msubeh}”(h]”h ]”(j: Œfunction”eh"]”h$]”h&]”joj: jpjX>jqjX>jr‰js‰jt‰uh1j h²hhjì h³Nh´Nubjv)�”}”(hX²**Parameters** ``struct xbc_node *parent`` An XBC node. ``const char *key`` A key string. ``struct xbc_node **vnode`` A container pointer of found XBC node. **Description** Search a value node under **parent** whose (parent) key node matches **key**, store it in ***vnode**, and returns the value string. The **key** can contain several words jointed with '.'. If **parent** is NULL, this searches the node from whole tree. Return the value string if a matched key found, return NULL if no node is matched. Note that this returns 0-length string and stores NULL in ***vnode** if the key has no value. And also it will return the value of the first entry if the value is an array.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hjb>h]”hŒ Parameters”…”�”}”(hjd>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Mwhj\>ubj–)�”}”(hhh]”(j›)�”}”(hŒ)``struct xbc_node *parent`` An XBC node. ”h]”(j¡)�”}”(hŒ``struct xbc_node *parent``”h]”j„)�”}”(hj�>h]”hŒstruct xbc_node *parent”…”�”}”(hjƒ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Mthj{>ubj»)�”}”(hhh]”j )�”}”(hŒ An XBC node.”h]”hŒ An XBC node.”…”�”}”(hjš>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j–>h´Mthj—>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj{>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j–>h´Mthjx>ubj›)�”}”(hŒ"``const char *key`` A key string. ”h]”(j¡)�”}”(hŒ``const char *key``”h]”j„)�”}”(hjº>h]”hŒconst char *key”…”�”}”(hj¼>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj¸>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Muhj´>ubj»)�”}”(hhh]”j )�”}”(hŒ A key string.”h]”hŒ A key string.”…”�”}”(hjÓ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jÏ>h´MuhjÐ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj´>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jÏ>h´Muhjx>ubj›)�”}”(hŒC``struct xbc_node **vnode`` A container pointer of found XBC node. ”h]”(j¡)�”}”(hŒ``struct xbc_node **vnode``”h]”j„)�”}”(hjó>h]”hŒstruct xbc_node **vnode”…”�”}”(hjõ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjñ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Mvhjí>ubj»)�”}”(hhh]”j )�”}”(hŒ&A container pointer of found XBC node.”h]”hŒ&A container pointer of found XBC node.”…”�”}”(hj ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j?h´Mvhj ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjí>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j?h´Mvhjx>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hj\>ubj )�”}”(hŒ**Description**”h]”j€)�”}”(hj.?h]”hŒ Description”…”�”}”(hj0?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Mxhj\>ubj )�”}”(hXúSearch a value node under **parent** whose (parent) key node matches **key**, store it in ***vnode**, and returns the value string. The **key** can contain several words jointed with '.'. If **parent** is NULL, this searches the node from whole tree. Return the value string if a matched key found, return NULL if no node is matched. Note that this returns 0-length string and stores NULL in ***vnode** if the key has no value. And also it will return the value of the first entry if the value is an array.”h]”(hŒSearch a value node under ”…”�”}”(hjD?h²hh³Nh´Nubj€)�”}”(hŒ **parent**”h]”hŒparent”…”�”}”(hjL?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjD?ubhŒ! whose (parent) key node matches ”…”�”}”(hjD?h²hh³Nh´Nubj€)�”}”(hŒ**key**”h]”hŒkey”…”�”}”(hj^?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjD?ubhŒ, store it in ”…”�”}”(hjD?h²hh³Nh´Nubj€)�”}”(hŒ ***vnode**”h]”hŒ*vnode”…”�”}”(hjp?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjD?ubhŒ$, and returns the value string. The ”…”�”}”(hjD?h²hh³Nh´Nubj€)�”}”(hŒ**key**”h]”hŒkey”…”�”}”(hj‚?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjD?ubhŒ4 can contain several words jointed with ‘.’. If ”…”�”}”(hjD?h²hh³Nh´Nubj€)�”}”(hŒ **parent**”h]”hŒparent”…”�”}”(hj”?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjD?ubhŒ¿ is NULL, this searches the node from whole tree. Return the value string if a matched key found, return NULL if no node is matched. Note that this returns 0-length string and stores NULL in ”…”�”}”(hjD?h²hh³Nh´Nubj€)�”}”(hŒ ***vnode**”h]”hŒ*vnode”…”�”}”(hj¦?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjD?ubhŒh if the key has no value. And also it will return the value of the first entry if the value is an array.”…”�”}”(hjD?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Mwhj\>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubjþ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'xbc_node_compose_key_after (C function)”Œc.xbc_node_compose_key_after”hNt”auh1jý hjì h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒeint xbc_node_compose_key_after (struct xbc_node *root, struct xbc_node *node, char *buf, size_t size)”h]”j )�”}”(hŒdint xbc_node_compose_key_after(struct xbc_node *root, struct xbc_node *node, char *buf, size_t size)”h]”(j¨ )�”}”(hŒint”h]”hŒint”…”�”}”(hjß?h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hjÛ?h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´M•ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî?h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjÛ?h²hh³jí?h´M•ubjb )�”}”(hŒxbc_node_compose_key_after”h]”j# )�”}”(hŒxbc_node_compose_key_after”h]”hŒxbc_node_compose_key_after”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjü?ubah}”(h]”h ]”(jw jx eh"]”h$]”h&]”hÅhÆuh1ja hjÛ?h²hh³jí?h´M•ubj} )�”}”(hŒF(struct xbc_node *root, struct xbc_node *node, char *buf, size_t size)”h]”(jƒ )�”}”(hŒstruct xbc_node *root”h]”(j‰ )�”}”(hjžh]”hŒstruct”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hj@ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)@h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj@ubh)�”}”(hhh]”j# )�”}”(hŒxbc_node”h]”hŒxbc_node”…”�”}”(hj:@h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj7@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”j<@Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”jI )�”}”j< j@sbŒc.xbc_node_compose_key_after”†”asbuh1hhj@ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ@h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hj@ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hjh@h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hj@ubj# )�”}”(hŒroot”h]”hŒroot”…”�”}”(hju@h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hj@ubjƒ )�”}”(hŒstruct xbc_node *node”h]”(j‰ )�”}”(hjžh]”hŒstruct”…”�”}”(hjŽ@h²hh³Nh´Nubah}”(h]”h ]”j• ah"]”h$]”h&]”uh1jˆ hjŠ@ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›@h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjŠ@ubh)�”}”(hhh]”j# )�”}”(hŒxbc_node”h]”hŒxbc_node”…”�”}”(hj¬@h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj©@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”j®@Œmodname”NŒ classname”Nj@ jC )�”}”jF ]”jV@Œc.xbc_node_compose_key_after”†”asbuh1hhjŠ@ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ@h²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjŠ@ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hjØ@h²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hjŠ@ubj# )�”}”(hŒnode”h]”hŒnode”…”�”}”(hjå@h²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjŠ@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hj@ubjƒ )�”}”(hŒ char *buf”h]”(j¨ )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjþ@h²hh³Nh´Nubah}”(h]”h ]”j´ ah"]”h$]”h&]”uh1j§ hjú@ubjQ )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”j] ah"]”h$]”h&]”uh1jP hjú@ubjÇ )�”}”(hjÊ h]”hŒ*”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jÓ ah"]”h$]”h&]”uh1jÆ hjú@ubj# )�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj'Ah²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hjú@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j‚ hj@ubjƒ )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j# )�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjCAh²hh³Nh´Nubah}”(h]”h ]”j/ ah"]”h$]”h&]”uh1j" hj@Aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j: Œreftype”j< Œ reftarget”jEAŒmodname”NŒ classname”Nj@ jC )�”}”jF ]”jV@Œc.xbc_node_compose_key_after”†”asbuh1hhjMah ]”(jFjGeh"]”h$]”h&]”jKˆjL)jMhuh1j h³jYMh´Myhj@Mh²hubjO)�”}”(hhh]”j )�”}”(hŒ0Parse given XBC file and build XBC internal tree”h]”hŒ0Parse given XBC file and build XBC internal tree”…”�”}”(hjìNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´MyhjéNh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj@Mh²hh³jYMh´Myubeh}”(h]”h ]”(j: Œfunction”eh"]”h$]”h&]”joj: jpjOjqjOjr‰js‰jt‰uh1j h²hhjì h³Nh´Nubjv)�”}”(hX‘**Parameters** ``const char *data`` The boot config text original data ``size_t size`` The size of **data** ``const char **emsg`` A pointer of const char * to store the error message ``int *epos`` A pointer of int to store the error position **Description** This parses the boot config text in **data**. **size** must be smaller than XBC_DATA_MAX. Return the number of stored nodes (>0) if succeeded, or -errno if there is any error. In error cases, **emsg** will be updated with an error message and **epos** will be updated with the error position which is the byte offset of **buf**. If the error is not a parser error, **epos** will be -1.”h]”(j )�”}”(hŒ**Parameters**”h]”j€)�”}”(hjOh]”hŒ Parameters”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Oubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´M}hjOubj–)�”}”(hhh]”(j›)�”}”(hŒ8``const char *data`` The boot config text original data ”h]”(j¡)�”}”(hŒ``const char *data``”h]”j„)�”}”(hj-Oh]”hŒconst char *data”…”�”}”(hj/Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj+Oubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´Mzhj'Oubj»)�”}”(hhh]”j )�”}”(hŒ"The boot config text original data”h]”hŒ"The boot config text original data”…”�”}”(hjFOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jBOh´MzhjCOubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj'Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jBOh´Mzhj$Oubj›)�”}”(hŒ%``size_t size`` The size of **data** ”h]”(j¡)�”}”(hŒ``size_t size``”h]”j„)�”}”(hjfOh]”hŒ size_t size”…”�”}”(hjhOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjdOubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´M{hj`Oubj»)�”}”(hhh]”j )�”}”(hŒThe size of **data**”h]”(hŒ The size of ”…”�”}”(hjOh²hh³Nh´Nubj€)�”}”(hŒ**data**”h]”hŒdata”…”�”}”(hj‡Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j{Oh´M{hj|Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj`Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³j{Oh´M{hj$Oubj›)�”}”(hŒK``const char **emsg`` A pointer of const char * to store the error message ”h]”(j¡)�”}”(hŒ``const char **emsg``”h]”j„)�”}”(hj­Oh]”hŒconst char **emsg”…”�”}”(hj¯Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj«Oubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´M|hj§Oubj»)�”}”(hhh]”j )�”}”(hŒ4A pointer of const char * to store the error message”h]”hŒ4A pointer of const char * to store the error message”…”�”}”(hjÆOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jÂOh´M|hjÃOubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj§Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jÂOh´M|hj$Oubj›)�”}”(hŒ;``int *epos`` A pointer of int to store the error position ”h]”(j¡)�”}”(hŒ ``int *epos``”h]”j„)�”}”(hjæOh]”hŒ int *epos”…”�”}”(hjèOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjäOubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´M}hjàOubj»)�”}”(hhh]”j )�”}”(hŒ,A pointer of int to store the error position”h]”hŒ,A pointer of int to store the error position”…”�”}”(hjÿOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jûOh´M}hjüOubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjàOubeh}”(h]”h ]”h"]”h$]”h&]”uh1jšh³jûOh´M}hj$Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•hjOubj )�”}”(hŒ**Description**”h]”j€)�”}”(hj!Ph]”hŒ Description”…”�”}”(hj#Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´MhjOubj )�”}”(hX�This parses the boot config text in **data**. **size** must be smaller than XBC_DATA_MAX. Return the number of stored nodes (>0) if succeeded, or -errno if there is any error. In error cases, **emsg** will be updated with an error message and **epos** will be updated with the error position which is the byte offset of **buf**. If the error is not a parser error, **epos** will be -1.”h]”(hŒ$This parses the boot config text in ”…”�”}”(hj7Ph²hh³Nh´Nubj€)�”}”(hŒ**data**”h]”hŒdata”…”�”}”(hj?Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj7PubhŒ. ”…”�”}”(hj7Ph²hh³Nh´Nubj€)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjQPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj7PubhŒŠ must be smaller than XBC_DATA_MAX. Return the number of stored nodes (>0) if succeeded, or -errno if there is any error. In error cases, ”…”�”}”(hj7Ph²hh³Nh´Nubj€)�”}”(hŒ**emsg**”h]”hŒemsg”…”�”}”(hjcPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj7PubhŒ+ will be updated with an error message and ”…”�”}”(hj7Ph²hh³Nh´Nubj€)�”}”(hŒ**epos**”h]”hŒepos”…”�”}”(hjuPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj7PubhŒE will be updated with the error position which is the byte offset of ”…”�”}”(hj7Ph²hh³Nh´Nubj€)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hj‡Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj7PubhŒ&. If the error is not a parser error, ”…”�”}”(hj7Ph²hh³Nh´Nubj€)�”}”(hŒ**epos**”h]”hŒepos”…”�”}”(hj™Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj7PubhŒ will be -1.”…”�”}”(hj7Ph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³ŒX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:415: ./lib/bootconfig.c”h´M~hjOubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1juhjì h²hh³Nh´Nubeh}”(h]”Œfunctions-and-structures”ah ]”h"]”Œfunctions and structures”ah$]”h&]”uh1hÖhhØh²hh³hÇh´Mœubeh}”(h]”(Œboot-configuration”hÕeh ]”h"]”(Œboot configuration”Œ bootconfig”eh$]”h&]”uh1hÖhhh²hh³hÇh´KŒexpect_referenced_by_name”}”jÇPhÊsŒexpect_referenced_by_id”}”hÕhÊsubeh}”(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ñPŒ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”}”hÕ]”hÊasŒnameids”}”(jÇPhÕjÆPjÃPjgjdj…j‚jcj`jìjéj}jzjºj·jp jm jâjßjsjpjh je j` j] j9 j6 j` j] jé jæ j¾Pj»PuŒ nametypes”}”(jÇPˆjÆP‰jg‰j…‰jc‰jì‰j}‰jº‰jp ‰jâ‰js‰jh ‰j` ‰j9 ‰j` ‰jé ‰j¾P‰uh}”(hÕhØjÃPhØjdjCj‚jjj`jëjéjfjzjïj·jˆjm j½jßjÜjpjåje jvj] jµ j6 js j] j< •§jæ jc j»Pjì j j jRjWjæjëjxj}j jjœj¡jj#jÙjÞj¹j¾jjj‰jŽj j j1"j6"jã#jè#jJ%jO%j!(j&(jL*jQ*js+jx+j~-jƒ-jƒ/jˆ/jè0jí0jŽ2j“2j\4ja4j*6j/6j8j!8j×9jÜ9jq<jv<jÒ?j×?jâCjçCj}Fj‚FjIjIjûKjLj>MjCMuŒ 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”]”hŒsystem_message”“”)�”}”(hhh]”j )�”}”(hhh]”hŒ0Hyperlink target "bootconfig" is not referenced.”…”�”}”hj[Qsbah}”(h]”h ]”h"]”h$]”h&]”uh1j hjXQubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1jVQubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.