git: 072d5b98c431 - main - sysbeep: Adjust interface to take a duration as a sbt
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 03 Nov 2021 22:04:16 UTC
The branch main has been updated by imp:
URL: https://cgit.FreeBSD.org/src/commit/?id=072d5b98c4318e20248a6fbea4a5ca7c96992cac
commit 072d5b98c4318e20248a6fbea4a5ca7c96992cac
Author: Warner Losh <imp@FreeBSD.org>
AuthorDate: 2021-11-03 21:55:32 +0000
Commit: Warner Losh <imp@FreeBSD.org>
CommitDate: 2021-11-03 22:03:51 +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
---
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 075b23597f68..567cdd2890d5 100644
--- a/sys/dev/vt/vt_core.c
+++ b/sys/dev/vt/vt_core.c
@@ -118,8 +118,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)
@@ -1100,7 +1100,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
@@ -1116,7 +1116,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 07abac23c9da..d770cf808f5f 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 497e09f86488..ffe014eb8b42 100644
--- a/sys/sys/systm.h
+++ b/sys/sys/systm.h
@@ -467,7 +467,7 @@ int SAN_INTERCEPTOR(casueword)(volatile u_long *p, u_long oldval,
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);