diff --git a/xhcid/src/xhci/event.rs b/xhcid/src/xhci/event.rs index ae428281a4..309eed226b 100644 --- a/xhcid/src/xhci/event.rs +++ b/xhcid/src/xhci/event.rs @@ -6,8 +6,9 @@ use super::trb::Trb; #[repr(packed)] pub struct EventRingSte { pub address: Mmio, - pub size: Mmio, - _rsvd: Mmio, + pub size: Mmio, + _rsvd: Mmio, + _rsvd2: Mmio, } pub struct EventRing { @@ -23,7 +24,7 @@ impl EventRing { }; ring.ste.address.write(ring.trbs.physical() as u64); - ring.ste.size.write(ring.trbs.len() as u32); + ring.ste.size.write(ring.trbs.len() as u16); Ok(ring) } diff --git a/xhcid/src/xhci/mod.rs b/xhcid/src/xhci/mod.rs index a9c4b3f457..30db7b9a83 100644 --- a/xhcid/src/xhci/mod.rs +++ b/xhcid/src/xhci/mod.rs @@ -111,12 +111,12 @@ impl Xhci { // Set event ring segment table registers println!(" - Interrupter 0: {:X}", self.run.ints.as_ptr() as usize); + println!(" - Write ERDP"); + self.run.ints[0].erdp.write(self.cmd.events.trbs.physical() as u64); println!(" - Write ERSTZ"); self.run.ints[0].erstsz.write(1); println!(" - Write ERSTBA: {:X}", self.cmd.events.ste.physical() as u64); self.run.ints[0].erstba.write(self.cmd.events.ste.physical() as u64); - println!(" - Write ERDP"); - self.run.ints[0].erdp.write(self.cmd.events.trbs.physical() as u64); // Set run/stop to 1 println!(" - Start");