Page MenuHomeFreeBSD

D54168.id167833.diff
No OneTemporary

D54168.id167833.diff

diff --git a/sys/dev/speaker/spkr.c b/sys/dev/speaker/spkr.c
--- a/sys/dev/speaker/spkr.c
+++ b/sys/dev/speaker/spkr.c
@@ -27,7 +27,7 @@
static struct cdevsw spkr_cdevsw = {
.d_version = D_VERSION,
- .d_flags = D_NEEDGIANT,
+ .d_flags = 0,
.d_open = spkropen,
.d_close = spkrclose,
.d_write = spkrwrite,
@@ -74,23 +74,27 @@
(void) printf("tone: thz=%d centisecs=%d\n", thz, centisecs);
#endif /* DEBUG */
- /* set timer to generate clicks at given frequency in Hertz */
+ /*
+ * Acquire the i8254 clock, configure it to drive the speaker
+ * signal, and turn on the speaker.
+ */
if (timer_spkr_acquire()) {
- /* enter list of waiting procs ??? */
return;
}
- disable_intr();
+ /* Configure the speaker with the tone frequency. */
timer_spkr_setfreq(thz);
- enable_intr();
/*
- * Set timeout to endtone function, then give up the timeslice.
- * This is so other processes can execute while the tone is being
+ * Make the current thread sleep while the tone is being
* emitted.
*/
timo = centisecs * hz / 100;
if (timo > 0)
tsleep(&endtone, SPKRPRI | PCATCH, "spkrtn", timo);
+
+ /*
+ * Turn off the speaker and release the i8254 clock.
+ */
timer_spkr_release();
}

File Metadata

Mime Type
text/plain
Expires
Wed, Sep 2, 4:40 AM (15 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37907393
Default Alt Text
D54168.id167833.diff (1 KB)

Event Timeline