git: 87586bff11ec - stable/13 - sysbeep: Adjust interface to take a duration as a sbt

From: Warner Losh <imp_at_FreeBSD.org>
Date: Fri, 19 Nov 2021 04:53:29 UTC
The branch stable/13 has been updated by imp:

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

commit 87586bff11ec0a84eba3b83b68030f9e0db429bf
Author:     Warner Losh <imp@FreeBSD.org>
AuthorDate: 2021-11-19 04:51:13 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2021-11-19 04:52:22 +0000

    sysbeep: Adjust interface to take a duration as a sbt
    
    Change the 'period' argument to 'duration' and change its type to
    sbintime_t so we can more easily express different durations.
    
    Reviewed by:    tsoome, glebius
    Differential Revision:  https://reviews.freebsd.org/D32619
    
    (cherry picked from commit 072d5b98c4318e20248a6fbea4a5ca7c96992cac)
---
 sys/dev/mlx/mlx.c         |  6 +++---
 sys/dev/syscons/syscons.c |  7 ++++++-
 sys/dev/vt/vt_core.c      |  8 ++++----
 sys/i386/i386/trap.c      |  4 ++--
 sys/kern/kern_cons.c      | 13 +++++++------
 sys/sys/systm.h           |  2 +-
 6 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/sys/dev/mlx/mlx.c b/sys/dev/mlx/mlx.c
index bafd0902e09a..f5b023eafc9c 100644
--- a/sys/dev/mlx/mlx.c
+++ b/sys/dev/mlx/mlx.c
@@ -1083,7 +1083,7 @@ mlx_periodic(void *data)
 
 	mlx_pause_action(sc);		/* pause is running */
 	sc->mlx_pause.mp_when = 0;
-	sysbeep(500, hz);
+	sysbeep(500, SBT_1S);
 
 	/* 
 	 * Bus pause still running?
@@ -1095,9 +1095,9 @@ mlx_periodic(void *data)
 	if (time_second >= sc->mlx_pause.mp_howlong) {
 	    mlx_pause_action(sc);
 	    sc->mlx_pause.mp_which = 0;	/* pause is complete */
-	    sysbeep(500, hz);
+	    sysbeep(500, SBT_1S);
 	} else {
-	    sysbeep((time_second % 5) * 100 + 500, hz/8);
+	    sysbeep((time_second % 5) * 100 + 500, SBT_1S / 8);
 	}
 
 	/* 
diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c
index 6a389604d3ab..6c349668410d 100644
--- a/sys/dev/syscons/syscons.c
+++ b/sys/dev/syscons/syscons.c
@@ -4258,6 +4258,11 @@ sc_respond(scr_stat *scp, const u_char *p, int count, int wakeup)
 	}
 }
 
+/*
+ * pitch is the divisor for 1.193182MHz PIT clock. By dividing 1193172 / pitch,
+ * we convert it back to Hz.
+ * duration is in ticks of 1/hz.
+ */
 void
 sc_bell(scr_stat *scp, int pitch, int duration)
 {
@@ -4277,7 +4282,7 @@ sc_bell(scr_stat *scp, int pitch, int duration)
 	} else if (duration != 0 && pitch != 0) {
 		if (scp != scp->sc->cur_scp)
 			pitch *= 2;
-		sysbeep(1193182 / pitch, duration);
+		sysbeep(1193182 / pitch, SBT_1S * duration / hz);
 	}
 }
 
diff --git a/sys/dev/vt/vt_core.c b/sys/dev/vt/vt_core.c
index 884050f4f0c5..708e5ba70f15 100644
--- a/sys/dev/vt/vt_core.c
+++ b/sys/dev/vt/vt_core.c
@@ -119,8 +119,8 @@ const struct terminal_class vt_termclass = {
 #define	VT_TIMERFREQ	25
 
 /* Bell pitch/duration. */
-#define	VT_BELLDURATION	((5 * hz + 99) / 100)
-#define	VT_BELLPITCH	800
+#define	VT_BELLDURATION	(SBT_1S / 20)
+#define	VT_BELLPITCH	(1193182 / 800) /* Approx 1491Hz */
 
 #define	VT_UNIT(vw)	((vw)->vw_device->vd_unit * VT_MAXWINDOWS + \
 			(vw)->vw_number)
