genode/repos/os/src/drivers/nvme
Norman Feske 0339318572 platform_session: cache arg for alloc_dma_buffer
This patch extends the 'Platform_session::alloc_dma_buffer' interface
with a 'Cache' argument that corresponds to the argument accepted by
'Ram_allocator::alloc', which is used by the platform driver under the
hood.

Since the x86 platform driver used to be hardwired to allocate DMA
buffers as UNCACHED, I adjusted all drivers by specifying the UNCACHED
argument. Right now, this is needed as a hint for core to steer the
allocation of I/O page tables. Once we eliminate the need for such hints
(by introducing an explicit 'Region_map::attach_dma' operation), we can
revisit the drivers individually because cached DMA buffers should
generally be fine on the x86 architecture.

Issue #2243
2021-04-20 12:10:57 +02:00
..
main.cc os: use Request_stream API in NVMe driver 2020-04-17 12:39:32 +02:00
pci.h platform_session: cache arg for alloc_dma_buffer 2021-04-20 12:10:57 +02:00
README nvme_drv: add driver for NVMe storage devices 2018-04-19 12:38:22 +02:00
target.mk base: remove SPEC variables of boards (fix #3971) 2021-01-25 13:58:09 +01:00
util.h Replace Genode::strncpy by Genode::copy_cstring 2020-05-27 11:56:45 +02:00

This directory contains the implementation of a NVMe driver component.


Brief
=====

The driver supports PCIe NVMe devices matching at least revision 1.1 of
the NVMe specification. For now it only supports one name space and uses
one completion and one submission queue to handle all I/O requests; one
request is limited to 1MiB of data. It lacks any name space management
functionality.


Configuration
=============

The following config illustrates how the driver is configured:

!<start name="nvme_drv">
!  <resource name="ram" quantum="8M"/>
!  <provides><service name="Block"/></provides>
!  <config>
!    <policy label_prefix="client1" writeable="yes"/>
!  </config>
!</start>


Report
======

The driver supports reporting of active name spaces, which can be enabled
via the configuration 'report' sub-node:

!<report namespace="yes"/>

The report structure is depicted by the following example:

!<controller model="QEMU NVMe Ctrl" serial="FNRD">
! <namespace id="0" block_count="32768" block_size="512"/>
!</controller>