arm64: dts: qcom: sm8550: add TRNG node
[linux-modified.git] / Documentation / sound / cards / pcmtest.rst
1 .. SPDX-License-Identifier: GPL-2.0
2
3 The Virtual PCM Test Driver
4 ===========================
5
6 The Virtual PCM Test Driver emulates a generic PCM device, and can be used for
7 testing/fuzzing of the userspace ALSA applications, as well as for testing/fuzzing of
8 the PCM middle layer. Additionally, it can be used for simulating hard to reproduce
9 problems with PCM devices.
10
11 What can this driver do?
12 ~~~~~~~~~~~~~~~~~~~~~~~~
13
14 At this moment the driver can do the following things:
15         * Simulate both capture and playback processes
16         * Generate random or pattern-based capturing data
17         * Inject delays into the playback and capturing processes
18         * Inject errors during the PCM callbacks
19
20 It supports up to 8 substreams and 4 channels. Also it supports both interleaved and
21 non-interleaved access modes.
22
23 Also, this driver can check the playback stream for containing the predefined pattern,
24 which is used in the corresponding selftest (alsa/pcmtest-test.sh) to check the PCM middle
25 layer data transferring functionality. Additionally, this driver redefines the default
26 RESET ioctl, and the selftest covers this PCM API functionality as well.
27
28 Configuration
29 -------------
30
31 The driver has several parameters besides the common ALSA module parameters:
32
33         * fill_mode (bool) - Buffer fill mode (see below)
34         * inject_delay (int)
35         * inject_hwpars_err (bool)
36         * inject_prepare_err (bool)
37         * inject_trigger_err (bool)
38
39
40 Capture Data Generation
41 -----------------------
42
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 the fill_mode) - pattern-based
45 data generation. Let's look at the second mode.
46
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. There are pattern buffer debugfs entries
49 for each channel, as well as entries which contain the pattern buffer length.
50
51         * /sys/kernel/debug/pcmtest/fill_pattern[0-3]
52         * /sys/kernel/debug/pcmtest/fill_pattern[0-3]_len
53
54 To set the pattern for the channel 0 you can execute the following command:
55
56 .. code-block:: bash
57
58         echo -n mycoolpattern > /sys/kernel/debug/pcmtest/fill_pattern0
59
60 Then, after every capture action performed on the 'pcmtest' device the buffer for the
61 channel 0 will contain 'mycoolpatternmycoolpatternmycoolpatternmy...'.
62
63 The pattern itself can be up to 4096 bytes long.
64
65 Delay injection
66 ---------------
67
68 The driver has 'inject_delay' parameter, which has very self-descriptive name and
69 can be used for time delay/speedup simulations. The parameter has integer type, and
70 it means the delay added between module's internal timer ticks.
71
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 starting a recording in any
74 audiorecording application (like Audacity) and selecting the 'pcmtest' device as a
75 source.
76
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 'inject_delay' value).
79
80 Errors injection
81 ----------------
82
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 userspace ALSA program behaves under unusual
85 circumstances.
86
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 parameter:
89
90 .. code-block:: bash
91
92         echo 1 > /sys/module/snd_pcmtest/parameters/inject_hwpars_err
93
94 Errors can be injected into the following PCM callbacks:
95
96         * hw_params (EBUSY)
97         * prepare (EINVAL)
98         * trigger (EINVAL)
99
100 Playback test
101 -------------
102
103 This driver can be also used for the playback functionality testing - every time you
104 write the playback data to the 'pcmtest' PCM device and close it, the driver checks the
105 buffer for containing the looped pattern (which is specified in the fill_pattern
106 debugfs file for each channel). If the playback buffer content represents the looped
107 pattern, 'pc_test' debugfs entry is set into '1'. Otherwise, the driver sets it to '0'.
108
109 ioctl redefinition test
110 -----------------------
111
112 The driver redefines the 'reset' ioctl, which is default for all PCM devices. To test
113 this functionality, we can trigger the reset ioctl and check the 'ioctl_test' debugfs
114 entry:
115
116 .. code-block:: bash
117
118         cat /sys/kernel/debug/pcmtest/ioctl_test
119
120 If the ioctl is triggered successfully, this file will contain '1', and '0' otherwise.