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