diff --git a/local/recipes/gpu/redox-drm/source/src/drivers/intel/mod.rs b/local/recipes/gpu/redox-drm/source/src/drivers/intel/mod.rs index f4fcecd575..e0d73208ea 100644 --- a/local/recipes/gpu/redox-drm/source/src/drivers/intel/mod.rs +++ b/local/recipes/gpu/redox-drm/source/src/drivers/intel/mod.rs @@ -32,7 +32,7 @@ use redox_driver_sys::memory::MmioRegion; use redox_driver_sys::pci::{PciBarInfo, PciDevice, PciDeviceInfo}; use redox_driver_sys::quirks::PciQuirkFlags; -use crate::driver::{DriverError, DriverEvent, GpuDriver, Result}; +use crate::driver::{DriverError, DriverEvent, GpuDriver, Result, RedoxPrivateCsSubmit, RedoxPrivateCsSubmitResult}; use crate::drivers::interrupt::InterruptHandle; use crate::gem::{GemHandle, GemManager}; use crate::kms::connector::{synthetic_edid, Connector}; @@ -758,6 +758,23 @@ impl GpuDriver for IntelDriver { self.process_irq() } + + fn redox_private_cs_submit( + &self, + submit: &RedoxPrivateCsSubmit, + ) -> Result { + let src_addr = self.ensure_gem_gpu_mapping(submit.src_handle)?; + + let cmds_ptr = (src_addr + submit.src_offset) as *const u32; + let dword_count = (submit.byte_count / 4) as usize; + let cmds = unsafe { std::slice::from_raw_parts(cmds_ptr, dword_count) }; + + let mut ring = self.ring.lock() + .map_err(|_| DriverError::Initialization("Intel ring state poisoned".into()))?; + ring.submit_batch(cmds)?; + + Ok(RedoxPrivateCsSubmitResult { seqno: 0 }) + } } fn detect_display_topology(display: &IntelDisplay, edid_source: Option<&[DpAux]>) -> Result<(Vec, Vec)> {