1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-15 10:17:20 +00:00
Mirror of the FreeBSD src repository https://git.FreeBSD.org/src.git .
Go to file
Jim Harris bb0ec6b359 This is the first of several commits which will add NVM Express (NVMe)
support to FreeBSD.  A full description of the overall functionality
being added is below.  nvmexpress.org defines NVM Express as "an optimized
register interface, command set and feature set fo PCI Express (PCIe)-based
Solid-State Drives (SSDs)."

This commit adds nvme(4) and nvd(4) driver source code and Makefiles
to the tree.

Full NVMe functionality description:
Add nvme(4) and nvd(4) drivers and nvmecontrol(8) for NVM Express (NVMe)
device support.

There will continue to be ongoing work on NVM Express support, but there
is more than enough to allow for evaluation of pre-production NVM Express
devices as well as soliciting feedback.  Questions and feedback are welcome.

nvme(4) implements NVMe hardware abstraction and is a provider of NVMe
namespaces.  The closest equivalent of an NVMe namespace is a SCSI LUN.
nvd(4) is an NVMe consumer, surfacing NVMe namespaces as GEOM disks.
nvmecontrol(8) is used for NVMe configuration and management.

The following are currently supported:
nvme(4)
- full mandatory NVM command set support
- per-CPU IO queues (enabled by default but configurable)
- per-queue sysctls for statistics and full command/completion queue
     dumps for debugging
- registration API for NVMe namespace consumers
- I/O error handling (except for timeoutsee below)
- compilation switches for support back to stable-7

nvd(4)
- BIO_DELETE and BIO_FLUSH (if supported by controller)
- proper BIO_ORDERED handling

nvmecontrol(8)
- devlist: list NVMe controllers and their namespaces
- identify: display controller or namespace identify data in
      human-readable or hex format
- perftest: quick and dirty performance test to measure raw
      performance of NVMe device without userspace/physio/GEOM
      overhead

The following are still work in progress and will be completed over the
next 3-6 months in rough priority order:
- complete man pages
- firmware download and activation
- asynchronous error requests
- command timeout error handling
- controller resets
- nvmecontrol(8) log page retrieval

This has been primarily tested on amd64, with light testing on i386.  I
would be happy to provide assistance to anyone interested in porting
this to other architectures, but am not currently planning to do this
work myself.  Big-endian and dmamap sync for command/completion queues
are the main areas that would need to be addressed.

The nvme(4) driver currently has references to Chatham, which is an
Intel-developed prototype board which is not fully spec compliant.
These references will all be removed over time.

