FreeBSD src
Go to file
Scott Long 52c9ce25d8 Separate the parallel scsi knowledge out of the core of the XPT, and
modularize it so that new transports can be created.

Add a transport for SATA

Add a periph+protocol layer for ATA

Add a driver for AHCI-compliant hardware.

Add a maxio field to CAM so that drivers can advertise their max
I/O capability.  Modify various drivers so that they are insulated
from the value of MAXPHYS.

The new ATA/SATA code supports AHCI-compliant hardware, and will override
the classic ATA driver if it is loaded as a module at boot time or compiled
into the kernel.  The stack now support NCQ (tagged queueing) for increased
performance on modern SATA drives.  It also supports port multipliers.

ATA drives are accessed via 'ada' device nodes.  ATAPI drives are
accessed via 'cd' device nodes.  They can all be enumerated and manipulated
via camcontrol, just like SCSI drives.  SCSI commands are not translated to
their ATA equivalents; ATA native commands are used throughout the entire
stack, including camcontrol.  See the camcontrol manpage for further
details.  Testing this code may require that you update your fstab, and
possibly modify your BIOS to enable AHCI functionality, if available.

This code is very experimental at the moment.  The userland ABI/API has
changed, so applications will need to be recompiled.  It may change
further in the near future.  The 'ada' device name may also change as
more infrastructure is completed in this project.  The goal is to
eventually put all CAM busses and devices until newbus, allowing for
interesting topology and management options.

Few functional changes will be seen with existing SCSI/SAS/FC drivers,
though the userland ABI has still changed.  In the future, transports
specific modules for SAS and FC may appear in order to better support
the topologies and capabilities of these technologies.

The modularization of CAM and the addition of the ATA/SATA modules is
meant to break CAM out of the mold of being specific to SCSI, letting it
grow to be a framework for arbitrary transports and protocols.  It also
allows drivers to be written to support discrete hardware without
jeopardizing the stability of non-related hardware.  While only an AHCI
driver is provided now, a Silicon Image driver is also in the works.
Drivers for ICH1-4, ICH5-6, PIIX, classic IDE, and any other hardware
is possible and encouraged.  Help with new transports is also encouraged.

Submitted by:	scottl, mav
Approved by:	re
2009-07-10 08:18:08 +00:00
bin Add manual page links to advertise procstat(1) a little better. 2009-07-09 16:40:00 +00:00
cddl The mutex_owned() macro should operate on kmutex_t and not on mutex_t. 2009-07-09 20:22:05 +00:00
contrib This is the solution that ISC committed after 9.6.1-release for 2009-06-25 19:52:45 +00:00
crypto Use the closefrom(2) system call. 2009-06-16 15:30:10 +00:00
etc Separate the parallel scsi knowledge out of the core of the XPT, and 2009-07-10 08:18:08 +00:00
games Misc fixed to fortunes 2009-06-05 07:57:10 +00:00
gnu Back out previous revision until better tested fix is ready. 2009-06-29 01:33:59 +00:00
include Separate the parallel scsi knowledge out of the core of the XPT, and 2009-07-10 08:18:08 +00:00
kerberos5 Disconnect closefrom.c as we have it as a system call. 2009-06-16 00:09:06 +00:00
lib Separate the parallel scsi knowledge out of the core of the XPT, and 2009-07-10 08:18:08 +00:00
libexec Back out previous revision until better tested fix is ready. 2009-06-29 01:33:59 +00:00
release Add libjail to the boot_crunch binaries (for ifconfig). 2009-06-29 13:59:30 +00:00
rescue Add the "vnet" and "-vnet" options, to allow moving interfaces between 2009-06-24 18:21:37 +00:00
sbin Separate the parallel scsi knowledge out of the core of the XPT, and 2009-07-10 08:18:08 +00:00
secure Use the closefrom(2) system call. 2009-06-16 15:30:10 +00:00
share Separate the parallel scsi knowledge out of the core of the XPT, and 2009-07-10 08:18:08 +00:00
sys Separate the parallel scsi knowledge out of the core of the XPT, and 2009-07-10 08:18:08 +00:00
tools Fix some uninitialise variables. 2009-07-08 10:16:16 +00:00
usr.bin Add manual page links to advertise procstat(1) a little better. 2009-07-09 16:40:00 +00:00
usr.sbin Give a more expected behavior to -[hns] options, defaulting to all 2009-07-08 15:57:22 +00:00
COPYRIGHT Bump the odometer of the years. A little early this year for 7.1R. 2008-12-30 04:46:25 +00:00
LOCKS Update LOCKS syntax. 2008-06-05 19:47:58 +00:00
MAINTAINERS - pkg_install is maintained by portmgr. 2009-07-06 11:46:18 +00:00
Makefile Add a new world named 'mips' to our universe. 2009-04-01 17:11:50 +00:00
Makefile.inc1 Back out previous revision until better tested fix is ready. 2009-06-29 01:33:59 +00:00
ObsoleteFiles.inc Add usr/include/nfs/rpcv2.h 2009-07-01 07:37:21 +00:00
README Simply running ``make world'' will bomb unless you dig up the 2006-06-07 03:33:48 +00:00
UPDATING Clarify the node about removing NFS_LEGACYRPC 2009-07-01 18:12:50 +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.

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