(EDIT:
tar screwed up the disk image... will reattach it immediately once I fix that.. should work now! BTW, the image attached is buggy and slow, don't use it. See my comment below for the better one.)
Hi everybody,
I'm pleased to announce that the driver now has support for most of the important NVMe administrator commands (i.e., get/set features, deletion and creation of I/O queues, identify, and abort). Also added IRQ support. Initialization is finished, so what's next is to implement the important I/O commands such as read, write, and some others. Should be compatible with all controller versions, but I'm not simultaneously reading all the specifications at once so I can't know for sure. So please do test on older versions if you have one.
I would appreciate it if you could test the driver and provide feedback on any bugs you encounter, problems, etc. I'm not responsible for any damage or data loss. This driver is intended to be tested among KolibriOS developers and enthusiasts. Also, please make sure you only have one NVMe device plugged in, otherwise the driver will just initialize the first NVMe device it finds (support for multiple NVMe devices is technically implemented but I commented out those codepaths to make debugging a bit easier for now).
Also, you'll notice I added a fair bit of delay between some of the command submissions. It's just a temporary (ugly) bandaid for checking if command completion works as expected.
I've attached the floppy disk image here (14 Jun 2024) snapshot, which is the latest version as of this writing. It contains the driver (commit 7cc4b713). If everything works as expected, you should see an output like this:

-
28200.png (11.73 KiB)
Viewed 10829 times
Make sure the model name and serial number are correct, no freezing should occur, and at the end of the output log you should see a message if the NVMe driver has successfully been initialized or not.
When you've finished testing, I would greatly appreciate a screenshot of the output and your NVMe controller version, regardless if it worked fine or not. This lets me know where I need to fix certain incompatibilities and such.