Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
261766a
wire: flags: Use debug representation for flag value
amboar Oct 15, 2025
2dfee82
nvme: mi: Restore license and copyright to top of file
amboar Oct 23, 2025
1b51248
cargo: Bump log dependency to align with deku
amboar Oct 22, 2025
6da8f9b
nvme: mi: Convert MessageHeader to deku bits
amboar Oct 15, 2025
5ac22e4
nvme: mi: Convert SmbusFrequency to deku bits
amboar Oct 21, 2025
3a4569c
nvme: mi: Tidy PCIe Link attributes
amboar Oct 21, 2025
67fcb71
nvme: mi: Convert PortInformationResponse to FlagSet
amboar Oct 21, 2025
208d754
nvme: mi: Convert NvmSubsystemStatus to FlagSet
amboar Oct 21, 2025
6a3b29f
nvme: mi: Convert NvmSubsystemHealthDataStructureResponse to FlagSet
amboar Oct 21, 2025
2fb98bb
nvme: mi: Convert NvmSubsystemHealthStatusPollRequest to deku bits
amboar Oct 21, 2025
62f2316
nvme: mi: Convert ControllerInformationResponse to deku bits
amboar Oct 21, 2025
2807f60
nvme: Convert AdminIdentifyControllerResponse to FlagSet
amboar Oct 21, 2025
9d75665
nvme: mi: Convert AdminIoCqeStatus handling to deku bits
amboar Oct 22, 2025
a7f06ef
nvme: mi: Convert AdminFormatNvmConfiguration to deku bits
amboar Oct 22, 2025
15fcafc
nvme: Convert SanitizeStatus to deku bits
amboar Oct 22, 2025
964c327
nvme: Convert SanitizeStateInformation to deku bits
amboar Oct 22, 2025
5d7fe5d
nvme: Convert Sanitize structures to deku bits, FlagSet
amboar Oct 22, 2025
a227202
pci: Convert PowerManagementCapabilities to deku bits
amboar Oct 22, 2025
85cc791
pcie: Drop Discriminant trait for PciCapabilityType
amboar Oct 22, 2025
0233985
nvme: mi: PcieCommandRequestType: Drop Discriminant impl
amboar Oct 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 44 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ license = "GPL-3.0-only"

[dependencies]
crc = "3.2.1"
deku = { version = "0.20.0", default-features = false }
deku = { git = "https://github.com/codeconstruct/deku.git", tag = "cc/deku-v0.19.1/bit-precise-no-alloc-1", default-features = false, features = ["bits"] }
flagset = { version = "0.4.7", default-features = false }
heapless = "0.8.0"
hmac = { version = "0.12.1", default-features = false }
log = "0.4.22"
log = "0.4.28"
mctp = { version = "0.2.0", default-features = false }
sha2 = { version = "0.10.9", default-features = false }
uuid = { version = "1.17.0", default-features = false }
Expand Down
60 changes: 38 additions & 22 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,16 @@ const MAX_NAMESPACES: usize = 4;
const MAX_PORTS: usize = 2;
const MAX_NIDTS: usize = 2;

pub mod smbus {
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub enum BusFrequency {
NotSupported,
Freq100Khz,
Freq400Khz,
Freq1Mhz,
}
}

