> Thanks for letting me know how to make it work.  I've run the
> dtrace script and tried to eject a DVD in a Plextor 716UF
> connected via firewire.  I got lots of  lines like:
> 
> 0  43859     scsa1394_cmd_fake_comp:entry l_rmb_orig 1, l_nosup_tur 1, 
> l_nosup_start_stop 1, l_nosup_inquiry 0


Fine, this confirms that you're seeing the same issue that I've reported as 
CR 6448149 [*]. scsa1394 thinks that it is talking to a device that has broken
"TEST UNIT READY" and "START STOP UNIT" commands and refuses
to send these SCSI commands to the firewire device.  Problem is that these
flags (l_nosup_tur and l_nosup_start_stop) shouldn't be set, I bet that your
optical firewire device has no problem with these commands.

[*] http://www.opensolaris.org/jive/thread.jspa?threadID=10965&tstart=0

Suggested fix:
==============

A "TEST_UNIT_READY" command failing with "status check" is not an
indication that TEST UNIT READY commands are broken and need
fake responses.

For example a status check response with

KEY_UNIT_ATTENTION, 29h/00h  POWER ON, RESET, OR BUS DEVICE RESET OCCURRED
KEY_NOT_READY,      3Ah/00h  MEDIUM NOT PRESENT

is quite common with optical media devices and such a respone tells us
that the TEST_UNIT_READY command is working just fine.

diff -ru 
../opensolaris-20060703/usr/src/uts/common/io/1394/targets/scsa1394/hba.c 
usr/src/uts/common/io/1394/targets/scsa1394/hba.c
--- ../opensolaris-20060703/usr/src/uts/common/io/1394/targets/scsa1394/hba.c   
2006-07-04 13:15:41.000000000 +0200
+++ usr/src/uts/common/io/1394/targets/scsa1394/hba.c   2006-07-11 
23:29:46.825253569 +0200
@@ -999,6 +999,10 @@
        if (scsa1394_probe_tran(pkt) < 0) {
                if (pkt->pkt_reason == CMD_INCOMPLETE) {
                        ret = SCSIPROBE_NORESP;
+               } else if (pkt->pkt_reason == CMD_TRAN_ERR &&
+                   (*(pkt->pkt_scbp) & STATUS_MASK) == STATUS_CHECK &&
+                   pkt->pkt_state & STATE_ARQ_DONE) {
+                       ret = SCSIPROBE_EXISTS;
                } else {
                        ret = SCSIPROBE_FAILURE;
                }
 
 
This message posted from opensolaris.org

Reply via email to