Link Power Management support for AHCI capable hardware is maturing, though a few devices have issues.
Basic Serial ATA support
The "ATA host state machine", the core of the entire driver, is considered production-stable.
Error handling is also production-stable, but continues to be refined (because by its very nature, faults are rare, therefore fault workaround and prevention testing is all the more difficult).
Support for SATA Native Command Queueing (NCQ) is available.
Tangent: Host-based queueing and Native Command Queueing: Queueing is the process of sending multiple commands to a single device, without waiting for prior commands to finish. This increases performance and reduces latency. There are three types of queueing in the ATA world:
- "legacy TCQ" -- some PATA devices support this. This design is largely a hack on top of existing ATA, to enable queueing for certain devices. Since host controllers did not require updates to support this, there are many limitations and complications that an OS driver must deal with, to enable legacy TCQ. As a result, legacy TCQ will only be supported on those few host controllers which provide host-based TCQ (see next item). This is very low priority, and may never be supported.
- "host-based TCQ" -- the host controller supports a queue of drive commands, whether or not the drive supports it.
- "Native Command Queueing" -- both host and drive cooperate in the queueing and execution of drive commands. This should provide the highest performance and lowest latency of all three options.
No. 1 is unlikely to be supported. No. 2 may supported by libata, on a per-driver basis, for all hardware that supports it. No. 3 is supported by libata, for most hardware and devices that support NCQ.
libata supports both controller hotplug ("yank the card") and device hotplug ("yank the drive").
Most SATA controllers are hotplug-capable, if your system bus (PCI, etc.) is also hotplug-capable. All SATA devices are hotplug-capable.
The following SATA controllers will never support hotplug: Intel ICH5-8 (non-AHCI), Pacific Digital Talon (ADMA), Promise SATA SX4.
These controllers do not export enough information about the SATA phy to make it possible to support hotplug. In some cases, such as Intel ICH5-8 (non-AHCI), it is possible to support "coldplug" operation: the user informs the OS driver he wishes to disconnect his SATA device, rather than simply disconnecting it.
Polling for certain errors on these controllers may make it possible to provide the appearance of hotplug, in some case.
Power Management support
Over and above the power management specified in the ATA/ATAPI specification, one can aggressively control the power consumption of SATA hosts, the SATA bus, and the SATA device. As discussed on some mailing lists, the aggressive power management can be too aggressive, and park the heads too often (resulting in shortened disk drive life). Careful attention must be paid to balance.
There is little demand at the present time for aggressive, automatic power management under Linux.
System suspend/resume (suspend-to-RAM, suspend-to-disk) is currently supported for ata_piix, ahci, sata_fsl, sata_inic162x, sata_nv, sata_sil, sata_sil24 and sata_via drivers.
ACPI support is also needed in certain situations, to ensure that Linux properly initializes the device on boot, and after resume. A patch from Intel is available in -mm and libata-dev.git for this.
With the integration of ATA passthru in kernel 2.6.15, SMART is fully supported in the standard libata driver.
There are also some lingering reports that using SMART commands while the disk is in heavy usage leads to timeouts and other failures. This needs to be investigated. Haven't seen any of these reports recently.
libata is not specific to Serial ATA. It works for Parallel ATA (a.k.a. IDE) as well. Certain SATA controllers such as Promise and SiS include PATA ports on their SATA controllers.
libata has gained full support for PATA, including older chipsets and devices with buggy/problematic designs. Alan Cox has done a lot of work on this. PATA is be fully supported, alongside SATA. libata PATA drivers exist for almost all PATA chipsets.
libata PATA drivers will not be turned on by default for a long time, to avoid conflicts with CONFIG_IDE (the traditional IDE driver).
ATAPI devices are now supported on all controllers that support ATAPI (most of them except Marvell 88SX504x, 88SX508x and Promise SX4).
Port Multiplier support
Port Multipler (PMP) capability allows multiple SATA devices to attach to a concentrator, which then attaches to a SATA controller via a single SATA cable.
Both port multiplier modes are supported, see SATA hardware features for a detailed list of chips which support it.