All Projects → intel → cNVMe

intel / cNVMe

Licence: other
An NVMe Device Simulation Library.

Programming Languages

C++
36643 projects - #6 most used programming language
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to cNVMe

GdriveSearcherBot
Google Drive Searcher Bot Written In Python Using Pyrogram.
Stars: ✭ 57 (+39.02%)
Mutual labels:  drive
octo-drive
Turn your GitHub repository into encrypted filesystem (=
Stars: ✭ 24 (-41.46%)
Mutual labels:  drive
Apps Script Samples
Apps Script samples for Google Workspace products.
Stars: ✭ 3,301 (+7951.22%)
Mutual labels:  drive
gdrive-index
An index server for Google Drive
Stars: ✭ 107 (+160.98%)
Mutual labels:  drive
libDrive
libDrive is a Google Drive media library manager and indexer, similar to Plex, that organizes Google Drive media to offer an intuitive and user-friendly experience.
Stars: ✭ 14 (-65.85%)
Mutual labels:  drive
webpack-plugin-ramdisk
🐏 A webpack plugin for blazing fast builds on a RAM disk / drive
Stars: ✭ 118 (+187.8%)
Mutual labels:  drive
Torrent-To-Google-Drive-Downloader
Simple notebook to stream torrent files to Google Drive using Google Colab and python3.
Stars: ✭ 256 (+524.39%)
Mutual labels:  drive
ToolBin
All the great tools we have for the field.
Stars: ✭ 91 (+121.95%)
Mutual labels:  nvme
PUBG USB
这是 某宝 卖大几千的压枪源码,不做任何数据读取以及侵入,这里采用外数据采集(IMG), 至今可以使用,无视任何更新(新武器,以及新武器的压枪规则,需要自己调试,在data_config下);
Stars: ✭ 44 (+7.32%)
Mutual labels:  drive
lethe
Secure drive wipe
Stars: ✭ 47 (+14.63%)
Mutual labels:  drive
UEHToR
UEHToR, #1 Torrent And File Leecher For Heroku, Based on Node.js. Simple to Install with full SEO Support
Stars: ✭ 28 (-31.71%)
Mutual labels:  drive
Port-Able-Suite
🌐 Manager for portable applications
Stars: ✭ 35 (-14.63%)
Mutual labels:  drive
gdrive-clone
Clone a shared google drive link to your own google drive
Stars: ✭ 48 (+17.07%)
Mutual labels:  drive
go-drive
A simple cloud drive mapping web app supports local, FTP/SFTP, S3, OneDrive, WebDAV, Google Drive.
Stars: ✭ 184 (+348.78%)
Mutual labels:  drive
Gcsf
a FUSE file system based on Google Drive
Stars: ✭ 2,251 (+5390.24%)
Mutual labels:  drive
WinDirStat.Net
A WPF implementation of WinDirStat.
Stars: ✭ 55 (+34.15%)
Mutual labels:  drive
URL-Magnet-Cloud-Uploader-Heroku
Aria 2 Rclone Remote URL /magnet Clouds upload via HEROKU
Stars: ✭ 99 (+141.46%)
Mutual labels:  drive
diffbot
DiffBot is an autonomous 2wd differential drive robot using ROS Noetic on a Raspberry Pi 4 B. With its SLAMTEC Lidar and the ROS Control hardware interface it's capable of navigating in an environment using the ROS Navigation stack and making use of SLAM algorithms to create maps of unknown environments.
Stars: ✭ 172 (+319.51%)
Mutual labels:  drive
stremio-gdrive
Stremio addon for fetching videos from your google drive.
Stars: ✭ 73 (+78.05%)
Mutual labels:  drive
WD-Decrypte
Western Digital Decryption tools
Stars: ✭ 53 (+29.27%)
Mutual labels:  drive

DISCONTINUATION OF PROJECT.

This project will no longer be maintained by Intel.

Intel has ceased development and contributions including, but not limited to, maintenance, bug fixes, new releases, or updates, to this project.

Intel no longer accepts patches to this project.

If you have an ongoing need to use this project, are interested in independently developing it, or would like to maintain patches for the open source software community, please create your own fork of this project.

cNVMe

An NVMe Device Simulation Library.

This is a WIP simulation of the protocol-layer of an NVMe Memory Device. The goal is to be able to send NVMe commands down and get full protocol responses. The simulation includes a register level with basic PCIe Controller Registers and simplified Doorbell Registers. It also contains a "Driver" with some abstractions to make it much easier to send commands to the underlying controller. cNVMe is really cool!

Supported NVMe Specification Commands

Admin Commands

  • Create IO Completion Queue
  • Create IO Submission Queue
  • Delete IO Completion Queue
  • Delete IO Submission Queue
  • Delete IO Submission Queue
  • Firmware Commit
  • Firmware Image Download
  • Format NVM
  • Identify (Namespace, Controller, Namespace Attached List, Namespace Active List)
  • Keep Alive

NVM Commands

  • Flush
  • Read
  • Write

Linux Build Status: Build Status

Windows Build Status: Build status

The original (and now legacy) repository for this project can be found here, for historical purposes: csm10495/cNVMe

Firmware Images

cNVMe supports Firmware Image Download and Firmware Commit. Certain characteristics make up valid cNVMe firmware images:

  • The first 5 bytes of the firmware image must be "cNVMe" in ASCII text. The controller will return a status code of Invalid Firmware Image if this eye-catcher is not found at the start of the firmware image.
  • The last 8 bytes of the firmware image will be the newly reported Firmware Revision within Identify Controller.

Command Response API (CRAPI)

Rationale (Informative)

Users may be interested to see what happens in a surrounding ecosystem if a certain command fails, passes, or returns data in a Vendor-Unique format. To provide for this need, cNVMe has the Command Response API (also known as CRAPI).

Format

The format for using the API is actually pretty simple. Provide the Controller a file path via the public method setCommandResponseFilePath(). Then, this file will be invoked via a system call whenever cNVMe gets an NVMe command, before cNVMe would normally process it. Wherever the Command Response API File (CRAPI-F) is, is an important location, because cNVMe will place binary files there, that will be useful to the CRAPI-F.

Parameters to the CRAPI-F

  • Param 1 - The Submission Queue ID that this command was sent to.

Local Files

Before calling the CRAPI-F, cNVMe will place some files in the local directory for the CRAPI-F's usage:

  • data_payload.bin - A binary file of the transfer data for the command. This file includes the assumed data length for the command based on parameters within the DWords. Sending a command that relies on a namespace size, when the namespace is not attached will result in an assumption of a 512-byte sector size.
  • command.bin - A 64-Byte binary of the raw NVMe command. Note that modifying DPTR incorrectly will lead to inconsistent behavior.
  • completion.bin - A 16-Byte binary of the raw NVMe completion for the command (Note that cNVMe will fill in the proper CID/SQID in the posted Completion Queue Entry).

Note that none of the given files may be resized by the CRAPI-F. The data_payload.bin is pre-sized to the maximum amount of data supported by the current transfer

Supported Return Codes

The Command Response API File is expected to return one of the following status codes to denote 'what happened' and furthermore how cNVMe should proceed. All codes that are not supported will lead to a specific assert being raised.

  • 0 - Command Handled by CRAPI-F - cNVMe will use data_payload.bin/completion.bin/command.bin and not process the command via its own logic
  • 1 - Command Handled by cNVMe - cNVMe will process the command entirely (nop from the CRAPI-F's POV)
  • 9 - Command Handled by CRAPI-F - cNVMe shall raise an assert with a message specified in data_payload.bin as ASCII. Be sure to use a trailing NULL character for the message.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].