Commit graph

3159 commits

Author SHA1 Message Date
Takashi Iwai
2c68581c50 Update include/sound/asound.h from 4.6-pre kernel uapi
The inclusion of <linux/*.h> is done conditionally for Linux in order
to improve portability.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-03-04 10:57:21 +01:00
Thomas Klausner
19fbcb7ce4 topology: Remove unnecessary includes
Headers are already included in local.h.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-03-04 10:57:21 +01:00
Thomas Klausner
52a9649437 Use alphasort where versionsort is not available.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-03-03 16:19:06 +01:00
Thomas Klausner
0e3e574012 Only use F_SETSIG fcntl where it exists.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-03-03 16:19:00 +01:00
Thomas Klausner
31230b2427 Add more compatibility defines.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-03-03 16:18:54 +01:00
Thomas Klausner
e0d52fdd8a Introduce bswap.h for portable definitions of byte swap macros.
Signed-off-by: Thomas Klausner <wiz@NetBSD.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-03-03 16:18:10 +01:00
Thomas Klausner
25e6b5b473 Define some types if missing
Include Linux headers on Linux only.
For portability with non-Linux.

Signed-off-by: Thomas Klausner <wiz@NetBSD.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-03-03 10:59:52 +01:00
Thomas Klausner
623d3be080 Define EBADFD in terms of EBADF if it doesn't exist.
For portability on FreeBSD, NetBSD and probably others.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-02-24 16:35:26 +01:00
Takashi Sakamoto
6d4736197e control: keep consistent usage of assertion
In most codes for control APIs, assertions are used to check given
arguments from applications. If the arguments are not expected, the
application is forced to abort. When NDEBUG is defined in the beginning
of the codes, no checks are performed.

Although, in snd_ctl_elem_set_bytes(), assertion is used with condition
statement. There's an intention to check the arguments regardless of
NDEBUG. However, this is not the same fashion in the codes.

This commit applies the same fashion to the function, to keep consistent
usage of assertion.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-02-22 15:00:43 +01:00
Takashi Sakamoto
2b0ea7eefb control: initialize element channel values according to identification number at adding a new element
In ALSA control core, there're two ways to identify elements. One is by
numid. Another is by name/index. The former way is lighter than the latter
way.

In control API, after adding elements by snd_ctl_elem_add_integer() and
snd_ctl_elem_add_integer64(), these functions initialize value of each
channel. When executing this operation, used ID information is still given
by applications. Although, in this time, the element can be identified
according to numid.

This commit uses the numid instead of name/index pair.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-02-21 18:49:48 +01:00
Takashi Sakamoto
c2518902c5 control: fulfill a description about element type with integer64
In UAPI of asound.h, there're 6 types of control element; boolean, integer,
enumerated, bytes, iec958 and integer64 (The none type seems to be added to
start the value at non-zero). Although, current description in alsa-lib
has a lack of integer64 type.

This commit fulfil the type.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-02-21 18:47:12 +01:00
Liam Girdwood
c3c9206d12 topology: fix debug output to print correct "max" value.
Debug log is printing num_regs instead of max in the max section.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-02-01 16:28:01 +01:00
Jaroslav Kysela
df20aa2a1e coverity fixes 2016-01-12 16:26:58 +01:00
Jaroslav Kysela
0f4f48d377 pcm_hw: fix possible memory leak (coverity) 2016-01-12 16:07:16 +01:00
Jaroslav Kysela
822e781a47 control: add missing asserts to ctl_elem_set functions 2016-01-12 15:58:25 +01:00
Jaroslav Kysela
c7e8708441 config files - do not include ucm/topology configuration when not requested 2016-01-12 14:56:18 +01:00
Mengdong Lin
b917a0c0a8 topology: Quit and show error message on big-endian machines
This tool can only support little-endian machines atm.
Many codes directly refer to  __le32/__le64 variables of ABI objects,
so will be broken on big-endian machines.

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-11-19 10:17:45 +01:00
Mengdong Lin
cde9a37c06 topology: Not compare a for loop iterator with ABI __le32 variables
The iterator 'i' in a loop is a usually a integer. But ABI variables use
type _le32, which is converted to host unsigned integer. Comparing them
can cause gcc warning: comparison between signed and unsigned integer
expressions[-Wsign-compare].

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-11-19 10:17:36 +01:00
Mengdong Lin
8504a41d94 topology: Fix comparison of unsigned expression < 0
Fix gcc warning: comparison of unsigned expression < 0 is always false
[-Wtype-limits]

The ABI object channel->id is _le32 and is converted to host unsigned
integer. It cannot be < 0.

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-11-18 14:57:14 +01:00
Mengdong Lin
605551aec6 topology: Remove unused variables
Fix gcc warning when -Wunused-variable is set.

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-11-18 14:55:30 +01:00
Mengdong Lin
a661f144d9 topology: Remove unused function write_data_block()
Fix gcc warning: 'write_data_block' defined but not used
[-Wunused-function].

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-11-18 14:55:15 +01:00
Vinod Koul
9b09a3d500 topology: open topology files with O_TRUNC
The topology file if exists needs to rewritten, so we need to open these
files with O_TRUNC flag as well

Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-11-18 14:54:49 +01:00
Peter Rosin
57ae61ce27 pcm: simple: Fix asserts
Do not error out on the boundaries.

Signed-off-by: Peter Rosin <peda@axentia.se>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2015-11-11 16:21:06 +01:00
Takashi Iwai
3f1dba9a82 topology: Add missing include sys/stat.h
Necessary for proper definitions of S_IRUSR & co.  Otherwise it
results in compile errors with old glibc:
  parser.c: In function 'snd_tplg_build_file':
  parser.c:262: error: 'S_IRUSR' undeclared (first use in this function)
  parser.c:262: error: (Each undeclared identifier is reported only once
  parser.c:262: error: for each function it appears in.)

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-11-09 13:37:26 +01:00
Jaroslav Kysela
fe6b51c77a Release v1.1.0
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2015-11-09 08:39:18 +01:00
Takashi Iwai
0b48b61798 topology: Add missing prototypes for new functions
The prototypes for some functions that have been added in the recent
changes are missing, which leads to compile warnings.  Let's fix.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-11-09 08:38:41 +01:00
Liam Girdwood
7eb683ee39 topology: remove little endian type from userspace header
Use a generic uint64_t for formats instead of an ABI endian specific
__le64 type.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-11-09 08:38:35 +01:00
Mengdong Lin
93b420b9e2 topology: Add C API support for PCM
PCM objects can be added by C API. And this is used to create FE DAIs
and DAI links in kernel.

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2015-11-05 14:53:24 +01:00
Vedang Patel
2286a6fd4d topology: Add C API support for BE and CC Links.
Adding BE and CC Link support for C API reference. This will be used
to populate the .hw_params element for BE and .params for CC, enabling
us to update already existing DAI Links created by the kernel.

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2015-11-05 14:53:24 +01:00
Mengdong Lin
ed5ee7ec2e topology: ABI - Rename dai_elems to pcm_elems in manifest
This field is the number of PCM objects (a pair of FE DAI and DAI link).

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2015-11-05 14:53:24 +01:00
Mengdong Lin
9977accde2 topology: ABI - Change stream formats to a bitwise flag
The toplogy user space tool will generate this bitwise flag by using
SNDRV_PCM_FORMAT_* exposed by asound.h, and the topology core will copy
this flag when generating DAI streams.

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Acked-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2015-11-05 14:53:24 +01:00
Vedang Patel
f934c3de4b topology: ABI - Use __le32 instead of __u32 in snd_soc_tplg_dapm_widget
This fixes the endianness of the ABI parameters in the struct.
The field 'num_kcontrols' is also extended from 16 bits to 32 bits.

Signed-off-by: Vedang Patel <vedang.patel@intel.com>
Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2015-11-05 14:53:24 +01:00
Vedang Patel
c5f53c1b13 topology: ABI - Remove unused struct snd_soc_tplg_stream_config
The struct snd_soc_tplg_stream_config is no longer used in the ABI.
We are using snd_soc_tplg_stream instead.

Signed-off-by: Vedang Patel <vedang.patel@intel.com>
Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2015-11-05 14:53:24 +01:00
Mengdong Lin
79ef136f02 topology: ABI - Remove tdm_slot & dai_fmt from snd_soc_tplg_stream
These two fields are line parameters for BE/CC links and
should not be from toplogy but from ACPI.

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2015-11-05 14:53:24 +01:00
Vedang Patel
368e4f2a89 topology: ABI - Separate PCM & BE/CC link support and bump ABI version to 4
The struct snd_soc_tplg_pcm_dai is renamed to snd_soc_tplg_pcm.
This struct will now be used to handle data related to PCMs
(FE DAI & DAI links). It's not for BE, because BE DAI mappings will be
provided by ACPI/FDT data.

Remove the unused struct snd_soc_tplg_pcm_cfg_caps. We are using
snd_soc_tplg_stream and snd_soc_stream_caps instead.

Define the topology type for BE DAI link: SND_SOC_TPLG_TYPE_BACKEND_LINK.

Define struct snd_soc_tplg_link_config to configure BE & CC links.

Bump ABI version to 4.

Signed-off-by: Vedang Patel <vedang.patel@intel.com>
Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2015-11-05 14:53:24 +01:00
Vedang Patel
b73d50fc2b topology: ABI - Add name element to snd_soc_tplg_stream
For codec-codec links, this struct will be mapped to the DAI links's
params, which is struct snd_soc_pcm_stream and it needs a stream name.

Signed-off-by: Vedang Patel <vedang.patel@intel.com>
Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2015-11-05 14:53:24 +01:00
Mike Frysinger
561df6fda0 support building w/out System V shared memory
Some systems, like Android/Bionic, do not support SysV at all.
Let the configure script detect if the header is available, and
if not, automatically disable the pieces that require it.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-11-05 14:37:11 +01:00
Mike Frysinger
7e90867487 pcm: drop unused sys/shm.h inclusion
This header isn't used in these files, so stop trying to include it.
This helps builds on systems that don't provide the header (such as
Android/Bionic).

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-11-05 14:37:10 +01:00
Mike Frysinger
5a24987575 move page helpers to common code
If you build with --disable-pcm, the rawmidi code fails to link because
it uses the page_size helper declared in local.h, but the page_* funcs
are in the pcm mmap module.  Move these funcs into conf.c so that they
are always available to the rest of the system.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-11-05 14:37:10 +01:00
Takashi Iwai
8985742d91 pcm: dmix: Handle slave PCM xrun and unexpected states properly
Currently, dmix & co plugins ignore the XRUN state of the slave PCM.
It's (supposedly) because dmix deals with the PCM in a free-wheel
mode, which is equivalent with XRUN.  But, this difference (whether
the correct freewheel or XRUN) should be done by the kernel, and we
may have an XRUN state indeed (e.g. via xrun injection).

This patch fixes this lack of behavior, to handle PCM xrun and does
prepare when the slave PCM is in such a state.

Also, the patch consolidates the prepare callback for all dmix, dsnoop
and dshare plugins, and fix/cleanup a bit for dshare/dsnoop codes to
align with dsnoop code.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-11-05 14:37:10 +01:00
Mike Frysinger
99dc70f023 fix _GNU_SOURCE handling & header inclusion
The configure script blindly adds -D_GNU_SOURCE to all build settings,
even on non-GNU systems.  This isn't too much of a big deal (even if
it uses the wrong variable -- CFLAGS instead of CPPFLAGS), except that
the alsa-lib source itself determines whether to use GNU features when
this is defined (such as versionsort).  So when we build on non-glibc
systems, we get build failures like:
src/ucm/parser.c:1268:18: error: 'versionsort' undeclared (first use in this function)
 #define SORTFUNC versionsort
                  ^
src/ucm/parser.c:1272:54: note: in expansion of macro 'SORTFUNC'
  err = scandir(filename, &namelist, filename_filter, SORTFUNC);
                                                      ^

The correct way to add these flags is to use the autoconf helper
AC_USE_SYSTEM_EXTENSIONS.  Unfortunately, that triggers some more
bugs in the alsa build.  This macro adds defines to config.h and
not directly to CPPFLAGS, so it relies on files correctly including
config.h before anything else.  A number of alsa files do not do
this leading to build failures.  The fix there is to shuffle the
includes around so that the local ones come first.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-10-12 10:36:15 +02:00
Takashi Sakamoto
08c4b3b0ad hwdep: add FireWire digi00x/tascam driver support
Linux 4.4 newly support these drivers. Their hardware dependent interfaces
give functionalities to get hardware information, to lock/unlock kernel
streaming and to receive lock status event.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-10-05 23:43:29 +02:00
Takashi Iwai
f07e9af7ee pcm: ladspa: Fix segfault due to a wrong channel reference
Because of a typo in referencing the input array in
snd_pcm_ladspa_allocate_memory(), ladpsa PCM plugin may cause a
segfault at prepare when input and and output channels are different:
 #0  0x00007ffff78623ef in snd_pcm_ladspa_allocate_memory (pcm=0x626fa0, pcm=0x626fa0, pcm=0x626fa0, ladspa=0x621ad0) at pcm_ladspa.c:753
 #1  snd_pcm_ladspa_init (pcm=0x626fa0) at pcm_ladspa.c:834
 #2  0x00007ffff7842946 in snd_pcm_plugin_prepare (pcm=0x626fa0) at pcm_plugin.c:171
 #3  0x00007ffff784290f in snd_pcm_plugin_prepare (pcm=0x62c760) at pcm_plugin.c:162
 #4  0x000000000040256a in ?? ()
 #5  0x00007ffff7222ec5 in __libc_start_main (main=0x401d80,a argc=4, argv=0x7fffffffde28, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffde18) at libc-start.c:287
 #6  0x0000000000402fdd in ?? ()

This patch corrects the wrong reference.

Reported-and-tested-by: Andreas Hartmann <mail@andreashartmann.eu>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-10-02 11:55:36 +02:00
Mengdong Lin
8b0a5310bf topology: Add API to set a vendor specific version number
This vendor-specific version number is optional. It will be written to
the 'version' field of each block header of the binary toplogy data file.
The vendor driver can check this number for further processing in kernel.

The topology ABI version number is still stored in the 'abi' field of
block headers.

Signed-off-by: Mengdong Lin <mengdong.lin@intel.com>
Reviewed-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-09-23 10:45:52 +02:00
Khem Raj
c82417650a build: Do not try to detect cross-compiler
cross compilers are passed via path may not be a gcc based cross
compiler in such cases this check fails and try's to force gcc based
cross compiler detection, This code is a convenience that limits the
build system

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-09-23 10:39:01 +02:00
Takashi Iwai
9a2fe5399c topology: pcm: Remove unused variables
Fix gcc warnings:
  pcm.c: In function ‘tplg_parse_stream_cfg’:
  pcm.c:160:6: warning: unused variable ‘ret’ [-Wunused-variable]
    int ret;
        ^
  pcm.c: In function ‘split_format’:
  pcm.c:267:13: warning: unused variable ‘ret’ [-Wunused-variable]
    int i = 0, ret;
               ^

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-09-08 22:15:02 +02:00
Takashi Iwai
e38b13f128 topology: parser: Add missing return value to snd_tplg_set_manifest_data()
Spotted by gcc warning:
  parser.c: In function ‘snd_tplg_set_manifest_data’:
  parser.c:361:1: warning: control reaches end of non-void function [-Wreturn-type]
   }
   ^

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-09-08 22:14:19 +02:00
Takashi Iwai
5b21400c42 topology: data: Fix wrong size check in tplg_parse_data_hex()
A wrong, uninitialized variable is referred as the size to check in
tplg_parse_data_hex().  Spotted by gcc warning:
  data.c: In function ‘tplg_parse_data_hex’:
  data.c:228:5: warning: ‘esize’ may be used uninitialized in this function [-Wmaybe-uninitialized]
    if (esize > TPLG_MAX_PRIV_SIZE) {
        ^
  data.c:211:12: note: ‘esize’ was declared here
    int size, esize, off, num;
              ^

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-09-08 22:11:48 +02:00
Takashi Iwai
f41fe763e9 topology: ctl: Fix access type checks
Fix the wrong bit-and check by adding parentheses properly:
  ctl.c: In function ‘tplg_add_bytes’:
  ctl.c:868:22: warning: suggest parentheses around comparison in operand of ‘&’ [-Wparentheses]
     if (be->hdr.access & SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE
                        ^

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-09-08 22:09:44 +02:00
Takashi Iwai
76b9cae026 topology: builder: Fix possibly uninitialized variable in write_elem_block()
When an empty list is passed to write_elem_block(), it may leave
vendor_type uninitialized.
  builder.c: In function ‘write_elem_block’:
  builder.c:127:8: warning: ‘vendor_type’ may be used uninitialized in this function [-Wmaybe-uninitialized]
    ret = write_block_header(tplg, tplg_type, vendor_type,
          ^
  builder.c:114:33: note: ‘vendor_type’ was declared here
    int ret, wsize = 0, count = 0, vendor_type;
                                   ^

Add an immediate return for count = 0 for avoiding it, and simplify
the code initializing vendor_type without using a one-shot loop.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2015-09-08 22:08:22 +02:00