Sponsored by:        Intel
Contributions from:  Joe Golio/EMC <joseph dot golio at emc dot com>
2012-09-17 19:23:01 +00:00
bin Revert 240527: 2012-09-16 16:08:20 +00:00
cddl Merge recent zfs vendor changes, sync code and adjust userland DEBUG. 2012-09-12 18:05:43 +00:00
contrib Pull in r163967 from upstream llvm trunk: 2012-09-15 17:02:05 +00:00
crypto openssl: change SHLIB_VERSION_NUMBER to reflect the reality 2012-09-11 06:10:49 +00:00
etc rc.d/power_profile: use recently added Cmax for cx_lowest 2012-09-11 06:25:10 +00:00
games Add a couple of nice quotes from Edward Everett Hale 2012-07-29 01:01:35 +00:00
gnu For building libstdc++ and libsupc++, filter out any -stdlib=libc++ 2012-08-25 23:08:24 +00:00
include o Create directory sys/netpfil, where all packet filters should 2012-09-14 11:51:49 +00:00
kerberos5 Centralize the specification of the krb5 build tools. 2012-06-01 21:26:28 +00:00
lib Optimise i387 trigonometric functions. Replace "andw 0x400,%ax \ jnz" with 2012-09-16 16:58:49 +00:00
libexec Bump date missed in r202756 2012-09-14 17:50:42 +00:00
release Update usage() in comment section. 2012-09-17 02:35:00 +00:00
rescue Partial MFV (illumos-gate 13753:2aba784c276b) 2012-07-30 23:14:24 +00:00
sbin Minor mdoc fix. 2012-09-14 13:14:48 +00:00
secure Upgrade OpenSSH to 6.1p1. 2012-09-03 16:51:41 +00:00
share Add UQ_UMS_IGNORE quirk. 2012-09-17 19:06:35 +00:00
sys This is the first of several commits which will add NVM Express (NVMe) 2012-09-17 19:23:01 +00:00
tools Correct double "the the" 2012-09-14 21:28:56 +00:00
usr.bin Make systat(1) accept fractional number of seconds. 2012-09-17 13:36:47 +00:00
usr.sbin In snmp_hostres, device_map table is used for consistent device table 2012-09-17 07:32:53 +00:00
COPYRIGHT Happy 2012 to FreeBSD users in Samoa. 2011-12-31 04:38:04 +00:00
LOCKS
MAINTAINERS We moved to subversion ages ago. 2012-09-10 14:11:10 +00:00
Makefile Not all Pmake derivatives silently handle empty shell output, so ensure there 2012-09-12 14:44:25 +00:00
Makefile.inc1 Introduce a new make variable COMPILER_TYPE that specifies what 2012-09-13 16:00:46 +00:00
ObsoleteFiles.inc Add removed if_pflow.h. 2012-09-09 08:14:47 +00:00
README Vendor import of OpenSSH 6.1p1. 2012-08-29 15:55:54 +00:00
UPDATING Merge the projects/pf/head branch, that was worked on for last six months, 2012-09-08 06:41:54 +00:00

This is the top level of the FreeBSD source directory.  This file
was last revised on:
$FreeBSD$

For copyright information, please see the file COPYRIGHT in this
directory (additional copyright information also exists for some
sources in this tree - please see the specific source directories for
more information).

The Makefile in this directory supports a number of targets for
building components (or all) of the FreeBSD source tree, the most
commonly used one being ``world'', which rebuilds and installs
everything in the FreeBSD system from the source tree except the
kernel, the kernel-modules and the contents of /etc.  The ``world''
target should only be used in cases where the source tree has not
changed from the currently running version.  See:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html
for more information, including setting make(1) variables.

The ``buildkernel'' and ``installkernel'' targets build and install
the kernel and the modules (see below).  Please see the top of
the Makefile in this directory for more information on the
standard build targets and compile-time flags.

Building a kernel is a somewhat more involved process, documentation
for which can be found at:
   http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html
And in the config(8) man page.
Note: If you want to build and install the kernel with the
``buildkernel'' and ``installkernel'' targets, you might need to build
world before.  More information is available in the handbook.

The sample kernel configuration files reside in the sys/<arch>/conf
sub-directory (assuming that you've installed the kernel sources), the
file named GENERIC being the one used to build your initial installation
kernel.  The file NOTES contains entries and documentation for all possible
devices, not just those commonly used.  It is the successor of the ancient
LINT file, but in contrast to LINT, it is not buildable as a kernel but a
pure reference and documentation file.


Source Roadmap:
---------------
bin		System/user commands.

cddl		Various commands and libraries under the Common Development
		and Distribution License.

contrib		Packages contributed by 3rd parties.

crypto		Cryptography stuff (see crypto/README).

etc		Template files for /etc.

games		Amusements.

gnu		Various commands and libraries under the GNU Public License.
		Please see gnu/COPYING* for more information.

include		System include files.

kerberos5	Kerberos5 (Heimdal) package.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

rescue		Build system for statically linked /rescue utilities.

sbin		System commands.

secure		Cryptographic libraries and commands.

share		Shared resources.

sys		Kernel sources.

tools		Utilities for regression testing and miscellaneous tasks.

usr.bin		User commands.

usr.sbin	System administration commands.


For information on synchronizing your source tree with one or more of
the FreeBSD Project's development branches, please see:

  http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/synching.html