@@ -1101,7 +1101,7 @@ vtterm_bell(struct terminal *tm)
 	if (vd->vd_flags & VDF_QUIET_BELL)
 		return;
 
-	sysbeep(1193182 / VT_BELLPITCH, VT_BELLDURATION);
+	sysbeep(VT_BELLPITCH, VT_BELLDURATION);
 }
 
 static void
@@ -1117,7 +1117,7 @@ vtterm_beep(struct terminal *tm, u_int param)
 		return;
 	}
 
-	period = ((param >> 16) & 0xffff) * hz / 1000;
+	period = ((param >> 16) & 0xffff) * SBT_1MS;
 	freq = 1193182 / (param & 0xffff);
 
 	sysbeep(freq, period);
diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c
index 045478149be5..6f70a88b62b8 100644
--- a/sys/i386/i386/trap.c
+++ b/sys/i386/i386/trap.c
@@ -414,7 +414,7 @@ user_trctrap_out:
 #endif
 			if (time_second - lastalert > 10) {
 				log(LOG_WARNING, "NMI: power fail\n");
-				sysbeep(880, hz);
+				sysbeep(880, SBT_1S);
 				lastalert = time_second;
 			}
 			return;
@@ -671,7 +671,7 @@ kernel_trctrap:
 #ifdef POWERFAIL_NMI
 			if (time_second - lastalert > 10) {
 				log(LOG_WARNING, "NMI: power fail\n");
-				sysbeep(880, hz);
+				sysbeep(880, SBT_1S);
 				lastalert = time_second;
 			}
 			return;
diff --git a/sys/kern/kern_cons.c b/sys/kern/kern_cons.c
index 780fce00387d..d33811f1e3c8 100644
--- a/sys/kern/kern_cons.c
+++ b/sys/kern/kern_cons.c
@@ -658,7 +658,7 @@ constty_timeout(void *arg)
 
 #ifdef HAS_TIMER_SPKR
 
-static int beeping;
+static bool beeping;
 static struct callout beeping_timer;
 
 static void
@@ -666,11 +666,11 @@ sysbeepstop(void *chan)
 {
 
 	timer_spkr_release();
-	beeping = 0;
+	beeping = false;
 }
 
 int
-sysbeep(int pitch, int period)
+sysbeep(int pitch, sbintime_t duration)
 {
 
 	if (timer_spkr_acquire()) {
@@ -681,8 +681,9 @@ sysbeep(int pitch, int period)
 	}
 	timer_spkr_setfreq(pitch);
 	if (!beeping) {
-		beeping = period;
-		callout_reset(&beeping_timer, period, sysbeepstop, NULL);
+		beeping = true;
+		callout_reset_sbt(&beeping_timer, duration, 0, sysbeepstop,
+		    NULL, C_PREL(5));
 	}
 	return (0);
 }
@@ -701,7 +702,7 @@ SYSINIT(sysbeep, SI_SUB_SOFTINTR, SI_ORDER_ANY, sysbeep_init, NULL);
  */
 
 int
-sysbeep(int pitch __unused, int period __unused)
+sysbeep(int pitch __unused, sbintime_t duration __unused)
 {
 
 	return (ENODEV);
diff --git a/sys/sys/systm.h b/sys/sys/systm.h
index 8080f22266e2..619de40a20e8 100644
--- a/sys/sys/systm.h
+++ b/sys/sys/systm.h
@@ -445,7 +445,7 @@ int	casueword(volatile u_long *p, u_long oldval, u_long *oldvalp,
 
 void	realitexpire(void *);
 
-int	sysbeep(int hertz, int period);
+int	sysbeep(int hertz, sbintime_t duration);
 
 void	hardclock(int cnt, int usermode);
 void	hardclock_sync(int cpu);