Sync CAM, ata(4), ahci(4), siis(4) and mvs(4) with HEAD around 2010-10.
This should give people still using 7.x branch possibility to use new
more reliable and functional CAM-based ATA instead of legacy ata(4).

Some SCSI/RAID drivers were also updated to reflect CAM changes in bus
scanning and support of the different transports/protocols, but not all
of them.

Due to many API/ABI changes this unlikely to be committed to 7-STABLE.

Sponsored by:	Cisco
Initial commit of the geom_raid module, intended to replace ataraid(4)
at GEOM level. At this moment code is able to read and write existing
RAID0 and RAID1 Intel MatrixRAID volumes, but not yet able to create
volumes or do any error handling/recovery/rebuilding/...

Basic design description can be found here:
http://people.freebsd.org/~mav/graid_design.h

Sponsored by:	Cisco Systems, Inc.
MFH r216525:
Initial commit of the geom_raid module, intended to replace ataraid(4)
at GEOM level. At this moment code is able to read and write existing
RAID0 and RAID1 Intel MatrixRAID volumes, but not yet able to create
volumes or do any error handling/recovery/rebuilding/...

Basic design description can be found here:
http://people.freebsd.org/~mav/graid_design.h

Sponsored by:   Cisco Systems, Inc.
Implement basic metadata generation check. To be sure that used metadata is
up to date - delay volumes creation until we have all disks or timeout
expires. This probably obsolete same functionality done at volumes level.
Implement `graid stop`, and common part of `graid label`. Pass "label"
and all further commands to metadata module via special method call.
Some MD structures formatting and size calculation.
Add basic array creation and Intel metadata writing.

Now it is possible to create volume readable by BIOS with:
graid label Intel test RAID1 ada0 ada1
MFH r216649, r216666, r216670, r216682
Hold root mounting while metadata module waits for disks.
Implement three types of forced errors in the ada layer for the
purpose of testing uppper layers in the stack.

kern.cam.ada.X.periodic_read_error specifies that every Nth read will
fail.

kern.cam.ada.X.force_read_error specifies that the next N reads will fail.

kern.cam.ada.X.force_write_error specifies that the next N writes will fail.

These are enabled with 'options ADA_TEST_FAILURE'.  Otherwise, they
aren't added to the kernel.  Also, the sysctl stuff is only used for
this feature, so move it under this option ifdef.
File optimized for testing the work we're doing now.
Use the last 16 bytes of the label rather than the first 16 bytes.
Use only 24 bytes to accomidate the SATA label.  Intel doesn't do SAS
drives for this kind of raid, so no need to waste stack in case we see
a SAS drive with the intel metadata on it.

Reviewed by:	mav@
First pass at error recovery: if the first disk that we get errors on
has a problem, try from the second one.  Note info about possible bad
sector remap attempt through write, and some ideas on when to eject
the subdisk from the disk.
MFH r216690:
Hold root mounting while metadata module waits for disks.
Make `geom XXX list` and `geom XXX status` outputs more consistent:
Add -a options to print all geoms, not only ones with providers.
Add -g option for `status` to report geom's names, not provider's.
Make `status` by default report provider's status (if present), not geom's.
Make `status` report consumer's statuses, not only "synchronized" field.

Discussed with:	pjd@
Fix panic when built without ADA_TEST_FAILURE.
g_io_getattr() doesn't returns real length of obtained string. Calculate it
explicitly.
Add options to specify volume and strip sizes.
Make provider names format configurable via kern.geom.raid.name_format
sysctl/tunable:
 0 - raid/rX,
 1 - raid/{volume name}.