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/doc-guide/parse-headersmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/zh_TW/doc-guide/parse-headersmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/it_IT/doc-guide/parse-headersmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ja_JP/doc-guide/parse-headersmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ko_KR/doc-guide/parse-headersmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/pt_BR/doc-guide/parse-headersmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/sp_SP/doc-guide/parse-headersmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hIncluding uAPI header filesh]hIncluding uAPI header files}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhE/var/lib/git/docbuild/linux/Documentation/doc-guide/parse-headers.rsthKubh paragraph)}(hXSometimes, it is useful to include header files and C example codes in order to describe the userspace API and to generate cross-references between the code and the documentation. Adding cross-references for userspace API files has an additional advantage: Sphinx will generate warnings if a symbol is not found at the documentation. That helps to keep the uAPI documentation in sync with the Kernel changes. The :ref:`parse_headers.py ` provides a way to generate such cross-references. It has to be called via Makefile, while building the documentation. Please see ``Documentation/userspace-api/media/Makefile`` for an example about how to use it inside the Kernel tree.h](hXSometimes, it is useful to include header files and C example codes in order to describe the userspace API and to generate cross-references between the code and the documentation. Adding cross-references for userspace API files has an additional advantage: Sphinx will generate warnings if a symbol is not found at the documentation. That helps to keep the uAPI documentation in sync with the Kernel changes. The }(hhhhhNhNubh)}(h':ref:`parse_headers.py `h]hinline)}(hhh]hparse_headers.py}(hhhhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdocdoc-guide/parse-headers refdomainhreftyperef refexplicitrefwarn reftarget parse_headersuh1hhhhKhhubh provides a way to generate such cross-references. It has to be called via Makefile, while building the documentation. Please see }(hhhhhNhNubhliteral)}(h.``Documentation/userspace-api/media/Makefile``h]h*Documentation/userspace-api/media/Makefile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh; for an example about how to use it inside the Kernel tree.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubhtarget)}(h.. _parse_headers:h]h}(h]h ]h"]h$]h&]refid parse-headersuh1jhKhhhhhhubh)}(hhh](h)}(htools/docs/parse_headers.pyh]htools/docs/parse_headers.py}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hhhhhKubh)}(hhh](h)}(hNAMEh]hNAME}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hhhhhKubh)}(hparse_headers.py - parse a C file, in order to identify functions, structs, enums and defines and create cross-references to a Sphinx book.h]hparse_headers.py - parse a C file, in order to identify functions, structs, enums and defines and create cross-references to a Sphinx book.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj7hhubeh}(h]nameah ]h"]nameah$]h&]uh1hhj&hhhhhKubh)}(hhh](h)}(hUSAGEh]hUSAGE}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hhhhhKubh)}(hGparse-headers.py [-h] [-d] [-t] ``FILE_IN`` ``FILE_OUT`` ``FILE_RULES``h](h parse-headers.py [-h] [-d] [-t] }(hjohhhNhNubh)}(h ``FILE_IN``h]hFILE_IN}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoubh }(hjohhhNhNubh)}(h ``FILE_OUT``h]hFILE_OUT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoubh }hjosbh)}(h``FILE_RULES``h]h FILE_RULES}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]uh1hhhhKhj^hhubeh}(h]usageah ]h"]usageah$]h&]uh1hhj&hhhhhKubh)}(hhh](h)}(hSYNOPSISh]hSYNOPSIS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK!ubh)}(hXDConverts a C header or source file ``FILE_IN`` into a ReStructured Text included via ..parsed-literal block with cross-references for the documentation files that describe the API. It accepts an optional ``FILE_RULES`` file to describe what elements will be either ignored or be pointed to a non-default reference type/name.h](h#Converts a C header or source file }(hjhhhNhNubh)}(h ``FILE_IN``h]hFILE_IN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh into a ReStructured Text included via ..parsed-literal block with cross-references for the documentation files that describe the API. It accepts an optional }(hjhhhNhNubh)}(h``FILE_RULES``h]h FILE_RULES}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhj file to describe what elements will be either ignored or be pointed to a non-default reference type/name.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK#hjhhubh)}(h&The output is written at ``FILE_OUT``.h](hThe output is written at }(hjhhhNhNubh)}(h ``FILE_OUT``h]hFILE_OUT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK)hjhhubh)}(hIt is capable of identifying ``define``, ``struct``, ``typedef``, ``enum`` and enum ``symbol``, creating cross-references for all of them.h](hIt is capable of identifying }(hjhhhNhNubh)}(h ``define``h]hdefine}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, }(hjhhhNhNubh)}(h ``struct``h]hstruct}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, }hjsbh)}(h ``typedef``h]htypedef}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, }hjsbh)}(h``enum``h]henum}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh and enum }(hjhhhNhNubh)}(h ``symbol``h]hsymbol}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh,, creating cross-references for all of them.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK+hjhhubh)}(htIt is also capable of distinguishing ``#define`` used for specifying Linux-specific macros used to define ``ioctl``.h](h%It is also capable of distinguishing }(hjhhhNhNubh)}(h ``#define``h]h#define}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh: used for specifying Linux-specific macros used to define }(hjhhhNhNubh)}(h ``ioctl``h]hioctl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK.hjhhubh)}(h:The optional ``FILE_RULES`` contains a set of rules like::h](h The optional }(hjhhhNhNubh)}(h``FILE_RULES``h]h FILE_RULES}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh contains a set of rules like:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK1hjhhubh literal_block)}(hignore ioctl VIDIOC_ENUM_FMT replace ioctl VIDIOC_DQBUF vidioc_qbuf replace define V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ :c:type:`v4l2_event_motion_det`h]hignore ioctl VIDIOC_ENUM_FMT replace ioctl VIDIOC_DQBUF vidioc_qbuf replace define V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ :c:type:`v4l2_event_motion_det`}hjsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jhhhK3hjhhubeh}(h]synopsisah ]h"]synopsisah$]h&]uh1hhj&hhhhhK!ubh)}(hhh](h)}(hPOSITIONAL ARGUMENTSh]hPOSITIONAL ARGUMENTS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK8ubh block_quote)}(hn``FILE_IN`` Input C file ``FILE_OUT`` Output RST file ``FILE_RULES`` Exceptions file (optional) h]hdefinition_list)}(hhh](hdefinition_list_item)}(h``FILE_IN`` Input C file h](hterm)}(h ``FILE_IN``h]h)}(hjh]hFILE_IN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhK;hj ubh definition)}(hhh]h)}(h Input C fileh]h Input C file}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hj+ubah}(h]h ]h"]h$]h&]uh1j)hj ubeh}(h]h ]h"]h$]h&]uh1j hhhK;hjubj )}(h``FILE_OUT`` Output RST file h](j)}(h ``FILE_OUT``h]h)}(hjNh]hFILE_OUT}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]uh1jhhhK>hjHubj*)}(hhh]h)}(hOutput RST fileh]hOutput RST file}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK>hjcubah}(h]h ]h"]h$]h&]uh1j)hjHubeh}(h]h ]h"]h$]h&]uh1j hhhK>hjubj )}(h*``FILE_RULES`` Exceptions file (optional) h](j)}(h``FILE_RULES``h]h)}(hjh]h FILE_RULES}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKAhjubj*)}(hhh]h)}(hExceptions file (optional)h]hExceptions file (optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKAhjubah}(h]h ]h"]h$]h&]uh1j)hjubeh}(h]h ]h"]h$]h&]uh1j hhhKAhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhK:hjhhubeh}(h]positional-argumentsah ]h"]positional argumentsah$]h&]uh1hhj&hhhhhK8ubh)}(hhh](h)}(hOPTIONSh]hOPTIONS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKDubj)}(h``-h``, ``--help`` show a help message and exit ``-d``, ``--debug`` Increase debug level. Can be used multiple times ``-t``, ``--toc`` instead of a literal block, outputs a TOC table at the RST file h]j)}(hhh](j )}(h/``-h``, ``--help`` show a help message and exith](j)}(h``-h``, ``--help``h](h)}(h``-h``h]h-h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, }(hjhhhNhNubh)}(h ``--help``h]h--help}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1jhhhKFhjubj*)}(hhh]h)}(hshow a help message and exith]hshow a help message and exit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhjubah}(h]h ]h"]h$]h&]uh1j)hjubeh}(h]h ]h"]h$]h&]uh1j hhhKFhjubj )}(hD``-d``, ``--debug`` Increase debug level. Can be used multiple timesh](j)}(h``-d``, ``--debug``h](h)}(h``-d``h]h-d}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3ubh, }(hj3hhhNhNubh)}(h ``--debug``h]h--debug}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3ubeh}(h]h ]h"]h$]h&]uh1jhhhKHhj/ubj*)}(hhh]h)}(h0Increase debug level. Can be used multiple timesh]h0Increase debug level. Can be used multiple times}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhj]ubah}(h]h ]h"]h$]h&]uh1j)hj/ubeh}(h]h ]h"]h$]h&]uh1j hhhKHhjubj )}(hS``-t``, ``--toc`` instead of a literal block, outputs a TOC table at the RST file h](j)}(h``-t``, ``--toc``h](h)}(h``-t``h]h-t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~ubh, }(hj~hhhNhNubh)}(h ``--toc``h]h--toc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~ubeh}(h]h ]h"]h$]h&]uh1jhhhKLhjzubj*)}(hhh]h)}(h?instead of a literal block, outputs a TOC table at the RST fileh]h?instead of a literal block, outputs a TOC table at the RST file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhjubah}(h]h ]h"]h$]h&]uh1j)hjzubeh}(h]h ]h"]h$]h&]uh1j hhhKLhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhKFhjhhubeh}(h]optionsah ]h"]optionsah$]h&]uh1hhj&hhhhhKDubh)}(hhh](h)}(h DESCRIPTIONh]h DESCRIPTION}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKOubh)}(hCreates an enriched version of a Kernel header file with cross-links to each C data structure type, from ``FILE_IN``, formatting it with reStructuredText notation, either as-is or as a table of contents.h](hiCreates an enriched version of a Kernel header file with cross-links to each C data structure type, from }(hjhhhNhNubh)}(h ``FILE_IN``h]hFILE_IN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhW, formatting it with reStructuredText notation, either as-is or as a table of contents.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKQhjhhubh)}(hIt accepts an optional ``FILE_RULES`` which describes what elements will be either ignored or be pointed to a non-default reference, and optionally defines the C namespace to be used.h](hIt accepts an optional }(hj hhhNhNubh)}(h``FILE_RULES``h]h FILE_RULES}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh which describes what elements will be either ignored or be pointed to a non-default reference, and optionally defines the C namespace to be used.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKUhjhhubh)}(hIt is meant to allow having more comprehensive documentation, where uAPI headers will create cross-reference links to the code.h]hIt is meant to allow having more comprehensive documentation, where uAPI headers will create cross-reference links to the code.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhjhhubh)}(h*The output is written at the ``FILE_OUT``.h](hThe output is written at the }(hj8hhhNhNubh)}(h ``FILE_OUT``h]hFILE_OUT}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubh.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK\hjhhubh)}(hlThe ``FILE_RULES`` may contain contain three types of statements: **ignore**, **replace** and **namespace**.h](hThe }(hjXhhhNhNubh)}(h``FILE_RULES``h]h FILE_RULES}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXubh0 may contain contain three types of statements: }(hjXhhhNhNubhstrong)}(h **ignore**h]hignore}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jrhjXubh, }(hjXhhhNhNubjs)}(h **replace**h]hreplace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jrhjXubh and }(hjXhhhNhNubjs)}(h **namespace**h]h namespace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jrhjXubh.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK^hjhhubh)}(hBy default, it create rules for all symbols and defines, but it also allows parsing an exception file. Such file contains a set of rules using the syntax below:h]hBy default, it create rules for all symbols and defines, but it also allows parsing an exception file. Such file contains a set of rules using the syntax below:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKahjhhubhenumerated_list)}(hhh]h list_item)}(h'Ignore rules: ignore *type* *symbol* h](h)}(h Ignore rules:h]h Ignore rules:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKehjubj)}(hignore *type* *symbol* h]h)}(hignore *type* *symbol*h](hignore }(hjhhhNhNubhemphasis)}(h*type*h]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj)}(h*symbol*h]hsymbol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhhhKghjubah}(h]h ]h"]h$]h&]uh1jhhhKghjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jhjhhhhhKeubh)}(h-Removes the symbol from reference generation.h]h-Removes the symbol from reference generation.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKihjhhubj)}(hhh](j)}(hReplace rules: replace *type* *old_symbol* *new_reference* Replaces *old_symbol* with a *new_reference*. The *new_reference* can be: - A simple symbol name; - A full Sphinx reference. h](h)}(hReplace rules:h]hReplace rules:}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKkhj3ubj)}(hreplace *type* *old_symbol* *new_reference* Replaces *old_symbol* with a *new_reference*. The *new_reference* can be: - A simple symbol name; - A full Sphinx reference. h](h)}(h+replace *type* *old_symbol* *new_reference*h](hreplace }(hjIhhhNhNubj)}(h*type*h]htype}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh }(hjIhhhNhNubj)}(h *old_symbol*h]h old_symbol}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh }hjIsbj)}(h*new_reference*h]h new_reference}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1hhhhKmhjEubh)}(hIReplaces *old_symbol* with a *new_reference*. The *new_reference* can be:h](h Replaces }(hjhhhNhNubj)}(h *old_symbol*h]h old_symbol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with a }(hjhhhNhNubj)}(h*new_reference*h]h new_reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. The }(hjhhhNhNubj)}(h*new_reference*h]h new_reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh can be:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKohjEubh bullet_list)}(hhh](j)}(hA simple symbol name;h]h)}(hjh]hA simple symbol name;}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKrhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hA full Sphinx reference. h]h)}(hA full Sphinx reference.h]hA full Sphinx reference.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhKrhjEubeh}(h]h ]h"]h$]h&]uh1jhhhKmhj3ubeh}(h]h ]h"]h$]h&]uh1jhj0hhhhhNubj)}(hNamespace rules namespace *namespace* Sets C *namespace* to be used during cross-reference generation. Can be overridden by replace rules. h](h)}(hNamespace rulesh]hNamespace rules}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhjubj)}(h|namespace *namespace* Sets C *namespace* to be used during cross-reference generation. Can be overridden by replace rules. h](h)}(hnamespace *namespace*h](h namespace }(hj+hhhNhNubj)}(h *namespace*h]h namespace}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1hhhhKwhj'ubh)}(hdSets C *namespace* to be used during cross-reference generation. Can be overridden by replace rules.h](hSets C }(hjGhhhNhNubj)}(h *namespace*h]h namespace}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubhR to be used during cross-reference generation. Can be overridden by replace rules.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKyhj'ubeh}(h]h ]h"]h$]h&]uh1jhhhKwhjubeh}(h]h ]h"]h$]h&]uh1jhj0hhhhhNubeh}(h]h ]h"]h$]h&]jjjhj j!startKuh1jhjhhhhhKkubh)}(h+On ignore and replace rules, *type* can be:h](hOn ignore and replace rules, }(hjzhhhNhNubj)}(h*type*h]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh can be:}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK|hjhhubj)}(hX- ioctl: for defines of the form ``_IO*``, e.g., ioctl definitions - define: for other defines - symbol: for symbols defined within enums; - typedef: for typedefs; - enum: for the name of a non-anonymous enum; - struct: for structs. h]j)}(hhh](j)}(hCioctl: for defines of the form ``_IO*``, e.g., ioctl definitions h]j)}(hhh]j )}(hAioctl: for defines of the form ``_IO*``, e.g., ioctl definitions h](j)}(hioctl:h]hioctl:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj*)}(hhh]h)}(h9for defines of the form ``_IO*``, e.g., ioctl definitionsh](hfor defines of the form }(hjhhhNhNubh)}(h``_IO*``h]h_IO*}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, e.g., ioctl definitions}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j)hjubeh}(h]h ]h"]h$]h&]uh1j hhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hdefine: for other defines h]j)}(hhh]j )}(hdefine: for other defines h](j)}(hdefine:h]hdefine:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj*)}(hhh]h)}(hfor other definesh]hfor other defines}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j)hjubeh}(h]h ]h"]h$]h&]uh1j hhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h,symbol: for symbols defined within enums; h]j)}(hhh]j )}(h*symbol: for symbols defined within enums; h](j)}(hsymbol:h]hsymbol:}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj>ubj*)}(hhh]h)}(h!for symbols defined within enums;h]h!for symbols defined within enums;}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjPubah}(h]h ]h"]h$]h&]uh1j)hj>ubeh}(h]h ]h"]h$]h&]uh1j hhhKhj;ubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(htypedef: for typedefs; h]j)}(hhh]j )}(htypedef: for typedefs; h](j)}(htypedef:h]htypedef:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj*)}(hhh]h)}(h for typedefs;h]h for typedefs;}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j)hjubeh}(h]h ]h"]h$]h&]uh1j hhhKhj}ubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h.enum: for the name of a non-anonymous enum; h]j)}(hhh]j )}(h,enum: for the name of a non-anonymous enum; h](j)}(henum:h]henum:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj*)}(hhh]h)}(h%for the name of a non-anonymous enum;h]h%for the name of a non-anonymous enum;}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j)hjubeh}(h]h ]h"]h$]h&]uh1j hhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hstruct: for structs. h]j)}(hhh]j )}(hstruct: for structs. h](j)}(hstruct:h]hstruct:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubj*)}(hhh]h)}(h for structs.h]h for structs.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j)hj ubeh}(h]h ]h"]h$]h&]uh1j hhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhhhK~hjubah}(h]h ]h"]h$]h&]uh1jhhhK~hjhhubeh}(h] descriptionah ]h"] descriptionah$]h&]uh1hhj&hhhhhKOubh)}(hhh](h)}(hEXAMPLESh]hEXAMPLES}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS hhhhhKubj)}(hhh](j)}(hPIgnore a define ``_VIDEODEV2_H`` at ``FILE_IN``:: ignore define _VIDEODEV2_H h](h)}(h1Ignore a define ``_VIDEODEV2_H`` at ``FILE_IN``::h](hIgnore a define }(hjk hhhNhNubh)}(h``_VIDEODEV2_H``h]h _VIDEODEV2_H}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk ubh at }(hjk hhhNhNubh)}(h ``FILE_IN``h]hFILE_IN}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk ubh:}(hjk hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjg ubj)}(hignore define _VIDEODEV2_Hh]hignore define _VIDEODEV2_H}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjg ubeh}(h]h ]h"]h$]h&]uh1jhjd hhhhhNubj)}(hXbOn an data structure like this enum:: enum foo { BAR1, BAR2, PRIVATE }; It won't generate cross-references for ``PRIVATE``:: ignore symbol PRIVATE At the same struct, instead of creating one cross reference per symbol, make them all point to the ``enum foo`` C type:: replace symbol BAR1 :c:type:\`foo\` replace symbol BAR2 :c:type:\`foo\` h](h)}(h%On an data structure like this enum::h]h$On an data structure like this enum:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubj)}(h!enum foo { BAR1, BAR2, PRIVATE };h]h!enum foo { BAR1, BAR2, PRIVATE };}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhKhj ubh)}(h4It won't generate cross-references for ``PRIVATE``::h](h)It won’t generate cross-references for }(hj hhhNhNubh)}(h ``PRIVATE``h]hPRIVATE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubj)}(hignore symbol PRIVATEh]hignore symbol PRIVATE}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhKhj ubh)}(hxAt the same struct, instead of creating one cross reference per symbol, make them all point to the ``enum foo`` C type::h](hcAt the same struct, instead of creating one cross reference per symbol, make them all point to the }(hj hhhNhNubh)}(h ``enum foo``h]henum foo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh C type:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubj)}(hGreplace symbol BAR1 :c:type:\`foo\` replace symbol BAR2 :c:type:\`foo\`h]hGreplace symbol BAR1 :c:type:\`foo\` replace symbol BAR2 :c:type:\`foo\`}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhKhj ubeh}(h]h ]h"]h$]h&]uh1jhjd hhhhhNubj)}(hHUse C namespace ``MC`` for all symbols at ``FILE_IN``:: namespace MC h](h)}(h7Use C namespace ``MC`` for all symbols at ``FILE_IN``::h](hUse C namespace }(hj7 hhhNhNubh)}(h``MC``h]hMC}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7 ubh for all symbols at }(hj7 hhhNhNubh)}(h ``FILE_IN``h]hFILE_IN}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7 ubh:}(hj7 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj3 ubj)}(h namespace MCh]h namespace MC}hji sbah}(h]h ]h"]h$]h&]jjuh1jhhhKhj3 ubeh}(h]h ]h"]h$]h&]uh1jhjd hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhKhjS hhubeh}(h]examplesah ]h"]examplesah$]h&]uh1hhj&hhhhhKubh)}(hhh](h)}(hBUGSh]hBUGS}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(h9Report bugs to Mauro Carvalho Chehab h](h&Report bugs to Mauro Carvalho Chehab <}(hj hhhNhNubh reference)}(hmchehab@kernel.orgh]hmchehab@kernel.org}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:mchehab@kernel.orguh1j hj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]bugsah ]h"]bugsah$]h&]uh1hhj&hhhhhKubh)}(hhh](h)}(h COPYRIGHTh]h COPYRIGHT}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hNCopyright (c) 2016, 2025 by Mauro Carvalho Chehab .h](h3Copyright (c) 2016, 2025 by Mauro Carvalho Chehab <}(hj hhhNhNubj )}(hmchehab+huawei@kernel.orgh]hmchehab+huawei@kernel.org}(hj hhhNhNubah}(h]h ]h"]h$]h&]refuri mailto:mchehab+huawei@kernel.orguh1j hj ubh>.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hELicense GPLv2: GNU GPL version 2 .h](h"License GPLv2: GNU GPL version 2 <}(hj hhhNhNubj )}(h!https://gnu.org/licenses/gpl.htmlh]h!https://gnu.org/licenses/gpl.html}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurij uh1j hj ubh>.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hxThis is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.h]hxThis is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h] copyrightah ]h"] copyrightah$]h&]uh1hhj&hhhhhKubeh}(h](tools-docs-parse-headers-pyj%eh ]h"](tools/docs/parse_headers.py parse_headerseh$]h&]uh1hhhhhhhhKexpect_referenced_by_name}j8 jsexpect_referenced_by_id}j%jsubeh}(h]including-uapi-header-filesah ]h"]including uapi header filesah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjj error_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}j%]jasnameids}(jD jA j8 j%j7 j4 j[jXjjjjjjjjjP jM j j j j j/ j, u nametypes}(jD j8 j7 j[jjjjjP j j j/ uh}(jA hj%j&j4 j&jXj7jj^jjjjjjjM jj jS j j j, j u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]hsystem_message)}(hhh]h)}(h:Enumerated list start value not ordinal-1: "2" (ordinal 2)h]h>Enumerated list start value not ordinal-1: “2” (ordinal 2)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehʌlineKuh1j hjhhhhhKkubatransform_messages]j )}(hhh]h)}(hhh]h3Hyperlink target "parse-headers" is not referenced.}hj sbah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]levelKtypej sourcehʌlineKuh1j uba transformerN include_log] decorationNhhub.