]> nv-tegra.nvidia Code Review - linux-2.6.git/blob - Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
ALSA: hda - Add quirk for Acer Ferrari 5000
[linux-2.6.git] / Documentation / sound / alsa / DocBook / writing-an-alsa-driver.tmpl
1 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
2
3 <book>
4 <?dbhtml filename="index.html">
5
6 <!-- ****************************************************** -->
7 <!-- Header  -->
8 <!-- ****************************************************** -->
9   <bookinfo>
10     <title>Writing an ALSA Driver</title>
11     <author>
12       <firstname>Takashi</firstname>
13       <surname>Iwai</surname>
14       <affiliation>
15         <address>
16           <email>tiwai@suse.de</email>
17         </address>
18       </affiliation>
19      </author>
20
21      <date>Oct 15, 2007</date>
22      <edition>0.3.7</edition>
23
24     <abstract>
25       <para>
26         This document describes how to write an ALSA (Advanced Linux
27         Sound Architecture) driver.
28       </para>
29     </abstract>
30
31     <legalnotice>
32     <para>
33     Copyright (c) 2002-2005  Takashi Iwai <email>tiwai@suse.de</email>
34     </para>
35
36     <para>
37     This document is free; you can redistribute it and/or modify it
38     under the terms of the GNU General Public License as published by
39     the Free Software Foundation; either version 2 of the License, or
40     (at your option) any later version. 
41     </para>
42
43     <para>
44     This document is distributed in the hope that it will be useful,
45     but <emphasis>WITHOUT ANY WARRANTY</emphasis>; without even the
46     implied warranty of <emphasis>MERCHANTABILITY or FITNESS FOR A
47     PARTICULAR PURPOSE</emphasis>. See the GNU General Public License
48     for more details.
49     </para>
50
51     <para>
52     You should have received a copy of the GNU General Public
53     License along with this program; if not, write to the Free
54     Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
55     MA 02111-1307 USA
56     </para>
57     </legalnotice>
58
59   </bookinfo>
60
61 <!-- ****************************************************** -->
62 <!-- Preface  -->
63 <!-- ****************************************************** -->
64   <preface id="preface">
65     <title>Preface</title>
66     <para>
67       This document describes how to write an
68       <ulink url="http://www.alsa-project.org/"><citetitle>
69       ALSA (Advanced Linux Sound Architecture)</citetitle></ulink>
70       driver. The document focuses mainly on PCI soundcards.
71       In the case of other device types, the API might
72       be different, too. However, at least the ALSA kernel API is
73       consistent, and therefore it would be still a bit help for
74       writing them.
75     </para>
76
77     <para>
78     This document targets people who already have enough
79     C language skills and have basic linux kernel programming
80     knowledge.  This document doesn't explain the general
81     topic of linux kernel coding and doesn't cover low-level
82     driver implementation details. It only describes
83     the standard way to write a PCI sound driver on ALSA.
84     </para>
85
86     <para>
87       If you are already familiar with the older ALSA ver.0.5.x API, you
88     can check the drivers such as <filename>sound/pci/es1938.c</filename> or
89     <filename>sound/pci/maestro3.c</filename> which have also almost the same
90     code-base in the ALSA 0.5.x tree, so you can compare the differences.
91     </para>
92
93     <para>
94       This document is still a draft version. Any feedback and
95     corrections, please!!
96     </para>
97   </preface>
98
99
100 <!-- ****************************************************** -->
101 <!-- File Tree Structure  -->
102 <!-- ****************************************************** -->
103   <chapter id="file-tree">
104     <title>File Tree Structure</title>
105
106     <section id="file-tree-general">
107       <title>General</title>
108       <para>
109         The ALSA drivers are provided in two ways.
110       </para>
111
112       <para>
113         One is the trees provided as a tarball or via cvs from the
114       ALSA's ftp site, and another is the 2.6 (or later) Linux kernel
115       tree. To synchronize both, the ALSA driver tree is split into
116       two different trees: alsa-kernel and alsa-driver. The former
117       contains purely the source code for the Linux 2.6 (or later)
118       tree. This tree is designed only for compilation on 2.6 or
119       later environment. The latter, alsa-driver, contains many subtle
120       files for compiling ALSA drivers outside of the Linux kernel tree,
121       wrapper functions for older 2.2 and 2.4 kernels, to adapt the latest kernel API,
122       and additional drivers which are still in development or in
123       tests.  The drivers in alsa-driver tree will be moved to
124       alsa-kernel (and eventually to the 2.6 kernel tree) when they are
125       finished and confirmed to work fine.
126       </para>
127
128       <para>
129         The file tree structure of ALSA driver is depicted below. Both
130         alsa-kernel and alsa-driver have almost the same file
131         structure, except for <quote>core</quote> directory. It's
132         named as <quote>acore</quote> in alsa-driver tree. 
133
134         <example>
135           <title>ALSA File Tree Structure</title>
136           <literallayout>
137         sound
138                 /core
139                         /oss
140                         /seq
141                                 /oss
142                                 /instr
143                 /ioctl32
144                 /include
145                 /drivers
146                         /mpu401
147                         /opl3
148                 /i2c
149                         /l3
150                 /synth
151                         /emux
152                 /pci
153                         /(cards)
154                 /isa
155                         /(cards)
156                 /arm
157                 /ppc
158                 /sparc
159                 /usb
160                 /pcmcia /(cards)
161                 /oss
162           </literallayout>
163         </example>
164       </para>
165     </section>
166
167     <section id="file-tree-core-directory">
168       <title>core directory</title>
169       <para>
170         This directory contains the middle layer which is the heart
171       of ALSA drivers. In this directory, the native ALSA modules are
172       stored. The sub-directories contain different modules and are
173       dependent upon the kernel config. 
174       </para>
175
176       <section id="file-tree-core-directory-oss">
177         <title>core/oss</title>
178
179         <para>
180           The codes for PCM and mixer OSS emulation modules are stored
181         in this directory. The rawmidi OSS emulation is included in
182         the ALSA rawmidi code since it's quite small. The sequencer
183         code is stored in <filename>core/seq/oss</filename> directory (see
184         <link linkend="file-tree-core-directory-seq-oss"><citetitle>
185         below</citetitle></link>).
186         </para>
187       </section>
188
189       <section id="file-tree-core-directory-ioctl32">
190         <title>core/ioctl32</title>
191
192         <para>
193           This directory contains the 32bit-ioctl wrappers for 64bit
194         architectures such like x86-64, ppc64 and sparc64. For 32bit
195         and alpha architectures, these are not compiled. 
196         </para>
197       </section>
198
199       <section id="file-tree-core-directory-seq">
200         <title>core/seq</title>
201         <para>
202           This directory and its sub-directories are for the ALSA
203         sequencer. This directory contains the sequencer core and
204         primary sequencer modules such like snd-seq-midi,
205         snd-seq-virmidi, etc. They are compiled only when
206         <constant>CONFIG_SND_SEQUENCER</constant> is set in the kernel
207         config. 
208         </para>
209       </section>
210
211       <section id="file-tree-core-directory-seq-oss">
212         <title>core/seq/oss</title>
213         <para>
214           This contains the OSS sequencer emulation codes.
215         </para>
216       </section>
217
218       <section id="file-tree-core-directory-deq-instr">
219         <title>core/seq/instr</title>
220         <para>
221           This directory contains the modules for the sequencer
222         instrument layer. 
223         </para>
224       </section>
225     </section>
226
227     <section id="file-tree-include-directory">
228       <title>include directory</title>
229       <para>
230         This is the place for the public header files of ALSA drivers,
231       which are to be exported to user-space, or included by
232       several files at different directories. Basically, the private
233       header files should not be placed in this directory, but you may
234       still find files there, due to historical reasons :) 
235       </para>
236     </section>
237
238     <section id="file-tree-drivers-directory">
239       <title>drivers directory</title>
240       <para>
241         This directory contains code shared among different drivers
242       on different architectures.  They are hence supposed not to be
243       architecture-specific.
244       For example, the dummy pcm driver and the serial MIDI
245       driver are found in this directory. In the sub-directories,
246       there is code for components which are independent from
247       bus and cpu architectures. 
248       </para>
249
250       <section id="file-tree-drivers-directory-mpu401">
251         <title>drivers/mpu401</title>
252         <para>
253           The MPU401 and MPU401-UART modules are stored here.
254         </para>
255       </section>
256
257       <section id="file-tree-drivers-directory-opl3">
258         <title>drivers/opl3 and opl4</title>
259         <para>
260           The OPL3 and OPL4 FM-synth stuff is found here.
261         </para>
262       </section>
263     </section>
264
265     <section id="file-tree-i2c-directory">
266       <title>i2c directory</title>
267       <para>
268         This contains the ALSA i2c components.
269       </para>
270
271       <para>
272         Although there is a standard i2c layer on Linux, ALSA has its
273       own i2c code for some cards, because the soundcard needs only a
274       simple operation and the standard i2c API is too complicated for
275       such a purpose. 
276       </para>
277
278       <section id="file-tree-i2c-directory-l3">
279         <title>i2c/l3</title>
280         <para>
281           This is a sub-directory for ARM L3 i2c.
282         </para>
283       </section>
284     </section>
285
286     <section id="file-tree-synth-directory">
287         <title>synth directory</title>
288         <para>
289           This contains the synth middle-level modules.
290         </para>
291
292         <para>
293           So far, there is only Emu8000/Emu10k1 synth driver under
294         the <filename>synth/emux</filename> sub-directory. 
295         </para>
296     </section>
297
298     <section id="file-tree-pci-directory">
299       <title>pci directory</title>
300       <para>
301         This directory and its sub-directories hold the top-level card modules
302       for PCI soundcards and the code specific to the PCI BUS.
303       </para>
304
305       <para>
306         The drivers compiled from a single file are stored directly
307       in the pci directory, while the drivers with several source files are
308       stored on their own sub-directory (e.g. emu10k1, ice1712). 
309       </para>
310     </section>
311
312     <section id="file-tree-isa-directory">
313       <title>isa directory</title>
314       <para>
315         This directory and its sub-directories hold the top-level card modules
316       for ISA soundcards. 
317       </para>
318     </section>
319
320     <section id="file-tree-arm-ppc-sparc-directories">
321       <title>arm, ppc, and sparc directories</title>
322       <para>
323         They are used for top-level card modules which are
324       specific to one of these architectures. 
325       </para>
326     </section>
327
328     <section id="file-tree-usb-directory">
329       <title>usb directory</title>
330       <para>
331         This directory contains the USB-audio driver. In the latest version, the
332       USB MIDI driver is integrated in the usb-audio driver. 
333       </para>
334     </section>
335
336     <section id="file-tree-pcmcia-directory">
337       <title>pcmcia directory</title>
338       <para>
339         The PCMCIA, especially PCCard drivers will go here. CardBus
340       drivers will be in the pci directory, because their API is identical
341       to that of standard PCI cards. 
342       </para>
343     </section>
344
345     <section id="file-tree-oss-directory">
346       <title>oss directory</title>
347       <para>
348         The OSS/Lite source files are stored here in Linux 2.6 (or
349       later) tree. In the ALSA driver tarball, this directory is empty,
350       of course :) 
351       </para>
352     </section>
353   </chapter>
354
355
356 <!-- ****************************************************** -->
357 <!-- Basic Flow for PCI Drivers  -->
358 <!-- ****************************************************** -->
359   <chapter id="basic-flow">
360     <title>Basic Flow for PCI Drivers</title>
361
362     <section id="basic-flow-outline">
363       <title>Outline</title>
364       <para>
365         The minimum flow for PCI soundcards is as follows:
366
367         <itemizedlist>
368           <listitem><para>define the PCI ID table (see the section
369           <link linkend="pci-resource-entries"><citetitle>PCI Entries
370           </citetitle></link>).</para></listitem> 
371           <listitem><para>create <function>probe()</function> callback.</para></listitem>
372           <listitem><para>create <function>remove()</function> callback.</para></listitem>
373           <listitem><para>create a <structname>pci_driver</structname> structure
374           containing the three pointers above.</para></listitem>
375           <listitem><para>create an <function>init()</function> function just calling
376           the <function>pci_register_driver()</function> to register the pci_driver table
377           defined above.</para></listitem>
378           <listitem><para>create an <function>exit()</function> function to call
379           the <function>pci_unregister_driver()</function> function.</para></listitem>
380         </itemizedlist>
381       </para>
382     </section>
383
384     <section id="basic-flow-example">
385       <title>Full Code Example</title>
386       <para>
387         The code example is shown below. Some parts are kept
388       unimplemented at this moment but will be filled in the
389       next sections. The numbers in the comment lines of the
390       <function>snd_mychip_probe()</function> function
391       refer to details explained in the following section. 
392
393         <example>
394           <title>Basic Flow for PCI Drivers - Example</title>
395           <programlisting>
396 <![CDATA[
397   #include <linux/init.h>
398   #include <linux/pci.h>
399   #include <linux/slab.h>
400   #include <sound/core.h>
401   #include <sound/initval.h>
402
403   /* module parameters (see "Module Parameters") */
404   /* SNDRV_CARDS: maximum number of cards supported by this module */
405   static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
406   static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
407   static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
408
409   /* definition of the chip-specific record */
410   struct mychip {
411           struct snd_card *card;
412           /* the rest of the implementation will be in section
413            * "PCI Resource Management"
414            */
415   };
416
417   /* chip-specific destructor
418    * (see "PCI Resource Management")
419    */
420   static int snd_mychip_free(struct mychip *chip)
421   {
422           .... /* will be implemented later... */
423   }
424
425   /* component-destructor
426    * (see "Management of Cards and Components")
427    */
428   static int snd_mychip_dev_free(struct snd_device *device)
429   {
430           return snd_mychip_free(device->device_data);
431   }
432
433   /* chip-specific constructor
434    * (see "Management of Cards and Components")
435    */
436   static int __devinit snd_mychip_create(struct snd_card *card,
437                                          struct pci_dev *pci,
438                                          struct mychip **rchip)
439   {
440           struct mychip *chip;
441           int err;
442           static struct snd_device_ops ops = {
443                  .dev_free = snd_mychip_dev_free,
444           };
445
446           *rchip = NULL;
447
448           /* check PCI availability here
449            * (see "PCI Resource Management")
450            */
451           ....
452
453           /* allocate a chip-specific data with zero filled */
454           chip = kzalloc(sizeof(*chip), GFP_KERNEL);
455           if (chip == NULL)
456                   return -ENOMEM;
457
458           chip->card = card;
459
460           /* rest of initialization here; will be implemented
461            * later, see "PCI Resource Management"
462            */
463           ....
464
465           err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
466           if (err < 0) {
467                   snd_mychip_free(chip);
468                   return err;
469           }
470
471           snd_card_set_dev(card, &pci->dev);
472
473           *rchip = chip;
474           return 0;
475   }
476
477   /* constructor -- see "Constructor" sub-section */
478   static int __devinit snd_mychip_probe(struct pci_dev *pci,
479                                const struct pci_device_id *pci_id)
480   {
481           static int dev;
482           struct snd_card *card;
483           struct mychip *chip;
484           int err;
485
486           /* (1) */
487           if (dev >= SNDRV_CARDS)
488                   return -ENODEV;
489           if (!enable[dev]) {
490                   dev++;
491                   return -ENOENT;
492           }
493
494           /* (2) */
495           card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0);
496           if (card == NULL)
497                   return -ENOMEM;
498
499           /* (3) */
500           err = snd_mychip_create(card, pci, &chip);
501           if (err < 0) {
502                   snd_card_free(card);
503                   return err;
504           }
505
506           /* (4) */
507           strcpy(card->driver, "My Chip");
508           strcpy(card->shortname, "My Own Chip 123");
509           sprintf(card->longname, "%s at 0x%lx irq %i",
510                   card->shortname, chip->ioport, chip->irq);
511
512           /* (5) */
513           .... /* implemented later */
514
515           /* (6) */
516           err = snd_card_register(card);
517           if (err < 0) {
518                   snd_card_free(card);
519                   return err;
520           }
521
522           /* (7) */
523           pci_set_drvdata(pci, card);
524           dev++;
525           return 0;
526   }
527
528   /* destructor -- see the "Destructor" sub-section */
529   static void __devexit snd_mychip_remove(struct pci_dev *pci)
530   {
531           snd_card_free(pci_get_drvdata(pci));
532           pci_set_drvdata(pci, NULL);
533   }
534 ]]>
535           </programlisting>
536         </example>
537       </para>
538     </section>
539
540     <section id="basic-flow-constructor">
541       <title>Constructor</title>
542       <para>
543         The real constructor of PCI drivers is the <function>probe</function> callback.
544       The <function>probe</function> callback and other component-constructors which are called
545       from the <function>probe</function> callback should be defined with
546       the <parameter>__devinit</parameter> prefix. You 
547       cannot use the <parameter>__init</parameter> prefix for them,
548       because any PCI device could be a hotplug device. 
549       </para>
550
551       <para>
552         In the <function>probe</function> callback, the following scheme is often used.
553       </para>
554
555       <section id="basic-flow-constructor-device-index">
556         <title>1) Check and increment the device index.</title>
557         <para>
558           <informalexample>
559             <programlisting>
560 <![CDATA[
561   static int dev;
562   ....
563   if (dev >= SNDRV_CARDS)
564           return -ENODEV;
565   if (!enable[dev]) {
566           dev++;
567           return -ENOENT;
568   }
569 ]]>
570             </programlisting>
571           </informalexample>
572
573         where enable[dev] is the module option.
574         </para>
575
576         <para>
577           Each time the <function>probe</function> callback is called, check the
578         availability of the device. If not available, simply increment
579         the device index and returns. dev will be incremented also
580         later (<link
581         linkend="basic-flow-constructor-set-pci"><citetitle>step
582         7</citetitle></link>). 
583         </para>
584       </section>
585
586       <section id="basic-flow-constructor-create-card">
587         <title>2) Create a card instance</title>
588         <para>
589           <informalexample>
590             <programlisting>
591 <![CDATA[
592   struct snd_card *card;
593   ....
594   card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0);
595 ]]>
596             </programlisting>
597           </informalexample>
598         </para>
599
600         <para>
601           The details will be explained in the section
602           <link linkend="card-management-card-instance"><citetitle>
603           Management of Cards and Components</citetitle></link>.
604         </para>
605       </section>
606
607       <section id="basic-flow-constructor-create-main">
608         <title>3) Create a main component</title>
609         <para>
610           In this part, the PCI resources are allocated.
611
612           <informalexample>
613             <programlisting>
614 <![CDATA[
615   struct mychip *chip;
616   ....
617   err = snd_mychip_create(card, pci, &chip);
618   if (err < 0) {
619           snd_card_free(card);
620           return err;
621   }
622 ]]>
623             </programlisting>
624           </informalexample>
625
626           The details will be explained in the section <link
627         linkend="pci-resource"><citetitle>PCI Resource
628         Management</citetitle></link>.
629         </para>
630       </section>
631
632       <section id="basic-flow-constructor-main-component">
633         <title>4) Set the driver ID and name strings.</title>
634         <para>
635           <informalexample>
636             <programlisting>
637 <![CDATA[
638   strcpy(card->driver, "My Chip");
639   strcpy(card->shortname, "My Own Chip 123");
640   sprintf(card->longname, "%s at 0x%lx irq %i",
641           card->shortname, chip->ioport, chip->irq);
642 ]]>
643             </programlisting>
644           </informalexample>
645
646           The driver field holds the minimal ID string of the
647         chip. This is used by alsa-lib's configurator, so keep it
648         simple but unique. 
649           Even the same driver can have different driver IDs to
650         distinguish the functionality of each chip type. 
651         </para>
652
653         <para>
654           The shortname field is a string shown as more verbose
655         name. The longname field contains the information
656         shown in <filename>/proc/asound/cards</filename>. 
657         </para>
658       </section>
659
660       <section id="basic-flow-constructor-create-other">
661         <title>5) Create other components, such as mixer, MIDI, etc.</title>
662         <para>
663           Here you define the basic components such as
664           <link linkend="pcm-interface"><citetitle>PCM</citetitle></link>,
665           mixer (e.g. <link linkend="api-ac97"><citetitle>AC97</citetitle></link>),
666           MIDI (e.g. <link linkend="midi-interface"><citetitle>MPU-401</citetitle></link>),
667           and other interfaces.
668           Also, if you want a <link linkend="proc-interface"><citetitle>proc
669         file</citetitle></link>, define it here, too.
670         </para>
671       </section>
672
673       <section id="basic-flow-constructor-register-card">
674         <title>6) Register the card instance.</title>
675         <para>
676           <informalexample>
677             <programlisting>
678 <![CDATA[
679   err = snd_card_register(card);
680   if (err < 0) {
681           snd_card_free(card);
682           return err;
683   }
684 ]]>
685             </programlisting>
686           </informalexample>
687         </para>
688
689         <para>
690           Will be explained in the section <link
691         linkend="card-management-registration"><citetitle>Management
692         of Cards and Components</citetitle></link>, too. 
693         </para>
694       </section>
695
696       <section id="basic-flow-constructor-set-pci">
697         <title>7) Set the PCI driver data and return zero.</title>
698         <para>
699           <informalexample>
700             <programlisting>
701 <![CDATA[
702         pci_set_drvdata(pci, card);
703         dev++;
704         return 0;
705 ]]>
706             </programlisting>
707           </informalexample>
708
709           In the above, the card record is stored. This pointer is
710         used in the remove callback and power-management
711         callbacks, too. 
712         </para>
713       </section>
714     </section>
715
716     <section id="basic-flow-destructor">
717       <title>Destructor</title>
718       <para>
719         The destructor, remove callback, simply releases the card
720       instance. Then the ALSA middle layer will release all the
721       attached components automatically. 
722       </para>
723
724       <para>
725         It would be typically like the following:
726
727         <informalexample>
728           <programlisting>
729 <![CDATA[
730   static void __devexit snd_mychip_remove(struct pci_dev *pci)
731   {
732           snd_card_free(pci_get_drvdata(pci));
733           pci_set_drvdata(pci, NULL);
734   }
735 ]]>
736           </programlisting>
737         </informalexample>
738
739         The above code assumes that the card pointer is set to the PCI
740         driver data.
741       </para>
742     </section>
743
744     <section id="basic-flow-header-files">
745       <title>Header Files</title>
746       <para>
747         For the above example, at least the following include files
748       are necessary. 
749
750         <informalexample>
751           <programlisting>
752 <![CDATA[
753   #include <linux/init.h>
754   #include <linux/pci.h>
755   #include <linux/slab.h>
756   #include <sound/core.h>
757   #include <sound/initval.h>
758 ]]>
759           </programlisting>
760         </informalexample>
761
762         where the last one is necessary only when module options are
763       defined in the source file.  If the code is split into several
764       files, the files without module options don't need them.
765       </para>
766
767       <para>
768         In addition to these headers, you'll need
769       <filename>&lt;linux/interrupt.h&gt;</filename> for interrupt
770       handling, and <filename>&lt;asm/io.h&gt;</filename> for I/O
771       access. If you use the <function>mdelay()</function> or
772       <function>udelay()</function> functions, you'll need to include
773       <filename>&lt;linux/delay.h&gt;</filename> too. 
774       </para>
775
776       <para>
777       The ALSA interfaces like the PCM and control APIs are defined in other
778       <filename>&lt;sound/xxx.h&gt;</filename> header files.
779       They have to be included after
780       <filename>&lt;sound/core.h&gt;</filename>.
781       </para>
782
783     </section>
784   </chapter>
785
786
787 <!-- ****************************************************** -->
788 <!-- Management of Cards and Components  -->
789 <!-- ****************************************************** -->
790   <chapter id="card-management">
791     <title>Management of Cards and Components</title>
792
793     <section id="card-management-card-instance">
794       <title>Card Instance</title>
795       <para>
796       For each soundcard, a <quote>card</quote> record must be allocated.
797       </para>
798
799       <para>
800       A card record is the headquarters of the soundcard.  It manages
801       the whole list of devices (components) on the soundcard, such as
802       PCM, mixers, MIDI, synthesizer, and so on.  Also, the card
803       record holds the ID and the name strings of the card, manages
804       the root of proc files, and controls the power-management states
805       and hotplug disconnections.  The component list on the card
806       record is used to manage the correct release of resources at
807       destruction. 
808       </para>
809
810       <para>
811         As mentioned above, to create a card instance, call
812       <function>snd_card_new()</function>.
813
814         <informalexample>
815           <programlisting>
816 <![CDATA[
817   struct snd_card *card;
818   card = snd_card_new(index, id, module, extra_size);
819 ]]>
820           </programlisting>
821         </informalexample>
822       </para>
823
824       <para>
825         The function takes four arguments, the card-index number, the
826         id string, the module pointer (usually
827         <constant>THIS_MODULE</constant>),
828         and the size of extra-data space.  The last argument is used to
829         allocate card-&gt;private_data for the
830         chip-specific data.  Note that these data
831         are allocated by <function>snd_card_new()</function>.
832       </para>
833     </section>
834
835     <section id="card-management-component">
836       <title>Components</title>
837       <para>
838         After the card is created, you can attach the components
839       (devices) to the card instance. In an ALSA driver, a component is
840       represented as a struct <structname>snd_device</structname> object.
841       A component can be a PCM instance, a control interface, a raw
842       MIDI interface, etc.  Each such instance has one component
843       entry.
844       </para>
845
846       <para>
847         A component can be created via
848         <function>snd_device_new()</function> function. 
849
850         <informalexample>
851           <programlisting>
852 <![CDATA[
853   snd_device_new(card, SNDRV_DEV_XXX, chip, &ops);
854 ]]>
855           </programlisting>
856         </informalexample>
857       </para>
858
859       <para>
860         This takes the card pointer, the device-level
861       (<constant>SNDRV_DEV_XXX</constant>), the data pointer, and the
862       callback pointers (<parameter>&amp;ops</parameter>). The
863       device-level defines the type of components and the order of
864       registration and de-registration.  For most components, the
865       device-level is already defined.  For a user-defined component,
866       you can use <constant>SNDRV_DEV_LOWLEVEL</constant>.
867       </para>
868
869       <para>
870       This function itself doesn't allocate the data space. The data
871       must be allocated manually beforehand, and its pointer is passed
872       as the argument. This pointer is used as the
873       (<parameter>chip</parameter> identifier in the above example)
874       for the instance. 
875       </para>
876
877       <para>
878         Each pre-defined ALSA component such as ac97 and pcm calls
879       <function>snd_device_new()</function> inside its
880       constructor. The destructor for each component is defined in the
881       callback pointers.  Hence, you don't need to take care of
882       calling a destructor for such a component.
883       </para>
884
885       <para>
886         If you wish to create your own component, you need to
887       set the destructor function to the dev_free callback in
888       the <parameter>ops</parameter>, so that it can be released
889       automatically via <function>snd_card_free()</function>.
890       The next example will show an implementation of chip-specific
891       data.
892       </para>
893     </section>
894
895     <section id="card-management-chip-specific">
896       <title>Chip-Specific Data</title>
897       <para>
898       Chip-specific information, e.g. the I/O port address, its
899       resource pointer, or the irq number, is stored in the
900       chip-specific record.
901
902         <informalexample>
903           <programlisting>
904 <![CDATA[
905   struct mychip {
906           ....
907   };
908 ]]>
909           </programlisting>
910         </informalexample>
911       </para>
912
913       <para>
914         In general, there are two ways of allocating the chip record.
915       </para>
916
917       <section id="card-management-chip-specific-snd-card-new">
918         <title>1. Allocating via <function>snd_card_new()</function>.</title>
919         <para>
920           As mentioned above, you can pass the extra-data-length
921           to the 4th argument of <function>snd_card_new()</function>, i.e.
922
923           <informalexample>
924             <programlisting>
925 <![CDATA[
926   card = snd_card_new(index[dev], id[dev], THIS_MODULE, sizeof(struct mychip));
927 ]]>
928             </programlisting>
929           </informalexample>
930
931           struct <structname>mychip</structname> is the type of the chip record.
932         </para>
933
934         <para>
935           In return, the allocated record can be accessed as
936
937           <informalexample>
938             <programlisting>
939 <![CDATA[
940   struct mychip *chip = card->private_data;
941 ]]>
942             </programlisting>
943           </informalexample>
944
945           With this method, you don't have to allocate twice.
946           The record is released together with the card instance.
947         </para>
948       </section>
949
950       <section id="card-management-chip-specific-allocate-extra">
951         <title>2. Allocating an extra device.</title>
952
953         <para>
954           After allocating a card instance via
955           <function>snd_card_new()</function> (with
956           <constant>NULL</constant> on the 4th arg), call
957           <function>kzalloc()</function>. 
958
959           <informalexample>
960             <programlisting>
961 <![CDATA[
962   struct snd_card *card;
963   struct mychip *chip;
964   card = snd_card_new(index[dev], id[dev], THIS_MODULE, NULL);
965   .....
966   chip = kzalloc(sizeof(*chip), GFP_KERNEL);
967 ]]>
968             </programlisting>
969           </informalexample>
970         </para>
971
972         <para>
973           The chip record should have the field to hold the card
974           pointer at least, 
975
976           <informalexample>
977             <programlisting>
978 <![CDATA[
979   struct mychip {
980           struct snd_card *card;
981           ....
982   };
983 ]]>
984             </programlisting>
985           </informalexample>
986         </para>
987
988         <para>
989           Then, set the card pointer in the returned chip instance.
990
991           <informalexample>
992             <programlisting>
993 <![CDATA[
994   chip->card = card;
995 ]]>
996             </programlisting>
997           </informalexample>
998         </para>
999
1000         <para>
1001           Next, initialize the fields, and register this chip
1002           record as a low-level device with a specified
1003           <parameter>ops</parameter>, 
1004
1005           <informalexample>
1006             <programlisting>
1007 <![CDATA[
1008   static struct snd_device_ops ops = {
1009           .dev_free =        snd_mychip_dev_free,
1010   };
1011   ....
1012   snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
1013 ]]>
1014             </programlisting>
1015           </informalexample>
1016
1017           <function>snd_mychip_dev_free()</function> is the
1018         device-destructor function, which will call the real
1019         destructor. 
1020         </para>
1021
1022         <para>
1023           <informalexample>
1024             <programlisting>
1025 <![CDATA[
1026   static int snd_mychip_dev_free(struct snd_device *device)
1027   {
1028           return snd_mychip_free(device->device_data);
1029   }
1030 ]]>
1031             </programlisting>
1032           </informalexample>
1033
1034           where <function>snd_mychip_free()</function> is the real destructor.
1035         </para>
1036       </section>
1037     </section>
1038
1039     <section id="card-management-registration">
1040       <title>Registration and Release</title>
1041       <para>
1042         After all components are assigned, register the card instance
1043       by calling <function>snd_card_register()</function>. Access
1044       to the device files is enabled at this point. That is, before
1045       <function>snd_card_register()</function> is called, the
1046       components are safely inaccessible from external side. If this
1047       call fails, exit the probe function after releasing the card via
1048       <function>snd_card_free()</function>. 
1049       </para>
1050
1051       <para>
1052         For releasing the card instance, you can call simply
1053       <function>snd_card_free()</function>. As mentioned earlier, all
1054       components are released automatically by this call. 
1055       </para>
1056
1057       <para>
1058         As further notes, the destructors (both
1059       <function>snd_mychip_dev_free</function> and
1060       <function>snd_mychip_free</function>) cannot be defined with
1061       the <parameter>__devexit</parameter> prefix, because they may be
1062       called from the constructor, too, at the false path. 
1063       </para>
1064
1065       <para>
1066       For a device which allows hotplugging, you can use
1067       <function>snd_card_free_when_closed</function>.  This one will
1068       postpone the destruction until all devices are closed.
1069       </para>
1070
1071     </section>
1072
1073   </chapter>
1074
1075
1076 <!-- ****************************************************** -->
1077 <!-- PCI Resource Management  -->
1078 <!-- ****************************************************** -->
1079   <chapter id="pci-resource">
1080     <title>PCI Resource Management</title>
1081
1082     <section id="pci-resource-example">
1083       <title>Full Code Example</title>
1084       <para>
1085         In this section, we'll complete the chip-specific constructor,
1086       destructor and PCI entries. Example code is shown first,
1087       below. 
1088
1089         <example>
1090           <title>PCI Resource Management Example</title>
1091           <programlisting>
1092 <![CDATA[
1093   struct mychip {
1094           struct snd_card *card;
1095           struct pci_dev *pci;
1096
1097           unsigned long port;
1098           int irq;
1099   };
1100
1101   static int snd_mychip_free(struct mychip *chip)
1102   {
1103           /* disable hardware here if any */
1104           .... /* (not implemented in this document) */
1105
1106           /* release the irq */
1107           if (chip->irq >= 0)
1108                   free_irq(chip->irq, chip);
1109           /* release the I/O ports & memory */
1110           pci_release_regions(chip->pci);
1111           /* disable the PCI entry */
1112           pci_disable_device(chip->pci);
1113           /* release the data */
1114           kfree(chip);
1115           return 0;
1116   }
1117
1118   /* chip-specific constructor */
1119   static int __devinit snd_mychip_create(struct snd_card *card,
1120                                          struct pci_dev *pci,
1121                                          struct mychip **rchip)
1122   {
1123           struct mychip *chip;
1124           int err;
1125           static struct snd_device_ops ops = {
1126                  .dev_free = snd_mychip_dev_free,
1127           };
1128
1129           *rchip = NULL;
1130
1131           /* initialize the PCI entry */
1132           err = pci_enable_device(pci);
1133           if (err < 0)
1134                   return err;
1135           /* check PCI availability (28bit DMA) */
1136           if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 ||
1137               pci_set_consistent_dma_mask(pci, DMA_28BIT_MASK) < 0) {
1138                   printk(KERN_ERR "error to set 28bit mask DMA\n");
1139                   pci_disable_device(pci);
1140                   return -ENXIO;
1141           }
1142
1143           chip = kzalloc(sizeof(*chip), GFP_KERNEL);
1144           if (chip == NULL) {
1145                   pci_disable_device(pci);
1146                   return -ENOMEM;
1147           }
1148
1149           /* initialize the stuff */
1150           chip->card = card;
1151           chip->pci = pci;
1152           chip->irq = -1;
1153
1154           /* (1) PCI resource allocation */
1155           err = pci_request_regions(pci, "My Chip");
1156           if (err < 0) {
1157                   kfree(chip);
1158                   pci_disable_device(pci);
1159                   return err;
1160           }
1161           chip->port = pci_resource_start(pci, 0);
1162           if (request_irq(pci->irq, snd_mychip_interrupt,
1163                           IRQF_SHARED, "My Chip", chip)) {
1164                   printk(KERN_ERR "cannot grab irq %d\n", pci->irq);
1165                   snd_mychip_free(chip);
1166                   return -EBUSY;
1167           }
1168           chip->irq = pci->irq;
1169
1170           /* (2) initialization of the chip hardware */
1171           .... /*   (not implemented in this document) */
1172
1173           err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
1174           if (err < 0) {
1175                   snd_mychip_free(chip);
1176                   return err;
1177           }
1178
1179           snd_card_set_dev(card, &pci->dev);
1180
1181           *rchip = chip;
1182           return 0;
1183   }        
1184
1185   /* PCI IDs */
1186   static struct pci_device_id snd_mychip_ids[] = {
1187           { PCI_VENDOR_ID_FOO, PCI_DEVICE_ID_BAR,
1188             PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
1189           ....
1190           { 0, }
1191   };
1192   MODULE_DEVICE_TABLE(pci, snd_mychip_ids);
1193
1194   /* pci_driver definition */
1195   static struct pci_driver driver = {
1196           .name = "My Own Chip",
1197           .id_table = snd_mychip_ids,
1198           .probe = snd_mychip_probe,
1199           .remove = __devexit_p(snd_mychip_remove),
1200   };
1201
1202   /* module initialization */
1203   static int __init alsa_card_mychip_init(void)
1204   {
1205           return pci_register_driver(&driver);
1206   }
1207
1208   /* module clean up */
1209   static void __exit alsa_card_mychip_exit(void)
1210   {
1211           pci_unregister_driver(&driver);
1212   }
1213
1214   module_init(alsa_card_mychip_init)
1215   module_exit(alsa_card_mychip_exit)
1216
1217   EXPORT_NO_SYMBOLS; /* for old kernels only */
1218 ]]>
1219           </programlisting>
1220         </example>
1221       </para>
1222     </section>
1223
1224     <section id="pci-resource-some-haftas">
1225       <title>Some Hafta's</title>
1226       <para>
1227         The allocation of PCI resources is done in the
1228       <function>probe()</function> function, and usually an extra
1229       <function>xxx_create()</function> function is written for this
1230       purpose.
1231       </para>
1232
1233       <para>
1234         In the case of PCI devices, you first have to call
1235       the <function>pci_enable_device()</function> function before
1236       allocating resources. Also, you need to set the proper PCI DMA
1237       mask to limit the accessed I/O range. In some cases, you might
1238       need to call <function>pci_set_master()</function> function,
1239       too.
1240       </para>
1241
1242       <para>
1243         Suppose the 28bit mask, and the code to be added would be like:
1244
1245         <informalexample>
1246           <programlisting>
1247 <![CDATA[
1248   err = pci_enable_device(pci);
1249   if (err < 0)
1250           return err;
1251   if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 ||
1252       pci_set_consistent_dma_mask(pci, DMA_28BIT_MASK) < 0) {
1253           printk(KERN_ERR "error to set 28bit mask DMA\n");
1254           pci_disable_device(pci);
1255           return -ENXIO;
1256   }
1257   
1258 ]]>
1259           </programlisting>
1260         </informalexample>
1261       </para>
1262     </section>
1263
1264     <section id="pci-resource-resource-allocation">
1265       <title>Resource Allocation</title>
1266       <para>
1267         The allocation of I/O ports and irqs is done via standard kernel
1268       functions. Unlike ALSA ver.0.5.x., there are no helpers for
1269       that. And these resources must be released in the destructor
1270       function (see below). Also, on ALSA 0.9.x, you don't need to
1271       allocate (pseudo-)DMA for PCI like in ALSA 0.5.x.
1272       </para>
1273
1274       <para>
1275         Now assume that the PCI device has an I/O port with 8 bytes
1276         and an interrupt. Then struct <structname>mychip</structname> will have the
1277         following fields:
1278
1279         <informalexample>
1280           <programlisting>
1281 <![CDATA[
1282   struct mychip {
1283           struct snd_card *card;
1284
1285           unsigned long port;
1286           int irq;
1287   };
1288 ]]>
1289           </programlisting>
1290         </informalexample>
1291       </para>
1292
1293       <para>
1294         For an I/O port (and also a memory region), you need to have
1295       the resource pointer for the standard resource management. For
1296       an irq, you have to keep only the irq number (integer). But you
1297       need to initialize this number as -1 before actual allocation,
1298       since irq 0 is valid. The port address and its resource pointer
1299       can be initialized as null by
1300       <function>kzalloc()</function> automatically, so you
1301       don't have to take care of resetting them. 
1302       </para>
1303
1304       <para>
1305         The allocation of an I/O port is done like this:
1306
1307         <informalexample>
1308           <programlisting>
1309 <![CDATA[
1310   err = pci_request_regions(pci, "My Chip");
1311   if (err < 0) { 
1312           kfree(chip);
1313           pci_disable_device(pci);
1314           return err;
1315   }
1316   chip->port = pci_resource_start(pci, 0);
1317 ]]>
1318           </programlisting>
1319         </informalexample>
1320       </para>
1321
1322       <para>
1323         <!-- obsolete -->
1324         It will reserve the I/O port region of 8 bytes of the given
1325       PCI device. The returned value, chip-&gt;res_port, is allocated
1326       via <function>kmalloc()</function> by
1327       <function>request_region()</function>. The pointer must be
1328       released via <function>kfree()</function>, but there is a
1329       problem with this. This issue will be explained later.
1330       </para>
1331
1332       <para>
1333         The allocation of an interrupt source is done like this:
1334
1335         <informalexample>
1336           <programlisting>
1337 <![CDATA[
1338   if (request_irq(pci->irq, snd_mychip_interrupt,
1339                   IRQF_SHARED, "My Chip", chip)) {
1340           printk(KERN_ERR "cannot grab irq %d\n", pci->irq);
1341           snd_mychip_free(chip);
1342           return -EBUSY;
1343   }
1344   chip->irq = pci->irq;
1345 ]]>
1346           </programlisting>
1347         </informalexample>
1348
1349         where <function>snd_mychip_interrupt()</function> is the
1350       interrupt handler defined <link
1351       linkend="pcm-interface-interrupt-handler"><citetitle>later</citetitle></link>.
1352       Note that chip-&gt;irq should be defined
1353       only when <function>request_irq()</function> succeeded.
1354       </para>
1355
1356       <para>
1357       On the PCI bus, interrupts can be shared. Thus,
1358       <constant>IRQF_SHARED</constant> is used as the interrupt flag of
1359       <function>request_irq()</function>. 
1360       </para>
1361
1362       <para>
1363         The last argument of <function>request_irq()</function> is the
1364       data pointer passed to the interrupt handler. Usually, the
1365       chip-specific record is used for that, but you can use what you
1366       like, too. 
1367       </para>
1368
1369       <para>
1370         I won't give details about the interrupt handler at this
1371         point, but at least its appearance can be explained now. The
1372         interrupt handler looks usually like the following: 
1373
1374         <informalexample>
1375           <programlisting>
1376 <![CDATA[
1377   static irqreturn_t snd_mychip_interrupt(int irq, void *dev_id)
1378   {
1379           struct mychip *chip = dev_id;
1380           ....
1381           return IRQ_HANDLED;
1382   }
1383 ]]>
1384           </programlisting>
1385         </informalexample>
1386       </para>
1387
1388       <para>
1389         Now let's write the corresponding destructor for the resources
1390       above. The role of destructor is simple: disable the hardware
1391       (if already activated) and release the resources. So far, we
1392       have no hardware part, so the disabling code is not written here. 
1393       </para>
1394
1395       <para>
1396         To release the resources, the <quote>check-and-release</quote>
1397         method is a safer way. For the interrupt, do like this: 
1398
1399         <informalexample>
1400           <programlisting>
1401 <![CDATA[
1402   if (chip->irq >= 0)
1403           free_irq(chip->irq, chip);
1404 ]]>
1405           </programlisting>
1406         </informalexample>
1407
1408         Since the irq number can start from 0, you should initialize
1409         chip-&gt;irq with a negative value (e.g. -1), so that you can
1410         check the validity of the irq number as above.
1411       </para>
1412
1413       <para>
1414         When you requested I/O ports or memory regions via
1415         <function>pci_request_region()</function> or
1416         <function>pci_request_regions()</function> like in this example,
1417         release the resource(s) using the corresponding function,
1418         <function>pci_release_region()</function> or
1419         <function>pci_release_regions()</function>.
1420
1421         <informalexample>
1422           <programlisting>
1423 <![CDATA[
1424   pci_release_regions(chip->pci);
1425 ]]>
1426           </programlisting>
1427         </informalexample>
1428       </para>
1429
1430       <para>
1431         When you requested manually via <function>request_region()</function>
1432         or <function>request_mem_region</function>, you can release it via
1433         <function>release_resource()</function>.  Suppose that you keep
1434         the resource pointer returned from <function>request_region()</function>
1435         in chip-&gt;res_port, the release procedure looks like:
1436
1437         <informalexample>
1438           <programlisting>
1439 <![CDATA[
1440   release_and_free_resource(chip->res_port);
1441 ]]>
1442           </programlisting>
1443         </informalexample>
1444       </para>
1445
1446       <para>
1447       Don't forget to call <function>pci_disable_device()</function>
1448       before the end.
1449       </para>
1450
1451       <para>
1452         And finally, release the chip-specific record.
1453
1454         <informalexample>
1455           <programlisting>
1456 <![CDATA[
1457   kfree(chip);
1458 ]]>
1459           </programlisting>
1460         </informalexample>
1461       </para>
1462
1463       <para>
1464       Again, remember that you cannot
1465       use the <parameter>__devexit</parameter> prefix for this destructor. 
1466       </para>
1467
1468       <para>
1469       We didn't implement the hardware disabling part in the above.
1470       If you need to do this, please note that the destructor may be
1471       called even before the initialization of the chip is completed.
1472       It would be better to have a flag to skip hardware disabling
1473       if the hardware was not initialized yet.
1474       </para>
1475
1476       <para>
1477       When the chip-data is assigned to the card using
1478       <function>snd_device_new()</function> with
1479       <constant>SNDRV_DEV_LOWLELVEL</constant> , its destructor is 
1480       called at the last.  That is, it is assured that all other
1481       components like PCMs and controls have already been released.
1482       You don't have to stop PCMs, etc. explicitly, but just
1483       call low-level hardware stopping.
1484       </para>
1485
1486       <para>
1487         The management of a memory-mapped region is almost as same as
1488         the management of an I/O port. You'll need three fields like
1489         the following: 
1490
1491         <informalexample>
1492           <programlisting>
1493 <![CDATA[
1494   struct mychip {
1495           ....
1496           unsigned long iobase_phys;
1497           void __iomem *iobase_virt;
1498   };
1499 ]]>
1500           </programlisting>
1501         </informalexample>
1502
1503         and the allocation would be like below:
1504
1505         <informalexample>
1506           <programlisting>
1507 <![CDATA[
1508   if ((err = pci_request_regions(pci, "My Chip")) < 0) {
1509           kfree(chip);
1510           return err;
1511   }
1512   chip->iobase_phys = pci_resource_start(pci, 0);
1513   chip->iobase_virt = ioremap_nocache(chip->iobase_phys,
1514                                       pci_resource_len(pci, 0));
1515 ]]>
1516           </programlisting>
1517         </informalexample>
1518         
1519         and the corresponding destructor would be:
1520
1521         <informalexample>
1522           <programlisting>
1523 <![CDATA[
1524   static int snd_mychip_free(struct mychip *chip)
1525   {
1526           ....
1527           if (chip->iobase_virt)
1528                   iounmap(chip->iobase_virt);
1529           ....
1530           pci_release_regions(chip->pci);
1531           ....
1532   }
1533 ]]>
1534           </programlisting>
1535         </informalexample>
1536       </para>
1537
1538     </section>
1539
1540     <section id="pci-resource-device-struct">
1541       <title>Registration of Device Struct</title>
1542       <para>
1543         At some point, typically after calling <function>snd_device_new()</function>,
1544         you need to register the struct <structname>device</structname> of the chip
1545         you're handling for udev and co.  ALSA provides a macro for compatibility with
1546         older kernels.  Simply call like the following:
1547         <informalexample>
1548           <programlisting>
1549 <![CDATA[
1550   snd_card_set_dev(card, &pci->dev);
1551 ]]>
1552           </programlisting>
1553         </informalexample>
1554         so that it stores the PCI's device pointer to the card.  This will be
1555         referred by ALSA core functions later when the devices are registered.
1556       </para>
1557       <para>
1558         In the case of non-PCI, pass the proper device struct pointer of the BUS
1559         instead.  (In the case of legacy ISA without PnP, you don't have to do
1560         anything.)
1561       </para>
1562     </section>
1563
1564     <section id="pci-resource-entries">
1565       <title>PCI Entries</title>
1566       <para>
1567         So far, so good. Let's finish the missing PCI
1568       stuff. At first, we need a
1569       <structname>pci_device_id</structname> table for this
1570       chipset. It's a table of PCI vendor/device ID number, and some
1571       masks. 
1572       </para>
1573
1574       <para>
1575         For example,
1576
1577         <informalexample>
1578           <programlisting>
1579 <![CDATA[
1580   static struct pci_device_id snd_mychip_ids[] = {
1581           { PCI_VENDOR_ID_FOO, PCI_DEVICE_ID_BAR,
1582             PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
1583           ....
1584           { 0, }
1585   };
1586   MODULE_DEVICE_TABLE(pci, snd_mychip_ids);
1587 ]]>
1588           </programlisting>
1589         </informalexample>
1590       </para>
1591
1592       <para>
1593         The first and second fields of
1594       the <structname>pci_device_id</structname> structure are the vendor and
1595       device IDs. If you have no reason to filter the matching
1596       devices, you can leave the remaining fields as above. The last
1597       field of the <structname>pci_device_id</structname> struct contains
1598       private data for this entry. You can specify any value here, for
1599       example, to define specific operations for supported device IDs.
1600       Such an example is found in the intel8x0 driver. 
1601       </para>
1602
1603       <para>
1604         The last entry of this list is the terminator. You must
1605       specify this all-zero entry. 
1606       </para>
1607
1608       <para>
1609         Then, prepare the <structname>pci_driver</structname> record:
1610
1611         <informalexample>
1612           <programlisting>
1613 <![CDATA[
1614   static struct pci_driver driver = {
1615           .name = "My Own Chip",
1616           .id_table = snd_mychip_ids,
1617           .probe = snd_mychip_probe,
1618           .remove = __devexit_p(snd_mychip_remove),
1619   };
1620 ]]>
1621           </programlisting>
1622         </informalexample>
1623       </para>
1624
1625       <para>
1626         The <structfield>probe</structfield> and
1627       <structfield>remove</structfield> functions have already
1628       been defined in the previous sections.
1629       The <structfield>remove</structfield> function should
1630       be defined with the 
1631       <function>__devexit_p()</function> macro, so that it's not
1632       defined for built-in (and non-hot-pluggable) case. The
1633       <structfield>name</structfield> 
1634       field is the name string of this device. Note that you must not
1635       use a slash <quote>/</quote> in this string. 
1636       </para>
1637
1638       <para>
1639         And at last, the module entries:
1640
1641         <informalexample>
1642           <programlisting>
1643 <![CDATA[
1644   static int __init alsa_card_mychip_init(void)
1645   {
1646           return pci_register_driver(&driver);
1647   }
1648
1649   static void __exit alsa_card_mychip_exit(void)
1650   {
1651           pci_unregister_driver(&driver);
1652   }
1653
1654   module_init(alsa_card_mychip_init)
1655   module_exit(alsa_card_mychip_exit)
1656 ]]>
1657           </programlisting>
1658         </informalexample>
1659       </para>
1660
1661       <para>
1662         Note that these module entries are tagged with
1663       <parameter>__init</parameter> and 
1664       <parameter>__exit</parameter> prefixes, not
1665       <parameter>__devinit</parameter> nor
1666       <parameter>__devexit</parameter>.
1667       </para>
1668
1669       <para>
1670         Oh, one thing was forgotten. If you have no exported symbols,
1671         you need to declare it in 2.2 or 2.4 kernels (it's not necessary in 2.6 kernels).
1672
1673         <informalexample>
1674           <programlisting>
1675 <![CDATA[
1676   EXPORT_NO_SYMBOLS;
1677 ]]>
1678           </programlisting>
1679         </informalexample>
1680
1681         That's all!
1682       </para>
1683     </section>
1684   </chapter>
1685
1686
1687 <!-- ****************************************************** -->
1688 <!-- PCM Interface  -->
1689 <!-- ****************************************************** -->
1690   <chapter id="pcm-interface">
1691     <title>PCM Interface</title>
1692
1693     <section id="pcm-interface-general">
1694       <title>General</title>
1695       <para>
1696         The PCM middle layer of ALSA is quite powerful and it is only
1697       necessary for each driver to implement the low-level functions
1698       to access its hardware.
1699       </para>
1700
1701       <para>
1702         For accessing to the PCM layer, you need to include
1703       <filename>&lt;sound/pcm.h&gt;</filename> first. In addition,
1704       <filename>&lt;sound/pcm_params.h&gt;</filename> might be needed
1705       if you access to some functions related with hw_param. 
1706       </para>
1707
1708       <para>
1709         Each card device can have up to four pcm instances. A pcm
1710       instance corresponds to a pcm device file. The limitation of
1711       number of instances comes only from the available bit size of
1712       the Linux's device numbers. Once when 64bit device number is
1713       used, we'll have more pcm instances available. 
1714       </para>
1715
1716       <para>
1717         A pcm instance consists of pcm playback and capture streams,
1718       and each pcm stream consists of one or more pcm substreams. Some
1719       soundcards support multiple playback functions. For example,
1720       emu10k1 has a PCM playback of 32 stereo substreams. In this case, at
1721       each open, a free substream is (usually) automatically chosen
1722       and opened. Meanwhile, when only one substream exists and it was
1723       already opened, the successful open will either block
1724       or error with <constant>EAGAIN</constant> according to the
1725       file open mode. But you don't have to care about such details in your
1726       driver. The PCM middle layer will take care of such work.
1727       </para>
1728     </section>
1729
1730     <section id="pcm-interface-example">
1731       <title>Full Code Example</title>
1732       <para>
1733       The example code below does not include any hardware access
1734       routines but shows only the skeleton, how to build up the PCM
1735       interfaces.
1736
1737         <example>
1738           <title>PCM Example Code</title>
1739           <programlisting>
1740 <![CDATA[
1741   #include <sound/pcm.h>
1742   ....
1743
1744   /* hardware definition */
1745   static struct snd_pcm_hardware snd_mychip_playback_hw = {
1746           .info = (SNDRV_PCM_INFO_MMAP |
1747                    SNDRV_PCM_INFO_INTERLEAVED |
1748                    SNDRV_PCM_INFO_BLOCK_TRANSFER |
1749                    SNDRV_PCM_INFO_MMAP_VALID),
1750           .formats =          SNDRV_PCM_FMTBIT_S16_LE,
1751           .rates =            SNDRV_PCM_RATE_8000_48000,
1752           .rate_min =         8000,
1753           .rate_max =         48000,
1754           .channels_min =     2,
1755           .channels_max =     2,
1756           .buffer_bytes_max = 32768,
1757           .period_bytes_min = 4096,
1758           .period_bytes_max = 32768,
1759           .periods_min =      1,
1760           .periods_max =      1024,
1761   };
1762
1763   /* hardware definition */
1764   static struct snd_pcm_hardware snd_mychip_capture_hw = {
1765           .info = (SNDRV_PCM_INFO_MMAP |
1766                    SNDRV_PCM_INFO_INTERLEAVED |
1767                    SNDRV_PCM_INFO_BLOCK_TRANSFER |
1768                    SNDRV_PCM_INFO_MMAP_VALID),
1769           .formats =          SNDRV_PCM_FMTBIT_S16_LE,
1770           .rates =            SNDRV_PCM_RATE_8000_48000,
1771           .rate_min =         8000,
1772           .rate_max =         48000,
1773           .channels_min =     2,
1774           .channels_max =     2,
1775           .buffer_bytes_max = 32768,
1776           .period_bytes_min = 4096,
1777           .period_bytes_max = 32768,
1778           .periods_min =      1,
1779           .periods_max =      1024,
1780   };
1781
1782   /* open callback */
1783   static int snd_mychip_playback_open(struct snd_pcm_substream *substream)
1784   {
1785           struct mychip *chip = snd_pcm_substream_chip(substream);
1786           struct snd_pcm_runtime *runtime = substream->runtime;
1787
1788           runtime->hw = snd_mychip_playback_hw;
1789           /* more hardware-initialization will be done here */
1790           ....
1791           return 0;
1792   }
1793
1794   /* close callback */
1795   static int snd_mychip_playback_close(struct snd_pcm_substream *substream)
1796   {
1797           struct mychip *chip = snd_pcm_substream_chip(substream);
1798           /* the hardware-specific codes will be here */
1799           ....
1800           return 0;
1801
1802   }
1803
1804   /* open callback */
1805   static int snd_mychip_capture_open(struct snd_pcm_substream *substream)
1806   {
1807           struct mychip *chip = snd_pcm_substream_chip(substream);
1808           struct snd_pcm_runtime *runtime = substream->runtime;
1809
1810           runtime->hw = snd_mychip_capture_hw;
1811           /* more hardware-initialization will be done here */
1812           ....
1813           return 0;
1814   }
1815
1816   /* close callback */
1817   static int snd_mychip_capture_close(struct snd_pcm_substream *substream)
1818   {
1819           struct mychip *chip = snd_pcm_substream_chip(substream);
1820           /* the hardware-specific codes will be here */
1821           ....
1822           return 0;
1823
1824   }
1825
1826   /* hw_params callback */
1827   static int snd_mychip_pcm_hw_params(struct snd_pcm_substream *substream,
1828                                struct snd_pcm_hw_params *hw_params)
1829   {
1830           return snd_pcm_lib_malloc_pages(substream,
1831                                      params_buffer_bytes(hw_params));
1832   }
1833
1834   /* hw_free callback */
1835   static int snd_mychip_pcm_hw_free(struct snd_pcm_substream *substream)
1836   {
1837           return snd_pcm_lib_free_pages(substream);
1838   }
1839
1840   /* prepare callback */
1841   static int snd_mychip_pcm_prepare(struct snd_pcm_substream *substream)
1842   {
1843           struct mychip *chip = snd_pcm_substream_chip(substream);
1844           struct snd_pcm_runtime *runtime = substream->runtime;
1845
1846           /* set up the hardware with the current configuration
1847            * for example...
1848            */
1849           mychip_set_sample_format(chip, runtime->format);
1850           mychip_set_sample_rate(chip, runtime->rate);
1851           mychip_set_channels(chip, runtime->channels);
1852           mychip_set_dma_setup(chip, runtime->dma_addr,
1853                                chip->buffer_size,
1854                                chip->period_size);
1855           return 0;
1856   }
1857
1858   /* trigger callback */
1859   static int snd_mychip_pcm_trigger(struct snd_pcm_substream *substream,
1860                                     int cmd)
1861   {
1862           switch (cmd) {
1863           case SNDRV_PCM_TRIGGER_START:
1864                   /* do something to start the PCM engine */
1865                   ....
1866                   break;
1867           case SNDRV_PCM_TRIGGER_STOP:
1868                   /* do something to stop the PCM engine */
1869                   ....
1870                   break;
1871           default:
1872                   return -EINVAL;
1873           }
1874   }
1875
1876   /* pointer callback */
1877   static snd_pcm_uframes_t
1878   snd_mychip_pcm_pointer(struct snd_pcm_substream *substream)
1879   {
1880           struct mychip *chip = snd_pcm_substream_chip(substream);
1881           unsigned int current_ptr;
1882
1883           /* get the current hardware pointer */
1884           current_ptr = mychip_get_hw_pointer(chip);
1885           return current_ptr;
1886   }
1887
1888   /* operators */
1889   static struct snd_pcm_ops snd_mychip_playback_ops = {
1890           .open =        snd_mychip_playback_open,
1891           .close =       snd_mychip_playback_close,
1892           .ioctl =       snd_pcm_lib_ioctl,
1893           .hw_params =   snd_mychip_pcm_hw_params,
1894           .hw_free =     snd_mychip_pcm_hw_free,
1895           .prepare =     snd_mychip_pcm_prepare,
1896           .trigger =     snd_mychip_pcm_trigger,
1897           .pointer =     snd_mychip_pcm_pointer,
1898   };
1899
1900   /* operators */
1901   static struct snd_pcm_ops snd_mychip_capture_ops = {
1902           .open =        snd_mychip_capture_open,
1903           .close =       snd_mychip_capture_close,
1904           .ioctl =       snd_pcm_lib_ioctl,
1905           .hw_params =   snd_mychip_pcm_hw_params,
1906           .hw_free =     snd_mychip_pcm_hw_free,
1907           .prepare =     snd_mychip_pcm_prepare,
1908           .trigger =     snd_mychip_pcm_trigger,
1909           .pointer =     snd_mychip_pcm_pointer,
1910   };
1911
1912   /*
1913    *  definitions of capture are omitted here...
1914    */
1915
1916   /* create a pcm device */
1917   static int __devinit snd_mychip_new_pcm(struct mychip *chip)
1918   {
1919           struct snd_pcm *pcm;
1920           int err;
1921
1922           err = snd_pcm_new(chip->card, "My Chip", 0, 1, 1, &pcm);
1923           if (err < 0) 
1924                   return err;
1925           pcm->private_data = chip;
1926           strcpy(pcm->name, "My Chip");
1927           chip->pcm = pcm;
1928           /* set operators */
1929           snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK,
1930                           &snd_mychip_playback_ops);
1931           snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE,
1932                           &snd_mychip_capture_ops);
1933           /* pre-allocation of buffers */
1934           /* NOTE: this may fail */
1935           snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
1936                                                 snd_dma_pci_data(chip->pci),
1937                                                 64*1024, 64*1024);
1938           return 0;
1939   }
1940 ]]>
1941           </programlisting>
1942         </example>
1943       </para>
1944     </section>
1945
1946     <section id="pcm-interface-constructor">
1947       <title>Constructor</title>
1948       <para>
1949         A pcm instance is allocated by the <function>snd_pcm_new()</function>
1950       function. It would be better to create a constructor for pcm,
1951       namely, 
1952
1953         <informalexample>
1954           <programlisting>
1955 <![CDATA[
1956   static int __devinit snd_mychip_new_pcm(struct mychip *chip)
1957   {
1958           struct snd_pcm *pcm;
1959           int err;
1960
1961           err = snd_pcm_new(chip->card, "My Chip", 0, 1, 1, &pcm);
1962           if (err < 0) 
1963                   return err;
1964           pcm->private_data = chip;
1965           strcpy(pcm->name, "My Chip");
1966           chip->pcm = pcm;
1967           ....
1968           return 0;
1969   }
1970 ]]>
1971           </programlisting>
1972         </informalexample>
1973       </para>
1974
1975       <para>
1976         The <function>snd_pcm_new()</function> function takes four
1977       arguments. The first argument is the card pointer to which this
1978       pcm is assigned, and the second is the ID string. 
1979       </para>
1980
1981       <para>
1982         The third argument (<parameter>index</parameter>, 0 in the
1983       above) is the index of this new pcm. It begins from zero. If
1984       you create more than one pcm instances, specify the
1985       different numbers in this argument. For example,
1986       <parameter>index</parameter> = 1 for the second PCM device.  
1987       </para>
1988
1989       <para>
1990         The fourth and fifth arguments are the number of substreams
1991       for playback and capture, respectively. Here 1 is used for
1992       both arguments. When no playback or capture substreams are available,
1993       pass 0 to the corresponding argument.
1994       </para>
1995
1996       <para>
1997         If a chip supports multiple playbacks or captures, you can
1998       specify more numbers, but they must be handled properly in
1999       open/close, etc. callbacks.  When you need to know which
2000       substream you are referring to, then it can be obtained from
2001       struct <structname>snd_pcm_substream</structname> data passed to each callback
2002       as follows: 
2003
2004         <informalexample>
2005           <programlisting>
2006 <![CDATA[
2007   struct snd_pcm_substream *substream;
2008   int index = substream->number;
2009 ]]>
2010           </programlisting>
2011         </informalexample>
2012       </para>
2013
2014       <para>
2015         After the pcm is created, you need to set operators for each
2016         pcm stream. 
2017
2018         <informalexample>
2019           <programlisting>
2020 <![CDATA[
2021   snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK,
2022                   &snd_mychip_playback_ops);
2023   snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE,
2024                   &snd_mychip_capture_ops);
2025 ]]>
2026           </programlisting>
2027         </informalexample>
2028       </para>
2029
2030       <para>
2031         The operators are defined typically like this:
2032
2033         <informalexample>
2034           <programlisting>
2035 <![CDATA[
2036   static struct snd_pcm_ops snd_mychip_playback_ops = {
2037           .open =        snd_mychip_pcm_open,
2038           .close =       snd_mychip_pcm_close,
2039           .ioctl =       snd_pcm_lib_ioctl,
2040           .hw_params =   snd_mychip_pcm_hw_params,
2041           .hw_free =     snd_mychip_pcm_hw_free,
2042           .prepare =     snd_mychip_pcm_prepare,
2043           .trigger =     snd_mychip_pcm_trigger,
2044           .pointer =     snd_mychip_pcm_pointer,
2045   };
2046 ]]>
2047           </programlisting>
2048         </informalexample>
2049
2050         All the callbacks are described in the
2051         <link linkend="pcm-interface-operators"><citetitle>
2052         Operators</citetitle></link> subsection.
2053       </para>
2054
2055       <para>
2056         After setting the operators, you probably will want to
2057         pre-allocate the buffer. For the pre-allocation, simply call
2058         the following: 
2059
2060         <informalexample>
2061           <programlisting>
2062 <![CDATA[
2063   snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
2064                                         snd_dma_pci_data(chip->pci),
2065                                         64*1024, 64*1024);
2066 ]]>
2067           </programlisting>
2068         </informalexample>
2069
2070         It will allocate a buffer up to 64kB as default.
2071       Buffer management details will be described in the later section <link
2072       linkend="buffer-and-memory"><citetitle>Buffer and Memory
2073       Management</citetitle></link>. 
2074       </para>
2075
2076       <para>
2077         Additionally, you can set some extra information for this pcm
2078         in pcm-&gt;info_flags.
2079         The available values are defined as
2080         <constant>SNDRV_PCM_INFO_XXX</constant> in
2081         <filename>&lt;sound/asound.h&gt;</filename>, which is used for
2082         the hardware definition (described later). When your soundchip
2083         supports only half-duplex, specify like this: 
2084
2085         <informalexample>
2086           <programlisting>
2087 <![CDATA[
2088   pcm->info_flags = SNDRV_PCM_INFO_HALF_DUPLEX;
2089 ]]>
2090           </programlisting>
2091         </informalexample>
2092       </para>
2093     </section>
2094
2095     <section id="pcm-interface-destructor">
2096       <title>... And the Destructor?</title>
2097       <para>
2098         The destructor for a pcm instance is not always
2099       necessary. Since the pcm device will be released by the middle
2100       layer code automatically, you don't have to call the destructor
2101       explicitly.
2102       </para>
2103
2104       <para>
2105         The destructor would be necessary if you created
2106         special records internally and needed to release them. In such a
2107         case, set the destructor function to
2108         pcm-&gt;private_free: 
2109
2110         <example>
2111           <title>PCM Instance with a Destructor</title>
2112           <programlisting>
2113 <![CDATA[
2114   static void mychip_pcm_free(struct snd_pcm *pcm)
2115   {
2116           struct mychip *chip = snd_pcm_chip(pcm);
2117           /* free your own data */
2118           kfree(chip->my_private_pcm_data);
2119           /* do what you like else */
2120           ....
2121   }
2122
2123   static int __devinit snd_mychip_new_pcm(struct mychip *chip)
2124   {
2125           struct snd_pcm *pcm;
2126           ....
2127           /* allocate your own data */
2128           chip->my_private_pcm_data = kmalloc(...);
2129           /* set the destructor */
2130           pcm->private_data = chip;
2131           pcm->private_free = mychip_pcm_free;
2132           ....
2133   }
2134 ]]>
2135           </programlisting>
2136         </example>
2137       </para>
2138     </section>
2139
2140     <section id="pcm-interface-runtime">
2141       <title>Runtime Pointer - The Chest of PCM Information</title>
2142         <para>
2143           When the PCM substream is opened, a PCM runtime instance is
2144         allocated and assigned to the substream. This pointer is
2145         accessible via <constant>substream-&gt;runtime</constant>.
2146         This runtime pointer holds most information you need
2147         to control the PCM: the copy of hw_params and sw_params configurations, the buffer
2148         pointers, mmap records, spinlocks, etc.
2149         </para>
2150
2151         <para>
2152         The definition of runtime instance is found in
2153         <filename>&lt;sound/pcm.h&gt;</filename>.  Here are
2154        the contents of this file:
2155           <informalexample>
2156             <programlisting>
2157 <![CDATA[
2158 struct _snd_pcm_runtime {
2159         /* -- Status -- */
2160         struct snd_pcm_substream *trigger_master;
2161         snd_timestamp_t trigger_tstamp; /* trigger timestamp */
2162         int overrange;
2163         snd_pcm_uframes_t avail_max;
2164         snd_pcm_uframes_t hw_ptr_base;  /* Position at buffer restart */
2165         snd_pcm_uframes_t hw_ptr_interrupt; /* Position at interrupt time*/
2166
2167         /* -- HW params -- */
2168         snd_pcm_access_t access;        /* access mode */
2169         snd_pcm_format_t format;        /* SNDRV_PCM_FORMAT_* */
2170         snd_pcm_subformat_t subformat;  /* subformat */
2171         unsigned int rate;              /* rate in Hz */
2172         unsigned int channels;          /* channels */
2173         snd_pcm_uframes_t period_size;  /* period size */
2174         unsigned int periods;           /* periods */
2175         snd_pcm_uframes_t buffer_size;  /* buffer size */
2176         unsigned int tick_time;         /* tick time */
2177         snd_pcm_uframes_t min_align;    /* Min alignment for the format */
2178         size_t byte_align;
2179         unsigned int frame_bits;
2180         unsigned int sample_bits;
2181         unsigned int info;
2182         unsigned int rate_num;
2183         unsigned int rate_den;
2184
2185         /* -- SW params -- */
2186         struct timespec tstamp_mode;    /* mmap timestamp is updated */
2187         unsigned int period_step;
2188         unsigned int sleep_min;         /* min ticks to sleep */
2189         snd_pcm_uframes_t start_threshold;
2190         snd_pcm_uframes_t stop_threshold;
2191         snd_pcm_uframes_t silence_threshold; /* Silence filling happens when
2192                                                 noise is nearest than this */
2193         snd_pcm_uframes_t silence_size; /* Silence filling size */
2194         snd_pcm_uframes_t boundary;     /* pointers wrap point */
2195
2196         snd_pcm_uframes_t silenced_start;
2197         snd_pcm_uframes_t silenced_size;
2198
2199         snd_pcm_sync_id_t sync;         /* hardware synchronization ID */
2200
2201         /* -- mmap -- */
2202         volatile struct snd_pcm_mmap_status *status;
2203         volatile struct snd_pcm_mmap_control *control;
2204         atomic_t mmap_count;
2205
2206         /* -- locking / scheduling -- */
2207         spinlock_t lock;
2208         wait_queue_head_t sleep;
2209         struct timer_list tick_timer;
2210         struct fasync_struct *fasync;
2211
2212         /* -- private section -- */
2213         void *private_data;
2214         void (*private_free)(struct snd_pcm_runtime *runtime);
2215
2216         /* -- hardware description -- */
2217         struct snd_pcm_hardware hw;
2218         struct snd_pcm_hw_constraints hw_constraints;
2219
2220         /* -- interrupt callbacks -- */
2221         void (*transfer_ack_begin)(struct snd_pcm_substream *substream);
2222         void (*transfer_ack_end)(struct snd_pcm_substream *substream);
2223
2224         /* -- timer -- */
2225         unsigned int timer_resolution;  /* timer resolution */
2226
2227         /* -- DMA -- */           
2228         unsigned char *dma_area;        /* DMA area */
2229         dma_addr_t dma_addr;            /* physical bus address (not accessible from main CPU) */
2230         size_t dma_bytes;               /* size of DMA area */
2231
2232         struct snd_dma_buffer *dma_buffer_p;    /* allocated buffer */
2233
2234 #if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
2235         /* -- OSS things -- */
2236         struct snd_pcm_oss_runtime oss;
2237 #endif
2238 };
2239 ]]>
2240             </programlisting>
2241           </informalexample>
2242         </para>
2243
2244         <para>
2245           For the operators (callbacks) of each sound driver, most of
2246         these records are supposed to be read-only.  Only the PCM
2247         middle-layer changes / updates them.  The exceptions are
2248         the hardware description (hw), interrupt callbacks
2249         (transfer_ack_xxx), DMA buffer information, and the private
2250         data.  Besides, if you use the standard buffer allocation
2251         method via <function>snd_pcm_lib_malloc_pages()</function>,
2252         you don't need to set the DMA buffer information by yourself.
2253         </para>
2254
2255         <para>
2256         In the sections below, important records are explained.
2257         </para>
2258
2259         <section id="pcm-interface-runtime-hw">
2260         <title>Hardware Description</title>
2261         <para>
2262           The hardware descriptor (struct <structname>snd_pcm_hardware</structname>)
2263         contains the definitions of the fundamental hardware
2264         configuration.  Above all, you'll need to define this in
2265         <link linkend="pcm-interface-operators-open-callback"><citetitle>
2266         the open callback</citetitle></link>.
2267         Note that the runtime instance holds the copy of the
2268         descriptor, not the pointer to the existing descriptor.  That
2269         is, in the open callback, you can modify the copied descriptor
2270         (<constant>runtime-&gt;hw</constant>) as you need.  For example, if the maximum
2271         number of channels is 1 only on some chip models, you can
2272         still use the same hardware descriptor and change the
2273         channels_max later:
2274           <informalexample>
2275             <programlisting>
2276 <![CDATA[
2277           struct snd_pcm_runtime *runtime = substream->runtime;
2278           ...
2279           runtime->hw = snd_mychip_playback_hw; /* common definition */
2280           if (chip->model == VERY_OLD_ONE)
2281                   runtime->hw.channels_max = 1;
2282 ]]>
2283             </programlisting>
2284           </informalexample>
2285         </para>
2286
2287         <para>
2288           Typically, you'll have a hardware descriptor as below:
2289           <informalexample>
2290             <programlisting>
2291 <![CDATA[
2292   static struct snd_pcm_hardware snd_mychip_playback_hw = {
2293           .info = (SNDRV_PCM_INFO_MMAP |
2294                    SNDRV_PCM_INFO_INTERLEAVED |
2295                    SNDRV_PCM_INFO_BLOCK_TRANSFER |
2296                    SNDRV_PCM_INFO_MMAP_VALID),
2297           .formats =          SNDRV_PCM_FMTBIT_S16_LE,
2298           .rates =            SNDRV_PCM_RATE_8000_48000,
2299           .rate_min =         8000,
2300           .rate_max =         48000,
2301           .channels_min =     2,
2302           .channels_max =     2,
2303           .buffer_bytes_max = 32768,
2304           .period_bytes_min = 4096,
2305           .period_bytes_max = 32768,
2306           .periods_min =      1,
2307           .periods_max =      1024,
2308   };
2309 ]]>
2310             </programlisting>
2311           </informalexample>
2312         </para>
2313
2314         <para>
2315         <itemizedlist>
2316         <listitem><para>
2317           The <structfield>info</structfield> field contains the type and
2318         capabilities of this pcm. The bit flags are defined in
2319         <filename>&lt;sound/asound.h&gt;</filename> as
2320         <constant>SNDRV_PCM_INFO_XXX</constant>. Here, at least, you
2321         have to specify whether the mmap is supported and which
2322         interleaved format is supported.
2323         When the is supported, add the
2324         <constant>SNDRV_PCM_INFO_MMAP</constant> flag here. When the
2325         hardware supports the interleaved or the non-interleaved
2326         formats, <constant>SNDRV_PCM_INFO_INTERLEAVED</constant> or
2327         <constant>SNDRV_PCM_INFO_NONINTERLEAVED</constant> flag must
2328         be set, respectively. If both are supported, you can set both,
2329         too. 
2330         </para>
2331
2332         <para>
2333           In the above example, <constant>MMAP_VALID</constant> and
2334         <constant>BLOCK_TRANSFER</constant> are specified for the OSS mmap
2335         mode. Usually both are set. Of course,
2336         <constant>MMAP_VALID</constant> is set only if the mmap is
2337         really supported. 
2338         </para>
2339
2340         <para>
2341           The other possible flags are
2342         <constant>SNDRV_PCM_INFO_PAUSE</constant> and
2343         <constant>SNDRV_PCM_INFO_RESUME</constant>. The
2344         <constant>PAUSE</constant> bit means that the pcm supports the
2345         <quote>pause</quote> operation, while the
2346         <constant>RESUME</constant> bit means that the pcm supports
2347         the full <quote>suspend/resume</quote> operation.
2348         If the <constant>PAUSE</constant> flag is set,
2349         the <structfield>trigger</structfield> callback below
2350         must handle the corresponding (pause push/release) commands.
2351         The suspend/resume trigger commands can be defined even without
2352         the <constant>RESUME</constant> flag.  See <link
2353         linkend="power-management"><citetitle>
2354         Power Management</citetitle></link> section for details.
2355         </para>
2356
2357         <para>
2358           When the PCM substreams can be synchronized (typically,
2359         synchronized start/stop of a playback and a capture streams),
2360         you can give <constant>SNDRV_PCM_INFO_SYNC_START</constant>,
2361         too.  In this case, you'll need to check the linked-list of
2362         PCM substreams in the trigger callback.  This will be
2363         described in the later section.
2364         </para>
2365         </listitem>
2366
2367         <listitem>
2368         <para>
2369           <structfield>formats</structfield> field contains the bit-flags
2370         of supported formats (<constant>SNDRV_PCM_FMTBIT_XXX</constant>).
2371         If the hardware supports more than one format, give all or'ed
2372         bits.  In the example above, the signed 16bit little-endian
2373         format is specified.
2374         </para>
2375         </listitem>
2376
2377         <listitem>
2378         <para>
2379         <structfield>rates</structfield> field contains the bit-flags of
2380         supported rates (<constant>SNDRV_PCM_RATE_XXX</constant>).
2381         When the chip supports continuous rates, pass
2382         <constant>CONTINUOUS</constant> bit additionally.
2383         The pre-defined rate bits are provided only for typical
2384         rates. If your chip supports unconventional rates, you need to add
2385         the <constant>KNOT</constant> bit and set up the hardware
2386         constraint manually (explained later).
2387         </para>
2388         </listitem>
2389
2390         <listitem>
2391         <para>
2392         <structfield>rate_min</structfield> and
2393         <structfield>rate_max</structfield> define the minimum and
2394         maximum sample rate.  This should correspond somehow to
2395         <structfield>rates</structfield> bits.
2396         </para>
2397         </listitem>
2398
2399         <listitem>
2400         <para>
2401         <structfield>channel_min</structfield> and
2402         <structfield>channel_max</structfield> 
2403         define, as you might already expected, the minimum and maximum
2404         number of channels.
2405         </para>
2406         </listitem>
2407
2408         <listitem>
2409         <para>
2410         <structfield>buffer_bytes_max</structfield> defines the
2411         maximum buffer size in bytes.  There is no
2412         <structfield>buffer_bytes_min</structfield> field, since
2413         it can be calculated from the minimum period size and the
2414         minimum number of periods.
2415         Meanwhile, <structfield>period_bytes_min</structfield> and
2416         define the minimum and maximum size of the period in bytes.
2417         <structfield>periods_max</structfield> and
2418         <structfield>periods_min</structfield> define the maximum and
2419         minimum number of periods in the buffer.
2420         </para>
2421
2422         <para>
2423         The <quote>period</quote> is a term that corresponds to
2424         a fragment in the OSS world. The period defines the size at
2425         which a PCM interrupt is generated. This size strongly
2426         depends on the hardware. 
2427         Generally, the smaller period size will give you more
2428         interrupts, that is, more controls. 
2429         In the case of capture, this size defines the input latency.
2430         On the other hand, the whole buffer size defines the
2431         output latency for the playback direction.
2432         </para>
2433         </listitem>
2434
2435         <listitem>
2436         <para>
2437         There is also a field <structfield>fifo_size</structfield>.
2438         This specifies the size of the hardware FIFO, but currently it
2439         is neither used in the driver nor in the alsa-lib.  So, you
2440         can ignore this field.
2441         </para>
2442         </listitem>
2443         </itemizedlist>
2444         </para>
2445         </section>
2446
2447         <section id="pcm-interface-runtime-config">
2448         <title>PCM Configurations</title>
2449         <para>
2450         Ok, let's go back again to the PCM runtime records.
2451         The most frequently referred records in the runtime instance are
2452         the PCM configurations.
2453         The PCM configurations are stored in the runtime instance
2454         after the application sends <type>hw_params</type> data via
2455         alsa-lib.  There are many fields copied from hw_params and
2456         sw_params structs.  For example,
2457         <structfield>format</structfield> holds the format type
2458         chosen by the application.  This field contains the enum value
2459         <constant>SNDRV_PCM_FORMAT_XXX</constant>.
2460         </para>
2461
2462         <para>
2463         One thing to be noted is that the configured buffer and period
2464         sizes are stored in <quote>frames</quote> in the runtime.
2465         In the ALSA world, 1 frame = channels * samples-size.
2466         For conversion between frames and bytes, you can use the
2467         <function>frames_to_bytes()</function> and
2468           <function>bytes_to_frames()</function> helper functions. 
2469           <informalexample>
2470             <programlisting>
2471 <![CDATA[
2472   period_bytes = frames_to_bytes(runtime, runtime->period_size);
2473 ]]>
2474             </programlisting>
2475           </informalexample>
2476         </para>
2477
2478         <para>
2479         Also, many software parameters (sw_params) are
2480         stored in frames, too.  Please check the type of the field.
2481         <type>snd_pcm_uframes_t</type> is for the frames as unsigned
2482         integer while <type>snd_pcm_sframes_t</type> is for the frames
2483         as signed integer.
2484         </para>
2485         </section>
2486
2487         <section id="pcm-interface-runtime-dma">
2488         <title>DMA Buffer Information</title>
2489         <para>
2490         The DMA buffer is defined by the following four fields,
2491         <structfield>dma_area</structfield>,
2492         <structfield>dma_addr</structfield>,
2493         <structfield>dma_bytes</structfield> and
2494         <structfield>dma_private</structfield>.
2495         The <structfield>dma_area</structfield> holds the buffer
2496         pointer (the logical address).  You can call
2497         <function>memcpy</function> from/to 
2498         this pointer.  Meanwhile, <structfield>dma_addr</structfield>
2499         holds the physical address of the buffer.  This field is
2500         specified only when the buffer is a linear buffer.
2501         <structfield>dma_bytes</structfield> holds the size of buffer
2502         in bytes.  <structfield>dma_private</structfield> is used for
2503         the ALSA DMA allocator.
2504         </para>
2505
2506         <para>
2507         If you use a standard ALSA function,
2508         <function>snd_pcm_lib_malloc_pages()</function>, for
2509         allocating the buffer, these fields are set by the ALSA middle
2510         layer, and you should <emphasis>not</emphasis> change them by
2511         yourself.  You can read them but not write them.
2512         On the other hand, if you want to allocate the buffer by
2513         yourself, you'll need to manage it in hw_params callback.
2514         At least, <structfield>dma_bytes</structfield> is mandatory.
2515         <structfield>dma_area</structfield> is necessary when the
2516         buffer is mmapped.  If your driver doesn't support mmap, this
2517         field is not necessary.  <structfield>dma_addr</structfield>
2518         is also optional.  You can use
2519         <structfield>dma_private</structfield> as you like, too.
2520         </para>
2521         </section>
2522
2523         <section id="pcm-interface-runtime-status">
2524         <title>Running Status</title>
2525         <para>
2526         The running status can be referred via <constant>runtime-&gt;status</constant>.
2527         This is the pointer to the struct <structname>snd_pcm_mmap_status</structname>
2528         record.  For example, you can get the current DMA hardware
2529         pointer via <constant>runtime-&gt;status-&gt;hw_ptr</constant>.
2530         </para>
2531
2532         <para>
2533         The DMA application pointer can be referred via
2534         <constant>runtime-&gt;control</constant>, which points to the
2535         struct <structname>snd_pcm_mmap_control</structname> record.
2536         However, accessing directly to this value is not recommended.
2537         </para>
2538         </section>
2539
2540         <section id="pcm-interface-runtime-private">
2541         <title>Private Data</title> 
2542         <para>
2543         You can allocate a record for the substream and store it in
2544         <constant>runtime-&gt;private_data</constant>.  Usually, this
2545         is done in
2546         <link linkend="pcm-interface-operators-open-callback"><citetitle>
2547         the open callback</citetitle></link>.
2548         Don't mix this with <constant>pcm-&gt;private_data</constant>.
2549         The <constant>pcm-&gt;private_data</constant> usually points to the
2550         chip instance assigned statically at the creation of PCM, while the 
2551         <constant>runtime-&gt;private_data</constant> points to a dynamic
2552         data structure created at the PCM open callback.
2553
2554           <informalexample>
2555             <programlisting>
2556 <![CDATA[
2557   static int snd_xxx_open(struct snd_pcm_substream *substream)
2558   {
2559           struct my_pcm_data *data;
2560           ....
2561           data = kmalloc(sizeof(*data), GFP_KERNEL);
2562           substream->runtime->private_data = data;
2563           ....
2564   }
2565 ]]>
2566             </programlisting>
2567           </informalexample>
2568         </para>
2569
2570         <para>
2571           The allocated object must be released in
2572         <link linkend="pcm-interface-operators-open-callback"><citetitle>
2573         the close callback</citetitle></link>.
2574         </para>
2575         </section>
2576
2577         <section id="pcm-interface-runtime-intr">
2578         <title>Interrupt Callbacks</title>
2579         <para>
2580         The field <structfield>transfer_ack_begin</structfield> and
2581         <structfield>transfer_ack_end</structfield> are called at
2582         the beginning and at the end of
2583         <function>snd_pcm_period_elapsed()</function>, respectively. 
2584         </para>
2585         </section>
2586
2587     </section>
2588
2589     <section id="pcm-interface-operators">
2590       <title>Operators</title>
2591       <para>
2592         OK, now let me give details about each pcm callback
2593       (<parameter>ops</parameter>). In general, every callback must
2594       return 0 if successful, or a negative error number
2595       such as <constant>-EINVAL</constant>. To choose an appropriate
2596       error number, it is advised to check what value other parts of
2597       the kernel return when the same kind of request fails.
2598       </para>
2599
2600       <para>
2601         The callback function takes at least the argument with
2602         <structname>snd_pcm_substream</structname> pointer. To retrieve
2603         the chip record from the given substream instance, you can use the
2604         following macro. 
2605
2606         <informalexample>
2607           <programlisting>
2608 <![CDATA[
2609   int xxx() {
2610           struct mychip *chip = snd_pcm_substream_chip(substream);
2611           ....
2612   }
2613 ]]>
2614           </programlisting>
2615         </informalexample>
2616
2617         The macro reads <constant>substream-&gt;private_data</constant>,
2618         which is a copy of <constant>pcm-&gt;private_data</constant>.
2619         You can override the former if you need to assign different data
2620         records per PCM substream.  For example, the cmi8330 driver assigns
2621         different private_data for playback and capture directions,
2622         because it uses two different codecs (SB- and AD-compatible) for
2623         different directions.
2624       </para>
2625
2626       <section id="pcm-interface-operators-open-callback">
2627         <title>open callback</title>
2628         <para>
2629           <informalexample>
2630             <programlisting>
2631 <![CDATA[
2632   static int snd_xxx_open(struct snd_pcm_substream *substream);
2633 ]]>
2634             </programlisting>
2635           </informalexample>
2636
2637           This is called when a pcm substream is opened.
2638         </para>
2639
2640         <para>
2641           At least, here you have to initialize the runtime-&gt;hw
2642           record. Typically, this is done by like this: 
2643
2644           <informalexample>
2645             <programlisting>
2646 <![CDATA[
2647   static int snd_xxx_open(struct snd_pcm_substream *substream)
2648   {
2649           struct mychip *chip = snd_pcm_substream_chip(substream);
2650           struct snd_pcm_runtime *runtime = substream->runtime;
2651
2652           runtime->hw = snd_mychip_playback_hw;
2653           return 0;
2654   }
2655 ]]>
2656             </programlisting>
2657           </informalexample>
2658
2659           where <parameter>snd_mychip_playback_hw</parameter> is the
2660           pre-defined hardware description.
2661         </para>
2662
2663         <para>
2664         You can allocate a private data in this callback, as described
2665         in <link linkend="pcm-interface-runtime-private"><citetitle>
2666         Private Data</citetitle></link> section.
2667         </para>
2668
2669         <para>
2670         If the hardware configuration needs more constraints, set the
2671         hardware constraints here, too.
2672         See <link linkend="pcm-interface-constraints"><citetitle>
2673         Constraints</citetitle></link> for more details.
2674         </para>
2675       </section>
2676
2677       <section id="pcm-interface-operators-close-callback">
2678         <title>close callback</title>
2679         <para>
2680           <informalexample>
2681             <programlisting>
2682 <![CDATA[
2683   static int snd_xxx_close(struct snd_pcm_substream *substream);
2684 ]]>
2685             </programlisting>
2686           </informalexample>
2687
2688           Obviously, this is called when a pcm substream is closed.
2689         </para>
2690
2691         <para>
2692           Any private instance for a pcm substream allocated in the
2693           open callback will be released here. 
2694
2695           <informalexample>
2696             <programlisting>
2697 <![CDATA[
2698   static int snd_xxx_close(struct snd_pcm_substream *substream)
2699   {
2700           ....
2701           kfree(substream->runtime->private_data);
2702           ....
2703   }
2704 ]]>
2705             </programlisting>
2706           </informalexample>
2707         </para>
2708       </section>
2709
2710       <section id="pcm-interface-operators-ioctl-callback">
2711         <title>ioctl callback</title>
2712         <para>
2713           This is used for any special call to pcm ioctls. But
2714         usually you can pass a generic ioctl callback, 
2715         <function>snd_pcm_lib_ioctl</function>.
2716         </para>
2717       </section>
2718
2719       <section id="pcm-interface-operators-hw-params-callback">
2720         <title>hw_params callback</title>
2721         <para>
2722           <informalexample>
2723             <programlisting>
2724 <![CDATA[
2725   static int snd_xxx_hw_params(struct snd_pcm_substream *substream,
2726                                struct snd_pcm_hw_params *hw_params);
2727 ]]>
2728             </programlisting>
2729           </informalexample>
2730         </para>
2731
2732         <para>
2733           This is called when the hardware parameter
2734         (<structfield>hw_params</structfield>) is set
2735         up by the application, 
2736         that is, once when the buffer size, the period size, the
2737         format, etc. are defined for the pcm substream. 
2738         </para>
2739
2740         <para>
2741           Many hardware setups should be done in this callback,
2742         including the allocation of buffers. 
2743         </para>
2744
2745         <para>
2746           Parameters to be initialized are retrieved by
2747           <function>params_xxx()</function> macros. To allocate
2748           buffer, you can call a helper function, 
2749
2750           <informalexample>
2751             <programlisting>
2752 <![CDATA[
2753   snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
2754 ]]>
2755             </programlisting>
2756           </informalexample>
2757
2758           <function>snd_pcm_lib_malloc_pages()</function> is available
2759           only when the DMA buffers have been pre-allocated.
2760           See the section <link
2761           linkend="buffer-and-memory-buffer-types"><citetitle>
2762           Buffer Types</citetitle></link> for more details.
2763         </para>
2764
2765         <para>
2766           Note that this and <structfield>prepare</structfield> callbacks
2767         may be called multiple times per initialization.
2768         For example, the OSS emulation may
2769         call these callbacks at each change via its ioctl. 
2770         </para>
2771
2772         <para>
2773           Thus, you need to be careful not to allocate the same buffers
2774         many times, which will lead to memory leaks!  Calling the
2775         helper function above many times is OK. It will release the
2776         previous buffer automatically when it was already allocated. 
2777         </para>
2778
2779         <para>
2780           Another note is that this callback is non-atomic
2781         (schedulable). This is important, because the
2782         <structfield>trigger</structfield> callback 
2783         is atomic (non-schedulable). That is, mutexes or any
2784         schedule-related functions are not available in
2785         <structfield>trigger</structfield> callback.
2786         Please see the subsection
2787         <link linkend="pcm-interface-atomicity"><citetitle>
2788         Atomicity</citetitle></link> for details.
2789         </para>
2790       </section>
2791
2792       <section id="pcm-interface-operators-hw-free-callback">
2793         <title>hw_free callback</title>
2794         <para>
2795           <informalexample>
2796             <programlisting>
2797 <![CDATA[
2798   static int snd_xxx_hw_free(struct snd_pcm_substream *substream);
2799 ]]>
2800             </programlisting>
2801           </informalexample>
2802         </para>
2803
2804         <para>
2805           This is called to release the resources allocated via
2806           <structfield>hw_params</structfield>. For example, releasing the
2807           buffer via 
2808           <function>snd_pcm_lib_malloc_pages()</function> is done by
2809           calling the following: 
2810
2811           <informalexample>
2812             <programlisting>
2813 <![CDATA[
2814   snd_pcm_lib_free_pages(substream);
2815 ]]>
2816             </programlisting>
2817           </informalexample>
2818         </para>
2819
2820         <para>
2821           This function is always called before the close callback is called.
2822           Also, the callback may be called multiple times, too.
2823           Keep track whether the resource was already released. 
2824         </para>
2825       </section>
2826
2827       <section id="pcm-interface-operators-prepare-callback">
2828        <title>prepare callback</title>
2829         <para>
2830           <informalexample>
2831             <programlisting>
2832 <![CDATA[
2833   static int snd_xxx_prepare(struct snd_pcm_substream *substream);
2834 ]]>
2835             </programlisting>
2836           </informalexample>
2837         </para>
2838
2839         <para>
2840           This callback is called when the pcm is
2841         <quote>prepared</quote>. You can set the format type, sample
2842         rate, etc. here. The difference from
2843         <structfield>hw_params</structfield> is that the 
2844         <structfield>prepare</structfield> callback will be called each
2845         time 
2846         <function>snd_pcm_prepare()</function> is called, i.e. when
2847         recovering after underruns, etc. 
2848         </para>
2849
2850         <para>
2851         Note that this callback is now non-atomic.
2852         You can use schedule-related functions safely in this callback.
2853         </para>
2854
2855         <para>
2856           In this and the following callbacks, you can refer to the
2857         values via the runtime record,
2858         substream-&gt;runtime.
2859         For example, to get the current
2860         rate, format or channels, access to
2861         runtime-&gt;rate,
2862         runtime-&gt;format or
2863         runtime-&gt;channels, respectively. 
2864         The physical address of the allocated buffer is set to
2865         runtime-&gt;dma_area.  The buffer and period sizes are
2866         in runtime-&gt;buffer_size and runtime-&gt;period_size,
2867         respectively.
2868         </para>
2869
2870         <para>
2871           Be careful that this callback will be called many times at
2872         each setup, too. 
2873         </para>
2874       </section>
2875
2876       <section id="pcm-interface-operators-trigger-callback">
2877         <title>trigger callback</title>
2878         <para>
2879           <informalexample>
2880             <programlisting>
2881 <![CDATA[
2882   static int snd_xxx_trigger(struct snd_pcm_substream *substream, int cmd);
2883 ]]>
2884             </programlisting>
2885           </informalexample>
2886
2887           This is called when the pcm is started, stopped or paused.
2888         </para>
2889
2890         <para>
2891           Which action is specified in the second argument,
2892           <constant>SNDRV_PCM_TRIGGER_XXX</constant> in
2893           <filename>&lt;sound/pcm.h&gt;</filename>. At least,
2894           the <constant>START</constant> and <constant>STOP</constant>
2895           commands must be defined in this callback. 
2896
2897           <informalexample>
2898             <programlisting>
2899 <![CDATA[
2900   switch (cmd) {
2901   case SNDRV_PCM_TRIGGER_START:
2902           /* do something to start the PCM engine */
2903           break;
2904   case SNDRV_PCM_TRIGGER_STOP:
2905           /* do something to stop the PCM engine */
2906           break;
2907   default:
2908           return -EINVAL;
2909   }
2910 ]]>
2911             </programlisting>
2912           </informalexample>
2913         </para>
2914
2915         <para>
2916           When the pcm supports the pause operation (given in the info
2917         field of the hardware table), the <constant>PAUSE_PUSE</constant>
2918         and <constant>PAUSE_RELEASE</constant> commands must be
2919         handled here, too. The former is the command to pause the pcm,
2920         and the latter to restart the pcm again. 
2921         </para>
2922
2923         <para>
2924           When the pcm supports the suspend/resume operation,
2925         regardless of full or partial suspend/resume support,
2926         the <constant>SUSPEND</constant> and <constant>RESUME</constant>
2927         commands must be handled, too.
2928         These commands are issued when the power-management status is
2929         changed.  Obviously, the <constant>SUSPEND</constant> and
2930         <constant>RESUME</constant> commands
2931         suspend and resume the pcm substream, and usually, they
2932         are identical to the <constant>STOP</constant> and
2933         <constant>START</constant> commands, respectively.
2934           See the <link linkend="power-management"><citetitle>
2935         Power Management</citetitle></link> section for details.
2936         </para>
2937
2938         <para>
2939           As mentioned, this callback is atomic.  You cannot call
2940           functions which may sleep.
2941           The trigger callback should be as minimal as possible,
2942           just really triggering the DMA.  The other stuff should be
2943           initialized hw_params and prepare callbacks properly
2944           beforehand.
2945         </para>
2946       </section>
2947
2948       <section id="pcm-interface-operators-pointer-callback">
2949         <title>pointer callback</title>
2950         <para>
2951           <informalexample>
2952             <programlisting>
2953 <![CDATA[
2954   static snd_pcm_uframes_t snd_xxx_pointer(struct snd_pcm_substream *substream)
2955 ]]>
2956             </programlisting>
2957           </informalexample>
2958
2959           This callback is called when the PCM middle layer inquires
2960         the current hardware position on the buffer. The position must
2961         be returned in frames,
2962         ranging from 0 to buffer_size - 1.
2963         </para>
2964
2965         <para>
2966           This is called usually from the buffer-update routine in the
2967         pcm middle layer, which is invoked when
2968         <function>snd_pcm_period_elapsed()</function> is called in the
2969         interrupt routine. Then the pcm middle layer updates the
2970         position and calculates the available space, and wakes up the
2971         sleeping poll threads, etc. 
2972         </para>
2973
2974         <para>
2975           This callback is also atomic.
2976         </para>
2977       </section>
2978
2979       <section id="pcm-interface-operators-copy-silence">
2980         <title>copy and silence callbacks</title>
2981         <para>
2982           These callbacks are not mandatory, and can be omitted in
2983         most cases. These callbacks are used when the hardware buffer
2984         cannot be in the normal memory space. Some chips have their
2985         own buffer on the hardware which is not mappable. In such a
2986         case, you have to transfer the data manually from the memory
2987         buffer to the hardware buffer. Or, if the buffer is
2988         non-contiguous on both physical and virtual memory spaces,
2989         these callbacks must be defined, too. 
2990         </para>
2991
2992         <para>
2993           If these two callbacks are defined, copy and set-silence
2994         operations are done by them. The detailed will be described in
2995         the later section <link
2996         linkend="buffer-and-memory"><citetitle>Buffer and Memory
2997         Management</citetitle></link>. 
2998         </para>
2999       </section>
3000
3001       <section id="pcm-interface-operators-ack">
3002         <title>ack callback</title>
3003         <para>
3004           This callback is also not mandatory. This callback is called
3005         when the appl_ptr is updated in read or write operations.
3006         Some drivers like emu10k1-fx and cs46xx need to track the
3007         current appl_ptr for the internal buffer, and this callback
3008         is useful only for such a purpose.
3009         </para>
3010         <para>
3011           This callback is atomic.
3012         </para>
3013       </section>
3014
3015       <section id="pcm-interface-operators-page-callback">
3016         <title>page callback</title>
3017
3018         <para>
3019           This callback is optional too. This callback is used
3020         mainly for non-contiguous buffers. The mmap calls this
3021         callback to get the page address. Some examples will be
3022         explained in the later section <link
3023         linkend="buffer-and-memory"><citetitle>Buffer and Memory
3024         Management</citetitle></link>, too. 
3025         </para>
3026       </section>
3027     </section>
3028
3029     <section id="pcm-interface-interrupt-handler">
3030       <title>Interrupt Handler</title>
3031       <para>
3032         The rest of pcm stuff is the PCM interrupt handler. The
3033       role of PCM interrupt handler in the sound driver is to update
3034       the buffer position and to tell the PCM middle layer when the
3035       buffer position goes across the prescribed period size. To
3036       inform this, call the <function>snd_pcm_period_elapsed()</function>
3037       function. 
3038       </para>
3039
3040       <para>
3041         There are several types of sound chips to generate the interrupts.
3042       </para>
3043
3044       <section id="pcm-interface-interrupt-handler-boundary">
3045         <title>Interrupts at the period (fragment) boundary</title>
3046         <para>
3047           This is the most frequently found type:  the hardware
3048         generates an interrupt at each period boundary.
3049         In this case, you can call
3050         <function>snd_pcm_period_elapsed()</function> at each 
3051         interrupt. 
3052         </para>
3053
3054         <para>
3055           <function>snd_pcm_period_elapsed()</function> takes the
3056         substream pointer as its argument. Thus, you need to keep the
3057         substream pointer accessible from the chip instance. For
3058         example, define substream field in the chip record to hold the
3059         current running substream pointer, and set the pointer value
3060         at open callback (and reset at close callback). 
3061         </para>
3062
3063         <para>
3064           If you acquire a spinlock in the interrupt handler, and the
3065         lock is used in other pcm callbacks, too, then you have to
3066         release the lock before calling
3067         <function>snd_pcm_period_elapsed()</function>, because
3068         <function>snd_pcm_period_elapsed()</function> calls other pcm
3069         callbacks inside. 
3070         </para>
3071
3072         <para>
3073           Typical code would be like:
3074
3075           <example>
3076             <title>Interrupt Handler Case #1</title>
3077             <programlisting>
3078 <![CDATA[
3079   static irqreturn_t snd_mychip_interrupt(int irq, void *dev_id)
3080   {
3081           struct mychip *chip = dev_id;
3082           spin_lock(&chip->lock);
3083           ....
3084           if (pcm_irq_invoked(chip)) {
3085                   /* call updater, unlock before it */
3086                   spin_unlock(&chip->lock);
3087                   snd_pcm_period_elapsed(chip->substream);
3088                   spin_lock(&chip->lock);
3089                   /* acknowledge the interrupt if necessary */
3090           }
3091           ....
3092           spin_unlock(&chip->lock);
3093           return IRQ_HANDLED;
3094   }
3095 ]]>
3096             </programlisting>
3097           </example>
3098         </para>
3099       </section>
3100
3101       <section id="pcm-interface-interrupt-handler-timer">
3102         <title>High frequency timer interrupts</title>
3103         <para>
3104         This happense when the hardware doesn't generate interrupts
3105         at the period boundary but issues timer interrupts at a fixed
3106         timer rate (e.g. es1968 or ymfpci drivers). 
3107         In this case, you need to check the current hardware
3108         position and accumulate the processed sample length at each
3109         interrupt.  When the accumulated size exceeds the period
3110         size, call 
3111         <function>snd_pcm_period_elapsed()</function> and reset the
3112         accumulator. 
3113         </para>
3114
3115         <para>
3116           Typical code would be like the following.
3117
3118           <example>
3119             <title>Interrupt Handler Case #2</title>
3120             <programlisting>
3121 <![CDATA[
3122   static irqreturn_t snd_mychip_interrupt(int irq, void *dev_id)
3123   {
3124           struct mychip *chip = dev_id;
3125           spin_lock(&chip->lock);
3126           ....
3127           if (pcm_irq_invoked(chip)) {
3128                   unsigned int last_ptr, size;
3129                   /* get the current hardware pointer (in frames) */
3130                   last_ptr = get_hw_ptr(chip);
3131                   /* calculate the processed frames since the
3132                    * last update
3133                    */
3134                   if (last_ptr < chip->last_ptr)
3135                           size = runtime->buffer_size + last_ptr 
3136                                    - chip->last_ptr; 
3137                   else
3138                           size = last_ptr - chip->last_ptr;
3139                   /* remember the last updated point */
3140                   chip->last_ptr = last_ptr;
3141                   /* accumulate the size */
3142                   chip->size += size;
3143                   /* over the period boundary? */
3144                   if (chip->size >= runtime->period_size) {
3145                           /* reset the accumulator */
3146                           chip->size %= runtime->period_size;
3147                           /* call updater */
3148                           spin_unlock(&chip->lock);
3149                           snd_pcm_period_elapsed(substream);
3150                           spin_lock(&chip->lock);
3151                   }
3152                   /* acknowledge the interrupt if necessary */
3153           }
3154           ....
3155           spin_unlock(&chip->lock);
3156           return IRQ_HANDLED;
3157   }
3158 ]]>
3159             </programlisting>
3160           </example>
3161         </para>
3162       </section>
3163
3164       <section id="pcm-interface-interrupt-handler-both">
3165         <title>On calling <function>snd_pcm_period_elapsed()</function></title>
3166         <para>
3167           In both cases, even if more than one period are elapsed, you
3168         don't have to call
3169         <function>snd_pcm_period_elapsed()</function> many times. Call
3170         only once. And the pcm layer will check the current hardware
3171         pointer and update to the latest status. 
3172         </para>
3173       </section>
3174     </section>
3175
3176     <section id="pcm-interface-atomicity">
3177       <title>Atomicity</title>
3178       <para>
3179       One of the most important (and thus difficult to debug) problems
3180       in kernel programming are race conditions.
3181       In the Linux kernel, they are usually avoided via spin-locks, mutexes
3182       or semaphores.  In general, if a race condition can happen
3183       in an interrupt handler, it has to be managed atomically, and you
3184       have to use a spinlock to protect the critical session. If the
3185       critical section is not in interrupt handler code and
3186       if taking a relatively long time to execute is acceptable, you
3187       should use mutexes or semaphores instead.
3188       </para>
3189
3190       <para>
3191       As already seen, some pcm callbacks are atomic and some are
3192       not.  For example, the <parameter>hw_params</parameter> callback is
3193       non-atomic, while <parameter>trigger</parameter> callback is
3194       atomic.  This means, the latter is called already in a spinlock
3195       held by the PCM middle layer. Please take this atomicity into
3196       account when you choose a locking scheme in the callbacks.
3197       </para>
3198
3199       <para>
3200       In the atomic callbacks, you cannot use functions which may call
3201       <function>schedule</function> or go to
3202       <function>sleep</function>.  Semaphores and mutexes can sleep,
3203       and hence they cannot be used inside the atomic callbacks
3204       (e.g. <parameter>trigger</parameter> callback).
3205       To implement some delay in such a callback, please use
3206       <function>udelay()</function> or <function>mdelay()</function>.
3207       </para>
3208
3209       <para>
3210       All three atomic callbacks (trigger, pointer, and ack) are
3211       called with local interrupts disabled.
3212       </para>
3213
3214     </section>
3215     <section id="pcm-interface-constraints">
3216       <title>Constraints</title>
3217       <para>
3218         If your chip supports unconventional sample rates, or only the
3219       limited samples, you need to set a constraint for the
3220       condition. 
3221       </para>
3222
3223       <para>
3224         For example, in order to restrict the sample rates in the some
3225         supported values, use
3226         <function>snd_pcm_hw_constraint_list()</function>.
3227         You need to call this function in the open callback.
3228
3229         <example>
3230           <title>Example of Hardware Constraints</title>
3231           <programlisting>
3232 <![CDATA[
3233   static unsigned int rates[] =
3234           {4000, 10000, 22050, 44100};
3235   static struct snd_pcm_hw_constraint_list constraints_rates = {
3236           .count = ARRAY_SIZE(rates),
3237           .list = rates,
3238           .mask = 0,
3239   };
3240
3241   static int snd_mychip_pcm_open(struct snd_pcm_substream *substream)
3242   {
3243           int err;
3244           ....
3245           err = snd_pcm_hw_constraint_list(substream->runtime, 0,
3246                                            SNDRV_PCM_HW_PARAM_RATE,
3247                                            &constraints_rates);
3248           if (err < 0)
3249                   return err;
3250           ....
3251   }
3252 ]]>
3253           </programlisting>
3254         </example>
3255       </para>
3256
3257       <para>
3258         There are many different constraints.
3259         Look at <filename>sound/pcm.h</filename> for a complete list.
3260         You can even define your own constraint rules.
3261         For example, let's suppose my_chip can manage a substream of 1 channel
3262         if and only if the format is S16_LE, otherwise it supports any format
3263         specified in the <structname>snd_pcm_hardware</structname> structure (or in any
3264         other constraint_list). You can build a rule like this:
3265
3266         <example>
3267           <title>Example of Hardware Constraints for Channels</title>
3268           <programlisting>
3269 <![CDATA[
3270   static int hw_rule_format_by_channels(struct snd_pcm_hw_params *params,
3271                                         struct snd_pcm_hw_rule *rule)
3272   {
3273           struct snd_interval *c = hw_param_interval(params,
3274                 SNDRV_PCM_HW_PARAM_CHANNELS);
3275           struct snd_mask *f = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
3276           struct snd_mask fmt;
3277
3278           snd_mask_any(&fmt);    /* Init the struct */
3279           if (c->min < 2) {
3280                   fmt.bits[0] &= SNDRV_PCM_FMTBIT_S16_LE;
3281                   return snd_mask_refine(f, &fmt);
3282           }
3283           return 0;
3284   }
3285 ]]>
3286           </programlisting>
3287         </example>
3288       </para>
3289  
3290       <para>
3291         Then you need to call this function to add your rule:
3292
3293        <informalexample>
3294          <programlisting>
3295 <![CDATA[
3296   snd_pcm_hw_rule_add(substream->runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
3297                       hw_rule_channels_by_format, 0, SNDRV_PCM_HW_PARAM_FORMAT,
3298                       -1);
3299 ]]>
3300           </programlisting>
3301         </informalexample>
3302       </para>
3303
3304       <para>
3305         The rule function is called when an application sets the number of
3306         channels. But an application can set the format before the number of
3307         channels. Thus you also need to define the inverse rule:
3308
3309        <example>
3310          <title>Example of Hardware Constraints for Channels</title>
3311          <programlisting>
3312 <![CDATA[
3313   static int hw_rule_channels_by_format(struct snd_pcm_hw_params *params,
3314                                         struct snd_pcm_hw_rule *rule)
3315   {
3316           struct snd_interval *c = hw_param_interval(params,
3317                         SNDRV_PCM_HW_PARAM_CHANNELS);
3318           struct snd_mask *f = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
3319           struct snd_interval ch;
3320
3321           snd_interval_any(&ch);
3322           if (f->bits[0] == SNDRV_PCM_FMTBIT_S16_LE) {
3323                   ch.min = ch.max = 1;
3324                   ch.integer = 1;
3325                   return snd_interval_refine(c, &ch);
3326           }
3327           return 0;
3328   }
3329 ]]>
3330           </programlisting>
3331         </example>
3332       </para>
3333
3334       <para>
3335       ...and in the open callback:
3336        <informalexample>
3337          <programlisting>
3338 <![CDATA[
3339   snd_pcm_hw_rule_add(substream->runtime, 0, SNDRV_PCM_HW_PARAM_FORMAT,
3340                       hw_rule_format_by_channels, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
3341                       -1);
3342 ]]>
3343           </programlisting>
3344         </informalexample>
3345       </para>
3346
3347       <para>
3348         I won't give more details here, rather I
3349         would like to say, <quote>Luke, use the source.</quote>
3350       </para>
3351     </section>
3352
3353   </chapter>
3354
3355
3356 <!-- ****************************************************** -->
3357 <!-- Control Interface  -->
3358 <!-- ****************************************************** -->
3359   <chapter id="control-interface">
3360     <title>Control Interface</title>
3361
3362     <section id="control-interface-general">
3363       <title>General</title>
3364       <para>
3365         The control interface is used widely for many switches,
3366       sliders, etc. which are accessed from user-space. Its most
3367       important use is the mixer interface. In other words, since ALSA
3368       0.9.x, all the mixer stuff is implemented on the control kernel API.
3369       </para>
3370
3371       <para>
3372         ALSA has a well-defined AC97 control module. If your chip
3373       supports only the AC97 and nothing else, you can skip this
3374       section. 
3375       </para>
3376
3377       <para>
3378         The control API is defined in
3379       <filename>&lt;sound/control.h&gt;</filename>.
3380       Include this file if you want to add your own controls.
3381       </para>
3382     </section>
3383
3384     <section id="control-interface-definition">
3385       <title>Definition of Controls</title>
3386       <para>
3387         To create a new control, you need to define the
3388         following three
3389       callbacks: <structfield>info</structfield>,
3390       <structfield>get</structfield> and
3391       <structfield>put</structfield>. Then, define a
3392       struct <structname>snd_kcontrol_new</structname> record, such as: 
3393
3394         <example>
3395           <title>Definition of a Control</title>
3396           <programlisting>
3397 <![CDATA[
3398   static struct snd_kcontrol_new my_control __devinitdata = {
3399           .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3400           .name = "PCM Playback Switch",
3401           .index = 0,
3402           .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3403           .private_value = 0xffff,
3404           .info = my_control_info,
3405           .get = my_control_get,
3406           .put = my_control_put
3407   };
3408 ]]>
3409           </programlisting>
3410         </example>
3411       </para>
3412
3413       <para>
3414         Most likely the control is created via
3415       <function>snd_ctl_new1()</function>, and in such a case, you can
3416       add the <parameter>__devinitdata</parameter> prefix to the
3417       definition as above. 
3418       </para>
3419
3420       <para>
3421         The <structfield>iface</structfield> field specifies the control
3422       type, <constant>SNDRV_CTL_ELEM_IFACE_XXX</constant>, which
3423       is usually <constant>MIXER</constant>.
3424       Use <constant>CARD</constant> for global controls that are not
3425       logically part of the mixer.
3426       If the control is closely associated with some specific device on
3427       the sound card, use <constant>HWDEP</constant>,
3428       <constant>PCM</constant>, <constant>RAWMIDI</constant>,
3429       <constant>TIMER</constant>, or <constant>SEQUENCER</constant>, and
3430       specify the device number with the
3431       <structfield>device</structfield> and
3432       <structfield>subdevice</structfield> fields.
3433       </para>
3434
3435       <para>
3436         The <structfield>name</structfield> is the name identifier
3437       string. Since ALSA 0.9.x, the control name is very important,
3438       because its role is classified from its name. There are
3439       pre-defined standard control names. The details are described in
3440       the <link linkend="control-interface-control-names"><citetitle>
3441       Control Names</citetitle></link> subsection.
3442       </para>
3443
3444       <para>
3445         The <structfield>index</structfield> field holds the index number
3446       of this control. If there are several different controls with
3447       the same name, they can be distinguished by the index
3448       number. This is the case when 
3449       several codecs exist on the card. If the index is zero, you can
3450       omit the definition above. 
3451       </para>
3452
3453       <para>
3454         The <structfield>access</structfield> field contains the access
3455       type of this control. Give the combination of bit masks,
3456       <constant>SNDRV_CTL_ELEM_ACCESS_XXX</constant>, there.
3457       The details will be explained in
3458       the <link linkend="control-interface-access-flags"><citetitle>
3459       Access Flags</citetitle></link> subsection.
3460       </para>
3461
3462       <para>
3463         The <structfield>private_value</structfield> field contains
3464       an arbitrary long integer value for this record. When using
3465       the generic <structfield>info</structfield>,
3466       <structfield>get</structfield> and
3467       <structfield>put</structfield> callbacks, you can pass a value 
3468       through this field. If several small numbers are necessary, you can
3469       combine them in bitwise. Or, it's possible to give a pointer
3470       (casted to unsigned long) of some record to this field, too. 
3471       </para>
3472
3473       <para>
3474       The <structfield>tlv</structfield> field can be used to provide
3475       metadata about the control; see the
3476       <link linkend="control-interface-tlv">
3477       <citetitle>Metadata</citetitle></link> subsection.
3478       </para>
3479
3480       <para>
3481         The other three are
3482         <link linkend="control-interface-callbacks"><citetitle>
3483         callback functions</citetitle></link>.
3484       </para>
3485     </section>
3486
3487     <section id="control-interface-control-names">
3488       <title>Control Names</title>
3489       <para>
3490         There are some standards to define the control names. A
3491       control is usually defined from the three parts as
3492       <quote>SOURCE DIRECTION FUNCTION</quote>. 
3493       </para>
3494
3495       <para>
3496         The first, <constant>SOURCE</constant>, specifies the source
3497       of the control, and is a string such as <quote>Master</quote>,
3498       <quote>PCM</quote>, <quote>CD</quote> and
3499       <quote>Line</quote>. There are many pre-defined sources. 
3500       </para>
3501
3502       <para>
3503         The second, <constant>DIRECTION</constant>, is one of the
3504       following strings according to the direction of the control:
3505       <quote>Playback</quote>, <quote>Capture</quote>, <quote>Bypass
3506       Playback</quote> and <quote>Bypass Capture</quote>. Or, it can
3507       be omitted, meaning both playback and capture directions. 
3508       </para>
3509
3510       <para>
3511         The third, <constant>FUNCTION</constant>, is one of the
3512       following strings according to the function of the control:
3513       <quote>Switch</quote>, <quote>Volume</quote> and
3514       <quote>Route</quote>. 
3515       </para>
3516
3517       <para>
3518         The example of control names are, thus, <quote>Master Capture
3519       Switch</quote> or <quote>PCM Playback Volume</quote>. 
3520       </para>
3521
3522       <para>
3523         There are some exceptions:
3524       </para>
3525
3526       <section id="control-interface-control-names-global">
3527         <title>Global capture and playback</title>
3528         <para>
3529           <quote>Capture Source</quote>, <quote>Capture Switch</quote>
3530         and <quote>Capture Volume</quote> are used for the global
3531         capture (input) source, switch and volume. Similarly,
3532         <quote>Playback Switch</quote> and <quote>Playback
3533         Volume</quote> are used for the global output gain switch and
3534         volume. 
3535         </para>
3536       </section>
3537
3538       <section id="control-interface-control-names-tone">
3539         <title>Tone-controls</title>
3540         <para>
3541           tone-control switch and volumes are specified like
3542         <quote>Tone Control - XXX</quote>, e.g. <quote>Tone Control -
3543         Switch</quote>, <quote>Tone Control - Bass</quote>,
3544         <quote>Tone Control - Center</quote>.  
3545         </para>
3546       </section>
3547
3548       <section id="control-interface-control-names-3d">
3549         <title>3D controls</title>
3550         <para>
3551           3D-control switches and volumes are specified like <quote>3D
3552         Control - XXX</quote>, e.g. <quote>3D Control -
3553         Switch</quote>, <quote>3D Control - Center</quote>, <quote>3D
3554         Control - Space</quote>. 
3555         </para>
3556       </section>
3557
3558       <section id="control-interface-control-names-mic">
3559         <title>Mic boost</title>
3560         <para>
3561           Mic-boost switch is set as <quote>Mic Boost</quote> or
3562         <quote>Mic Boost (6dB)</quote>. 
3563         </para>
3564
3565         <para>
3566           More precise information can be found in
3567         <filename>Documentation/sound/alsa/ControlNames.txt</filename>.
3568         </para>
3569       </section>
3570     </section>
3571
3572     <section id="control-interface-access-flags">
3573       <title>Access Flags</title>
3574
3575       <para>
3576       The access flag is the bitmask which specifies the access type
3577       of the given control.  The default access type is
3578       <constant>SNDRV_CTL_ELEM_ACCESS_READWRITE</constant>, 
3579       which means both read and write are allowed to this control.
3580       When the access flag is omitted (i.e. = 0), it is
3581       considered as <constant>READWRITE</constant> access as default. 
3582       </para>
3583
3584       <para>
3585       When the control is read-only, pass
3586       <constant>SNDRV_CTL_ELEM_ACCESS_READ</constant> instead.
3587       In this case, you don't have to define
3588       the <structfield>put</structfield> callback.
3589       Similarly, when the control is write-only (although it's a rare
3590       case), you can use the <constant>WRITE</constant> flag instead, and
3591       you don't need the <structfield>get</structfield> callback.
3592       </para>
3593
3594       <para>
3595       If the control value changes frequently (e.g. the VU meter),
3596       <constant>VOLATILE</constant> flag should be given.  This means
3597       that the control may be changed without
3598       <link linkend="control-interface-change-notification"><citetitle>
3599       notification</citetitle></link>. Applications should poll such
3600       a control constantly.
3601       </para>
3602
3603       <para>
3604       When the control is inactive, set
3605       the <constant>INACTIVE</constant> flag, too.
3606       There are <constant>LOCK</constant> and
3607       <constant>OWNER</constant> flags to change the write
3608       permissions.
3609       </para>
3610
3611     </section>
3612
3613     <section id="control-interface-callbacks">
3614       <title>Callbacks</title>
3615
3616       <section id="control-interface-callbacks-info">
3617         <title>info callback</title>
3618         <para>
3619           The <structfield>info</structfield> callback is used to get
3620         detailed information on this control. This must store the
3621         values of the given struct <structname>snd_ctl_elem_info</structname>
3622         object. For example, for a boolean control with a single
3623         element: 
3624
3625           <example>
3626             <title>Example of info callback</title>
3627             <programlisting>
3628 <![CDATA[
3629   static int snd_myctl_mono_info(struct snd_kcontrol *kcontrol,
3630                           struct snd_ctl_elem_info *uinfo)
3631   {
3632           uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
3633           uinfo->count = 1;
3634           uinfo->value.integer.min = 0;
3635           uinfo->value.integer.max = 1;
3636           return 0;
3637   }
3638 ]]>
3639             </programlisting>
3640           </example>
3641         </para>
3642
3643         <para>
3644           The <structfield>type</structfield> field specifies the type
3645         of the control. There are <constant>BOOLEAN</constant>,
3646         <constant>INTEGER</constant>, <constant>ENUMERATED</constant>,
3647         <constant>BYTES</constant>, <constant>IEC958</constant> and
3648         <constant>INTEGER64</constant>. The
3649         <structfield>count</structfield> field specifies the 
3650         number of elements in this control. For example, a stereo
3651         volume would have count = 2. The
3652         <structfield>value</structfield> field is a union, and 
3653         the values stored are depending on the type. The boolean and
3654         integer types are identical. 
3655         </para>
3656
3657         <para>
3658           The enumerated type is a bit different from others.  You'll
3659           need to set the string for the currently given item index. 
3660
3661           <informalexample>
3662             <programlisting>
3663 <![CDATA[
3664   static int snd_myctl_enum_info(struct snd_kcontrol *kcontrol,
3665                           struct snd_ctl_elem_info *uinfo)
3666   {
3667           static char *texts[4] = {
3668                   "First", "Second", "Third", "Fourth"
3669           };
3670           uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3671           uinfo->count = 1;
3672           uinfo->value.enumerated.items = 4;
3673           if (uinfo->value.enumerated.item > 3)
3674                   uinfo->value.enumerated.item = 3;
3675           strcpy(uinfo->value.enumerated.name,
3676                  texts[uinfo->value.enumerated.item]);
3677           return 0;
3678   }
3679 ]]>
3680             </programlisting>
3681           </informalexample>
3682         </para>
3683
3684         <para>
3685           Some common info callbacks are available for your convenience:
3686         <function>snd_ctl_boolean_mono_info()</function> and
3687         <function>snd_ctl_boolean_stereo_info()</function>.
3688         Obviously, the former is an info callback for a mono channel
3689         boolean item, just like <function>snd_myctl_mono_info</function>
3690         above, and the latter is for a stereo channel boolean item.
3691         </para>
3692
3693       </section>
3694
3695       <section id="control-interface-callbacks-get">
3696         <title>get callback</title>
3697
3698         <para>
3699           This callback is used to read the current value of the
3700         control and to return to user-space. 
3701         </para>
3702
3703         <para>
3704           For example,
3705
3706           <example>
3707             <title>Example of get callback</title>
3708             <programlisting>
3709 <![CDATA[
3710   static int snd_myctl_get(struct snd_kcontrol *kcontrol,
3711                            struct snd_ctl_elem_value *ucontrol)
3712   {
3713           struct mychip *chip = snd_kcontrol_chip(kcontrol);
3714           ucontrol->value.integer.value[0] = get_some_value(chip);
3715           return 0;
3716   }
3717 ]]>
3718             </programlisting>
3719           </example>
3720         </para>
3721
3722         <para>
3723         The <structfield>value</structfield> field depends on 
3724         the type of control as well as on the info callback.  For example,
3725         the sb driver uses this field to store the register offset,
3726         the bit-shift and the bit-mask.  The
3727         <structfield>private_value</structfield> field is set as follows:
3728           <informalexample>
3729             <programlisting>
3730 <![CDATA[
3731   .private_value = reg | (shift << 16) | (mask << 24)
3732 ]]>
3733             </programlisting>
3734           </informalexample>
3735         and is retrieved in callbacks like
3736           <informalexample>
3737             <programlisting>
3738 <![CDATA[
3739   static int snd_sbmixer_get_single(struct snd_kcontrol *kcontrol,
3740                                     struct snd_ctl_elem_value *ucontrol)
3741   {
3742           int reg = kcontrol->private_value & 0xff;
3743           int shift = (kcontrol->private_value >> 16) & 0xff;
3744           int mask = (kcontrol->private_value >> 24) & 0xff;
3745           ....
3746   }
3747 ]]>
3748             </programlisting>
3749           </informalexample>
3750         </para>
3751
3752         <para>
3753         In the <structfield>get</structfield> callback,
3754         you have to fill all the elements if the
3755         control has more than one elements,
3756         i.e. <structfield>count</structfield> &gt; 1.
3757         In the example above, we filled only one element
3758         (<structfield>value.integer.value[0]</structfield>) since it's
3759         assumed as <structfield>count</structfield> = 1.
3760         </para>
3761       </section>
3762
3763       <section id="control-interface-callbacks-put">
3764         <title>put callback</title>
3765
3766         <para>
3767           This callback is used to write a value from user-space.
3768         </para>
3769
3770         <para>
3771           For example,
3772
3773           <example>
3774             <title>Example of put callback</title>
3775             <programlisting>
3776 <![CDATA[
3777   static int snd_myctl_put(struct snd_kcontrol *kcontrol,
3778                            struct snd_ctl_elem_value *ucontrol)
3779   {
3780           struct mychip *chip = snd_kcontrol_chip(kcontrol);
3781           int changed = 0;
3782           if (chip->current_value !=
3783                ucontrol->value.integer.value[0]) {
3784                   change_current_value(chip,
3785                               ucontrol->value.integer.value[0]);
3786                   changed = 1;
3787           }
3788           return changed;
3789   }
3790 ]]>
3791             </programlisting>
3792           </example>
3793
3794           As seen above, you have to return 1 if the value is
3795         changed. If the value is not changed, return 0 instead. 
3796         If any fatal error happens, return a negative error code as
3797         usual.
3798         </para>
3799
3800         <para>
3801         As in the <structfield>get</structfield> callback,
3802         when the control has more than one elements,
3803         all elements must be evaluated in this callback, too.
3804         </para>
3805       </section>
3806
3807       <section id="control-interface-callbacks-all">
3808         <title>Callbacks are not atomic</title>
3809         <para>
3810           All these three callbacks are basically not atomic.
3811         </para>
3812       </section>
3813     </section>
3814
3815     <section id="control-interface-constructor">
3816       <title>Constructor</title>
3817       <para>
3818         When everything is ready, finally we can create a new
3819       control. To create a control, there are two functions to be
3820       called, <function>snd_ctl_new1()</function> and
3821       <function>snd_ctl_add()</function>. 
3822       </para>
3823
3824       <para>
3825         In the simplest way, you can do like this:
3826
3827         <informalexample>
3828           <programlisting>
3829 <![CDATA[
3830   err = snd_ctl_add(card, snd_ctl_new1(&my_control, chip));
3831   if (err < 0)
3832           return err;
3833 ]]>
3834           </programlisting>
3835         </informalexample>
3836
3837         where <parameter>my_control</parameter> is the
3838       struct <structname>snd_kcontrol_new</structname> object defined above, and chip
3839       is the object pointer to be passed to
3840       kcontrol-&gt;private_data 
3841       which can be referred to in callbacks. 
3842       </para>
3843
3844       <para>
3845         <function>snd_ctl_new1()</function> allocates a new
3846       <structname>snd_kcontrol</structname> instance (that's why the definition
3847       of <parameter>my_control</parameter> can be with
3848       the <parameter>__devinitdata</parameter> 
3849       prefix), and <function>snd_ctl_add</function> assigns the given
3850       control component to the card. 
3851       </para>
3852     </section>
3853
3854     <section id="control-interface-change-notification">
3855       <title>Change Notification</title>
3856       <para>
3857         If you need to change and update a control in the interrupt
3858       routine, you can call <function>snd_ctl_notify()</function>. For
3859       example, 
3860
3861         <informalexample>
3862           <programlisting>
3863 <![CDATA[
3864   snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, id_pointer);
3865 ]]>
3866           </programlisting>
3867         </informalexample>
3868
3869         This function takes the card pointer, the event-mask, and the
3870       control id pointer for the notification. The event-mask
3871       specifies the types of notification, for example, in the above
3872       example, the change of control values is notified.
3873       The id pointer is the pointer of struct <structname>snd_ctl_elem_id</structname>
3874       to be notified.
3875       You can find some examples in <filename>es1938.c</filename> or
3876       <filename>es1968.c</filename> for hardware volume interrupts. 
3877       </para>
3878     </section>
3879
3880     <section id="control-interface-tlv">
3881       <title>Metadata</title>
3882       <para>
3883       To provide information about the dB values of a mixer control, use
3884       on of the <constant>DECLARE_TLV_xxx</constant> macros from
3885       <filename>&lt;sound/tlv.h&gt;</filename> to define a variable
3886       containing this information, set the<structfield>tlv.p
3887       </structfield> field to point to this variable, and include the
3888       <constant>SNDRV_CTL_ELEM_ACCESS_TLV_READ</constant> flag in the
3889       <structfield>access</structfield> field; like this:
3890       <informalexample>
3891         <programlisting>
3892 <![CDATA[
3893   static DECLARE_TLV_DB_SCALE(db_scale_my_control, -4050, 150, 0);
3894
3895   static struct snd_kcontrol_new my_control __devinitdata = {
3896           ...
3897           .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
3898                     SNDRV_CTL_ELEM_ACCESS_TLV_READ,
3899           ...
3900           .tlv.p = db_scale_my_control,
3901   };
3902 ]]>
3903         </programlisting>
3904       </informalexample>
3905       </para>
3906
3907       <para>
3908       The <function>DECLARE_TLV_DB_SCALE</function> macro defines
3909       information about a mixer control where each step in the control's
3910       value changes the dB value by a constant dB amount.
3911       The first parameter is the name of the variable to be defined.
3912       The second parameter is the minimum value, in units of 0.01 dB.
3913       The third parameter is the step size, in units of 0.01 dB.
3914       Set the fourth parameter to 1 if the minimum value actually mutes
3915       the control.
3916       </para>
3917
3918       <para>
3919       The <function>DECLARE_TLV_DB_LINEAR</function> macro defines
3920       information about a mixer control where the control's value affects
3921       the output linearly.
3922       The first parameter is the name of the variable to be defined.
3923       The second parameter is the minimum value, in units of 0.01 dB.
3924       The third parameter is the maximum value, in units of 0.01 dB.
3925       If the minimum value mutes the control, set the second parameter to
3926       <constant>TLV_DB_GAIN_MUTE</constant>.
3927       </para>
3928     </section>
3929
3930   </chapter>
3931
3932
3933 <!-- ****************************************************** -->
3934 <!-- API for AC97 Codec  -->
3935 <!-- ****************************************************** -->
3936   <chapter id="api-ac97">
3937     <title>API for AC97 Codec</title>
3938
3939     <section>
3940       <title>General</title>
3941       <para>
3942         The ALSA AC97 codec layer is a well-defined one, and you don't
3943       have to write much code to control it. Only low-level control
3944       routines are necessary. The AC97 codec API is defined in
3945       <filename>&lt;sound/ac97_codec.h&gt;</filename>. 
3946       </para>
3947     </section>
3948
3949     <section id="api-ac97-example">
3950       <title>Full Code Example</title>
3951       <para>
3952           <example>
3953             <title>Example of AC97 Interface</title>
3954             <programlisting>
3955 <![CDATA[
3956   struct mychip {
3957           ....
3958           struct snd_ac97 *ac97;
3959           ....
3960   };
3961
3962   static unsigned short snd_mychip_ac97_read(struct snd_ac97 *ac97,
3963                                              unsigned short reg)
3964   {
3965           struct mychip *chip = ac97->private_data;
3966           ....
3967           /* read a register value here from the codec */
3968           return the_register_value;
3969   }
3970
3971   static void snd_mychip_ac97_write(struct snd_ac97 *ac97,
3972                                    unsigned short reg, unsigned short val)
3973   {
3974           struct mychip *chip = ac97->private_data;
3975           ....
3976           /* write the given register value to the codec */
3977   }
3978
3979   static int snd_mychip_ac97(struct mychip *chip)
3980   {
3981           struct snd_ac97_bus *bus;
3982           struct snd_ac97_template ac97;
3983           int err;
3984           static struct snd_ac97_bus_ops ops = {
3985                   .write = snd_mychip_ac97_write,
3986                   .read = snd_mychip_ac97_read,
3987           };
3988
3989           err = snd_ac97_bus(chip->card, 0, &ops, NULL, &bus);
3990           if (err < 0)
3991                   return err;
3992           memset(&ac97, 0, sizeof(ac97));
3993           ac97.private_data = chip;
3994           return snd_ac97_mixer(bus, &ac97, &chip->ac97);
3995   }
3996
3997 ]]>
3998           </programlisting>
3999         </example>
4000       </para>
4001     </section>
4002
4003     <section id="api-ac97-constructor">
4004       <title>Constructor</title>
4005       <para>
4006         To create an ac97 instance, first call <function>snd_ac97_bus</function>
4007       with an <type>ac97_bus_ops_t</type> record with callback functions.
4008
4009         <informalexample>
4010           <programlisting>
4011 <![CDATA[
4012   struct snd_ac97_bus *bus;
4013   static struct snd_ac97_bus_ops ops = {
4014         .write = snd_mychip_ac97_write,
4015         .read = snd_mychip_ac97_read,
4016   };
4017
4018   snd_ac97_bus(card, 0, &ops, NULL, &pbus);
4019 ]]>
4020           </programlisting>
4021         </informalexample>
4022
4023       The bus record is shared among all belonging ac97 instances.
4024       </para>
4025
4026       <para>
4027       And then call <function>snd_ac97_mixer()</function> with an
4028       struct <structname>snd_ac97_template</structname>
4029       record together with the bus pointer created above.
4030
4031         <informalexample>
4032           <programlisting>
4033 <![CDATA[
4034   struct snd_ac97_template ac97;
4035   int err;
4036
4037   memset(&ac97, 0, sizeof(ac97));
4038   ac97.private_data = chip;
4039   snd_ac97_mixer(bus, &ac97, &chip->ac97);
4040 ]]>
4041           </programlisting>
4042         </informalexample>
4043
4044         where chip-&gt;ac97 is a pointer to a newly created
4045         <type>ac97_t</type> instance.
4046         In this case, the chip pointer is set as the private data, so that
4047         the read/write callback functions can refer to this chip instance.
4048         This instance is not necessarily stored in the chip
4049         record.  If you need to change the register values from the
4050         driver, or need the suspend/resume of ac97 codecs, keep this
4051         pointer to pass to the corresponding functions.
4052       </para>
4053     </section>
4054
4055     <section id="api-ac97-callbacks">
4056       <title>Callbacks</title>
4057       <para>
4058         The standard callbacks are <structfield>read</structfield> and
4059       <structfield>write</structfield>. Obviously they 
4060       correspond to the functions for read and write accesses to the
4061       hardware low-level codes. 
4062       </para>
4063
4064       <para>
4065         The <structfield>read</structfield> callback returns the
4066         register value specified in the argument. 
4067
4068         <informalexample>
4069           <programlisting>
4070 <![CDATA[
4071   static unsigned short snd_mychip_ac97_read(struct snd_ac97 *ac97,
4072                                              unsigned short reg)
4073   {
4074           struct mychip *chip = ac97->private_data;
4075           ....
4076           return the_register_value;
4077   }
4078 ]]>
4079           </programlisting>
4080         </informalexample>
4081
4082         Here, the chip can be cast from ac97-&gt;private_data.
4083       </para>
4084
4085       <para>
4086         Meanwhile, the <structfield>write</structfield> callback is
4087         used to set the register value. 
4088
4089         <informalexample>
4090           <programlisting>
4091 <![CDATA[
4092   static void snd_mychip_ac97_write(struct snd_ac97 *ac97,
4093                        unsigned short reg, unsigned short val)
4094 ]]>
4095           </programlisting>
4096         </informalexample>
4097       </para>
4098
4099       <para>
4100       These callbacks are non-atomic like the control API callbacks.
4101       </para>
4102
4103       <para>
4104         There are also other callbacks:
4105       <structfield>reset</structfield>,
4106       <structfield>wait</structfield> and
4107       <structfield>init</structfield>. 
4108       </para>
4109
4110       <para>
4111         The <structfield>reset</structfield> callback is used to reset
4112       the codec. If the chip requires a special kind of reset, you can
4113       define this callback. 
4114       </para>
4115
4116       <para>
4117         The <structfield>wait</structfield> callback is used to
4118       add some waiting time in the standard initialization of the codec. If the
4119       chip requires the extra waiting time, define this callback. 
4120       </para>
4121
4122       <para>
4123         The <structfield>init</structfield> callback is used for
4124       additional initialization of the codec.
4125       </para>
4126     </section>
4127
4128     <section id="api-ac97-updating-registers">
4129       <title>Updating Registers in The Driver</title>
4130       <para>
4131         If you need to access to the codec from the driver, you can
4132       call the following functions:
4133       <function>snd_ac97_write()</function>,
4134       <function>snd_ac97_read()</function>,
4135       <function>snd_ac97_update()</function> and
4136       <function>snd_ac97_update_bits()</function>. 
4137       </para>
4138
4139       <para>
4140         Both <function>snd_ac97_write()</function> and
4141         <function>snd_ac97_update()</function> functions are used to
4142         set a value to the given register
4143         (<constant>AC97_XXX</constant>). The difference between them is
4144         that <function>snd_ac97_update()</function> doesn't write a
4145         value if the given value has been already set, while
4146         <function>snd_ac97_write()</function> always rewrites the
4147         value. 
4148
4149         <informalexample>
4150           <programlisting>
4151 <![CDATA[
4152   snd_ac97_write(ac97, AC97_MASTER, 0x8080);
4153   snd_ac97_update(ac97, AC97_MASTER, 0x8080);
4154 ]]>
4155           </programlisting>
4156         </informalexample>
4157       </para>
4158
4159       <para>
4160         <function>snd_ac97_read()</function> is used to read the value
4161         of the given register. For example, 
4162
4163         <informalexample>
4164           <programlisting>
4165 <![CDATA[
4166   value = snd_ac97_read(ac97, AC97_MASTER);
4167 ]]>
4168           </programlisting>
4169         </informalexample>
4170       </para>
4171
4172       <para>
4173         <function>snd_ac97_update_bits()</function> is used to update
4174         some bits in the given register.  
4175
4176         <informalexample>
4177           <programlisting>
4178 <![CDATA[
4179   snd_ac97_update_bits(ac97, reg, mask, value);
4180 ]]>
4181           </programlisting>
4182         </informalexample>
4183       </para>
4184
4185       <para>
4186         Also, there is a function to change the sample rate (of a
4187         given register such as
4188         <constant>AC97_PCM_FRONT_DAC_RATE</constant>) when VRA or
4189         DRA is supported by the codec:
4190         <function>snd_ac97_set_rate()</function>. 
4191
4192         <informalexample>
4193           <programlisting>
4194 <![CDATA[
4195   snd_ac97_set_rate(ac97, AC97_PCM_FRONT_DAC_RATE, 44100);
4196 ]]>
4197           </programlisting>
4198         </informalexample>
4199       </para>
4200
4201       <para>
4202         The following registers are available to set the rate:
4203       <constant>AC97_PCM_MIC_ADC_RATE</constant>,
4204       <constant>AC97_PCM_FRONT_DAC_RATE</constant>,
4205       <constant>AC97_PCM_LR_ADC_RATE</constant>,
4206       <constant>AC97_SPDIF</constant>. When
4207       <constant>AC97_SPDIF</constant> is specified, the register is
4208       not really changed but the corresponding IEC958 status bits will
4209       be updated. 
4210       </para>
4211     </section>
4212
4213     <section id="api-ac97-clock-adjustment">
4214       <title>Clock Adjustment</title>
4215       <para>
4216         In some chips, the clock of the codec isn't 48000 but using a
4217       PCI clock (to save a quartz!). In this case, change the field
4218       bus-&gt;clock to the corresponding
4219       value. For example, intel8x0 
4220       and es1968 drivers have their own function to read from the clock.
4221       </para>
4222     </section>
4223
4224     <section id="api-ac97-proc-files">
4225       <title>Proc Files</title>
4226       <para>
4227         The ALSA AC97 interface will create a proc file such as
4228       <filename>/proc/asound/card0/codec97#0/ac97#0-0</filename> and
4229       <filename>ac97#0-0+regs</filename>. You can refer to these files to
4230       see the current status and registers of the codec. 
4231       </para>
4232     </section>
4233
4234     <section id="api-ac97-multiple-codecs">
4235       <title>Multiple Codecs</title>
4236       <para>
4237         When there are several codecs on the same card, you need to
4238       call <function>snd_ac97_mixer()</function> multiple times with
4239       ac97.num=1 or greater. The <structfield>num</structfield> field
4240       specifies the codec number. 
4241       </para>
4242
4243       <para>
4244         If you set up multiple codecs, you either need to write
4245       different callbacks for each codec or check
4246       ac97-&gt;num in the callback routines. 
4247       </para>
4248     </section>
4249
4250   </chapter>
4251
4252
4253 <!-- ****************************************************** -->
4254 <!-- MIDI (MPU401-UART) Interface  -->
4255 <!-- ****************************************************** -->
4256   <chapter id="midi-interface">
4257     <title>MIDI (MPU401-UART) Interface</title>
4258
4259     <section id="midi-interface-general">
4260       <title>General</title>
4261       <para>
4262         Many soundcards have built-in MIDI (MPU401-UART)
4263       interfaces. When the soundcard supports the standard MPU401-UART
4264       interface, most likely you can use the ALSA MPU401-UART API. The
4265       MPU401-UART API is defined in
4266       <filename>&lt;sound/mpu401.h&gt;</filename>. 
4267       </para>
4268
4269       <para>
4270         Some soundchips have a similar but slightly different
4271       implementation of mpu401 stuff. For example, emu10k1 has its own
4272       mpu401 routines. 
4273       </para>
4274     </section>
4275
4276     <section id="midi-interface-constructor">
4277       <title>Constructor</title>
4278       <para>
4279         To create a rawmidi object, call
4280       <function>snd_mpu401_uart_new()</function>. 
4281
4282         <informalexample>
4283           <programlisting>
4284 <![CDATA[
4285   struct snd_rawmidi *rmidi;
4286   snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, port, info_flags,
4287                       irq, irq_flags, &rmidi);
4288 ]]>
4289           </programlisting>
4290         </informalexample>
4291       </para>
4292
4293       <para>
4294         The first argument is the card pointer, and the second is the
4295       index of this component. You can create up to 8 rawmidi
4296       devices. 
4297       </para>
4298
4299       <para>
4300         The third argument is the type of the hardware,
4301       <constant>MPU401_HW_XXX</constant>. If it's not a special one,
4302       you can use <constant>MPU401_HW_MPU401</constant>. 
4303       </para>
4304
4305       <para>
4306         The 4th argument is the I/O port address. Many
4307       backward-compatible MPU401 have an I/O port such as 0x330. Or, it
4308       might be a part of its own PCI I/O region. It depends on the
4309       chip design. 
4310       </para>
4311
4312       <para>
4313         The 5th argument is a bitflag for additional information.
4314         When the I/O port address above is part of the PCI I/O
4315       region, the MPU401 I/O port might have been already allocated
4316       (reserved) by the driver itself. In such a case, pass a bit flag
4317       <constant>MPU401_INFO_INTEGRATED</constant>,
4318       and the mpu401-uart layer will allocate the I/O ports by itself. 
4319       </para>
4320
4321         <para>
4322         When the controller supports only the input or output MIDI stream,
4323         pass the <constant>MPU401_INFO_INPUT</constant> or
4324         <constant>MPU401_INFO_OUTPUT</constant> bitflag, respectively.
4325         Then the rawmidi instance is created as a single stream.
4326         </para>
4327
4328         <para>
4329         <constant>MPU401_INFO_MMIO</constant> bitflag is used to change
4330         the access method to MMIO (via readb and writeb) instead of
4331         iob and outb. In this case, you have to pass the iomapped address
4332         to <function>snd_mpu401_uart_new()</function>.
4333         </para>
4334
4335         <para>
4336         When <constant>MPU401_INFO_TX_IRQ</constant> is set, the output
4337         stream isn't checked in the default interrupt handler.  The driver
4338         needs to call <function>snd_mpu401_uart_interrupt_tx()</function>
4339         by itself to start processing the output stream in the irq handler.
4340         </para>
4341
4342       <para>
4343         Usually, the port address corresponds to the command port and
4344         port + 1 corresponds to the data port. If not, you may change
4345         the <structfield>cport</structfield> field of
4346         struct <structname>snd_mpu401</structname> manually 
4347         afterward. However, <structname>snd_mpu401</structname> pointer is not
4348         returned explicitly by
4349         <function>snd_mpu401_uart_new()</function>. You need to cast
4350         rmidi-&gt;private_data to
4351         <structname>snd_mpu401</structname> explicitly, 
4352
4353         <informalexample>
4354           <programlisting>
4355 <![CDATA[
4356   struct snd_mpu401 *mpu;
4357   mpu = rmidi->private_data;
4358 ]]>
4359           </programlisting>
4360         </informalexample>
4361
4362         and reset the cport as you like:
4363
4364         <informalexample>
4365           <programlisting>
4366 <![CDATA[
4367   mpu->cport = my_own_control_port;
4368 ]]>
4369           </programlisting>
4370         </informalexample>
4371       </para>
4372
4373       <para>
4374         The 6th argument specifies the irq number for UART. If the irq
4375       is already allocated, pass 0 to the 7th argument
4376       (<parameter>irq_flags</parameter>). Otherwise, pass the flags
4377       for irq allocation 
4378       (<constant>SA_XXX</constant> bits) to it, and the irq will be
4379       reserved by the mpu401-uart layer. If the card doesn't generate
4380       UART interrupts, pass -1 as the irq number. Then a timer
4381       interrupt will be invoked for polling. 
4382       </para>
4383     </section>
4384
4385     <section id="midi-interface-interrupt-handler">
4386       <title>Interrupt Handler</title>
4387       <para>
4388         When the interrupt is allocated in
4389       <function>snd_mpu401_uart_new()</function>, the private
4390       interrupt handler is used, hence you don't have anything else to do
4391       than creating the mpu401 stuff. Otherwise, you have to call
4392       <function>snd_mpu401_uart_interrupt()</function> explicitly when
4393       a UART interrupt is invoked and checked in your own interrupt
4394       handler.  
4395       </para>
4396
4397       <para>
4398         In this case, you need to pass the private_data of the
4399         returned rawmidi object from
4400         <function>snd_mpu401_uart_new()</function> as the second
4401         argument of <function>snd_mpu401_uart_interrupt()</function>. 
4402
4403         <informalexample>
4404           <programlisting>
4405 <![CDATA[
4406   snd_mpu401_uart_interrupt(irq, rmidi->private_data, regs);
4407 ]]>
4408           </programlisting>
4409         </informalexample>
4410       </para>
4411     </section>
4412
4413   </chapter>
4414
4415
4416 <!-- ****************************************************** -->
4417 <!-- RawMIDI Interface  -->
4418 <!-- ****************************************************** -->
4419   <chapter id="rawmidi-interface">
4420     <title>RawMIDI Interface</title>
4421
4422     <section id="rawmidi-interface-overview">
4423       <title>Overview</title>
4424
4425       <para>
4426       The raw MIDI interface is used for hardware MIDI ports that can
4427       be accessed as a byte stream.  It is not used for synthesizer
4428       chips that do not directly understand MIDI.
4429       </para>
4430
4431       <para>
4432       ALSA handles file and buffer management.  All you have to do is
4433       to write some code to move data between the buffer and the
4434       hardware.
4435       </para>
4436
4437       <para>
4438       The rawmidi API is defined in
4439       <filename>&lt;sound/rawmidi.h&gt;</filename>.
4440       </para>
4441     </section>
4442
4443     <section id="rawmidi-interface-constructor">
4444       <title>Constructor</title>
4445
4446       <para>
4447       To create a rawmidi device, call the
4448       <function>snd_rawmidi_new</function> function:
4449         <informalexample>
4450           <programlisting>
4451 <![CDATA[
4452   struct snd_rawmidi *rmidi;
4453   err = snd_rawmidi_new(chip->card, "MyMIDI", 0, outs, ins, &rmidi);
4454   if (err < 0)
4455           return err;
4456   rmidi->private_data = chip;
4457   strcpy(rmidi->name, "My MIDI");
4458   rmidi->info_flags = SNDRV_RAWMIDI_INFO_OUTPUT |
4459                       SNDRV_RAWMIDI_INFO_INPUT |
4460                       SNDRV_RAWMIDI_INFO_DUPLEX;
4461 ]]>
4462           </programlisting>
4463         </informalexample>
4464       </para>
4465
4466       <para>
4467       The first argument is the card pointer, the second argument is
4468       the ID string.
4469       </para>
4470
4471       <para>
4472       The third argument is the index of this component.  You can
4473       create up to 8 rawmidi devices.
4474       </para>
4475
4476       <para>
4477       The fourth and fifth arguments are the number of output and
4478       input substreams, respectively, of this device (a substream is
4479       the equivalent of a MIDI port).
4480       </para>
4481
4482       <para>
4483       Set the <structfield>info_flags</structfield> field to specify
4484       the capabilities of the device.
4485       Set <constant>SNDRV_RAWMIDI_INFO_OUTPUT</constant> if there is
4486       at least one output port,
4487       <constant>SNDRV_RAWMIDI_INFO_INPUT</constant> if there is at
4488       least one input port,
4489       and <constant>SNDRV_RAWMIDI_INFO_DUPLEX</constant> if the device
4490       can handle output and input at the same time.
4491       </para>
4492
4493       <para>
4494       After the rawmidi device is created, you need to set the
4495       operators (callbacks) for each substream.  There are helper
4496       functions to set the operators for all the substreams of a device:
4497         <informalexample>
4498           <programlisting>
4499 <![CDATA[
4500   snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, &snd_mymidi_output_ops);
4501   snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_INPUT, &snd_mymidi_input_ops);
4502 ]]>
4503           </programlisting>
4504         </informalexample>
4505       </para>
4506
4507       <para>
4508       The operators are usually defined like this:
4509         <informalexample>
4510           <programlisting>
4511 <![CDATA[
4512   static struct snd_rawmidi_ops snd_mymidi_output_ops = {
4513           .open =    snd_mymidi_output_open,
4514           .close =   snd_mymidi_output_close,
4515           .trigger = snd_mymidi_output_trigger,
4516   };
4517 ]]>
4518           </programlisting>
4519         </informalexample>
4520       These callbacks are explained in the <link
4521       linkend="rawmidi-interface-callbacks"><citetitle>Callbacks</citetitle></link>
4522       section.
4523       </para>
4524
4525       <para>
4526       If there are more than one substream, you should give a
4527       unique name to each of them:
4528         <informalexample>
4529           <programlisting>
4530 <![CDATA[
4531   struct snd_rawmidi_substream *substream;
4532   list_for_each_entry(substream,
4533                       &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams,
4534                       list {
4535           sprintf(substream->name, "My MIDI Port %d", substream->number + 1);
4536   }
4537   /* same for SNDRV_RAWMIDI_STREAM_INPUT */
4538 ]]>
4539           </programlisting>
4540         </informalexample>
4541       </para>
4542     </section>
4543
4544     <section id="rawmidi-interface-callbacks">
4545       <title>Callbacks</title>
4546
4547       <para>
4548       In all the callbacks, the private data that you've set for the
4549       rawmidi device can be accessed as
4550       substream-&gt;rmidi-&gt;private_data.
4551       <!-- <code> isn't available before DocBook 4.3 -->
4552       </para>
4553
4554       <para>
4555       If there is more than one port, your callbacks can determine the
4556       port index from the struct snd_rawmidi_substream data passed to each
4557       callback:
4558         <informalexample>
4559           <programlisting>
4560 <![CDATA[
4561   struct snd_rawmidi_substream *substream;
4562   int index = substream->number;
4563 ]]>
4564           </programlisting>
4565         </informalexample>
4566       </para>
4567
4568       <section id="rawmidi-interface-op-open">
4569       <title><function>open</function> callback</title>
4570
4571         <informalexample>
4572           <programlisting>
4573 <![CDATA[
4574   static int snd_xxx_open(struct snd_rawmidi_substream *substream);
4575 ]]>
4576           </programlisting>
4577         </informalexample>
4578
4579         <para>
4580         This is called when a substream is opened.
4581         You can initialize the hardware here, but you shouldn't
4582         start transmitting/receiving data yet.
4583         </para>
4584       </section>
4585
4586       <section id="rawmidi-interface-op-close">
4587       <title><function>close</function> callback</title>
4588
4589         <informalexample>
4590           <programlisting>
4591 <![CDATA[
4592   static int snd_xxx_close(struct snd_rawmidi_substream *substream);
4593 ]]>
4594           </programlisting>
4595         </informalexample>
4596
4597         <para>
4598         Guess what.
4599         </para>
4600
4601         <para>
4602         The <function>open</function> and <function>close</function>
4603         callbacks of a rawmidi device are serialized with a mutex,
4604         and can sleep.
4605         </para>
4606       </section>
4607
4608       <section id="rawmidi-interface-op-trigger-out">
4609       <title><function>trigger</function> callback for output
4610       substreams</title>
4611
4612         <informalexample>
4613           <programlisting>
4614 <![CDATA[
4615   static void snd_xxx_output_trigger(struct snd_rawmidi_substream *substream, int up);
4616 ]]>
4617           </programlisting>
4618         </informalexample>
4619
4620         <para>
4621         This is called with a nonzero <parameter>up</parameter>
4622         parameter when there is some data in the substream buffer that
4623         must be transmitted.
4624         </para>
4625
4626         <para>
4627         To read data from the buffer, call
4628         <function>snd_rawmidi_transmit_peek</function>.  It will
4629         return the number of bytes that have been read; this will be
4630         less than the number of bytes requested when there are no more
4631         data in the buffer.
4632         After the data have been transmitted successfully, call
4633         <function>snd_rawmidi_transmit_ack</function> to remove the
4634         data from the substream buffer:
4635           <informalexample>
4636             <programlisting>
4637 <![CDATA[
4638   unsigned char data;
4639   while (snd_rawmidi_transmit_peek(substream, &data, 1) == 1) {
4640           if (snd_mychip_try_to_transmit(data))
4641                   snd_rawmidi_transmit_ack(substream, 1);
4642           else
4643                   break; /* hardware FIFO full */
4644   }
4645 ]]>
4646             </programlisting>
4647           </informalexample>
4648         </para>
4649
4650         <para>
4651         If you know beforehand that the hardware will accept data, you
4652         can use the <function>snd_rawmidi_transmit</function> function
4653         which reads some data and removes them from the buffer at once:
4654           <informalexample>
4655             <programlisting>
4656 <![CDATA[
4657   while (snd_mychip_transmit_possible()) {
4658           unsigned char data;
4659           if (snd_rawmidi_transmit(substream, &data, 1) != 1)
4660                   break; /* no more data */
4661           snd_mychip_transmit(data);
4662   }
4663 ]]>
4664             </programlisting>
4665           </informalexample>
4666         </para>
4667
4668         <para>
4669         If you know beforehand how many bytes you can accept, you can
4670         use a buffer size greater than one with the
4671         <function>snd_rawmidi_transmit*</function> functions.
4672         </para>
4673
4674         <para>
4675         The <function>trigger</function> callback must not sleep.  If
4676         the hardware FIFO is full before the substream buffer has been
4677         emptied, you have to continue transmitting data later, either
4678         in an interrupt handler, or with a timer if the hardware
4679         doesn't have a MIDI transmit interrupt.
4680         </para>
4681
4682         <para>
4683         The <function>trigger</function> callback is called with a
4684         zero <parameter>up</parameter> parameter when the transmission
4685         of data should be aborted.
4686         </para>
4687       </section>
4688
4689       <section id="rawmidi-interface-op-trigger-in">
4690       <title><function>trigger</function> callback for input
4691       substreams</title>
4692
4693         <informalexample>
4694           <programlisting>
4695 <![CDATA[
4696   static void snd_xxx_input_trigger(struct snd_rawmidi_substream *substream, int up);
4697 ]]>
4698           </programlisting>
4699         </informalexample>
4700
4701         <para>
4702         This is called with a nonzero <parameter>up</parameter>
4703         parameter to enable receiving data, or with a zero
4704         <parameter>up</parameter> parameter do disable receiving data.
4705         </para>
4706
4707         <para>
4708         The <function>trigger</function> callback must not sleep; the
4709         actual reading of data from the device is usually done in an
4710         interrupt handler.
4711         </para>
4712
4713         <para>
4714         When data reception is enabled, your interrupt handler should
4715         call <function>snd_rawmidi_receive</function> for all received
4716         data:
4717           <informalexample>
4718             <programlisting>
4719 <![CDATA[
4720   void snd_mychip_midi_interrupt(...)
4721   {
4722           while (mychip_midi_available()) {
4723                   unsigned char data;
4724                   data = mychip_midi_read();
4725                   snd_rawmidi_receive(substream, &data, 1);
4726           }
4727   }
4728 ]]>
4729             </programlisting>
4730           </informalexample>
4731         </para>
4732       </section>
4733
4734       <section id="rawmidi-interface-op-drain">
4735       <title><function>drain</function> callback</title>
4736
4737         <informalexample>
4738           <programlisting>
4739 <![CDATA[
4740   static void snd_xxx_drain(struct snd_rawmidi_substream *substream);
4741 ]]>
4742           </programlisting>
4743         </informalexample>
4744
4745         <para>
4746         This is only used with output substreams.  This function should wait
4747         until all data read from the substream buffer have been transmitted.
4748         This ensures that the device can be closed and the driver unloaded
4749         without losing data.
4750         </para>
4751
4752         <para>
4753         This callback is optional. If you do not set
4754         <structfield>drain</structfield> in the struct snd_rawmidi_ops
4755         structure, ALSA will simply wait for 50&nbsp;milliseconds
4756         instead.
4757         </para>
4758       </section>
4759     </section>
4760
4761   </chapter>
4762
4763
4764 <!-- ****************************************************** -->
4765 <!-- Miscellaneous Devices  -->
4766 <!-- ****************************************************** -->
4767   <chapter id="misc-devices">
4768     <title>Miscellaneous Devices</title>
4769
4770     <section id="misc-devices-opl3">
4771       <title>FM OPL3</title>
4772       <para>
4773         The FM OPL3 is still used in many chips (mainly for backward
4774       compatibility). ALSA has a nice OPL3 FM control layer, too. The
4775       OPL3 API is defined in
4776       <filename>&lt;sound/opl3.h&gt;</filename>. 
4777       </para>
4778
4779       <para>
4780         FM registers can be directly accessed through the direct-FM API,
4781       defined in <filename>&lt;sound/asound_fm.h&gt;</filename>. In
4782       ALSA native mode, FM registers are accessed through
4783       the Hardware-Dependant Device direct-FM extension API, whereas in
4784       OSS compatible mode, FM registers can be accessed with the OSS
4785       direct-FM compatible API in <filename>/dev/dmfmX</filename> device. 
4786       </para>
4787
4788       <para>
4789         To create the OPL3 component, you have two functions to
4790         call. The first one is a constructor for the <type>opl3_t</type>
4791         instance. 
4792
4793         <informalexample>
4794           <programlisting>
4795 <![CDATA[
4796   struct snd_opl3 *opl3;
4797   snd_opl3_create(card, lport, rport, OPL3_HW_OPL3_XXX,
4798                   integrated, &opl3);
4799 ]]>
4800           </programlisting>
4801         </informalexample>
4802       </para>
4803
4804       <para>
4805         The first argument is the card pointer, the second one is the
4806       left port address, and the third is the right port address. In
4807       most cases, the right port is placed at the left port + 2. 
4808       </para>
4809
4810       <para>
4811         The fourth argument is the hardware type.
4812       </para>
4813
4814       <para>
4815         When the left and right ports have been already allocated by
4816       the card driver, pass non-zero to the fifth argument
4817       (<parameter>integrated</parameter>). Otherwise, the opl3 module will
4818       allocate the specified ports by itself. 
4819       </para>
4820
4821       <para>
4822         When the accessing the hardware requires special method
4823         instead of the standard I/O access, you can create opl3 instance
4824         separately with <function>snd_opl3_new()</function>.
4825
4826         <informalexample>
4827           <programlisting>
4828 <![CDATA[
4829   struct snd_opl3 *opl3;
4830   snd_opl3_new(card, OPL3_HW_OPL3_XXX, &opl3);
4831 ]]>
4832           </programlisting>
4833         </informalexample>
4834       </para>
4835
4836       <para>
4837         Then set <structfield>command</structfield>,
4838         <structfield>private_data</structfield> and
4839         <structfield>private_free</structfield> for the private
4840         access function, the private data and the destructor.
4841         The l_port and r_port are not necessarily set.  Only the
4842         command must be set properly.  You can retrieve the data
4843         from the opl3-&gt;private_data field.
4844       </para>
4845
4846       <para>
4847         After creating the opl3 instance via <function>snd_opl3_new()</function>,
4848         call <function>snd_opl3_init()</function> to initialize the chip to the
4849         proper state. Note that <function>snd_opl3_create()</function> always
4850         calls it internally.
4851       </para>
4852
4853       <para>
4854         If the opl3 instance is created successfully, then create a
4855         hwdep device for this opl3. 
4856
4857         <informalexample>
4858           <programlisting>
4859 <![CDATA[
4860   struct snd_hwdep *opl3hwdep;
4861   snd_opl3_hwdep_new(opl3, 0, 1, &opl3hwdep);
4862 ]]>
4863           </programlisting>
4864         </informalexample>
4865       </para>
4866
4867       <para>
4868         The first argument is the <type>opl3_t</type> instance you
4869       created, and the second is the index number, usually 0. 
4870       </para>
4871
4872       <para>
4873         The third argument is the index-offset for the sequencer
4874       client assigned to the OPL3 port. When there is an MPU401-UART,
4875       give 1 for here (UART always takes 0). 
4876       </para>
4877     </section>
4878
4879     <section id="misc-devices-hardware-dependent">
4880       <title>Hardware-Dependent Devices</title>
4881       <para>
4882         Some chips need user-space access for special
4883       controls or for loading the micro code. In such a case, you can
4884       create a hwdep (hardware-dependent) device. The hwdep API is
4885       defined in <filename>&lt;sound/hwdep.h&gt;</filename>. You can
4886       find examples in opl3 driver or
4887       <filename>isa/sb/sb16_csp.c</filename>. 
4888       </para>
4889
4890       <para>
4891         The creation of the <type>hwdep</type> instance is done via
4892         <function>snd_hwdep_new()</function>. 
4893
4894         <informalexample>
4895           <programlisting>
4896 <![CDATA[
4897   struct snd_hwdep *hw;
4898   snd_hwdep_new(card, "My HWDEP", 0, &hw);
4899 ]]>
4900           </programlisting>
4901         </informalexample>
4902
4903         where the third argument is the index number.
4904       </para>
4905
4906       <para>
4907         You can then pass any pointer value to the
4908         <parameter>private_data</parameter>.
4909         If you assign a private data, you should define the
4910         destructor, too. The destructor function is set in
4911         the <structfield>private_free</structfield> field.  
4912
4913         <informalexample>
4914           <programlisting>
4915 <![CDATA[
4916   struct mydata *p = kmalloc(sizeof(*p), GFP_KERNEL);
4917   hw->private_data = p;
4918   hw->private_free = mydata_free;
4919 ]]>
4920           </programlisting>
4921         </informalexample>
4922
4923         and the implementation of the destructor would be:
4924
4925         <informalexample>
4926           <programlisting>
4927 <![CDATA[
4928   static void mydata_free(struct snd_hwdep *hw)
4929   {
4930           struct mydata *p = hw->private_data;
4931           kfree(p);
4932   }
4933 ]]>
4934           </programlisting>
4935         </informalexample>
4936       </para>
4937
4938       <para>
4939         The arbitrary file operations can be defined for this
4940         instance. The file operators are defined in
4941         the <parameter>ops</parameter> table. For example, assume that
4942         this chip needs an ioctl. 
4943
4944         <informalexample>
4945           <programlisting>
4946 <![CDATA[
4947   hw->ops.open = mydata_open;
4948   hw->ops.ioctl = mydata_ioctl;
4949   hw->ops.release = mydata_release;
4950 ]]>
4951           </programlisting>
4952         </informalexample>
4953
4954         And implement the callback functions as you like.
4955       </para>
4956     </section>
4957
4958     <section id="misc-devices-IEC958">
4959       <title>IEC958 (S/PDIF)</title>
4960       <para>
4961         Usually the controls for IEC958 devices are implemented via
4962       the control interface. There is a macro to compose a name string for
4963       IEC958 controls, <function>SNDRV_CTL_NAME_IEC958()</function>
4964       defined in <filename>&lt;include/asound.h&gt;</filename>.  
4965       </para>
4966
4967       <para>
4968         There are some standard controls for IEC958 status bits. These
4969       controls use the type <type>SNDRV_CTL_ELEM_TYPE_IEC958</type>,
4970       and the size of element is fixed as 4 bytes array
4971       (value.iec958.status[x]). For the <structfield>info</structfield>
4972       callback, you don't specify 
4973       the value field for this type (the count field must be set,
4974       though). 
4975       </para>
4976
4977       <para>
4978         <quote>IEC958 Playback Con Mask</quote> is used to return the
4979       bit-mask for the IEC958 status bits of consumer mode. Similarly,
4980       <quote>IEC958 Playback Pro Mask</quote> returns the bitmask for
4981       professional mode. They are read-only controls, and are defined
4982       as MIXER controls (iface =
4983       <constant>SNDRV_CTL_ELEM_IFACE_MIXER</constant>).  
4984       </para>
4985
4986       <para>
4987         Meanwhile, <quote>IEC958 Playback Default</quote> control is
4988       defined for getting and setting the current default IEC958
4989       bits. Note that this one is usually defined as a PCM control
4990       (iface = <constant>SNDRV_CTL_ELEM_IFACE_PCM</constant>),
4991       although in some places it's defined as a MIXER control. 
4992       </para>
4993
4994       <para>
4995         In addition, you can define the control switches to
4996       enable/disable or to set the raw bit mode. The implementation
4997       will depend on the chip, but the control should be named as
4998       <quote>IEC958 xxx</quote>, preferably using
4999       the <function>SNDRV_CTL_NAME_IEC958()</function> macro. 
5000       </para>
5001
5002       <para>
5003         You can find several cases, for example,
5004       <filename>pci/emu10k1</filename>,
5005       <filename>pci/ice1712</filename>, or
5006       <filename>pci/cmipci.c</filename>.  
5007       </para>
5008     </section>
5009
5010   </chapter>
5011
5012
5013 <!-- ****************************************************** -->
5014 <!-- Buffer and Memory Management  -->
5015 <!-- ****************************************************** -->
5016   <chapter id="buffer-and-memory">
5017     <title>Buffer and Memory Management</title>
5018
5019     <section id="buffer-and-memory-buffer-types">
5020       <title>Buffer Types</title>
5021       <para>
5022         ALSA provides several different buffer allocation functions
5023       depending on the bus and the architecture. All these have a
5024       consistent API. The allocation of physically-contiguous pages is
5025       done via 
5026       <function>snd_malloc_xxx_pages()</function> function, where xxx
5027       is the bus type. 
5028       </para>
5029
5030       <para>
5031         The allocation of pages with fallback is
5032       <function>snd_malloc_xxx_pages_fallback()</function>. This
5033       function tries to allocate the specified pages but if the pages
5034       are not available, it tries to reduce the page sizes until
5035       enough space is found.
5036       </para>
5037
5038       <para>
5039       The release the pages, call
5040       <function>snd_free_xxx_pages()</function> function. 
5041       </para>
5042
5043       <para>
5044       Usually, ALSA drivers try to allocate and reserve
5045        a large contiguous physical space
5046        at the time the module is loaded for the later use.
5047        This is called <quote>pre-allocation</quote>.
5048        As already written, you can call the following function at 
5049        pcm instance construction time (in the case of PCI bus). 
5050
5051         <informalexample>
5052           <programlisting>
5053 <![CDATA[
5054   snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
5055                                         snd_dma_pci_data(pci), size, max);
5056 ]]>
5057           </programlisting>
5058         </informalexample>
5059
5060         where <parameter>size</parameter> is the byte size to be
5061       pre-allocated and the <parameter>max</parameter> is the maximum
5062       size to be changed via the <filename>prealloc</filename> proc file.
5063       The allocator will try to get an area as large as possible
5064       within the given size. 
5065       </para>
5066
5067       <para>
5068       The second argument (type) and the third argument (device pointer)
5069       are dependent on the bus.
5070       In the case of the ISA bus, pass <function>snd_dma_isa_data()</function>
5071       as the third argument with <constant>SNDRV_DMA_TYPE_DEV</constant> type.
5072       For the continuous buffer unrelated to the bus can be pre-allocated
5073       with <constant>SNDRV_DMA_TYPE_CONTINUOUS</constant> type and the
5074       <function>snd_dma_continuous_data(GFP_KERNEL)</function> device pointer,
5075       where <constant>GFP_KERNEL</constant> is the kernel allocation flag to
5076       use.
5077       For the PCI scatter-gather buffers, use
5078       <constant>SNDRV_DMA_TYPE_DEV_SG</constant> with
5079       <function>snd_dma_pci_data(pci)</function>
5080       (see the 
5081           <link linkend="buffer-and-memory-non-contiguous"><citetitle>Non-Contiguous Buffers
5082           </citetitle></link> section).
5083       </para>
5084
5085       <para>
5086         Once the buffer is pre-allocated, you can use the
5087         allocator in the <structfield>hw_params</structfield> callback: 
5088
5089         <informalexample>
5090           <programlisting>
5091 <![CDATA[
5092   snd_pcm_lib_malloc_pages(substream, size);
5093 ]]>
5094           </programlisting>
5095         </informalexample>
5096
5097         Note that you have to pre-allocate to use this function.
5098       </para>
5099     </section>
5100
5101     <section id="buffer-and-memory-external-hardware">
5102       <title>External Hardware Buffers</title>
5103       <para>
5104         Some chips have their own hardware buffers and the DMA
5105       transfer from the host memory is not available. In such a case,
5106       you need to either 1) copy/set the audio data directly to the
5107       external hardware buffer, or 2) make an intermediate buffer and
5108       copy/set the data from it to the external hardware buffer in
5109       interrupts (or in tasklets, preferably).
5110       </para>
5111
5112       <para>
5113         The first case works fine if the external hardware buffer is large
5114       enough.  This method doesn't need any extra buffers and thus is
5115       more effective. You need to define the
5116       <structfield>copy</structfield> and
5117       <structfield>silence</structfield> callbacks for 
5118       the data transfer. However, there is a drawback: it cannot
5119       be mmapped. The examples are GUS's GF1 PCM or emu8000's
5120       wavetable PCM. 
5121       </para>
5122
5123       <para>
5124         The second case allows for mmap on the buffer, although you have
5125       to handle an interrupt or a tasklet to transfer the data
5126       from the intermediate buffer to the hardware buffer. You can find an
5127       example in the vxpocket driver. 
5128       </para>
5129
5130       <para>
5131         Another case is when the chip uses a PCI memory-map
5132       region for the buffer instead of the host memory. In this case,
5133       mmap is available only on certain architectures like the Intel one.
5134       In non-mmap mode, the data cannot be transferred as in the normal
5135       way. Thus you need to define the <structfield>copy</structfield> and
5136       <structfield>silence</structfield> callbacks as well, 
5137       as in the cases above. The examples are found in
5138       <filename>rme32.c</filename> and <filename>rme96.c</filename>. 
5139       </para>
5140
5141       <para>
5142         The implementation of the <structfield>copy</structfield> and
5143         <structfield>silence</structfield> callbacks depends upon 
5144         whether the hardware supports interleaved or non-interleaved
5145         samples. The <structfield>copy</structfield> callback is
5146         defined like below, a bit 
5147         differently depending whether the direction is playback or
5148         capture: 
5149
5150         <informalexample>
5151           <programlisting>
5152 <![CDATA[
5153   static int playback_copy(struct snd_pcm_substream *substream, int channel,
5154                snd_pcm_uframes_t pos, void *src, snd_pcm_uframes_t count);
5155   static int capture_copy(struct snd_pcm_substream *substream, int channel,
5156                snd_pcm_uframes_t pos, void *dst, snd_pcm_uframes_t count);
5157 ]]>
5158           </programlisting>
5159         </informalexample>
5160       </para>
5161
5162       <para>
5163         In the case of interleaved samples, the second argument
5164       (<parameter>channel</parameter>) is not used. The third argument
5165       (<parameter>pos</parameter>) points the 
5166       current position offset in frames. 
5167       </para>
5168
5169       <para>
5170         The meaning of the fourth argument is different between
5171       playback and capture. For playback, it holds the source data
5172       pointer, and for capture, it's the destination data pointer. 
5173       </para>
5174
5175       <para>
5176         The last argument is the number of frames to be copied.
5177       </para>
5178
5179       <para>
5180         What you have to do in this callback is again different
5181         between playback and capture directions. In the
5182         playback case, you copy the given amount of data
5183         (<parameter>count</parameter>) at the specified pointer
5184         (<parameter>src</parameter>) to the specified offset
5185         (<parameter>pos</parameter>) on the hardware buffer. When
5186         coded like memcpy-like way, the copy would be like: 
5187
5188         <informalexample>
5189           <programlisting>
5190 <![CDATA[
5191   my_memcpy(my_buffer + frames_to_bytes(runtime, pos), src,
5192             frames_to_bytes(runtime, count));
5193 ]]>
5194           </programlisting>
5195         </informalexample>
5196       </para>
5197
5198       <para>
5199         For the capture direction, you copy the given amount of
5200         data (<parameter>count</parameter>) at the specified offset
5201         (<parameter>pos</parameter>) on the hardware buffer to the
5202         specified pointer (<parameter>dst</parameter>). 
5203
5204         <informalexample>
5205           <programlisting>
5206 <![CDATA[
5207   my_memcpy(dst, my_buffer + frames_to_bytes(runtime, pos),
5208             frames_to_bytes(runtime, count));
5209 ]]>
5210           </programlisting>
5211         </informalexample>
5212
5213         Note that both the position and the amount of data are given
5214       in frames. 
5215       </para>
5216
5217       <para>
5218         In the case of non-interleaved samples, the implementation
5219       will be a bit more complicated. 
5220       </para>
5221
5222       <para>
5223         You need to check the channel argument, and if it's -1, copy
5224       the whole channels. Otherwise, you have to copy only the
5225       specified channel. Please check
5226       <filename>isa/gus/gus_pcm.c</filename> as an example. 
5227       </para>
5228
5229       <para>
5230         The <structfield>silence</structfield> callback is also
5231         implemented in a similar way. 
5232
5233         <informalexample>
5234           <programlisting>
5235 <![CDATA[
5236   static int silence(struct snd_pcm_substream *substream, int channel,
5237                      snd_pcm_uframes_t pos, snd_pcm_uframes_t count);
5238 ]]>
5239           </programlisting>
5240         </informalexample>
5241       </para>
5242
5243       <para>
5244         The meanings of arguments are the same as in the
5245       <structfield>copy</structfield> 
5246       callback, although there is no <parameter>src/dst</parameter>
5247       argument. In the case of interleaved samples, the channel
5248       argument has no meaning, as well as on
5249       <structfield>copy</structfield> callback.  
5250       </para>
5251
5252       <para>
5253         The role of <structfield>silence</structfield> callback is to
5254         set the given amount 
5255         (<parameter>count</parameter>) of silence data at the
5256         specified offset (<parameter>pos</parameter>) on the hardware
5257         buffer. Suppose that the data format is signed (that is, the
5258         silent-data is 0), and the implementation using a memset-like
5259         function would be like: 
5260
5261         <informalexample>
5262           <programlisting>
5263 <![CDATA[
5264   my_memcpy(my_buffer + frames_to_bytes(runtime, pos), 0,
5265             frames_to_bytes(runtime, count));
5266 ]]>
5267           </programlisting>
5268         </informalexample>
5269       </para>
5270
5271       <para>
5272         In the case of non-interleaved samples, again, the
5273       implementation becomes a bit more complicated. See, for example,
5274       <filename>isa/gus/gus_pcm.c</filename>. 
5275       </para>
5276     </section>
5277
5278     <section id="buffer-and-memory-non-contiguous">
5279       <title>Non-Contiguous Buffers</title>
5280       <para>
5281         If your hardware supports the page table as in emu10k1 or the
5282       buffer descriptors as in via82xx, you can use the scatter-gather
5283       (SG) DMA. ALSA provides an interface for handling SG-buffers.
5284       The API is provided in <filename>&lt;sound/pcm.h&gt;</filename>. 
5285       </para>
5286
5287       <para>
5288         For creating the SG-buffer handler, call
5289         <function>snd_pcm_lib_preallocate_pages()</function> or
5290         <function>snd_pcm_lib_preallocate_pages_for_all()</function>
5291         with <constant>SNDRV_DMA_TYPE_DEV_SG</constant>
5292         in the PCM constructor like other PCI pre-allocator.
5293         You need to pass <function>snd_dma_pci_data(pci)</function>,
5294         where pci is the struct <structname>pci_dev</structname> pointer
5295         of the chip as well.
5296         The <type>struct snd_sg_buf</type> instance is created as
5297         substream-&gt;dma_private. You can cast
5298         the pointer like: 
5299
5300         <informalexample>
5301           <programlisting>
5302 <![CDATA[
5303   struct snd_sg_buf *sgbuf = (struct snd_sg_buf *)substream->dma_private;
5304 ]]>
5305           </programlisting>
5306         </informalexample>
5307       </para>
5308
5309       <para>
5310         Then call <function>snd_pcm_lib_malloc_pages()</function>
5311       in the <structfield>hw_params</structfield> callback
5312       as well as in the case of normal PCI buffer.
5313       The SG-buffer handler will allocate the non-contiguous kernel
5314       pages of the given size and map them onto the virtually contiguous
5315       memory.  The virtual pointer is addressed in runtime-&gt;dma_area.
5316       The physical address (runtime-&gt;dma_addr) is set to zero,
5317       because the buffer is physically non-contigous.
5318       The physical address table is set up in sgbuf-&gt;table.
5319       You can get the physical address at a certain offset via
5320       <function>snd_pcm_sgbuf_get_addr()</function>. 
5321       </para>
5322
5323       <para>
5324         When a SG-handler is used, you need to set
5325       <function>snd_pcm_sgbuf_ops_page</function> as
5326       the <structfield>page</structfield> callback.
5327       (See <link linkend="pcm-interface-operators-page-callback">
5328       <citetitle>page callback section</citetitle></link>.)
5329       </para>
5330
5331       <para>
5332         To release the data, call
5333       <function>snd_pcm_lib_free_pages()</function> in the
5334       <structfield>hw_free</structfield> callback as usual.
5335       </para>
5336     </section>
5337
5338     <section id="buffer-and-memory-vmalloced">
5339       <title>Vmalloc'ed Buffers</title>
5340       <para>
5341         It's possible to use a buffer allocated via
5342       <function>vmalloc</function>, for example, for an intermediate
5343       buffer. Since the allocated pages are not contiguous, you need
5344       to set the <structfield>page</structfield> callback to obtain
5345       the physical address at every offset. 
5346       </para>
5347
5348       <para>
5349         The implementation of <structfield>page</structfield> callback
5350         would be like this: 
5351
5352         <informalexample>
5353           <programlisting>
5354 <![CDATA[
5355   #include <linux/vmalloc.h>
5356
5357   /* get the physical page pointer on the given offset */
5358   static struct page *mychip_page(struct snd_pcm_substream *substream,
5359                                   unsigned long offset)
5360   {
5361           void *pageptr = substream->runtime->dma_area + offset;
5362           return vmalloc_to_page(pageptr);
5363   }
5364 ]]>
5365           </programlisting>
5366         </informalexample>
5367       </para>
5368     </section>
5369
5370   </chapter>
5371
5372
5373 <!-- ****************************************************** -->
5374 <!-- Proc Interface  -->
5375 <!-- ****************************************************** -->
5376   <chapter id="proc-interface">
5377     <title>Proc Interface</title>
5378     <para>
5379       ALSA provides an easy interface for procfs. The proc files are
5380       very useful for debugging. I recommend you set up proc files if
5381       you write a driver and want to get a running status or register
5382       dumps. The API is found in
5383       <filename>&lt;sound/info.h&gt;</filename>. 
5384     </para>
5385
5386     <para>
5387       To create a proc file, call
5388       <function>snd_card_proc_new()</function>. 
5389
5390       <informalexample>
5391         <programlisting>
5392 <![CDATA[
5393   struct snd_info_entry *entry;
5394   int err = snd_card_proc_new(card, "my-file", &entry);
5395 ]]>
5396         </programlisting>
5397       </informalexample>
5398
5399       where the second argument specifies the name of the proc file to be
5400     created. The above example will create a file
5401     <filename>my-file</filename> under the card directory,
5402     e.g. <filename>/proc/asound/card0/my-file</filename>. 
5403     </para>
5404
5405     <para>
5406     Like other components, the proc entry created via
5407     <function>snd_card_proc_new()</function> will be registered and
5408     released automatically in the card registration and release
5409     functions.
5410     </para>
5411
5412     <para>
5413       When the creation is successful, the function stores a new
5414     instance in the pointer given in the third argument.
5415     It is initialized as a text proc file for read only.  To use
5416     this proc file as a read-only text file as it is, set the read
5417     callback with a private data via 
5418      <function>snd_info_set_text_ops()</function>.
5419
5420       <informalexample>
5421         <programlisting>
5422 <![CDATA[
5423   snd_info_set_text_ops(entry, chip, my_proc_read);
5424 ]]>
5425         </programlisting>
5426       </informalexample>
5427     
5428     where the second argument (<parameter>chip</parameter>) is the
5429     private data to be used in the callbacks. The third parameter
5430     specifies the read buffer size and the fourth
5431     (<parameter>my_proc_read</parameter>) is the callback function, which
5432     is defined like
5433
5434       <informalexample>
5435         <programlisting>
5436 <![CDATA[
5437   static void my_proc_read(struct snd_info_entry *entry,
5438                            struct snd_info_buffer *buffer);
5439 ]]>
5440         </programlisting>
5441       </informalexample>
5442     
5443     </para>
5444
5445     <para>
5446     In the read callback, use <function>snd_iprintf()</function> for
5447     output strings, which works just like normal
5448     <function>printf()</function>.  For example,
5449
5450       <informalexample>
5451         <programlisting>
5452 <![CDATA[
5453   static void my_proc_read(struct snd_info_entry *entry,
5454                            struct snd_info_buffer *buffer)
5455   {
5456           struct my_chip *chip = entry->private_data;
5457
5458           snd_iprintf(buffer, "This is my chip!\n");
5459           snd_iprintf(buffer, "Port = %ld\n", chip->port);
5460   }
5461 ]]>
5462         </programlisting>
5463       </informalexample>
5464     </para>
5465
5466     <para>
5467     The file permissions can be changed afterwards.  As default, it's
5468     set as read only for all users.  If you want to add write
5469     permission for the user (root as default), do as follows:
5470
5471       <informalexample>
5472         <programlisting>
5473 <![CDATA[
5474  entry->mode = S_IFREG | S_IRUGO | S_IWUSR;
5475 ]]>
5476         </programlisting>
5477       </informalexample>
5478
5479     and set the write buffer size and the callback
5480
5481       <informalexample>
5482         <programlisting>
5483 <![CDATA[
5484   entry->c.text.write = my_proc_write;
5485 ]]>
5486         </programlisting>
5487       </informalexample>
5488     </para>
5489
5490     <para>
5491       For the write callback, you can use
5492     <function>snd_info_get_line()</function> to get a text line, and
5493     <function>snd_info_get_str()</function> to retrieve a string from
5494     the line. Some examples are found in
5495     <filename>core/oss/mixer_oss.c</filename>, core/oss/and
5496     <filename>pcm_oss.c</filename>. 
5497     </para>
5498
5499     <para>
5500       For a raw-data proc-file, set the attributes as follows:
5501
5502       <informalexample>
5503         <programlisting>
5504 <![CDATA[
5505   static struct snd_info_entry_ops my_file_io_ops = {
5506           .read = my_file_io_read,
5507   };
5508
5509   entry->content = SNDRV_INFO_CONTENT_DATA;
5510   entry->private_data = chip;
5511   entry->c.ops = &my_file_io_ops;
5512   entry->size = 4096;
5513   entry->mode = S_IFREG | S_IRUGO;
5514 ]]>
5515         </programlisting>
5516       </informalexample>
5517     </para>
5518
5519     <para>
5520       The callback is much more complicated than the text-file
5521       version. You need to use a low-level I/O functions such as
5522       <function>copy_from/to_user()</function> to transfer the
5523       data.
5524
5525       <informalexample>
5526         <programlisting>
5527 <![CDATA[
5528   static long my_file_io_read(struct snd_info_entry *entry,
5529                               void *file_private_data,
5530                               struct file *file,
5531                               char *buf,
5532                               unsigned long count,
5533                               unsigned long pos)
5534   {
5535           long size = count;
5536           if (pos + size > local_max_size)
5537                   size = local_max_size - pos;
5538           if (copy_to_user(buf, local_data + pos, size))
5539                   return -EFAULT;
5540           return size;
5541   }
5542 ]]>
5543         </programlisting>
5544       </informalexample>
5545     </para>
5546
5547   </chapter>
5548
5549
5550 <!-- ****************************************************** -->
5551 <!-- Power Management  -->
5552 <!-- ****************************************************** -->
5553   <chapter id="power-management">
5554     <title>Power Management</title>
5555     <para>
5556       If the chip is supposed to work with suspend/resume
5557       functions, you need to add power-management code to the
5558       driver. The additional code for power-management should be
5559       <function>ifdef</function>'ed with
5560       <constant>CONFIG_PM</constant>. 
5561     </para>
5562
5563         <para>
5564         If the driver <emphasis>fully</emphasis> supports suspend/resume
5565         that is, the device can be
5566         properly resumed to its state when suspend was called,
5567         you can set the <constant>SNDRV_PCM_INFO_RESUME</constant> flag
5568         in the pcm info field.  Usually, this is possible when the
5569         registers of the chip can be safely saved and restored to
5570         RAM. If this is set, the trigger callback is called with
5571         <constant>SNDRV_PCM_TRIGGER_RESUME</constant> after the resume
5572         callback completes. 
5573         </para>
5574
5575         <para>
5576         Even if the driver doesn't support PM fully but 
5577         partial suspend/resume is still possible, it's still worthy to
5578         implement suspend/resume callbacks. In such a case, applications
5579         would reset the status by calling
5580         <function>snd_pcm_prepare()</function> and restart the stream
5581         appropriately.  Hence, you can define suspend/resume callbacks
5582         below but don't set <constant>SNDRV_PCM_INFO_RESUME</constant>
5583         info flag to the PCM.
5584         </para>
5585         
5586         <para>
5587         Note that the trigger with SUSPEND can always be called when
5588         <function>snd_pcm_suspend_all</function> is called,
5589         regardless of the <constant>SNDRV_PCM_INFO_RESUME</constant> flag.
5590         The <constant>RESUME</constant> flag affects only the behavior
5591         of <function>snd_pcm_resume()</function>.
5592         (Thus, in theory,
5593         <constant>SNDRV_PCM_TRIGGER_RESUME</constant> isn't needed
5594         to be handled in the trigger callback when no
5595         <constant>SNDRV_PCM_INFO_RESUME</constant> flag is set.  But,
5596         it's better to keep it for compatibility reasons.)
5597         </para>
5598     <para>
5599       In the earlier version of ALSA drivers, a common
5600       power-management layer was provided, but it has been removed.
5601       The driver needs to define the suspend/resume hooks according to
5602       the bus the device is connected to.  In the case of PCI drivers, the
5603       callbacks look like below:
5604
5605       <informalexample>
5606         <programlisting>
5607 <![CDATA[
5608   #ifdef CONFIG_PM
5609   static int snd_my_suspend(struct pci_dev *pci, pm_message_t state)
5610   {
5611           .... /* do things for suspend */
5612           return 0;
5613   }
5614   static int snd_my_resume(struct pci_dev *pci)
5615   {
5616           .... /* do things for suspend */
5617           return 0;
5618   }
5619   #endif
5620 ]]>
5621         </programlisting>
5622       </informalexample>
5623     </para>
5624
5625     <para>
5626       The scheme of the real suspend job is as follows.
5627
5628       <orderedlist>
5629         <listitem><para>Retrieve the card and the chip data.</para></listitem>
5630         <listitem><para>Call <function>snd_power_change_state()</function> with
5631           <constant>SNDRV_CTL_POWER_D3hot</constant> to change the
5632           power status.</para></listitem>
5633         <listitem><para>Call <function>snd_pcm_suspend_all()</function> to suspend the running PCM streams.</para></listitem>
5634         <listitem><para>If AC97 codecs are used, call
5635         <function>snd_ac97_suspend()</function> for each codec.</para></listitem>
5636         <listitem><para>Save the register values if necessary.</para></listitem>
5637         <listitem><para>Stop the hardware if necessary.</para></listitem>
5638         <listitem><para>Disable the PCI device by calling
5639           <function>pci_disable_device()</function>.  Then, call
5640           <function>pci_save_state()</function> at last.</para></listitem>
5641       </orderedlist>
5642     </para>
5643
5644     <para>
5645       A typical code would be like:
5646
5647       <informalexample>
5648         <programlisting>
5649 <![CDATA[
5650   static int mychip_suspend(struct pci_dev *pci, pm_message_t state)
5651   {
5652           /* (1) */
5653           struct snd_card *card = pci_get_drvdata(pci);
5654           struct mychip *chip = card->private_data;
5655           /* (2) */
5656           snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
5657           /* (3) */
5658           snd_pcm_suspend_all(chip->pcm);
5659           /* (4) */
5660           snd_ac97_suspend(chip->ac97);
5661           /* (5) */
5662           snd_mychip_save_registers(chip);
5663           /* (6) */
5664           snd_mychip_stop_hardware(chip);
5665           /* (7) */
5666           pci_disable_device(pci);
5667           pci_save_state(pci);
5668           return 0;
5669   }
5670 ]]>
5671         </programlisting>
5672       </informalexample>
5673     </para>
5674
5675     <para>
5676     The scheme of the real resume job is as follows.
5677
5678     <orderedlist>
5679     <listitem><para>Retrieve the card and the chip data.</para></listitem>
5680     <listitem><para>Set up PCI. First, call <function>pci_restore_state()</function>.
5681         Then enable the pci device again by calling <function>pci_enable_device()</function>.
5682         Call <function>pci_set_master()</function> if necessary, too.</para></listitem>
5683     <listitem><para>Re-initialize the chip.</para></listitem>
5684     <listitem><para>Restore the saved registers if necessary.</para></listitem>
5685     <listitem><para>Resume the mixer, e.g. calling
5686     <function>snd_ac97_resume()</function>.</para></listitem>
5687     <listitem><para>Restart the hardware (if any).</para></listitem>
5688     <listitem><para>Call <function>snd_power_change_state()</function> with
5689         <constant>SNDRV_CTL_POWER_D0</constant> to notify the processes.</para></listitem>
5690     </orderedlist>
5691     </para>
5692
5693     <para>
5694     A typical code would be like:
5695
5696       <informalexample>
5697         <programlisting>
5698 <![CDATA[
5699   static int mychip_resume(struct pci_dev *pci)
5700   {
5701           /* (1) */
5702           struct snd_card *card = pci_get_drvdata(pci);
5703           struct mychip *chip = card->private_data;
5704           /* (2) */
5705           pci_restore_state(pci);
5706           pci_enable_device(pci);
5707           pci_set_master(pci);
5708           /* (3) */
5709           snd_mychip_reinit_chip(chip);
5710           /* (4) */
5711           snd_mychip_restore_registers(chip);
5712           /* (5) */
5713           snd_ac97_resume(chip->ac97);
5714           /* (6) */
5715           snd_mychip_restart_chip(chip);
5716           /* (7) */
5717           snd_power_change_state(card, SNDRV_CTL_POWER_D0);
5718           return 0;
5719   }
5720 ]]>
5721         </programlisting>
5722       </informalexample>
5723     </para>
5724
5725     <para>
5726         As shown in the above, it's better to save registers after
5727         suspending the PCM operations via
5728         <function>snd_pcm_suspend_all()</function> or
5729         <function>snd_pcm_suspend()</function>.  It means that the PCM
5730         streams are already stoppped when the register snapshot is
5731         taken.  But, remember that you don't have to restart the PCM
5732         stream in the resume callback. It'll be restarted via 
5733         trigger call with <constant>SNDRV_PCM_TRIGGER_RESUME</constant>
5734         when necessary.
5735     </para>
5736
5737     <para>
5738       OK, we have all callbacks now. Let's set them up. In the
5739       initialization of the card, make sure that you can get the chip
5740       data from the card instance, typically via
5741       <structfield>private_data</structfield> field, in case you
5742       created the chip data individually.
5743
5744       <informalexample>
5745         <programlisting>
5746 <![CDATA[
5747   static int __devinit snd_mychip_probe(struct pci_dev *pci,
5748                                const struct pci_device_id *pci_id)
5749   {
5750           ....
5751           struct snd_card *card;
5752           struct mychip *chip;
5753           ....
5754           card = snd_card_new(index[dev], id[dev], THIS_MODULE, NULL);
5755           ....
5756           chip = kzalloc(sizeof(*chip), GFP_KERNEL);
5757           ....
5758           card->private_data = chip;
5759           ....
5760   }
5761 ]]>
5762         </programlisting>
5763       </informalexample>
5764
5765         When you created the chip data with
5766         <function>snd_card_new()</function>, it's anyway accessible
5767         via <structfield>private_data</structfield> field.
5768
5769       <informalexample>
5770         <programlisting>
5771 <![CDATA[
5772   static int __devinit snd_mychip_probe(struct pci_dev *pci,
5773                                const struct pci_device_id *pci_id)
5774   {
5775           ....
5776           struct snd_card *card;
5777           struct mychip *chip;
5778           ....
5779           card = snd_card_new(index[dev], id[dev], THIS_MODULE,
5780                               sizeof(struct mychip));
5781           ....
5782           chip = card->private_data;
5783           ....
5784   }
5785 ]]>
5786         </programlisting>
5787       </informalexample>
5788
5789     </para>
5790
5791     <para>
5792       If you need a space to save the registers, allocate the
5793         buffer for it here, too, since it would be fatal
5794     if you cannot allocate a memory in the suspend phase.
5795     The allocated buffer should be released in the corresponding
5796     destructor.
5797     </para>
5798
5799     <para>
5800       And next, set suspend/resume callbacks to the pci_driver.
5801
5802       <informalexample>
5803         <programlisting>
5804 <![CDATA[
5805   static struct pci_driver driver = {
5806           .name = "My Chip",
5807           .id_table = snd_my_ids,
5808           .probe = snd_my_probe,
5809           .remove = __devexit_p(snd_my_remove),
5810   #ifdef CONFIG_PM
5811           .suspend = snd_my_suspend,
5812           .resume = snd_my_resume,
5813   #endif
5814   };
5815 ]]>
5816         </programlisting>
5817       </informalexample>
5818     </para>
5819
5820   </chapter>
5821
5822
5823 <!-- ****************************************************** -->
5824 <!-- Module Parameters  -->
5825 <!-- ****************************************************** -->
5826   <chapter id="module-parameters">
5827     <title>Module Parameters</title>
5828     <para>
5829       There are standard module options for ALSA. At least, each
5830       module should have the <parameter>index</parameter>,
5831       <parameter>id</parameter> and <parameter>enable</parameter>
5832       options. 
5833     </para>
5834
5835     <para>
5836       If the module supports multiple cards (usually up to
5837       8 = <constant>SNDRV_CARDS</constant> cards), they should be
5838       arrays. The default initial values are defined already as
5839       constants for easier programming:
5840
5841       <informalexample>
5842         <programlisting>
5843 <![CDATA[
5844   static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
5845   static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
5846   static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
5847 ]]>
5848         </programlisting>
5849       </informalexample>
5850     </para>
5851
5852     <para>
5853       If the module supports only a single card, they could be single
5854     variables, instead.  <parameter>enable</parameter> option is not
5855     always necessary in this case, but it would be better to have a
5856     dummy option for compatibility.
5857     </para>
5858
5859     <para>
5860       The module parameters must be declared with the standard
5861     <function>module_param()()</function>,
5862     <function>module_param_array()()</function> and
5863     <function>MODULE_PARM_DESC()</function> macros.
5864     </para>
5865
5866     <para>
5867       The typical coding would be like below:
5868
5869       <informalexample>
5870         <programlisting>
5871 <![CDATA[
5872   #define CARD_NAME "My Chip"
5873
5874   module_param_array(index, int, NULL, 0444);
5875   MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
5876   module_param_array(id, charp, NULL, 0444);
5877   MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
5878   module_param_array(enable, bool, NULL, 0444);
5879   MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
5880 ]]>
5881         </programlisting>
5882       </informalexample>
5883     </para>
5884
5885     <para>
5886       Also, don't forget to define the module description, classes,
5887       license and devices. Especially, the recent modprobe requires to
5888       define the module license as GPL, etc., otherwise the system is
5889       shown as <quote>tainted</quote>. 
5890
5891       <informalexample>
5892         <programlisting>
5893 <![CDATA[
5894   MODULE_DESCRIPTION("My Chip");
5895   MODULE_LICENSE("GPL");
5896   MODULE_SUPPORTED_DEVICE("{{Vendor,My Chip Name}}");
5897 ]]>
5898         </programlisting>
5899       </informalexample>
5900     </para>
5901
5902   </chapter>
5903
5904
5905 <!-- ****************************************************** -->
5906 <!-- How To Put Your Driver  -->
5907 <!-- ****************************************************** -->
5908   <chapter id="how-to-put-your-driver">
5909     <title>How To Put Your Driver Into ALSA Tree</title>
5910         <section>
5911         <title>General</title>
5912         <para>
5913         So far, you've learned how to write the driver codes.
5914         And you might have a question now: how to put my own
5915         driver into the ALSA driver tree?
5916         Here (finally :) the standard procedure is described briefly.
5917         </para>
5918
5919         <para>
5920         Suppose that you create a new PCI driver for the card
5921         <quote>xyz</quote>.  The card module name would be
5922         snd-xyz.  The new driver is usually put into the alsa-driver
5923         tree, <filename>alsa-driver/pci</filename> directory in
5924         the case of PCI cards.
5925         Then the driver is evaluated, audited and tested
5926         by developers and users.  After a certain time, the driver
5927         will go to the alsa-kernel tree (to the corresponding directory,
5928         such as <filename>alsa-kernel/pci</filename>) and eventually
5929         will be integrated into the Linux 2.6 tree (the directory would be
5930         <filename>linux/sound/pci</filename>).
5931         </para>
5932
5933         <para>
5934         In the following sections, the driver code is supposed
5935         to be put into alsa-driver tree. The two cases are covered:
5936         a driver consisting of a single source file and one consisting
5937         of several source files.
5938         </para>
5939         </section>
5940
5941         <section>
5942         <title>Driver with A Single Source File</title>
5943         <para>
5944         <orderedlist>
5945         <listitem>
5946         <para>
5947         Modify alsa-driver/pci/Makefile
5948         </para>
5949
5950         <para>
5951         Suppose you have a file xyz.c.  Add the following
5952         two lines
5953       <informalexample>
5954         <programlisting>
5955 <![CDATA[
5956   snd-xyz-objs := xyz.o
5957   obj-$(CONFIG_SND_XYZ) += snd-xyz.o
5958 ]]>
5959         </programlisting>
5960       </informalexample>
5961         </para>
5962         </listitem>
5963
5964         <listitem>
5965         <para>
5966         Create the Kconfig entry
5967         </para>
5968
5969         <para>
5970         Add the new entry of Kconfig for your xyz driver.
5971       <informalexample>
5972         <programlisting>
5973 <![CDATA[
5974   config SND_XYZ
5975           tristate "Foobar XYZ"
5976           depends on SND
5977           select SND_PCM
5978           help
5979             Say Y here to include support for Foobar XYZ soundcard.
5980
5981             To compile this driver as a module, choose M here: the module
5982             will be called snd-xyz.
5983 ]]>
5984         </programlisting>
5985       </informalexample>
5986
5987         the line, select SND_PCM, specifies that the driver xyz supports
5988         PCM.  In addition to SND_PCM, the following components are
5989         supported for select command:
5990         SND_RAWMIDI, SND_TIMER, SND_HWDEP, SND_MPU401_UART,
5991         SND_OPL3_LIB, SND_OPL4_LIB, SND_VX_LIB, SND_AC97_CODEC.
5992         Add the select command for each supported component.
5993         </para>
5994
5995         <para>
5996         Note that some selections imply the lowlevel selections.
5997         For example, PCM includes TIMER, MPU401_UART includes RAWMIDI,
5998         AC97_CODEC includes PCM, and OPL3_LIB includes HWDEP.
5999         You don't need to give the lowlevel selections again.
6000         </para>
6001
6002         <para>
6003         For the details of Kconfig script, refer to the kbuild
6004         documentation.
6005         </para>
6006
6007         </listitem>
6008
6009         <listitem>
6010         <para>
6011         Run cvscompile script to re-generate the configure script and
6012         build the whole stuff again.
6013         </para>
6014         </listitem>
6015         </orderedlist>
6016         </para>
6017         </section>
6018
6019         <section>
6020         <title>Drivers with Several Source Files</title>
6021         <para>
6022         Suppose that the driver snd-xyz have several source files.
6023         They are located in the new subdirectory,
6024         pci/xyz.
6025
6026         <orderedlist>
6027         <listitem>
6028         <para>
6029         Add a new directory (<filename>xyz</filename>) in
6030         <filename>alsa-driver/pci/Makefile</filename> as below
6031
6032       <informalexample>
6033         <programlisting>
6034 <![CDATA[
6035   obj-$(CONFIG_SND) += xyz/
6036 ]]>
6037         </programlisting>
6038       </informalexample>
6039         </para>
6040         </listitem>
6041
6042         <listitem>
6043         <para>
6044         Under the directory <filename>xyz</filename>, create a Makefile
6045
6046       <example>
6047         <title>Sample Makefile for a driver xyz</title>
6048         <programlisting>
6049 <![CDATA[
6050   ifndef SND_TOPDIR
6051   SND_TOPDIR=../..
6052   endif
6053
6054   include $(SND_TOPDIR)/toplevel.config
6055   include $(SND_TOPDIR)/Makefile.conf
6056
6057   snd-xyz-objs := xyz.o abc.o def.o
6058
6059   obj-$(CONFIG_SND_XYZ) += snd-xyz.o
6060
6061   include $(SND_TOPDIR)/Rules.make
6062 ]]>
6063         </programlisting>
6064       </example>
6065         </para>
6066         </listitem>
6067
6068         <listitem>
6069         <para>
6070         Create the Kconfig entry
6071         </para>
6072
6073         <para>
6074         This procedure is as same as in the last section.
6075         </para>
6076         </listitem>
6077
6078         <listitem>
6079         <para>
6080         Run cvscompile script to re-generate the configure script and
6081         build the whole stuff again.
6082         </para>
6083         </listitem>
6084         </orderedlist>
6085         </para>
6086         </section>
6087
6088   </chapter>
6089
6090 <!-- ****************************************************** -->
6091 <!-- Useful Functions  -->
6092 <!-- ****************************************************** -->
6093   <chapter id="useful-functions">
6094     <title>Useful Functions</title>
6095
6096     <section id="useful-functions-snd-printk">
6097       <title><function>snd_printk()</function> and friends</title>
6098       <para>
6099         ALSA provides a verbose version of the
6100       <function>printk()</function> function. If a kernel config
6101       <constant>CONFIG_SND_VERBOSE_PRINTK</constant> is set, this
6102       function prints the given message together with the file name
6103       and the line of the caller. The <constant>KERN_XXX</constant>
6104       prefix is processed as 
6105       well as the original <function>printk()</function> does, so it's
6106       recommended to add this prefix, e.g. 
6107
6108         <informalexample>
6109           <programlisting>
6110 <![CDATA[
6111   snd_printk(KERN_ERR "Oh my, sorry, it's extremely bad!\n");
6112 ]]>
6113           </programlisting>
6114         </informalexample>
6115       </para>
6116
6117       <para>
6118         There are also <function>printk()</function>'s for
6119       debugging. <function>snd_printd()</function> can be used for
6120       general debugging purposes. If
6121       <constant>CONFIG_SND_DEBUG</constant> is set, this function is
6122       compiled, and works just like
6123       <function>snd_printk()</function>. If the ALSA is compiled
6124       without the debugging flag, it's ignored. 
6125       </para>
6126
6127       <para>
6128         <function>snd_printdd()</function> is compiled in only when
6129       <constant>CONFIG_SND_DEBUG_VERBOSE</constant> is set. Please note
6130       that <constant>CONFIG_SND_DEBUG_VERBOSE</constant> is not set as default
6131       even if you configure the alsa-driver with
6132       <option>--with-debug=full</option> option. You need to give
6133       explicitly <option>--with-debug=detect</option> option instead. 
6134       </para>
6135     </section>
6136
6137     <section id="useful-functions-snd-bug">
6138       <title><function>snd_BUG()</function></title>
6139       <para>
6140         It shows the <computeroutput>BUG?</computeroutput> message and
6141       stack trace as well as <function>snd_BUG_ON</function> at the point.
6142       It's useful to show that a fatal error happens there. 
6143       </para>
6144       <para>
6145          When no debug flag is set, this macro is ignored. 
6146       </para>
6147     </section>
6148
6149     <section id="useful-functions-snd-bug-on">
6150       <title><function>snd_BUG_ON()</function></title>
6151       <para>
6152         <function>snd_BUG_ON()</function> macro is similar with
6153         <function>WARN_ON()</function> macro. For example,  
6154
6155         <informalexample>
6156           <programlisting>
6157 <![CDATA[
6158   snd_BUG_ON(!pointer);
6159 ]]>
6160           </programlisting>
6161         </informalexample>
6162
6163         or it can be used as the condition,
6164         <informalexample>
6165           <programlisting>
6166 <![CDATA[
6167   if (snd_BUG_ON(non_zero_is_bug))
6168           return -EINVAL;
6169 ]]>
6170           </programlisting>
6171         </informalexample>
6172
6173       </para>
6174
6175       <para>
6176         The macro takes an conditional expression to evaluate.
6177         When <constant>CONFIG_SND_DEBUG</constant>, is set, the
6178         expression is actually evaluated. If it's non-zero, it shows
6179         the warning message such as
6180         <computeroutput>BUG? (xxx)</computeroutput>
6181         normally followed by stack trace.  It returns the evaluated
6182         value.
6183         When no <constant>CONFIG_SND_DEBUG</constant> is set, this
6184         macro always returns zero.
6185       </para>
6186
6187     </section>
6188
6189   </chapter>
6190
6191
6192 <!-- ****************************************************** -->
6193 <!-- Acknowledgments  -->
6194 <!-- ****************************************************** -->
6195   <chapter id="acknowledgments">
6196     <title>Acknowledgments</title>
6197     <para>
6198       I would like to thank Phil Kerr for his help for improvement and
6199       corrections of this document. 
6200     </para>
6201     <para>
6202     Kevin Conder reformatted the original plain-text to the
6203     DocBook format.
6204     </para>
6205     <para>
6206     Giuliano Pochini corrected typos and contributed the example codes
6207     in the hardware constraints section.
6208     </para>
6209   </chapter>
6210 </book>