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)}(hXThe 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 has to be terminated by semi-colon (``;``) or newline (``\n``). For array value, array entries are separated by comma (``,``). ::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&]uh1johjgubh0. The value has to be terminated by semi-colon (}(hjghhhNhNubjp)}(h``;``h]h;}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjgubh) or newline (}(hjghhhNhNubjp)}(h``\n``h]h\n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjgubh:). For array value, array entries are separated by comma (}(hjghhhNhNubjp)}(h``,``h]h,}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjgubh).}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjVhhubh literal_block)}(h)KEY[.WORD[...]] = VALUE[, VALUE2[...]][;]h]h)KEY[.WORD[...]] = VALUE[, VALUE2[...]][;]}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjVhhubh)}(hPUnlike the kernel command line syntax, spaces are OK around the comma and ``=``.h](hJUnlike the kernel command line syntax, spaces are OK around the comma and }(hjhhhNhNubjp)}(h``=``h]h=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh.}(hjhhhNhNubeh}(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_}(hj hhhNhNubah}(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}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh ), comma (}(hjhhhNhNubjp)}(h``,``h]h,}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh ), hash (}(hjhhhNhNubjp)}(h``#``h]h#}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh) and closing brace (}(hjhhhNhNubjp)}(h``}``h]h}}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjVhhubh)}(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 (}(hj{hhhNhNubjp)}(h ``"VALUE"``h]h"VALUE"}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johj{ubh) or single-quotes (}(hj{hhhNhNubjp)}(h ``'VALUE'``h]h'VALUE'}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johj{ubh9) to quote it. Note that you can not escape these quotes.}(hj{hhhNhNubeh}(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&]uh1hhjhhhhhK+ubh)}(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&]uh1hhhhK-hjhhubj)}(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&]hhuh1jhhhK0hjhhubh)}(hThese can be written also in::h]hThese can be written also in:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjhhubj)}(h0foo.bar { baz = value1 qux.quux = value2 }h]h0foo.bar { baz = value1 qux.quux = value2 }}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK5hjhhubh)}(h'Or more shorter, written as following::h]h&Or more shorter, written as following:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hjhhubj)}(h+foo.bar { baz = value1; qux.quux = value2 }h]h+foo.bar { baz = value1; qux.quux = value2 }}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubeh}(h]key-value-syntaxah ]h"]key-value syntaxah$]h&]uh1hhjVhhhhhK+ubh)}(hhh](h)}(hSame-key Valuesh]hSame-key Values}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hhhhhKBubh)}(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,:}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKDhj6hhubj)}(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}hjUsbah}(h]h ]h"]h$]h&]hhuh1jhhhKGhj6hhubh)}(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 }(hjchhhNhNubjp)}(h``:=``h]h:=}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1johjcubh explicitly. For example:}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKJhj6hhubj)}(hfoo = bar, baz foo := quxh]hfoo = bar, baz foo := qux}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKMhj6hhubh)}(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&]uh1hhhhKPhj6hhubh)}(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&]uh1hhhhKThj6hhubj)}(hfoo = bar, baz foo += quxh]hfoo = bar, baz foo += qux}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKWhj6hhubh)}(h?In this case, the key ``foo`` has ``bar``, ``baz`` and ``qux``.h](hIn this case, the key }(hjhhhNhNubjp)}(h``foo``h]hfoo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh has }(hjhhhNhNubjp)}(h``bar``h]hbar}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh, }(hjhhhNhNubjp)}(h``baz``h]hbaz}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh and }(hjhhhNhNubjp)}(h``qux``h]hqux}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKZhj6hhubh)}(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.:}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK\hj6hhubj)}(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.}hjUsbah}(h]h ]h"]h$]h&]hhuh1jhhhK_hj6hhubh)}(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:}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKchj6hhubj)}(hRfoo { bar = value1 bar { baz = value2 qux = value3 } }h]hRfoo { bar = value1 bar { baz = value2 qux = value3 } }}hjqsbah}(h]h ]h"]h$]h&]hhuh1jhhhKfhj6hhubh)}(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&]uh1hhhhKnhj6hhubj)}(hfoo.bar = value1 foo = value2h]hfoo.bar = value1 foo = value2}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKrhj6hhubh)}(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&]uh1hhhhKuhj6hhubj)}(hfoo = value2 foo.bar = value1h]hfoo = value2 foo.bar = value1}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKwhj6hhubeh}(h]same-key-valuesah ]h"]same-key valuesah$]h&]uh1hhjVhhhhhKBubh)}(hhh](h)}(hCommentsh]hComments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK{ubh)}(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&]uh1hhhhK}hjhhubj)}(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&]hhuh1jhhhKhjhhubh)}(hThis is parsed as below::h]hThis is parsed as below:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hfoo = value bar = 1, 2, 3h]hfoo = value bar = 1, 2, 3}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubh)}(hNote that you can not put a comment between value and delimiter(``,`` or ``;``). This means following config has a syntax error ::h](h@Note that you can not put a comment between value and delimiter(}(hjhhhNhNubjp)}(h``,``h]h,}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh or }(hjhhhNhNubjp)}(h``;``h]h;}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1johjubh1). This means following config has a syntax error}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hkey = 1 # comment ,2h]hkey = 1 # comment ,2}hj:sbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubeh}(h]commentsah ]h"]commentsah$]h&]uh1hhjVhhhhhK{ubeh}(h]config-file-syntaxah ]h"]config file syntaxah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h/proc/bootconfigh]h/proc/bootconfig}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhhhhhKubh)}(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:}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubj)}(h(KEY[.WORDS...] = "[VALUE]"[,"VALUE2"...]h]h(KEY[.WORDS...] = "[VALUE]"[,"VALUE2"...]}hjwsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjXhhubeh}(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}(hjhhhNhNubah}(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.}(hjhhhNhNubah}(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 }(hj'hhhNhNubjp)}(h``bootconfig``h]h bootconfig}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1johj'ubh 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:}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(h# make -C tools/bootconfigh]h# make -C tools/bootconfig}hjGsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubh)}(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):}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(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}hjcsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubh)}(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:}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(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&]hhuh1jhhhKhjhhubh)}(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&]uh1hhhhKhjhhubj)}(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&]hhuh1jhhhKhjhhubh)}(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}(hjhhhNhNubah}(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}(hjhhhNhNubah}(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.}(hj0hhhNhNubah}(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}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhhhhhKubh)}(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}(hjghhhNhNubah}(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}(hjyhhhNhNubah}(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&]uh1hhhhKhjNhhubj)}(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&]hhuh1jhhhKhjNhhubh)}(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&]uh1hhhhKhjNhhubj)}(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&]hhuh1jhhhKhjNhhubh)}(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&]uh1hhhhKhjNhhubj)}(h3root="01234567-89ab-cdef-0123-456789abcd" -- splashh]h3root="01234567-89ab-cdef-0123-456789abcd" -- splash}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjNhhubh)}(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&]uh1hhhhMhjNhhubj)}(hro bootconfig -- quieth]hro bootconfig -- quiet}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhMhjNhhubh)}(h0The final kernel cmdline will be the following::h]h/The final kernel cmdline will be the following:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjNhhubj)}(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&]hhuh1jhhhMhjNhhubeh}(h]!kernel-parameters-via-boot-configah ]h"]!kernel parameters via boot configah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hConfig File Limitationh]hConfig File Limitation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM ubh)}(hX Currently the maximum config size 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]hX Currently the maximum config size 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.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjhhubeh}(h]config-file-limitationah ]h"]config file limitationah$]h&]uh1hhhhhhhhM ubh)}(hhh](h)}(hBootconfig APIsh]hBootconfig APIs}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hhhhhMubh)}(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.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj>hhubh)}(hX6If you have a key string, you can query the value directly with the key using xbc_find_value(). If you want to know what keys exist in the boot config, you can use xbc_for_each_key_value() to iterate key-value pairs. Note that you need to use xbc_array_for_each_value() for accessing each array's value, e.g.::h]hX7If you have a key string, you can query the value directly with the key using xbc_find_value(). If you want to know what keys exist in the boot config, you can use xbc_for_each_key_value() to iterate key-value pairs. Note that you need to use xbc_array_for_each_value() for accessing each array’s value, e.g.:}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj>hhubj)}(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); }}hjksbah}(h]h ]h"]h$]h&]hhuh1jhhhM&hj>hhubh)}(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().}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM-hj>hhubh)}(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&]uh1hhhhM1hj>hhubj)}(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&]hhuh1jhhhM4hj>hhubh)}(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&]uh1hhhhM;hj>hhubh)}(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&]uh1hhhhM>hj>hhubeh}(h]bootconfig-apisah ]h"]bootconfig apisah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hFunctions and structuresh]hFunctions and structures}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMCubhindex)}(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}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetj modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}j xbc_calc_checksumsbc.xbc_calc_checksumasbuh1hhjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhK'ubhdesc_sig_space)}(h h]h }(hj- hhhNhNubah}(h]h ]wah"]h$]h&]uh1j+ hjhhhj* hK'ubh desc_name)}(hxbc_calc_checksumh]j)}(hj' h]hxbc_calc_checksum}(hjB hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj> ubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1j< hjhhhj* hK'ubhdesc_parameterlist)}(h(void *data, uint32_t size)h](hdesc_parameter)}(h void *datah](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hje hhhNhNubah}(h]h ]ktah"]h$]h&]uh1jc hj_ ubj, )}(h h]h }(hjt hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ 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&]uh1jhj_ ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hjY ubj^ )}(h uint32_t sizeh](h)}(hhh]j)}(huint32_th]huint32_t}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj modnameN classnameNj j )}j! ]j% c.xbc_calc_checksumasbuh1hhj ubj, )}(h h]h }(hj hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj ubj)}(hsizeh]hsize}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hjY ubeh}(h]h ]h"]h$]h&]hhuh1jW hjhhhj* hK'ubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1jsphinx_line_type declaratorhjhhhj* hK'ubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhj* hK'hjhhubh 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:325: ./include/linux/bootconfig.hhKhj hhubah}(h]h ]h"]h$]h&]uh1j hjhhhj* hK'ubeh}(h]h ](j functioneh"]h$]h&]domainj objtypej' desctypej' noindex noindexentrynocontentsentryuh1jhhhjhNhNubh 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)}(hj9 h]h Parameters}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj7 ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhK#hj3 ubhdefinition_list)}(hhh](hdefinition_list_item)}(h ``void *data`` Bootconfig data. h](hterm)}(h``void *data``h]jp)}(hj` h]h void *data}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1johj^ ubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhK hjX ubh definition)}(hhh]h)}(hBootconfig data.h]hBootconfig data.}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju hK hjx ubah}(h]h ]h"]h$]h&]uh1jv hjX ubeh}(h]h ]h"]h$]h&]uh1jV hju hK hjS ubjW )}(h3``uint32_t size`` The size of the bootconfig data. h](j] )}(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&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhK!hj ubjw )}(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&]uh1jv hj ubeh}(h]h ]h"]h$]h&]uh1jV hj hK!hjS ubeh}(h]h ]h"]h$]h&]uh1jQ hj3 ubh)}(h**Description**h]j< )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhK#hj3 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:325: ./include/linux/bootconfig.hhK#hj3 ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jxbc_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](jd )}(hboolh]hbool}(hj hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hj hhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKQubj, )}(h h]h }(hj* hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj hhhj) hKQubj= )}(hxbc_node_is_valueh]j)}(hxbc_node_is_valueh]hxbc_node_is_value}(hj< hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj8 ubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hj hhhj) hKQubjX )}(h(struct xbc_node *node)h]j^ )}(hstruct xbc_node *nodeh](hdesc_sig_keyword)}(hstructh]hstruct}(hjZ hhhNhNubah}(h]h ]kah"]h$]h&]uh1jX hjT ubj, )}(h h]h }(hji hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjT ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hjz hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjw ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj| modnameN classnameNj j )}j! ]j$ )}j j> sbc.xbc_node_is_valueasbuh1hhjT ubj, )}(h h]h }(hj hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjT ubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjT ubj)}(hnodeh]hnode}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjT ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hjP ubah}(h]h ]h"]h$]h&]hhuh1jW hj hhhj) hKQubeh}(h]h ]h"]h$]h&]hhj uh1jj j hj hhhj) hKQubah}(h]j ah ](j j eh"]h$]h&]j j )j huh1jhj) hKQhj 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:325: ./include/linux/bootconfig.hhKLhj hhubah}(h]h ]h"]h$]h&]uh1j hj hhhj) hKQubeh}(h]h ](j functioneh"]h$]h&]j+ j j, j j- j j. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKPhj ubjR )}(hhh]jW )}(h'``struct xbc_node *node`` An XBC node. h](j] )}(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&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKMhj ubjw )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5 hKMhj6 ubah}(h]h ]h"]h$]h&]uh1jv hj ubeh}(h]h ]h"]h$]h&]uh1jV hj5 hKMhj ubah}(h]h ]h"]h$]h&]uh1jQ hj ubh)}(h**Description**h]j< )}(hj[ h]h Description}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjY ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./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 }(hjq hhhNhNubj< )}(h**node**h]hnode}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjq ubh? is a value node and return true if a value node, false if not.}(hjq hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKOhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jxbc_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](jd )}(hj h]hbool}(hj hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hj hhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhK\ubj, )}(h h]h }(hj hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj hhhj hK\ubj= )}(hxbc_node_is_keyh]j)}(hxbc_node_is_keyh]hxbc_node_is_key}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hj hhhj hK\ubjX )}(h(struct xbc_node *node)h]j^ )}(hstruct xbc_node *nodeh](jY )}(hj\ h]hstruct}(hj hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj ubj, )}(h h]h }(hj hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj modnameN classnameNj j )}j! ]j$ )}j j sbc.xbc_node_is_keyasbuh1hhj ubj, )}(h h]h }(hj, hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj ubj )}(hj h]h*}(hj: hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj)}(hnodeh]hnode}(hjG hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj ubah}(h]h ]h"]h$]h&]hhuh1jW hj hhhj hK\ubeh}(h]h ]h"]h$]h&]hhj uh1jj j hj hhhj hK\ubah}(h]j ah ](j j eh"]h$]h&]j j )j huh1jhj hK\hj hhubj )}(hhh]h)}(hTest the node is a key nodeh]hTest the node is a key node}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKWhjn hhubah}(h]h ]h"]h$]h&]uh1j hj hhhj hK\ubeh}(h]h ](j functioneh"]h$]h&]j+ j j, j j- j j. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhK[hj ubjR )}(hhh]jW )}(h'``struct xbc_node *node`` An XBC node. h](j] )}(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&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKXhj ubjw )}(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&]uh1jv hj ubeh}(h]h ]h"]h$]h&]uh1jV hj hKXhj ubah}(h]h ]h"]h$]h&]uh1jQ hj ubh)}(h**Description**h]j< )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./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 }(hjhhhNhNubj< )}(h**node**h]hnode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j; 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:325: ./include/linux/bootconfig.hhKZhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jxbc_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](jd )}(hj h]hbool}(hjDhhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hj@hhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKgubj, )}(h h]h }(hjRhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj@hhhjQhKgubj= )}(hxbc_node_is_arrayh]j)}(hxbc_node_is_arrayh]hxbc_node_is_array}(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj`ubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hj@hhhjQhKgubjX )}(h(struct xbc_node *node)h]j^ )}(hstruct xbc_node *nodeh](jY )}(hj\ h]hstruct}(hjhhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj|ubj, )}(h h]h }(hjhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj|ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j jfsbc.xbc_node_is_arrayasbuh1hhj|ubj, )}(h h]h }(hjhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj|ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj|ubj)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hjxubah}(h]h ]h"]h$]h&]hhuh1jW hj@hhhjQhKgubeh}(h]h ]h"]h$]h&]hhj uh1jj j hj<hhhjQhKgubah}(h]j7ah ](j j eh"]h$]h&]j j )j huh1jhjQhKghj9hhubj )}(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:325: ./include/linux/bootconfig.hhKbhjhhubah}(h]h ]h"]h$]h&]uh1j hj9hhhjQhKgubeh}(h]h ](j functioneh"]h$]h&]j+ j j, jj- jj. j/ j0 uh1jhhhjhNhNubj2 )}(hv**Parameters** ``struct xbc_node *node`` An XBC node. **Description** Test the **node** is an arraied value node.h](h)}(h**Parameters**h]j< )}(hj%h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj#ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKfhjubjR )}(hhh]jW )}(h'``struct xbc_node *node`` An XBC node. h](j] )}(h``struct xbc_node *node``h]jp)}(hjDh]hstruct xbc_node *node}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1johjBubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKchj>ubjw )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhKchjZubah}(h]h ]h"]h$]h&]uh1jv hj>ubeh}(h]h ]h"]h$]h&]uh1jV hjYhKchj;ubah}(h]h ]h"]h$]h&]uh1jQ hjubh)}(h**Description**h]j< )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj}ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKehjubh)}(h+Test the **node** is an arraied value node.h](h Test the }(hjhhhNhNubj< )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubh is an arraied value node.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKehjubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jxbc_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](jd )}(hj h]hbool}(hjhhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKuubj, )}(h h]h }(hjhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjhhhjhKuubj= )}(hxbc_node_is_leafh]j)}(hxbc_node_is_leafh]hxbc_node_is_leaf}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hjhhhjhKuubjX )}(h(struct xbc_node *node)h]j^ )}(hstruct xbc_node *nodeh](jY )}(hj\ h]hstruct}(hjhhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hjubj, )}(h h]h }(hjhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj2modnameN classnameNj j )}j! ]j$ )}j jsbc.xbc_node_is_leafasbuh1hhjubj, )}(h h]h }(hjPhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjubj )}(hj h]h*}(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hnodeh]hnode}(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj ubah}(h]h ]h"]h$]h&]hhuh1jW hjhhhjhKuubeh}(h]h ]h"]h$]h&]hhj uh1jj j hjhhhjhKuubah}(h]jah ](j j eh"]h$]h&]j j )j huh1jhjhKuhjhhubj )}(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:325: ./include/linux/bootconfig.hhKmhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKuubeh}(h]h ](j functioneh"]h$]h&]j+ j j, jj- jj. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKqhjubjR )}(hhh]jW )}(h'``struct xbc_node *node`` An XBC node. h](j] )}(h``struct xbc_node *node``h]jp)}(hjh]hstruct xbc_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKnhjubjw )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKnhjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKnhjubah}(h]h ]h"]h$]h&]uh1jQ hjubh)}(h**Description**h]j< )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./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 }(hj'hhhNhNubj< )}(h**node**h]hnode}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj'ubh 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.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKphjubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jxbc_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](jY )}(hconsth]hconst}(hjhhhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hjdhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKubj, )}(h h]h }(hjwhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjdhhhjvhKubjd )}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hjdhhhjvhKubj, )}(h h]h }(hjhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjdhhhjvhKubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjdhhhjvhKubj= )}(hxbc_find_valueh]j)}(hxbc_find_valueh]hxbc_find_value}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hjdhhhjvhKubjX )}(h*(const char *key, struct xbc_node **vnode)h](j^ )}(hconst char *keyh](jY )}(hjjh]hconst}(hjhhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hjubj, )}(h h]h }(hjhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjubjd )}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hjubj, )}(h h]h }(hjhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hkeyh]hkey}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hjubj^ )}(hstruct xbc_node **vnodeh](jY )}(hj\ h]hstruct}(hj+hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj'ubj, )}(h h]h }(hj8hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj'ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjKmodnameN classnameNj j )}j! ]j$ )}j jsbc.xbc_find_valueasbuh1hhj'ubj, )}(h h]h }(hjihhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj'ubj )}(hj h]h*}(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj'ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj'ubj)}(hvnodeh]hvnode}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hjubeh}(h]h ]h"]h$]h&]hhuh1jW hjdhhhjvhKubeh}(h]h ]h"]h$]h&]hhj uh1jj j hj`hhhjvhKubah}(h]j[ah ](j j eh"]h$]h&]j j )j huh1jhjvhKhj]hhubj )}(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:325: ./include/linux/bootconfig.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hj]hhhjvhKubeh}(h]h ](j functioneh"]h$]h&]j+ j j, jj- jj. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjR )}(hhh](jW )}(h``const char *key`` Search key h](j] )}(h``const char *key``h]jp)}(hjh]hconst char *key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjw )}(hhh]h)}(h Search keyh]h Search key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKhjubjW )}(hC``struct xbc_node **vnode`` A container pointer of XBC value node. h](j] )}(h``struct xbc_node **vnode``h]jp)}(hj5h]hstruct xbc_node **vnode}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1johj3ubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhj/ubjw )}(hhh]h)}(h&A container pointer of XBC value node.h]h&A container pointer of XBC value node.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhKhjKubah}(h]h ]h"]h$]h&]uh1jv hj/ubeh}(h]h ]h"]h$]h&]uh1jV hjJhKhjubeh}(h]h ]h"]h$]h&]uh1jQ hjubh)}(h**Description**h]j< )}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjnubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./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 }(hjhhhNhNubj< )}(h**key**h]hkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubhU from whole of XBC tree and return the value if found. Found value node is stored in }(hjhhhNhNubj< )}(h ***vnode**h]h*vnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubh>. Note that this can return 0-length string and store NULL in }(hjhhhNhNubj< )}(h ***vnode**h]h*vnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubh for key-only (non-value) entry.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jxbc_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](jY )}(hj\ h]hstruct}(hjhhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKubj, )}(h h]h }(hjhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjhhhjhKubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj modnameN classnameNj j )}j! ]j$ )}j xbc_find_nodesbc.xbc_find_nodeasbuh1hhjhhhjhKubj, )}(h h]h }(hj+hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjhhhjhKubj )}(hj h]h*}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubj= )}(h xbc_find_nodeh]j)}(hj(h]h xbc_find_node}(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjFubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hjhhhjhKubjX )}(h(const char *key)h]j^ )}(hconst char *keyh](jY )}(hjjh]hconst}(hjehhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hjaubj, )}(h h]h }(hjrhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjaubjd )}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hjaubj, )}(h h]h }(hjhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjaubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjaubj)}(hkeyh]hkey}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj]ubah}(h]h ]h"]h$]h&]hhuh1jW hjhhhjhKubeh}(h]h ]h"]h$]h&]hhj uh1jj j hjhhhjhKubah}(h]jah ](j j eh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(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:325: ./include/linux/bootconfig.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j functioneh"]h$]h&]j+ j j, jj- jj. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjR )}(hhh]jW )}(h``const char *key`` Search key h](j] )}(h``const char *key``h]jp)}(hjh]hconst char *key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjw )}(hhh]h)}(h Search keyh]h Search key}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj*ubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hj)hKhj ubah}(h]h ]h"]h$]h&]uh1jQ hjubh)}(h**Description**h]j< )}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjMubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubh)}(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 }(hjehhhNhNubj< )}(h**key**h]hkey}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjeubhQ from whole of XBC tree and return the node if found. If not found, returns NULL.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 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](jY )}(hj\ h]hstruct}(hjhhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKubj, )}(h h]h }(hjhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjhhhjhKubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j xbc_node_get_subkeysbc.xbc_node_get_subkeyasbuh1hhjhhhjhKubj, )}(h h]h }(hjhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjhhhjhKubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubj= )}(hxbc_node_get_subkeyh]j)}(hjh]hxbc_node_get_subkey}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hjhhhjhKubjX )}(h(struct xbc_node *node)h]j^ )}(hstruct xbc_node *nodeh](jY )}(hj\ h]hstruct}(hj hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hjubj, )}(h h]h }(hj-hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj@modnameN classnameNj j )}j! ]jc.xbc_node_get_subkeyasbuh1hhjubj, )}(h h]h }(hj\hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjubj )}(hj h]h*}(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hnodeh]hnode}(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hjubah}(h]h ]h"]h$]h&]hhuh1jW hjhhhjhKubeh}(h]h ]h"]h$]h&]hhj uh1jj j hjhhhjhKubah}(h]jah ](j j eh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(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:325: ./include/linux/bootconfig.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j functioneh"]h$]h&]j+ j j, jj- jj. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjR )}(hhh]jW )}(h&``struct xbc_node *node`` Parent node h](j] )}(h``struct xbc_node *node``h]jp)}(hjh]hstruct xbc_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjw )}(hhh]h)}(h Parent nodeh]h Parent node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKhjubah}(h]h ]h"]h$]h&]uh1jQ hjubh)}(h**Description**h]j< )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./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 }(hj3hhhNhNubj< )}(h**node**h]hnode}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj3ubh . If the }(hj3hhhNhNubj< )}(h**node**h]hnode}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj3ubh8 has no child or only value node, this will return NULL.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 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]j= )}(hxbc_array_for_each_valueh]j)}(hjh]hxbc_array_for_each_value}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhj uh1jj j hj~hhhjhKubah}(h]jyah ](j j eh"]h$]h&]j j )j huh1jhjhKhj{hhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hj{hhhjhKubeh}(h]h ](j macroeh"]h$]h&]j+ j j, jj- jj. j/ j0 uh1jhhhjhNhNubh)}(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:325: ./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:325: ./include/linux/bootconfig.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubj2 )}(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]j< )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjR )}(hhh](jW )}(h$``anode`` An XBC arraied value node h](j] )}(h ``anode``h]jp)}(hjh]hanode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhj ubjw )}(hhh]h)}(hAn XBC arraied value nodeh]hAn XBC arraied value node}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKhj(ubah}(h]h ]h"]h$]h&]uh1jv hj ubeh}(h]h ]h"]h$]h&]uh1jV hj'hKhj ubjW )}(h``value`` A value h](j] )}(h ``value``h]jp)}(hjKh]hvalue}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1johjIubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjEubjw )}(hhh]h)}(hA valueh]hA value}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hKhjaubah}(h]h ]h"]h$]h&]uh1jv hjEubeh}(h]h ]h"]h$]h&]uh1jV hj`hKhj ubeh}(h]h ]h"]h$]h&]uh1jQ hjubh)}(h**Description**h]j< )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubh)}(hIterate array value nodes and values starts from **anode**. This is expected to be used with xbc_find_value() and xbc_node_find_value(), so that user can process each array entry node.h](h1Iterate array value nodes and values starts from }(hjhhhNhNubj< )}(h **anode**h]hanode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubh~. This is expected to be used with xbc_find_value() and xbc_node_find_value(), so that user can process each array entry node.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 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]j= )}(hxbc_node_for_each_childh]j)}(hjh]hxbc_node_for_each_child}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhj uh1jj j hjhhhjhKubah}(h]jah ](j j eh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j macroeh"]h$]h&]j+ j j, j j- j j. j/ j0 uh1jhhhjhNhNubh)}(h+``xbc_node_for_each_child (parent, child)``h]jp)}(hjh]h'xbc_node_for_each_child (parent, child)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjhhubj)}(hIterate child nodes h]h)}(hIterate child nodesh]hIterate child nodes}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhj)ubah}(h]h ]h"]h$]h&]uh1jhj;hKhjhhubj2 )}(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]j< )}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjFubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjBubjR )}(hhh](jW )}(h``parent`` An XBC node. h](j] )}(h ``parent``h]jp)}(hjgh]hparent}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1johjeubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjaubjw )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hKhj}ubah}(h]h ]h"]h$]h&]uh1jv hjaubeh}(h]h ]h"]h$]h&]uh1jV hj|hKhj^ubjW )}(h``child`` Iterated XBC node. h](j] )}(h ``child``h]jp)}(hjh]hchild}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjw )}(hhh]h)}(hIterated XBC node.h]hIterated XBC node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKhj^ubeh}(h]h ]h"]h$]h&]uh1jQ hjBubh)}(h**Description**h]j< )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjBubh)}(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 }(hjhhhNhNubj< )}(h **parent**h]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubh!. Each child nodes are stored to }(hjhhhNhNubj< )}(h **child**h]hchild}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubh. The }(hjhhhNhNubj< )}(h **child**h]hchild}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubh1 can be mixture of a value node and subkey nodes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 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]j= )}(hxbc_node_for_each_subkeyh]j)}(hjPh]hxbc_node_for_each_subkey}(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjVubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hjRhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhj uh1jj j hjNhhhjmhKubah}(h]jIah ](j j eh"]h$]h&]j j )j huh1jhjmhKhjKhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjKhhhjmhKubeh}(h]h ](j macroeh"]h$]h&]j+ j j, jj- jj. j/ j0 uh1jhhhjhNhNubh)}(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:325: ./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:325: ./include/linux/bootconfig.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubj2 )}(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]j< )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjR )}(hhh](jW )}(h``parent`` An XBC node. h](j] )}(h ``parent``h]jp)}(hjh]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjw )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKhjubjW )}(h``child`` Iterated XBC node. h](j] )}(h ``child``h]jp)}(hjh]hchild}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjw )}(hhh]h)}(hIterated XBC node.h]hIterated XBC node.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKhj/ubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hj.hKhjubeh}(h]h ]h"]h$]h&]uh1jQ hjubh)}(h**Description**h]j< )}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjRubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./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 }(hjjhhhNhNubj< )}(h **parent**h]hparent}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjjubh!. Each child nodes are stored to }(hjjhhhNhNubj< )}(h **child**h]hchild}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjjubh. The }(hjjhhhNhNubj< )}(h **child**h]hchild}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjjubh is only the subkey node.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 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]j= )}(hxbc_node_for_each_array_valueh]j)}(hjh]hxbc_node_for_each_array_value}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhj uh1jj j hjhhhjhKubah}(h]jah ](j j eh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j macroeh"]h$]h&]j+ j j, jj- jj. j/ j0 uh1jhhhjhNhNubh)}(h;``xbc_node_for_each_array_value (node, key, anode, value)``h]jp)}(hjh]h7xbc_node_for_each_array_value (node, key, anode, value)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubah}(h]h ]h"]h$]h&]uh1jhj-hKhjhhubj2 )}(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]j< )}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj8ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhj4ubjR )}(hhh](jW )}(h``node`` An XBC node. h](j] )}(h``node``h]jp)}(hjYh]hnode}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1johjWubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjSubjw )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhKhjoubah}(h]h ]h"]h$]h&]uh1jv hjSubeh}(h]h ]h"]h$]h&]uh1jV hjnhKhjPubjW )}(h-``key`` A key string searched under **node** h](j] )}(h``key``h]jp)}(hjh]hkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjw )}(hhh]h)}(h$A key string searched under **node**h](hA key string searched under }(hjhhhNhNubj< )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKhjPubjW )}(h,``anode`` Iterated XBC node of array entry. h](j] )}(h ``anode``h]jp)}(hjh]hanode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjw )}(hhh]h)}(h!Iterated XBC node of array entry.h]h!Iterated XBC node of array entry.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKhjPubjW )}(h)``value`` Iterated value of array entry. h](j] )}(h ``value``h]jp)}(hjh]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhj ubjw )}(hhh]h)}(hIterated value of array entry.h]hIterated value of array entry.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKhj(ubah}(h]h ]h"]h$]h&]uh1jv hj ubeh}(h]h ]h"]h$]h&]uh1jV hj'hKhjPubeh}(h]h ]h"]h$]h&]uh1jQ hj4ubh)}(h**Description**h]j< )}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjKubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhj4ubh)}(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 }(hjchhhNhNubj< )}(h**key**h]hkey}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjcubh under }(hjchhhNhNubj< )}(h**node**h]hnode}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjcubh%. Each array entry node is stored to }(hjchhhNhNubj< )}(h **anode**h]hanode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjcubh and }(hjchhhNhNubj< )}(h **value**h]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjcubh . If the }(hjchhhNhNubj< )}(h**node**h]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjcubh doesn’t have }(hjchhhNhNubj< )}(h**key**h]hkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjcubhX 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.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 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]j= )}(hxbc_node_for_each_key_valueh]j)}(hjh]hxbc_node_for_each_key_value}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKubah}(h]h ]h"]h$]h&]hhj uh1jj j hjhhhjhKubah}(h]jah ](j j eh"]h$]h&]j j )j huh1jhjhKhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhKubeh}(h]h ](j macroeh"]h$]h&]j+ j j, j.j- j.j. j/ j0 uh1jhhhjhNhNubh)}(h4``xbc_node_for_each_key_value (node, knode, value)``h]jp)}(hj4h]h0xbc_node_for_each_key_value (node, knode, value)}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1johj2ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./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}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjJubah}(h]h ]h"]h$]h&]uh1jhj\hKhjhhubj2 )}(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]j< )}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjgubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjcubjR )}(hhh](jW )}(h``node`` An XBC node. h](j] )}(h``node``h]jp)}(hjh]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjw )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKhjubjW )}(h``knode`` Iterated key node h](j] )}(h ``knode``h]jp)}(hjh]hknode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjw )}(hhh]h)}(hIterated key nodeh]hIterated key node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKhjubjW )}(h ``value`` Iterated value string h](j] )}(h ``value``h]jp)}(hjh]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjubjw )}(hhh]h)}(hIterated value stringh]hIterated value string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jv hjubeh}(h]h ]h"]h$]h&]uh1jV hjhKhjubeh}(h]h ]h"]h$]h&]uh1jQ hjcubh)}(h**Description**h]j< )}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj3ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjcubh)}(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 }(hjKhhhNhNubj< )}(h**node**h]hnode}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjKubh/. Each key node and value string are stored in }(hjKhhhNhNubj< )}(h **knode**h]hknode}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjKubh and }(hjKhhhNhNubj< )}(h **value**h]hvalue}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjKubh respectively.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 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]j= )}(hxbc_for_each_key_valueh]j)}(hjh]hxbc_for_each_key_value}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hjhhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhMubah}(h]h ]h"]h$]h&]hhj uh1jj j hjhhhjhMubah}(h]jah ](j j eh"]h$]h&]j j )j huh1jhjhMhjhhubj )}(hhh]h}(h]h ]h"]h$]h&]uh1j hjhhhjhMubeh}(h]h ](j macroeh"]h$]h&]j+ j j, jj- jj. j/ j0 uh1jhhhjhNhNubh)}(h)``xbc_for_each_key_value (knode, value)``h]jp)}(hjh]h%xbc_for_each_key_value (knode, value)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./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:325: ./include/linux/bootconfig.hhKhjubah}(h]h ]h"]h$]h&]uh1jhj hKhjhhubj2 )}(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]j< )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhMhj ubjR )}(hhh](jW )}(h``knode`` Iterated key node h](j] )}(h ``knode``h]jp)}(hj: h]hknode}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1johj8 ubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhKhj4 ubjw )}(hhh]h)}(hIterated key nodeh]hIterated key node}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO hKhjP ubah}(h]h ]h"]h$]h&]uh1jv hj4 ubeh}(h]h ]h"]h$]h&]uh1jV hjO hKhj1 ubjW )}(h ``value`` Iterated value string h](j] )}(h ``value``h]jp)}(hjs h]hvalue}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1johjq ubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhMhjm ubjw )}(hhh]h)}(hIterated value stringh]hIterated value string}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jv hjm ubeh}(h]h ]h"]h$]h&]uh1jV hj hMhj1 ubeh}(h]h ]h"]h$]h&]uh1jQ hj ubh)}(h**Description**h]j< )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhMhj 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 hhhNhNubj< )}(h **knode**h]hknode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj ubh and }(hj hhhNhNubj< )}(h **value**h]hvalue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj ubh respectively.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 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](jd )}(hinth]hint}(hj!hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hj!hhhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhMubj, )}(h h]h }(hj&!hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj!hhhj%!hMubj= )}(hxbc_node_compose_keyh]j)}(hxbc_node_compose_keyh]hxbc_node_compose_key}(hj8!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj4!ubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hj!hhhj%!hMubjX )}(h/(struct xbc_node *node, char *buf, size_t size)h](j^ )}(hstruct xbc_node *nodeh](jY )}(hj\ h]hstruct}(hjT!hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hjP!ubj, )}(h h]h }(hja!hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjP!ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hjr!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjo!ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjt!modnameN classnameNj j )}j! ]j$ )}j j:!sbc.xbc_node_compose_keyasbuh1hhjP!ubj, )}(h h]h }(hj!hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ 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&]uh1jhjP!ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hjL!ubj^ )}(h char *bufh](jd )}(hcharh]hchar}(hj!hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hj!ubj, )}(h h]h }(hj!hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj!ubj )}(hj h]h*}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!ubj)}(hbufh]hbuf}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hjL!ubj^ )}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj "hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj "modnameN classnameNj j )}j! ]j!c.xbc_node_compose_keyasbuh1hhj"ubj, )}(h h]h }(hj)"hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj"ubj)}(hsizeh]hsize}(hj7"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hjL!ubeh}(h]h ]h"]h$]h&]hhuh1jW hj!hhhj%!hMubeh}(h]h ]h"]h$]h&]hhj uh1jj j hj!hhhj%!hMubah}(h]j !ah ](j j eh"]h$]h&]j j )j huh1jhj%!hMhj !hhubj )}(hhh]h)}(h'Compose full key string of the XBC nodeh]h'Compose full key string of the XBC node}(hja"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhM hj^"hhubah}(h]h ]h"]h$]h&]uh1j hj !hhhj%!hMubeh}(h]h ](j functioneh"]h$]h&]j+ j j, jy"j- jy"j. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj"ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhMhj}"ubjR )}(hhh](jW )}(h'``struct xbc_node *node`` An XBC node. h](j] )}(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&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhMhj"ubjw )}(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&]uh1jv hj"ubeh}(h]h ]h"]h$]h&]uh1jV hj"hMhj"ubjW )}(h)``char *buf`` A buffer to store the key. h](j] )}(h ``char *buf``h]jp)}(hj"h]h char *buf}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1johj"ubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhMhj"ubjw )}(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&]uh1jv hj"ubeh}(h]h ]h"]h$]h&]uh1jV hj"hMhj"ubjW )}(h)``size_t size`` The size of the **buf**. h](j] )}(h``size_t size``h]jp)}(hj#h]h size_t size}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1johj#ubah}(h]h ]h"]h$]h&]uh1j\ hb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhMhj#ubjw )}(hhh]h)}(hThe size of the **buf**.h](hThe size of the }(hj-#hhhNhNubj< )}(h**buf**h]hbuf}(hj5#hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj-#ubh.}(hj-#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)#hMhj*#ubah}(h]h ]h"]h$]h&]uh1jv hj#ubeh}(h]h ]h"]h$]h&]uh1jV hj)#hMhj"ubeh}(h]h ]h"]h$]h&]uh1jQ hj}"ubh)}(h**Description**h]j< )}(hja#h]h Description}(hjc#hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj_#ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./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 }(hjw#hhhNhNubj< )}(h**node**h]hnode}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjw#ubh into }(hjw#hhhNhNubj< )}(h**buf**h]hbuf}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjw#ubh0. Returns the total length of the key stored in }(hjw#hhhNhNubj< )}(h**buf**h]hbuf}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjw#ubh. Or returns -EINVAL if }(hjw#hhhNhNubj< )}(h**node**h]hnode}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjw#ubh@ is NULL, and -ERANGE if the key depth is deeper than max depth.}(hjw#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:325: ./include/linux/bootconfig.hhMhj}"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jxbc_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](jd )}(hinth]hint}(hj#hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hj#hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chK[ubj, )}(h h]h }(hj#hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj#hhhj#hK[ubj= )}(h xbc_get_infoh]j)}(h xbc_get_infoh]h xbc_get_info}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj $ubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hj#hhhj#hK[ubjX )}(h#(int *node_size, size_t *data_size)h](j^ )}(hint *node_sizeh](jd )}(hinth]hint}(hj+$hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hj'$ubj, )}(h h]h }(hj9$hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj'$ubj )}(hj h]h*}(hjG$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj'$ubj)}(h node_sizeh]h node_size}(hjT$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'$ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj#$ubj^ )}(hsize_t *data_sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjp$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjm$ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjr$modnameN classnameNj j )}j! ]j$ )}j j$sbc.xbc_get_infoasbuh1hhji$ubj, )}(h h]h }(hj$hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hji$ubj )}(hj h]h*}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hji$ubj)}(h data_sizeh]h data_size}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhji$ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj#$ubeh}(h]h ]h"]h$]h&]hhuh1jW hj#hhhj#hK[ubeh}(h]h ]h"]h$]h&]hhj uh1jj j hj#hhhj#hK[ubah}(h]j#ah ](j j eh"]h$]h&]j j )j huh1jhj#hK[hj#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:326: ./lib/bootconfig.chKShj$hhubah}(h]h ]h"]h$]h&]uh1j hj#hhhj#hK[ubeh}(h]h ](j functioneh"]h$]h&]j+ j j, j$j- j$j. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj$ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKWhj$ubjR )}(hhh](jW )}(h;``int *node_size`` A pointer to store the number of nodes. h](j] )}(h``int *node_size``h]jp)}(hj%h]hint *node_size}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1johj%ubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKThj%ubjw )}(hhh]h)}(h'A pointer to store the number of nodes.h]h'A pointer to store the number of nodes.}(hj/%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+%hKThj,%ubah}(h]h ]h"]h$]h&]uh1jv hj%ubeh}(h]h ]h"]h$]h&]uh1jV hj+%hKThj %ubjW )}(hF``size_t *data_size`` A pointer to store the size of bootconfig data. h](j] )}(h``size_t *data_size``h]jp)}(hjO%h]hsize_t *data_size}(hjQ%hhhNhNubah}(h]h ]h"]h$]h&]uh1johjM%ubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKUhjI%ubjw )}(hhh]h)}(h/A pointer to store the size of bootconfig data.h]h/A pointer to store the size of bootconfig data.}(hjh%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd%hKUhje%ubah}(h]h ]h"]h$]h&]uh1jv hjI%ubeh}(h]h ]h"]h$]h&]uh1jV hjd%hKUhj %ubeh}(h]h ]h"]h$]h&]uh1jQ hj$ubh)}(h**Description**h]j< )}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj%ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./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%hhhNhNubj< )}(h **node_size**h]h node_size}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj%ubh7 if it is not NULL, and the size of bootconfig data in }(hj%hhhNhNubj< )}(h **data_size**h]h data_size}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj%ubhR if it is not NULL. Return 0 if the boot config is initialized, or return -ENODEV.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKWhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jxbc_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](jY )}(hj\ h]hstruct}(hj%hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj%hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKuubj, )}(h h]h }(hj&hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj%hhhj&hKuubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj&modnameN classnameNj j )}j! ]j$ )}j xbc_root_nodesbc.xbc_root_nodeasbuh1hhj%hhhj&hKuubj, )}(h h]h }(hj3&hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj%hhhj&hKuubj )}(hj h]h*}(hjA&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%hhhj&hKuubj= )}(h xbc_root_nodeh]j)}(hj0&h]h xbc_root_node}(hjR&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjN&ubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hj%hhhj&hKuubjX )}(h(void)h]j^ )}(hvoidh]jd )}(hvoidh]hvoid}(hjm&hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hji&ubah}(h]h ]h"]h$]h&]noemphhhuh1j] hje&ubah}(h]h ]h"]h$]h&]hhuh1jW hj%hhhj&hKuubeh}(h]h ]h"]h$]h&]hhj uh1jj j hj%hhhj&hKuubah}(h]j%ah ](j j eh"]h$]h&]j j )j huh1jhj&hKuhj%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:326: ./lib/bootconfig.chKphj&hhubah}(h]h ]h"]h$]h&]uh1j hj%hhhj&hKuubeh}(h]h ](j functioneh"]h$]h&]j+ j j, j&j- j&j. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj&ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKthj&ubjR )}(hhh]jW )}(h``void`` no arguments h](j] )}(h``void``h]jp)}(hj&h]hvoid}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1johj&ubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKwhj&ubjw )}(hhh]h)}(h no argumentsh]h no arguments}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKwhj&ubah}(h]h ]h"]h$]h&]uh1jv hj&ubeh}(h]h ]h"]h$]h&]uh1jV hj&hKwhj&ubah}(h]h ]h"]h$]h&]uh1jQ hj&ubh)}(h**Description**h]j< )}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj'ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKyhj&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.}(hj)'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKqhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jxbc_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](jd )}(hinth]hint}(hjX'hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hjT'hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKubj, )}(h h]h }(hjg'hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjT'hhhjf'hKubj= )}(hxbc_node_indexh]j)}(hxbc_node_indexh]hxbc_node_index}(hjy'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhju'ubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hjT'hhhjf'hKubjX )}(h(struct xbc_node *node)h]j^ )}(hstruct xbc_node *nodeh](jY )}(hj\ h]hstruct}(hj'hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj'ubj, )}(h h]h }(hj'hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj'ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj'modnameN classnameNj j )}j! ]j$ )}j j{'sbc.xbc_node_indexasbuh1hhj'ubj, )}(h h]h }(hj'hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj'ubj )}(hj h]h*}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj'ubj)}(hnodeh]hnode}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj'ubah}(h]h ]h"]h$]h&]hhuh1jW hjT'hhhjf'hKubeh}(h]h ]h"]h$]h&]hhj uh1jj j hjP'hhhjf'hKubah}(h]jK'ah ](j j eh"]h$]h&]j j )j huh1jhjf'hKhjM'hhubj )}(hhh]h)}(hGet the index of XBC nodeh]hGet the index of XBC node}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chK~hj(hhubah}(h]h ]h"]h$]h&]uh1j hjM'hhhjf'hKubeh}(h]h ](j functioneh"]h$]h&]j+ j j, j0(j- j0(j. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hj:(h]h Parameters}(hj<(hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj8(ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj4(ubjR )}(hhh]jW )}(h:``struct xbc_node *node`` A target node of getting index. h](j] )}(h``struct xbc_node *node``h]jp)}(hjY(h]hstruct xbc_node *node}(hj[(hhhNhNubah}(h]h ]h"]h$]h&]uh1johjW(ubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhjS(ubjw )}(hhh]h)}(hA target node of getting index.h]hA target node of getting index.}(hjr(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn(hKhjo(ubah}(h]h ]h"]h$]h&]uh1jv hjS(ubeh}(h]h ]h"]h$]h&]uh1jV hjn(hKhjP(ubah}(h]h ]h"]h$]h&]uh1jQ hj4(ubh)}(h**Description**h]j< )}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj(ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj4(ubh)}(h5Return the index number of **node** in XBC node list.h](hReturn the index number of }(hj(hhhNhNubj< )}(h**node**h]hnode}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj(ubh in XBC node list.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj4(ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 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](jY )}(hj\ h]hstruct}(hj(hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj(hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKubj, )}(h h]h }(hj(hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj(hhhj(hKubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj )hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj )modnameN classnameNj j )}j! ]j$ )}j xbc_node_get_parentsbc.xbc_node_get_parentasbuh1hhj(hhhj(hKubj, )}(h h]h }(hj+)hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj(hhhj(hKubj )}(hj h]h*}(hj9)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj(hhhj(hKubj= )}(hxbc_node_get_parenth]j)}(hj()h]hxbc_node_get_parent}(hjJ)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjF)ubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hj(hhhj(hKubjX )}(h(struct xbc_node *node)h]j^ )}(hstruct xbc_node *nodeh](jY )}(hj\ h]hstruct}(hje)hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hja)ubj, )}(h h]h }(hjr)hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hja)ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj)modnameN classnameNj j )}j! ]j&)c.xbc_node_get_parentasbuh1hhja)ubj, )}(h h]h }(hj)hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ 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&]uh1jhja)ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj])ubah}(h]h ]h"]h$]h&]hhuh1jW hj(hhhj(hKubeh}(h]h ]h"]h$]h&]hhj uh1jj j hj(hhhj(hKubah}(h]j(ah ](j j eh"]h$]h&]j j )j huh1jhj(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:326: ./lib/bootconfig.chKhj)hhubah}(h]h ]h"]h$]h&]uh1j hj(hhhj(hKubeh}(h]h ](j functioneh"]h$]h&]j+ j j, j)j- j)j. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hj*h]h Parameters}(hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj*ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj*ubjR )}(hhh]jW )}(h'``struct xbc_node *node`` An XBC node. h](j] )}(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&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj!*ubjw )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hj@*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<*hKhj=*ubah}(h]h ]h"]h$]h&]uh1jv hj!*ubeh}(h]h ]h"]h$]h&]uh1jV hj<*hKhj*ubah}(h]h ]h"]h$]h&]uh1jQ hj*ubh)}(h**Description**h]j< )}(hjb*h]h Description}(hjd*hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj`*ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./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 }(hjx*hhhNhNubj< )}(h**node**h]hnode}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjx*ubh3. If the node is top node of the tree, return NULL.}(hjx*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jxbc_node_get_child (C function)c.xbc_node_get_childhNtauh1jhjhhhNhNubj)}(hhh](j)}(hReturn the data (which is always a null terminated string) of }(hj/hhhNhNubj< )}(h**node**h]hnode}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj/ubh5. If the node has invalid data, warn and return NULL.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj}/ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 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](jY )}(hj\ h]hstruct}(hj40hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj00hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKubj, )}(h h]h }(hjB0hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj00hhhjA0hKubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hjS0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjP0ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjU0modnameN classnameNj j )}j! ]j$ )}j xbc_node_find_subkeysbc.xbc_node_find_subkeyasbuh1hhj00hhhjA0hKubj, )}(h h]h }(hjt0hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj00hhhjA0hKubj )}(hj h]h*}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj00hhhjA0hKubj= )}(hxbc_node_find_subkeyh]j)}(hjq0h]hxbc_node_find_subkey}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj0ubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hj00hhhjA0hKubjX )}(h*(struct xbc_node *parent, const char *key)h](j^ )}(hstruct xbc_node *parenth](jY )}(hj\ h]hstruct}(hj0hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj0ubj, )}(h h]h }(hj0hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj0ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj0modnameN classnameNj j )}j! ]jo0c.xbc_node_find_subkeyasbuh1hhj0ubj, )}(h h]h }(hj0hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj0ubj )}(hj h]h*}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubj)}(hparenth]hparent}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj0ubj^ )}(hconst char *keyh](jY )}(hjjh]hconst}(hj1hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj1ubj, )}(h h]h }(hj+1hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj1ubjd )}(hcharh]hchar}(hj91hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hj1ubj, )}(h h]h }(hjG1hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj1ubj )}(hj h]h*}(hjU1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj1ubj)}(hkeyh]hkey}(hjb1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj0ubeh}(h]h ]h"]h$]h&]hhuh1jW hj00hhhjA0hKubeh}(h]h ]h"]h$]h&]hhj uh1jj j hj,0hhhjA0hKubah}(h]j'0ah ](j j eh"]h$]h&]j j )j huh1jhjA0hKhj)0hhubj )}(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:326: ./lib/bootconfig.chKhj1hhubah}(h]h ]h"]h$]h&]uh1j hj)0hhhjA0hKubeh}(h]h ](j functioneh"]h$]h&]j+ j j, j1j- j1j. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj1ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj1ubjR )}(hhh](jW )}(h)``struct xbc_node *parent`` An XBC node. h](j] )}(h``struct xbc_node *parent``h]jp)}(hj1h]hstruct xbc_node *parent}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1johj1ubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj1ubjw )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hKhj1ubah}(h]h ]h"]h$]h&]uh1jv hj1ubeh}(h]h ]h"]h$]h&]uh1jV hj1hKhj1ubjW )}(h"``const char *key`` A key string. h](j] )}(h``const char *key``h]jp)}(hj2h]hconst char *key}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1johj2ubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj2ubjw )}(hhh]h)}(h A key string.h]h A key string.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKhj2ubah}(h]h ]h"]h$]h&]uh1jv hj2ubeh}(h]h ]h"]h$]h&]uh1jV hj2hKhj1ubeh}(h]h ]h"]h$]h&]uh1jQ hj1ubh)}(h**Description**h]j< )}(hjA2h]h Description}(hjC2hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj?2ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./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 }(hjW2hhhNhNubj< )}(h **parent**h]hparent}(hj_2hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjW2ubh which matches }(hjW2hhhNhNubj< )}(h**key**h]hkey}(hjq2hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjW2ubh. The }(hjW2hhhNhNubj< )}(h**key**h]hkey}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjW2ubh4 can contain several words jointed with ‘.’. If }(hjW2hhhNhNubj< )}(h **parent**h]hparent}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjW2ubhT is NULL, this searches the node from whole tree. Return NULL if no node is matched.}(hjW2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 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](jY )}(hjjh]hconst}(hj2hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj2hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMubj, )}(h h]h }(hj2hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj2hhhj2hMubjd )}(hcharh]hchar}(hj2hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hj2hhhj2hMubj, )}(h h]h }(hj2hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj2hhhj2hMubj )}(hj h]h*}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj2hhhj2hMubj= )}(hxbc_node_find_valueh]j)}(hxbc_node_find_valueh]hxbc_node_find_value}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj3ubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hj2hhhj2hMubjX )}(hC(struct xbc_node *parent, const char *key, struct xbc_node **vnode)h](j^ )}(hstruct xbc_node *parenth](jY )}(hj\ h]hstruct}(hj33hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj/3ubj, )}(h h]h }(hj@3hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj/3ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hjQ3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjN3ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjS3modnameN classnameNj j )}j! ]j$ )}j j3sbc.xbc_node_find_valueasbuh1hhj/3ubj, )}(h h]h }(hjq3hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj/3ubj )}(hj h]h*}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/3ubj)}(hparenth]hparent}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj/3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj+3ubj^ )}(hconst char *keyh](jY )}(hjjh]hconst}(hj3hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj3ubj, )}(h h]h }(hj3hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj3ubjd )}(hcharh]hchar}(hj3hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hj3ubj, )}(h h]h }(hj3hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj3ubj )}(hj h]h*}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj)}(hkeyh]hkey}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj+3ubj^ )}(hstruct xbc_node **vnodeh](jY )}(hj\ h]hstruct}(hj4hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj3ubj, )}(h h]h }(hj4hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj3ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj 4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj"4modnameN classnameNj j )}j! ]jm3c.xbc_node_find_valueasbuh1hhj3ubj, )}(h h]h }(hj>4hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj3ubj )}(hj h]h*}(hjL4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj )}(hj h]h*}(hjY4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj)}(hvnodeh]hvnode}(hjf4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj+3ubeh}(h]h ]h"]h$]h&]hhuh1jW hj2hhhj2hMubeh}(h]h ]h"]h$]h&]hhj uh1jj j hj2hhhj2hMubah}(h]j2ah ](j j eh"]h$]h&]j j )j huh1jhj2hMhj2hhubj )}(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:326: ./lib/bootconfig.chKhj4hhubah}(h]h ]h"]h$]h&]uh1j hj2hhhj2hMubeh}(h]h ](j functioneh"]h$]h&]j+ j j, j4j- j4j. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj4ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj4ubjR )}(hhh](jW )}(h)``struct xbc_node *parent`` An XBC node. h](j] )}(h``struct xbc_node *parent``h]jp)}(hj4h]hstruct xbc_node *parent}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1johj4ubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj4ubjw )}(hhh]h)}(h An XBC node.h]h An XBC node.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKhj4ubah}(h]h ]h"]h$]h&]uh1jv hj4ubeh}(h]h ]h"]h$]h&]uh1jV hj4hKhj4ubjW )}(h"``const char *key`` A key string. h](j] )}(h``const char *key``h]jp)}(hj 5h]hconst char *key}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1johj5ubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj5ubjw )}(hhh]h)}(h A key string.h]h A key string.}(hj#5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hKhj 5ubah}(h]h ]h"]h$]h&]uh1jv hj5ubeh}(h]h ]h"]h$]h&]uh1jV hj5hKhj4ubjW )}(hC``struct xbc_node **vnode`` A container pointer of found XBC node. h](j] )}(h``struct xbc_node **vnode``h]jp)}(hjC5h]hstruct xbc_node **vnode}(hjE5hhhNhNubah}(h]h ]h"]h$]h&]uh1johjA5ubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj=5ubjw )}(hhh]h)}(h&A container pointer of found XBC node.h]h&A container pointer of found XBC node.}(hj\5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjX5hKhjY5ubah}(h]h ]h"]h$]h&]uh1jv hj=5ubeh}(h]h ]h"]h$]h&]uh1jV hjX5hKhj4ubeh}(h]h ]h"]h$]h&]uh1jQ hj4ubh)}(h**Description**h]j< )}(hj~5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj|5ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./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 }(hj5hhhNhNubj< )}(h **parent**h]hparent}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj5ubh! whose (parent) key node matches }(hj5hhhNhNubj< )}(h**key**h]hkey}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj5ubh, store it in }(hj5hhhNhNubj< )}(h ***vnode**h]h*vnode}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj5ubh$, and returns the value string. The }(hj5hhhNhNubj< )}(h**key**h]hkey}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj5ubh4 can contain several words jointed with ‘.’. If }(hj5hhhNhNubj< )}(h **parent**h]hparent}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj5ubh is NULL, this searches the node from whole tree. Return the value string if a matched key found, return NULL if no node is matched. Note that this returns 0-length string and stores NULL in }(hj5hhhNhNubj< )}(h ***vnode**h]h*vnode}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj5ubhh if the key has no value. And also it will return the value of the first entry if the value is an array.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chKhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 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](jd )}(hinth]hint}(hj/6hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hj+6hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chM#ubj, )}(h h]h }(hj>6hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj+6hhhj=6hM#ubj= )}(hxbc_node_compose_key_afterh]j)}(hxbc_node_compose_key_afterh]hxbc_node_compose_key_after}(hjP6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjL6ubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hj+6hhhj=6hM#ubjX )}(hF(struct xbc_node *root, struct xbc_node *node, char *buf, size_t size)h](j^ )}(hstruct xbc_node *rooth](jY )}(hj\ h]hstruct}(hjl6hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hjh6ubj, )}(h h]h }(hjy6hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjh6ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj6modnameN classnameNj j )}j! ]j$ )}j jR6sbc.xbc_node_compose_key_afterasbuh1hhjh6ubj, )}(h h]h }(hj6hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjh6ubj )}(hj h]h*}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjh6ubj)}(hrooth]hroot}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjh6ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hjd6ubj^ )}(hstruct xbc_node *nodeh](jY )}(hj\ h]hstruct}(hj6hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj6ubj, )}(h h]h }(hj6hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj6ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj6modnameN classnameNj j )}j! ]j6c.xbc_node_compose_key_afterasbuh1hhj6ubj, )}(h h]h }(hj7hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj6ubj )}(hj h]h*}(hj(7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj6ubj)}(hnodeh]hnode}(hj57hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hjd6ubj^ )}(h char *bufh](jd )}(hcharh]hchar}(hjN7hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hjJ7ubj, )}(h h]h }(hj\7hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjJ7ubj )}(hj h]h*}(hjj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJ7ubj)}(hbufh]hbuf}(hjw7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJ7ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hjd6ubj^ )}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj7modnameN classnameNj j )}j! ]j6c.xbc_node_compose_key_afterasbuh1hhj7ubj, )}(h h]h }(hj7hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj7ubj)}(hsizeh]hsize}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hjd6ubeh}(h]h ]h"]h$]h&]hhuh1jW hj+6hhhj=6hM#ubeh}(h]h ]h"]h$]h&]hhj uh1jj j hj'6hhhj=6hM#ubah}(h]j"6ah ](j j eh"]h$]h&]j j )j huh1jhj=6hM#hj$6hhubj )}(hhh]h)}(h*Compose partial key string of the XBC nodeh]h*Compose partial key string of the XBC node}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhj7hhubah}(h]h ]h"]h$]h&]uh1j hj$6hhhj=6hM#ubeh}(h]h ](j functioneh"]h$]h&]j+ j j, j8j- j8j. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hj 8h]h Parameters}(hj 8hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj 8ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhj8ubjR )}(hhh](jW )}(h(``struct xbc_node *root`` Root XBC node h](j] )}(h``struct xbc_node *root``h]jp)}(hj*8h]hstruct xbc_node *root}(hj,8hhhNhNubah}(h]h ]h"]h$]h&]uh1johj(8ubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhj$8ubjw )}(hhh]h)}(h Root XBC nodeh]h Root XBC node}(hjC8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?8hMhj@8ubah}(h]h ]h"]h$]h&]uh1jv hj$8ubeh}(h]h ]h"]h$]h&]uh1jV hj?8hMhj!8ubjW )}(h+``struct xbc_node *node`` Target XBC node. h](j] )}(h``struct xbc_node *node``h]jp)}(hjc8h]hstruct xbc_node *node}(hje8hhhNhNubah}(h]h ]h"]h$]h&]uh1johja8ubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhj]8ubjw )}(hhh]h)}(hTarget XBC node.h]hTarget XBC node.}(hj|8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx8hMhjy8ubah}(h]h ]h"]h$]h&]uh1jv hj]8ubeh}(h]h ]h"]h$]h&]uh1jV hjx8hMhj!8ubjW )}(h)``char *buf`` A buffer to store the key. h](j] )}(h ``char *buf``h]jp)}(hj8h]h char *buf}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1johj8ubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhj8ubjw )}(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&]uh1jv hj8ubeh}(h]h ]h"]h$]h&]uh1jV hj8hMhj!8ubjW )}(h)``size_t size`` The size of the **buf**. h](j] )}(h``size_t size``h]jp)}(hj8h]h size_t size}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1johj8ubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhj8ubjw )}(hhh]h)}(hThe size of the **buf**.h](hThe size of the }(hj8hhhNhNubj< )}(h**buf**h]hbuf}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj8ubh.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jv hj8ubeh}(h]h ]h"]h$]h&]uh1jV hj8hMhj!8ubeh}(h]h ]h"]h$]h&]uh1jQ hj8ubh)}(h**Description**h]j< )}(hj"9h]h Description}(hj$9hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj 9ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhj8ubh)}(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 }(hj89hhhNhNubj< )}(h**node**h]hnode}(hj@9hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj89ubh into }(hj89hhhNhNubj< )}(h**buf**h]hbuf}(hjR9hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj89ubh , which is starting right after }(hj89hhhNhNubj< )}(h**root**h]hroot}(hjd9hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj89ubh (}(hj89hhhNhNubj< )}(h**root**h]hroot}(hjv9hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj89ubh is not included.) If }(hj89hhhNhNubj< )}(h**root**h]hroot}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj89ubh) is NULL, this returns full key words of }(hj89hhhNhNubj< )}(h**node**h]hnode}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj89ubh0. Returns the total length of the key stored in }(hj89hhhNhNubj< )}(h**buf**h]hbuf}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj89ubh. Returns -EINVAL if }(hj89hhhNhNubj< )}(h**node**h]hnode}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj89ubh is NULL or }(hj89hhhNhNubj< )}(h**root**h]hroot}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj89ubh is not the ancestor of }(hj89hhhNhNubj< )}(h**node**h]hnode}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj89ubh or }(hj89hhhNhNubj< )}(h**root**h]hroot}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj89ubh is }(hj89hhhNhNubj< )}(h**node**h]hnode}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj89ubh, 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.}(hj89hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 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](jY )}(hj\ h]hstruct}(hj?:hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj;:hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMTubj, )}(h h]h }(hjM:hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj;:hhhjL:hMTubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj^:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj[:ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj`:modnameN classnameNj j )}j! ]j$ )}j xbc_node_find_next_leafsbc.xbc_node_find_next_leafasbuh1hhj;:hhhjL:hMTubj, )}(h h]h }(hj:hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj;:hhhjL:hMTubj )}(hj h]h*}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj;:hhhjL:hMTubj= )}(hxbc_node_find_next_leafh]j)}(hj|:h]hxbc_node_find_next_leaf}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hj;:hhhjL:hMTubjX )}(h.(struct xbc_node *root, struct xbc_node *node)h](j^ )}(hstruct xbc_node *rooth](jY )}(hj\ h]hstruct}(hj:hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj:ubj, )}(h h]h }(hj:hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj:ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj:modnameN classnameNj j )}j! ]jz:c.xbc_node_find_next_leafasbuh1hhj:ubj, )}(h h]h }(hj:hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj:ubj )}(hj h]h*}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj:ubj)}(hrooth]hroot}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj:ubj^ )}(hstruct xbc_node *nodeh](jY )}(hj\ h]hstruct}(hj);hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj%;ubj, )}(h h]h }(hj6;hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj%;ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hjG;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjD;ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjI;modnameN classnameNj j )}j! ]jz:c.xbc_node_find_next_leafasbuh1hhj%;ubj, )}(h h]h }(hje;hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj%;ubj )}(hj h]h*}(hjs;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%;ubj)}(hnodeh]hnode}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj%;ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj:ubeh}(h]h ]h"]h$]h&]hhuh1jW hj;:hhhjL:hMTubeh}(h]h ]h"]h$]h&]hhj uh1jj j hj7:hhhjL:hMTubah}(h]j2:ah ](j j eh"]h$]h&]j j )j huh1jhjL:hMThj4: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:326: ./lib/bootconfig.chMLhj;hhubah}(h]h ]h"]h$]h&]uh1j hj4:hhhjL:hMTubeh}(h]h ](j functioneh"]h$]h&]j+ j j, j;j- j;j. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj;ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMPhj;ubjR )}(hhh](jW )}(h+``struct xbc_node *root`` An XBC root node h](j] )}(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&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMMhj;ubjw )}(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&]uh1jv hj;ubeh}(h]h ]h"]h$]h&]uh1jV hj<hMMhj;ubjW )}(h9``struct xbc_node *node`` An XBC node which starts from. h](j] )}(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&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMNhj<ubjw )}(hhh]h)}(hAn XBC node which starts from.h]hAn XBC node which starts from.}(hj=<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9<hMNhj:<ubah}(h]h ]h"]h$]h&]uh1jv hj<ubeh}(h]h ]h"]h$]h&]uh1jV hj9<hMNhj;ubeh}(h]h ]h"]h$]h&]uh1jQ hj;ubh)}(h**Description**h]j< )}(hj_<h]h Description}(hja<hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj]<ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./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 }(hju<hhhNhNubj< )}(h**node**h]hnode}(hj}<hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hju<ubh under }(hju<hhhNhNubj< )}(h**root**h]hroot}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hju<ubh node (including }(hju<hhhNhNubj< )}(h**root**h]hroot}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hju<ubhK node itself). Return the next node or NULL if next leaf node is not found.}(hju<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMPhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 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](jY )}(hjjh]hconst}(hj<hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj<hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMubj, )}(h h]h }(hj<hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj<hhhj<hMubjd )}(hcharh]hchar}(hj<hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hj<hhhj<hMubj, )}(h h]h }(hj=hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj<hhhj<hMubj )}(hj h]h*}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj<hhhj<hMubj= )}(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&]uh1jhj=ubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hj<hhhj<hMubjX )}(h/(struct xbc_node *root, struct xbc_node **leaf)h](j^ )}(hstruct xbc_node *rooth](jY )}(hj\ h]hstruct}(hj?=hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj;=ubj, )}(h h]h }(hjL=hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj;=ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj]=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjZ=ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj_=modnameN classnameNj j )}j! ]j$ )}j j%=sbc.xbc_node_find_next_key_valueasbuh1hhj;=ubj, )}(h h]h }(hj}=hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj;=ubj )}(hj h]h*}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj;=ubj)}(hrooth]hroot}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;=ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj7=ubj^ )}(hstruct xbc_node **leafh](jY )}(hj\ h]hstruct}(hj=hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj=ubj, )}(h h]h }(hj=hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj=ubh)}(hhh]j)}(hxbc_nodeh]hxbc_node}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetj=modnameN classnameNj j )}j! ]jy=c.xbc_node_find_next_key_valueasbuh1hhj=ubj, )}(h h]h }(hj=hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ 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}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj7=ubeh}(h]h ]h"]h$]h&]hhuh1jW hj<hhhj<hMubeh}(h]h ]h"]h$]h&]hhj uh1jj j hj<hhhj<hMubah}(h]j<ah ](j j eh"]h$]h&]j j )j huh1jhj<hMhj<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:326: ./lib/bootconfig.chM~hj<>hhubah}(h]h ]h"]h$]h&]uh1j hj<hhhj<hMubeh}(h]h ](j functioneh"]h$]h&]j+ j j, jW>j- jW>j. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hja>h]h Parameters}(hjc>hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj_>ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhj[>ubjR )}(hhh](jW )}(h+``struct xbc_node *root`` An XBC root node h](j] )}(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&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhjz>ubjw )}(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&]uh1jv hjz>ubeh}(h]h ]h"]h$]h&]uh1jV hj>hMhjw>ubjW )}(hN``struct xbc_node **leaf`` A container pointer of XBC node which starts from. h](j] )}(h``struct xbc_node **leaf``h]jp)}(hj>h]hstruct xbc_node **leaf}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1johj>ubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhj>ubjw )}(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&]uh1jv hj>ubeh}(h]h ]h"]h$]h&]uh1jV hj>hMhjw>ubeh}(h]h ]h"]h$]h&]uh1jQ hj[>ubh)}(h**Description**h]j< )}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj>ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhj[>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.hG](hASearch the next leaf node (which means the terminal key node) of }(hj ?hhhNhNubj< )}(h ***leaf**h]h*leaf}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj ?ubh under }(hj ?hhhNhNubj< )}(h**root**h]hroot}(hj$?hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj ?ubh$ node. Returns the value and update }(hj ?hhhNhNubj< )}(h ***leaf**h]h*leaf}(hj6?hhhNhNubah}(h]h ]h"]h$]h&]uh1j; 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:326: ./lib/bootconfig.chMhj[>ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 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](jd )}(hvoidh]hvoid}(hjo?hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hjk?hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMubj, )}(h h]h }(hj~?hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjk?hhhj}?hMubj= )}(h _xbc_exith]j)}(h _xbc_exith]h _xbc_exit}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj?ubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hjk?hhhj}?hMubjX )}(h (bool early)h]j^ )}(h bool earlyh](jd )}(hj h]hbool}(hj?hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hj?ubj, )}(h h]h }(hj?hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj?ubj)}(hearlyh]hearly}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj?ubah}(h]h ]h"]h$]h&]hhuh1jW hjk?hhhj}?hMubeh}(h]h ]h"]h$]h&]hhj uh1jj j hjg?hhhj}?hMubah}(h]jb?ah ](j j eh"]h$]h&]j j )j huh1jhj}?hMhjd?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:326: ./lib/bootconfig.chMhj?hhubah}(h]h ]h"]h$]h&]uh1j hjd?hhhj}?hMubeh}(h]h ](j functioneh"]h$]h&]j+ j j, j @j- j @j. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hj@ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhj @ubjR )}(hhh]jW )}(hM``bool early`` Set true if this is called before budy system is initialized. h](j] )}(h``bool early``h]jp)}(hj2@h]h bool early}(hj4@hhhNhNubah}(h]h ]h"]h$]h&]uh1johj0@ubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhj,@ubjw )}(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.}(hjK@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG@hMhjH@ubah}(h]h ]h"]h$]h&]uh1jv hj,@ubeh}(h]h ]h"]h$]h&]uh1jV hjG@hMhj)@ubah}(h]h ]h"]h$]h&]uh1jQ hj @ubh)}(h**Description**h]j< )}(hjm@h]h Description}(hjo@hhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjk@ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./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:326: ./lib/bootconfig.chMhj @ubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jxbc_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](jd )}(hinth]hint}(hj@hhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hj@hhhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMubj, )}(h h]h }(hj@hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj@hhhj@hMubj= )}(hxbc_inith]j)}(hxbc_inith]hxbc_init}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj@ubah}(h]h ](jR jS eh"]h$]h&]hhuh1j< hj@hhhj@hMubjX )}(h=(const char *data, size_t size, const char **emsg, int *epos)h](j^ )}(hconst char *datah](jY )}(hjjh]hconst}(hj@hhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hj@ubj, )}(h h]h }(hj@hhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj@ubjd )}(hcharh]hchar}(hj AhhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hj@ubj, )}(h h]h }(hjAhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hj@ubj )}(hj h]h*}(hj&AhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@ubj)}(hdatah]hdata}(hj3AhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj@ubj^ )}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjOAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjLAubah}(h]h ]h"]h$]h&] refdomainj reftypej reftargetjQAmodnameN classnameNj j )}j! ]j$ )}j j@sb c.xbc_initasbuh1hhjHAubj, )}(h h]h }(hjoAhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjHAubj)}(hsizeh]hsize}(hj}AhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjHAubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj@ubj^ )}(hconst char **emsgh](jY )}(hjjh]hconst}(hjAhhhNhNubah}(h]h ]je ah"]h$]h&]uh1jX hjAubj, )}(h h]h }(hjAhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjAubjd )}(hcharh]hchar}(hjAhhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hjAubj, )}(h h]h }(hjAhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ 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}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj@ubj^ )}(h int *eposh](jd )}(hinth]hint}(hjBhhhNhNubah}(h]h ]jp ah"]h$]h&]uh1jc hjAubj, )}(h h]h }(hjBhhhNhNubah}(h]h ]j8 ah"]h$]h&]uh1j+ hjAubj )}(hj h]h*}(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubj)}(heposh]hepos}(hj)BhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphhhuh1j] hj@ubeh}(h]h ]h"]h$]h&]hhuh1jW hj@hhhj@hMubeh}(h]h ]h"]h$]h&]hhj uh1jj j hj@hhhj@hMubah}(h]j@ah ](j j eh"]h$]h&]j j )j huh1jhj@hMhj@hhubj )}(hhh]h)}(h0Parse given XBC file and build XBC internal treeh]h0Parse given XBC file and build XBC internal tree}(hjSBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhjPBhhubah}(h]h ]h"]h$]h&]uh1j hj@hhhj@hMubeh}(h]h ](j functioneh"]h$]h&]j+ j j, jkBj- jkBj. j/ j0 uh1jhhhjhNhNubj2 )}(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]j< )}(hjuBh]h Parameters}(hjwBhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjsBubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhjoBubjR )}(hhh](jW )}(h8``const char *data`` The boot config text original data h](j] )}(h``const char *data``h]jp)}(hjBh]hconst char *data}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1johjBubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhjBubjw )}(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&]uh1jv hjBubeh}(h]h ]h"]h$]h&]uh1jV hjBhMhjBubjW )}(h%``size_t size`` The size of **data** h](j] )}(h``size_t size``h]jp)}(hjBh]h size_t size}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1johjBubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhjBubjw )}(hhh]h)}(hThe size of **data**h](h The size of }(hjBhhhNhNubj< )}(h**data**h]hdata}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjBubeh}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jv hjBubeh}(h]h ]h"]h$]h&]uh1jV hjBhMhjBubjW )}(hK``const char **emsg`` A pointer of const char * to store the error message h](j] )}(h``const char **emsg``h]jp)}(hjCh]hconst char **emsg}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1johjCubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhjCubjw )}(hhh]h)}(h4A pointer of const char * to store the error messageh]h4A pointer of const char * to store the error message}(hj-ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)ChMhj*Cubah}(h]h ]h"]h$]h&]uh1jv hjCubeh}(h]h ]h"]h$]h&]uh1jV hj)ChMhjBubjW )}(h;``int *epos`` A pointer of int to store the error position h](j] )}(h ``int *epos``h]jp)}(hjMCh]h int *epos}(hjOChhhNhNubah}(h]h ]h"]h$]h&]uh1johjKCubah}(h]h ]h"]h$]h&]uh1j\ hX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhjGCubjw )}(hhh]h)}(h,A pointer of int to store the error positionh]h,A pointer of int to store the error position}(hjfChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbChMhjcCubah}(h]h ]h"]h$]h&]uh1jv hjGCubeh}(h]h ]h"]h$]h&]uh1jV hjbChMhjBubeh}(h]h ]h"]h$]h&]uh1jQ hjoBubh)}(h**Description**h]j< )}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjCubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhjoBubh)}(hXThis parses the boot config text in **data**. **size** must be smaller than XBC_DATA_MAX. Return the number of stored nodes (>0) if succeeded, or -errno if there is any error. In error cases, **emsg** will be updated with an error message and **epos** will be updated with the error position which is the byte offset of **buf**. If the error is not a parser error, **epos** will be -1.h](h$This parses the boot config text in }(hjChhhNhNubj< )}(h**data**h]hdata}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjCubh. }(hjChhhNhNubj< )}(h**size**h]hsize}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjCubh must be smaller than XBC_DATA_MAX. Return the number of stored nodes (>0) if succeeded, or -errno if there is any error. In error cases, }(hjChhhNhNubj< )}(h**emsg**h]hemsg}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjCubh+ will be updated with an error message and }(hjChhhNhNubj< )}(h**epos**h]hepos}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjCubhE will be updated with the error position which is the byte offset of }(hjChhhNhNubj< )}(h**buf**h]hbuf}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjCubh&. If the error is not a parser error, }(hjChhhNhNubj< )}(h**epos**h]hepos}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j; hjCubh will be -1.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/admin-guide/bootconfig:326: ./lib/bootconfig.chMhjoBubeh}(h]h ] kernelindentah"]h$]h&]uh1j1 hjhhhNhNubeh}(h]functions-and-structuresah ]h"]functions and structuresah$]h&]uh1hhhhhhhhMCubeh}(h](boot-configurationheh ]h"](boot configuration bootconfigeh$]h&]uh1hhhhhhhhKexpect_referenced_by_name}j.Dhsexpect_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_handlerjXDerror_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}(j.Dhj-Dj*DjSjPjUjRj3j0jjjMjJjjjKjHjjjCj@jjj;j8jjj%Dj"Du nametypes}(j.Dj-DjSjUj3jjMjjKjjCjj;jj%Duh}(hhj*DhjPj/jRjVj0jjj6jJjjjXjHjjjj@jjjNj8jjj>j"Djjjj j j j j7j<jjj[j`jjjjjyj~jjjIjNjjjjjjj !j!j#j#j%j%jK'jP'j(j(j*j*jz,j,jl.jq.j'0j,0j2j2j"6j'6j2:j7:j<j<jb?jg?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.