From nobody Mon Mar 25 22:28:54 2024 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4V3SJl13nTz5FRWf; Mon, 25 Mar 2024 22:28:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4V3SJl0VbZz4Bdf; Mon, 25 Mar 2024 22:28:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1711405735; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=u3q9q0YSWkrScazbKEzeron80YEjBYrx7W36kS3KREg=; b=EbVZ/TeT5z/jBDa17gQSgNKrk6OSevHK20Wx5BH4KLKX+VS6kyhuIvosbQX1WXzbaVQhIZ PlctbYNG1veh8uayQ1NodbMwsCe/bCCAB4DEO1oqIKsEeF9fEgHuwESq5etx7JNHB71do+ /nbXh2fgjFh2zUo+TJ386j5VTuOfVYL9l9zXLEXBTS7RxTPlwNWoX4JmWYXWY58BhlOA5E aaK/oOUyl8kEcJg4eUpTP62s7oTh8kmhBxWYYfyBm+LL+Ag3YUS7sFOp1eOfzS/ZF4AAJC LCEkkvdxhkjglA6eakj4UTCT+44Mx0f8eIvQRHrtWUMdZBoZGHtNud51IEpo7w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1711405735; a=rsa-sha256; cv=none; b=emky7g1+DHdYR6JOX9pnPpac1kXpkk/UyuiJDJZKFc7ZyEBuVZX5OGv5NFd8ly8NpM3fIn Qgfw6HAA+I9pmXTWTADBVOwXWQueFTa+r/wH41zxfafjPNHR4+1ZH/9aHUaUqT0XFDtTuL QYHwtb66t6UJtctl+irG/i+F5/fZgr4ptiooURBB29Mdy3eme/D7sj2fpH++ZWsEKYPzYG cU4PftjNy8fM8hIesG9ReAda3YNXTauLCtdKuan7RNwi1j4p/fNTzDdJ/OqMVsXDd0IT8P fQvzV0T2f6YCbuzVkCmuCOEIzAfX71yq0WEE3brhBkdSpxV3+77I9JB2OkAnlg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1711405735; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=u3q9q0YSWkrScazbKEzeron80YEjBYrx7W36kS3KREg=; b=RWwKHY6eGsdOC1+OtmqKDfBeBoVHhK7Ji9c6vXKEI1S5dnOljlFx/kvI5OzSpjVl9XzfFW mxxKdc5yijLgK5WRBHXaBjMDUKqQXz6yD4pJLTM+vsJftCZpRNEY5jJFyTTEShH31Xd+BF N1v95zQdTyvS7aiGsRc+0cLfPQWORXQe6SWLeKgoYWvHPYeZJcImSU3jZ3JEtLyAL6Nul7 acI7uyNMDHcVS3sqgZikqc4hcP5aR7VKD5AOWLjx4pwBM64pqe12PfZ46WzuclRHzyEuVT U6JOC6RxnGhGGHOdAP71AiN9wPTd/y52w/grTQr5htaVuSH6wWg54QLWPuK3pA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4V3SJl01t9zZtw; Mon, 25 Mar 2024 22:28:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 42PMSsc5043666; Mon, 25 Mar 2024 22:28:54 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 42PMSsd5043663; Mon, 25 Mar 2024 22:28:54 GMT (envelope-from git) Date: Mon, 25 Mar 2024 22:28:54 GMT Message-Id: <202403252228.42PMSsd5043663@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Ed Maste Subject: git: 602ea0ced129 - stable/14 - sound: Fix OSS API requests for more than 8 channels List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: emaste X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 602ea0ced129b89c972b6ce6fe5242d0a379c33b Auto-Submitted: auto-generated The branch stable/14 has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=602ea0ced129b89c972b6ce6fe5242d0a379c33b commit 602ea0ced129b89c972b6ce6fe5242d0a379c33b Author: Florian Walpen AuthorDate: 2023-11-25 00:04:34 +0000 Commit: Ed Maste CommitDate: 2024-03-25 22:28:30 +0000 sound: Fix OSS API requests for more than 8 channels Audio devices with more than 8 channels need bitperfect mode to operate, the vchan processing chain is limited to 8 channels. For these devices, let applications properly select a certain number of channels supported by the driver, instead of mapping the request to a vchan format. Reviewed by: emaste Pull Request: https://github.com/freebsd/freebsd-src/pull/914 (cherry picked from commit 61c831679615d2a03a494bd7f3627fb945f2795c) --- sys/dev/sound/pcm/dsp.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c index 5aa7979b98c9..9040c77893d4 100644 --- a/sys/dev/sound/pcm/dsp.c +++ b/sys/dev/sound/pcm/dsp.c @@ -1502,24 +1502,31 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode, case SOUND_PCM_WRITE_CHANNELS: /* case SNDCTL_DSP_CHANNELS: ( == SOUND_PCM_WRITE_CHANNELS) */ - if (*arg_i < 0) { + if (*arg_i < 0 || *arg_i > AFMT_CHANNEL_MAX) { *arg_i = 0; ret = EINVAL; break; } if (*arg_i != 0) { - struct pcmchan_matrix *m; - uint32_t ext; + uint32_t ext = 0; tmp = 0; - if (*arg_i > SND_CHN_MAX) - *arg_i = SND_CHN_MAX; + /* + * Map channel number to surround sound formats. + * Devices that need bitperfect mode to operate + * (e.g. more than SND_CHN_MAX channels) are not + * subject to any mapping. + */ + if (!(dsp_get_flags(i_dev) & SD_F_BITPERFECT)) { + struct pcmchan_matrix *m; - m = feeder_matrix_default_channel_map(*arg_i); - if (m != NULL) - ext = m->ext; - else - ext = 0; + if (*arg_i > SND_CHN_MAX) + *arg_i = SND_CHN_MAX; + + m = feeder_matrix_default_channel_map(*arg_i); + if (m != NULL) + ext = m->ext; + } PCM_ACQUIRE_QUICK(d); if (wrch) {