From d5692c28559a118c9fc0436bfd4d7617bd885ee6 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Thu, 13 Mar 2025 19:19:41 +0100 Subject: [PATCH] Remove pcspkrd The PC speaker device is not a general purpose audio device, but only capable of playing beeps. While pcspkrd does currently get built, it never actually gets started at startup. There is also no program anywhere inside Redox OS capable of playing any sound through pcspkrd. And finally basically the thing it is used for on modern systems is to emit a beep when pressing backspace in a VT while there is no input buffered. I personally find that beep rather annoying and have disabled the Linux counterpart to pcspkrd on my system because of this. --- Cargo.lock | 10 ----- Cargo.toml | 1 - README.md | 1 - audio/pcspkrd/Cargo.toml | 11 ----- audio/pcspkrd/src/main.rs | 46 -------------------- audio/pcspkrd/src/pcspkr.rs | 35 --------------- audio/pcspkrd/src/scheme.rs | 87 ------------------------------------- 7 files changed, 191 deletions(-) delete mode 100644 audio/pcspkrd/Cargo.toml delete mode 100644 audio/pcspkrd/src/main.rs delete mode 100644 audio/pcspkrd/src/pcspkr.rs delete mode 100644 audio/pcspkrd/src/scheme.rs diff --git a/Cargo.lock b/Cargo.lock index 147a51493d..d7cd2c0362 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -984,16 +984,6 @@ dependencies = [ "toml 0.5.11", ] -[[package]] -name = "pcspkrd" -version = "0.1.0" -dependencies = [ - "common", - "libredox", - "redox-daemon", - "redox_syscall", -] - [[package]] name = "pico-args" version = "0.5.0" diff --git a/Cargo.toml b/Cargo.toml index 62d4865e02..14dd17de9d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,6 @@ members = [ "audio/ac97d", "audio/ihdad", - "audio/pcspkrd", "audio/sb16d", "graphics/bgad", diff --git a/README.md b/README.md index 41a8b5fff7..682cd06b74 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,6 @@ This document covers the driver details. - ixgbed - Intel 10 Gigabit ethernet - nvmed - NVMe interface - pcid - PCI interface with extensions for PCI Express -- pcspkrd - PC speaker - ps2d - PS/2 interface - rtl8139d - Realtek ethernet - rtl8168d - Realtek ethernet diff --git a/audio/pcspkrd/Cargo.toml b/audio/pcspkrd/Cargo.toml deleted file mode 100644 index 555c25f566..0000000000 --- a/audio/pcspkrd/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "pcspkrd" -version = "0.1.0" -authors = ["Tibor Nagy "] -edition = "2018" - -[dependencies] -common = { path = "../../common" } -redox_syscall = "0.5" -redox-daemon = "0.1" -libredox = "0.1.3" diff --git a/audio/pcspkrd/src/main.rs b/audio/pcspkrd/src/main.rs deleted file mode 100644 index d021257710..0000000000 --- a/audio/pcspkrd/src/main.rs +++ /dev/null @@ -1,46 +0,0 @@ -mod pcspkr; -mod scheme; - -use std::fs::File; -use std::io::{Read, Write}; - -use syscall::call::iopl; -use syscall::data::Packet; -use syscall::scheme::SchemeMut; - -use redox_daemon::Daemon; - -use self::pcspkr::Pcspkr; -use self::scheme::PcspkrScheme; - -fn main() { - Daemon::new(move |daemon| { - unsafe { iopl(3).unwrap() }; - - let mut socket = File::create(":pcspkr").expect("pcspkrd: failed to create pcspkr scheme"); - daemon.ready().expect("failed to notify parent"); - - let pcspkr = Pcspkr::new(); - println!(" + pcspkr"); - - let mut scheme = PcspkrScheme { - pcspkr, - handle: None, - next_id: 0, - }; - - libredox::call::setrens(0, 0).expect("pcspkrd: failed to enter null namespace"); - - loop { - let mut packet = Packet::default(); - socket - .read(&mut packet) - .expect("pcspkrd: failed to read events from pcspkr scheme"); - scheme.handle(&mut packet); - socket - .write(&packet) - .expect("pcspkrd: failed to write responses to pcspkr scheme"); - } - }) - .expect("pcspkrd: failed to daemonize"); -} diff --git a/audio/pcspkrd/src/pcspkr.rs b/audio/pcspkrd/src/pcspkr.rs deleted file mode 100644 index 945421c2eb..0000000000 --- a/audio/pcspkrd/src/pcspkr.rs +++ /dev/null @@ -1,35 +0,0 @@ -use common::io::{Io, Pio}; - -pub struct Pcspkr { - command: Pio, - channel: Pio, - gate: Pio, -} - -const PIT_FREQUENCY: usize = 0x1234DC; - -impl Pcspkr { - pub fn new() -> Pcspkr { - Pcspkr { - command: Pio::new(0x43), - channel: Pio::new(0x42), - gate: Pio::new(0x61), - } - } - - pub fn set_frequency(&mut self, frequency: usize) { - let div = PIT_FREQUENCY.checked_div(frequency).unwrap_or(0); - self.command.write(0xB6); - self.channel.write((div & 0xFF) as u8); - self.channel.write(((div >> 8) & 0xFF) as u8); - } - - pub fn set_gate(&mut self, state: bool) { - let gate_value = self.gate.read(); - if state { - self.gate.write(gate_value | 0x03); - } else { - self.gate.write(gate_value & 0xFC); - } - } -} diff --git a/audio/pcspkrd/src/scheme.rs b/audio/pcspkrd/src/scheme.rs deleted file mode 100644 index 2cb21fc51a..0000000000 --- a/audio/pcspkrd/src/scheme.rs +++ /dev/null @@ -1,87 +0,0 @@ -use syscall::data::Stat; -use syscall::{ - Error, Result, SchemeMut, EBUSY, EINVAL, EPERM, MODE_CHR, O_ACCMODE, O_STAT, O_WRONLY, -}; - -use crate::pcspkr::Pcspkr; - -pub struct PcspkrScheme { - pub pcspkr: Pcspkr, - pub handle: Option, - pub next_id: usize, -} - -impl SchemeMut for PcspkrScheme { - fn open(&mut self, _path: &str, flags: usize, _uid: u32, _gid: u32) -> Result { - if (flags & O_ACCMODE == 0) && (flags & O_STAT == O_STAT) { - Ok(0) - } else if flags & O_ACCMODE == O_WRONLY { - if self.handle.is_none() { - self.next_id += 1; - self.handle = Some(self.next_id); - Ok(self.next_id) - } else { - Err(Error::new(EBUSY)) - } - } else { - Err(Error::new(EINVAL)) - } - } - - fn read(&mut self, _id: usize, _buf: &mut [u8]) -> Result { - Err(Error::new(EPERM)) - } - - fn write(&mut self, id: usize, buf: &[u8]) -> Result { - if self.handle != Some(id) { - return Err(Error::new(EINVAL)); - } - - if buf.len() != 2 { - return Err(Error::new(EINVAL)); - } - - let frequency = buf[0] as usize + ((buf[1] as usize) << 8); - - if frequency == 0 { - self.pcspkr.set_gate(false); - } else { - self.pcspkr.set_frequency(frequency); - self.pcspkr.set_gate(true); - } - - Ok(buf.len()) - } - - fn fpath(&mut self, _id: usize, buf: &mut [u8]) -> Result { - let mut i = 0; - let scheme_path = b"pcspkr"; - while i < buf.len() && i < scheme_path.len() { - buf[i] = scheme_path[i]; - i += 1; - } - Ok(i) - } - - fn fstat(&mut self, _id: usize, stat: &mut Stat) -> Result { - *stat = Stat { - st_mode: MODE_CHR | 0o222, - ..Default::default() - }; - - Ok(0) - } - - fn fcntl(&mut self, _id: usize, _cmd: usize, _arg: usize) -> Result { - Ok(0) - } - - fn close(&mut self, id: usize) -> Result { - if self.handle == Some(id) { - self.pcspkr.set_gate(false); - self.handle = None; - } - - Ok(0) - } -}