diff --git a/Kernel/Devices/Storage/NVMe/NVMeController.cpp b/Kernel/Devices/Storage/NVMe/NVMeController.cpp index f2898372a2..bd2f095fe2 100644 --- a/Kernel/Devices/Storage/NVMe/NVMeController.cpp +++ b/Kernel/Devices/Storage/NVMe/NVMeController.cpp @@ -206,9 +206,8 @@ UNMAP_AFTER_INIT ErrorOr NVMeController::identify_and_init_namespaces() if (void* fault_at; !safe_memcpy(&id_ns, prp_dma_region->vaddr().as_ptr(), NVMe_IDENTIFY_SIZE, fault_at)) { return EFAULT; } - auto val = get_ns_features(id_ns); - auto block_counts = val.get<0>(); - auto block_size = 1 << val.get<1>(); + auto [block_counts, lba_size] = get_ns_features(id_ns); + auto block_size = 1 << lba_size; dbgln_if(NVME_DEBUG, "NVMe: Block count is {} and Block size is {}", block_counts, block_size); @@ -279,14 +278,14 @@ ErrorOr NVMeController::identify_and_init_controller() return {}; } -UNMAP_AFTER_INIT Tuple NVMeController::get_ns_features(IdentifyNamespace& identify_data_struct) +UNMAP_AFTER_INIT NVMeController::NSFeatures NVMeController::get_ns_features(IdentifyNamespace& identify_data_struct) { auto flbas = identify_data_struct.flbas & FLBA_SIZE_MASK; auto namespace_size = identify_data_struct.nsze; auto lba_format = identify_data_struct.lbaf[flbas]; auto lba_size = (lba_format & LBA_SIZE_MASK) >> 16; - return Tuple(namespace_size, lba_size); + return { namespace_size, static_cast(lba_size) }; } LockRefPtr NVMeController::device(u32 index) const diff --git a/Kernel/Devices/Storage/NVMe/NVMeController.h b/Kernel/Devices/Storage/NVMe/NVMeController.h index 7597285d5c..bfee2b667c 100644 --- a/Kernel/Devices/Storage/NVMe/NVMeController.h +++ b/Kernel/Devices/Storage/NVMe/NVMeController.h @@ -8,7 +8,6 @@ #include #include -#include #include #include #include @@ -55,11 +54,16 @@ public: void set_admin_queue_ready_flag() { m_admin_queue_ready = true; } private: + struct NSFeatures { + u64 namespace_size; + u8 lba_size; + }; + NVMeController(PCI::DeviceIdentifier const&, u32 hardware_relative_controller_id); ErrorOr identify_and_init_namespaces(); ErrorOr identify_and_init_controller(); - Tuple get_ns_features(IdentifyNamespace& identify_data_struct); + NSFeatures get_ns_features(IdentifyNamespace& identify_data_struct); ErrorOr create_admin_queue(QueueType queue_type); ErrorOr create_io_queue(u8 qid, QueueType queue_type); void calculate_doorbell_stride()