The branch main has been updated by christos:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=d00b32c2d70ce79fddb94dd990d2b162c8fc3a85

commit d00b32c2d70ce79fddb94dd990d2b162c8fc3a85
Author:     Christos Margiolis <[email protected]>
AuthorDate: 2026-03-03 11:32:42 +0000
Commit:     Christos Margiolis <[email protected]>
CommitDate: 2026-03-03 11:32:42 +0000

    Revert "mixer(8): Implement hot-swapping"
    
    We now have devd rules in snd.conf that achieve this in a much cleaner
    way.
    
    This reverts commit 9aac27599acaffa21ff69c5be8a2d71d29cc3d6b.
    
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D55532
---
 usr.sbin/mixer/mixer.8 | 75 +++-------------------------------------------
 usr.sbin/mixer/mixer.c | 81 +++++---------------------------------------------
 2 files changed, 11 insertions(+), 145 deletions(-)

diff --git a/usr.sbin/mixer/mixer.8 b/usr.sbin/mixer/mixer.8
index d7de675bceee..bdff0dbedc11 100644
--- a/usr.sbin/mixer/mixer.8
+++ b/usr.sbin/mixer/mixer.8
@@ -19,7 +19,7 @@
 .\" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 .\" THE SOFTWARE.
 .\"
-.Dd October 31, 2025
+.Dd February 26, 2026
 .Dt MIXER 8
 .Os
 .Sh NAME
@@ -28,7 +28,7 @@
 .Sh SYNOPSIS
 .Nm
 .Op Fl f Ar device
-.Op Fl d Ar pcmX | X Op Fl V Ar voss_device:mode
+.Op Fl d Ar pcmX | X
 .Op Fl os
 .Op Ar dev Ns Op Cm \&. Ns Ar control Ns Op Cm \&= Ns Ar value
 .Ar ...
@@ -43,7 +43,7 @@ The
 utility is used to set and display soundcard mixer device controls.
 .Pp
 The options are as follows:
-.Bl -tag -width "-V voss_device:mode"
+.Bl -tag -width "-d pcmN | N"
 .It Fl a
 Print the values for all mixer devices available in the system
 .Pq see Sx FILES .
@@ -54,30 +54,6 @@ where X is the device's unit number (e.g for pcm0, the unit 
number is 0).
 See
 .Sx EXAMPLES
 on how to list all available audio devices in the system.
-.Pp
-There is also the possibility of hot-swapping to the new default device if
-.Xr virtual_oss 8
-exists in the system and is running, in which case the
-.Fl V
-option needs to be specified as well.
-.Pp
-Hot-swapping generally cannot happen with plain
-.Xr sound 4 ,
-so the user has to restart the track in order to get sound coming out of the
-new default device.
-This is because applications usually open a device at the start of the track
-and do not check for default device changes, in order to open the new device
-mid-track.
-.Xr virtual_oss 8 ,
-on the other hand, can do hot-swapping, because it creates a virtual device for
-applications to open, and then does all the necessary routing and conversions
-to the appropriate device(s).
-.Pp
-Note that hot-swapping will work only for applications that are using
-.Xr virtual_oss 8
-devices, and not plain
-.Xr sound 4
-ones.
 .It Fl f Ar device
 Open
 .Ar device
@@ -90,33 +66,6 @@ Print mixer values in a format suitable for use inside 
scripts.
 The mixer's header (name, audio card name, ...) will not be printed.
 .It Fl s
 Print only the recording source(s) of the mixer device.
-.It Fl V Ar voss_device:mode
-Specify a
-.Xr virtual_oss 8
-control device, as well as a mode (see below), in order to hot-swap devices.
-This option is meant to only be used in combination with the
-.Fl d
-option.
-.Pp
-The available modes are as follows:
-.Bl -column play
-.It Sy Mode Ta Sy Action
-.It all Ta Playback and recording
-.It play Ta Playback
-.It rec Ta Recording
-.El
-.Pp
-The
-.Pa mode
-part is needed, so that
-.Nm
-will not accidentally hot-swap both the recording and playback device in
-.Xr virtual_oss 8 ,
-if only one direction is to be hot-swapped.
-.Pp
-See
-.Sx EXAMPLES
-on how to use this option.
 .El
 .Pp
 The list of mixer devices that may be modified are:
@@ -316,26 +265,10 @@ $ mixer -f /dev/mixer0 -o > info
 \&...
 $ mixer -f /dev/mixer0 `cat info`
 .Ed
-.Pp
-Suppose
-.Xr virtual_oss 8
-is running with
-.Pa /dev/vdsp.ctl
-as its control device, and
-.Pa pcm0
-as the playback device.
-Change the default device to
-.Pa pcm1 ,
-and hot-swap to it for both recording and playback in
-.Xr virtual_oss 8 :
-.Bd -literal -offset indent
-$ mixer -d pcm1 -V /dev/vdsp.ctl:all
-.Ed
 .Sh SEE ALSO
 .Xr mixer 3 ,
 .Xr sound 4 ,
-.Xr sysctl 8 ,
-.Xr virtual_oss 8
+.Xr sysctl 8
 .Sh HISTORY
 The
 .Nm