#[derive(Debug)]
pub enum CommandEffect {
SetMtu {
Expand All @@ -34,7 +44,7 @@ pub enum CommandEffect {
},
SetSmbusFreq {
port_id: PortId,
freq: nvme::mi::SmbusFrequency,
freq: smbus::BusFrequency,
},
}

Expand Down Expand Up @@ -84,10 +94,10 @@ pub struct PciePort {
d: u16,
f: u16,
seg: u8,
mps: nvme::mi::PciePayloadSize,
cls: nvme::mi::PcieLinkSpeed,
mlw: nvme::mi::PcieLinkWidth,
nlw: nvme::mi::PcieLinkWidth,
mps: pcie::PayloadSize,
cls: pcie::LinkSpeed,
mlw: pcie::LinkWidth,
nlw: pcie::LinkWidth,
}

impl PciePort {
Expand All @@ -97,10 +107,10 @@ impl PciePort {
d: 0,
f: 0,
seg: 0,
mps: nvme::mi::PciePayloadSize::Payload128B,
cls: nvme::mi::PcieLinkSpeed::Gts2p5,
mlw: nvme::mi::PcieLinkWidth::X2,
nlw: nvme::mi::PcieLinkWidth::X1,
mps: pcie::PayloadSize::Payload128B,
cls: pcie::LinkSpeed::Gts2p5,
mlw: pcie::LinkWidth::X2,
nlw: pcie::LinkWidth::X1,
}
}
}
Expand All @@ -115,25 +125,25 @@ impl Default for PciePort {
pub struct TwoWirePort {
// MI v2.0, 5.7.2, Figure 116
cvpdaddr: u8,
mvpdfreq: nvme::mi::SmbusFrequency,
mvpdfreq: smbus::BusFrequency,
cmeaddr: u8,
i3csprt: bool,
msmbfreq: nvme::mi::SmbusFrequency,
msmbfreq: smbus::BusFrequency,
nvmebms: bool,
// Local state
smbfreq: nvme::mi::SmbusFrequency,
smbfreq: smbus::BusFrequency,
}

impl TwoWirePort {
pub fn new() -> Self {
Self {
cvpdaddr: 0,
mvpdfreq: nvme::mi::SmbusFrequency::FreqNotSupported,
mvpdfreq: smbus::BusFrequency::NotSupported,
cmeaddr: 0x1d,
i3csprt: false,
msmbfreq: nvme::mi::SmbusFrequency::Freq100Khz,
msmbfreq: smbus::BusFrequency::Freq100Khz,
nvmebms: false,
smbfreq: nvme::mi::SmbusFrequency::Freq100Khz,
smbfreq: smbus::BusFrequency::Freq100Khz,
}
}

Expand All @@ -149,17 +159,17 @@ impl Default for TwoWirePort {
}

pub struct TwoWirePortBuilder {
msmbfreq: nvme::mi::SmbusFrequency,
msmbfreq: smbus::BusFrequency,
}

impl TwoWirePortBuilder {
pub fn new() -> Self {
Self {
msmbfreq: nvme::mi::SmbusFrequency::Freq100Khz,
msmbfreq: smbus::BusFrequency::Freq100Khz,
}
}

pub fn msmbfreq(&mut self, freq: nvme::mi::SmbusFrequency) -> &mut Self {
pub fn msmbfreq(&mut self, freq: smbus::BusFrequency) -> &mut Self {
self.msmbfreq = freq;
self
}
Expand Down Expand Up @@ -429,13 +439,14 @@ impl Controller {

#[derive(Debug)]
struct SubsystemHealth {
nss: nvme::mi::NvmSubsystemStatus,
nss: FlagSet<crate::nvme::mi::NvmSubsystemStatusFlags>,
}

impl SubsystemHealth {
fn new() -> Self {
Self {
nss: nvme::mi::NvmSubsystemStatus::new(),
nss: crate::nvme::mi::NvmSubsystemStatusFlags::Rnr
| crate::nvme::mi::NvmSubsystemStatusFlags::Df,
}
}
}
Expand Down Expand Up @@ -627,7 +638,8 @@ pub struct Subsystem {
nsids: u32,
nss: heapless::Vec<Namespace, MAX_NAMESPACES>,
health: SubsystemHealth,
sanicap: nvme::SanitizeCapabilities,
sanicap: FlagSet<nvme::SanitizeCapabilityFlags>,
nodmmas: nvme::NoDeallocateModifiesMediaAfterSanitize,
ssi: nvme::SanitizeStateInformation,
sstat: nvme::SanitizeStatus,
sconf: Option<nvme::AdminSanitizeConfiguration>,
Expand All @@ -654,7 +666,11 @@ impl Subsystem {
sstat: Default::default(),
sconf: None,
ssi: Default::default(),
sanicap: Default::default(),
sanicap: nvme::SanitizeCapabilityFlags::Ces
| nvme::SanitizeCapabilityFlags::Bes
| nvme::SanitizeCapabilityFlags::Ows
| nvme::SanitizeCapabilityFlags::Ndi,
nodmmas: Default::default(),
}
}

Expand Down
Loading