Note that the AHCI driver is *NOT* yet ready for prime time. I still
have at least a week's worth of programming and another week of testing
to do.
This commit gets the basics working, including AHCI's NCQ, but state
changes on the AHCI ports are not handled very well yet, let alone
bus scan/rescan interactions with CAM. ATAPI is not hooked up yet
either. There are some device issues, at least with my 'MyBook' ESATA,
but those may be due to the book's idiotic ESATA firmware.
OpenBSD's code is very well written but even so I've had to make some
major modifications to it to hook it into DragonFly. I had to rewire
the SCSI logic since we have CAM and we do not have the OpenBSD scsi-ata
layer (and I don't want to port it), and I had to rewire the BUSDMA
model. I also bumped up the number of PRDT DMA entries from 24 to 56
to support our 128K MAXPHYS.
I am also doing some major extensions on top of the base port. I will
be adding hot-plug support and port multiplier support. I already have
basic hot-swap detection in place but I still have to wire up the
re-probe and SCSI bus rescan.
--
In terms of testing, the only real way right now is to netboot a system
without NATA and then kldload AHCI after you've booted. I will have
AHCI prioritized soon so both drivers can be present but I want to get
ATAPI working first. In my own testing environment I've been able
to kldload/kldunload the AHCI driver many times without crashing the
system, so the basic attach/detach is already a lot more robust then
NATA. It's nice to not have to reboot the system :-). Netbooting is
really the only way to go for testing this driver.
I've already done some basic testing and AHCI NCQ is quite nice. The
driver has considerably higher performance then NATA but, of course,
it isn't really a fair test since NATA doesn't have AHCI NCQ support.
I'm quite happy, though.
-Matt