The Pedigree Project 0.1
NvmeDisk.h
1/* Copyright (c) 2026, Pedigree Developers. SPDX-License-Identifier: ISC */
2#ifndef NVME_DISK_H
3#define NVME_DISK_H
4#include "modules/drivers/common/scsi/ScsiDisk.h"
6class EXPORTED_PUBLIC NvmeDisk final : public ScsiDisk {
7 public:
8 NvmeDisk(NvmeController* controller, uint32_t nsid);
9 ~NvmeDisk() override;
10 bool initialise();
11 void getName(String& name) override;
12 size_t getSize() const override {
13 return m_Bytes;
14 }
15 size_t getBlockCount() const override {
16 return m_Blocks;
17 }
18 size_t getBlockSize() const override;
19 size_t getNativeBlockSize() const override {
20 return m_BlockBytes;
21 }
22 uint64_t doRead(uint64_t location) override;
23 uint64_t doWrite(uint64_t location) override;
24 uint64_t doWriteDirect(uint64_t location, uintptr_t page) override;
25 uint64_t doSync(uint64_t location) override;
26 NvmeController* controller() const {
27 return m_Controller;
28 }
29 uint32_t namespaceId() const {
30 return m_Nsid;
31 }
32
33 private:
34 friend class NvmeController;
35 size_t validPageLength(uint64_t location) const;
36 NvmeController* m_Controller;
37 const uint32_t m_Nsid;
38 size_t m_Blocks;
39 size_t m_Bytes;
40 size_t m_BlockBytes;
41};
42#endif
size_t getSize() const override
Gets the size of the disk.
Definition NvmeDisk.h:12
size_t getNativeBlockSize() const override
Definition NvmeDisk.h:19
virtual uint64_t doRead(uint64_t location)
Definition ScsiDisk.cc:1213
bool initialise(class ScsiController *pController, size_t nUnit)
Definition ScsiDisk.cc:285
virtual MUST_USE_RESULT uint64_t doWriteDirect(uint64_t location, uintptr_t page)
Definition ScsiDisk.cc:1381
virtual void getName(String &str)
Definition ScsiDisk.h:122
virtual size_t getBlockSize() const
Gets the preferred I/O extent of the disk.
Definition ScsiDisk.h:145