on 26/04/2011 13:57 Manuel Bouyer said the following: > On Wed, Apr 20, 2011 at 02:32:08PM +0300, Andriy Gapon wrote: >> on 20/04/2011 03:38 Jonathan Stone said the following: >>> Also that both FreeBSD and Linux took the plunge and handle ATA drives >>> through >>> their SCSI mid-layer. I agree, that code is big; but maybe that >>> alternative is >>> worth examiining, too. >> >> AFAIK, (Open)Solaris did the same. >> And to clarify: you are actually talking about CAM layer. Yes, previously >> CAM >> layer was only used for SCSI. > > I'm still not sure what the rationale for this is. Managing the tags > is simple and could easily be abstracted and shared by the 2 subsystems > if we want to.
Right. And that's what CAM layer does (in addition to other things). > Using the scsi code for ATA drives means that you either Again, I don't understand this. We should first clearly define what SCSI code is. In my understanding SCSI code has nothing to do with ATA disks (in FreeBSD at least). > have to teach the scsi sd driver to build ATA commands, and the whole > scsipi to handle ATA commands in addition to SCSI and ATAPI; or > or keep SCSI commands in the mid-layer and convert SCSI to ATA commands in > the ATA layer (which I consider useless overhead). FreeBSD did neither, but closer to the first option. There is a new peripheral driver that uses ATA commands to talk to its disks. Most of the intermediate layer is command-agnostic. Transport-specific places had to be taught about ATA, of course. > Actually I suspect the idea to have ATA drives show up as SCSI comes from > windows. But this was done so on windows because of a limitation of the > windows kernel: if you want to have a drive appears as ATA the controller > has to follow the pciide 1 specification. if you have a smarter controller, > the only way to have full control at the controller driver level is to > register it as a SCSI driver. Can't say about other OSes, but FreeBSD has chosen this approach because SATA disks and AHCI controllers are much closer to SCSI concepts, than the primitive PATA/IDE were. Here is a very good overview written by a person who did all the work in FreeBSD: ftp2.pl.freebsd.org/pub/FreeBSD/DOC/ata-cam_en.pdf -- Andriy Gapon