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]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 refdomainhҌreftyperef 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}(hhhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hNAMEh]hNAME}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hhhhhKubh)}(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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj#hhubeh}(h]nameah ]h"]nameah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hUSAGEh]hUSAGE}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhhhhhKubh)}(hGparse-headers.py [-h] [-d] [-t] ``FILE_IN`` ``FILE_OUT`` ``FILE_RULES``h](h parse-headers.py [-h] [-d] [-t] }(hj[hhhNhNubh)}(h ``FILE_IN``h]hFILE_IN}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[ubh }(hj[hhhNhNubh)}(h ``FILE_OUT``h]hFILE_OUT}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[ubh }hj[sbh)}(h``FILE_RULES``h]h FILE_RULES}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[ubeh}(h]h ]h"]h$]h&]uh1hhhhKhjJhhubeh}(h]usageah ]h"]usageah$]h&]uh1hhjhhhhhKubh)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, }(hjhhhNhNubh)}(h ``struct``h]hstruct}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, }hjsbh)}(h ``typedef``h]htypedef}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, }hjsbh)}(h``enum``h]henum}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh and enum }(hjhhhNhNubh)}(h ``symbol``h]hsymbol}(hjVhhhNhNubah}(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 }(hjnhhhNhNubh)}(h ``#define``h]h#define}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnubh: used for specifying Linux-specific macros used to define }(hjnhhhNhNubh)}(h ``ioctl``h]hioctl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnubh.}(hjnhhhNhNubeh}(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&]uh1hhjhhhhhK!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;hjubh definition)}(hhh]h)}(h Input C fileh]h Input C file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhK;hjubj)}(h``FILE_OUT`` Output RST file h](j)}(h ``FILE_OUT``h]h)}(hj:h]hFILE_OUT}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&]uh1jhhhK>hj4ubj)}(hhh]h)}(hOutput RST fileh]hOutput RST file}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK>hjOubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhhhK>hjubj)}(h*``FILE_RULES`` Exceptions file (optional) h](j)}(h``FILE_RULES``h]h)}(hjrh]h FILE_RULES}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&]uh1jhhhKAhjlubj)}(hhh]h)}(hExceptions file (optional)h]hExceptions file (optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKAhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhhhKAhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhK:hjhhubeh}(h]positional-argumentsah ]h"]positional argumentsah$]h&]uh1hhjhhhhhK8ubh)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKFhjubj)}(hD``-d``, ``--debug`` Increase debug level. Can be used multiple timesh](j)}(h``-d``, ``--debug``h](h)}(h``-d``h]h-d}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, }(hjhhhNhNubh)}(h ``--debug``h]h--debug}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1jhhhKHhjubj)}(hhh]h)}(h0Increase debug level. Can be used multiple timesh]h0Increase debug level. Can be used multiple times}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhjIubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKHhjubj)}(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}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjubh, }(hjjhhhNhNubh)}(h ``--toc``h]h--toc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjubeh}(h]h ]h"]h$]h&]uh1jhhhKLhjfubj)}(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&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhhhKLhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhKFhjhhubeh}(h]optionsah ]h"]optionsah$]h&]uh1hhjhhhhhKDubh)}(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 }(hjhhhNhNubh)}(h``FILE_RULES``h]h FILE_RULES}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh 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.}(hjhhhNhNubeh}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhjhhubh)}(h*The output is written at the ``FILE_OUT``.h](hThe output is written at the }(hj$hhhNhNubh)}(h ``FILE_OUT``h]hFILE_OUT}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ubh.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK\hjhhubh)}(hlThe ``FILE_RULES`` may contain contain three types of statements: **ignore**, **replace** and **namespace**.h](hThe }(hjDhhhNhNubh)}(h``FILE_RULES``h]h FILE_RULES}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDubh0 may contain contain three types of statements: }(hjDhhhNhNubhstrong)}(h **ignore**h]hignore}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j^hjDubh, }(hjDhhhNhNubj_)}(h **replace**h]hreplace}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j^hjDubh and }(hjDhhhNhNubj_)}(h **namespace**h]h namespace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j^hjDubh.}(hjDhhhNhNubeh}(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.}(hjhhhNhNubah}(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:}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKkhjubj)}(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 }(hj5hhhNhNubj)}(h*type*h]htype}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh }(hj5hhhNhNubj)}(h *old_symbol*h]h old_symbol}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh }hj5sbj)}(h*new_reference*h]h new_reference}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1hhhhKmhj1ubh)}(hIReplaces *old_symbol* with a *new_reference*. The *new_reference* can be:h](h Replaces }(hjuhhhNhNubj)}(h *old_symbol*h]h old_symbol}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh with a }(hjuhhhNhNubj)}(h*new_reference*h]h new_reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh. The }(hjuhhhNhNubj)}(h*new_reference*h]h new_reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh can be:}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKohj1ubh 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-uh1jhhhKrhj1ubeh}(h]h ]h"]h$]h&]uh1jhhhKmhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(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 }(hjhhhNhNubj)}(h *namespace*h]h namespace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhhhKwhjubh)}(hdSets C *namespace* to be used during cross-reference generation. Can be overridden by replace rules.h](hSets C }(hj3hhhNhNubj)}(h *namespace*h]h namespace}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubhR to be used during cross-reference generation. Can be overridden by replace rules.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKyhjubeh}(h]h ]h"]h$]h&]uh1jhhhKwhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]j j j hj j startKuh1jhjhhhhhKkubh)}(h+On ignore and replace rules, *type* can be:h](hOn ignore and replace rules, }(hjfhhhNhNubj)}(h*type*h]htype}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh can be:}(hjfhhhNhNubeh}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(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:}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj*ubj)}(hhh]h)}(h!for symbols defined within enums;h]h!for symbols defined within enums;}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj<ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhhhKhj'ubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(htypedef: for typedefs; h]j)}(hhh]j)}(htypedef: for typedefs; h](j)}(htypedef:h]htypedef:}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjlubj)}(hhh]h)}(h for typedefs;h]h for typedefs;}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj~ubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhhhKhjiubah}(h]h ]h"]h$]h&]uh1jhjeubah}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj)}(hhh]h)}(h for structs.h]h for structs.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(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&]uh1hhjhhhhhKOubh)}(hhh](h)}(hEXAMPLESh]hEXAMPLES}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj? 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 }(hjW hhhNhNubh)}(h``_VIDEODEV2_H``h]h _VIDEODEV2_H}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjW ubh at }(hjW hhhNhNubh)}(h ``FILE_IN``h]hFILE_IN}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjW ubh:}(hjW hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjS ubj)}(hignore define _VIDEODEV2_Hh]hignore define _VIDEODEV2_H}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjS ubeh}(h]h ]h"]h$]h&]uh1jhjP 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&]uh1jhjP 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 }(hj# hhhNhNubh)}(h``MC``h]hMC}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj# ubh for all symbols at }(hj# hhhNhNubh)}(h ``FILE_IN``h]hFILE_IN}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj# ubh:}(hj# hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubj)}(h namespace MCh]h namespace MC}hjU sbah}(h]h ]h"]h$]h&]jjuh1jhhhKhj ubeh}(h]h ]h"]h$]h&]uh1jhjP hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhKhj? hhubeh}(h]examplesah ]h"]examplesah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hBUGSh]hBUGS}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjw 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&]uh1hhhhKhjw hhubeh}(h]bugsah ]h"]bugsah$]h&]uh1hhjhhhhhKubh)}(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&]uh1hhjhhhhhKubeh}(h](tools-docs-parse-headers-pyjeh ]h"](tools/docs/parse_headers.py parse_headerseh$]h&]uh1hhhhhhhhKexpect_referenced_by_name}j$ jsexpect_referenced_by_id}jjsubeh}(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_handlerjV 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}(j0 j- j$ jj# j jGjDjjjjjjjjj< j9 jt jq j j j j u nametypes}(j0 j$ j# jGjjjjj< jt j j uh}(j- hjjj jjDj#jjJjjjjjjj9 jjq j? j jw 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&]levelKtypeINFOsourcehlineKuh1j 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 sourcehlineKuh1j uba transformerN include_log] decorationNhhub.