~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/sound/cards/pcmtest.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/sound/cards/pcmtest.rst (Architecture ppc) and /Documentation/sound/cards/pcmtest.rst (Architecture i386)


  1 .. SPDX-License-Identifier: GPL-2.0                 1 .. SPDX-License-Identifier: GPL-2.0
  2                                                     2 
  3 The Virtual PCM Test Driver                         3 The Virtual PCM Test Driver
  4 ===========================                         4 ===========================
  5                                                     5 
  6 The Virtual PCM Test Driver emulates a generic      6 The Virtual PCM Test Driver emulates a generic PCM device, and can be used for
  7 testing/fuzzing of the userspace ALSA applicat      7 testing/fuzzing of the userspace ALSA applications, as well as for testing/fuzzing of
  8 the PCM middle layer. Additionally, it can be       8 the PCM middle layer. Additionally, it can be used for simulating hard to reproduce
  9 problems with PCM devices.                          9 problems with PCM devices.
 10                                                    10 
 11 What can this driver do?                           11 What can this driver do?
 12 ~~~~~~~~~~~~~~~~~~~~~~~~                           12 ~~~~~~~~~~~~~~~~~~~~~~~~
 13                                                    13 
 14 At this moment the driver can do the following     14 At this moment the driver can do the following things:
 15         * Simulate both capture and playback p     15         * Simulate both capture and playback processes
 16         * Generate random or pattern-based cap     16         * Generate random or pattern-based capturing data
 17         * Inject delays into the playback and      17         * Inject delays into the playback and capturing processes
 18         * Inject errors during the PCM callbac     18         * Inject errors during the PCM callbacks
 19                                                    19 
 20 It supports up to 8 substreams and 4 channels.     20 It supports up to 8 substreams and 4 channels. Also it supports both interleaved and
 21 non-interleaved access modes.                      21 non-interleaved access modes.
 22                                                    22 
 23 Also, this driver can check the playback strea     23 Also, this driver can check the playback stream for containing the predefined pattern,
 24 which is used in the corresponding selftest (a     24 which is used in the corresponding selftest (alsa/pcmtest-test.sh) to check the PCM middle
 25 layer data transferring functionality. Additio     25 layer data transferring functionality. Additionally, this driver redefines the default
 26 RESET ioctl, and the selftest covers this PCM      26 RESET ioctl, and the selftest covers this PCM API functionality as well.
 27                                                    27 
 28 Configuration                                      28 Configuration
 29 -------------                                      29 -------------
 30                                                    30 
 31 The driver has several parameters besides the      31 The driver has several parameters besides the common ALSA module parameters:
 32                                                    32 
 33         * fill_mode (bool) - Buffer fill mode      33         * fill_mode (bool) - Buffer fill mode (see below)
 34         * inject_delay (int)                       34         * inject_delay (int)
 35         * inject_hwpars_err (bool)                 35         * inject_hwpars_err (bool)
 36         * inject_prepare_err (bool)                36         * inject_prepare_err (bool)
 37         * inject_trigger_err (bool)                37         * inject_trigger_err (bool)
 38                                                    38 
 39                                                    39 
 40 Capture Data Generation                            40 Capture Data Generation
 41 -----------------------                            41 -----------------------
 42                                                    42 
 43 The driver has two modes of data generation: t     43 The driver has two modes of data generation: the first (0 in the fill_mode parameter)
 44 means random data generation, the second (1 in     44 means random data generation, the second (1 in the fill_mode) - pattern-based
 45 data generation. Let's look at the second mode     45 data generation. Let's look at the second mode.
 46                                                    46 
 47 First of all, you may want to specify the patt     47 First of all, you may want to specify the pattern for data generation. You can do it
 48 by writing the pattern to the debugfs file. Th     48 by writing the pattern to the debugfs file. There are pattern buffer debugfs entries
 49 for each channel, as well as entries which con     49 for each channel, as well as entries which contain the pattern buffer length.
 50                                                    50 
 51         * /sys/kernel/debug/pcmtest/fill_patte     51         * /sys/kernel/debug/pcmtest/fill_pattern[0-3]
 52         * /sys/kernel/debug/pcmtest/fill_patte     52         * /sys/kernel/debug/pcmtest/fill_pattern[0-3]_len
 53                                                    53 
 54 To set the pattern for the channel 0 you can e     54 To set the pattern for the channel 0 you can execute the following command:
 55                                                    55 
 56 .. code-block:: bash                               56 .. code-block:: bash
 57                                                    57 
 58         echo -n mycoolpattern > /sys/kernel/de     58         echo -n mycoolpattern > /sys/kernel/debug/pcmtest/fill_pattern0
 59                                                    59 
 60 Then, after every capture action performed on      60 Then, after every capture action performed on the 'pcmtest' device the buffer for the
 61 channel 0 will contain 'mycoolpatternmycoolpat     61 channel 0 will contain 'mycoolpatternmycoolpatternmycoolpatternmy...'.
 62                                                    62 
 63 The pattern itself can be up to 4096 bytes lon     63 The pattern itself can be up to 4096 bytes long.
 64                                                    64 
 65 Delay injection                                    65 Delay injection
 66 ---------------                                    66 ---------------
 67                                                    67 
 68 The driver has 'inject_delay' parameter, which     68 The driver has 'inject_delay' parameter, which has very self-descriptive name and
 69 can be used for time delay/speedup simulations     69 can be used for time delay/speedup simulations. The parameter has integer type, and
 70 it means the delay added between module's inte     70 it means the delay added between module's internal timer ticks.
 71                                                    71 
 72 If the 'inject_delay' value is positive, the b     72 If the 'inject_delay' value is positive, the buffer will be filled slower, if it is
 73 negative - faster. You can try it yourself by      73 negative - faster. You can try it yourself by starting a recording in any
 74 audiorecording application (like Audacity) and     74 audiorecording application (like Audacity) and selecting the 'pcmtest' device as a
 75 source.                                            75 source.
 76                                                    76 
 77 This parameter can be also used for generating     77 This parameter can be also used for generating a huge amount of sound data in a very
 78 short period of time (with the negative 'injec     78 short period of time (with the negative 'inject_delay' value).
 79                                                    79 
 80 Errors injection                                   80 Errors injection
 81 ----------------                                   81 ----------------
 82                                                    82 
 83 This module can be used for injecting errors i     83 This module can be used for injecting errors into the PCM communication process. This
 84 action can help you to figure out how the user     84 action can help you to figure out how the userspace ALSA program behaves under unusual
 85 circumstances.                                     85 circumstances.
 86                                                    86 
 87 For example, you can make all 'hw_params' PCM      87 For example, you can make all 'hw_params' PCM callback calls return EBUSY error by
 88 writing '1' to the 'inject_hwpars_err' module      88 writing '1' to the 'inject_hwpars_err' module parameter:
 89                                                    89 
 90 .. code-block:: bash                               90 .. code-block:: bash
 91                                                    91 
 92         echo 1 > /sys/module/snd_pcmtest/param     92         echo 1 > /sys/module/snd_pcmtest/parameters/inject_hwpars_err
 93                                                    93 
 94 Errors can be injected into the following PCM      94 Errors can be injected into the following PCM callbacks:
 95                                                    95 
 96         * hw_params (EBUSY)                        96         * hw_params (EBUSY)
 97         * prepare (EINVAL)                         97         * prepare (EINVAL)
 98         * trigger (EINVAL)                         98         * trigger (EINVAL)
 99                                                    99 
100 Playback test                                     100 Playback test
101 -------------                                     101 -------------
102                                                   102 
103 This driver can be also used for the playback     103 This driver can be also used for the playback functionality testing - every time you
104 write the playback data to the 'pcmtest' PCM d    104 write the playback data to the 'pcmtest' PCM device and close it, the driver checks the
105 buffer for containing the looped pattern (whic    105 buffer for containing the looped pattern (which is specified in the fill_pattern
106 debugfs file for each channel). If the playbac    106 debugfs file for each channel). If the playback buffer content represents the looped
107 pattern, 'pc_test' debugfs entry is set into '    107 pattern, 'pc_test' debugfs entry is set into '1'. Otherwise, the driver sets it to '0'.
108                                                   108 
109 ioctl redefinition test                           109 ioctl redefinition test
110 -----------------------                           110 -----------------------
111                                                   111 
112 The driver redefines the 'reset' ioctl, which     112 The driver redefines the 'reset' ioctl, which is default for all PCM devices. To test
113 this functionality, we can trigger the reset i    113 this functionality, we can trigger the reset ioctl and check the 'ioctl_test' debugfs
114 entry:                                            114 entry:
115                                                   115 
116 .. code-block:: bash                              116 .. code-block:: bash
117                                                   117 
118         cat /sys/kernel/debug/pcmtest/ioctl_te    118         cat /sys/kernel/debug/pcmtest/ioctl_test
119                                                   119 
120 If the ioctl is triggered successfully, this f    120 If the ioctl is triggered successfully, this file will contain '1', and '0' otherwise.
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php