xref: /OK3568_Linux_fs/kernel/Documentation/translations/it_IT/doc-guide/kernel-doc.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun.. include:: ../disclaimer-ita.rst
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun.. note:: Per leggere la documentazione originale in inglese:
4*4882a593Smuzhiyun	  :ref:`Documentation/doc-guide/index.rst <doc_guide>`
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun.. _it_kernel_doc:
7*4882a593Smuzhiyun
8*4882a593SmuzhiyunScrivere i commenti in kernel-doc
9*4882a593Smuzhiyun=================================
10*4882a593Smuzhiyun
11*4882a593SmuzhiyunNei file sorgenti del kernel Linux potrete trovare commenti di documentazione
12*4882a593Smuzhiyunstrutturanti secondo il formato kernel-doc. Essi possono descrivere funzioni,
13*4882a593Smuzhiyuntipi di dati, e l'architettura del codice.
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun.. note:: Il formato kernel-doc può sembrare simile a gtk-doc o Doxygen ma
16*4882a593Smuzhiyun   in realtà è molto differente per ragioni storiche. I sorgenti del kernel
17*4882a593Smuzhiyun   contengono decine di migliaia di commenti kernel-doc. Siete pregati
18*4882a593Smuzhiyun   d'attenervi allo stile qui descritto.
19*4882a593Smuzhiyun
20*4882a593SmuzhiyunLa struttura kernel-doc è estratta a partire dai commenti; da questi viene
21*4882a593Smuzhiyungenerato il `dominio Sphinx per il C`_ con un'adeguata descrizione per le
22*4882a593Smuzhiyunfunzioni ed i tipi di dato con i loro relativi collegamenti. Le descrizioni
23*4882a593Smuzhiyunvengono filtrare per cercare i riferimenti ed i marcatori.
24*4882a593Smuzhiyun
25*4882a593SmuzhiyunVedere di seguito per maggiori dettagli.
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun.. _`dominio Sphinx per il C`: http://www.sphinx-doc.org/en/stable/domains.html
28*4882a593Smuzhiyun
29*4882a593SmuzhiyunTutte le funzioni esportate verso i moduli esterni utilizzando
30*4882a593Smuzhiyun``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL`` dovrebbero avere un commento
31*4882a593Smuzhiyunkernel-doc. Quando l'intenzione è di utilizzarle nei moduli, anche le funzioni
32*4882a593Smuzhiyune le strutture dati nei file d'intestazione dovrebbero avere dei commenti
33*4882a593Smuzhiyunkernel-doc.
34*4882a593Smuzhiyun
35*4882a593SmuzhiyunÈ considerata una buona pratica quella di fornire una documentazione formattata
36*4882a593Smuzhiyunsecondo kernel-doc per le funzioni che sono visibili da altri file del kernel
37*4882a593Smuzhiyun(ovvero, che non siano dichiarate utilizzando ``static``). Raccomandiamo,
38*4882a593Smuzhiyuninoltre, di fornire una documentazione kernel-doc anche per procedure private
39*4882a593Smuzhiyun(ovvero, dichiarate "static") al fine di fornire una struttura più coerente
40*4882a593Smuzhiyundei sorgenti. Quest'ultima raccomandazione ha una priorità più bassa ed è a
41*4882a593Smuzhiyundiscrezione dal manutentore (MAINTAINER) del file sorgente.
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun
45*4882a593SmuzhiyunSicuramente la documentazione formattata con kernel-doc è necessaria per
46*4882a593Smuzhiyunle funzioni che sono esportate verso i moduli esterni utilizzando
47*4882a593Smuzhiyun``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL``.
48*4882a593Smuzhiyun
49*4882a593SmuzhiyunCerchiamo anche di fornire una documentazione formattata secondo kernel-doc
50*4882a593Smuzhiyunper le funzioni che sono visibili da altri file del kernel (ovvero, che non
51*4882a593Smuzhiyunsiano dichiarate utilizzando "static")
52*4882a593Smuzhiyun
53*4882a593SmuzhiyunRaccomandiamo, inoltre, di fornire una documentazione formattata con kernel-doc
54*4882a593Smuzhiyunanche per procedure private (ovvero, dichiarate "static") al fine di fornire
55*4882a593Smuzhiyununa struttura più coerente dei sorgenti. Questa raccomandazione ha una priorità
56*4882a593Smuzhiyunpiù bassa ed è a discrezione dal manutentore (MAINTAINER) del file sorgente.
57*4882a593Smuzhiyun
58*4882a593SmuzhiyunLe strutture dati visibili nei file di intestazione dovrebbero essere anch'esse
59*4882a593Smuzhiyundocumentate utilizzando commenti formattati con kernel-doc.
60*4882a593Smuzhiyun
61*4882a593SmuzhiyunCome formattare i commenti kernel-doc
62*4882a593Smuzhiyun-------------------------------------
63*4882a593Smuzhiyun
64*4882a593SmuzhiyunI commenti kernel-doc iniziano con il marcatore ``/**``. Il programma
65*4882a593Smuzhiyun``kernel-doc`` estrarrà i commenti marchiati in questo modo. Il resto
66*4882a593Smuzhiyundel commento è formattato come un normale commento multilinea, ovvero
67*4882a593Smuzhiyuncon un asterisco all'inizio d'ogni riga e che si conclude con ``*/``
68*4882a593Smuzhiyunsu una riga separata.
69*4882a593Smuzhiyun
70*4882a593SmuzhiyunI commenti kernel-doc di funzioni e tipi dovrebbero essere posizionati
71*4882a593Smuzhiyunappena sopra la funzione od il tipo che descrivono. Questo allo scopo di
72*4882a593Smuzhiyunaumentare la probabilità che chi cambia il codice si ricordi di aggiornare
73*4882a593Smuzhiyunanche la documentazione. I commenti kernel-doc di tipo più generale possono
74*4882a593Smuzhiyunessere posizionati ovunque nel file.
75*4882a593Smuzhiyun
76*4882a593SmuzhiyunAl fine di verificare che i commenti siano formattati correttamente, potete
77*4882a593Smuzhiyuneseguire il programma ``kernel-doc`` con un livello di verbosità alto e senza
78*4882a593Smuzhiyunche questo produca alcuna documentazione. Per esempio::
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun	scripts/kernel-doc -v -none drivers/foo/bar.c
81*4882a593Smuzhiyun
82*4882a593SmuzhiyunIl formato della documentazione è verificato della procedura di generazione
83*4882a593Smuzhiyundel kernel quando viene richiesto di effettuare dei controlli extra con GCC::
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun	make W=n
86*4882a593Smuzhiyun
87*4882a593SmuzhiyunDocumentare le funzioni
88*4882a593Smuzhiyun------------------------
89*4882a593Smuzhiyun
90*4882a593SmuzhiyunGeneralmente il formato di un commento kernel-doc per funzioni e
91*4882a593Smuzhiyunmacro simil-funzioni è il seguente::
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun  /**
94*4882a593Smuzhiyun   * function_name() - Brief description of function.
95*4882a593Smuzhiyun   * @arg1: Describe the first argument.
96*4882a593Smuzhiyun   * @arg2: Describe the second argument.
97*4882a593Smuzhiyun   *        One can provide multiple line descriptions
98*4882a593Smuzhiyun   *        for arguments.
99*4882a593Smuzhiyun   *
100*4882a593Smuzhiyun   * A longer description, with more discussion of the function function_name()
101*4882a593Smuzhiyun   * that might be useful to those using or modifying it. Begins with an
102*4882a593Smuzhiyun   * empty comment line, and may include additional embedded empty
103*4882a593Smuzhiyun   * comment lines.
104*4882a593Smuzhiyun   *
105*4882a593Smuzhiyun   * The longer description may have multiple paragraphs.
106*4882a593Smuzhiyun   *
107*4882a593Smuzhiyun   * Context: Describes whether the function can sleep, what locks it takes,
108*4882a593Smuzhiyun   *          releases, or expects to be held. It can extend over multiple
109*4882a593Smuzhiyun   *          lines.
110*4882a593Smuzhiyun   * Return: Describe the return value of function_name.
111*4882a593Smuzhiyun   *
112*4882a593Smuzhiyun   * The return value description can also have multiple paragraphs, and should
113*4882a593Smuzhiyun   * be placed at the end of the comment block.
114*4882a593Smuzhiyun   */
115*4882a593Smuzhiyun
116*4882a593SmuzhiyunLa descrizione introduttiva (*brief description*) che segue il nome della
117*4882a593Smuzhiyunfunzione può continuare su righe successive e termina con la descrizione di
118*4882a593Smuzhiyunun argomento, una linea di commento vuota, oppure la fine del commento.
119*4882a593Smuzhiyun
120*4882a593SmuzhiyunParametri delle funzioni
121*4882a593Smuzhiyun~~~~~~~~~~~~~~~~~~~~~~~~
122*4882a593Smuzhiyun
123*4882a593SmuzhiyunOgni argomento di una funzione dovrebbe essere descritto in ordine, subito
124*4882a593Smuzhiyundopo la descrizione introduttiva.  Non lasciare righe vuote né fra la
125*4882a593Smuzhiyundescrizione introduttiva e quella degli argomenti, né fra gli argomenti.
126*4882a593Smuzhiyun
127*4882a593SmuzhiyunOgni ``@argument:`` può estendersi su più righe.
128*4882a593Smuzhiyun
129*4882a593Smuzhiyun.. note::
130*4882a593Smuzhiyun
131*4882a593Smuzhiyun   Se la descrizione di ``@argument:`` si estende su più righe,
132*4882a593Smuzhiyun   la continuazione dovrebbe iniziare alla stessa colonna della riga
133*4882a593Smuzhiyun   precedente::
134*4882a593Smuzhiyun
135*4882a593Smuzhiyun      * @argument: some long description
136*4882a593Smuzhiyun      *            that continues on next lines
137*4882a593Smuzhiyun
138*4882a593Smuzhiyun   or::
139*4882a593Smuzhiyun
140*4882a593Smuzhiyun      * @argument:
141*4882a593Smuzhiyun      *		some long description
142*4882a593Smuzhiyun      *		that continues on next lines
143*4882a593Smuzhiyun
144*4882a593SmuzhiyunSe una funzione ha un numero variabile di argomento, la sua descrizione
145*4882a593Smuzhiyundovrebbe essere scritta con la notazione kernel-doc::
146*4882a593Smuzhiyun
147*4882a593Smuzhiyun      * @...: description
148*4882a593Smuzhiyun
149*4882a593SmuzhiyunContesto delle funzioni
150*4882a593Smuzhiyun~~~~~~~~~~~~~~~~~~~~~~~
151*4882a593Smuzhiyun
152*4882a593SmuzhiyunIl contesto in cui le funzioni vengono chiamate viene descritto in una
153*4882a593Smuzhiyunsezione chiamata ``Context``. Questo dovrebbe informare sulla possibilità
154*4882a593Smuzhiyunche una funzione dorma (*sleep*) o che possa essere chiamata in un contesto
155*4882a593Smuzhiyund'interruzione, così come i *lock* che prende, rilascia e che si aspetta che
156*4882a593Smuzhiyunvengano presi dal chiamante.
157*4882a593Smuzhiyun
158*4882a593SmuzhiyunEsempi::
159*4882a593Smuzhiyun
160*4882a593Smuzhiyun  * Context: Any context.
161*4882a593Smuzhiyun  * Context: Any context. Takes and releases the RCU lock.
162*4882a593Smuzhiyun  * Context: Any context. Expects <lock> to be held by caller.
163*4882a593Smuzhiyun  * Context: Process context. May sleep if @gfp flags permit.
164*4882a593Smuzhiyun  * Context: Process context. Takes and releases <mutex>.
165*4882a593Smuzhiyun  * Context: Softirq or process context. Takes and releases <lock>, BH-safe.
166*4882a593Smuzhiyun  * Context: Interrupt context.
167*4882a593Smuzhiyun
168*4882a593SmuzhiyunValore di ritorno
169*4882a593Smuzhiyun~~~~~~~~~~~~~~~~~
170*4882a593Smuzhiyun
171*4882a593SmuzhiyunIl valore di ritorno, se c'è, viene descritto in una sezione dedicata di nome
172*4882a593Smuzhiyun``Return``.
173*4882a593Smuzhiyun
174*4882a593Smuzhiyun.. note::
175*4882a593Smuzhiyun
176*4882a593Smuzhiyun  #) La descrizione multiriga non riconosce il termine d'una riga, per cui
177*4882a593Smuzhiyun     se provate a formattare bene il vostro testo come nel seguente esempio::
178*4882a593Smuzhiyun
179*4882a593Smuzhiyun	* Return:
180*4882a593Smuzhiyun	* 0 - OK
181*4882a593Smuzhiyun	* -EINVAL - invalid argument
182*4882a593Smuzhiyun	* -ENOMEM - out of memory
183*4882a593Smuzhiyun
184*4882a593Smuzhiyun     le righe verranno unite e il risultato sarà::
185*4882a593Smuzhiyun
186*4882a593Smuzhiyun	Return: 0 - OK -EINVAL - invalid argument -ENOMEM - out of memory
187*4882a593Smuzhiyun
188*4882a593Smuzhiyun     Quindi, se volete che le righe vengano effettivamente generate, dovete
189*4882a593Smuzhiyun     utilizzare una lista ReST, ad esempio::
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun      * Return:
192*4882a593Smuzhiyun      * * 0		- OK to runtime suspend the device
193*4882a593Smuzhiyun      * * -EBUSY	- Device should not be runtime suspended
194*4882a593Smuzhiyun
195*4882a593Smuzhiyun  #) Se il vostro testo ha delle righe che iniziano con una frase seguita dai
196*4882a593Smuzhiyun     due punti, allora ognuna di queste frasi verrà considerata come il nome
197*4882a593Smuzhiyun     di una nuova sezione, e probabilmente non produrrà gli effetti desiderati.
198*4882a593Smuzhiyun
199*4882a593SmuzhiyunDocumentare strutture, unioni ed enumerazioni
200*4882a593Smuzhiyun---------------------------------------------
201*4882a593Smuzhiyun
202*4882a593SmuzhiyunGeneralmente il formato di un commento kernel-doc per struct, union ed enum è::
203*4882a593Smuzhiyun
204*4882a593Smuzhiyun  /**
205*4882a593Smuzhiyun   * struct struct_name - Brief description.
206*4882a593Smuzhiyun   * @member1: Description of member1.
207*4882a593Smuzhiyun   * @member2: Description of member2.
208*4882a593Smuzhiyun   *           One can provide multiple line descriptions
209*4882a593Smuzhiyun   *           for members.
210*4882a593Smuzhiyun   *
211*4882a593Smuzhiyun   * Description of the structure.
212*4882a593Smuzhiyun   */
213*4882a593Smuzhiyun
214*4882a593SmuzhiyunNell'esempio qui sopra, potete sostituire ``struct`` con ``union`` o ``enum``
215*4882a593Smuzhiyunper descrivere unioni ed enumerati. ``member`` viene usato per indicare i
216*4882a593Smuzhiyunmembri di strutture ed unioni, ma anche i valori di un tipo enumerato.
217*4882a593Smuzhiyun
218*4882a593SmuzhiyunLa descrizione introduttiva (*brief description*) che segue il nome della
219*4882a593Smuzhiyunfunzione può continuare su righe successive e termina con la descrizione di
220*4882a593Smuzhiyunun argomento, una linea di commento vuota, oppure la fine del commento.
221*4882a593Smuzhiyun
222*4882a593SmuzhiyunMembri
223*4882a593Smuzhiyun~~~~~~
224*4882a593Smuzhiyun
225*4882a593SmuzhiyunI membri di strutture, unioni ed enumerati devo essere documentati come i
226*4882a593Smuzhiyunparametri delle funzioni; seguono la descrizione introduttiva e possono
227*4882a593Smuzhiyunestendersi su più righe.
228*4882a593Smuzhiyun
229*4882a593SmuzhiyunAll'interno d'una struttura o d'un unione, potete utilizzare le etichette
230*4882a593Smuzhiyun``private:`` e ``public:``. I campi che sono nell'area ``private:`` non
231*4882a593Smuzhiyunverranno inclusi nella documentazione finale.
232*4882a593Smuzhiyun
233*4882a593SmuzhiyunLe etichette ``private:`` e ``public:`` devono essere messe subito dopo
234*4882a593Smuzhiyunil marcatore di un commento ``/*``. Opzionalmente, possono includere commenti
235*4882a593Smuzhiyunfra ``:`` e il marcatore di fine commento ``*/``.
236*4882a593Smuzhiyun
237*4882a593SmuzhiyunEsempio::
238*4882a593Smuzhiyun
239*4882a593Smuzhiyun  /**
240*4882a593Smuzhiyun   * struct my_struct - short description
241*4882a593Smuzhiyun   * @a: first member
242*4882a593Smuzhiyun   * @b: second member
243*4882a593Smuzhiyun   * @d: fourth member
244*4882a593Smuzhiyun   *
245*4882a593Smuzhiyun   * Longer description
246*4882a593Smuzhiyun   */
247*4882a593Smuzhiyun  struct my_struct {
248*4882a593Smuzhiyun      int a;
249*4882a593Smuzhiyun      int b;
250*4882a593Smuzhiyun  /* private: internal use only */
251*4882a593Smuzhiyun      int c;
252*4882a593Smuzhiyun  /* public: the next one is public */
253*4882a593Smuzhiyun      int d;
254*4882a593Smuzhiyun  };
255*4882a593Smuzhiyun
256*4882a593SmuzhiyunStrutture ed unioni annidate
257*4882a593Smuzhiyun~~~~~~~~~~~~~~~~~~~~~~~~~~~~
258*4882a593Smuzhiyun
259*4882a593SmuzhiyunÈ possibile documentare strutture ed unioni annidate, ad esempio::
260*4882a593Smuzhiyun
261*4882a593Smuzhiyun      /**
262*4882a593Smuzhiyun       * struct nested_foobar - a struct with nested unions and structs
263*4882a593Smuzhiyun       * @memb1: first member of anonymous union/anonymous struct
264*4882a593Smuzhiyun       * @memb2: second member of anonymous union/anonymous struct
265*4882a593Smuzhiyun       * @memb3: third member of anonymous union/anonymous struct
266*4882a593Smuzhiyun       * @memb4: fourth member of anonymous union/anonymous struct
267*4882a593Smuzhiyun       * @bar: non-anonymous union
268*4882a593Smuzhiyun       * @bar.st1: struct st1 inside @bar
269*4882a593Smuzhiyun       * @bar.st2: struct st2 inside @bar
270*4882a593Smuzhiyun       * @bar.st1.memb1: first member of struct st1 on union bar
271*4882a593Smuzhiyun       * @bar.st1.memb2: second member of struct st1 on union bar
272*4882a593Smuzhiyun       * @bar.st2.memb1: first member of struct st2 on union bar
273*4882a593Smuzhiyun       * @bar.st2.memb2: second member of struct st2 on union bar
274*4882a593Smuzhiyun       */
275*4882a593Smuzhiyun      struct nested_foobar {
276*4882a593Smuzhiyun        /* Anonymous union/struct*/
277*4882a593Smuzhiyun        union {
278*4882a593Smuzhiyun          struct {
279*4882a593Smuzhiyun            int memb1;
280*4882a593Smuzhiyun            int memb2;
281*4882a593Smuzhiyun        }
282*4882a593Smuzhiyun          struct {
283*4882a593Smuzhiyun            void *memb3;
284*4882a593Smuzhiyun            int memb4;
285*4882a593Smuzhiyun          }
286*4882a593Smuzhiyun        }
287*4882a593Smuzhiyun        union {
288*4882a593Smuzhiyun          struct {
289*4882a593Smuzhiyun            int memb1;
290*4882a593Smuzhiyun            int memb2;
291*4882a593Smuzhiyun          } st1;
292*4882a593Smuzhiyun          struct {
293*4882a593Smuzhiyun            void *memb1;
294*4882a593Smuzhiyun            int memb2;
295*4882a593Smuzhiyun          } st2;
296*4882a593Smuzhiyun        } bar;
297*4882a593Smuzhiyun      };
298*4882a593Smuzhiyun
299*4882a593Smuzhiyun.. note::
300*4882a593Smuzhiyun
301*4882a593Smuzhiyun   #) Quando documentate una struttura od unione annidata, ad esempio
302*4882a593Smuzhiyun      di nome ``foo``, il suo campo ``bar`` dev'essere documentato
303*4882a593Smuzhiyun      usando ``@foo.bar:``
304*4882a593Smuzhiyun   #) Quando la struttura od unione annidata è anonima, il suo campo
305*4882a593Smuzhiyun      ``bar`` dev'essere documentato usando ``@bar:``
306*4882a593Smuzhiyun
307*4882a593SmuzhiyunCommenti in linea per la documentazione dei membri
308*4882a593Smuzhiyun~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
309*4882a593Smuzhiyun
310*4882a593SmuzhiyunI membri d'una struttura possono essere documentati in linea all'interno
311*4882a593Smuzhiyundella definizione stessa. Ci sono due stili: una singola riga di commento
312*4882a593Smuzhiyunche inizia con ``/**`` e finisce con ``*/``; commenti multi riga come
313*4882a593Smuzhiyunqualsiasi altro commento kernel-doc::
314*4882a593Smuzhiyun
315*4882a593Smuzhiyun  /**
316*4882a593Smuzhiyun   * struct foo - Brief description.
317*4882a593Smuzhiyun   * @foo: The Foo member.
318*4882a593Smuzhiyun   */
319*4882a593Smuzhiyun  struct foo {
320*4882a593Smuzhiyun        int foo;
321*4882a593Smuzhiyun        /**
322*4882a593Smuzhiyun         * @bar: The Bar member.
323*4882a593Smuzhiyun         */
324*4882a593Smuzhiyun        int bar;
325*4882a593Smuzhiyun        /**
326*4882a593Smuzhiyun         * @baz: The Baz member.
327*4882a593Smuzhiyun         *
328*4882a593Smuzhiyun         * Here, the member description may contain several paragraphs.
329*4882a593Smuzhiyun         */
330*4882a593Smuzhiyun        int baz;
331*4882a593Smuzhiyun        union {
332*4882a593Smuzhiyun                /** @foobar: Single line description. */
333*4882a593Smuzhiyun                int foobar;
334*4882a593Smuzhiyun        };
335*4882a593Smuzhiyun        /** @bar2: Description for struct @bar2 inside @foo */
336*4882a593Smuzhiyun        struct {
337*4882a593Smuzhiyun                /**
338*4882a593Smuzhiyun                 * @bar2.barbar: Description for @barbar inside @foo.bar2
339*4882a593Smuzhiyun                 */
340*4882a593Smuzhiyun                int barbar;
341*4882a593Smuzhiyun        } bar2;
342*4882a593Smuzhiyun  };
343*4882a593Smuzhiyun
344*4882a593Smuzhiyun
345*4882a593SmuzhiyunDocumentazione dei tipi di dato
346*4882a593Smuzhiyun-------------------------------
347*4882a593SmuzhiyunGeneralmente il formato di un commento kernel-doc per typedef è
348*4882a593Smuzhiyunil seguente::
349*4882a593Smuzhiyun
350*4882a593Smuzhiyun  /**
351*4882a593Smuzhiyun   * typedef type_name - Brief description.
352*4882a593Smuzhiyun   *
353*4882a593Smuzhiyun   * Description of the type.
354*4882a593Smuzhiyun   */
355*4882a593Smuzhiyun
356*4882a593SmuzhiyunAnche i tipi di dato per prototipi di funzione possono essere documentati::
357*4882a593Smuzhiyun
358*4882a593Smuzhiyun  /**
359*4882a593Smuzhiyun   * typedef type_name - Brief description.
360*4882a593Smuzhiyun   * @arg1: description of arg1
361*4882a593Smuzhiyun   * @arg2: description of arg2
362*4882a593Smuzhiyun   *
363*4882a593Smuzhiyun   * Description of the type.
364*4882a593Smuzhiyun   *
365*4882a593Smuzhiyun   * Context: Locking context.
366*4882a593Smuzhiyun   * Return: Meaning of the return value.
367*4882a593Smuzhiyun   */
368*4882a593Smuzhiyun   typedef void (*type_name)(struct v4l2_ctrl *arg1, void *arg2);
369*4882a593Smuzhiyun
370*4882a593SmuzhiyunMarcatori e riferimenti
371*4882a593Smuzhiyun-----------------------
372*4882a593Smuzhiyun
373*4882a593SmuzhiyunAll'interno dei commenti di tipo kernel-doc vengono riconosciuti i seguenti
374*4882a593Smuzhiyun*pattern* che vengono convertiti in marcatori reStructuredText ed in riferimenti
375*4882a593Smuzhiyundel `dominio Sphinx per il C`_.
376*4882a593Smuzhiyun
377*4882a593Smuzhiyun.. attention:: Questi sono riconosciuti **solo** all'interno di commenti
378*4882a593Smuzhiyun               kernel-doc, e **non** all'interno di documenti reStructuredText.
379*4882a593Smuzhiyun
380*4882a593Smuzhiyun``funcname()``
381*4882a593Smuzhiyun  Riferimento ad una funzione.
382*4882a593Smuzhiyun
383*4882a593Smuzhiyun``@parameter``
384*4882a593Smuzhiyun  Nome di un parametro di una funzione (nessun riferimento, solo formattazione).
385*4882a593Smuzhiyun
386*4882a593Smuzhiyun``%CONST``
387*4882a593Smuzhiyun  Il nome di una costante (nessun riferimento, solo formattazione)
388*4882a593Smuzhiyun
389*4882a593Smuzhiyun````literal````
390*4882a593Smuzhiyun  Un blocco di testo che deve essere riportato così com'è. La rappresentazione
391*4882a593Smuzhiyun  finale utilizzerà caratteri a ``spaziatura fissa``.
392*4882a593Smuzhiyun
393*4882a593Smuzhiyun  Questo è utile se dovete utilizzare caratteri speciali che altrimenti
394*4882a593Smuzhiyun  potrebbero assumere un significato diverso in kernel-doc o in reStructuredText
395*4882a593Smuzhiyun
396*4882a593Smuzhiyun  Questo è particolarmente utile se dovete scrivere qualcosa come ``%ph``
397*4882a593Smuzhiyun  all'interno della descrizione di una funzione.
398*4882a593Smuzhiyun
399*4882a593Smuzhiyun``$ENVVAR``
400*4882a593Smuzhiyun  Il nome di una variabile d'ambiente (nessun riferimento, solo formattazione).
401*4882a593Smuzhiyun
402*4882a593Smuzhiyun``&struct name``
403*4882a593Smuzhiyun  Riferimento ad una struttura.
404*4882a593Smuzhiyun
405*4882a593Smuzhiyun``&enum name``
406*4882a593Smuzhiyun  Riferimento ad un'enumerazione.
407*4882a593Smuzhiyun
408*4882a593Smuzhiyun``&typedef name``
409*4882a593Smuzhiyun  Riferimento ad un tipo di dato.
410*4882a593Smuzhiyun
411*4882a593Smuzhiyun``&struct_name->member`` or ``&struct_name.member``
412*4882a593Smuzhiyun  Riferimento ad un membro di una struttura o di un'unione. Il riferimento sarà
413*4882a593Smuzhiyun  la struttura o l'unione, non il memembro.
414*4882a593Smuzhiyun
415*4882a593Smuzhiyun``&name``
416*4882a593Smuzhiyun  Un generico riferimento ad un tipo. Usate, preferibilmente, il riferimento
417*4882a593Smuzhiyun  completo come descritto sopra. Questo è dedicato ai commenti obsoleti.
418*4882a593Smuzhiyun
419*4882a593SmuzhiyunRiferimenti usando reStructuredText
420*4882a593Smuzhiyun~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
421*4882a593Smuzhiyun
422*4882a593SmuzhiyunPer fare riferimento a funzioni e tipi di dato definiti nei commenti kernel-doc
423*4882a593Smuzhiyunall'interno dei documenti reStructuredText, utilizzate i riferimenti dal
424*4882a593Smuzhiyun`dominio Sphinx per il C`_. Per esempio::
425*4882a593Smuzhiyun
426*4882a593Smuzhiyun  See function :c:func:`foo` and struct/union/enum/typedef :c:type:`bar`.
427*4882a593Smuzhiyun
428*4882a593SmuzhiyunNonostante il riferimento ai tipi di dato funzioni col solo nome,
429*4882a593Smuzhiyunovvero senza specificare struct/union/enum/typedef, potreste preferire il
430*4882a593Smuzhiyunseguente::
431*4882a593Smuzhiyun
432*4882a593Smuzhiyun  See :c:type:`struct foo <foo>`.
433*4882a593Smuzhiyun  See :c:type:`union bar <bar>`.
434*4882a593Smuzhiyun  See :c:type:`enum baz <baz>`.
435*4882a593Smuzhiyun  See :c:type:`typedef meh <meh>`.
436*4882a593Smuzhiyun
437*4882a593SmuzhiyunQuesto produce dei collegamenti migliori, ed è in linea con il modo in cui
438*4882a593Smuzhiyunkernel-doc gestisce i riferimenti.
439*4882a593Smuzhiyun
440*4882a593SmuzhiyunPer maggiori informazioni, siete pregati di consultare la documentazione
441*4882a593Smuzhiyundel `dominio Sphinx per il C`_.
442*4882a593Smuzhiyun
443*4882a593SmuzhiyunCommenti per una documentazione generale
444*4882a593Smuzhiyun----------------------------------------
445*4882a593Smuzhiyun
446*4882a593SmuzhiyunAl fine d'avere il codice ed i commenti nello stesso file, potete includere
447*4882a593Smuzhiyundei blocchi di documentazione kernel-doc con un formato libero invece
448*4882a593Smuzhiyunche nel formato specifico per funzioni, strutture, unioni, enumerati o tipi
449*4882a593Smuzhiyundi dato. Per esempio, questo tipo di commento potrebbe essere usato per la
450*4882a593Smuzhiyunspiegazione delle operazioni di un driver o di una libreria
451*4882a593Smuzhiyun
452*4882a593SmuzhiyunQuesto s'ottiene utilizzando la parola chiave ``DOC:`` a cui viene associato
453*4882a593Smuzhiyunun titolo.
454*4882a593Smuzhiyun
455*4882a593SmuzhiyunGeneralmente il formato di un commento generico o di visione d'insieme è
456*4882a593Smuzhiyunil seguente::
457*4882a593Smuzhiyun
458*4882a593Smuzhiyun  /**
459*4882a593Smuzhiyun   * DOC: Theory of Operation
460*4882a593Smuzhiyun   *
461*4882a593Smuzhiyun   * The whizbang foobar is a dilly of a gizmo. It can do whatever you
462*4882a593Smuzhiyun   * want it to do, at any time. It reads your mind. Here's how it works.
463*4882a593Smuzhiyun   *
464*4882a593Smuzhiyun   * foo bar splat
465*4882a593Smuzhiyun   *
466*4882a593Smuzhiyun   * The only drawback to this gizmo is that is can sometimes damage
467*4882a593Smuzhiyun   * hardware, software, or its subject(s).
468*4882a593Smuzhiyun   */
469*4882a593Smuzhiyun
470*4882a593SmuzhiyunIl titolo che segue ``DOC:`` funziona da intestazione all'interno del file
471*4882a593Smuzhiyunsorgente, ma anche come identificatore per l'estrazione di questi commenti di
472*4882a593Smuzhiyundocumentazione. Quindi, il titolo dev'essere unico all'interno del file.
473*4882a593Smuzhiyun
474*4882a593SmuzhiyunIncludere i commenti di tipo kernel-doc
475*4882a593Smuzhiyun=======================================
476*4882a593Smuzhiyun
477*4882a593SmuzhiyunI commenti di documentazione possono essere inclusi in un qualsiasi documento
478*4882a593Smuzhiyundi tipo reStructuredText mediante l'apposita direttiva nell'estensione
479*4882a593Smuzhiyunkernel-doc per Sphinx.
480*4882a593Smuzhiyun
481*4882a593SmuzhiyunLe direttive kernel-doc sono nel formato::
482*4882a593Smuzhiyun
483*4882a593Smuzhiyun  .. kernel-doc:: source
484*4882a593Smuzhiyun     :option:
485*4882a593Smuzhiyun
486*4882a593SmuzhiyunIl campo *source* è il percorso ad un file sorgente, relativo alla cartella
487*4882a593Smuzhiyunprincipale dei sorgenti del kernel. La direttiva supporta le seguenti opzioni:
488*4882a593Smuzhiyun
489*4882a593Smuzhiyunexport: *[source-pattern ...]*
490*4882a593Smuzhiyun  Include la documentazione per tutte le funzioni presenti nel file sorgente
491*4882a593Smuzhiyun  (*source*) che sono state esportate utilizzando ``EXPORT_SYMBOL`` o
492*4882a593Smuzhiyun  ``EXPORT_SYMBOL_GPL`` in *source* o in qualsiasi altro *source-pattern*
493*4882a593Smuzhiyun  specificato.
494*4882a593Smuzhiyun
495*4882a593Smuzhiyun  Il campo *source-patter* è utile quando i commenti kernel-doc sono stati
496*4882a593Smuzhiyun  scritti nei file d'intestazione, mentre ``EXPORT_SYMBOL`` e
497*4882a593Smuzhiyun  ``EXPORT_SYMBOL_GPL`` si trovano vicino alla definizione delle funzioni.
498*4882a593Smuzhiyun
499*4882a593Smuzhiyun  Esempi::
500*4882a593Smuzhiyun
501*4882a593Smuzhiyun    .. kernel-doc:: lib/bitmap.c
502*4882a593Smuzhiyun       :export:
503*4882a593Smuzhiyun
504*4882a593Smuzhiyun    .. kernel-doc:: include/net/mac80211.h
505*4882a593Smuzhiyun       :export: net/mac80211/*.c
506*4882a593Smuzhiyun
507*4882a593Smuzhiyuninternal: *[source-pattern ...]*
508*4882a593Smuzhiyun  Include la documentazione per tutte le funzioni ed i tipi presenti nel file
509*4882a593Smuzhiyun  sorgente (*source*) che **non** sono stati esportati utilizzando
510*4882a593Smuzhiyun  ``EXPORT_SYMBOL`` o ``EXPORT_SYMBOL_GPL`` né in *source* né in qualsiasi
511*4882a593Smuzhiyun  altro *source-pattern* specificato.
512*4882a593Smuzhiyun
513*4882a593Smuzhiyun  Esempio::
514*4882a593Smuzhiyun
515*4882a593Smuzhiyun    .. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c
516*4882a593Smuzhiyun       :internal:
517*4882a593Smuzhiyun
518*4882a593Smuzhiyunidentifiers: *[ function/type ...]*
519*4882a593Smuzhiyun  Include la documentazione per ogni *function* e *type*  in *source*.
520*4882a593Smuzhiyun  Se non vengono esplicitamente specificate le funzioni da includere, allora
521*4882a593Smuzhiyun  verranno incluse tutte quelle disponibili in *source*.
522*4882a593Smuzhiyun
523*4882a593Smuzhiyun  Esempi::
524*4882a593Smuzhiyun
525*4882a593Smuzhiyun    .. kernel-doc:: lib/bitmap.c
526*4882a593Smuzhiyun       :identifiers: bitmap_parselist bitmap_parselist_user
527*4882a593Smuzhiyun
528*4882a593Smuzhiyun    .. kernel-doc:: lib/idr.c
529*4882a593Smuzhiyun       :identifiers:
530*4882a593Smuzhiyun
531*4882a593Smuzhiyunfunctions: *[ function ...]*
532*4882a593Smuzhiyun  Questo è uno pseudonimo, deprecato, per la direttiva 'identifiers'.
533*4882a593Smuzhiyun
534*4882a593Smuzhiyundoc: *title*
535*4882a593Smuzhiyun  Include la documentazione del paragrafo ``DOC:`` identificato dal titolo
536*4882a593Smuzhiyun  (*title*) all'interno del file sorgente (*source*). Gli spazi in *title* sono
537*4882a593Smuzhiyun  permessi; non virgolettate *title*. Il campo *title* è utilizzato per
538*4882a593Smuzhiyun  identificare un paragrafo e per questo non viene incluso nella documentazione
539*4882a593Smuzhiyun  finale. Verificate d'avere l'intestazione appropriata nei documenti
540*4882a593Smuzhiyun  reStructuredText.
541*4882a593Smuzhiyun
542*4882a593Smuzhiyun  Esempio::
543*4882a593Smuzhiyun
544*4882a593Smuzhiyun    .. kernel-doc:: drivers/gpu/drm/i915/intel_audio.c
545*4882a593Smuzhiyun       :doc: High Definition Audio over HDMI and Display Port
546*4882a593Smuzhiyun
547*4882a593SmuzhiyunSenza alcuna opzione, la direttiva kernel-doc include tutti i commenti di
548*4882a593Smuzhiyundocumentazione presenti nel file sorgente (*source*).
549*4882a593Smuzhiyun
550*4882a593SmuzhiyunL'estensione kernel-doc fa parte dei sorgenti del kernel, la si può trovare
551*4882a593Smuzhiyunin ``Documentation/sphinx/kerneldoc.py``. Internamente, viene utilizzato
552*4882a593Smuzhiyunlo script ``scripts/kernel-doc`` per estrarre i commenti di documentazione
553*4882a593Smuzhiyundai file sorgenti.
554*4882a593Smuzhiyun
555*4882a593SmuzhiyunCome utilizzare kernel-doc per generare pagine man
556*4882a593Smuzhiyun--------------------------------------------------
557*4882a593Smuzhiyun
558*4882a593SmuzhiyunSe volete utilizzare kernel-doc solo per generare delle pagine man, potete
559*4882a593Smuzhiyunfarlo direttamente dai sorgenti del kernel::
560*4882a593Smuzhiyun
561*4882a593Smuzhiyun  $ scripts/kernel-doc -man $(git grep -l '/\*\*' -- :^Documentation :^tools) | scripts/split-man.pl /tmp/man
562