I just spent a bunch of time digging through the ATA driver to figure out why 
OpenSolaris as a QEMU guest wouldn't work without setting 
atapi-cd-dma-enabled=0 from GRUB.

This code doesn't disable DMA because for ATAPI (the simulated device is ATA-4) 
it says the capability bit is defunct.

   2184         /*
   2185          * DMA mode is mandatory on ATA-3 (or newer) drives but is
   2186          * optional on ATA-2 (or older) drives.
   2187          *
   2188          * On ATA-2 drives the ai_majorversion word will probably
   2189          * be 0xffff or 0x0000, check the (now obsolete) DMA bit in
   2190          * the capabilities word instead. The order of these tests
   2191          * is important since an ATA-3 drive doesn't have to set
   2192          * the DMA bit in the capabilities word.
   2193          *
   2194          */
   2195 
   2196         if (!((ata_drvp->ad_id.ai_majorversion & 0x8000) == 0 &&
   2197             ata_drvp->ad_id.ai_majorversion >= (1 << 2)) &&
   2198             !(ata_drvp->ad_id.ai_cap & ATAC_DMA_SUPPORT)) {
   2199                 ata_dev_DMA_sel_msg = "device not DMA capable";
   2200 
   2201                 return (ATA_DMA_OFF);
   2202         }

Does anyone have any suggestions on how best to handle this? Should I just add 
another entry to the blacklist? Or, is there a better way of detecting if an 
ATAPI device is really DMA capable and falling back to PIO if it isn't?

- Eric
 
 
This message posted from opensolaris.org
_______________________________________________
opensolaris-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

Reply via email to