18c2ecf20Sopenharmony_ci.. include:: ../disclaimer-ita.rst
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ci.. note:: Per leggere la documentazione originale in inglese:
48c2ecf20Sopenharmony_ci	  :ref:`Documentation/doc-guide/index.rst <doc_guide>`
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci.. _it_kernel_doc:
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ciScrivere i commenti in kernel-doc
98c2ecf20Sopenharmony_ci=================================
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ciNei file sorgenti del kernel Linux potrete trovare commenti di documentazione
128c2ecf20Sopenharmony_cistrutturanti secondo il formato kernel-doc. Essi possono descrivere funzioni,
138c2ecf20Sopenharmony_citipi di dati, e l'architettura del codice.
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci.. note:: Il formato kernel-doc può sembrare simile a gtk-doc o Doxygen ma
168c2ecf20Sopenharmony_ci   in realtà è molto differente per ragioni storiche. I sorgenti del kernel
178c2ecf20Sopenharmony_ci   contengono decine di migliaia di commenti kernel-doc. Siete pregati
188c2ecf20Sopenharmony_ci   d'attenervi allo stile qui descritto.
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ciLa struttura kernel-doc è estratta a partire dai commenti; da questi viene
218c2ecf20Sopenharmony_cigenerato il `dominio Sphinx per il C`_ con un'adeguata descrizione per le
228c2ecf20Sopenharmony_cifunzioni ed i tipi di dato con i loro relativi collegamenti. Le descrizioni
238c2ecf20Sopenharmony_civengono filtrare per cercare i riferimenti ed i marcatori.
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ciVedere di seguito per maggiori dettagli.
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci.. _`dominio Sphinx per il C`: http://www.sphinx-doc.org/en/stable/domains.html
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ciTutte le funzioni esportate verso i moduli esterni utilizzando
308c2ecf20Sopenharmony_ci``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL`` dovrebbero avere un commento
318c2ecf20Sopenharmony_cikernel-doc. Quando l'intenzione è di utilizzarle nei moduli, anche le funzioni
328c2ecf20Sopenharmony_cie le strutture dati nei file d'intestazione dovrebbero avere dei commenti
338c2ecf20Sopenharmony_cikernel-doc.
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ciÈ considerata una buona pratica quella di fornire una documentazione formattata
368c2ecf20Sopenharmony_cisecondo kernel-doc per le funzioni che sono visibili da altri file del kernel
378c2ecf20Sopenharmony_ci(ovvero, che non siano dichiarate utilizzando ``static``). Raccomandiamo,
388c2ecf20Sopenharmony_ciinoltre, di fornire una documentazione kernel-doc anche per procedure private
398c2ecf20Sopenharmony_ci(ovvero, dichiarate "static") al fine di fornire una struttura più coerente
408c2ecf20Sopenharmony_cidei sorgenti. Quest'ultima raccomandazione ha una priorità più bassa ed è a
418c2ecf20Sopenharmony_cidiscrezione dal manutentore (MAINTAINER) del file sorgente.
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ciSicuramente la documentazione formattata con kernel-doc è necessaria per
468c2ecf20Sopenharmony_cile funzioni che sono esportate verso i moduli esterni utilizzando
478c2ecf20Sopenharmony_ci``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL``.
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ciCerchiamo anche di fornire una documentazione formattata secondo kernel-doc
508c2ecf20Sopenharmony_ciper le funzioni che sono visibili da altri file del kernel (ovvero, che non
518c2ecf20Sopenharmony_cisiano dichiarate utilizzando "static")
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ciRaccomandiamo, inoltre, di fornire una documentazione formattata con kernel-doc
548c2ecf20Sopenharmony_cianche per procedure private (ovvero, dichiarate "static") al fine di fornire
558c2ecf20Sopenharmony_ciuna struttura più coerente dei sorgenti. Questa raccomandazione ha una priorità
568c2ecf20Sopenharmony_cipiù bassa ed è a discrezione dal manutentore (MAINTAINER) del file sorgente.
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ciLe strutture dati visibili nei file di intestazione dovrebbero essere anch'esse
598c2ecf20Sopenharmony_cidocumentate utilizzando commenti formattati con kernel-doc.
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ciCome formattare i commenti kernel-doc
628c2ecf20Sopenharmony_ci-------------------------------------
638c2ecf20Sopenharmony_ci
648c2ecf20Sopenharmony_ciI commenti kernel-doc iniziano con il marcatore ``/**``. Il programma
658c2ecf20Sopenharmony_ci``kernel-doc`` estrarrà i commenti marchiati in questo modo. Il resto
668c2ecf20Sopenharmony_cidel commento è formattato come un normale commento multilinea, ovvero
678c2ecf20Sopenharmony_cicon un asterisco all'inizio d'ogni riga e che si conclude con ``*/``
688c2ecf20Sopenharmony_cisu una riga separata.
698c2ecf20Sopenharmony_ci
708c2ecf20Sopenharmony_ciI commenti kernel-doc di funzioni e tipi dovrebbero essere posizionati
718c2ecf20Sopenharmony_ciappena sopra la funzione od il tipo che descrivono. Questo allo scopo di
728c2ecf20Sopenharmony_ciaumentare la probabilità che chi cambia il codice si ricordi di aggiornare
738c2ecf20Sopenharmony_cianche la documentazione. I commenti kernel-doc di tipo più generale possono
748c2ecf20Sopenharmony_ciessere posizionati ovunque nel file.
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_ciAl fine di verificare che i commenti siano formattati correttamente, potete
778c2ecf20Sopenharmony_cieseguire il programma ``kernel-doc`` con un livello di verbosità alto e senza
788c2ecf20Sopenharmony_ciche questo produca alcuna documentazione. Per esempio::
798c2ecf20Sopenharmony_ci
808c2ecf20Sopenharmony_ci	scripts/kernel-doc -v -none drivers/foo/bar.c
818c2ecf20Sopenharmony_ci
828c2ecf20Sopenharmony_ciIl formato della documentazione è verificato della procedura di generazione
838c2ecf20Sopenharmony_cidel kernel quando viene richiesto di effettuare dei controlli extra con GCC::
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_ci	make W=n
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ciDocumentare le funzioni
888c2ecf20Sopenharmony_ci------------------------
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_ciGeneralmente il formato di un commento kernel-doc per funzioni e
918c2ecf20Sopenharmony_cimacro simil-funzioni è il seguente::
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ci  /**
948c2ecf20Sopenharmony_ci   * function_name() - Brief description of function.
958c2ecf20Sopenharmony_ci   * @arg1: Describe the first argument.
968c2ecf20Sopenharmony_ci   * @arg2: Describe the second argument.
978c2ecf20Sopenharmony_ci   *        One can provide multiple line descriptions
988c2ecf20Sopenharmony_ci   *        for arguments.
998c2ecf20Sopenharmony_ci   *
1008c2ecf20Sopenharmony_ci   * A longer description, with more discussion of the function function_name()
1018c2ecf20Sopenharmony_ci   * that might be useful to those using or modifying it. Begins with an
1028c2ecf20Sopenharmony_ci   * empty comment line, and may include additional embedded empty
1038c2ecf20Sopenharmony_ci   * comment lines.
1048c2ecf20Sopenharmony_ci   *
1058c2ecf20Sopenharmony_ci   * The longer description may have multiple paragraphs.
1068c2ecf20Sopenharmony_ci   *
1078c2ecf20Sopenharmony_ci   * Context: Describes whether the function can sleep, what locks it takes,
1088c2ecf20Sopenharmony_ci   *          releases, or expects to be held. It can extend over multiple
1098c2ecf20Sopenharmony_ci   *          lines.
1108c2ecf20Sopenharmony_ci   * Return: Describe the return value of function_name.
1118c2ecf20Sopenharmony_ci   *
1128c2ecf20Sopenharmony_ci   * The return value description can also have multiple paragraphs, and should
1138c2ecf20Sopenharmony_ci   * be placed at the end of the comment block.
1148c2ecf20Sopenharmony_ci   */
1158c2ecf20Sopenharmony_ci
1168c2ecf20Sopenharmony_ciLa descrizione introduttiva (*brief description*) che segue il nome della
1178c2ecf20Sopenharmony_cifunzione può continuare su righe successive e termina con la descrizione di
1188c2ecf20Sopenharmony_ciun argomento, una linea di commento vuota, oppure la fine del commento.
1198c2ecf20Sopenharmony_ci
1208c2ecf20Sopenharmony_ciParametri delle funzioni
1218c2ecf20Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~
1228c2ecf20Sopenharmony_ci
1238c2ecf20Sopenharmony_ciOgni argomento di una funzione dovrebbe essere descritto in ordine, subito
1248c2ecf20Sopenharmony_cidopo la descrizione introduttiva.  Non lasciare righe vuote né fra la
1258c2ecf20Sopenharmony_cidescrizione introduttiva e quella degli argomenti, né fra gli argomenti.
1268c2ecf20Sopenharmony_ci
1278c2ecf20Sopenharmony_ciOgni ``@argument:`` può estendersi su più righe.
1288c2ecf20Sopenharmony_ci
1298c2ecf20Sopenharmony_ci.. note::
1308c2ecf20Sopenharmony_ci
1318c2ecf20Sopenharmony_ci   Se la descrizione di ``@argument:`` si estende su più righe,
1328c2ecf20Sopenharmony_ci   la continuazione dovrebbe iniziare alla stessa colonna della riga
1338c2ecf20Sopenharmony_ci   precedente::
1348c2ecf20Sopenharmony_ci
1358c2ecf20Sopenharmony_ci      * @argument: some long description
1368c2ecf20Sopenharmony_ci      *            that continues on next lines
1378c2ecf20Sopenharmony_ci
1388c2ecf20Sopenharmony_ci   or::
1398c2ecf20Sopenharmony_ci
1408c2ecf20Sopenharmony_ci      * @argument:
1418c2ecf20Sopenharmony_ci      *		some long description
1428c2ecf20Sopenharmony_ci      *		that continues on next lines
1438c2ecf20Sopenharmony_ci
1448c2ecf20Sopenharmony_ciSe una funzione ha un numero variabile di argomento, la sua descrizione
1458c2ecf20Sopenharmony_cidovrebbe essere scritta con la notazione kernel-doc::
1468c2ecf20Sopenharmony_ci
1478c2ecf20Sopenharmony_ci      * @...: description
1488c2ecf20Sopenharmony_ci
1498c2ecf20Sopenharmony_ciContesto delle funzioni
1508c2ecf20Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~
1518c2ecf20Sopenharmony_ci
1528c2ecf20Sopenharmony_ciIl contesto in cui le funzioni vengono chiamate viene descritto in una
1538c2ecf20Sopenharmony_cisezione chiamata ``Context``. Questo dovrebbe informare sulla possibilità
1548c2ecf20Sopenharmony_ciche una funzione dorma (*sleep*) o che possa essere chiamata in un contesto
1558c2ecf20Sopenharmony_cid'interruzione, così come i *lock* che prende, rilascia e che si aspetta che
1568c2ecf20Sopenharmony_civengano presi dal chiamante.
1578c2ecf20Sopenharmony_ci
1588c2ecf20Sopenharmony_ciEsempi::
1598c2ecf20Sopenharmony_ci
1608c2ecf20Sopenharmony_ci  * Context: Any context.
1618c2ecf20Sopenharmony_ci  * Context: Any context. Takes and releases the RCU lock.
1628c2ecf20Sopenharmony_ci  * Context: Any context. Expects <lock> to be held by caller.
1638c2ecf20Sopenharmony_ci  * Context: Process context. May sleep if @gfp flags permit.
1648c2ecf20Sopenharmony_ci  * Context: Process context. Takes and releases <mutex>.
1658c2ecf20Sopenharmony_ci  * Context: Softirq or process context. Takes and releases <lock>, BH-safe.
1668c2ecf20Sopenharmony_ci  * Context: Interrupt context.
1678c2ecf20Sopenharmony_ci
1688c2ecf20Sopenharmony_ciValore di ritorno
1698c2ecf20Sopenharmony_ci~~~~~~~~~~~~~~~~~
1708c2ecf20Sopenharmony_ci
1718c2ecf20Sopenharmony_ciIl valore di ritorno, se c'è, viene descritto in una sezione dedicata di nome
1728c2ecf20Sopenharmony_ci``Return``.
1738c2ecf20Sopenharmony_ci
1748c2ecf20Sopenharmony_ci.. note::
1758c2ecf20Sopenharmony_ci
1768c2ecf20Sopenharmony_ci  #) La descrizione multiriga non riconosce il termine d'una riga, per cui
1778c2ecf20Sopenharmony_ci     se provate a formattare bene il vostro testo come nel seguente esempio::
1788c2ecf20Sopenharmony_ci
1798c2ecf20Sopenharmony_ci	* Return:
1808c2ecf20Sopenharmony_ci	* 0 - OK
1818c2ecf20Sopenharmony_ci	* -EINVAL - invalid argument
1828c2ecf20Sopenharmony_ci	* -ENOMEM - out of memory
1838c2ecf20Sopenharmony_ci
1848c2ecf20Sopenharmony_ci     le righe verranno unite e il risultato sarà::
1858c2ecf20Sopenharmony_ci
1868c2ecf20Sopenharmony_ci	Return: 0 - OK -EINVAL - invalid argument -ENOMEM - out of memory
1878c2ecf20Sopenharmony_ci
1888c2ecf20Sopenharmony_ci     Quindi, se volete che le righe vengano effettivamente generate, dovete
1898c2ecf20Sopenharmony_ci     utilizzare una lista ReST, ad esempio::
1908c2ecf20Sopenharmony_ci
1918c2ecf20Sopenharmony_ci      * Return:
1928c2ecf20Sopenharmony_ci      * * 0		- OK to runtime suspend the device
1938c2ecf20Sopenharmony_ci      * * -EBUSY	- Device should not be runtime suspended
1948c2ecf20Sopenharmony_ci
1958c2ecf20Sopenharmony_ci  #) Se il vostro testo ha delle righe che iniziano con una frase seguita dai
1968c2ecf20Sopenharmony_ci     due punti, allora ognuna di queste frasi verrà considerata come il nome
1978c2ecf20Sopenharmony_ci     di una nuova sezione, e probabilmente non produrrà gli effetti desiderati.
1988c2ecf20Sopenharmony_ci
1998c2ecf20Sopenharmony_ciDocumentare strutture, unioni ed enumerazioni
2008c2ecf20Sopenharmony_ci---------------------------------------------
2018c2ecf20Sopenharmony_ci
2028c2ecf20Sopenharmony_ciGeneralmente il formato di un commento kernel-doc per struct, union ed enum è::
2038c2ecf20Sopenharmony_ci
2048c2ecf20Sopenharmony_ci  /**
2058c2ecf20Sopenharmony_ci   * struct struct_name - Brief description.
2068c2ecf20Sopenharmony_ci   * @member1: Description of member1.
2078c2ecf20Sopenharmony_ci   * @member2: Description of member2.
2088c2ecf20Sopenharmony_ci   *           One can provide multiple line descriptions
2098c2ecf20Sopenharmony_ci   *           for members.
2108c2ecf20Sopenharmony_ci   *
2118c2ecf20Sopenharmony_ci   * Description of the structure.
2128c2ecf20Sopenharmony_ci   */
2138c2ecf20Sopenharmony_ci
2148c2ecf20Sopenharmony_ciNell'esempio qui sopra, potete sostituire ``struct`` con ``union`` o ``enum``
2158c2ecf20Sopenharmony_ciper descrivere unioni ed enumerati. ``member`` viene usato per indicare i
2168c2ecf20Sopenharmony_cimembri di strutture ed unioni, ma anche i valori di un tipo enumerato.
2178c2ecf20Sopenharmony_ci
2188c2ecf20Sopenharmony_ciLa descrizione introduttiva (*brief description*) che segue il nome della
2198c2ecf20Sopenharmony_cifunzione può continuare su righe successive e termina con la descrizione di
2208c2ecf20Sopenharmony_ciun argomento, una linea di commento vuota, oppure la fine del commento.
2218c2ecf20Sopenharmony_ci
2228c2ecf20Sopenharmony_ciMembri
2238c2ecf20Sopenharmony_ci~~~~~~
2248c2ecf20Sopenharmony_ci
2258c2ecf20Sopenharmony_ciI membri di strutture, unioni ed enumerati devo essere documentati come i
2268c2ecf20Sopenharmony_ciparametri delle funzioni; seguono la descrizione introduttiva e possono
2278c2ecf20Sopenharmony_ciestendersi su più righe.
2288c2ecf20Sopenharmony_ci
2298c2ecf20Sopenharmony_ciAll'interno d'una struttura o d'un unione, potete utilizzare le etichette
2308c2ecf20Sopenharmony_ci``private:`` e ``public:``. I campi che sono nell'area ``private:`` non
2318c2ecf20Sopenharmony_civerranno inclusi nella documentazione finale.
2328c2ecf20Sopenharmony_ci
2338c2ecf20Sopenharmony_ciLe etichette ``private:`` e ``public:`` devono essere messe subito dopo
2348c2ecf20Sopenharmony_ciil marcatore di un commento ``/*``. Opzionalmente, possono includere commenti
2358c2ecf20Sopenharmony_cifra ``:`` e il marcatore di fine commento ``*/``.
2368c2ecf20Sopenharmony_ci
2378c2ecf20Sopenharmony_ciEsempio::
2388c2ecf20Sopenharmony_ci
2398c2ecf20Sopenharmony_ci  /**
2408c2ecf20Sopenharmony_ci   * struct my_struct - short description
2418c2ecf20Sopenharmony_ci   * @a: first member
2428c2ecf20Sopenharmony_ci   * @b: second member
2438c2ecf20Sopenharmony_ci   * @d: fourth member
2448c2ecf20Sopenharmony_ci   *
2458c2ecf20Sopenharmony_ci   * Longer description
2468c2ecf20Sopenharmony_ci   */
2478c2ecf20Sopenharmony_ci  struct my_struct {
2488c2ecf20Sopenharmony_ci      int a;
2498c2ecf20Sopenharmony_ci      int b;
2508c2ecf20Sopenharmony_ci  /* private: internal use only */
2518c2ecf20Sopenharmony_ci      int c;
2528c2ecf20Sopenharmony_ci  /* public: the next one is public */
2538c2ecf20Sopenharmony_ci      int d;
2548c2ecf20Sopenharmony_ci  };
2558c2ecf20Sopenharmony_ci
2568c2ecf20Sopenharmony_ciStrutture ed unioni annidate
2578c2ecf20Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2588c2ecf20Sopenharmony_ci
2598c2ecf20Sopenharmony_ciÈ possibile documentare strutture ed unioni annidate, ad esempio::
2608c2ecf20Sopenharmony_ci
2618c2ecf20Sopenharmony_ci      /**
2628c2ecf20Sopenharmony_ci       * struct nested_foobar - a struct with nested unions and structs
2638c2ecf20Sopenharmony_ci       * @memb1: first member of anonymous union/anonymous struct
2648c2ecf20Sopenharmony_ci       * @memb2: second member of anonymous union/anonymous struct
2658c2ecf20Sopenharmony_ci       * @memb3: third member of anonymous union/anonymous struct
2668c2ecf20Sopenharmony_ci       * @memb4: fourth member of anonymous union/anonymous struct
2678c2ecf20Sopenharmony_ci       * @bar: non-anonymous union
2688c2ecf20Sopenharmony_ci       * @bar.st1: struct st1 inside @bar
2698c2ecf20Sopenharmony_ci       * @bar.st2: struct st2 inside @bar
2708c2ecf20Sopenharmony_ci       * @bar.st1.memb1: first member of struct st1 on union bar
2718c2ecf20Sopenharmony_ci       * @bar.st1.memb2: second member of struct st1 on union bar
2728c2ecf20Sopenharmony_ci       * @bar.st2.memb1: first member of struct st2 on union bar
2738c2ecf20Sopenharmony_ci       * @bar.st2.memb2: second member of struct st2 on union bar
2748c2ecf20Sopenharmony_ci       */
2758c2ecf20Sopenharmony_ci      struct nested_foobar {
2768c2ecf20Sopenharmony_ci        /* Anonymous union/struct*/
2778c2ecf20Sopenharmony_ci        union {
2788c2ecf20Sopenharmony_ci          struct {
2798c2ecf20Sopenharmony_ci            int memb1;
2808c2ecf20Sopenharmony_ci            int memb2;
2818c2ecf20Sopenharmony_ci        }
2828c2ecf20Sopenharmony_ci          struct {
2838c2ecf20Sopenharmony_ci            void *memb3;
2848c2ecf20Sopenharmony_ci            int memb4;
2858c2ecf20Sopenharmony_ci          }
2868c2ecf20Sopenharmony_ci        }
2878c2ecf20Sopenharmony_ci        union {
2888c2ecf20Sopenharmony_ci          struct {
2898c2ecf20Sopenharmony_ci            int memb1;
2908c2ecf20Sopenharmony_ci            int memb2;
2918c2ecf20Sopenharmony_ci          } st1;
2928c2ecf20Sopenharmony_ci          struct {
2938c2ecf20Sopenharmony_ci            void *memb1;
2948c2ecf20Sopenharmony_ci            int memb2;
2958c2ecf20Sopenharmony_ci          } st2;
2968c2ecf20Sopenharmony_ci        } bar;
2978c2ecf20Sopenharmony_ci      };
2988c2ecf20Sopenharmony_ci
2998c2ecf20Sopenharmony_ci.. note::
3008c2ecf20Sopenharmony_ci
3018c2ecf20Sopenharmony_ci   #) Quando documentate una struttura od unione annidata, ad esempio
3028c2ecf20Sopenharmony_ci      di nome ``foo``, il suo campo ``bar`` dev'essere documentato
3038c2ecf20Sopenharmony_ci      usando ``@foo.bar:``
3048c2ecf20Sopenharmony_ci   #) Quando la struttura od unione annidata è anonima, il suo campo
3058c2ecf20Sopenharmony_ci      ``bar`` dev'essere documentato usando ``@bar:``
3068c2ecf20Sopenharmony_ci
3078c2ecf20Sopenharmony_ciCommenti in linea per la documentazione dei membri
3088c2ecf20Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3098c2ecf20Sopenharmony_ci
3108c2ecf20Sopenharmony_ciI membri d'una struttura possono essere documentati in linea all'interno
3118c2ecf20Sopenharmony_cidella definizione stessa. Ci sono due stili: una singola riga di commento
3128c2ecf20Sopenharmony_ciche inizia con ``/**`` e finisce con ``*/``; commenti multi riga come
3138c2ecf20Sopenharmony_ciqualsiasi altro commento kernel-doc::
3148c2ecf20Sopenharmony_ci
3158c2ecf20Sopenharmony_ci  /**
3168c2ecf20Sopenharmony_ci   * struct foo - Brief description.
3178c2ecf20Sopenharmony_ci   * @foo: The Foo member.
3188c2ecf20Sopenharmony_ci   */
3198c2ecf20Sopenharmony_ci  struct foo {
3208c2ecf20Sopenharmony_ci        int foo;
3218c2ecf20Sopenharmony_ci        /**
3228c2ecf20Sopenharmony_ci         * @bar: The Bar member.
3238c2ecf20Sopenharmony_ci         */
3248c2ecf20Sopenharmony_ci        int bar;
3258c2ecf20Sopenharmony_ci        /**
3268c2ecf20Sopenharmony_ci         * @baz: The Baz member.
3278c2ecf20Sopenharmony_ci         *
3288c2ecf20Sopenharmony_ci         * Here, the member description may contain several paragraphs.
3298c2ecf20Sopenharmony_ci         */
3308c2ecf20Sopenharmony_ci        int baz;
3318c2ecf20Sopenharmony_ci        union {
3328c2ecf20Sopenharmony_ci                /** @foobar: Single line description. */
3338c2ecf20Sopenharmony_ci                int foobar;
3348c2ecf20Sopenharmony_ci        };
3358c2ecf20Sopenharmony_ci        /** @bar2: Description for struct @bar2 inside @foo */
3368c2ecf20Sopenharmony_ci        struct {
3378c2ecf20Sopenharmony_ci                /**
3388c2ecf20Sopenharmony_ci                 * @bar2.barbar: Description for @barbar inside @foo.bar2
3398c2ecf20Sopenharmony_ci                 */
3408c2ecf20Sopenharmony_ci                int barbar;
3418c2ecf20Sopenharmony_ci        } bar2;
3428c2ecf20Sopenharmony_ci  };
3438c2ecf20Sopenharmony_ci
3448c2ecf20Sopenharmony_ci
3458c2ecf20Sopenharmony_ciDocumentazione dei tipi di dato
3468c2ecf20Sopenharmony_ci-------------------------------
3478c2ecf20Sopenharmony_ciGeneralmente il formato di un commento kernel-doc per typedef è
3488c2ecf20Sopenharmony_ciil seguente::
3498c2ecf20Sopenharmony_ci
3508c2ecf20Sopenharmony_ci  /**
3518c2ecf20Sopenharmony_ci   * typedef type_name - Brief description.
3528c2ecf20Sopenharmony_ci   *
3538c2ecf20Sopenharmony_ci   * Description of the type.
3548c2ecf20Sopenharmony_ci   */
3558c2ecf20Sopenharmony_ci
3568c2ecf20Sopenharmony_ciAnche i tipi di dato per prototipi di funzione possono essere documentati::
3578c2ecf20Sopenharmony_ci
3588c2ecf20Sopenharmony_ci  /**
3598c2ecf20Sopenharmony_ci   * typedef type_name - Brief description.
3608c2ecf20Sopenharmony_ci   * @arg1: description of arg1
3618c2ecf20Sopenharmony_ci   * @arg2: description of arg2
3628c2ecf20Sopenharmony_ci   *
3638c2ecf20Sopenharmony_ci   * Description of the type.
3648c2ecf20Sopenharmony_ci   *
3658c2ecf20Sopenharmony_ci   * Context: Locking context.
3668c2ecf20Sopenharmony_ci   * Return: Meaning of the return value.
3678c2ecf20Sopenharmony_ci   */
3688c2ecf20Sopenharmony_ci   typedef void (*type_name)(struct v4l2_ctrl *arg1, void *arg2);
3698c2ecf20Sopenharmony_ci
3708c2ecf20Sopenharmony_ciMarcatori e riferimenti
3718c2ecf20Sopenharmony_ci-----------------------
3728c2ecf20Sopenharmony_ci
3738c2ecf20Sopenharmony_ciAll'interno dei commenti di tipo kernel-doc vengono riconosciuti i seguenti
3748c2ecf20Sopenharmony_ci*pattern* che vengono convertiti in marcatori reStructuredText ed in riferimenti
3758c2ecf20Sopenharmony_cidel `dominio Sphinx per il C`_.
3768c2ecf20Sopenharmony_ci
3778c2ecf20Sopenharmony_ci.. attention:: Questi sono riconosciuti **solo** all'interno di commenti
3788c2ecf20Sopenharmony_ci               kernel-doc, e **non** all'interno di documenti reStructuredText.
3798c2ecf20Sopenharmony_ci
3808c2ecf20Sopenharmony_ci``funcname()``
3818c2ecf20Sopenharmony_ci  Riferimento ad una funzione.
3828c2ecf20Sopenharmony_ci
3838c2ecf20Sopenharmony_ci``@parameter``
3848c2ecf20Sopenharmony_ci  Nome di un parametro di una funzione (nessun riferimento, solo formattazione).
3858c2ecf20Sopenharmony_ci
3868c2ecf20Sopenharmony_ci``%CONST``
3878c2ecf20Sopenharmony_ci  Il nome di una costante (nessun riferimento, solo formattazione)
3888c2ecf20Sopenharmony_ci
3898c2ecf20Sopenharmony_ci````literal````
3908c2ecf20Sopenharmony_ci  Un blocco di testo che deve essere riportato così com'è. La rappresentazione
3918c2ecf20Sopenharmony_ci  finale utilizzerà caratteri a ``spaziatura fissa``.
3928c2ecf20Sopenharmony_ci
3938c2ecf20Sopenharmony_ci  Questo è utile se dovete utilizzare caratteri speciali che altrimenti
3948c2ecf20Sopenharmony_ci  potrebbero assumere un significato diverso in kernel-doc o in reStructuredText
3958c2ecf20Sopenharmony_ci
3968c2ecf20Sopenharmony_ci  Questo è particolarmente utile se dovete scrivere qualcosa come ``%ph``
3978c2ecf20Sopenharmony_ci  all'interno della descrizione di una funzione.
3988c2ecf20Sopenharmony_ci
3998c2ecf20Sopenharmony_ci``$ENVVAR``
4008c2ecf20Sopenharmony_ci  Il nome di una variabile d'ambiente (nessun riferimento, solo formattazione).
4018c2ecf20Sopenharmony_ci
4028c2ecf20Sopenharmony_ci``&struct name``
4038c2ecf20Sopenharmony_ci  Riferimento ad una struttura.
4048c2ecf20Sopenharmony_ci
4058c2ecf20Sopenharmony_ci``&enum name``
4068c2ecf20Sopenharmony_ci  Riferimento ad un'enumerazione.
4078c2ecf20Sopenharmony_ci
4088c2ecf20Sopenharmony_ci``&typedef name``
4098c2ecf20Sopenharmony_ci  Riferimento ad un tipo di dato.
4108c2ecf20Sopenharmony_ci
4118c2ecf20Sopenharmony_ci``&struct_name->member`` or ``&struct_name.member``
4128c2ecf20Sopenharmony_ci  Riferimento ad un membro di una struttura o di un'unione. Il riferimento sarà
4138c2ecf20Sopenharmony_ci  la struttura o l'unione, non il memembro.
4148c2ecf20Sopenharmony_ci
4158c2ecf20Sopenharmony_ci``&name``
4168c2ecf20Sopenharmony_ci  Un generico riferimento ad un tipo. Usate, preferibilmente, il riferimento
4178c2ecf20Sopenharmony_ci  completo come descritto sopra. Questo è dedicato ai commenti obsoleti.
4188c2ecf20Sopenharmony_ci
4198c2ecf20Sopenharmony_ciRiferimenti usando reStructuredText
4208c2ecf20Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4218c2ecf20Sopenharmony_ci
4228c2ecf20Sopenharmony_ciPer fare riferimento a funzioni e tipi di dato definiti nei commenti kernel-doc
4238c2ecf20Sopenharmony_ciall'interno dei documenti reStructuredText, utilizzate i riferimenti dal
4248c2ecf20Sopenharmony_ci`dominio Sphinx per il C`_. Per esempio::
4258c2ecf20Sopenharmony_ci
4268c2ecf20Sopenharmony_ci  See function :c:func:`foo` and struct/union/enum/typedef :c:type:`bar`.
4278c2ecf20Sopenharmony_ci
4288c2ecf20Sopenharmony_ciNonostante il riferimento ai tipi di dato funzioni col solo nome,
4298c2ecf20Sopenharmony_ciovvero senza specificare struct/union/enum/typedef, potreste preferire il
4308c2ecf20Sopenharmony_ciseguente::
4318c2ecf20Sopenharmony_ci
4328c2ecf20Sopenharmony_ci  See :c:type:`struct foo <foo>`.
4338c2ecf20Sopenharmony_ci  See :c:type:`union bar <bar>`.
4348c2ecf20Sopenharmony_ci  See :c:type:`enum baz <baz>`.
4358c2ecf20Sopenharmony_ci  See :c:type:`typedef meh <meh>`.
4368c2ecf20Sopenharmony_ci
4378c2ecf20Sopenharmony_ciQuesto produce dei collegamenti migliori, ed è in linea con il modo in cui
4388c2ecf20Sopenharmony_cikernel-doc gestisce i riferimenti.
4398c2ecf20Sopenharmony_ci
4408c2ecf20Sopenharmony_ciPer maggiori informazioni, siete pregati di consultare la documentazione
4418c2ecf20Sopenharmony_cidel `dominio Sphinx per il C`_.
4428c2ecf20Sopenharmony_ci
4438c2ecf20Sopenharmony_ciCommenti per una documentazione generale
4448c2ecf20Sopenharmony_ci----------------------------------------
4458c2ecf20Sopenharmony_ci
4468c2ecf20Sopenharmony_ciAl fine d'avere il codice ed i commenti nello stesso file, potete includere
4478c2ecf20Sopenharmony_cidei blocchi di documentazione kernel-doc con un formato libero invece
4488c2ecf20Sopenharmony_ciche nel formato specifico per funzioni, strutture, unioni, enumerati o tipi
4498c2ecf20Sopenharmony_cidi dato. Per esempio, questo tipo di commento potrebbe essere usato per la
4508c2ecf20Sopenharmony_cispiegazione delle operazioni di un driver o di una libreria
4518c2ecf20Sopenharmony_ci
4528c2ecf20Sopenharmony_ciQuesto s'ottiene utilizzando la parola chiave ``DOC:`` a cui viene associato
4538c2ecf20Sopenharmony_ciun titolo.
4548c2ecf20Sopenharmony_ci
4558c2ecf20Sopenharmony_ciGeneralmente il formato di un commento generico o di visione d'insieme è
4568c2ecf20Sopenharmony_ciil seguente::
4578c2ecf20Sopenharmony_ci
4588c2ecf20Sopenharmony_ci  /**
4598c2ecf20Sopenharmony_ci   * DOC: Theory of Operation
4608c2ecf20Sopenharmony_ci   *
4618c2ecf20Sopenharmony_ci   * The whizbang foobar is a dilly of a gizmo. It can do whatever you
4628c2ecf20Sopenharmony_ci   * want it to do, at any time. It reads your mind. Here's how it works.
4638c2ecf20Sopenharmony_ci   *
4648c2ecf20Sopenharmony_ci   * foo bar splat
4658c2ecf20Sopenharmony_ci   *
4668c2ecf20Sopenharmony_ci   * The only drawback to this gizmo is that is can sometimes damage
4678c2ecf20Sopenharmony_ci   * hardware, software, or its subject(s).
4688c2ecf20Sopenharmony_ci   */
4698c2ecf20Sopenharmony_ci
4708c2ecf20Sopenharmony_ciIl titolo che segue ``DOC:`` funziona da intestazione all'interno del file
4718c2ecf20Sopenharmony_cisorgente, ma anche come identificatore per l'estrazione di questi commenti di
4728c2ecf20Sopenharmony_cidocumentazione. Quindi, il titolo dev'essere unico all'interno del file.
4738c2ecf20Sopenharmony_ci
4748c2ecf20Sopenharmony_ciIncludere i commenti di tipo kernel-doc
4758c2ecf20Sopenharmony_ci=======================================
4768c2ecf20Sopenharmony_ci
4778c2ecf20Sopenharmony_ciI commenti di documentazione possono essere inclusi in un qualsiasi documento
4788c2ecf20Sopenharmony_cidi tipo reStructuredText mediante l'apposita direttiva nell'estensione
4798c2ecf20Sopenharmony_cikernel-doc per Sphinx.
4808c2ecf20Sopenharmony_ci
4818c2ecf20Sopenharmony_ciLe direttive kernel-doc sono nel formato::
4828c2ecf20Sopenharmony_ci
4838c2ecf20Sopenharmony_ci  .. kernel-doc:: source
4848c2ecf20Sopenharmony_ci     :option:
4858c2ecf20Sopenharmony_ci
4868c2ecf20Sopenharmony_ciIl campo *source* è il percorso ad un file sorgente, relativo alla cartella
4878c2ecf20Sopenharmony_ciprincipale dei sorgenti del kernel. La direttiva supporta le seguenti opzioni:
4888c2ecf20Sopenharmony_ci
4898c2ecf20Sopenharmony_ciexport: *[source-pattern ...]*
4908c2ecf20Sopenharmony_ci  Include la documentazione per tutte le funzioni presenti nel file sorgente
4918c2ecf20Sopenharmony_ci  (*source*) che sono state esportate utilizzando ``EXPORT_SYMBOL`` o
4928c2ecf20Sopenharmony_ci  ``EXPORT_SYMBOL_GPL`` in *source* o in qualsiasi altro *source-pattern*
4938c2ecf20Sopenharmony_ci  specificato.
4948c2ecf20Sopenharmony_ci
4958c2ecf20Sopenharmony_ci  Il campo *source-patter* è utile quando i commenti kernel-doc sono stati
4968c2ecf20Sopenharmony_ci  scritti nei file d'intestazione, mentre ``EXPORT_SYMBOL`` e
4978c2ecf20Sopenharmony_ci  ``EXPORT_SYMBOL_GPL`` si trovano vicino alla definizione delle funzioni.
4988c2ecf20Sopenharmony_ci
4998c2ecf20Sopenharmony_ci  Esempi::
5008c2ecf20Sopenharmony_ci
5018c2ecf20Sopenharmony_ci    .. kernel-doc:: lib/bitmap.c
5028c2ecf20Sopenharmony_ci       :export:
5038c2ecf20Sopenharmony_ci
5048c2ecf20Sopenharmony_ci    .. kernel-doc:: include/net/mac80211.h
5058c2ecf20Sopenharmony_ci       :export: net/mac80211/*.c
5068c2ecf20Sopenharmony_ci
5078c2ecf20Sopenharmony_ciinternal: *[source-pattern ...]*
5088c2ecf20Sopenharmony_ci  Include la documentazione per tutte le funzioni ed i tipi presenti nel file
5098c2ecf20Sopenharmony_ci  sorgente (*source*) che **non** sono stati esportati utilizzando
5108c2ecf20Sopenharmony_ci  ``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL`` né in *source* né in qualsiasi
5118c2ecf20Sopenharmony_ci  altro *source-pattern* specificato.
5128c2ecf20Sopenharmony_ci
5138c2ecf20Sopenharmony_ci  Esempio::
5148c2ecf20Sopenharmony_ci
5158c2ecf20Sopenharmony_ci    .. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c
5168c2ecf20Sopenharmony_ci       :internal:
5178c2ecf20Sopenharmony_ci
5188c2ecf20Sopenharmony_ciidentifiers: *[ function/type ...]*
5198c2ecf20Sopenharmony_ci  Include la documentazione per ogni *function* e *type*  in *source*.
5208c2ecf20Sopenharmony_ci  Se non vengono esplicitamente specificate le funzioni da includere, allora
5218c2ecf20Sopenharmony_ci  verranno incluse tutte quelle disponibili in *source*.
5228c2ecf20Sopenharmony_ci
5238c2ecf20Sopenharmony_ci  Esempi::
5248c2ecf20Sopenharmony_ci
5258c2ecf20Sopenharmony_ci    .. kernel-doc:: lib/bitmap.c
5268c2ecf20Sopenharmony_ci       :identifiers: bitmap_parselist bitmap_parselist_user
5278c2ecf20Sopenharmony_ci
5288c2ecf20Sopenharmony_ci    .. kernel-doc:: lib/idr.c
5298c2ecf20Sopenharmony_ci       :identifiers:
5308c2ecf20Sopenharmony_ci
5318c2ecf20Sopenharmony_cifunctions: *[ function ...]*
5328c2ecf20Sopenharmony_ci  Questo è uno pseudonimo, deprecato, per la direttiva 'identifiers'.
5338c2ecf20Sopenharmony_ci
5348c2ecf20Sopenharmony_cidoc: *title*
5358c2ecf20Sopenharmony_ci  Include la documentazione del paragrafo ``DOC:`` identificato dal titolo
5368c2ecf20Sopenharmony_ci  (*title*) all'interno del file sorgente (*source*). Gli spazi in *title* sono
5378c2ecf20Sopenharmony_ci  permessi; non virgolettate *title*. Il campo *title* è utilizzato per
5388c2ecf20Sopenharmony_ci  identificare un paragrafo e per questo non viene incluso nella documentazione
5398c2ecf20Sopenharmony_ci  finale. Verificate d'avere l'intestazione appropriata nei documenti
5408c2ecf20Sopenharmony_ci  reStructuredText.
5418c2ecf20Sopenharmony_ci
5428c2ecf20Sopenharmony_ci  Esempio::
5438c2ecf20Sopenharmony_ci
5448c2ecf20Sopenharmony_ci    .. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c
5458c2ecf20Sopenharmony_ci       :doc: High Definition Audio over HDMI and Display Port
5468c2ecf20Sopenharmony_ci
5478c2ecf20Sopenharmony_ciSenza alcuna opzione, la direttiva kernel-doc include tutti i commenti di
5488c2ecf20Sopenharmony_cidocumentazione presenti nel file sorgente (*source*).
5498c2ecf20Sopenharmony_ci
5508c2ecf20Sopenharmony_ciL'estensione kernel-doc fa parte dei sorgenti del kernel, la si può trovare
5518c2ecf20Sopenharmony_ciin ``Documentation/sphinx/kerneldoc.py``. Internamente, viene utilizzato
5528c2ecf20Sopenharmony_cilo script ``scripts/kernel-doc`` per estrarre i commenti di documentazione
5538c2ecf20Sopenharmony_cidai file sorgenti.
5548c2ecf20Sopenharmony_ci
5558c2ecf20Sopenharmony_ciCome utilizzare kernel-doc per generare pagine man
5568c2ecf20Sopenharmony_ci--------------------------------------------------
5578c2ecf20Sopenharmony_ci
5588c2ecf20Sopenharmony_ciSe volete utilizzare kernel-doc solo per generare delle pagine man, potete
5598c2ecf20Sopenharmony_cifarlo direttamente dai sorgenti del kernel::
5608c2ecf20Sopenharmony_ci
5618c2ecf20Sopenharmony_ci  $ scripts/kernel-doc -man $(git grep -l '/\*\*' -- :^Documentation :^tools) | scripts/split-man.pl /tmp/man
562