1
0
Fork 0
forked from koniifer/ableos
ableos-framebuffer/ableos/src/devices/mod.rs

47 lines
1.2 KiB
Rust
Raw Normal View History

2022-02-12 03:25:02 -06:00
pub mod character_devs;
pub mod pci_inner;
use alloc::{
boxed::Box,
string::{String, ToString},
};
use hashbrown::HashMap;
2022-02-12 03:25:02 -06:00
use pci::PCIDevice;
use crate::character_device::CharacterDevice;
// FIXME: This is a hack to hold a device.
2022-02-12 03:25:02 -06:00
// #[derive(Debug)]
pub enum Device {
2022-02-12 03:25:02 -06:00
Character(Box<dyn CharacterDevice>),
Pci(PCIDevice),
}
unsafe impl Sync for Device {}
unsafe impl Send for Device {}
pub struct DeviceTable {
pub devices: HashMap<String, Device>,
}
2022-02-12 03:25:02 -06:00
use self::character_devs::{dev_null::DevNull, dev_unicode::DevUnicode, dev_zero::DevZero};
pub use self::Device::*;
impl DeviceTable {
pub fn new() -> Self {
let mut table: HashMap<String, Device> = HashMap::new();
2022-02-12 03:25:02 -06:00
table.insert("null".to_string(), Character(Box::new(DevNull)));
table.insert("zero".to_string(), Character(Box::new(DevZero)));
table.insert(
"unicode".to_string(),
Character(Box::new(DevUnicode {
next_write_char: 0x00 as char,
next_read_char: 0x00 as char,
})),
);
DeviceTable { devices: table }
}
}
lazy_static::lazy_static!(
2022-02-12 03:25:02 -06:00
pub static ref DEVICE_TABLE: spin::Mutex<DeviceTable> =
spin::Mutex::new(DeviceTable::new());
);