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 doWriteDirectPhysical(uint64_t location, uintptr_t page,
26 physical_uintptr_t physical) override;
27 uint64_t doSync(uint64_t location) override;
28 bool supportsDirectCacheWrite() const override {
29 return true;
30 }
31 NvmeController* controller() const {
32 return m_Controller;
33 }
34 uint32_t namespaceId() const {
35 return m_Nsid;
36 }
37
38 protected:
39 Device* dmaDevice() const override;
40 bool supportsBufferTransfers() const override {
41 return true;
42 }
43 bool transferBuffer(uint64_t location, void* buffer, size_t length, bool writing) override;
44 bool transferWriteBuffers(WriteBuffer* buffers, size_t count) override;
45
46 private:
47 friend class NvmeController;
48 size_t validPageLength(uint64_t location) const;
49 NvmeController* m_Controller;
50 const uint32_t m_Nsid;
51 size_t m_Blocks;
52 size_t m_Bytes;
53 size_t m_BlockBytes;
54};
55#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:1267
bool initialise(class ScsiController *pController, size_t nUnit)
Definition ScsiDisk.cc:286
virtual MUST_USE_RESULT uint64_t doWriteDirect(uint64_t location, uintptr_t page)
Definition ScsiDisk.cc:1435
virtual void getName(String &str)
Definition ScsiDisk.h:124
virtual size_t getBlockSize() const
Gets the preferred I/O extent of the disk.
Definition ScsiDisk.h:149