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]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 <}(hhhhhNhNubh reference)}(hmhiramat@kernel.orgh]hmhiramat@kernel.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:mhiramat@kernel.orguh1jhhubh>}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hOverviewh]hOverview}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hhhhhK ubh)}(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.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj/hhubeh}(h]overviewah ]h"]overviewah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hConfig File Syntaxh]hConfig File Syntax}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhhhhhKubh)}(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 }(hjghhhNhNubhliteral)}(h``=``h]h=}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1johjgubhT. The value string has to be terminated by the following delimiters described below.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjVhhubh)}(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 (}(hjhhhNhNubjp)}(h``-``h]h-}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh) or underscore (}(hjhhhNhNubjp)}(h``_``h]h_}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubhi). And each value only contains printable characters or spaces except for delimiters such as semi-colon (}(hjhhhNhNubjp)}(h``;``h]h;}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh ), new-line (}(hjhhhNhNubjp)}(h``\n``h]h\n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh ), comma (}(hjhhhNhNubjp)}(h``,``h]h,}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh ), hash (}(hjhhhNhNubjp)}(h``#``h]h#}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh) and closing brace (}(hjhhhNhNubjp)}(h``}``h]h}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjVhhubh)}(hiIf the ``=`` is followed by whitespace up to one of these delimiters, the key is assigned an empty value.h](hIf the }(hjhhhNhNubjp)}(h``=``h]h=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh] is followed by whitespace up to one of these delimiters, the key is assigned an empty value.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjVhhubh)}(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 (}(hj5hhhNhNubjp)}(h``,``h]h,}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1johj5ubh8) separated, and comments and line breaks with newline (}(hj5hhhNhNubjp)}(h``\n``h]h\n}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1johj5ubh{) are allowed between array values for readability. Thus the first entry of the array must be on the same line as the key.:}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK!hjVhhubh literal_block)}(h)KEY[.WORD[...]] = VALUE[, VALUE2[...]][;]h]h)KEY[.WORD[...]] = VALUE[, VALUE2[...]][;]}hjisbah}(h]h ]h"]h$]h&]hhuh1jghhhK&hjVhhubh)}(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 }(hjwhhhNhNubjp)}(h``=``h]h=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjwubh.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK(hjVhhubh)}(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 (}(hjhhhNhNubjp)}(h ``"VALUE"``h]h"VALUE"}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh) or single-quotes (}(hjhhhNhNubjp)}(h ``'VALUE'``h]h'VALUE'}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh9) to quote it. Note that you can not escape these quotes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK+hjVhhubh)}(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&]uh1hhhhK/hjVhhubh)}(hhh](h)}(hKey-Value Syntaxh]hKey-Value Syntax}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK3ubh)}(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&]uh1hhhhK5hjhhubjh)}(h.foo.bar.baz = value1 foo.bar.qux.quux = value2h]h.foo.bar.baz = value1 foo.bar.qux.quux = value2}hjsbah}(h]h ]h"]h$]h&]hhuh1jghhhK8hjhhubh)}(hThese can be written also in::h]hThese can be written also in:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hjhhubjh)}(h0foo.bar { baz = value1 qux.quux = value2 }h]h0foo.bar { baz = value1 qux.quux = value2 }}hjsbah}(h]h ]h"]h$]h&]hhuh1jghhhK=hjhhubh)}(h'Or more shorter, written as following::h]h&Or more shorter, written as following:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKBhjhhubjh)}(h+foo.bar { baz = value1; qux.quux = value2 }h]h+foo.bar { baz = value1; qux.quux = value2 }}hj.sbah}(h]h ]h"]h$]h&]hhuh1jghhhKDhjhhubh)}(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.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKFhjhhubeh}(h]key-value-syntaxah ]h"]key-value syntaxah$]h&]uh1hhjVhhhhhK3ubh)}(hhh](h)}(hSame-key Valuesh]hSame-key Values}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhhhhhKJubh)}(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,:}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhjRhhubjh)}(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}hjqsbah}(h]h ]h"]h$]h&]hhuh1jghhhKOhjRhhubh)}(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 }(hjhhhNhNubjp)}(h``:=``h]h:=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh explicitly. For example:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKRhjRhhubjh)}(hfoo = bar, baz foo := quxh]hfoo = bar, baz foo := qux}hjsbah}(h]h ]h"]h$]h&]hhuh1jghhhKUhjRhhubh)}(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 }(hjhhhNhNubjp)}(h``qux``h]hqux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh is assigned to }(hjhhhNhNubjp)}(h``foo``h]hfoo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh 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&]uh1hhhhKXhjRhhubh)}(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 }(hjhhhNhNubjp)}(h``+=``h]h+=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh operator. For example:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK\hjRhhubjh)}(hfoo = bar, baz foo += quxh]hfoo = bar, baz foo += qux}hjsbah}(h]h ]h"]h$]h&]hhuh1jghhhK_hjRhhubh)}(h?In this case, the key ``foo`` has ``bar``, ``baz`` and ``qux``.h](hIn this case, the key }(hj hhhNhNubjp)}(h``foo``h]hfoo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johj ubh has }(hj hhhNhNubjp)}(h``bar``h]hbar}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1johj ubh, }(hj hhhNhNubjp)}(h``baz``h]hbaz}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1johj ubh and }(hj hhhNhNubjp)}(h``qux``h]hqux}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1johj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKbhjRhhubh)}(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.:}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKdhjRhhubjh)}(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.}hjqsbah}(h]h ]h"]h$]h&]hhuh1jghhhKghjRhhubh)}(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&]uh1hhhhKkhjRhhubjh)}(hRfoo { bar = value1 bar { baz = value2 qux = value3 } }h]hRfoo { bar = value1 bar { baz = value2 qux = value3 } }}hjsbah}(h]h ]h"]h$]h&]hhuh1jghhhKnhjRhhubh)}(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&]uh1hhhhKvhjRhhubjh)}(hfoo.bar = value1 foo = value2h]hfoo.bar = value1 foo = value2}hjsbah}(h]h ]h"]h$]h&]hhuh1jghhhKzhjRhhubh)}(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&]uh1hhhhK}hjRhhubjh)}(hfoo = value2 foo.bar = value1h]hfoo = value2 foo.bar = value1}hjsbah}(h]h ]h"]h$]h&]hhuh1jghhhKhjRhhubeh}(h]same-key-valuesah ]h"]same-key valuesah$]h&]uh1hhjVhhhhhKJubh)}(hhh](h)}(hCommentsh]hComments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(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&]uh1hhhhKhjhhubjh)}(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&]hhuh1jghhhKhjhhubh)}(hThis is parsed as below::h]hThis is parsed as below:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjh)}(hfoo = value bar = 1, 2, 3h]hfoo = value bar = 1, 2, 3}hjsbah}(h]h ]h"]h$]h&]hhuh1jghhhKhjhhubh)}(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 (}(hj$hhhNhNubjp)}(h``,``h]h,}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1johj$ubh or }(hj$hhhNhNubjp)}(h``;``h]h;}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1johj$ubh1). This means following config has a syntax error}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjh)}(hkey = 1 # comment ,2h]hkey = 1 # comment ,2}hjVsbah}(h]h ]h"]h$]h&]hhuh1jghhhKhjhhubeh}(h]commentsah ]h"]commentsah$]h&]uh1hhjVhhhhhKubeh}(h]config-file-syntaxah ]h"]config file syntaxah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h/proc/bootconfigh]h/proc/bootconfig}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthhhhhKubh)}(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&]uh1hhhhKhjthhubjh)}(h(KEY[.WORDS...] = "[VALUE]"[,"VALUE2"...]h]h(KEY[.WORDS...] = "[VALUE]"[,"VALUE2"...]}hjsbah}(h]h ]h"]h$]h&]hhuh1jghhhKhjthhubeh}(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&]uh1hhjhhhhhKubh)}(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&]uh1hhhhKhjhhubh)}(hhh](h)}(h!Attaching a Boot Config to Initrdh]h!Attaching a Boot Config to Initrd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(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&]uh1hhhhKhjhhubh)}(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&]uh1hhhhKhjhhubh)}(hDThe size and checksum fields are unsigned 32bit little endian value.h]hDThe size and checksum fields are unsigned 32bit little endian value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(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 (}(hjhhhNhNubjp)}(h``\0``h]h\0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh) will be added. Thus the }(hjhhhNhNubjp)}(h``size``h]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh6 is the length of the bootconfig file + padding bytes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(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 }(hjChhhNhNubjp)}(h``bootconfig``h]h bootconfig}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1johjCubh 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:}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjh)}(h# make -C tools/bootconfigh]h# make -C tools/bootconfig}hjcsbah}(h]h ]h"]h$]h&]hhuh1jghhhKhjhhubh)}(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):}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjh)}(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&]hhuh1jghhhKhjhhubh)}(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&]uh1hhhhKhjhhubjh)}(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&]hhuh1jghhhKhjhhubh)}(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 }(hjhhhNhNubjp)}(h``CONFIG_BOOT_CONFIG_FORCE``h]hCONFIG_BOOT_CONFIG_FORCE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh Kconfig option selected.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(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&]uh1hhjhhhhhKubh)}(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&]uh1hhhhKhjhhubjh)}(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&]hhuh1jghhhKhjhhubh)}(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](jp)}(h!``CONFIG_BOOT_CONFIG_EMBED_FILE``h]hCONFIG_BOOT_CONFIG_EMBED_FILE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh 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&]uh1hhhhKhjhhubh)}(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 }(hjhhhNhNubjp)}(h``bootconfig``h]h bootconfig}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1johjubht option on the kernel command line to enable the embedded bootconfig, or, alternatively, build your kernel with the }(hjhhhNhNubjp)}(h``CONFIG_BOOT_CONFIG_FORCE``h]hCONFIG_BOOT_CONFIG_FORCE}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh Kconfig option selected.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(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}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhhhhhKubh)}(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 }(hj{hhhNhNubjp)}(h ``kernel``h]hkernel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johj{ubhT key will be passed to kernel cmdline directly. Moreover, the key-value pairs under }(hj{hhhNhNubjp)}(h``init``h]hinit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johj{ubhXP will be passed to init process via the cmdline. The parameters are concatenated with user-given kernel cmdline string as the following order, so that the command line parameter can override bootconfig parameters (this depends on how the subsystem handles parameters but in general, earlier parameter will be overwritten by later one.):}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjjhhubjh)}(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&]hhuh1jghhhKhjjhhubh)}(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&]uh1hhhhKhjjhhubjh)}(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&]hhuh1jghhhKhjjhhubh)}(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&]uh1hhhhMhjjhhubjh)}(h3root="01234567-89ab-cdef-0123-456789abcd" -- splashh]h3root="01234567-89ab-cdef-0123-456789abcd" -- splash}hjsbah}(h]h ]h"]h$]h&]hhuh1jghhhMhjjhhubh)}(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&]uh1hhhhMhjjhhubjh)}(hro bootconfig -- quieth]hro bootconfig -- quiet}hjsbah}(h]h ]h"]h$]h&]hhuh1jghhhM hjjhhubh)}(h0The final kernel cmdline will be the following::h]h/The final kernel cmdline will be the following:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjjhhubjh)}(hGroot="01234567-89ab-cdef-0123-456789abcd" ro bootconfig -- splash quieth]hGroot="01234567-89ab-cdef-0123-456789abcd" ro bootconfig -- splash quiet}hjsbah}(h]h ]h"]h$]h&]hhuh1jghhhMhjjhhubeh}(h]!kernel-parameters-via-boot-configah ]h"]!kernel parameters via boot configah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hConfig File Limitationh]hConfig File Limitation}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hhhhhMubh)}(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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj3hhubeh}(h]config-file-limitationah ]h"]config file limitationah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hBootconfig APIsh]hBootconfig APIs}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhhhhhM#ubh)}(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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM%hjZhhubh)}(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.:}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM(hjZhhubjh)}(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&]hhuh1jghhhM.hjZhhubh)}(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&]uh1hhhhM5hjZhhubh)}(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&]uh1hhhhM9hjZhhubjh)}(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&]hhuh1jghhhM<hjZhhubh)}(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&]uh1hhhhMChjZhhubh)}(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&]uh1hhhhMFhjZhhubeh}(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_checksumhNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(h6uint32_t xbc_calc_checksum (void *data, uint32_t size)h]hdesc_signature_line)}(h5uint32_t xbc_calc_checksum(void *data, uint32_t size)h](h)}(hhh]h desc_sig_name)}(huint32_th]huint32_t}(hj hhhNhNubah}(h]h ]nah"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetj modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j8 ASTIdentifier)}j3 xbc_calc_checksumsbc.xbc_calc_checksumasbuh1hhj hhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubhdesc_sig_space)}(h h]h }(hjI hhhNhNubah}(h]h ]wah"]h$]h&]uh1jG hj hhhjF hKubh desc_name)}(hxbc_calc_checksumh]j )}(hjC h]hxbc_calc_checksum}(hj^ hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjZ ubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jX hj hhhjF hKubhdesc_parameterlist)}(h(void *data, uint32_t size)h](hdesc_parameter)}(h void *datah](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j hj{ ubjH )}(h h]h }(hj hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj{ ubhdesc_sig_punctuation)}(h*h]h*}(hj hhhNhNubah}(h]h ]pah"]h$]h&]uh1j hj{ ubj )}(hdatah]hdata}(hj hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj{ ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hju ubjz )}(h uint32_t sizeh](h)}(hhh]j )}(huint32_th]huint32_t}(hj hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj modnameN classnameNj7 j: )}j= ]jA c.xbc_calc_checksumasbuh1hhj ubjH )}(h h]h }(hj hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj ubj )}(hsizeh]hsize}(hj hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hju ubeh}(h]h ]h"]h$]h&]hhuh1js hj hhhjF hKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1j sphinx_line_type declaratorhj hhhjF hKubah}(h]j ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j hjF hKhj hhubh desc_content)}(hhh]h)}(h Calculate checksum of bootconfigh]h Calculate checksum of bootconfig}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj( hhubah}(h]h ]h"]h$]h&]uh1j& hj hhhjF hKubeh}(h]h ](j1 functioneh"]h$]h&]domainj1 objtypejC desctypejC noindex noindexentrynocontentsentryuh1j hhhjhNhNubh container)}(hX!**Parameters** ``void *data`` Bootconfig data. ``uint32_t size`` The size of the bootconfig data. **Description** Calculate the checksum value of the bootconfig data. The checksum will be used with the BOOTCONFIG_MAGIC and the size for embedding the bootconfig in the initrd image.h](h)}(h**Parameters**h]hstrong)}(hjU h]h Parameters}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjS ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhK#hjO ubhdefinition_list)}(hhh](hdefinition_list_item)}(h ``void *data`` Bootconfig data. h](hterm)}(h``void *data``h]jp)}(hj| h]h void *data}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1johjz ubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhK hjt ubh definition)}(hhh]h)}(hBootconfig data.h]hBootconfig data.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK hj ubah}(h]h ]h"]h$]h&]uh1j hjt ubeh}(h]h ]h"]h$]h&]uh1jr hj hK hjo ubjs )}(h3``uint32_t size`` The size of the bootconfig data. h](jy )}(h``uint32_t size``h]jp)}(hj h]h uint32_t size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1johj ubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhK!hj ubj )}(hhh]h)}(h The size of the bootconfig data.h]h The size of the bootconfig data.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK!hj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jr hj hK!hjo ubeh}(h]h ]h"]h$]h&]uh1jm hjO ubh)}(h**Description**h]jX )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhK#hjO ubh)}(hCalculate the checksum value of the bootconfig data. The checksum will be used with the BOOTCONFIG_MAGIC and the size for embedding the bootconfig in the initrd image.h]hCalculate the checksum value of the bootconfig data. The checksum will be used with the BOOTCONFIG_MAGIC and the size for embedding the bootconfig in the initrd image.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhK"hjO ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_node_is_value (C function)c.xbc_node_is_valuehNtauh1jhjhhhNhNubj )}(hhh](j )}(h.bool xbc_node_is_value (struct xbc_node *node)h]j )}(h-bool xbc_node_is_value(struct xbc_node *node)h](j )}(hboolh]hbool}(hj7 hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3 hhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKLubjH )}(h h]h }(hjF hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj3 hhhjE hKLubjY )}(hxbc_node_is_valueh]j )}(hxbc_node_is_valueh]hxbc_node_is_value}(hjX hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjT ubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hj3 hhhjE hKLubjt )}(h(struct xbc_node *node)h]jz )}(hstruct xbc_node *nodeh](hdesc_sig_keyword)}(hstructh]hstruct}(hjv hhhNhNubah}(h]h ]kah"]h$]h&]uh1jt hjp ubjH )}(h h]h }(hj hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjp ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hj hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj modnameN classnameNj7 j: )}j= ]j@ )}j3 jZ sbc.xbc_node_is_valueasbuh1hhjp ubjH )}(h h]h }(hj hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjp ubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjp ubj )}(hnodeh]hnode}(hj hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjp ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hjl ubah}(h]h ]h"]h$]h&]hhuh1js hj3 hhhjE hKLubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj/ hhhjE hKLubah}(h]j* ah ](j j eh"]h$]h&]j# j$ )j% huh1j hjE hKLhj, hhubj' )}(hhh]h)}(hTest the node is a value nodeh]hTest the node is a value node}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKLhj hhubah}(h]h ]h"]h$]h&]uh1j& hj, hhhjE hKLubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH j jI j jJ jK jL uh1j hhhjhNhNubjN )}(h**Parameters** ``struct xbc_node *node`` An XBC node. **Description** Test the **node** is a value node and return true if a value node, false if not.h](h)}(h**Parameters**h]jX )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKPhj ubjn )}(hhh]js )}(h'``struct xbc_node *node`` An XBC node. h](jy )}(h``struct xbc_node *node``h]jp)}(hj< h]hstruct xbc_node *node}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1johj: ubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKMhj6 ubj )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ hKMhjR ubah}(h]h ]h"]h$]h&]uh1j hj6 ubeh}(h]h ]h"]h$]h&]uh1jr hjQ hKMhj3 ubah}(h]h ]h"]h$]h&]uh1jm hj ubh)}(h**Description**h]jX )}(hjw h]h Description}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hju ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKOhj ubh)}(hPTest the **node** is a value node and return true if a value node, false if not.h](h Test the }(hj hhhNhNubjX )}(h**node**h]hnode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj ubh? is a value node and return true if a value node, false if not.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKNhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_node_is_key (C function)c.xbc_node_is_keyhNtauh1jhjhhhNhNubj )}(hhh](j )}(h,bool xbc_node_is_key (struct xbc_node *node)h]j )}(h+bool xbc_node_is_key(struct xbc_node *node)h](j )}(hj9 h]hbool}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj hhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKWubjH )}(h h]h }(hj hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj hhhj hKWubjY )}(hxbc_node_is_keyh]j )}(hxbc_node_is_keyh]hxbc_node_is_key}(hj hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj ubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hj hhhj hKWubjt )}(h(struct xbc_node *node)h]jz )}(hstruct xbc_node *nodeh](ju )}(hjx h]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj ubjH )}(h h]h }(hj hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hj( hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj% ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj* modnameN classnameNj7 j: )}j= ]j@ )}j3 j sbc.xbc_node_is_keyasbuh1hhj ubjH )}(h h]h }(hjH hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj ubj )}(hj h]h*}(hjV hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj )}(hnodeh]hnode}(hjc hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hj ubah}(h]h ]h"]h$]h&]hhuh1js hj hhhj hKWubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj hhhj hKWubah}(h]j ah ](j j eh"]h$]h&]j# j$ )j% huh1j hj hKWhj hhubj' )}(hhh]h)}(hTest the node is a key nodeh]hTest the node is a key node}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKWhj hhubah}(h]h ]h"]h$]h&]uh1j& hj hhhj hKWubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH j jI j jJ jK jL uh1j hhhjhNhNubjN )}(h**Parameters** ``struct xbc_node *node`` An XBC node. **Description** Test the **node** is a key node and return true if a key node, false if not.h](h)}(h**Parameters**h]jX )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhK[hj ubjn )}(hhh]js )}(h'``struct xbc_node *node`` An XBC node. h](jy )}(h``struct xbc_node *node``h]jp)}(hj h]hstruct xbc_node *node}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1johj ubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKXhj ubj )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKXhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jr hj hKXhj ubah}(h]h ]h"]h$]h&]uh1jm hj ubh)}(h**Description**h]jX )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKZhj ubh)}(hLTest the **node** is a key node and return true if a key node, false if not.h](h Test the }(hjhhhNhNubjX )}(h**node**h]hnode}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubh; is a key node and return true if a key node, false if not.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKYhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_node_is_array (C function)c.xbc_node_is_arrayhNtauh1jhjhhhNhNubj )}(hhh](j )}(h.bool xbc_node_is_array (struct xbc_node *node)h]j )}(h-bool xbc_node_is_array(struct xbc_node *node)h](j )}(hj9 h]hbool}(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj\hhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKbubjH )}(h h]h }(hjnhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj\hhhjmhKbubjY )}(hxbc_node_is_arrayh]j )}(hxbc_node_is_arrayh]hxbc_node_is_array}(hjhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj|ubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hj\hhhjmhKbubjt )}(h(struct xbc_node *node)h]jz )}(hstruct xbc_node *nodeh](ju )}(hjx h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hjubjH )}(h h]h }(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hjhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetjmodnameN classnameNj7 j: )}j= ]j@ )}j3 jsbc.xbc_node_is_arrayasbuh1hhjubjH )}(h h]h }(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hjubah}(h]h ]h"]h$]h&]hhuh1js hj\hhhjmhKbubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjXhhhjmhKbubah}(h]jSah ](j j eh"]h$]h&]j# j$ )j% huh1j hjmhKbhjUhhubj' )}(hhh]h)}(h&Test the node is an arraied value nodeh]h&Test the node is an arraied value node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKbhjhhubah}(h]h ]h"]h$]h&]uh1j& hjUhhhjmhKbubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH j7jI j7jJ jK jL uh1j hhhjhNhNubjN )}(hv**Parameters** ``struct xbc_node *node`` An XBC node. **Description** Test the **node** is an arraied value node.h](h)}(h**Parameters**h]jX )}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj?ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKfhj;ubjn )}(hhh]js )}(h'``struct xbc_node *node`` An XBC node. h](jy )}(h``struct xbc_node *node``h]jp)}(hj`h]hstruct xbc_node *node}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1johj^ubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKchjZubj )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhKchjvubah}(h]h ]h"]h$]h&]uh1j hjZubeh}(h]h ]h"]h$]h&]uh1jr hjuhKchjWubah}(h]h ]h"]h$]h&]uh1jm hj;ubh)}(h**Description**h]jX )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKehj;ubh)}(h+Test the **node** is an arraied value node.h](h Test the }(hjhhhNhNubjX )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubh is an arraied value node.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKdhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_node_is_leaf (C function)c.xbc_node_is_leafhNtauh1jhjhhhNhNubj )}(hhh](j )}(h-bool xbc_node_is_leaf (struct xbc_node *node)h]j )}(h,bool xbc_node_is_leaf(struct xbc_node *node)h](j )}(hj9 h]hbool}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKmubjH )}(h h]h }(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjhhhjhKmubjY )}(hxbc_node_is_leafh]j )}(hxbc_node_is_leafh]hxbc_node_is_leaf}(hjhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hjhhhjhKmubjt )}(h(struct xbc_node *node)h]jz )}(hstruct xbc_node *nodeh](ju )}(hjx h]hstruct}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj*ubjH )}(h h]h }(hj;hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj*ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hjLhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjIubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetjNmodnameN classnameNj7 j: )}j= ]j@ )}j3 jsbc.xbc_node_is_leafasbuh1hhj*ubjH )}(h h]h }(hjlhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj*ubj )}(hj h]h*}(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubj )}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hj&ubah}(h]h ]h"]h$]h&]hhuh1js hjhhhjhKmubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjhhhjhKmubah}(h]jah ](j j eh"]h$]h&]j# j$ )j% huh1j hjhKmhjhhubj' )}(hhh]h)}(h Test the node is a leaf key nodeh]h Test the node is a leaf key node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKmhjhhubah}(h]h ]h"]h$]h&]uh1j& hjhhhjhKmubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH jjI jjJ jK jL uh1j hhhjhNhNubjN )}(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](h)}(h**Parameters**h]jX )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKqhjubjn )}(hhh]js )}(h'``struct xbc_node *node`` An XBC node. h](jy )}(h``struct xbc_node *node``h]jp)}(hjh]hstruct xbc_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKnhjubj )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKnhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jr hjhKnhjubah}(h]h ]h"]h$]h&]uh1jm hjubh)}(h**Description**h]jX )}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj+ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKphjubh)}(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 }(hjChhhNhNubjX )}(h**node**h]hnode}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjCubh 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.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKohjubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_find_value (C function)c.xbc_find_valuehNtauh1jhjhhhNhNubj )}(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](ju )}(hconsth]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubjH )}(h h]h }(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjhhhjhKubj )}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubjH )}(h h]h }(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjhhhjhKubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubjY )}(hxbc_find_valueh]j )}(hxbc_find_valueh]hxbc_find_value}(hjhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hjhhhjhKubjt )}(h*(const char *key, struct xbc_node **vnode)h](jz )}(hconst char *keyh](ju )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hjubjH )}(h h]h }(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjubj )}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubjH )}(h h]h }(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjubj )}(hj h]h*}(hj!hhhNhNubah}(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&]noemphhhuh1jy hjubjz )}(hstruct xbc_node **vnodeh](ju )}(hjx h]hstruct}(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hjCubjH )}(h h]h }(hjThhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjCubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hjehhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjbubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetjgmodnameN classnameNj7 j: )}j= ]j@ )}j3 jsbc.xbc_find_valueasbuh1hhjCubjH )}(h h]h }(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjCubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjCubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjCubj )}(hvnodeh]hvnode}(hjhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjCubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hjubeh}(h]h ]h"]h$]h&]hhuh1js hjhhhjhKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj|hhhjhKubah}(h]jwah ](j j eh"]h$]h&]j# j$ )j% huh1j hjhKhjyhhubj' )}(hhh]h)}(h"Find a value which matches the keyh]h"Find a value which matches the key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j& hjyhhhjhKubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH jjI jjJ jK jL uh1j hhhjhNhNubjN )}(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](h)}(h**Parameters**h]jX )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubjn )}(hhh](js )}(h``const char *key`` Search key h](jy )}(h``const char *key``h]jp)}(hjh]hconst char *key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]h)}(h Search keyh]h Search key}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hKhj.ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jr hj-hKhjubjs )}(hC``struct xbc_node **vnode`` A container pointer of XBC value node. h](jy )}(h``struct xbc_node **vnode``h]jp)}(hjQh]hstruct xbc_node **vnode}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1johjOubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjKubj )}(hhh]h)}(h&A container pointer of XBC value node.h]h&A container pointer of XBC value node.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhKhjgubah}(h]h ]h"]h$]h&]uh1j hjKubeh}(h]h ]h"]h$]h&]uh1jr hjfhKhjubeh}(h]h ]h"]h$]h&]uh1jm hjubh)}(h**Description**h]jX )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubh)}(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 }(hjhhhNhNubjX )}(h**key**h]hkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubhU from whole of XBC tree and return the value if found. Found value node is stored in }(hjhhhNhNubjX )}(h ***vnode**h]h*vnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubh>. Note that this can return 0-length string and store NULL in }(hjhhhNhNubjX )}(h ***vnode**h]h*vnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubh for key-only (non-value) entry.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_find_node (C function)c.xbc_find_nodehNtauh1jhjhhhNhNubj )}(hhh](j )}(h1struct xbc_node * xbc_find_node (const char *key)h]j )}(h/struct xbc_node *xbc_find_node(const char *key)h](ju )}(hjx h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubjH )}(h h]h }(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjhhhjhKubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hj&hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj#ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj(modnameN classnameNj7 j: )}j= ]j@ )}j3 xbc_find_nodesbc.xbc_find_nodeasbuh1hhjhhhjhKubjH )}(h h]h }(hjGhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjhhhjhKubj )}(hj h]h*}(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubjY )}(h xbc_find_nodeh]j )}(hjDh]h xbc_find_node}(hjfhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjbubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hjhhhjhKubjt )}(h(const char *key)h]jz )}(hconst char *keyh](ju )}(hjh]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj}ubjH )}(h h]h }(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj}ubj )}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj}ubjH )}(h h]h }(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj}ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj}ubj )}(hkeyh]hkey}(hjhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj}ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hjyubah}(h]h ]h"]h$]h&]hhuh1js hjhhhjhKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjhhhjhKubah}(h]jah ](j j eh"]h$]h&]j# j$ )j% huh1j hjhKhjhhubj' )}(hhh]h)}(h!Find a node which matches the keyh]h!Find a node which matches the key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j& hjhhhjhKubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH jjI jjJ jK jL uh1j hhhjhNhNubjN )}(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](h)}(h**Parameters**h]jX )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj ubjn )}(hhh]js )}(h``const char *key`` Search key h](jy )}(h``const char *key``h]jp)}(hj0h]hconst char *key}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1johj.ubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj*ubj )}(hhh]h)}(h Search keyh]h Search key}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhKhjFubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1jr hjEhKhj'ubah}(h]h ]h"]h$]h&]uh1jm hj ubh)}(h**Description**h]jX )}(hjkh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjiubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj ubh)}(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 }(hjhhhNhNubjX )}(h**key**h]hkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubhQ from whole of XBC tree and return the node if found. If not found, returns NULL.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_node_get_subkey (C function)c.xbc_node_get_subkeyhNtauh1jhjhhhNhNubj )}(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](ju )}(hjx h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubjH )}(h h]h }(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjhhhjhKubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hjhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetjmodnameN classnameNj7 j: )}j= ]j@ )}j3 xbc_node_get_subkeysbc.xbc_node_get_subkeyasbuh1hhjhhhjhKubjH )}(h h]h }(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjhhhjhKubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubjY )}(hxbc_node_get_subkeyh]j )}(hjh]hxbc_node_get_subkey}(hj!hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hjhhhjhKubjt )}(h(struct xbc_node *node)h]jz )}(hstruct xbc_node *nodeh](ju )}(hjx h]hstruct}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj8ubjH )}(h h]h }(hjIhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj8ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hjZhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjWubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj\modnameN classnameNj7 j: )}j= ]jc.xbc_node_get_subkeyasbuh1hhj8ubjH )}(h h]h }(hjxhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj8ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj8ubj )}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hj4ubah}(h]h ]h"]h$]h&]hhuh1js hjhhhjhKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjhhhjhKubah}(h]jah ](j j eh"]h$]h&]j# j$ )j% huh1j hjhKhjhhubj' )}(hhh]h)}(h&Return the first subkey node if existsh]h&Return the first subkey node if exists}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j& hjhhhjhKubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH jjI jjJ jK jL uh1j hhhjhNhNubjN )}(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](h)}(h**Parameters**h]jX )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubjn )}(hhh]js )}(h&``struct xbc_node *node`` Parent node h](jy )}(h``struct xbc_node *node``h]jp)}(hjh]hstruct xbc_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]h)}(h Parent nodeh]h Parent node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jr hjhKhjubah}(h]h ]h"]h$]h&]uh1jm hjubh)}(h**Description**h]jX )}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj7ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubh)}(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 }(hjOhhhNhNubjX )}(h**node**h]hnode}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjOubh . If the }(hjOhhhNhNubjX )}(h**node**h]hnode}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjOubh8 has no child or only value node, this will return NULL.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j "xbc_array_for_each_value (C macro)c.xbc_array_for_each_valuehNtauh1jhjhhhNhNubj )}(hhh](j )}(hxbc_array_for_each_valueh]j )}(hxbc_array_for_each_valueh]jY )}(hxbc_array_for_each_valueh]j )}(hjh]hxbc_array_for_each_value}(hjhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhj uh1j j j hjhhhjhKubah}(h]jah ](j j eh"]h$]h&]j# j$ )j% huh1j hjhKhjhhubj' )}(hhh]h}(h]h ]h"]h$]h&]uh1j& hjhhhjhKubeh}(h]h ](j1 macroeh"]h$]h&]jG j1 jH jjI jjJ jK jL uh1j hhhjhNhNubh)}(h+``xbc_array_for_each_value (anode, value)``h]jp)}(hjh]h'xbc_array_for_each_value (anode, value)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubh block_quote)}(h Iterate value nodes on an array h]h)}(hIterate value nodes on an arrayh]hIterate value nodes on an array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubjN )}(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](h)}(h**Parameters**h]jX )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj ubjn )}(hhh](js )}(h$``anode`` An XBC arraied value node h](jy )}(h ``anode``h]jp)}(hj.h]hanode}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1johj,ubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj(ubj )}(hhh]h)}(hAn XBC arraied value nodeh]hAn XBC arraied value node}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChKhjDubah}(h]h ]h"]h$]h&]uh1j hj(ubeh}(h]h ]h"]h$]h&]uh1jr hjChKhj%ubjs )}(h``value`` A value h](jy )}(h ``value``h]jp)}(hjgh]hvalue}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1johjeubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjaubj )}(hhh]h)}(hA valueh]hA value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hKhj}ubah}(h]h ]h"]h$]h&]uh1j hjaubeh}(h]h ]h"]h$]h&]uh1jr hj|hKhj%ubeh}(h]h ]h"]h$]h&]uh1jm hj ubh)}(h**Description**h]jX )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj ubh)}(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 }(hjhhhNhNubjX )}(h **anode**h]hanode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW 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&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j !xbc_node_for_each_child (C macro)c.xbc_node_for_each_childhNtauh1jhjhhhNhNubj )}(hhh](j )}(hxbc_node_for_each_childh]j )}(hxbc_node_for_each_childh]jY )}(hxbc_node_for_each_childh]j )}(hjh]hxbc_node_for_each_child}(hjhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhj uh1j j j hjhhhjhKubah}(h]jah ](j j eh"]h$]h&]j# j$ )j% huh1j hjhKhjhhubj' )}(hhh]h}(h]h ]h"]h$]h&]uh1j& hjhhhjhKubeh}(h]h ](j1 macroeh"]h$]h&]jG j1 jH j)jI j)jJ jK jL uh1j hhhjhNhNubh)}(h+``xbc_node_for_each_child (parent, child)``h]jp)}(hj/h]h'xbc_node_for_each_child (parent, child)}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1johj-ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubj)}(hIterate child nodes h]h)}(hIterate child nodesh]hIterate child nodes}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjEubah}(h]h ]h"]h$]h&]uh1jhjWhKhjhhubjN )}(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](h)}(h**Parameters**h]jX )}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjbubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj^ubjn )}(hhh](js )}(h``parent`` An XBC node. h](jy )}(h ``parent``h]jp)}(hjh]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj}ubj )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hj}ubeh}(h]h ]h"]h$]h&]uh1jr hjhKhjzubjs )}(h``child`` Iterated XBC node. h](jy )}(h ``child``h]jp)}(hjh]hchild}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]h)}(hIterated XBC node.h]hIterated XBC node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jr hjhKhjzubeh}(h]h ]h"]h$]h&]uh1jm hj^ubh)}(h**Description**h]jX )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj^ubh)}(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 hhhNhNubjX )}(h **parent**h]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj ubh!. Each child nodes are stored to }(hj hhhNhNubjX )}(h **child**h]hchild}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj ubh. The }(hj hhhNhNubjX )}(h **child**h]hchild}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj ubh1 can be mixture of a value node and subkey nodes.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j "xbc_node_for_each_subkey (C macro)c.xbc_node_for_each_subkeyhNtauh1jhjhhhNhNubj )}(hhh](j )}(hxbc_node_for_each_subkeyh]j )}(hxbc_node_for_each_subkeyh]jY )}(hxbc_node_for_each_subkeyh]j )}(hjlh]hxbc_node_for_each_subkey}(hjvhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjrubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hjnhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhj uh1j j j hjjhhhjhKubah}(h]jeah ](j j eh"]h$]h&]j# j$ )j% huh1j hjhKhjghhubj' )}(hhh]h}(h]h ]h"]h$]h&]uh1j& hjghhhjhKubeh}(h]h ](j1 macroeh"]h$]h&]jG j1 jH jjI jjJ jK jL uh1j hhhjhNhNubh)}(h,``xbc_node_for_each_subkey (parent, child)``h]jp)}(hjh]h(xbc_node_for_each_subkey (parent, child)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubj)}(hIterate child subkey nodes h]h)}(hIterate child subkey nodesh]hIterate child subkey nodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubjN )}(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](h)}(h**Parameters**h]jX )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubjn )}(hhh](js )}(h``parent`` An XBC node. h](jy )}(h ``parent``h]jp)}(hjh]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jr hjhKhjubjs )}(h``child`` Iterated XBC node. h](jy )}(h ``child``h]jp)}(hj5h]hchild}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1johj3ubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj/ubj )}(hhh]h)}(hIterated XBC node.h]hIterated XBC node.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhKhjKubah}(h]h ]h"]h$]h&]uh1j hj/ubeh}(h]h ]h"]h$]h&]uh1jr hjJhKhjubeh}(h]h ]h"]h$]h&]uh1jm hjubh)}(h**Description**h]jX )}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjnubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubh)}(htIterate subkey nodes of **parent**. Each child nodes are stored to **child**. The **child** is only the subkey node.h](hIterate subkey nodes of }(hjhhhNhNubjX )}(h **parent**h]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubh!. Each child nodes are stored to }(hjhhhNhNubjX )}(h **child**h]hchild}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubh. The }(hjhhhNhNubjX )}(h **child**h]hchild}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubh is only the subkey node.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j 'xbc_node_for_each_array_value (C macro)c.xbc_node_for_each_array_valuehNtauh1jhjhhhNhNubj )}(hhh](j )}(hxbc_node_for_each_array_valueh]j )}(hxbc_node_for_each_array_valueh]jY )}(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 ](jn jo eh"]h$]h&]hhuh1jX hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhj uh1j j j hjhhhjhKubah}(h]jah ](j j eh"]h$]h&]j# j$ )j% huh1j hjhKhjhhubj' )}(hhh]h}(h]h ]h"]h$]h&]uh1j& hjhhhjhKubeh}(h]h ](j1 macroeh"]h$]h&]jG j1 jH jjI jjJ jK jL uh1j hhhjhNhNubh)}(h;``xbc_node_for_each_array_value (node, key, anode, value)``h]jp)}(hj!h]h7xbc_node_for_each_array_value (node, key, anode, value)}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubj)}(h#Iterate array entries of geven key h]h)}(h"Iterate array entries of geven keyh]h"Iterate array entries of geven key}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj7ubah}(h]h ]h"]h$]h&]uh1jhjIhKhjhhubjN )}(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](h)}(h**Parameters**h]jX )}(hjVh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjTubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjPubjn )}(hhh](js )}(h``node`` An XBC node. h](jy )}(h``node``h]jp)}(hjuh]hnode}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1johjsubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjoubj )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjoubeh}(h]h ]h"]h$]h&]uh1jr hjhKhjlubjs )}(h-``key`` A key string searched under **node** h](jy )}(h``key``h]jp)}(hjh]hkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]h)}(h$A key string searched under **node**h](hA key string searched under }(hjhhhNhNubjX )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jr hjhKhjlubjs )}(h,``anode`` Iterated XBC node of array entry. h](jy )}(h ``anode``h]jp)}(hjh]hanode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]h)}(h!Iterated XBC node of array entry.h]h!Iterated XBC node of array entry.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jr hj hKhjlubjs )}(h)``value`` Iterated value of array entry. h](jy )}(h ``value``h]jp)}(hj.h]hvalue}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1johj,ubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj(ubj )}(hhh]h)}(hIterated value of array entry.h]hIterated value of array entry.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChKhjDubah}(h]h ]h"]h$]h&]uh1j hj(ubeh}(h]h ]h"]h$]h&]uh1jr hjChKhjlubeh}(h]h ]h"]h$]h&]uh1jm hjPubh)}(h**Description**h]jX )}(hjih]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjgubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjPubh)}(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 }(hjhhhNhNubjX )}(h**key**h]hkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubh under }(hjhhhNhNubjX )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubh%. Each array entry node is stored to }(hjhhhNhNubjX )}(h **anode**h]hanode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubh and }(hjhhhNhNubjX )}(h **value**h]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubh . If the }(hjhhhNhNubjX )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubh doesn’t have }(hjhhhNhNubjX )}(h**key**h]hkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW 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&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j %xbc_node_for_each_key_value (C macro)c.xbc_node_for_each_key_valuehNtauh1jhjhhhNhNubj )}(hhh](j )}(hxbc_node_for_each_key_valueh]j )}(hxbc_node_for_each_key_valueh]jY )}(hxbc_node_for_each_key_valueh]j )}(hjh]hxbc_node_for_each_key_value}(hjhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhj uh1j j j hjhhhj1hKubah}(h]j ah ](j j eh"]h$]h&]j# j$ )j% huh1j hj1hKhjhhubj' )}(hhh]h}(h]h ]h"]h$]h&]uh1j& hjhhhj1hKubeh}(h]h ](j1 macroeh"]h$]h&]jG j1 jH jJjI jJjJ jK jL uh1j hhhjhNhNubh)}(h4``xbc_node_for_each_key_value (node, knode, value)``h]jp)}(hjPh]h0xbc_node_for_each_key_value (node, knode, value)}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1johjNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjhhubj)}(h%Iterate key-value pairs under a node h]h)}(h$Iterate key-value pairs under a nodeh]h$Iterate key-value pairs under a node}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjfubah}(h]h ]h"]h$]h&]uh1jhjxhKhjhhubjN )}(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](h)}(h**Parameters**h]jX )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubjn )}(hhh](js )}(h``node`` An XBC node. h](jy )}(h``node``h]jp)}(hjh]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jr hjhKhjubjs )}(h``knode`` Iterated key node h](jy )}(h ``knode``h]jp)}(hjh]hknode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]h)}(hIterated key nodeh]hIterated key node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jr hjhKhjubjs )}(h ``value`` Iterated value string h](jy )}(h ``value``h]jp)}(hjh]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubj )}(hhh]h)}(hIterated value stringh]hIterated value string}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKhj,ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jr hj+hKhjubeh}(h]h ]h"]h$]h&]uh1jm hjubh)}(h**Description**h]jX )}(hjQh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjOubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubh)}(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 }(hjghhhNhNubjX )}(h**node**h]hnode}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjgubh/. Each key node and value string are stored in }(hjghhhNhNubjX )}(h **knode**h]hknode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjgubh and }(hjghhhNhNubjX )}(h **value**h]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjgubh respectively.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_for_each_key_value (C macro)c.xbc_for_each_key_valuehNtauh1jhjhhhNhNubj )}(hhh](j )}(hxbc_for_each_key_valueh]j )}(hxbc_for_each_key_valueh]jY )}(hxbc_for_each_key_valueh]j )}(hjh]hxbc_for_each_key_value}(hjhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhj uh1j j j hjhhhjhKubah}(h]jah ](j j eh"]h$]h&]j# j$ )j% huh1j hjhKhjhhubj' )}(hhh]h}(h]h ]h"]h$]h&]uh1j& hjhhhjhKubeh}(h]h ](j1 macroeh"]h$]h&]jG j1 jH jjI jjJ jK jL uh1j hhhjhNhNubh)}(h)``xbc_for_each_key_value (knode, value)``h]jp)}(hj h]h%xbc_for_each_key_value (knode, value)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1johj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhjhhubj)}(hIterate key-value pairs h]h)}(hIterate key-value pairsh]hIterate key-value pairs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhj* hKhjhhubjN )}(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](h)}(h**Parameters**h]jX )}(hj7 h]h Parameters}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj5 ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj1 ubjn )}(hhh](js )}(h``knode`` Iterated key node h](jy )}(h ``knode``h]jp)}(hjV h]hknode}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1johjT ubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhKhjP ubj )}(hhh]h)}(hIterated key nodeh]hIterated key node}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk hKhjl ubah}(h]h ]h"]h$]h&]uh1j hjP ubeh}(h]h ]h"]h$]h&]uh1jr hjk hKhjM ubjs )}(h ``value`` Iterated value string h](jy )}(h ``value``h]jp)}(hj h]hvalue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1johj ubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj ubj )}(hhh]h)}(hIterated value stringh]hIterated value string}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jr hj hMhjM ubeh}(h]h ]h"]h$]h&]uh1jm hj1 ubh)}(h**Description**h]jX )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj1 ubh)}(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 hhhNhNubjX )}(h **knode**h]hknode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj ubh and }(hj hhhNhNubjX )}(h **value**h]hvalue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj ubh respectively.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj1 ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j !xbc_node_compose_key (C function)c.xbc_node_compose_keyhNtauh1jhjhhhNhNubj )}(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}(hj3!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/!hhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhM ubjH )}(h h]h }(hjB!hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj/!hhhjA!hM ubjY )}(hxbc_node_compose_keyh]j )}(hxbc_node_compose_keyh]hxbc_node_compose_key}(hjT!hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjP!ubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hj/!hhhjA!hM ubjt )}(h/(struct xbc_node *node, char *buf, size_t size)h](jz )}(hstruct xbc_node *nodeh](ju )}(hjx h]hstruct}(hjp!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hjl!ubjH )}(h h]h }(hj}!hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjl!ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hj!hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj!ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj!modnameN classnameNj7 j: )}j= ]j@ )}j3 jV!sbc.xbc_node_compose_keyasbuh1hhjl!ubjH )}(h h]h }(hj!hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjl!ubj )}(hj h]h*}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjl!ubj )}(hnodeh]hnode}(hj!hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjl!ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hjh!ubjz )}(h char *bufh](j )}(hcharh]hchar}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!ubjH )}(h h]h }(hj!hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG 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&]noemphhhuh1jy hjh!ubjz )}(h size_t sizeh](h)}(hhh]j )}(hsize_th]hsize_t}(hj'"hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj$"ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj)"modnameN classnameNj7 j: )}j= ]j!c.xbc_node_compose_keyasbuh1hhj "ubjH )}(h h]h }(hjE"hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj "ubj )}(hsizeh]hsize}(hjS"hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj "ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hjh!ubeh}(h]h ]h"]h$]h&]hhuh1js hj/!hhhjA!hM ubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj+!hhhjA!hM ubah}(h]j&!ah ](j j eh"]h$]h&]j# j$ )j% huh1j hjA!hM hj(!hhubj' )}(hhh]h)}(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&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhM hjz"hhubah}(h]h ]h"]h$]h&]uh1j& hj(!hhhjA!hM ubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH j"jI j"jJ jK jL uh1j hhhjhNhNubjN )}(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](h)}(h**Parameters**h]jX )}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj"ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj"ubjn )}(hhh](js )}(h'``struct xbc_node *node`` An XBC node. h](jy )}(h``struct xbc_node *node``h]jp)}(hj"h]hstruct xbc_node *node}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1johj"ubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj"ubj )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1jr hj"hMhj"ubjs )}(h)``char *buf`` A buffer to store the key. h](jy )}(h ``char *buf``h]jp)}(hj"h]h char *buf}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1johj"ubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj"ubj )}(hhh]h)}(hA buffer to store the key.h]hA buffer to store the key.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj #hMhj #ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1jr hj #hMhj"ubjs )}(h)``size_t size`` The size of the **buf**. h](jy )}(h``size_t size``h]jp)}(hj0#h]h size_t size}(hj2#hhhNhNubah}(h]h ]h"]h$]h&]uh1johj.#ubah}(h]h ]h"]h$]h&]uh1jx hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj*#ubj )}(hhh]h)}(hThe size of the **buf**.h](hThe size of the }(hjI#hhhNhNubjX )}(h**buf**h]hbuf}(hjQ#hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjI#ubh.}(hjI#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjE#hMhjF#ubah}(h]h ]h"]h$]h&]uh1j hj*#ubeh}(h]h ]h"]h$]h&]uh1jr hjE#hMhj"ubeh}(h]h ]h"]h$]h&]uh1jm hj"ubh)}(h**Description**h]jX )}(hj}#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj{#ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj"ubh)}(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#hhhNhNubjX )}(h**node**h]hnode}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj#ubh into }(hj#hhhNhNubjX )}(h**buf**h]hbuf}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj#ubh0. Returns the total length of the key stored in }(hj#hhhNhNubjX )}(h**buf**h]hbuf}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj#ubh. Or returns -EINVAL if }(hj#hhhNhNubjX )}(h**node**h]hnode}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj#ubh@ is NULL, and -ERANGE if the key depth is deeper than max depth.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:333: ./include/linux/bootconfig.hhMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_get_info (C function)c.xbc_get_infohNtauh1jhjhhhNhNubj )}(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}(hj $hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj$hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKSubjH )}(h h]h }(hj$hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj$hhhj$hKSubjY )}(h xbc_get_infoh]j )}(h xbc_get_infoh]h xbc_get_info}(hj+$hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj'$ubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hj$hhhj$hKSubjt )}(h#(int *node_size, size_t *data_size)h](jz )}(hint *node_sizeh](j )}(hinth]hint}(hjG$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjC$ubjH )}(h h]h }(hjU$hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjC$ubj )}(hj h]h*}(hjc$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjC$ubj )}(h node_sizeh]h node_size}(hjp$hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjC$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hj?$ubjz )}(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&] refdomainj1 reftypej3 reftargetj$modnameN classnameNj7 j: )}j= ]j@ )}j3 j-$sbc.xbc_get_infoasbuh1hhj$ubjH )}(h h]h }(hj$hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG 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&]noemphhhuh1jy hj?$ubeh}(h]h ]h"]h$]h&]hhuh1js hj$hhhj$hKSubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj$hhhj$hKSubah}(h]j#ah ](j j eh"]h$]h&]j# j$ )j% huh1j hj$hKShj#hhubj' )}(hhh]h)}(h)Get the information of loaded boot configh]h)Get the information of loaded boot config}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKShj$hhubah}(h]h ]h"]h$]h&]uh1j& hj#hhhj$hKSubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH j %jI j %jJ jK jL uh1j hhhjhNhNubjN )}(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](h)}(h**Parameters**h]jX )}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj%ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKWhj %ubjn )}(hhh](js )}(h;``int *node_size`` A pointer to store the number of nodes. h](jy )}(h``int *node_size``h]jp)}(hj2%h]hint *node_size}(hj4%hhhNhNubah}(h]h ]h"]h$]h&]uh1johj0%ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKThj,%ubj )}(hhh]h)}(h'A pointer to store the number of nodes.h]h'A pointer to store the number of nodes.}(hjK%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG%hKThjH%ubah}(h]h ]h"]h$]h&]uh1j hj,%ubeh}(h]h ]h"]h$]h&]uh1jr hjG%hKThj)%ubjs )}(hF``size_t *data_size`` A pointer to store the size of bootconfig data. h](jy )}(h``size_t *data_size``h]jp)}(hjk%h]hsize_t *data_size}(hjm%hhhNhNubah}(h]h ]h"]h$]h&]uh1johji%ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKUhje%ubj )}(hhh]h)}(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&]uh1hhj%hKUhj%ubah}(h]h ]h"]h$]h&]uh1j hje%ubeh}(h]h ]h"]h$]h&]uh1jr hj%hKUhj)%ubeh}(h]h ]h"]h$]h&]uh1jm hj %ubh)}(h**Description**h]jX )}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj%ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKWhj %ubh)}(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%hhhNhNubjX )}(h **node_size**h]h node_size}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj%ubh7 if it is not NULL, and the size of bootconfig data in }(hj%hhhNhNubjX )}(h **data_size**h]h data_size}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jW 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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKVhj %ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_root_node (C function)c.xbc_root_nodehNtauh1jhjhhhNhNubj )}(hhh](j )}(h&struct xbc_node * xbc_root_node (void)h]j )}(h$struct xbc_node *xbc_root_node(void)h](ju )}(hjx h]hstruct}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj &hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKpubjH )}(h h]h }(hj&hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj &hhhj&hKpubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hj.&hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj+&ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj0&modnameN classnameNj7 j: )}j= ]j@ )}j3 xbc_root_nodesbc.xbc_root_nodeasbuh1hhj &hhhj&hKpubjH )}(h h]h }(hjO&hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj &hhhj&hKpubj )}(hj h]h*}(hj]&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj &hhhj&hKpubjY )}(h xbc_root_nodeh]j )}(hjL&h]h xbc_root_node}(hjn&hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjj&ubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hj &hhhj&hKpubjt )}(h(void)h]jz )}(hvoidh]j )}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&ubah}(h]h ]h"]h$]h&]noemphhhuh1jy hj&ubah}(h]h ]h"]h$]h&]hhuh1js hj &hhhj&hKpubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj&hhhj&hKpubah}(h]j&ah ](j j eh"]h$]h&]j# j$ )j% huh1j hj&hKphj&hhubj' )}(hhh]h)}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKphj&hhubah}(h]h ]h"]h$]h&]uh1j& hj&hhhj&hKpubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH j&jI j&jJ jK jL uh1j hhhjhNhNubjN )}(h**Parameters** ``void`` no arguments **Description** Return the address of root node of extended boot config. If the extended boot config is not initiized, return NULL.h](h)}(h**Parameters**h]jX )}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj&ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKthj&ubjn )}(hhh]js )}(h``void`` no arguments h](jy )}(h``void``h]jp)}(hj&h]hvoid}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1johj&ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj&ubj )}(hhh]h)}(h no argumentsh]h no arguments}(hj 'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 'hKhj 'ubah}(h]h ]h"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]uh1jr hj 'hKhj&ubah}(h]h ]h"]h$]h&]uh1jm hj&ubh)}(h**Description**h]jX )}(hj/'h]h Description}(hj1'hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj-'ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj&ubh)}(hsReturn the address of root node of extended boot config. If the extended boot config is not initiized, return NULL.h]hsReturn the address of root node of extended boot config. If the extended boot config is not initiized, return NULL.}(hjE'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKqhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_node_index (C function)c.xbc_node_indexhNtauh1jhjhhhNhNubj )}(hhh](j )}(h*int xbc_node_index (struct xbc_node *node)h]j )}(h)int xbc_node_index(struct xbc_node *node)h](j )}(hinth]hint}(hjt'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjp'hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chK~ubjH )}(h h]h }(hj'hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjp'hhhj'hK~ubjY )}(hxbc_node_indexh]j )}(hxbc_node_indexh]hxbc_node_index}(hj'hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj'ubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hjp'hhhj'hK~ubjt )}(h(struct xbc_node *node)h]jz )}(hstruct xbc_node *nodeh](ju )}(hjx h]hstruct}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj'ubjH )}(h h]h }(hj'hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj'ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hj'hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj'ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj'modnameN classnameNj7 j: )}j= ]j@ )}j3 j'sbc.xbc_node_indexasbuh1hhj'ubjH )}(h h]h }(hj'hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG 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&]noemphhhuh1jy hj'ubah}(h]h ]h"]h$]h&]hhuh1js hjp'hhhj'hK~ubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjl'hhhj'hK~ubah}(h]jg'ah ](j j eh"]h$]h&]j# j$ )j% huh1j hj'hK~hji'hhubj' )}(hhh]h)}(hGet the index of XBC nodeh]hGet the index of XBC node}(hj4(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chK~hj1(hhubah}(h]h ]h"]h$]h&]uh1j& hji'hhhj'hK~ubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH jL(jI jL(jJ jK jL uh1j hhhjhNhNubjN )}(h**Parameters** ``struct xbc_node *node`` A target node of getting index. **Description** Return the index number of **node** in XBC node list.h](h)}(h**Parameters**h]jX )}(hjV(h]h Parameters}(hjX(hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjT(ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhjP(ubjn )}(hhh]js )}(h:``struct xbc_node *node`` A target node of getting index. h](jy )}(h``struct xbc_node *node``h]jp)}(hju(h]hstruct xbc_node *node}(hjw(hhhNhNubah}(h]h ]h"]h$]h&]uh1johjs(ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhjo(ubj )}(hhh]h)}(hA target node of getting index.h]hA target node of getting index.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hKhj(ubah}(h]h ]h"]h$]h&]uh1j hjo(ubeh}(h]h ]h"]h$]h&]uh1jr hj(hKhjl(ubah}(h]h ]h"]h$]h&]uh1jm hjP(ubh)}(h**Description**h]jX )}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj(ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhjP(ubh)}(h5Return the index number of **node** in XBC node list.h](hReturn the index number of }(hj(hhhNhNubjX )}(h**node**h]hnode}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj(ubh in XBC node list.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhjP(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_node_get_parent (C function)c.xbc_node_get_parenthNtauh1jhjhhhNhNubj )}(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](ju )}(hjx h]hstruct}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj)hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKubjH )}(h h]h }(hj)hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj)hhhj)hKubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hj&)hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj#)ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj()modnameN classnameNj7 j: )}j= ]j@ )}j3 xbc_node_get_parentsbc.xbc_node_get_parentasbuh1hhj)hhhj)hKubjH )}(h h]h }(hjG)hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj)hhhj)hKubj )}(hj h]h*}(hjU)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)hhhj)hKubjY )}(hxbc_node_get_parenth]j )}(hjD)h]hxbc_node_get_parent}(hjf)hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjb)ubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hj)hhhj)hKubjt )}(h(struct xbc_node *node)h]jz )}(hstruct xbc_node *nodeh](ju )}(hjx h]hstruct}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj})ubjH )}(h h]h }(hj)hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj})ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hj)hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj)ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj)modnameN classnameNj7 j: )}j= ]jB)c.xbc_node_get_parentasbuh1hhj})ubjH )}(h h]h }(hj)hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG 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&]noemphhhuh1jy hjy)ubah}(h]h ]h"]h$]h&]hhuh1js hj)hhhj)hKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj(hhhj)hKubah}(h]j(ah ](j j eh"]h$]h&]j# j$ )j% huh1j hj)hKhj(hhubj' )}(hhh]h)}(hGet the parent XBC nodeh]hGet the parent XBC node}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj)hhubah}(h]h ]h"]h$]h&]uh1j& hj(hhhj)hKubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH j*jI j*jJ jK jL uh1j hhhjhNhNubjN )}(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](h)}(h**Parameters**h]jX )}(hj$*h]h Parameters}(hj&*hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj"*ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj*ubjn )}(hhh]js )}(h'``struct xbc_node *node`` An XBC node. h](jy )}(h``struct xbc_node *node``h]jp)}(hjC*h]hstruct xbc_node *node}(hjE*hhhNhNubah}(h]h ]h"]h$]h&]uh1johjA*ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj=*ubj )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hj\*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjX*hKhjY*ubah}(h]h ]h"]h$]h&]uh1j hj=*ubeh}(h]h ]h"]h$]h&]uh1jr hjX*hKhj:*ubah}(h]h ]h"]h$]h&]uh1jm hj*ubh)}(h**Description**h]jX )}(hj~*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj|*ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj*ubh)}(hUReturn the parent node of **node**. If the node is top node of the tree, return NULL.h](hReturn the parent node of }(hj*hhhNhNubjX )}(h**node**h]hnode}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj*ubh3. If the node is top node of the tree, return NULL.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_node_get_child (C function)c.xbc_node_get_childhNtauh1jhjhhhNhNubj )}(hhh](j )}(hReturn the data (which is always a null terminated string) of }(hj0hhhNhNubjX )}(h**node**h]hnode}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj0ubh5. If the node has invalid data, warn and return NULL.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j !xbc_node_find_subkey (C function)c.xbc_node_find_subkeyhNtauh1jhjhhhNhNubj )}(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](ju )}(hjx h]hstruct}(hjP0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hjL0hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKubjH )}(h h]h }(hj^0hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjL0hhhj]0hKubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hjo0hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjl0ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetjq0modnameN classnameNj7 j: )}j= ]j@ )}j3 xbc_node_find_subkeysbc.xbc_node_find_subkeyasbuh1hhjL0hhhj]0hKubjH )}(h h]h }(hj0hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjL0hhhj]0hKubj )}(hj h]h*}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjL0hhhj]0hKubjY )}(hxbc_node_find_subkeyh]j )}(hj0h]hxbc_node_find_subkey}(hj0hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj0ubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hjL0hhhj]0hKubjt )}(h*(struct xbc_node *parent, const char *key)h](jz )}(hstruct xbc_node *parenth](ju )}(hjx h]hstruct}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj0ubjH )}(h h]h }(hj0hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj0ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hj0hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj0ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj0modnameN classnameNj7 j: )}j= ]j0c.xbc_node_find_subkeyasbuh1hhj0ubjH )}(h h]h }(hj1hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj0ubj )}(hj h]h*}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubj )}(hparenth]hparent}(hj!1hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hj0ubjz )}(hconst char *keyh](ju )}(hjh]hconst}(hj:1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj61ubjH )}(h h]h }(hjG1hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj61ubj )}(hcharh]hchar}(hjU1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj61ubjH )}(h h]h }(hjc1hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj61ubj )}(hj h]h*}(hjq1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj61ubj )}(hkeyh]hkey}(hj~1hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj61ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hj0ubeh}(h]h ]h"]h$]h&]hhuh1js hjL0hhhj]0hKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjH0hhhj]0hKubah}(h]jC0ah ](j j eh"]h$]h&]j# j$ )j% huh1j hj]0hKhjE0hhubj' )}(hhh]h)}(h*Find a subkey node which matches given keyh]h*Find a subkey node which matches given key}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj1hhubah}(h]h ]h"]h$]h&]uh1j& hjE0hhhj]0hKubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH j1jI j1jJ jK jL uh1j hhhjhNhNubjN )}(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](h)}(h**Parameters**h]jX )}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj1ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj1ubjn )}(hhh](js )}(h)``struct xbc_node *parent`` An XBC node. h](jy )}(h``struct xbc_node *parent``h]jp)}(hj1h]hstruct xbc_node *parent}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1johj1ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj1ubj )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKhj1ubah}(h]h ]h"]h$]h&]uh1j hj1ubeh}(h]h ]h"]h$]h&]uh1jr hj1hKhj1ubjs )}(h"``const char *key`` A key string. h](jy )}(h``const char *key``h]jp)}(hj"2h]hconst char *key}(hj$2hhhNhNubah}(h]h ]h"]h$]h&]uh1johj 2ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj2ubj )}(hhh]h)}(h A key string.h]h A key string.}(hj;2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj72hKhj82ubah}(h]h ]h"]h$]h&]uh1j hj2ubeh}(h]h ]h"]h$]h&]uh1jr hj72hKhj1ubeh}(h]h ]h"]h$]h&]uh1jm hj1ubh)}(h**Description**h]jX )}(hj]2h]h Description}(hj_2hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj[2ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj1ubh)}(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 }(hjs2hhhNhNubjX )}(h **parent**h]hparent}(hj{2hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjs2ubh which matches }(hjs2hhhNhNubjX )}(h**key**h]hkey}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjs2ubh. The }(hjs2hhhNhNubjX )}(h**key**h]hkey}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjs2ubh4 can contain several words jointed with ‘.’. If }(hjs2hhhNhNubjX )}(h **parent**h]hparent}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjs2ubhT is NULL, this searches the node from whole tree. Return NULL if no node is matched.}(hjs2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_node_find_value (C function)c.xbc_node_find_valuehNtauh1jhjhhhNhNubj )}(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](ju )}(hjh]hconst}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj2hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKubjH )}(h h]h }(hj2hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj2hhhj2hKubj )}(hcharh]hchar}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj2hhhj2hKubjH )}(h h]h }(hj3hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj2hhhj2hKubj )}(hj h]h*}(hj"3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj2hhhj2hKubjY )}(hxbc_node_find_valueh]j )}(hxbc_node_find_valueh]hxbc_node_find_value}(hj33hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj/3ubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hj2hhhj2hKubjt )}(hC(struct xbc_node *parent, const char *key, struct xbc_node **vnode)h](jz )}(hstruct xbc_node *parenth](ju )}(hjx h]hstruct}(hjO3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hjK3ubjH )}(h h]h }(hj\3hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjK3ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hjm3hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjj3ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetjo3modnameN classnameNj7 j: )}j= ]j@ )}j3 j53sbc.xbc_node_find_valueasbuh1hhjK3ubjH )}(h h]h }(hj3hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjK3ubj )}(hj h]h*}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjK3ubj )}(hparenth]hparent}(hj3hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjK3ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hjG3ubjz )}(hconst char *keyh](ju )}(hjh]hconst}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj3ubjH )}(h h]h }(hj3hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj3ubj )}(hcharh]hchar}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubjH )}(h h]h }(hj3hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj3ubj )}(hj h]h*}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj )}(hkeyh]hkey}(hj4hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hjG3ubjz )}(hstruct xbc_node **vnodeh](ju )}(hjx h]hstruct}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj4ubjH )}(h h]h }(hj+4hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj4ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hj<4hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj94ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj>4modnameN classnameNj7 j: )}j= ]j3c.xbc_node_find_valueasbuh1hhj4ubjH )}(h h]h }(hjZ4hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj4ubj )}(hj h]h*}(hjh4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4ubj )}(hj h]h*}(hju4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4ubj )}(hvnodeh]hvnode}(hj4hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hjG3ubeh}(h]h ]h"]h$]h&]hhuh1js hj2hhhj2hKubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj2hhhj2hKubah}(h]j2ah ](j j eh"]h$]h&]j# j$ )j% huh1j hj2hKhj2hhubj' )}(hhh]h)}(h)Find a value node which matches given keyh]h)Find a value node which matches given key}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj4hhubah}(h]h ]h"]h$]h&]uh1j& hj2hhhj2hKubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH j4jI j4jJ jK jL uh1j hhhjhNhNubjN )}(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](h)}(h**Parameters**h]jX )}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj4ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj4ubjn )}(hhh](js )}(h)``struct xbc_node *parent`` An XBC node. h](jy )}(h``struct xbc_node *parent``h]jp)}(hj4h]hstruct xbc_node *parent}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1johj4ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj4ubj )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hKhj5ubah}(h]h ]h"]h$]h&]uh1j hj4ubeh}(h]h ]h"]h$]h&]uh1jr hj5hKhj4ubjs )}(h"``const char *key`` A key string. h](jy )}(h``const char *key``h]jp)}(hj&5h]hconst char *key}(hj(5hhhNhNubah}(h]h ]h"]h$]h&]uh1johj$5ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj 5ubj )}(hhh]h)}(h A key string.h]h A key string.}(hj?5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;5hKhj<5ubah}(h]h ]h"]h$]h&]uh1j hj 5ubeh}(h]h ]h"]h$]h&]uh1jr hj;5hKhj4ubjs )}(hC``struct xbc_node **vnode`` A container pointer of found XBC node. h](jy )}(h``struct xbc_node **vnode``h]jp)}(hj_5h]hstruct xbc_node **vnode}(hja5hhhNhNubah}(h]h ]h"]h$]h&]uh1johj]5ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhjY5ubj )}(hhh]h)}(h&A container pointer of found XBC node.h]h&A container pointer of found XBC node.}(hjx5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjt5hKhju5ubah}(h]h ]h"]h$]h&]uh1j hjY5ubeh}(h]h ]h"]h$]h&]uh1jr hjt5hKhj4ubeh}(h]h ]h"]h$]h&]uh1jm hj4ubh)}(h**Description**h]jX )}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj5ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj4ubh)}(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 }(hj5hhhNhNubjX )}(h **parent**h]hparent}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj5ubh! whose (parent) key node matches }(hj5hhhNhNubjX )}(h**key**h]hkey}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj5ubh, store it in }(hj5hhhNhNubjX )}(h ***vnode**h]h*vnode}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj5ubh$, and returns the value string. The }(hj5hhhNhNubjX )}(h**key**h]hkey}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj5ubh4 can contain several words jointed with ‘.’. If }(hj5hhhNhNubjX )}(h **parent**h]hparent}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jW 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 }(hj5hhhNhNubjX )}(h ***vnode**h]h*vnode}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jW 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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chKhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j 'xbc_node_compose_key_after (C function)c.xbc_node_compose_key_afterhNtauh1jhjhhhNhNubj )}(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}(hjK6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjG6hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMubjH )}(h h]h }(hjZ6hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjG6hhhjY6hMubjY )}(hxbc_node_compose_key_afterh]j )}(hxbc_node_compose_key_afterh]hxbc_node_compose_key_after}(hjl6hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjh6ubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hjG6hhhjY6hMubjt )}(hF(struct xbc_node *root, struct xbc_node *node, char *buf, size_t size)h](jz )}(hstruct xbc_node *rooth](ju )}(hjx h]hstruct}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj6ubjH )}(h h]h }(hj6hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj6ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hj6hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj6ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj6modnameN classnameNj7 j: )}j= ]j@ )}j3 jn6sbc.xbc_node_compose_key_afterasbuh1hhj6ubjH )}(h h]h }(hj6hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj6ubj )}(hj h]h*}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj6ubj )}(hrooth]hroot}(hj6hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hj6ubjz )}(hstruct xbc_node *nodeh](ju )}(hjx h]hstruct}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj6ubjH )}(h h]h }(hj7hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj6ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hj7hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj7ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj7modnameN classnameNj7 j: )}j= ]j6c.xbc_node_compose_key_afterasbuh1hhj6ubjH )}(h h]h }(hj67hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj6ubj )}(hj h]h*}(hjD7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj6ubj )}(hnodeh]hnode}(hjQ7hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hj6ubjz )}(h char *bufh](j )}(hcharh]hchar}(hjj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjf7ubjH )}(h h]h }(hjx7hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjf7ubj )}(hj h]h*}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjf7ubj )}(hbufh]hbuf}(hj7hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjf7ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hj6ubjz )}(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&] refdomainj1 reftypej3 reftargetj7modnameN classnameNj7 j: )}j= ]j6c.xbc_node_compose_key_afterasbuh1hhj7ubjH )}(h h]h }(hj7hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj7ubj )}(hsizeh]hsize}(hj7hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hj6ubeh}(h]h ]h"]h$]h&]hhuh1js hjG6hhhjY6hMubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjC6hhhjY6hMubah}(h]j>6ah ](j j eh"]h$]h&]j# j$ )j% huh1j hjY6hMhj@6hhubj' )}(hhh]h)}(h*Compose partial key string of the XBC nodeh]h*Compose partial key string of the XBC node}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj8hhubah}(h]h ]h"]h$]h&]uh1j& hj@6hhhjY6hMubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH j8jI j8jJ jK jL uh1j hhhjhNhNubjN )}(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](h)}(h**Parameters**h]jX )}(hj'8h]h Parameters}(hj)8hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj%8ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj!8ubjn )}(hhh](js )}(h(``struct xbc_node *root`` Root XBC node h](jy )}(h``struct xbc_node *root``h]jp)}(hjF8h]hstruct xbc_node *root}(hjH8hhhNhNubah}(h]h ]h"]h$]h&]uh1johjD8ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj@8ubj )}(hhh]h)}(h Root XBC nodeh]h Root XBC node}(hj_8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[8hMhj\8ubah}(h]h ]h"]h$]h&]uh1j hj@8ubeh}(h]h ]h"]h$]h&]uh1jr hj[8hMhj=8ubjs )}(h+``struct xbc_node *node`` Target XBC node. h](jy )}(h``struct xbc_node *node``h]jp)}(hj8h]hstruct xbc_node *node}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1johj}8ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjy8ubj )}(hhh]h)}(hTarget XBC node.h]hTarget XBC node.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1j hjy8ubeh}(h]h ]h"]h$]h&]uh1jr hj8hMhj=8ubjs )}(h)``char *buf`` A buffer to store the key. h](jy )}(h ``char *buf``h]jp)}(hj8h]h char *buf}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1johj8ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj8ubj )}(hhh]h)}(hA buffer to store the key.h]hA buffer to store the key.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jr hj8hMhj=8ubjs )}(h)``size_t size`` The size of the **buf**. h](jy )}(h``size_t size``h]jp)}(hj8h]h size_t size}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1johj8ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj8ubj )}(hhh]h)}(hThe size of the **buf**.h](hThe size of the }(hj 9hhhNhNubjX )}(h**buf**h]hbuf}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj 9ubh.}(hj 9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jr hj9hMhj=8ubeh}(h]h ]h"]h$]h&]uh1jm hj!8ubh)}(h**Description**h]jX )}(hj>9h]h Description}(hj@9hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj<9ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj!8ubh)}(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 }(hjT9hhhNhNubjX )}(h**node**h]hnode}(hj\9hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjT9ubh into }(hjT9hhhNhNubjX )}(h**buf**h]hbuf}(hjn9hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjT9ubh , which is starting right after }(hjT9hhhNhNubjX )}(h**root**h]hroot}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjT9ubh (}(hjT9hhhNhNubjX )}(h**root**h]hroot}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjT9ubh is not included.) If }(hjT9hhhNhNubjX )}(h**root**h]hroot}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjT9ubh) is NULL, this returns full key words of }(hjT9hhhNhNubjX )}(h**node**h]hnode}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjT9ubh0. Returns the total length of the key stored in }(hjT9hhhNhNubjX )}(h**buf**h]hbuf}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjT9ubh. Returns -EINVAL if }(hjT9hhhNhNubjX )}(h**node**h]hnode}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjT9ubh is NULL or }(hjT9hhhNhNubjX )}(h**root**h]hroot}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjT9ubh is not the ancestor of }(hjT9hhhNhNubjX )}(h**node**h]hnode}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjT9ubh or }(hjT9hhhNhNubjX )}(h**root**h]hroot}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjT9ubh is }(hjT9hhhNhNubjX )}(h**node**h]hnode}(hj":hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjT9ubh, 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.}(hjT9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj!8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j $xbc_node_find_next_leaf (C function)c.xbc_node_find_next_leafhNtauh1jhjhhhNhNubj )}(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](ju )}(hjx h]hstruct}(hj[:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hjW:hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMLubjH )}(h h]h }(hji:hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjW:hhhjh:hMLubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hjz:hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjw:ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj|:modnameN classnameNj7 j: )}j= ]j@ )}j3 xbc_node_find_next_leafsbc.xbc_node_find_next_leafasbuh1hhjW:hhhjh:hMLubjH )}(h h]h }(hj:hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjW:hhhjh:hMLubj )}(hj h]h*}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjW:hhhjh:hMLubjY )}(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 ](jn jo eh"]h$]h&]hhuh1jX hjW:hhhjh:hMLubjt )}(h.(struct xbc_node *root, struct xbc_node *node)h](jz )}(hstruct xbc_node *rooth](ju )}(hjx h]hstruct}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj:ubjH )}(h h]h }(hj:hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj:ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hj:hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj:ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj:modnameN classnameNj7 j: )}j= ]j:c.xbc_node_find_next_leafasbuh1hhj:ubjH )}(h h]h }(hj;hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG 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&]noemphhhuh1jy hj:ubjz )}(hstruct xbc_node *nodeh](ju )}(hjx h]hstruct}(hjE;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hjA;ubjH )}(h h]h }(hjR;hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjA;ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hjc;hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj`;ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetje;modnameN classnameNj7 j: )}j= ]j:c.xbc_node_find_next_leafasbuh1hhjA;ubjH )}(h h]h }(hj;hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjA;ubj )}(hj h]h*}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjA;ubj )}(hnodeh]hnode}(hj;hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjA;ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hj:ubeh}(h]h ]h"]h$]h&]hhuh1js hjW:hhhjh:hMLubeh}(h]h ]h"]h$]h&]hhj uh1j j j hjS:hhhjh:hMLubah}(h]jN:ah ](j j eh"]h$]h&]j# j$ )j% huh1j hjh:hMLhjP:hhubj' )}(hhh]h)}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMLhj;hhubah}(h]h ]h"]h$]h&]uh1j& hjP:hhhjh:hMLubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH j;jI j;jJ jK jL uh1j hhhjhNhNubjN )}(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](h)}(h**Parameters**h]jX )}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj;ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMPhj;ubjn )}(hhh](js )}(h+``struct xbc_node *root`` An XBC root node h](jy )}(h``struct xbc_node *root``h]jp)}(hj<h]hstruct xbc_node *root}(hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1johj<ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMMhj<ubj )}(hhh]h)}(hAn XBC root nodeh]hAn XBC root node}(hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMMhj<ubah}(h]h ]h"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]uh1jr hj<hMMhj;ubjs )}(h9``struct xbc_node *node`` An XBC node which starts from. h](jy )}(h``struct xbc_node *node``h]jp)}(hj@<h]hstruct xbc_node *node}(hjB<hhhNhNubah}(h]h ]h"]h$]h&]uh1johj><ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMNhj:<ubj )}(hhh]h)}(hAn XBC node which starts from.h]hAn XBC node which starts from.}(hjY<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU<hMNhjV<ubah}(h]h ]h"]h$]h&]uh1j hj:<ubeh}(h]h ]h"]h$]h&]uh1jr hjU<hMNhj;ubeh}(h]h ]h"]h$]h&]uh1jm hj;ubh)}(h**Description**h]jX )}(hj{<h]h Description}(hj}<hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjy<ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMPhj;ubh)}(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<hhhNhNubjX )}(h**node**h]hnode}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj<ubh under }(hj<hhhNhNubjX )}(h**root**h]hroot}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj<ubh node (including }(hj<hhhNhNubjX )}(h**root**h]hroot}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj<ubhK node itself). Return the next node or NULL if next leaf node is not found.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMOhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j )xbc_node_find_next_key_value (C function)c.xbc_node_find_next_key_valuehNtauh1jhjhhhNhNubj )}(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](ju )}(hjh]hconst}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj<hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chM~ubjH )}(h h]h }(hj=hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj<hhhj=hM~ubj )}(hcharh]hchar}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj<hhhj=hM~ubjH )}(h h]h }(hj =hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj<hhhj=hM~ubj )}(hj h]h*}(hj.=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj<hhhj=hM~ubjY )}(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 ](jn jo eh"]h$]h&]hhuh1jX hj<hhhj=hM~ubjt )}(h/(struct xbc_node *root, struct xbc_node **leaf)h](jz )}(hstruct xbc_node *rooth](ju )}(hjx h]hstruct}(hj[=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hjW=ubjH )}(h h]h }(hjh=hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjW=ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hjy=hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjv=ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj{=modnameN classnameNj7 j: )}j= ]j@ )}j3 jA=sbc.xbc_node_find_next_key_valueasbuh1hhjW=ubjH )}(h h]h }(hj=hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjW=ubj )}(hj h]h*}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjW=ubj )}(hrooth]hroot}(hj=hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjW=ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hjS=ubjz )}(hstruct xbc_node **leafh](ju )}(hjx h]hstruct}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hj=ubjH )}(h h]h }(hj=hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj=ubh)}(hhh]j )}(hxbc_nodeh]hxbc_node}(hj=hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj=ubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetj=modnameN classnameNj7 j: )}j= ]j=c.xbc_node_find_next_key_valueasbuh1hhj=ubjH )}(h h]h }(hj >hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj=ubj )}(hj h]h*}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=ubj )}(hj h]h*}(hj$>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=ubj )}(hleafh]hleaf}(hj1>hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj=ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hjS=ubeh}(h]h ]h"]h$]h&]hhuh1js hj<hhhj=hM~ubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj<hhhj=hM~ubah}(h]j<ah ](j j eh"]h$]h&]j# j$ )j% huh1j hj=hM~hj<hhubj' )}(hhh]h)}(h"Find the next key-value pair nodesh]h"Find the next key-value pair nodes}(hj[>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chM~hjX>hhubah}(h]h ]h"]h$]h&]uh1j& hj<hhhj=hM~ubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH js>jI js>jJ jK jL uh1j hhhjhNhNubjN )}(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](h)}(h**Parameters**h]jX )}(hj}>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj{>ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjw>ubjn )}(hhh](js )}(h+``struct xbc_node *root`` An XBC root node h](jy )}(h``struct xbc_node *root``h]jp)}(hj>h]hstruct xbc_node *root}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1johj>ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj>ubj )}(hhh]h)}(hAn XBC root nodeh]hAn XBC root node}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1jr hj>hMhj>ubjs )}(hN``struct xbc_node **leaf`` A container pointer of XBC node which starts from. h](jy )}(h``struct xbc_node **leaf``h]jp)}(hj>h]hstruct xbc_node **leaf}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1joLhj>ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj>ubj )}(hhh]h)}(h2A container pointer of XBC node which starts from.h]h2A container pointer of XBC node which starts from.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1j hj>ubeh}(h]h ]h"]h$]h&]uh1jr hj>hMhj>ubeh}(h]h ]h"]h$]h&]uh1jm hjw>ubh)}(h**Description**h]jX )}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj?ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjw>ubh)}(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 }(hj&?hhhNhNubjX )}(h ***leaf**h]h*leaf}(hj.?hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj&?ubh under }(hj&?hhhNhNubjX )}(h**root**h]hroot}(hj@?hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj&?ubh$ node. Returns the value and update }(hj&?hhhNhNubjX )}(h ***leaf**h]h*leaf}(hjR?hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj&?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.}(hj&?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjw>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j _xbc_exit (C function) c._xbc_exithNtauh1jhjhhhNhNubj )}(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.chMubjH )}(h h]h }(hj?hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj?hhhj?hMubjY )}(h _xbc_exith]j )}(h _xbc_exith]h _xbc_exit}(hj?hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj?ubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hj?hhhj?hMubjt )}(h (bool early)h]jz )}(h bool earlyh](j )}(hj9 h]hbool}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj?ubjH )}(h h]h }(hj?hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj?ubj )}(hearlyh]hearly}(hj?hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hj?ubah}(h]h ]h"]h$]h&]hhuh1js hj?hhhj?hMubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj?hhhj?hMubah}(h]j~?ah ](j j eh"]h$]h&]j# j$ )j% huh1j hj?hMhj?hhubj' )}(hhh]h)}(hClean up all parsed bootconfigh]hClean up all parsed bootconfig}(hj @hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj @hhubah}(h]h ]h"]h$]h&]uh1j& hj?hhhj?hMubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH j%@jI j%@jJ jK jL uh1j hhhjhNhNubjN )}(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](h)}(h**Parameters**h]jX )}(hj/@h]h Parameters}(hj1@hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj-@ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj)@ubjn )}(hhh]js )}(hM``bool early`` Set true if this is called before budy system is initialized. h](jy )}(h``bool early``h]jp)}(hjN@h]h bool early}(hjP@hhhNhNubah}(h]h ]h"]h$]h&]uh1johjL@ubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjH@ubj )}(hhh]h)}(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.}(hjg@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjc@hMhjd@ubah}(h]h ]h"]h$]h&]uh1j hjH@ubeh}(h]h ]h"]h$]h&]uh1jr hjc@hMhjE@ubah}(h]h ]h"]h$]h&]uh1jm hj)@ubh)}(h**Description**h]jX )}(hj@h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jW hj@ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj)@ubh)}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj)@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j xbc_init (C function) c.xbc_inithNtauh1jhjhhhNhNubj )}(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}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMubjH )}(h h]h }(hj@hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj@hhhj@hMubjY )}(hxbc_inith]j )}(hxbc_inith]hxbc_init}(hj@hhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hj@ubah}(h]h ](jn jo eh"]h$]h&]hhuh1jX hj@hhhj@hMubjt )}(h=(const char *data, size_t size, const char **emsg, int *epos)h](jz )}(hconst char *datah](ju )}(hjh]hconst}(hj AhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hjAubjH )}(h h]h }(hjAhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjAubj )}(hcharh]hchar}(hj&AhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubjH )}(h h]h }(hj4AhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjAubj )}(hj h]h*}(hjBAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubj )}(hdatah]hdata}(hjOAhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hjAubjz )}(h size_t sizeh](h)}(hhh]j )}(hsize_th]hsize_t}(hjkAhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjhAubah}(h]h ]h"]h$]h&] refdomainj1 reftypej3 reftargetjmAmodnameN classnameNj7 j: )}j= ]j@ )}j3 j@sb c.xbc_initasbuh1hhjdAubjH )}(h h]h }(hjAhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjdAubj )}(hsizeh]hsize}(hjAhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjdAubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hjAubjz )}(hconst char **emsgh](ju )}(hjh]hconst}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jt hjAubjH )}(h h]h }(hjAhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjAubj )}(hcharh]hchar}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubjH )}(h h]h }(hjAhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjAubj )}(hj h]h*}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubj )}(hj h]h*}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubj )}(hemsgh]hemsg}(hjBhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hjAubjz )}(h int *eposh](j )}(hinth]hint}(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjBubjH )}(h h]h }(hj*BhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjBubj )}(hj h]h*}(hj8BhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjBubj )}(heposh]hepos}(hjEBhhhNhNubah}(h]h ]j& ah"]h$]h&]uh1j hjBubeh}(h]h ]h"]h$]h&]noemphhhuh1jy hjAubeh}(h]h ]h"]h$]h&]hhuh1js hj@hhhj@hMubeh}(h]h ]h"]h$]h&]hhj uh1j j j hj@hhhj@hMubah}(h]j@ah ](j j eh"]h$]h&]j# j$ )j% huh1j hj@hMhj@hhubj' )}(hhh]h)}(h0Parse given XBC file and build XBC internal treeh]h0Parse given XBC file and build XBC internal tree}(hjoBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjlBhhubah}(h]h ]h"]h$]h&]uh1j& hj@hhhj@hMubeh}(h]h ](j1 functioneh"]h$]h&]jG j1 jH jBjI jBjJ jK jL uh1j hhhjhNhNubjN )}(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](h)}(h**Parameters**h]jX )}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjBubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjBubjn )}(hhh](js )}(h8``const char *data`` The boot config text original data h](jy )}(h``const char *data``h]jp)}(hjBh]hconst char *data}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1johjBubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjBubj )}(hhh]h)}(h"The boot config text original datah]h"The boot config text original data}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1j hjBubeh}(h]h ]h"]h$]h&]uh1jr hjBhMhjBubjs )}(h%``size_t size`` The size of **data** h](jy )}(h``size_t size``h]jp)}(hjBh]h size_t size}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1johjBubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjBubj )}(hhh]h)}(hThe size of **data**h](h The size of }(hjChhhNhNubjX )}(h**data**h]hdata}(hj ChhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjCubeh}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1j hjBubeh}(h]h ]h"]h$]h&]uh1jr hjBhMhjBubjs )}(hK``const char **emsg`` A pointer of const char * to store the error message h](jy )}(h``const char **emsg``h]jp)}(hj0Ch]hconst char **emsg}(hj2ChhhNhNubah}(h]h ]h"]h$]h&]uh1johj.Cubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhj*Cubj )}(hhh]h)}(h4A pointer of const char * to store the error messageh]h4A pointer of const char * to store the error message}(hjIChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEChMhjFCubah}(h]h ]h"]h$]h&]uh1j hj*Cubeh}(h]h ]h"]h$]h&]uh1jr hjEChMhjBubjs )}(h;``int *epos`` A pointer of int to store the error position h](jy )}(h ``int *epos``h]jp)}(hjiCh]h int *epos}(hjkChhhNhNubah}(h]h ]h"]h$]h&]uh1johjgCubah}(h]h ]h"]h$]h&]uh1jx hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjcCubj )}(hhh]h)}(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&]uh1hhj~ChMhjCubah}(h]h ]h"]h$]h&]uh1j hjcCubeh}(h]h ]h"]h$]h&]uh1jr hj~ChMhjBubeh}(h]h ]h"]h$]h&]uh1jm hjBubh)}(h**Description**h]jX )}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjCubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjBubh)}(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 }(hjChhhNhNubjX )}(h**data**h]hdata}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjCubh. }(hjChhhNhNubjX )}(h**size**h]hsize}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jW 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, }(hjChhhNhNubjX )}(h**emsg**h]hemsg}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjCubh+ will be updated with an error message and }(hjChhhNhNubjX )}(h**epos**h]hepos}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjCubhE will be updated with the error position which is the byte offset of }(hjChhhNhNubjX )}(h**buf**h]hbuf}(hj DhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjCubh&. If the error is not a parser error, }(hjChhhNhNubjX )}(h**epos**h]hepos}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jW hjCubh will be -1.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:334: ./lib/bootconfig.chMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jM hjhhhNhNubeh}(h]functions-and-structuresah ]h"]functions and structuresah$]h&]uh1hhhhhhhhMKubeh}(h](boot-configurationheh ]h"](boot configuration bootconfigeh$]h&]uh1hhhhhhhhKexpect_referenced_by_name}jJDhsexpect_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_handlerjtDerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _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}(jJDhjIDjFDjSjPjqjnjOjLjjjijfjjjgjdjjj_j\j0j-jWjTjjjADj>Du nametypes}(jJDjIDjSjqjOjjijjgjj_j0jWjjADuh}(hhjFDhjPj/jnjVjLjjjRjfjjjtjdjjjj\jj-jjjTj3jjZj>Djj j j* j/ j j jSjXjjjwj|jjjjjjjjjejjjjj jjjj&!j+!j#j$j&j&jg'jl'j(j(j*j*j,j,j.j.jC0jH0j2j2j>6jC6jN:jS:j<j<j~?j?j@j@u 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]h)}(hhh]h0Hyperlink target "bootconfig" is not referenced.}hjDsbah}(h]h ]h"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1jDuba transformerN include_log] decorationNhhub.