From 4fd60b94b9a77e1983300f9fadd46f677bee567f Mon Sep 17 00:00:00 2001 From: Taeseung Sohn Date: Fri, 1 Dec 2023 14:27:51 +0000 Subject: [PATCH 1/5] Clarify the exact behavior of RW1C setters --- src/macros.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/macros.rs b/src/macros.rs index 9fd12d6..c3dea31 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -113,18 +113,18 @@ macro_rules! rw1c_bit { ([$offset:literal]($bit:literal),$method:ident,$name:literal) => { bit_getter!([$offset]($bit), $method, $name); paste::paste! { - #[doc = "Clears the"] + #[doc = "Assigns 1 to the"] #[doc = $name] - #[doc = "bit."] + #[doc = "bit. On register write, this results in clearing the bit."] pub fn [](&mut self)->&mut Self{ use bit_field::BitField; self.0[$offset].set_bit($bit,true); self } - #[doc = "Set the "] + #[doc = "Assigns 0 to the"] #[doc = $name] - #[doc = " bit to 0, preventing the bit from being cleared on write."] + #[doc = "bit, preventing the bit from being cleared on write."] pub fn [](&mut self) -> &mut Self { use bit_field::BitField; self.0[$offset].set_bit($bit,false); @@ -135,18 +135,18 @@ macro_rules! rw1c_bit { ($bit:literal,$method:ident,$name:literal) => { bit_getter!($bit, $method, $name); paste::paste! { - #[doc = "Clears the"] + #[doc = "Assigns 1 to the"] #[doc = $name] - #[doc = "bit."] + #[doc = "bit. On register write, this results in clearing the bit."] pub fn [](&mut self)->&mut Self{ use bit_field::BitField; self.0.set_bit($bit,true); self } - #[doc = "Set the "] + #[doc = "Assigns 0 to the"] #[doc = $name] - #[doc = " bit to 0, preventing the bit from being cleared on write."] + #[doc = "bit, preventing the bit from being cleared on write."] pub fn [](&mut self) -> &mut Self { use bit_field::BitField; self.0.set_bit($bit,false); From f2e067e6877549285c9d22a8d4e31a93fb5b406f Mon Sep 17 00:00:00 2001 From: Taeseung Sohn Date: Mon, 4 Dec 2023 06:14:25 +0000 Subject: [PATCH 2/5] rename doorbell::Register to Doorbell --- src/registers/doorbell.rs | 11 ++++++++--- src/registers/mod.rs | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/registers/doorbell.rs b/src/registers/doorbell.rs index 989f3e1..8a6db5b 100644 --- a/src/registers/doorbell.rs +++ b/src/registers/doorbell.rs @@ -5,11 +5,15 @@ use accessor::array; use accessor::Mapper; use core::{convert::TryFrom, fmt}; +/// A type alias to [`Doorbell`] register for backward compability. +#[deprecated = "Use `Doorbell` instead of `Register`."] +pub type Register = Doorbell; + /// The element of the Doorbell Array. #[repr(transparent)] #[derive(Copy, Clone, Default)] -pub struct Register(u32); -impl Register { +pub struct Doorbell(u32); +impl Doorbell { /// Creates a new accessor to the Doorbell Array. /// /// # Safety @@ -44,7 +48,8 @@ impl Register { rw_field!(0..=7, doorbell_target, "Doorbell Target", u8); rw_field!(16..=31, doorbell_stream_id, "Doorbell Stream ID", u16); } -impl fmt::Debug for Register { + +impl fmt::Debug for Doorbell { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("doorbell::Register") .field("doorbell_target", &self.doorbell_target()) diff --git a/src/registers/mod.rs b/src/registers/mod.rs index d98507b..a34472c 100644 --- a/src/registers/mod.rs +++ b/src/registers/mod.rs @@ -22,7 +22,7 @@ where /// Host Controller Capability Register pub capability: Capability, /// Doorbell Array - pub doorbell: array::ReadWrite, + pub doorbell: array::ReadWrite, /// Host Controller Operational Register pub operational: Operational, /// Port Register Set Array @@ -75,7 +75,7 @@ where /// ``` pub unsafe fn new(mmio_base: usize, mapper: M) -> Self { let capability = Capability::new(mmio_base, &mapper); - let doorbell = doorbell::Register::new(mmio_base, &capability, mapper.clone()); + let doorbell = doorbell::Doorbell::new(mmio_base, &capability, mapper.clone()); let operational = Operational::new(mmio_base, capability.caplength.read_volatile(), &mapper); let port_register_set = PortRegisterSet::new(mmio_base, &capability, mapper.clone()); From b89a5d47d9aca60658ed8bfb8f9db12b3ee77e44 Mon Sep 17 00:00:00 2001 From: Taeseung Sohn Date: Mon, 4 Dec 2023 06:31:26 +0000 Subject: [PATCH 3/5] mark cap registers as read-only. --- src/registers/capability.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/registers/capability.rs b/src/registers/capability.rs index 8b5cc72..323863c 100644 --- a/src/registers/capability.rs +++ b/src/registers/capability.rs @@ -11,25 +11,25 @@ where M: Mapper + Clone, { /// Capability Registers Length - pub caplength: single::ReadWrite, + pub caplength: single::ReadOnly, /// Host Controller Interface Version Number - pub hciversion: single::ReadWrite, + pub hciversion: single::ReadOnly, /// Structural Parameters 1 - pub hcsparams1: single::ReadWrite, + pub hcsparams1: single::ReadOnly, /// Structural Parameters 2 - pub hcsparams2: single::ReadWrite, + pub hcsparams2: single::ReadOnly, /// Structural Parameters 3 - pub hcsparams3: single::ReadWrite, + pub hcsparams3: single::ReadOnly, /// Capability Parameters 1 - pub hccparams1: single::ReadWrite, + pub hccparams1: single::ReadOnly, /// Doorbell Offset - pub dboff: single::ReadWrite, + pub dboff: single::ReadOnly, /// Runtime Register Space Offset - pub rtsoff: single::ReadWrite, + pub rtsoff: single::ReadOnly, /// Capability Parameters 2 - pub hccparams2: single::ReadWrite, + pub hccparams2: single::ReadOnly, /// Virtualization Based Trusted IO Register Space Offset - pub vtiosoff: single::ReadWrite, + pub vtiosoff: single::ReadOnly, } impl Capability where @@ -51,7 +51,7 @@ where { macro_rules! m { ($offset:expr) => { - single::ReadWrite::new(mmio_base + $offset, mapper.clone()) + single::ReadOnly::new(mmio_base + $offset, mapper.clone()) }; } From 3e05ecaa9916b3559b461842ea3c31d0484bb5dc Mon Sep 17 00:00:00 2001 From: Taeseung Sohn Date: Tue, 5 Dec 2023 08:33:52 +0900 Subject: [PATCH 4/5] convention fix Co-authored-by: Hiroki Tokunaga --- src/registers/doorbell.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/registers/doorbell.rs b/src/registers/doorbell.rs index 8a6db5b..0406013 100644 --- a/src/registers/doorbell.rs +++ b/src/registers/doorbell.rs @@ -48,7 +48,6 @@ impl Doorbell { rw_field!(0..=7, doorbell_target, "Doorbell Target", u8); rw_field!(16..=31, doorbell_stream_id, "Doorbell Stream ID", u16); } - impl fmt::Debug for Doorbell { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("doorbell::Register") From 4a8a231abcc649c2c33cb1e901f9beb3c1e80614 Mon Sep 17 00:00:00 2001 From: Taeseung Sohn Date: Fri, 8 Dec 2023 15:10:46 +0000 Subject: [PATCH 5/5] more doorbell fixes --- src/registers/doorbell.rs | 14 +++++--------- src/registers/mod.rs | 3 ++- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/registers/doorbell.rs b/src/registers/doorbell.rs index 0406013..a162f06 100644 --- a/src/registers/doorbell.rs +++ b/src/registers/doorbell.rs @@ -3,7 +3,7 @@ use super::capability::Capability; use accessor::array; use accessor::Mapper; -use core::{convert::TryFrom, fmt}; +use core::convert::TryFrom; /// A type alias to [`Doorbell`] register for backward compability. #[deprecated = "Use `Doorbell` instead of `Register`."] @@ -48,11 +48,7 @@ impl Doorbell { rw_field!(0..=7, doorbell_target, "Doorbell Target", u8); rw_field!(16..=31, doorbell_stream_id, "Doorbell Stream ID", u16); } -impl fmt::Debug for Doorbell { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.debug_struct("doorbell::Register") - .field("doorbell_target", &self.doorbell_target()) - .field("doorbell_stream_id", &self.doorbell_stream_id()) - .finish() - } -} +impl_debug_from_methods!(Doorbell { + doorbell_target, + doorbell_stream_id, +}); diff --git a/src/registers/mod.rs b/src/registers/mod.rs index a34472c..b192dbd 100644 --- a/src/registers/mod.rs +++ b/src/registers/mod.rs @@ -4,6 +4,7 @@ use accessor::array; use accessor::Mapper; pub use capability::Capability; +pub use doorbell::Doorbell; pub use operational::{Operational, PortRegisterSet}; pub use runtime::InterrupterRegisterSet; pub use runtime::Runtime; @@ -22,7 +23,7 @@ where /// Host Controller Capability Register pub capability: Capability, /// Doorbell Array - pub doorbell: array::ReadWrite, + pub doorbell: array::ReadWrite, /// Host Controller Operational Register pub operational: Operational, /// Port Register Set Array