kwin: plugin path fix + KF6Svg stub + QmlPlugins cleanup
- Mirror usr/plugins/*.so to plugins/ for cmake Imported target verification - Delete QmlPlugins dirs (reference host QML paths) - Stub KF6Svg cmake config - Remove UiTools/Sensors from Qt6 find_package - Blocked: KF6Svg requires KF6Config.cmake component registration
This commit is contained in:
@@ -405,3 +405,44 @@ mod tests {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Standard MSI (non-X) interrupt allocation.
|
||||
/// For devices that support MSI but not MSI-X.
|
||||
pub struct MsiAllocation {
|
||||
pub irq: u8,
|
||||
pub fd: crate::pci::IrqFd,
|
||||
pub vector_count: u8,
|
||||
}
|
||||
|
||||
impl MsiAllocation {
|
||||
#[cfg(target_os = "redox")]
|
||||
pub fn request(multiple_message_capable: u8, requested: u8) -> Result<Self> {
|
||||
let cpu_id = read_bsp_cpu_id()?;
|
||||
let count = requested.min(1u8 << multiple_message_capable);
|
||||
let (irq, fd) = allocate_irq_vector(cpu_id)?;
|
||||
log::info!("redox-driver-sys: allocated MSI vector -> irq {} on cpu {}", irq, cpu_id);
|
||||
Ok(Self { irq, fd, vector_count: count })
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "redox"))]
|
||||
pub fn request(_multiple_message_capable: u8, _requested: u8) -> Result<Self> {
|
||||
Err(DriverError::Irq("MSI allocation is only available on target_os=redox".into()))
|
||||
}
|
||||
}
|
||||
|
||||
/// Set IRQ affinity to a specific CPU.
|
||||
/// Returns true if the affinity was successfully changed.
|
||||
#[cfg(target_os = "redox")]
|
||||
pub fn irq_set_affinity(irq: u8, cpu_id: u32) -> Result<()> {
|
||||
use std::io::Write;
|
||||
let path = format!("/scheme/irq/{}/affinity", irq);
|
||||
let mut f = std::fs::OpenOptions::new().write(true).open(&path)
|
||||
.map_err(|e| DriverError::Irq(format!("failed to open {}: {}", path, e)))?;
|
||||
f.write_all(&cpu_id.to_ne_bytes())
|
||||
.map_err(|e| DriverError::Irq(format!("failed to set affinity: {}", e)))
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "redox"))]
|
||||
pub fn irq_set_affinity(_irq: u8, _cpu_id: u32) -> Result<()> {
|
||||
Err(DriverError::Irq("IRQ affinity is only available on target_os=redox".into()))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user