diff --git a/usr.sbin/mixer/mixer.c b/usr.sbin/mixer/mixer.c
index 15e0eae69952..a0fc9705a301 100644
--- a/usr.sbin/mixer/mixer.c
+++ b/usr.sbin/mixer/mixer.c
@@ -20,9 +20,6 @@
  * THE SOFTWARE.
  */
 
-#include <sys/sysctl.h>
-#include <sys/wait.h>
-
 #include <err.h>
 #include <errno.h>
 #include <mixer.h>
@@ -43,7 +40,7 @@ static void printall(struct mixer *, int);
 static void printminfo(struct mixer *, int);
 static void printdev(struct mixer *, int);
 static void printrecsrc(struct mixer *, int); /* XXX: change name */
-static int set_dunit(struct mixer *, int, char *);
+static int set_dunit(struct mixer *, int);
 /* Control handlers */
 static int mod_volume(struct mix_dev *, void *);
 static int mod_mute(struct mix_dev *, void *);
@@ -57,13 +54,13 @@ main(int argc, char *argv[])
 {
        struct mixer *m;
        mix_ctl_t *cp;
-       char *name = NULL, buf[NAME_MAX], *vctl = NULL;
+       char *name = NULL, buf[NAME_MAX];
        char *p, *q, *devstr, *ctlstr, *valstr = NULL;
        int dunit, i, n, pall = 1, shorthand;
        int aflag = 0, dflag = 0, oflag = 0, sflag = 0;
        int ch;
 
-       while ((ch = getopt(argc, argv, "ad:f:hosV:")) != -1) {
+       while ((ch = getopt(argc, argv, "ad:f:hos")) != -1) {
                switch (ch) {
                case 'a':
                        aflag = 1;
@@ -86,9 +83,6 @@ main(int argc, char *argv[])
                case 's':
                        sflag = 1;
                        break;
-               case 'V':
-                       vctl = optarg;
-                       break;
                case 'h': /* FALLTHROUGH */
                case '?':
                default:
@@ -125,7 +119,7 @@ main(int argc, char *argv[])
        initctls(m);
 
        if (dflag) {
-               if (set_dunit(m, dunit, vctl) < 0)
+               if (set_dunit(m, dunit) < 0)
                        goto parse;
                else {
                        /*
@@ -217,8 +211,7 @@ next:
 static void __dead2
 usage(void)
 {
-       fprintf(stderr, "usage: %1$s [-f device] [-d pcmN | N "
-           "[-V voss_device:mode]] [-os] [dev[.control[=value]]] ...\n"
+       fprintf(stderr, "usage: %1$s [-f device] [-d pcmN | N] [-os] 
[dev[.control[=value]]] ...\n"
            "       %1$s [-os] -a\n"
            "       %1$s -h\n", getprogname());
        exit(1);
@@ -331,32 +324,9 @@ printrecsrc(struct mixer *m, int oflag)
 }
 
 static int
-set_dunit(struct mixer *m, int dunit, char *vctl)
+set_dunit(struct mixer *m, int dunit)
 {
-       const char *opt;
-       char *dev, *mode;
-       char buf[32];
-       size_t size;
-       int n, rc;
-
-       /*
-        * Issue warning in case of hw.snd.basename_clone being unset. Omit the
-        * check and warning if the -V flag is used, since the user is most
-        * likely to be aware of this, and the warning might be confusing.
-        */
-       if (vctl == NULL) {
-               size = sizeof(int);
-               if (sysctlbyname("hw.snd.basename_clone", &n, &size,
-                   NULL, 0) < 0) {
-                       warn("hw.snd.basename_clone failed");
-                       return (-1);
-               }
-               if (n == 0) {
-                       warnx("warning: hw.snd.basename_clone not set. "
-                           "/dev/dsp is managed externally and does not "
-                           "change with the default unit change here.");
-               }
-       }
+       int n;
 
        if ((n = mixer_get_dunit()) < 0) {
                warn("cannot get default unit");
@@ -368,43 +338,6 @@ set_dunit(struct mixer *m, int dunit, char *vctl)
        }
        printf("default_unit: %d -> %d\n", n, dunit);
 
-       /* Hot-swap in case virtual_oss exists and is running. */
-       if (vctl != NULL) {
-               dev = strsep(&vctl, ":");
-               mode = vctl;
-               if (dev == NULL || mode == NULL) {
-                       warnx("voss_device:mode tuple incomplete");
-                       return (-1);
-               }
-               if (strcmp(mode, "all") == 0)
-                       opt = "-f";
-               else if (strcmp(mode, "play") == 0)
-                       opt = "-P";
-               else if (strcmp(mode, "rec") == 0)
-                       opt = "-R";
-               else {
-                       warnx("please use one of the following modes: "
-                           "all, play, rec");
-                       return (-1);
-               }
-               snprintf(buf, sizeof(buf), "/dev/dsp%d", dunit);
-               switch (fork()) {
-               case -1:
-                       warn("fork");
-                       break;
-               case 0:
-                       rc = execl("/usr/sbin/virtual_oss_cmd",
-                           "virtual_oss_cmd", dev, opt, buf, NULL);
-                       if (rc < 0)
-                               warn("virtual_oss_cmd");
-                       _exit(0);
-               default:
-                       if (wait(NULL) < 0)
-                               warn("wait");
-                       break;
-               }
-       }
-
        return (0);
 }
 

Reply via email to