What? I thought Matt was only going to do an AHCI driver? Well, after diving the Silicon Image data book and looking at the OpenBSD and Linux driver code for it I figured I could do a full driver using the AHCI driver as a base, and I figured I could do it in three days.
This is the third day and its almost done. There are some PM-related issues and probing issues left but it basically works. It is not yet hooked into the kernel build but it is available as a module in /usr/src/sys/dev/disk/sili. This driver only supports the Sil 3132 at the moment. It is a PCI-e 2-port E-Sata card. Other chips will be added once this one is solid. The Sil chip hardware is a little buggy but from reading the linux driver it looks like the bugs can be worked around fairly well. A lot of the remaining work I have to do is to deal with the chip bugs. As with the AHCI driver my SILI driver supports NCQ, Hot-Plug, Port Multipliers, and Hot-Plug on targets behind Port Multipliers. It also supports FIS-based switching and FIS-based switching to targets behind port multipliers, so it can access multiple drives behind a PM quite efficiently. In my tests the aggegate transfer rate limit seems to be about 150 MBytes/sec which is suspiciously close to the limit for SATA-150, even though its supposed to be connecting at SATA-300 speeds. I'll continue to research that. The chip seems to top out at around 30,000 transaction a second. Not bad at all. In contrast, the AHCI driver cannot currently do FIS-Based switching or NCQ to targets behind a PM, but it can do NCQ to directly-connected targets. So the Sili chip is primarily of interest to people who want to use Port Multipliers. -Matt Matthew Dillon <dil...@backplane.com>