sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget*/translations/zh_CN/admin-guide/bootconfigmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/zh_TW/admin-guide/bootconfigmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/it_IT/admin-guide/bootconfigmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ja_JP/admin-guide/bootconfigmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ko_KR/admin-guide/bootconfigmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/pt_BR/admin-guide/bootconfigmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/sp_SP/admin-guide/bootconfigmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhD/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig.rsthKubhtarget)}(h.. _bootconfig:h]h}(h]h ]h"]h$]h&]refid bootconfiguh1hhKhhhhhhubhsection)}(hhh](htitle)}(hBoot Configurationh]hBoot Configuration}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh field_list)}(hhh]hfield)}(hhh](h field_name)}(hAuthorh]hAuthor}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h'Masami Hiramatsu h]h paragraph)}(h&Masami Hiramatsu h](hMasami Hiramatsu <}(hj hhhNhNubh reference)}(hmhiramat@kernel.orgh]hmhiramat@kernel.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:mhiramat@kernel.orguh1jhj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhK hjubah}(h]h ]h"]h$]h&]uh1jhhubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hOverviewh]hOverview}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChhhhhK ubj )}(hThe 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]hThe 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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKhjChhubeh}(h]overviewah ]h"]overviewah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hConfig File Syntaxh]hConfig File Syntax}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhhhhhKubj )}(hThe 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](hThe boot config syntax is a simple structured key-value. Each key consists of dot-connected-words, and key and value are connected by }(hj{hhhNhNubhliteral)}(h``=``h]h=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubhT. The value string has to be terminated by the following delimiters described below.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhKhjjhhubj )}(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 (}(hjhhhNhNubj)}(h``-``h]h-}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) or underscore (}(hjhhhNhNubj)}(h``_``h]h_}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhi). And each value only contains printable characters or spaces except for delimiters such as semi-colon (}(hjhhhNhNubj)}(h``;``h]h;}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ), new-line (}(hjhhhNhNubj)}(h``\n``h]h\n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ), comma (}(hjhhhNhNubj)}(h``,``h]h,}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ), hash (}(hjhhhNhNubj)}(h``#``h]h#}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) and closing brace (}(hjhhhNhNubj)}(h``}``h]h}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhKhjjhhubj )}(hiIf the ``=`` is followed by whitespace up to one of these delimiters, the key is assigned an empty value.h](hIf the }(hj)hhhNhNubj)}(h``=``h]h=}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh] is followed by whitespace up to one of these delimiters, the key is assigned an empty value.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhKhjjhhubj )}(hFor 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 (}(hjIhhhNhNubj)}(h``,``h]h,}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh8) separated, and comments and line breaks with newline (}(hjIhhhNhNubj)}(h``\n``h]h\n}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh{) are allowed between array values for readability. Thus the first entry of the array must be on the same line as the key.:}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhK!hjjhhubh literal_block)}(h)KEY[.WORD[...]] = VALUE[, VALUE2[...]][;]h]h)KEY[.WORD[...]] = VALUE[, VALUE2[...]][;]}hj}sbah}(h]h ]h"]h$]h&]hhuh1j{hhhK&hjjhhubj )}(hlUnlike the kernel command line syntax, white spaces (including tabs) are ignored around the comma and ``=``.h](hfUnlike the kernel command line syntax, white spaces (including tabs) are ignored around the comma and }(hjhhhNhNubj)}(h``=``h]h=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhK(hjjhhubj )}(hIf 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](hSIf you want to use those delimiters in a value, you can use either double- quotes (}(hjhhhNhNubj)}(h ``"VALUE"``h]h"VALUE"}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) or single-quotes (}(hjhhhNhNubj)}(h ``'VALUE'``h]h'VALUE'}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh9) to quote it. Note that you can not escape these quotes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhK+hjjhhubj )}(hThere 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]hThere 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).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhK/hjjhhubh)}(hhh](h)}(hKey-Value Syntaxh]hKey-Value Syntax}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK3ubj )}(haThe 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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhK5hjhhubj|)}(h.foo.bar.baz = value1 foo.bar.qux.quux = value2h]h.foo.bar.baz = value1 foo.bar.qux.quux = value2}hj sbah}(h]h ]h"]h$]h&]hhuh1j{hhhK8hjhhubj )}(hThese can be written also in::h]hThese can be written also in:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhK;hjhhubj|)}(h0foo.bar { baz = value1 qux.quux = value2 }h]h0foo.bar { baz = value1 qux.quux = value2 }}hj&sbah}(h]h ]h"]h$]h&]hhuh1j{hhhK=hjhhubj )}(h'Or more shorter, written as following::h]h&Or more shorter, written as following:}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKBhjhhubj|)}(h+foo.bar { baz = value1; qux.quux = value2 }h]h+foo.bar { baz = value1; qux.quux = value2 }}hjBsbah}(h]h ]h"]h$]h&]hhuh1j{hhhKDhjhhubj )}(hIn both styles, same key words are automatically merged when parsing it at boot time. So you can append similar trees or key-values.h]hIn both styles, same key words are automatically merged when parsing it at boot time. So you can append similar trees or key-values.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKFhjhhubeh}(h]key-value-syntaxah ]h"]key-value syntaxah$]h&]uh1hhjjhhhhhK3ubh)}(hhh](h)}(hSame-key Valuesh]hSame-key Values}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhhhhhKJubj )}(hSIt is prohibited that two or more values or arrays share a same-key. For example,::h]hRIt is prohibited that two or more values or arrays share a same-key. For example,:}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKLhjfhhubj|)}(hAfoo = bar, baz foo = qux # !ERROR! we can not re-define same keyh]hAfoo = bar, baz foo = qux # !ERROR! we can not re-define same key}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhKOhjfhhubj )}(hdIf you want to update the value, you must use the override operator ``:=`` explicitly. For example::h](hDIf you want to update the value, you must use the override operator }(hjhhhNhNubj)}(h``:=``h]h:=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh explicitly. For example:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhKRhjfhhubj|)}(hfoo = bar, baz foo := quxh]hfoo = bar, baz foo := qux}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhKUhjfhhubj )}(hthen, 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 }(hjhhhNhNubj)}(h``qux``h]hqux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is assigned to }(hjhhhNhNubj)}(h``foo``h]hfoo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh key. This is useful for overriding the default value by adding (partial) custom bootconfigs without parsing the default bootconfig.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhKXhjfhhubj )}(hnIf you want to append the value to existing key as an array member, you can use ``+=`` operator. For example::h](hPIf you want to append the value to existing key as an array member, you can use }(hjhhhNhNubj)}(h``+=``h]h+=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh operator. For example:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhK\hjfhhubj|)}(hfoo = bar, baz foo += quxh]hfoo = bar, baz foo += qux}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhK_hjfhhubj )}(h?In this case, the key ``foo`` has ``bar``, ``baz`` and ``qux``.h](hIn this case, the key }(hj!hhhNhNubj)}(h``foo``h]hfoo}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh has }(hj!hhhNhNubj)}(h``bar``h]hbar}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh, }(hj!hhhNhNubj)}(h``baz``h]hbaz}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh and }(hj!hhhNhNubj)}(h``qux``h]hqux}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhKbhjfhhubj )}(hjMoreover, sub-keys and a value can coexist under a parent key. For example, following config is allowed.::h]hiMoreover, sub-keys and a value can coexist under a parent key. For example, following config is allowed.:}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKdhjfhhubj|)}(hKfoo = value1 foo.bar = value2 foo := value3 # This will update foo's value.h]hKfoo = value1 foo.bar = value2 foo := value3 # This will update foo's value.}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhKghjfhhubj )}(hNote, 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]hNote, 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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKkhjfhhubj|)}(hRfoo { bar = value1 bar { baz = value2 qux = value3 } }h]hRfoo { bar = value1 bar { baz = value2 qux = value3 } }}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhKnhjfhhubj )}(hAlso, 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]hAlso, 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.:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKvhjfhhubj|)}(hfoo.bar = value1 foo = value2h]hfoo.bar = value1 foo = value2}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhKzhjfhhubj )}(hBIn the program (and /proc/bootconfig), it will be shown as below::h]hAIn the program (and /proc/bootconfig), it will be shown as below:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhK}hjfhhubj|)}(hfoo = value2 foo.bar = value1h]hfoo = value2 foo.bar = value1}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhKhjfhhubeh}(h]same-key-valuesah ]h"]same-key valuesah$]h&]uh1hhjjhhhhhKJubh)}(hhh](h)}(hCommentsh]hComments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubj )}(hThe config syntax accepts shell-script style comments. The comments starting with hash ("#") until newline ("\n") will be ignored.h]hThe config syntax accepts shell-script style comments. The comments starting with hash (“#”) until newline (”n”) will be ignored.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj|)}(hv# comment line foo = value # value is set to foo. bar = 1, # 1st element 2, # 2nd element 3 # 3rd elementh]hv# 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&]hhuh1j{hhhKhjhhubj )}(hThis is parsed as below::h]hThis is parsed as below:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj|)}(hfoo = value bar = 1, 2, 3h]hfoo = value bar = 1, 2, 3}hj*sbah}(h]h ]h"]h$]h&]hhuh1j{hhhKhjhhubj )}(hNote that you can NOT put a comment or a newline between value and delimiter (``,`` or ``;``). This means following config has a syntax error ::h](hNNote that you can NOT put a comment or a newline between value and delimiter (}(hj8hhhNhNubj)}(h``,``h]h,}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh or }(hj8hhhNhNubj)}(h``;``h]h;}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh1). This means following config has a syntax error}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj|)}(hkey = 1 # comment ,2h]hkey = 1 # comment ,2}hjjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhKhjhhubeh}(h]commentsah ]h"]commentsah$]h&]uh1hhjjhhhhhKubeh}(h]config-file-syntaxah ]h"]config file syntaxah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h/proc/bootconfigh]h/proc/bootconfig}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubj )}(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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj|)}(h(KEY[.WORDS...] = "[VALUE]"[,"VALUE2"...]h]h(KEY[.WORDS...] = "[VALUE]"[,"VALUE2"...]}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhKhjhhubeh}(h]proc-bootconfigah ]h"]/proc/bootconfigah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hBoot Kernel With a Boot Configh]hBoot Kernel With a Boot Config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubj )}(hThere are two options to boot the kernel with bootconfig: attaching the bootconfig to the initrd image or embedding it in the kernel itself.h]hThere are two options to boot the kernel with bootconfig: attaching the bootconfig to the initrd image or embedding it in the kernel itself.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKhjhhubh)}(hhh](h)}(h!Attaching a Boot Config to Initrdh]h!Attaching a Boot Config to Initrd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubj )}(hSince 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]hSince 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj )}(hH[initrd][bootconfig][padding][size(le32)][checksum(le32)][#BOOTCONFIG\n]h]hH[initrd][bootconfig][padding][size(le32)][checksum(le32)][#BOOTCONFIGn]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj )}(hDThe size and checksum fields are unsigned 32bit little endian value.h]hDThe size and checksum fields are unsigned 32bit little endian value.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj )}(hWhen 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](hWhen the boot configuration is added to the initrd image, the total file size is aligned to 4 bytes. To fill the gap, null characters (}(hjhhhNhNubj)}(h``\0``h]h\0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) will be added. Thus the }(hjhhhNhNubj)}(h``size``h]hsize}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh6 is the length of the bootconfig file + padding bytes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj )}(hXThe 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]hXThe 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.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj )}(hTo 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 }(hjWhhhNhNubj)}(h``bootconfig``h]h bootconfig}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh 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:}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj|)}(h# make -C tools/bootconfigh]h# make -C tools/bootconfig}hjwsbah}(h]h ]h"]h$]h&]hhuh1j{hhhKhjhhubj )}(huTo add your boot config file to initrd image, run bootconfig as below (Old data is removed automatically if exists)::h]htTo add your boot config file to initrd image, run bootconfig as below (Old data is removed automatically if exists):}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj|)}(hC# tools/bootconfig/bootconfig -a your-config /boot/initrd.img-X.Y.Zh]hC# tools/bootconfig/bootconfig -a your-config /boot/initrd.img-X.Y.Z}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhKhjhhubj )}(hETo remove the config from the image, you can use -d option as below::h]hDTo remove the config from the image, you can use -d option as below:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj|)}(h7# tools/bootconfig/bootconfig -d /boot/initrd.img-X.Y.Zh]h7# tools/bootconfig/bootconfig -d /boot/initrd.img-X.Y.Z}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhKhjhhubj )}(hThen 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](hThen 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 }(hjhhhNhNubj)}(h``CONFIG_BOOT_CONFIG_FORCE``h]hCONFIG_BOOT_CONFIG_FORCE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh Kconfig option selected.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhKhjhhubeh}(h]!attaching-a-boot-config-to-initrdah ]h"]!attaching a boot config to initrdah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h#Embedding a Boot Config into Kernelh]h#Embedding a Boot Config into Kernel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubj )}(hIf 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]hIf 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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj|)}(hSCONFIG_BOOT_CONFIG_EMBED=y CONFIG_BOOT_CONFIG_EMBED_FILE="/PATH/TO/BOOTCONFIG/FILE"h]hSCONFIG_BOOT_CONFIG_EMBED=y CONFIG_BOOT_CONFIG_EMBED_FILE="/PATH/TO/BOOTCONFIG/FILE"}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhKhjhhubj )}(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]hCONFIG_BOOT_CONFIG_EMBED_FILE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj )}(hJust 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.hhhNhNubj)}(h``bootconfig``h]h bootconfig}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubht option on the kernel command line to enable the embedded bootconfig, or, alternatively, build your kernel with the }(hj.hhhNhNubj)}(h``CONFIG_BOOT_CONFIG_FORCE``h]hCONFIG_BOOT_CONFIG_FORCE}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh Kconfig option selected.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj )}(hNote that even if you set this option, you can override the embedded bootconfig by another bootconfig which attached to the initrd.h]hNote that even if you set this option, you can override the embedded bootconfig by another bootconfig which attached to the initrd.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKhjhhubeh}(h]#embedding-a-boot-config-into-kernelah ]h"]#embedding a boot config into kernelah$]h&]uh1hhjhhhhhKubeh}(h]boot-kernel-with-a-boot-configah ]h"]boot kernel with a boot configah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h!Kernel parameters via Boot Configh]h!Kernel parameters via Boot Config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hhhhhKubj )}(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](hIn addition to the kernel command line, the boot config can be used for passing the kernel parameters. All the key-value pairs under }(hjhhhNhNubj)}(h ``kernel``h]hkernel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhT key will be passed to kernel cmdline directly. Moreover, the key-value pairs under }(hjhhhNhNubj)}(h``init``h]hinit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhXP 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.):}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hhhKhj~hhubj|)}(hT[bootconfig params][cmdline params] -- [bootconfig init params][cmdline init params]h]hT[bootconfig params][cmdline params] -- [bootconfig init params][cmdline init params]}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhKhj~hhubj )}(hGHere is an example of the bootconfig file for kernel/init parameters.::h]hFHere is an example of the bootconfig file for kernel/init parameters.:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhKhj~hhubj|)}(hGkernel { root = 01234567-89ab-cdef-0123-456789abcd } init { splash }h]hGkernel { root = 01234567-89ab-cdef-0123-456789abcd } init { splash }}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhKhj~hhubj )}(hEThis will be copied into the kernel cmdline string as the following::h]hDThis will be copied into the kernel cmdline string as the following:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhMhj~hhubj|)}(h3root="01234567-89ab-cdef-0123-456789abcd" -- splashh]h3root="01234567-89ab-cdef-0123-456789abcd" -- splash}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhMhj~hhubj )}(h-If user gives some other command line like,::h]h,If user gives some other command line like,:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhMhj~hhubj|)}(hro bootconfig -- quieth]hro bootconfig -- quiet}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhM hj~hhubj )}(h0The final kernel cmdline will be the following::h]h/The final kernel cmdline will be the following:}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhM hj~hhubj|)}(hGroot="01234567-89ab-cdef-0123-456789abcd" ro bootconfig -- splash quieth]hGroot="01234567-89ab-cdef-0123-456789abcd" ro bootconfig -- splash quiet}hj1sbah}(h]h ]h"]h$]h&]hhuh1j{hhhMhj~hhubeh}(h]!kernel-parameters-via-boot-configah ]h"]!kernel parameters via boot configah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hConfig File Limitationh]hConfig File Limitation}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhhhhhMubj )}(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.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhMhjGhhubeh}(h]config-file-limitationah ]h"]config file limitationah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hBootconfig APIsh]hBootconfig APIs}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhhhhhM#ubj )}(hUser 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]hUser 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhM%hjnhhubj )}(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.:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhM(hjnhhubj|)}(hvnode = 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]hvnode = NULL; xbc_find_value("key.word", &vnode); if (vnode && xbc_node_is_array(vnode)) xbc_array_for_each_value(vnode, value) { printk("%s ", value); }}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhM.hjnhhubj )}(hIf 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]hIf 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().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhM5hjnhhubj )}(hpBut the most typical usage is to get the named value under prefix or get the named array under prefix as below::h]hoBut the most typical usage is to get the named value under prefix or get the named array under prefix as below:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhM9hjnhhubj|)}(hroot = 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]hroot = xbc_find_node("key.prefix"); value = xbc_node_find_value(root, "option", &vnode); ... xbc_node_for_each_array_value(root, "array-option", value, anode) { ... }}hjsbah}(h]h ]h"]h$]h&]hhuh1j{hhhM<hjnhhubj )}(hWThis 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”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhMChjnhhubj )}(hLocking 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]hLocking is not needed, since after initialization, the config becomes read-only. All data and keys must be copied if you need to modify it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hhhMFhjnhhubeh}(h]bootconfig-apisah ]h"]bootconfig apisah$]h&]uh1hhhhhhhhM#ubh)}(hhh](h)}(hFunctions and structuresh]hFunctions and structures}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlexbc_calc_checksum (C function)c.xbc_calc_checksumhNtauh1j hjhhhNhNubhdesc)}(hhh](hdesc_signature)}(hubah}(h]h ](j j eh"]h$]h&]hhuh1jl hjhhhj/hKmubj )}(h(struct xbc_node *node)h]j )}(hstruct xbc_node *nodeh](j )}(hj h]hstruct}(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjZubj\ )}(h h]h }(hjkhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjZubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hj|hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjyubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj~modnameN classnameNjK jN )}jQ ]jT )}jG jDsbc.xbc_node_is_leafasbuh1hhjZubj\ )}(h h]h }(hjhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjZubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjZubj. )}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjZubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjVubah}(h]h ]h"]h$]h&]hhuh1j hjhhhj/hKmubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hjhhhj/hKmubah}(h]jah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hj/hKmhjhhubjZ )}(hhh]j )}(h Test the node is a leaf key nodeh]h Test the node is a leaf key node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKmhjhhubah}(h]h ]h"]h$]h&]uh1jY hjhhhj/hKmubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ jj| jj} j~ j uh1j hhhjhNhNubj )}(hX&**Parameters** ``struct xbc_node *node`` An XBC node. **Description** Test the **node** is a leaf key node which is a key node and has a value node or no child. Returns true if it is a leaf node, or false if not. Note that the leaf node can have subkey nodes in addition to the value node.h](j )}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKqhjubj )}(hhh]j )}(h'``struct xbc_node *node`` An XBC node. h](j )}(h``struct xbc_node *node``h]j)}(hj"h]hstruct xbc_node *node}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKnhjubj )}(hhh]j )}(h An XBC node.h]h An XBC node.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj7hKnhj8ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hj7hKnhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(h**Description**h]j )}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj[ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKphjubj )}(hTest the **node** is a leaf key node which is a key node and has a value node or no child. Returns true if it is a leaf node, or false if not. Note that the leaf node can have subkey nodes in addition to the value node.h](h Test the }(hjshhhNhNubj )}(h**node**h]hnode}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjsubh is a leaf key node which is a key node and has a value node or no child. Returns true if it is a leaf node, or false if not. Note that the leaf node can have subkey nodes in addition to the value node.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKohjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_find_value (C function)c.xbc_find_valuehNtauh1j hjhhhNhNubj )}(hhh](j )}(hFconst char * xbc_find_value (const char *key, struct xbc_node **vnode)h]j% )}(hDconst char *xbc_find_value(const char *key, struct xbc_node **vnode)h](j )}(hj h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubj\ )}(h h]h }(hjhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjhhhjhKubj )}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubj\ )}(h h]h }(hjhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjhhhjhKubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubjm )}(hxbc_find_valueh]j. )}(hxbc_find_valueh]hxbc_find_value}(hjhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjubah}(h]h ](j j eh"]h$]h&]hhuh1jl hjhhhjhKubj )}(h*(const char *key, struct xbc_node **vnode)h](j )}(hconst char *keyh](j )}(hj h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj\ )}(h h]h }(hj&hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjubj )}(hcharh]hchar}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj\ )}(h h]h }(hjBhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjubj )}(hj h]h*}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj. )}(hkeyh]hkey}(hj]hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct xbc_node **vnodeh](j )}(hj h]hstruct}(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjrubj\ )}(h h]h }(hjhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjrubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hjhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetjmodnameN classnameNjK jN )}jQ ]jT )}jG jsbc.xbc_find_valueasbuh1hhjrubj\ )}(h h]h }(hjhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjrubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjrubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjrubj. )}(hvnodeh]hvnode}(hjhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjrubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hjhhhjhKubah}(h]jah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hjhKhjhhubjZ )}(hhh]j )}(h"Find a value which matches the keyh]h"Find a value which matches the key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jY hjhhhjhKubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ jj| jj} j~ j uh1j hhhjhNhNubj )}(hXx**Parameters** ``const char *key`` Search key ``struct xbc_node **vnode`` A container pointer of XBC value node. **Description** 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](j )}(h**Parameters**h]j )}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj&ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj"ubj )}(hhh](j )}(h``const char *key`` Search key h](j )}(h``const char *key``h]j)}(hjGh]hconst char *key}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjAubj )}(hhh]j )}(h Search keyh]h Search key}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj\hKhj]ubah}(h]h ]h"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]uh1j hj\hKhj>ubj )}(hC``struct xbc_node **vnode`` A container pointer of XBC value node. h](j )}(h``struct xbc_node **vnode``h]j)}(hjh]hstruct xbc_node **vnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjzubj )}(hhh]j )}(h&A container pointer of XBC value node.h]h&A container pointer of XBC value node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjhKhjubah}(h]h ]h"]h$]h&]uh1j hjzubeh}(h]h ]h"]h$]h&]uh1j hjhKhj>ubeh}(h]h ]h"]h$]h&]uh1j hj"ubj )}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj"ubj )}(hSearch 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 }(hjhhhNhNubj )}(h**key**h]hkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubhU from whole of XBC tree and return the value if found. Found value node is stored in }(hjhhhNhNubj )}(h ***vnode**h]h*vnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh>. Note that this can return 0-length string and store NULL in }(hjhhhNhNubj )}(h ***vnode**h]h*vnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh for key-only (non-value) entry.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_find_node (C function)c.xbc_find_nodehNtauh1j hjhhhNhNubj )}(hhh](j )}(h1struct xbc_node * xbc_find_node (const char *key)h]j% )}(h/struct xbc_node *xbc_find_node(const char *key)h](j )}(hj h]hstruct}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj2hhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubj\ )}(h h]h }(hjDhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj2hhhjChKubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hjUhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjRubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetjWmodnameN classnameNjK jN )}jQ ]jT )}jG xbc_find_nodesbc.xbc_find_nodeasbuh1hhj2hhhjChKubj\ )}(h h]h }(hjvhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj2hhhjChKubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj2hhhjChKubjm )}(h xbc_find_nodeh]j. )}(hjsh]h xbc_find_node}(hjhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjubah}(h]h ](j j eh"]h$]h&]hhuh1jl hj2hhhjChKubj )}(h(const char *key)h]j )}(hconst char *keyh](j )}(hj h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj\ )}(h h]h }(hjhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjubj )}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj\ )}(h h]h }(hjhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj. )}(hkeyh]hkey}(hjhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hj2hhhjChKubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hj.hhhjChKubah}(h]j)ah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hjChKhj+hhubjZ )}(hhh]j )}(h!Find a node which matches the keyh]h!Find a node which matches the key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jY hj+hhhjChKubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ j6j| j6j} j~ j uh1j hhhjhNhNubj )}(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 )}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj>ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj:ubj )}(hhh]j )}(h``const char *key`` Search key h](j )}(h``const char *key``h]j)}(hj_h]hconst char *key}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjYubj )}(hhh]j )}(h Search keyh]h Search key}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjthKhjuubah}(h]h ]h"]h$]h&]uh1j hjYubeh}(h]h ]h"]h$]h&]uh1j hjthKhjVubah}(h]h ]h"]h$]h&]uh1j hj:ubj )}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj: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 }(hjhhhNhNubj )}(h**key**h]hkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubhQ from whole of XBC tree and return the node if found. If not found, returns NULL.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_node_get_subkey (C function)c.xbc_node_get_subkeyhNtauh1j hjhhhNhNubj )}(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]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubj\ )}(h h]h }(hjhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjhhhjhKubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hjhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetjmodnameN classnameNjK jN )}jQ ]jT )}jG xbc_node_get_subkeysbc.xbc_node_get_subkeyasbuh1hhjhhhjhKubj\ )}(h h]h }(hj1hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjhhhjhKubj )}(hj h]h*}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubjm )}(hxbc_node_get_subkeyh]j. )}(hj.h]hxbc_node_get_subkey}(hjPhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjLubah}(h]h ](j j eh"]h$]h&]hhuh1jl hjhhhjhKubj )}(h(struct xbc_node *node)h]j )}(hstruct xbc_node *nodeh](j )}(hj h]hstruct}(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjgubj\ )}(h h]h }(hjxhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjgubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hjhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetjmodnameN classnameNjK jN )}jQ ]j,c.xbc_node_get_subkeyasbuh1hhjgubj\ )}(h h]h }(hjhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjgubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjgubj. )}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjgubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjcubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hjhhhjhKubah}(h]jah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hjhKhjhhubjZ )}(hhh]j )}(h&Return the first subkey node if existsh]h&Return the first subkey node if exists}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jY hjhhhjhKubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ jj| jj} j~ j uh1j hhhjhNhNubj )}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]j )}(h&``struct xbc_node *node`` Parent node h](j )}(h``struct xbc_node *node``h]j)}(hj-h]hstruct xbc_node *node}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj'ubj )}(hhh]j )}(h Parent nodeh]h Parent node}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjBhKhjCubah}(h]h ]h"]h$]h&]uh1j hj'ubeh}(h]h ]h"]h$]h&]uh1j hjBhKhj$ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(h**Description**h]j )}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjfubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(huReturn 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 }(hj~hhhNhNubj )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~ubh . If the }(hj~hhhNhNubj )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~ubh8 has no child or only value node, this will return NULL.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j "xbc_array_for_each_value (C macro)c.xbc_array_for_each_valuehNtauh1j hjhhhNhNubj )}(hhh](j )}(hxbc_array_for_each_valueh]j% )}(hxbc_array_for_each_valueh]jm )}(hxbc_array_for_each_valueh]j. )}(hjh]hxbc_array_for_each_value}(hjhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjubah}(h]h ](j j eh"]h$]h&]hhuh1jl hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hjhhhjhKubah}(h]jah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hjhKhjhhubjZ )}(hhh]h}(h]h ]h"]h$]h&]uh1jY hjhhhjhKubeh}(h]h ](jE macroeh"]h$]h&]jz jE j{ jj| jj} j~ j uh1j hhhjhNhNubj )}(h+``xbc_array_for_each_value (anode, value)``h]j)}(hjh]h'xbc_array_for_each_value (anode, value)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubh block_quote)}(h Iterate value nodes on an array h]j )}(hIterate value nodes on an arrayh]hIterate value nodes on an array}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubah}(h]h ]h"]h$]h&]uh1jhj1hKhjhhubj )}(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 )}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj8ubj )}(hhh](j )}(h$``anode`` An XBC arraied value node h](j )}(h ``anode``h]j)}(hj]h]hanode}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjWubj )}(hhh]j )}(hAn XBC arraied value nodeh]hAn XBC arraied value node}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjrhKhjsubah}(h]h ]h"]h$]h&]uh1j hjWubeh}(h]h ]h"]h$]h&]uh1j hjrhKhjTubj )}(h``value`` A value h](j )}(h ``value``h]j)}(hjh]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]j )}(hA valueh]hA value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjTubeh}(h]h ]h"]h$]h&]uh1j hj8ubj )}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj8ubj )}(hIterate 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](h1Iterate array value nodes and values starts from }(hjhhhNhNubj )}(h **anode**h]hanode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh~. This is expected to be used with xbc_find_value() and xbc_node_find_value(), so that user can process each array entry node.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j !xbc_node_for_each_child (C macro)c.xbc_node_for_each_childhNtauh1j hjhhhNhNubj )}(hhh](j )}(hxbc_node_for_each_childh]j% )}(hxbc_node_for_each_childh]jm )}(hxbc_node_for_each_childh]j. )}(hj"h]hxbc_node_for_each_child}(hj,hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj(ubah}(h]h ](j j eh"]h$]h&]hhuh1jl hj$hhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hj hhhj?hKubah}(h]jah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hj?hKhjhhubjZ )}(hhh]h}(h]h ]h"]h$]h&]uh1jY hjhhhj?hKubeh}(h]h ](jE macroeh"]h$]h&]jz jE j{ jXj| jXj} j~ j uh1j hhhjhNhNubj )}(h+``xbc_node_for_each_child (parent, child)``h]j)}(hj^h]h'xbc_node_for_each_child (parent, child)}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubj)}(hIterate child nodes h]j )}(hIterate child nodesh]hIterate child nodes}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjtubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubj )}(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 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh](j )}(h``parent`` An XBC node. h](j )}(h ``parent``h]j)}(hjh]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]j )}(h An XBC node.h]h An XBC node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubj )}(h``child`` Iterated XBC node. h](j )}(h ``child``h]j)}(hjh]hchild}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]j )}(hIterated XBC node.h]hIterated XBC node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(h**Description**h]j )}(hj&h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj$ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hIterate child nodes of **parent**. Each child nodes are stored to **child**. The **child** can be mixture of a value node and subkey nodes.h](hIterate child nodes of }(hj<hhhNhNubj )}(h **parent**h]hparent}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubh!. Each child nodes are stored to }(hj<hhhNhNubj )}(h **child**h]hchild}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubh. The }(hj<hhhNhNubj )}(h **child**h]hchild}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubh1 can be mixture of a value node and subkey nodes.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j "xbc_node_for_each_subkey (C macro)c.xbc_node_for_each_subkeyhNtauh1j hjhhhNhNubj )}(hhh](j )}(hxbc_node_for_each_subkeyh]j% )}(hxbc_node_for_each_subkeyh]jm )}(hxbc_node_for_each_subkeyh]j. )}(hjh]hxbc_node_for_each_subkey}(hjhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjubah}(h]h ](j j eh"]h$]h&]hhuh1jl hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hjhhhjhKubah}(h]jah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hjhKhjhhubjZ )}(hhh]h}(h]h ]h"]h$]h&]uh1jY hjhhhjhKubeh}(h]h ](jE macroeh"]h$]h&]jz jE j{ jj| jj} j~ j uh1j hhhjhNhNubj )}(h,``xbc_node_for_each_subkey (parent, child)``h]j)}(hjh]h(xbc_node_for_each_subkey (parent, child)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubj)}(hIterate child subkey nodes h]j )}(hIterate child subkey nodesh]hIterate child subkey nodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubj )}(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 )}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh](j )}(h``parent`` An XBC node. h](j )}(h ``parent``h]j)}(hj+h]hparent}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj%ubj )}(hhh]j )}(h An XBC node.h]h An XBC node.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj@hKhjAubah}(h]h ]h"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]uh1j hj@hKhj"ubj )}(h``child`` Iterated XBC node. h](j )}(h ``child``h]j)}(hjdh]hchild}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj^ubj )}(hhh]j )}(hIterated XBC node.h]hIterated XBC node.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjyhKhjzubah}(h]h ]h"]h$]h&]uh1j hj^ubeh}(h]h ]h"]h$]h&]uh1j hjyhKhj"ubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(htIterate subkey nodes of **parent**. Each child nodes are stored to **child**. The **child** is only the subkey node.h](hIterate subkey nodes of }(hjhhhNhNubj )}(h **parent**h]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh!. Each child nodes are stored to }(hjhhhNhNubj )}(h **child**h]hchild}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh. The }(hjhhhNhNubj )}(h **child**h]hchild}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh is only the subkey node.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j 'xbc_node_for_each_array_value (C macro)c.xbc_node_for_each_array_valuehNtauh1j hjhhhNhNubj )}(hhh](j )}(hxbc_node_for_each_array_valueh]j% )}(hxbc_node_for_each_array_valueh]jm )}(hxbc_node_for_each_array_valueh]j. )}(hjh]hxbc_node_for_each_array_value}(hjhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjubah}(h]h ](j j eh"]h$]h&]hhuh1jl hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hjhhhj1hKubah}(h]j ah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hj1hKhjhhubjZ )}(hhh]h}(h]h ]h"]h$]h&]uh1jY hjhhhj1hKubeh}(h]h ](jE macroeh"]h$]h&]jz jE j{ jJj| jJj} j~ j uh1j hhhjhNhNubj )}(h;``xbc_node_for_each_array_value (node, key, anode, value)``h]j)}(hjPh]h7xbc_node_for_each_array_value (node, key, anode, value)}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubj)}(h#Iterate array entries of geven key h]j )}(h"Iterate array entries of geven keyh]h"Iterate array entries of geven key}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjfubah}(h]h ]h"]h$]h&]uh1jhjxhKhjhhubj )}(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 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh](j )}(h``node`` An XBC node. h](j )}(h``node``h]j)}(hjh]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]j )}(h An XBC node.h]h An XBC node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubj )}(h-``key`` A key string searched under **node** h](j )}(h``key``h]j)}(hjh]hkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]j )}(h$A key string searched under **node**h](hA key string searched under }(hjhhhNhNubj )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubj )}(h,``anode`` Iterated XBC node of array entry. h](j )}(h ``anode``h]j)}(hj$h]hanode}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]j )}(h!Iterated XBC node of array entry.h]h!Iterated XBC node of array entry.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9hKhj:ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hj9hKhjubj )}(h)``value`` Iterated value of array entry. h](j )}(h ``value``h]j)}(hj]h]hvalue}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjWubj )}(hhh]j )}(hIterated value of array entry.h]hIterated value of array entry.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjrhKhjsubah}(h]h ]h"]h$]h&]uh1j hjWubeh}(h]h ]h"]h$]h&]uh1j hjrhKhjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hXIterate 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](hIterate array entries of given }(hjhhhNhNubj )}(h**key**h]hkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh under }(hjhhhNhNubj )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh%. Each array entry node is stored to }(hjhhhNhNubj )}(h **anode**h]hanode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh and }(hjhhhNhNubj )}(h **value**h]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh . If the }(hjhhhNhNubj )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh doesn’t have }(hjhhhNhNubj )}(h**key**h]hkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubhX 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j %xbc_node_for_each_key_value (C macro)c.xbc_node_for_each_key_valuehNtauh1j hjhhhNhNubj )}(hhh](j )}(hxbc_node_for_each_key_valueh]j% )}(hxbc_node_for_each_key_valueh]jm )}(hxbc_node_for_each_key_valueh]j. )}(hjCh]hxbc_node_for_each_key_value}(hjMhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjIubah}(h]h ](j j eh"]h$]h&]hhuh1jl hjEhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hjAhhhj`hKubah}(h]j<ah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hj`hKhj>hhubjZ )}(hhh]h}(h]h ]h"]h$]h&]uh1jY hj>hhhj`hKubeh}(h]h ](jE macroeh"]h$]h&]jz jE j{ jyj| jyj} j~ j uh1j hhhjhNhNubj )}(h4``xbc_node_for_each_key_value (node, knode, value)``h]j)}(hjh]h0xbc_node_for_each_key_value (node, knode, value)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubj)}(h%Iterate key-value pairs under a node h]j )}(h$Iterate key-value pairs under a nodeh]h$Iterate key-value pairs under a node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubj )}(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 )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh](j )}(h``node`` An XBC node. h](j )}(h``node``h]j)}(hjh]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]j )}(h An XBC node.h]h An XBC node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubj )}(h``knode`` Iterated key node h](j )}(h ``knode``h]j)}(hj h]hknode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]j )}(hIterated key nodeh]hIterated key node}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj!hKhj"ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hj!hKhjubj )}(h ``value`` Iterated value string h](j )}(h ``value``h]j)}(hjEh]hvalue}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj?ubj )}(hhh]j )}(hIterated value stringh]hIterated value string}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjZhKhj[ubah}(h]h ]h"]h$]h&]uh1j hj?ubeh}(h]h ]h"]h$]h&]uh1j hjZhKhjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hzIterate key-value pairs under **node**. Each key node and value string are stored in **knode** and **value** respectively.h](hIterate key-value pairs under }(hjhhhNhNubj )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh/. Each key node and value string are stored in }(hjhhhNhNubj )}(h **knode**h]hknode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh and }(hjhhhNhNubj )}(h **value**h]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh respectively.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_for_each_key_value (C macro)c.xbc_for_each_key_valuehNtauh1j hjhhhNhNubj )}(hhh](j )}(hxbc_for_each_key_valueh]j% )}(hxbc_for_each_key_valueh]jm )}(hxbc_for_each_key_valueh]j. )}(hjh]hxbc_for_each_key_value}(hjhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjubah}(h]h ](j j eh"]h$]h&]hhuh1jl hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hjhhhj hKubah}(h]jah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hj hKhjhhubjZ )}(hhh]h}(h]h ]h"]h$]h&]uh1jY hjhhhj hKubeh}(h]h ](jE macroeh"]h$]h&]jz jE j{ j+ j| j+ j} j~ j uh1j hhhjhNhNubj )}(h)``xbc_for_each_key_value (knode, value)``h]j)}(hj1 h]h%xbc_for_each_key_value (knode, value)}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhjhhubj)}(hIterate key-value pairs h]j )}(hIterate key-value pairsh]hIterate key-value pairs}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjG ubah}(h]h ]h"]h$]h&]uh1jhjY hKhjhhubj )}(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 )}(hjf h]h Parameters}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjd ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj` ubj )}(hhh](j )}(h``knode`` Iterated key node h](j )}(h ``knode``h]j)}(hj h]hknode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj ubj )}(hhh]j )}(hIterated key nodeh]hIterated key node}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj hKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj hKhj| ubj )}(h ``value`` Iterated value string h](j )}(h ``value``h]j)}(hj h]hvalue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj ubj )}(hhh]j )}(hIterated value stringh]hIterated value string}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj hMhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj hMhj| ubeh}(h]h ]h"]h$]h&]uh1j hj` ubj )}(h**Description**h]j )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj` ubj )}(h}Iterate key-value pairs in whole XBC tree. Each key node and value string are stored in **knode** and **value** respectively.h](hXIterate key-value pairs in whole XBC tree. Each key node and value string are stored in }(hj!hhhNhNubj )}(h **knode**h]hknode}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj!ubh and }(hj!hhhNhNubj )}(h **value**h]hvalue}(hj)!hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj!ubh respectively.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj` ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j !xbc_node_compose_key (C function)c.xbc_node_compose_keyhNtauh1j hjhhhNhNubj )}(hhh](j )}(hHint xbc_node_compose_key (struct xbc_node *node, char *buf, size_t size)h]j% )}(hGint xbc_node_compose_key(struct xbc_node *node, char *buf, size_t size)h](j )}(hinth]hint}(hjb!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj^!hhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhM ubj\ )}(h h]h }(hjq!hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj^!hhhjp!hM ubjm )}(hxbc_node_compose_keyh]j. )}(hxbc_node_compose_keyh]hxbc_node_compose_key}(hj!hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj!ubah}(h]h ](j j eh"]h$]h&]hhuh1jl hj^!hhhjp!hM ubj )}(h/(struct xbc_node *node, char *buf, size_t size)h](j )}(hstruct xbc_node *nodeh](j )}(hj h]hstruct}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!ubj\ )}(h h]h }(hj!hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj!ubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hj!hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj!ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj!modnameN classnameNjK jN )}jQ ]jT )}jG j!sbc.xbc_node_compose_keyasbuh1hhj!ubj\ )}(h h]h }(hj!hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj!ubj )}(hj h]h*}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!ubj. )}(hnodeh]hnode}(hj!hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj!ubj )}(h char *bufh](j )}(hcharh]hchar}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj "ubj\ )}(h h]h }(hj"hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj "ubj )}(hj h]h*}(hj-"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj "ubj. )}(hbufh]hbuf}(hj:"hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj "ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj!ubj )}(h size_t sizeh](h)}(hhh]j. )}(hsize_th]hsize_t}(hjV"hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjS"ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetjX"modnameN classnameNjK jN )}jQ ]j!c.xbc_node_compose_keyasbuh1hhjO"ubj\ )}(h h]h }(hjt"hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjO"ubj. )}(hsizeh]hsize}(hj"hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjO"ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj!ubeh}(h]h ]h"]h$]h&]hhuh1j hj^!hhhjp!hM ubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hjZ!hhhjp!hM ubah}(h]jU!ah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hjp!hM hjW!hhubjZ )}(hhh]j )}(h'Compose full key string of the XBC nodeh]h'Compose full key string of the XBC node}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhM hj"hhubah}(h]h ]h"]h$]h&]uh1jY hjW!hhhjp!hM ubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ j"j| j"j} j~ j uh1j hhhjhNhNubj )}(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"hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj"ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj"ubj )}(hhh](j )}(h'``struct xbc_node *node`` An XBC node. h](j )}(h``struct xbc_node *node``h]j)}(hj"h]hstruct xbc_node *node}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj"ubj )}(hhh]j )}(h An XBC node.h]h An XBC node.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj#hMhj#ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1j hj#hMhj"ubj )}(h)``char *buf`` A buffer to store the key. h](j )}(h ``char *buf``h]j)}(hj&#h]h char *buf}(hj(#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$#ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj #ubj )}(hhh]j )}(hA buffer to store the key.h]hA buffer to store the key.}(hj?#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj;#hMhj<#ubah}(h]h ]h"]h$]h&]uh1j hj #ubeh}(h]h ]h"]h$]h&]uh1j hj;#hMhj"ubj )}(h)``size_t size`` The size of the **buf**. h](j )}(h``size_t size``h]j)}(hj_#h]h size_t size}(hja#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]#ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhjY#ubj )}(hhh]j )}(hThe size of the **buf**.h](hThe size of the }(hjx#hhhNhNubj )}(h**buf**h]hbuf}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjx#ubh.}(hjx#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hjt#hMhju#ubah}(h]h ]h"]h$]h&]uh1j hjY#ubeh}(h]h ]h"]h$]h&]uh1j hjt#hMhj"ubeh}(h]h ]h"]h$]h&]uh1j hj"ubj )}(h**Description**h]j )}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj#ubah}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj"ubj )}(hCompose 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#hhhNhNubj )}(h**node**h]hnode}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj#ubh into }(hj#hhhNhNubj )}(h**buf**h]hbuf}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj#ubh0. Returns the total length of the key stored in }(hj#hhhNhNubj )}(h**buf**h]hbuf}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj#ubh. Or returns -EINVAL if }(hj#hhhNhNubj )}(h**node**h]hnode}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj#ubh@ is NULL, and -ERANGE if the key depth is deeper than max depth.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_get_info (C function)c.xbc_get_infohNtauh1j hjhhhNhNubj )}(hhh](j )}(h4int xbc_get_info (int *node_size, size_t *data_size)h]j% )}(h3int xbc_get_info(int *node_size, size_t *data_size)h](j )}(hinth]hint}(hj9$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj5$hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKVubj\ )}(h h]h }(hjH$hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj5$hhhjG$hKVubjm )}(h xbc_get_infoh]j. )}(h xbc_get_infoh]h xbc_get_info}(hjZ$hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjV$ubah}(h]h ](j j eh"]h$]h&]hhuh1jl hj5$hhhjG$hKVubj )}(h#(int *node_size, size_t *data_size)h](j )}(hint *node_sizeh](j )}(hinth]hint}(hjv$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjr$ubj\ )}(h h]h }(hj$hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjr$ubj )}(hj h]h*}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjr$ubj. )}(h node_sizeh]h node_size}(hj$hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjr$ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjn$ubj )}(hsize_t *data_sizeh](h)}(hhh]j. )}(hsize_th]hsize_t}(hj$hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj$ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj$modnameN classnameNjK jN )}jQ ]jT )}jG j\$sbc.xbc_get_infoasbuh1hhj$ubj\ )}(h h]h }(hj$hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj$ubj )}(hj h]h*}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj$ubj. )}(h data_sizeh]h data_size}(hj$hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjn$ubeh}(h]h ]h"]h$]h&]hhuh1j hj5$hhhjG$hKVubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hj1$hhhjG$hKVubah}(h]j,$ah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hjG$hKVhj.$hhubjZ )}(hhh]j )}(h)Get the information of loaded boot configh]h)Get the information of loaded boot config}(hj %hhhNhNubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKVhj%hhubah}(h]h ]h"]h$]h&]uh1jY hj.$hhhjG$hKVubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ j8%j| j8%j} j~ j uh1j hhhjhNhNubj )}(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 )}(hjB%h]h Parameters}(hjD%hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj@%ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKZhj<%ubj )}(hhh](j )}(h;``int *node_size`` A pointer to store the number of nodes. h](j )}(h``int *node_size``h]j)}(hja%h]hint *node_size}(hjc%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_%ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKWhj[%ubj )}(hhh]j )}(h'A pointer to store the number of nodes.h]h'A pointer to store the number of nodes.}(hjz%hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjv%hKWhjw%ubah}(h]h ]h"]h$]h&]uh1j hj[%ubeh}(h]h ]h"]h$]h&]uh1j hjv%hKWhjX%ubj )}(hF``size_t *data_size`` A pointer to store the size of bootconfig data. h](j )}(h``size_t *data_size``h]j)}(hj%h]hsize_t *data_size}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKXhj%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%hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj%hKXhj%ubah}(h]h ]h"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]uh1j hj%hKXhjX%ubeh}(h]h ]h"]h$]h&]uh1j hj<%ubj )}(h**Description**h]j )}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj%ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKZhj<%ubj )}(hGet 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%hhhNhNubj )}(h **node_size**h]h node_size}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj%ubh7 if it is not NULL, and the size of bootconfig data in }(hj%hhhNhNubj )}(h **data_size**h]h data_size}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj%ubhR if it is not NULL. Return 0 if the boot config is initialized, or return -ENODEV.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKYhj<%ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_root_node (C function)c.xbc_root_nodehNtauh1j hjhhhNhNubj )}(hhh](j )}(h&struct xbc_node * xbc_root_node (void)h]j% )}(h$struct xbc_node *xbc_root_node(void)h](j )}(hj h]hstruct}(hj>&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj:&hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKsubj\ )}(h h]h }(hjL&hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj:&hhhjK&hKsubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hj]&hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjZ&ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj_&modnameN classnameNjK jN )}jQ ]jT )}jG xbc_root_nodesbc.xbc_root_nodeasbuh1hhj:&hhhjK&hKsubj\ )}(h h]h }(hj~&hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj:&hhhjK&hKsubj )}(hj h]h*}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj:&hhhjK&hKsubjm )}(h xbc_root_nodeh]j. )}(hj{&h]h xbc_root_node}(hj&hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj&ubah}(h]h ](j j eh"]h$]h&]hhuh1jl hj:&hhhjK&hKsubj )}(h(void)h]j )}(hvoidh]j )}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&ubah}(h]h ]h"]h$]h&]noemphhhuh1j hj&ubah}(h]h ]h"]h$]h&]hhuh1j hj:&hhhjK&hKsubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hj6&hhhjK&hKsubah}(h]j1&ah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hjK&hKshj3&hhubjZ )}(hhh]j )}(h)Get the root node of extended boot configh]h)Get the root node of extended boot config}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKshj&hhubah}(h]h ]h"]h$]h&]uh1jY hj3&hhhjK&hKsubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ j&j| j&j} j~ j uh1j hhhjhNhNubj )}(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 )}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj'ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKwhj&ubj )}(hhh]j )}(h``void`` no arguments h](j )}(h``void``h]j)}(hj#'h]hvoid}(hj%'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!'ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj'ubj )}(hhh]j )}(h no argumentsh]h no arguments}(hj<'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj8'hKhj9'ubah}(h]h ]h"]h$]h&]uh1j hj'ubeh}(h]h ]h"]h$]h&]uh1j hj8'hKhj'ubah}(h]h ]h"]h$]h&]uh1j hj&ubj )}(h**Description**h]j )}(hj^'h]h Description}(hj`'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj\'ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj&ubj )}(huReturn the address of root node of extended boot config. If the extended boot config is not initialized, return NULL.h]huReturn the address of root node of extended boot config. If the extended boot config is not initialized, return NULL.}(hjt'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKthj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_node_index (C function)c.xbc_node_indexhNtauh1j hjhhhNhNubj )}(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. )}(huint16_th]huint16_t}(hj'hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj'ubah}(h]h ]h"]h$]h&] refdomainLjE reftypejG reftargetj'modnameN classnameNjK jN )}jQ ]jT )}jG xbc_node_indexsbc.xbc_node_indexasbuh1hhj'hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKubj\ )}(h h]h }(hj'hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj'hhhj'hKubjm )}(hxbc_node_indexh]j. )}(hj'h]hxbc_node_index}(hj'hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj'ubah}(h]h ](j j eh"]h$]h&]hhuh1jl hj'hhhj'hKubj )}(h(struct xbc_node *node)h]j )}(hstruct xbc_node *nodeh](j )}(hj h]hstruct}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj'ubj\ )}(h h]h }(hj(hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj'ubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hj(hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj(ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj(modnameN classnameNjK jN )}jQ ]j'c.xbc_node_indexasbuh1hhj'ubj\ )}(h h]h }(hj1(hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj'ubj )}(hj h]h*}(hj?(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj'ubj. )}(hnodeh]hnode}(hjL(hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj'ubah}(h]h ]h"]h$]h&]hhuh1j hj'hhhj'hKubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hj'hhhj'hKubah}(h]j'ah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hj'hKhj'hhubjZ )}(hhh]j )}(hGet the index of XBC nodeh]hGet the index of XBC node}(hjv(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhjs(hhubah}(h]h ]h"]h$]h&]uh1jY hj'hhhj'hKubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ j(j| j(j} j~ j uh1j hhhjhNhNubj )}(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(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj(ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj(ubj )}(hhh]j )}(h:``struct xbc_node *node`` A target node of getting index. h](j )}(h``struct xbc_node *node``h]j)}(hj(h]hstruct xbc_node *node}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj(ubj )}(hhh]j )}(hA target node of getting index.h]hA target node of getting index.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj(hKhj(ubah}(h]h ]h"]h$]h&]uh1j hj(ubeh}(h]h ]h"]h$]h&]uh1j hj(hKhj(ubah}(h]h ]h"]h$]h&]uh1j hj(ubj )}(h**Description**h]j )}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj(ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj(ubj )}(h5Return the index number of **node** in XBC node list.h](hReturn the index number of }(hj)hhhNhNubj )}(h**node**h]hnode}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj)ubh in XBC node list.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_node_get_parent (C function)c.xbc_node_get_parenthNtauh1j hjhhhNhNubj )}(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]hstruct}(hjI)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjE)hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKubj\ )}(h h]h }(hjW)hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjE)hhhjV)hKubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hjh)hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hje)ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetjj)modnameN classnameNjK jN )}jQ ]jT )}jG xbc_node_get_parentsbc.xbc_node_get_parentasbuh1hhjE)hhhjV)hKubj\ )}(h h]h }(hj)hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjE)hhhjV)hKubj )}(hj h]h*}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjE)hhhjV)hKubjm )}(hxbc_node_get_parenth]j. )}(hj)h]hxbc_node_get_parent}(hj)hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj)ubah}(h]h ](j j eh"]h$]h&]hhuh1jl hjE)hhhjV)hKubj )}(h(struct xbc_node *node)h]j )}(hstruct xbc_node *nodeh](j )}(hj h]hstruct}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubj\ )}(h h]h }(hj)hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj)ubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hj)hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj)ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj)modnameN classnameNjK jN )}jQ ]j)c.xbc_node_get_parentasbuh1hhj)ubj\ )}(h h]h }(hj)hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj)ubj )}(hj h]h*}(hj *hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubj. )}(hnodeh]hnode}(hj*hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj)ubah}(h]h ]h"]h$]h&]hhuh1j hjE)hhhjV)hKubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hjA)hhhjV)hKubah}(h]j<)ah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hjV)hKhj>)hhubjZ )}(hhh]j )}(hGet the parent XBC nodeh]hGet the parent XBC node}(hjD*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhjA*hhubah}(h]h ]h"]h$]h&]uh1jY hj>)hhhjV)hKubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ j\*j| j\*j} j~ j uh1j hhhjhNhNubj )}(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 )}(hjf*h]h Parameters}(hjh*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjd*ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj`*ubj )}(hhh]j )}(h'``struct xbc_node *node`` An XBC node. h](j )}(h``struct xbc_node *node``h]j)}(hj*h]hstruct xbc_node *node}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj*ubj )}(hhh]j )}(h An XBC node.h]h An XBC node.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj*hKhj*ubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1j hj*hKhj|*ubah}(h]h ]h"]h$]h&]uh1j hj`*ubj )}(h**Description**h]j )}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj*ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj`*ubj )}(hUReturn the parent node of **node**. If the node is top node of the tree, return NULL.h](hReturn the parent node of }(hj*hhhNhNubj )}(h**node**h]hnode}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj*ubh3. If the node is top node of the tree, return NULL.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj`*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_node_get_child (C function)c.xbc_node_get_childhNtauh1j hjhhhNhNubj )}(hhh](j )}(hReturn the data (which is always a null terminated string) of }(hjQ0hhhNhNubj )}(h**node**h]hnode}(hjY0hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjQ0ubh5. If the node has invalid data, warn and return NULL.}(hjQ0hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j !xbc_node_find_subkey (C function)c.xbc_node_find_subkeyhNtauh1j hjhhhNhNubj )}(hhh](j )}(hQstruct xbc_node * xbc_node_find_subkey (struct xbc_node *parent, const char *key)h]j% )}(hOstruct xbc_node *xbc_node_find_subkey(struct xbc_node *parent, const char *key)h](j )}(hj h]hstruct}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKubj\ )}(h h]h }(hj0hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj0hhhj0hKubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hj0hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj0ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj0modnameN classnameNjK jN )}jQ ]jT )}jG xbc_node_find_subkeysbc.xbc_node_find_subkeyasbuh1hhj0hhhj0hKubj\ )}(h h]h }(hj0hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj0hhhj0hKubj )}(hj h]h*}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0hhhj0hKubjm )}(hxbc_node_find_subkeyh]j. )}(hj0h]hxbc_node_find_subkey}(hj0hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj0ubah}(h]h ](j j eh"]h$]h&]hhuh1jl hj0hhhj0hKubj )}(h*(struct xbc_node *parent, const char *key)h](j )}(hstruct xbc_node *parenth](j )}(hj h]hstruct}(hj 1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj1ubj\ )}(h h]h }(hj1hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj1ubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hj*1hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj'1ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj,1modnameN classnameNjK jN )}jQ ]j0c.xbc_node_find_subkeyasbuh1hhj1ubj\ )}(h h]h }(hjH1hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj1ubj )}(hj h]h*}(hjV1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj1ubj. )}(hparenth]hparent}(hjc1hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj1ubj )}(hconst char *keyh](j )}(hj h]hconst}(hj|1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjx1ubj\ )}(h h]h }(hj1hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjx1ubj )}(hcharh]hchar}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjx1ubj\ )}(h h]h }(hj1hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjx1ubj )}(hj h]h*}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjx1ubj. )}(hkeyh]hkey}(hj1hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjx1ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj1ubeh}(h]h ]h"]h$]h&]hhuh1j hj0hhhj0hKubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hj0hhhj0hKubah}(h]j0ah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hj0hKhj0hhubjZ )}(hhh]j )}(h*Find a subkey node which matches given keyh]h*Find a subkey node which matches given key}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj1hhubah}(h]h ]h"]h$]h&]uh1jY hj0hhhj0hKubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ j2j| j2j} j~ j uh1j hhhjhNhNubj )}(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 2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 2ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj2ubj )}(hhh](j )}(h)``struct xbc_node *parent`` An XBC node. h](j )}(h``struct xbc_node *parent``h]j)}(hj+2h]hstruct xbc_node *parent}(hj-2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)2ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj%2ubj )}(hhh]j )}(h An XBC node.h]h An XBC node.}(hjD2hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj@2hKhjA2ubah}(h]h ]h"]h$]h&]uh1j hj%2ubeh}(h]h ]h"]h$]h&]uh1j hj@2hKhj"2ubj )}(h"``const char *key`` A key string. h](j )}(h``const char *key``h]j)}(hjd2h]hconst char *key}(hjf2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb2ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj^2ubj )}(hhh]j )}(h A key string.h]h A key string.}(hj}2hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjy2hKhjz2ubah}(h]h ]h"]h$]h&]uh1j hj^2ubeh}(h]h ]h"]h$]h&]uh1j hjy2hKhj"2ubeh}(h]h ]h"]h$]h&]uh1j hj2ubj )}(h**Description**h]j )}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj2ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj2ubj )}(hSearch 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](hSearch a key node under }(hj2hhhNhNubj )}(h **parent**h]hparent}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj2ubh which matches }(hj2hhhNhNubj )}(h**key**h]hkey}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj2ubh. The }(hj2hhhNhNubj )}(h**key**h]hkey}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj2ubh4 can contain several words jointed with ‘.’. If }(hj2hhhNhNubj )}(h **parent**h]hparent}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj2ubhT is NULL, this searches the node from whole tree. Return NULL if no node is matched.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_node_find_value (C function)c.xbc_node_find_valuehNtauh1j hjhhhNhNubj )}(hhh](j )}(hdconst char * xbc_node_find_value (struct xbc_node *parent, const char *key, struct xbc_node **vnode)h]j% )}(hbconst char *xbc_node_find_value(struct xbc_node *parent, const char *key, struct xbc_node **vnode)h](j )}(hj h]hconst}(hj,3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj(3hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKubj\ )}(h h]h }(hj:3hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj(3hhhj93hKubj )}(hcharh]hchar}(hjH3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj(3hhhj93hKubj\ )}(h h]h }(hjV3hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj(3hhhj93hKubj )}(hj h]h*}(hjd3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj(3hhhj93hKubjm )}(hxbc_node_find_valueh]j. )}(hxbc_node_find_valueh]hxbc_node_find_value}(hju3hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjq3ubah}(h]h ](j j eh"]h$]h&]hhuh1jl hj(3hhhj93hKubj )}(hC(struct xbc_node *parent, const char *key, struct xbc_node **vnode)h](j )}(hstruct xbc_node *parenth](j )}(hj h]hstruct}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj\ )}(h h]h }(hj3hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj3ubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hj3hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj3ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj3modnameN classnameNjK jN )}jQ ]jT )}jG jw3sbc.xbc_node_find_valueasbuh1hhj3ubj\ )}(h h]h }(hj3hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj3ubj )}(hj h]h*}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj. )}(hparenth]hparent}(hj3hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj3ubj )}(hconst char *keyh](j )}(hj h]hconst}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj\ )}(h h]h }(hj4hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj3ubj )}(hcharh]hchar}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj\ )}(h h]h }(hj,4hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj3ubj )}(hj h]h*}(hj:4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj. )}(hkeyh]hkey}(hjG4hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj3ubj )}(hstruct xbc_node **vnodeh](j )}(hj h]hstruct}(hj`4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj\4ubj\ )}(h h]h }(hjm4hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj\4ubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hj~4hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj{4ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj4modnameN classnameNjK jN )}jQ ]j3c.xbc_node_find_valueasbuh1hhj\4ubj\ )}(h h]h }(hj4hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj\4ubj )}(hj h]h*}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj\4ubj )}(hj h]h*}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj\4ubj. )}(hvnodeh]hvnode}(hj4hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj\4ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj3ubeh}(h]h ]h"]h$]h&]hhuh1j hj(3hhhj93hKubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hj$3hhhj93hKubah}(h]j3ah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hj93hKhj!3hhubjZ )}(hhh]j )}(h)Find a value node which matches given keyh]h)Find a value node which matches given key}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj4hhubah}(h]h ]h"]h$]h&]uh1jY hj!3hhhj93hKubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ j5j| j5j} j~ j uh1j hhhjhNhNubj )}(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 )}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj5ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj 5ubj )}(hhh](j )}(h)``struct xbc_node *parent`` An XBC node. h](j )}(h``struct xbc_node *parent``h]j)}(hj/5h]hstruct xbc_node *parent}(hj15hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-5ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj)5ubj )}(hhh]j )}(h An XBC node.h]h An XBC node.}(hjH5hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjD5hKhjE5ubah}(h]h ]h"]h$]h&]uh1j hj)5ubeh}(h]h ]h"]h$]h&]uh1j hjD5hKhj&5ubj )}(h"``const char *key`` A key string. h](j )}(h``const char *key``h]j)}(hjh5h]hconst char *key}(hjj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf5ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhjb5ubj )}(hhh]j )}(h A key string.h]h A key string.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj}5hKhj~5ubah}(h]h ]h"]h$]h&]uh1j hjb5ubeh}(h]h ]h"]h$]h&]uh1j hj}5hKhj&5ubj )}(hC``struct xbc_node **vnode`` A container pointer of found XBC node. h](j )}(h``struct xbc_node **vnode``h]j)}(hj5h]hstruct xbc_node **vnode}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj5ubj )}(hhh]j )}(h&A container pointer of found XBC node.h]h&A container pointer of found XBC node.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj5hKhj5ubah}(h]h ]h"]h$]h&]uh1j hj5ubeh}(h]h ]h"]h$]h&]uh1j hj5hKhj&5ubeh}(h]h ]h"]h$]h&]uh1j hj 5ubj )}(h**Description**h]j )}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj5ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj 5ubj )}(hXSearch 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](hSearch a value node under }(hj5hhhNhNubj )}(h **parent**h]hparent}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj5ubh! whose (parent) key node matches }(hj5hhhNhNubj )}(h**key**h]hkey}(hj 6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj5ubh, store it in }(hj5hhhNhNubj )}(h ***vnode**h]h*vnode}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj5ubh$, and returns the value string. The }(hj5hhhNhNubj )}(h**key**h]hkey}(hj06hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj5ubh4 can contain several words jointed with ‘.’. If }(hj5hhhNhNubj )}(h **parent**h]hparent}(hjB6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj5ubh 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 }(hj5hhhNhNubj )}(h ***vnode**h]h*vnode}(hjT6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj5ubhh if the key has no value. And also it will return the value of the first entry if the value is an array.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj 5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j 'xbc_node_compose_key_after (C function)c.xbc_node_compose_key_afterhNtauh1j hjhhhNhNubj )}(hhh](j )}(heint xbc_node_compose_key_after (struct xbc_node *root, struct xbc_node *node, char *buf, size_t size)h]j% )}(hdint xbc_node_compose_key_after(struct xbc_node *root, struct xbc_node *node, char *buf, size_t size)h](j )}(hinth]hint}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj6hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMubj\ )}(h h]h }(hj6hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj6hhhj6hMubjm )}(hxbc_node_compose_key_afterh]j. )}(hxbc_node_compose_key_afterh]hxbc_node_compose_key_after}(hj6hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj6ubah}(h]h ](j j eh"]h$]h&]hhuh1jl hj6hhhj6hMubj )}(hF(struct xbc_node *root, struct xbc_node *node, char *buf, size_t size)h](j )}(hstruct xbc_node *rooth](j )}(hj h]hstruct}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj6ubj\ )}(h h]h }(hj6hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj6ubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hj6hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj6ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj6modnameN classnameNjK jN )}jQ ]jT )}jG j6sbc.xbc_node_compose_key_afterasbuh1hhj6ubj\ )}(h h]h }(hj7hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj6ubj )}(hj h]h*}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj6ubj. )}(hrooth]hroot}(hj#7hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj6ubj )}(hstruct xbc_node *nodeh](j )}(hj h]hstruct}(hj<7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj87ubj\ )}(h h]h }(hjI7hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj87ubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hjZ7hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjW7ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj\7modnameN classnameNjK jN )}jQ ]j7c.xbc_node_compose_key_afterasbuh1hhj87ubj\ )}(h h]h }(hjx7hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj87ubj )}(hj h]h*}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj87ubj. )}(hnodeh]hnode}(hj7hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj87ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj6ubj )}(h char *bufh](j )}(hcharh]hchar}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj7ubj\ )}(h h]h }(hj7hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj7ubj )}(hj h]h*}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj7ubj. )}(hbufh]hbuf}(hj7hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj6ubj )}(h size_t sizeh](h)}(hhh]j. )}(hsize_th]hsize_t}(hj7hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj7ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj7modnameN classnameNjK jN )}jQ ]j7c.xbc_node_compose_key_afterasbuh1hhj7ubj\ )}(h h]h }(hj8hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj7ubj. )}(hsizeh]hsize}(hj8hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj6ubeh}(h]h ]h"]h$]h&]hhuh1j hj6hhhj6hMubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hj6hhhj6hMubah}(h]j6ah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hj6hMhj6hhubjZ )}(hhh]j )}(h*Compose partial key string of the XBC nodeh]h*Compose partial key string of the XBC node}(hjG8hhhNhNubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjD8hhubah}(h]h ]h"]h$]h&]uh1jY hj6hhhj6hMubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ j_8j| j_8j} j~ j uh1j hhhjhNhNubj )}(hX**Parameters** ``struct xbc_node *root`` Root XBC node ``struct xbc_node *node`` Target XBC node. ``char *buf`` A buffer to store the key. ``size_t size`` The size of the **buf**. **Description** Compose the partial key of the **node** into **buf**, which is starting right after **root** (**root** is not included.) If **root** is NULL, this returns full key words of **node**. Returns the total length of the key stored in **buf**. Returns -EINVAL if **node** is NULL or **root** is not the ancestor of **node** or **root** is **node**, or returns -ERANGE if the key depth is deeper than max depth. This is expected to be used with xbc_find_node() to list up all (child) keys under given key.h](j )}(h**Parameters**h]j )}(hji8h]h Parameters}(hjk8hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjg8ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjc8ubj )}(hhh](j )}(h(``struct xbc_node *root`` Root XBC node h](j )}(h``struct xbc_node *root``h]j)}(hj8h]hstruct xbc_node *root}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj8ubj )}(hhh]j )}(h Root XBC nodeh]h Root XBC node}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj8hMhj8ubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1j hj8hMhj8ubj )}(h+``struct xbc_node *node`` Target XBC node. h](j )}(h``struct xbc_node *node``h]j)}(hj8h]hstruct xbc_node *node}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj8ubj )}(hhh]j )}(hTarget XBC node.h]hTarget XBC node.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj8hMhj8ubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1j hj8hMhj8ubj )}(h)``char *buf`` A buffer to store the key. h](j )}(h ``char *buf``h]j)}(hj8h]h char *buf}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj8ubj )}(hhh]j )}(hA buffer to store the key.h]hA buffer to store the key.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9hMhj9ubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1j hj9hMhj8ubj )}(h)``size_t size`` The size of the **buf**. h](j )}(h``size_t size``h]j)}(hj39h]h size_t size}(hj59hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj19ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj-9ubj )}(hhh]j )}(hThe size of the **buf**.h](hThe size of the }(hjL9hhhNhNubj )}(h**buf**h]hbuf}(hjT9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjL9ubh.}(hjL9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hjH9hMhjI9ubah}(h]h ]h"]h$]h&]uh1j hj-9ubeh}(h]h ]h"]h$]h&]uh1j hjH9hMhj8ubeh}(h]h ]h"]h$]h&]uh1j hjc8ubj )}(h**Description**h]j )}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~9ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjc8ubj )}(hXCompose the partial key of the **node** into **buf**, which is starting right after **root** (**root** is not included.) If **root** is NULL, this returns full key words of **node**. Returns the total length of the key stored in **buf**. Returns -EINVAL if **node** is NULL or **root** is not the ancestor of **node** or **root** is **node**, or returns -ERANGE if the key depth is deeper than max depth. This is expected to be used with xbc_find_node() to list up all (child) keys under given key.h](hCompose the partial key of the }(hj9hhhNhNubj )}(h**node**h]hnode}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubh into }(hj9hhhNhNubj )}(h**buf**h]hbuf}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubh , which is starting right after }(hj9hhhNhNubj )}(h**root**h]hroot}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubh (}(hj9hhhNhNubj )}(h**root**h]hroot}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubh is not included.) If }(hj9hhhNhNubj )}(h**root**h]hroot}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubh) is NULL, this returns full key words of }(hj9hhhNhNubj )}(h**node**h]hnode}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubh0. Returns the total length of the key stored in }(hj9hhhNhNubj )}(h**buf**h]hbuf}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubh. Returns -EINVAL if }(hj9hhhNhNubj )}(h**node**h]hnode}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubh is NULL or }(hj9hhhNhNubj )}(h**root**h]hroot}(hj.:hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubh is not the ancestor of }(hj9hhhNhNubj )}(h**node**h]hnode}(hj@:hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubh or }(hj9hhhNhNubj )}(h**root**h]hroot}(hjR:hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubh is }(hj9hhhNhNubj )}(h**node**h]hnode}(hjd:hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubh, or returns -ERANGE if the key depth is deeper than max depth. This is expected to be used with xbc_find_node() to list up all (child) keys under given key.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjc8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j $xbc_node_find_next_leaf (C function)c.xbc_node_find_next_leafhNtauh1j hjhhhNhNubj )}(hhh](j )}(hXstruct xbc_node * xbc_node_find_next_leaf (struct xbc_node *root, struct xbc_node *node)h]j% )}(hVstruct xbc_node *xbc_node_find_next_leaf(struct xbc_node *root, struct xbc_node *node)h](j )}(hj h]hstruct}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj:hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMOubj\ )}(h h]h }(hj:hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj:hhhj:hMOubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hj:hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj:ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj:modnameN classnameNjK jN )}jQ ]jT )}jG xbc_node_find_next_leafsbc.xbc_node_find_next_leafasbuh1hhj:hhhj:hMOubj\ )}(h h]h }(hj:hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj:hhhj:hMOubj )}(hj h]h*}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj:hhhj:hMOubjm )}(hxbc_node_find_next_leafh]j. )}(hj:h]hxbc_node_find_next_leaf}(hj:hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj:ubah}(h]h ](j j eh"]h$]h&]hhuh1jl hj:hhhj:hMOubj )}(h.(struct xbc_node *root, struct xbc_node *node)h](j )}(hstruct xbc_node *rooth](j )}(hj h]hstruct}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj;ubj\ )}(h h]h }(hj$;hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj;ubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hj5;hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj2;ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj7;modnameN classnameNjK jN )}jQ ]j:c.xbc_node_find_next_leafasbuh1hhj;ubj\ )}(h h]h }(hjS;hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj;ubj )}(hj h]h*}(hja;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj;ubj. )}(hrooth]hroot}(hjn;hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj;ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj;ubj )}(hstruct xbc_node *nodeh](j )}(hj h]hstruct}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj;ubj\ )}(h h]h }(hj;hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj;ubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hj;hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj;ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj;modnameN classnameNjK jN )}jQ ]j:c.xbc_node_find_next_leafasbuh1hhj;ubj\ )}(h h]h }(hj;hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj;ubj )}(hj h]h*}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj;ubj. )}(hnodeh]hnode}(hj;hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj;ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj;ubeh}(h]h ]h"]h$]h&]hhuh1j hj:hhhj:hMOubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hj:hhhj:hMOubah}(h]j:ah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hj:hMOhj:hhubjZ )}(hhh]j )}(h(Find the next leaf node under given nodeh]h(Find the next leaf node under given node}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMOhj<hhubah}(h]h ]h"]h$]h&]uh1jY hj:hhhj:hMOubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ j <j| j <j} j~ j uh1j hhhjhNhNubj )}(hXG**Parameters** ``struct xbc_node *root`` An XBC root node ``struct xbc_node *node`` An XBC node which starts from. **Description** Search the next leaf node (which means the terminal key node) of **node** under **root** node (including **root** node itself). Return the next node or NULL if next leaf node is not found.h](j )}(h**Parameters**h]j )}(hj*<h]h Parameters}(hj,<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj(<ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMShj$<ubj )}(hhh](j )}(h+``struct xbc_node *root`` An XBC root node h](j )}(h``struct xbc_node *root``h]j)}(hjI<h]hstruct xbc_node *root}(hjK<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG<ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMPhjC<ubj )}(hhh]j )}(hAn XBC root nodeh]hAn XBC root node}(hjb<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj^<hMPhj_<ubah}(h]h ]h"]h$]h&]uh1j hjC<ubeh}(h]h ]h"]h$]h&]uh1j hj^<hMPhj@<ubj )}(h9``struct xbc_node *node`` An XBC node which starts from. h](j )}(h``struct xbc_node *node``h]j)}(hj<h]hstruct xbc_node *node}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMQhj|<ubj )}(hhh]j )}(hAn XBC node which starts from.h]hAn XBC node which starts from.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<hMQhj<ubah}(h]h ]h"]h$]h&]uh1j hj|<ubeh}(h]h ]h"]h$]h&]uh1j hj<hMQhj@<ubeh}(h]h ]h"]h$]h&]uh1j hj$<ubj )}(h**Description**h]j )}(hj<h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMShj$<ubj )}(hSearch the next leaf node (which means the terminal key node) of **node** under **root** node (including **root** node itself). Return the next node or NULL if next leaf node is not found.h](hASearch the next leaf node (which means the terminal key node) of }(hj<hhhNhNubj )}(h**node**h]hnode}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubh under }(hj<hhhNhNubj )}(h**root**h]hroot}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubh node (including }(hj<hhhNhNubj )}(h**root**h]hroot}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubhK node itself). Return the next node or NULL if next leaf node is not found.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMRhj$<ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j )xbc_node_find_next_key_value (C function)c.xbc_node_find_next_key_valuehNtauh1j hjhhhNhNubj )}(hhh](j )}(hYconst char * xbc_node_find_next_key_value (struct xbc_node *root, struct xbc_node **leaf)h]j% )}(hWconst char *xbc_node_find_next_key_value(struct xbc_node *root, struct xbc_node **leaf)h](j )}(hj h]hconst}(hj8=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4=hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMubj\ )}(h h]h }(hjF=hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj4=hhhjE=hMubj )}(hcharh]hchar}(hjT=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4=hhhjE=hMubj\ )}(h h]h }(hjb=hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj4=hhhjE=hMubj )}(hj h]h*}(hjp=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4=hhhjE=hMubjm )}(hxbc_node_find_next_key_valueh]j. )}(hxbc_node_find_next_key_valueh]hxbc_node_find_next_key_value}(hj=hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj}=ubah}(h]h ](j j eh"]h$]h&]hhuh1jl hj4=hhhjE=hMubj )}(h/(struct xbc_node *root, struct xbc_node **leaf)h](j )}(hstruct xbc_node *rooth](j )}(hj h]hstruct}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=ubj\ )}(h h]h }(hj=hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj=ubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hj=hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj=ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj=modnameN classnameNjK jN )}jQ ]jT )}jG j=sbc.xbc_node_find_next_key_valueasbuh1hhj=ubj\ )}(h h]h }(hj=hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj=ubj )}(hj h]h*}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=ubj. )}(hrooth]hroot}(hj=hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj=ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj=ubj )}(hstruct xbc_node **leafh](j )}(hj h]hstruct}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj >ubj\ )}(h h]h }(hj>hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj >ubh)}(hhh]j. )}(hxbc_nodeh]hxbc_node}(hj->hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj*>ubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetj/>modnameN classnameNjK jN )}jQ ]j=c.xbc_node_find_next_key_valueasbuh1hhj >ubj\ )}(h h]h }(hjK>hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj >ubj )}(hj h]h*}(hjY>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj >ubj )}(hj h]h*}(hjf>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj >ubj. )}(hleafh]hleaf}(hjs>hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj >ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj=ubeh}(h]h ]h"]h$]h&]hhuh1j hj4=hhhjE=hMubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hj0=hhhjE=hMubah}(h]j+=ah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hjE=hMhj-=hhubjZ )}(hhh]j )}(h"Find the next key-value pair nodesh]h"Find the next key-value pair nodes}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.cShMhj>hhubah}(h]h ]h"]h$]h&]uh1jY hj-=hhhjE=hMubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ j>j| j>j} j~ j uh1j hhhjhNhNubj )}(hX**Parameters** ``struct xbc_node *root`` An XBC root node ``struct xbc_node **leaf`` A container pointer of XBC node which starts from. **Description** Search the next leaf node (which means the terminal key node) of ***leaf** under **root** node. Returns the value and update ***leaf** if next leaf node is found, or NULL if no next leaf node is found. Note that this returns 0-length string if the key has no value, or the value of the first entry if the value is an array.h](j )}(h**Parameters**h]j )}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj>ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj>ubj )}(hhh](j )}(h+``struct xbc_node *root`` An XBC root node h](j )}(h``struct xbc_node *root``h]j)}(hj>h]hstruct xbc_node *root}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj>ubj )}(hhh]j )}(hAn XBC root nodeh]hAn XBC root node}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj>hMhj>ubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1j hj>hMhj>ubj )}(hN``struct xbc_node **leaf`` A container pointer of XBC node which starts from. h](j )}(h``struct xbc_node **leaf``h]j)}(hj?h]hstruct xbc_node **leaf}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj?ubj )}(hhh]j )}(h2A container pointer of XBC node which starts from.h]h2A container pointer of XBC node which starts from.}(hj0?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj,?hMhj-?ubah}(h]h ]h"]h$]h&]uh1j hj?ubeh}(h]h ]h"]h$]h&]uh1j hj,?hMhj>ubeh}(h]h ]h"]h$]h&]uh1j hj>ubj )}(h**Description**h]j )}(hjR?h]h Description}(hjT?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjP?ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj>ubj )}(hXCSearch the next leaf node (which means the terminal key node) of ***leaf** under **root** node. Returns the value and update ***leaf** if next leaf node is found, or NULL if no next leaf node is found. Note that this returns 0-length string if the key has no value, or the value of the first entry if the value is an array.h](hASearch the next leaf node (which means the terminal key node) of }(hjh?hhhNhNubj )}(h ***leaf**h]h*leaf}(hjp?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjh?ubh under }(hjh?hhhNhNubj )}(h**root**h]hroot}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjh?ubh$ node. Returns the value and update }(hjh?hhhNhNubj )}(h ***leaf**h]h*leaf}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjh?ubh if next leaf node is found, or NULL if no next leaf node is found. Note that this returns 0-length string if the key has no value, or the value of the first entry if the value is an array.}(hjh?hhhNhNubeh}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j _xbc_exit (C function) c._xbc_exithNtauh1j hjhhhNhNubj )}(hhh](j )}(hvoid _xbc_exit (bool early)h]j% )}(hvoid _xbc_exit(bool early)h](j )}(hvoidh]hvoid}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj?hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMubj\ )}(h h]h }(hj?hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj?hhhj?hMubjm )}(h _xbc_exith]j. )}(h _xbc_exith]h _xbc_exit}(hj?hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj?ubah}(h]h ](j j eh"]h$]h&]hhuh1jl hj?hhhj?hMubj )}(h (bool early)h]j )}(h bool earlyh](j )}(hjl h]hbool}(hj @hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@ubj\ )}(h h]h }(hj@hhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj@ubj. )}(hearlyh]hearly}(hj%@hhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj@ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj@ubah}(h]h ]h"]h$]h&]hhuh1j hj?hhhj?hMubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hj?hhhj?hMubah}(h]j?ah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hj?hMhj?hhubjZ )}(hhh]j )}(hClean up all parsed bootconfigh]hClean up all parsed bootconfig}(hjO@hhhNhNubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjL@hhubah}(h]h ]h"]h$]h&]uh1jY hj?hhhj?hMubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ jg@j| jg@j} j~ j uh1j hhhjhNhNubj )}(h**Parameters** ``bool early`` Set true if this is called before budy system is initialized. **Description** This clears all data structures of parsed bootconfig on memory. If you need to reuse xbc_init() with new boot config, you can use this.h](j )}(h**Parameters**h]j )}(hjq@h]h Parameters}(hjs@hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjo@ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjk@ubj )}(hhh]j )}(hM``bool early`` Set true if this is called before budy system is initialized. h](j )}(h``bool early``h]j)}(hj@h]h bool early}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj@ubj )}(hhh]j )}(h=Set true if this is called before budy system is initialized.h]h=Set true if this is called before budy system is initialized.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj@hMhj@ubah}(h]h ]h"]h$]h&]uh1j hj@ubeh}(h]h ]h"]h$]h&]uh1j hj@hMhj@ubah}(h]h ]h"]h$]h&]uh1j hjk@ubj )}(h**Description**h]j )}(hj@h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj@ubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjk@ubj )}(hThis clears all data structures of parsed bootconfig on memory. If you need to reuse xbc_init() with new boot config, you can use this.h]hThis clears all data structures of parsed bootconfig on memory. If you need to reuse xbc_init() with new boot config, you can use this.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjk@ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_init (C function) c.xbc_inithNtauh1j hjhhhNhNubj )}(hhh](j )}(hJint xbc_init (const char *data, size_t size, const char **emsg, int *epos)h]j% )}(hIint xbc_init(const char *data, size_t size, const char **emsg, int *epos)h](j )}(hinth]hint}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj AhhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMubj\ )}(h h]h }(hjAhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hj AhhhjAhMubjm )}(hxbc_inith]j. )}(hxbc_inith]hxbc_init}(hj1AhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hj-Aubah}(h]h ](j j eh"]h$]h&]hhuh1jl hj AhhhjAhMubj )}(h=(const char *data, size_t size, const char **emsg, int *epos)h](j )}(hconst char *datah](j )}(hj h]hconst}(hjMAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIAubj\ )}(h h]h }(hjZAhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjIAubj )}(hcharh]hchar}(hjhAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIAubj\ )}(h h]h }(hjvAhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjIAubj )}(hj h]h*}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIAubj. )}(hdatah]hdata}(hjAhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjIAubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjEAubj )}(h size_t sizeh](h)}(hhh]j. )}(hsize_th]hsize_t}(hjAhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjAubah}(h]h ]h"]h$]h&] refdomainjE reftypejG reftargetjAmodnameN classnameNjK jN )}jQ ]jT )}jG j3Asb c.xbc_initasbuh1hhjAubj\ )}(h h]h }(hjAhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjAubj. )}(hsizeh]hsize}(hjAhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjAubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjEAubj )}(hconst char **emsgh](j )}(hj h]hconst}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubj\ )}(h h]h }(hjBhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjAubj )}(hcharh]hchar}(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubj\ )}(h h]h }(hjBhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjAubj )}(hj h]h*}(hj+BhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubj )}(hj h]h*}(hj8BhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubj. )}(hemsgh]hemsg}(hjEBhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjAubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjEAubj )}(h int *eposh](j )}(hinth]hint}(hj^BhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjZBubj\ )}(h h]h }(hjlBhhhNhNubah}(h]h ]jh ah"]h$]h&]uh1j[ hjZBubj )}(hj h]h*}(hjzBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjZBubj. )}(heposh]hepos}(hjBhhhNhNubah}(h]h ]j: ah"]h$]h&]uh1j- hjZBubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjEAubeh}(h]h ]h"]h$]h&]hhuh1j hj AhhhjAhMubeh}(h]h ]h"]h$]h&]hhjK uh1j$ jL jM hjAhhhjAhMubah}(h]jAah ](jQ jR eh"]h$]h&]jV jW )jX huh1j hjAhMhjAhhubjZ )}(hhh]j )}(h0Parse given XBC file and build XBC internal treeh]h0Parse given XBC file and build XBC internal tree}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjBhhubah}(h]h ]h"]h$]h&]uh1jY hjAhhhjAhMubeh}(h]h ](jE functioneh"]h$]h&]jz jE j{ jBj| jBj} j~ j uh1j hhhjhNhNubj )}(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 )}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjBubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjBubj )}(hhh](j )}(h8``const char *data`` The boot config text original data h](j )}(h``const char *data``h]j)}(hjBh]hconst char *data}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjBubj )}(hhh]j )}(h"The boot config text original datah]h"The boot config text original data}(hj ChhhNhNubah}(h]h ]h"]h$]h&]uh1j hjChMhjCubah}(h]h ]h"]h$]h&]uh1j hjBubeh}(h]h ]h"]h$]h&]uh1j hjChMhjBubj )}(h%``size_t size`` The size of **data** h](j )}(h``size_t size``h]j)}(hj+Ch]h size_t size}(hj-ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)Cubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj%Cubj )}(hhh]j )}(hThe size of **data**h](h The size of }(hjDChhhNhNubj )}(h**data**h]hdata}(hjLChhhNhNubah}(h]h ]h"]h$]h&]uh1j hjDCubeh}(h]h ]h"]h$]h&]uh1j hj@ChMhjACubah}(h]h ]h"]h$]h&]uh1j hj%Cubeh}(h]h ]h"]h$]h&]uh1j hj@ChMhjBubj )}(hK``const char **emsg`` A pointer of const char * to store the error message h](j )}(h``const char **emsg``h]j)}(hjrCh]hconst char **emsg}(hjtChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpCubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjlCubj )}(hhh]j )}(h4A pointer of const char * to store the error messageh]h4A pointer of const char * to store the error message}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j hjChMhjCubah}(h]h ]h"]h$]h&]uh1j hjlCubeh}(h]h ]h"]h$]h&]uh1j hjChMhjBubj )}(h;``int *epos`` A pointer of int to store the error position h](j )}(h ``int *epos``h]j)}(hjCh]h int *epos}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjCubj )}(hhh]j )}(h,A pointer of int to store the error positionh]h,A pointer of int to store the error position}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j hjChMhjCubah}(h]h ]h"]h$]h&]uh1j hjCubeh}(h]h ]h"]h$]h&]uh1j hjChMhjBubeh}(h]h ]h"]h$]h&]uh1j hjBubj )}(h**Description**h]j )}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j hjCubah}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjBubj )}(hXThis 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 }(hjChhhNhNubj )}(h**data**h]hdata}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjCubh. }(hjChhhNhNubj )}(h**size**h]hsize}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjCubh 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, }(hjChhhNhNubj )}(h**emsg**h]hemsg}(hj(DhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjCubh+ will be updated with an error message and }(hjChhhNhNubj )}(h**epos**h]hepos}(hj:DhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjCubhE will be updated with the error position which is the byte offset of }(hjChhhNhNubj )}(h**buf**h]hbuf}(hjLDhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjCubh&. If the error is not a parser error, }(hjChhhNhNubj )}(h**epos**h]hepos}(hj^DhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjCubh will be -1.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1j hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjhhhNhNubeh}(h]functions-and-structuresah ]h"]functions and structuresah$]h&]uh1hhhhhhhhMKubeh}(h](boot-configurationheh ]h"](boot configuration bootconfigeh$]h&]uh1hhhhhhhhKexpect_referenced_by_name}jDhsexpect_referenced_by_id}hhsubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjDerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}h]hasnameids}(jDhjDjDjgjdjjjcj`jjj}jzjjj{jxjjjsjpjDjAjkjhjjjDjDu nametypes}(jDjDjgjjcjj}jj{jjsjDjkjjDuh}(hhjDhjdjCjjjj`jjjfjzjjjjxjjjjpjjAj~jhjGjjnjDjj j j] jb j j jjjjjjj)j.jjjjjj jjj jj<jAjjjU!jZ!j,$j1$j1&j6&j'j'j<)jA)j +j+j,j,j.j.j0j0j3j$3j6j6j:j:j+=j0=j?j?jAjAu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages]hsystem_message)}(hhh]j )}(hhh]h0Hyperlink target "bootconfig" is not referenced.}hj Esbah}(h]h ]h"]h$]h&]uh1j hjEubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehnjlineKuh1jEuba transformerN include_log] decorationNhhub.