Add hwd
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
members = [
|
members = [
|
||||||
"acpid",
|
"acpid",
|
||||||
"common",
|
"common",
|
||||||
|
"hwd",
|
||||||
"pcid",
|
"pcid",
|
||||||
"ps2d",
|
"ps2d",
|
||||||
"vboxd",
|
"vboxd",
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
/target
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
[package]
|
||||||
|
name = "hwd"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
log = "0.4"
|
||||||
|
ron = "0.8.1"
|
||||||
|
|
||||||
|
amlserde = { path = "../amlserde" }
|
||||||
|
common = { path = "../common" }
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
use amlserde::{AmlSerde, AmlSerdeValue};
|
||||||
|
use std::{error::Error, fs};
|
||||||
|
|
||||||
|
fn acpi() -> Result<(), Box<dyn Error>> {
|
||||||
|
for entry_res in fs::read_dir("/scheme/acpi/symbols")? {
|
||||||
|
let entry = entry_res?;
|
||||||
|
if let Some(file_name) = entry.file_name().to_str() {
|
||||||
|
if file_name.ends_with("_CID") || file_name.ends_with("_HID") {
|
||||||
|
let ron = fs::read_to_string(entry.path())?;
|
||||||
|
let AmlSerde { name, value } = ron::from_str(&ron)?;
|
||||||
|
let id = match value {
|
||||||
|
AmlSerdeValue::Integer(integer) => {
|
||||||
|
let vendor = integer & 0xFFFF;
|
||||||
|
let device = (integer >> 16) & 0xFFFF;
|
||||||
|
let vendor_rev = ((vendor & 0xFF) << 8) | vendor >> 8;
|
||||||
|
let vendor_1 = (((vendor_rev >> 10) & 0x1f) as u8 + 64) as char;
|
||||||
|
let vendor_2 = (((vendor_rev >> 5) & 0x1f) as u8 + 64) as char;
|
||||||
|
let vendor_3 = (((vendor_rev >> 0) & 0x1f) as u8 + 64) as char;
|
||||||
|
format!("{}{}{}{:04X}", vendor_1, vendor_2, vendor_3, device)
|
||||||
|
}
|
||||||
|
AmlSerdeValue::String(string) => {
|
||||||
|
string
|
||||||
|
},
|
||||||
|
_ => {
|
||||||
|
log::warn!("{}: unsupported value {:x?}", name, value);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
log::debug!("{}: {}", name, id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
common::setup_logging(
|
||||||
|
"misc",
|
||||||
|
"hwd",
|
||||||
|
"hwd",
|
||||||
|
log::LevelFilter::Info,
|
||||||
|
log::LevelFilter::Info,
|
||||||
|
);
|
||||||
|
|
||||||
|
//TODO: HWD is meant to locate PCI/XHCI/etc devices in ACPI and DeviceTree definitions and start their drivers
|
||||||
|
acpi().unwrap();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user