diff --git a/Cargo.lock b/Cargo.lock index 7add741..c9f5f56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -759,7 +759,7 @@ dependencies = [ [[package]] name = "nvme-mi-dev" version = "0.1.0" -source = "git+https://github.com/CodeConstruct/nvme-mi-dev#b6614f2651dc46df5e7798c133a43669cebfee70" +source = "git+https://github.com/CodeConstruct/nvme-mi-dev#4deccf75405cb91e6bd2f020d3a0e0afa126ea6c" dependencies = [ "crc", "deku 0.19.1 (git+https://github.com/sharksforarms/deku.git?rev=e5363bc11e123bfcfd3467a2a90aeef8b588f432)", diff --git a/src/main.rs b/src/main.rs index a68eaf9..96133fc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -402,7 +402,6 @@ async fn nvme_mi_task(router: &'static Router<'static>) -> ! { let mut subsys = Subsystem::new(SubsystemInfo::environment()); let ppid = subsys.add_port(PortType::Pcie(PciePort::new())).unwrap(); let ctrlid0 = subsys.add_controller(ppid).unwrap(); - let _ctrlid1 = subsys.add_controller(ppid).unwrap(); let size_blocks = 10_000_000_000_000_u64.div_ceil(512); let nsid = subsys.add_namespace(size_blocks).unwrap(); @@ -428,19 +427,29 @@ async fn nvme_mi_task(router: &'static Router<'static>) -> ! { debug!("Handling NVMe-MI message: {msg:x?}"); mep.handle_async(&mut subsys, msg, ic, resp, async |cmd| match cmd { CommandEffect::SetMtu { port_id, mtus } => { - if port_id == ppid { + if port_id != twpid { + warn!("NVMe-MI: Set MTU bad Port ID {port_id:?}"); + return Err(CommandEffectError::InternalError); + } + if mtus != 64 { // TODO: implement once PortLookup::by_eid trait takes a // non-mut reference. - warn!("NVMe-MI: Set MTU Port ID {port_id:?} MTU {mtus}, not currently handled"); - Err(CommandEffectError::Unsupported) - } else { - warn!("NVMe-MI: Set MTU bad Port ID {port_id:?}"); - Err(CommandEffectError::InternalError) + warn!("NVMe-MI: Application lacks support for MTU ({mtus}) != BTU (64)"); + return Err(CommandEffectError::Unsupported); } + + Ok(()) } - CommandEffect::SetSmbusFreq { .. } => { - info!("NVMe-MI: Ignoring Set SMBUS Frequency"); - Err(CommandEffectError::Unsupported) + CommandEffect::SetSmbusFreq { port_id: _, freq } => { + use nvme_mi_dev::nvme::mi::SmbusFrequency; + + if freq != SmbusFrequency::Freq100Khz { + warn!("NVMe-MI: Application lacks support for I2C bus frequency {:?}", freq); + return Err(CommandEffectError::Unsupported) + } + + // Not an error to ignore SMBus frequency when we're using USB + Ok(()) } }) .await;