From owner-freebsd-firewire Thu Oct 24 1: 7:31 2002 Delivered-To: freebsd-firewire@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 8B85037B404 for ; Thu, 24 Oct 2002 01:07:27 -0700 (PDT) Received: from is1.mh.itc.u-tokyo.ac.jp (is1.mh.itc.u-tokyo.ac.jp [133.11.205.11]) by mx1.FreeBSD.org (Postfix) with ESMTP id 30A0543E65 for ; Thu, 24 Oct 2002 01:07:26 -0700 (PDT) (envelope-from simokawa@sat.t.u-tokyo.ac.jp) Received: from is1.mh.itc.u-tokyo.ac.jp (is1.mh.itc.u-tokyo.ac.jp [127.0.0.1]) by is1.mh.itc.u-tokyo.ac.jp (Postfix) with ESMTP id 22F7421809B for ; Thu, 24 Oct 2002 17:07:20 +0900 (JST) Received: from mailhosting.itc.u-tokyo.ac.jp (IDENT:mirapoint@mailhosting.itc.u-tokyo.ac.jp [133.11.205.3]) by is1.mh.itc.u-tokyo.ac.jp (8.11.3/8.11.3) with ESMTP id g9O87Ju19716; Thu, 24 Oct 2002 17:07:19 +0900 Received: from ett.sat.t.u-tokyo.ac.jp (nat.keisu.t.u-tokyo.ac.jp [133.11.68.2]) by mailhosting.itc.u-tokyo.ac.jp (Mirapoint Messaging Server MOS 2.9.3.2) with ESMTP id AHG00717; Thu, 24 Oct 2002 17:07:18 +0900 (JST) Date: Thu, 24 Oct 2002 17:07:18 +0900 Message-ID: From: Hidetoshi Shimokawa To: Dmitry Mottl Cc: freebsd-firewire@freebsd.org Newsgroups: freebsd.firewire,freebsd.scsi Subject: Re: VAIO Firewire dock station with DVD-ROM In-Reply-To: References: <20021022154423.X217-100000@localhost> User-Agent: Wanderlust/2.9.14 (Unchained Melody) REMI/1.14.3 (Matsudai) FLIM/1.14.3 (=?ISO-8859-1?Q?Unebigory=F2mae?=) APEL/10.3 MULE XEmacs/21.4 (patch 8) (Honest Recruiter) (i386--freebsd) X-Face: OE([KxWyJI0r[R~S/>7ia}SJ)i%a,$-9%7{*yihQk|]gl}2p#"oXmX/fT}Bn7: #j7i14gu$jgR\S*&C3R/pJX List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG At Wed, 23 Oct 2002 10:50:44 +0900, simokawa wrote: > > At Tue, 22 Oct 2002 15:54:03 +0400 (MSD), > Dmitry Mottl wrote: > > > > Hello, > > > > I have Sony VAIO laptop and I have successfuly installed firewire driver (/sys/dev/firewire/*) on it and i'm > > using DVD on DockStation without any problems except one -- i can't listen audio CD-ROMs. > > CD-ROM can be mount in usual way and all is going fine, if it has data (not audio) format. > > > > If i try to play audio with /usr/sbin/cdcontrol, following messages appear: > > > > Oct 22 15:42:06 VAIO /kernel: sbp0:0:0 ORB status src:1 resp:0 dead:0 len:7 stat:c orb:000025270 > > Oct 22 15:42:06 VAIO /kernel: sbp0:0:0 Request aborted > > Oct 22 15:42:06 VAIO /kernel: sbp0:0:0 XPT_SCSI_IO: cmd: 1a 00 0e 00 1c 00 aa 00 0c 00, flags: 0x40, 6b cmd/28b data/32b sense > > Oct 22 15:42:06 VAIO /kernel: sbp0:0:0 SCSI status 2 sfmt 0 valid 0 key 5 code 20 qlfr 0 len 7 > > Oct 22 15:42:06 VAIO /kernel: (cd0:sbp0:0:0:0): MODE SENSE(06). CDB: 1a 0 e 0 1c 0 > > Oct 22 15:42:06 VAIO /kernel: (cd0:sbp0:0:0:0): ILLEGAL REQUEST asc:20,0 > > Oct 22 15:42:06 VAIO /kernel: (cd0:sbp0:0:0:0): Invalid command operation code > > > > Thank you for your advice. > > This seems another 6bytes and 10bytes command problem. > /sys/cam/scsi/scsi_cd.c issues "MODE SENSE(6)" though the DVD drive > doesn't support it. > We need some workaround to use "MODE SENSE(10)". Could you try this patch? Index: sbp.c =================================================================== RCS file: /home/firewire/src/sys/dev/firewire/sbp.c,v retrieving revision 1.173 diff -u -r1.173 sbp.c --- sbp.c 23 Oct 2002 13:07:05 -0000 1.173 +++ sbp.c 24 Oct 2002 08:04:28 -0000 @@ -299,6 +299,10 @@ static void sbp_detach_target __P((struct sbp_target *)); static void sbp_timeout __P((void *arg)); static void sbp_mgm_orb __P((struct sbp_dev *, int)); +#define FIX_6BYTES_CMD 1 +#if FIX_6BYTES_CMD +static int sbp_scsi_6_to_10 __P((unsigned char *, unsigned char *, int)); +#endif MALLOC_DEFINE(M_SBP, "sbp", "SBP-II/Firewire"); @@ -1754,6 +1758,7 @@ { struct ccb_scsiio *csio; struct sbp_ocb *ocb; + void *cdb; int s, speed; csio = &ccb->csio; @@ -1823,15 +1828,19 @@ if (csio->ccb_h.flags & CAM_DATA_PHYS) printf("sbp: CAM_DATA_PHYS\n"); - if (csio->ccb_h.flags & CAM_CDB_POINTER) { - bcopy(csio->cdb_io.cdb_ptr, - (void *)(uintptr_t)(volatile void *)&ocb->orb[5], - (csio->cdb_len + 3) & ~0x3); - } else { - bcopy(&csio->cdb_io.cdb_bytes, + if (csio->ccb_h.flags & CAM_CDB_POINTER) + cdb = (void *)csio->cdb_io.cdb_ptr; + else + cdb = (void *)&csio->cdb_io.cdb_bytes; +#if FIX_6BYTES_CMD + sbp_scsi_6_to_10((char *)cdb, + (char *)(uintptr_t)(volatile void *)&ocb->orb[5], + (csio->cdb_len + 3) &~0x3); +#else + bcopy(cdb, (void *)(uintptr_t)(volatile void *)&ocb->orb[5], (csio->cdb_len + 3) &~0x3); - } +#endif /* printf("ORB %08x %08x %08x %08x\n", ntohl(ocb->orb[0]), ntohl(ocb->orb[1]), ntohl(ocb->orb[2]), ntohl(ocb->orb[3])); printf("ORB %08x %08x %08x %08x\n", ntohl(ocb->orb[4]), ntohl(ocb->orb[5]), ntohl(ocb->orb[6]), ntohl(ocb->orb[7])); @@ -2190,6 +2199,50 @@ splx(s); } + +#if FIX_6BYTES_CMD +/* + * This is based on umass_scsi_6_to_10() in umass.c. + */ + +static int +sbp_scsi_6_to_10(unsigned char *cmd, unsigned char *rcmd, int size) +{ + switch (cmd[0]) { + case READ_6: + rcmd[0] = READ_10; + break; + case WRITE_6: + rcmd[0] = WRITE_10; + break; + case MODE_SENSE_6: + rcmd[0] = MODE_SENSE_10; + break; + case MODE_SELECT_6: + rcmd[0] = MODE_SELECT_10; + break; + default: + bcopy(cmd, rcmd, size); + return (0); + } + + bzero(rcmd + 1, 10 - 1); + switch (cmd[0]) { + case READ_6: + case WRITE_6: + memcpy(&rcmd[3], &cmd[1], 3); + break; + case MODE_SENSE_6: + rcmd[2] = cmd[2]; + case MODE_SELECT_6: + rcmd[1] = cmd[1]; + break; + } + rcmd[8] = cmd[4]; + rcmd[9] = cmd[5]; + return (1); +} +#endif static devclass_t sbp_devclass; /\ Hidetoshi Shimokawa \/ simokawa@sat.t.u-tokyo.ac.jp PGP public key: http://www.sat.t.u-tokyo.ac.jp/~simokawa/pgp.html To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-firewire" in the body of the message