From owner-FreeBSD-users-jp@jp.freebsd.org  Tue Jun 16 18:24:41 1998
Received: (from daemon@localhost)
	by jaz.jp.freebsd.org (8.8.8+3.0Wbeta13/8.7.3) id SAA02223;
	Tue, 16 Jun 1998 18:24:41 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from vcgate3.mei.co.jp (vcgate3.mei.co.jp [202.32.14.53])
	by jaz.jp.freebsd.org (8.8.8+3.0Wbeta13/8.7.3) with ESMTP id SAA02216
	for <FreeBSD-users-jp@jp.freebsd.org>; Tue, 16 Jun 1998 18:24:39 +0900 (JST)
	(envelope-from akiyama@kme.mei.co.jp)
Received: by vcgate3.mei.co.jp (8.9.0/3.7W) with ESMTP
	id SAA15919
	for <FreeBSD-users-jp@jp.freebsd.org>; Tue, 16 Jun 1998 18:21:45 +0900 (JST)
Received: by vcmei.vanc.mei.co.jp (8.8.7/5.9:4.9:vcmei:980605)
	id SAA12322; Tue, 16 Jun 1998 18:20:53 +0900 (JST)
Received: by kmegate.kme.mei.co.jp (4.1/5.5:4.6:kmegate:980525)
	id AA10310; Tue, 16 Jun 98 18:22:21 JST
Date: Tue, 16 Jun 98 18:22:21 JST
From: Shunsuke Akiyama <akiyama@kme.mei.co.jp>
Message-Id: <9806160922.AA10310@kmegate.kme.mei.co.jp>
To: FreeBSD-users-jp@jp.freebsd.org
In-Reply-To: <199806121703.CAA21631@mars.sys.ngy.neis.nec.co.jp> (ito@mk5.neis.nec.co.jp)
Mime-Version: 1.0 (generated by tm-edit 7.94)
Content-Type: text/plain; charset=ISO-2022-JP
Reply-To: FreeBSD-users-jp@jp.freebsd.org
Precedence: bulk
X-Distribute: distribute [version 2.1 (Alpha) patchlevel=24]
X-Sequence: FreeBSD-users-jp 29588
Subject: [FreeBSD-users-jp 29588] Re: re:DVD-RAM
Errors-To: owner-FreeBSD-users-jp@jp.freebsd.org
Sender: owner-FreeBSD-users-jp@jp.freebsd.org

$B$"$-$d$^$G$9!#(B

ito  <ito@mk5.neis.nec.co.jp> writes:

> DVD-RAM$B$N(Bdisklabel,newfs$B$&$^$/$$$-$^$7$?!#(B

$B$=$&$G$9$+!"$=$l$ONI$+$C$?!#(B

> msdos$B7A<0$N(Bmount$B$O$G$-$^$;$s$G$7$?!#IaDL$N7A<0$H$O$A$g$C$H0c$&$N$+$b!#(B
> (Windows95$B$N(BDOS$BAk$G(Bfdisk$B$r$7$?$H$-$G$b(B580MByte$B0L$7$+G'<1$5$l$^$;$s!K(B

$B$&!<$s!"$J$s$@$+$J!<!#(B
$B$R$g$C$H$7$F!"%8%*%a%H%j$H$+$KMm$`LdBj$G$9$+$M!)(B

> $B"":G=i$K(BFreeBSD$B$N(Bfdisk$B$G(Bmsdos$B$N%Q!<%F%#%7%g%s$r:o=|$7$F(Bdisklabel
>   $B$r=q$-9~$b$&$H$7$^$7$?$,%(%i!<$K$J$C$F$7$^$$$^$7$?!#(B

> fdisk -i $B$G:o=|(B

    $B!JN,!K(B

> sh-2.01# # disklabel -B -r -w od0 dvd2g
> disklabel: ioctl DIOCSDINFO: No space left on device

$B$($($H!"$3$N%G%#%9%/%i%Y%k!&%(%s%H%j$O!"$3$3$G=P$7$?%d%D$G$9$h$M!#$@$C(B
$B$?$i!"$3$l$G@5$7$$F0:n$G$9!#%9%i%$%92=$7$F$"$k%G%#%9%/$K$O!"$=$lAjEv$N(B
$B%G%#%9%/%i%Y%k!&%(%s%H%j$rMQ0U$9$kI,MW$,$"$j$^$9!#(B

> $B""<!$K(Bdd$B$G%G%#%9%/$N@hF,ItJ,$r2u$7$F$d$j$^$7$?!#(B

> sh-2.01# dd if=/kernel  of=/dev/od0  bs=1024k
> sh-2.01# disklabel -r -w od0 auto
> sh-2.01# disklabel -r -w od0 dvd2g

> $B$d$C$H=q$-9~$a$^$7$?!#(B

    $B!JN,!K(B

> newfs$B$b(BOK$B$G$9!#(B

> sh-2.01# mount /dev/od0c /mnt

> /dev/od0c     2400222        2  2208204     0%    /mnt

> mount$B$b(BOK$B$G$9!#(B

> $B$H$$$&$3$H$GL5;v%^%&%s%H$G$-$^$7$?!#(Btar$B$G(B300MByte$B$[$I=q$-9~$s$G$_$^$7$?$,(B
> $BLdBj$J$$$h$&$G$9!#B.EY$O(B600KB/S$B$A$g$C$H$C$F$H$3$G$7$g$&$+!#(B

$B$J$k$[$I!"$J$k$[$I!#(B

> $B""(Bdd$B$GE,Ev$K%G%#%9%/$N@hF,ItJ,$r2u$7$F$d$j$^$7$?$,!"$-$l$$$K2u$9$K$O$I$&(B
>   $B$d$C$F$d$l$P$$$$$N$G$7$g$&$+!)(B
>   if=$B$KE,Ev$J%U%!%$%k$r;XDj$9$k$H0J2<$N$h$&$J7k2L$K$J$C$F$7$^$$$^$9!#(B
>   disklabel$B$O=q$-9~$a$F(Bnewfs$B8e$K(Bmount$B$7$F$b(Bdisk$B$O$A$c$s$H3NJ]$5$l$F$$$k(B
>   $B$N$G$9$,!#(B

$B4pK\E*$K$O!"(Bdd $B%3%^%s%I$G!"%G%#%9%/$N@hF,%;%/%?$r2u$;$P$$$$$s$G$9$,!"(B
DVD-RAM $B$N>l9g!"%;%/%?!&%5%$%:(B 2048 $B$H$$$&1~Ez$r$7$F$^$9$+$i!"(Bdd $B%3%^(B
$B%s%I$N%Q%i%a!<%?$K(B bs $B%Q%i%a!<%?$rDI2C;XDj$9$l$PNI$$$H;W$$$^$9!#(B
$B$3$s$J46$8$G$7$g$&$+!#(B

  # dd if=/dev/zero of=/dev/rod0 bs=2048 count=4

count=4 $B$K$J$C$F$$$k$N$O!"%9%i%$%92=$5$l$F$$$J$$%G%#%9%/$K%G%#%9%/%i%Y(B
$B%k$,$"$k;~$N$3$H$r9M$($F$^$9$1$I!"$3$NJU$OE,Ev$G$$$$$s$8$c$J$$$G$7$g$&(B
$B$+!)(B

> $B""<!$N%Q%C%A$r$*BT$A$7$F$*$j$^$9(B> $B=);3$5$s(B

$B$G$O!"AaB.E:IU$7$F$*$-$^$9$N$G!"$b$&>/$7$*$D$-9g$$$/$@$5$$!#(B

$B:#2s$N%Q%C%A$G!">>2<$N(B DVD-RAM $B%I%i%$%V$r(B CD-ROM $B%G%P%$%9$H$7$F$bG'<1(B
$B$G$-$k$h$&$K$J$k$H;W$$$^$9!#$^$"!"6/0z$K(B attach $B$5$;$F$k$@$1$J$N$G!"(Bod 
$B$H(B cd $B$rF1;~%*!<%W%s$7$h$&$H$9$k$H!"$*$+$7$JF0:n$K$J$C$F$7$^$&$@$m$&!"(B
$B$J$s$F$3$H$,M=A[$5$l$^$9!#Cm0U$7$F;H$C$F$/$@$5$$!#(B

$B!t(B $B$=$&$=$&!"%I%i%$%V$H%a%G%#%"$O!";d$N6a=j$K;}$C$F$k$H$3$m$,$"$C$?$s(B
$B!t(B $B$G!"$7$P$i$/B_$7$F$b$i$($k$h$&$K$*4j$$$7$F$^$9!#(B

$B%Q%C%A$N;HMQJ}K!!'(B

1. $B%+!<%M%k!&%3%s%U%#%0%l!<%7%g%s!&%U%!%$%k$K(B

        device od0
        device cd0

   $B$,$"$k$3$H$r3NG'$9$k!#F~$C$F$J$1$l$P!"DI2C$9$k!#(B

2. DVD-RAM $B%I%i%$%V$,;H$($k$h$&$K$J$C$?%+!<%M%k!&%=!<%9$NFb(B 
   sys/scsi/scsiconf.c $B$r(B 2.2.6R $B$N$b$N$KLa$9!#(B

3. $BE:IU$N%Q%C%A$r(B sys/scsi/scsiconf.c $B$KEv$F$k!#(B

4. $B%+!<%M%k$r:n$jD>$7$F%$%s%9%H!<%k8e!":F5/F0$9$k!#(B

$B$H$j$"$($:!"$3$N%Q%C%A$rEv$F$F%3%s%Q%$%k$7$?%+!<%M%k$,5/F0$9$k$3$H$O3N(B
$BG'$7$F$"$j$^$9!#$?$@!";d$N%H%30J30$G$I$&$J$k$+$OITL@$G$9!#%7%9%F%`$N%P%C(B
$B%/%"%C%W$r$H$C$F$+$i!"<B83$5$l$k$3$H$r$*4+$a$7$^$9!#(B

$B$G$O!"$h$m$7$/$*4j$$$7$^$9!#!d(B $B0KF#$5$s(B
-- 
	$B=);3=SJe(B
	akiyama@kme.mei.co.jp

----------------------------------------------------------------------
===================================================================
RCS file: sys/scsi/RCS/scsiconf.c,v
retrieving revision 1.64.2.26
retrieving revision 1.64.2.26.1.3
diff -u -r1.64.2.26 -r1.64.2.26.1.3
--- sys/scsi/scsiconf.c	1998/03/08 06:53:13	1.64.2.26
+++ sys/scsi/scsiconf.c	1998/06/13 14:02:19	1.64.2.26.1.3
@@ -16,7 +16,7 @@
  *
  * New configuration setup: dufault@hda.com
  *
- *      $Id: scsiconf.c,v 1.64.2.26 1998/03/08 06:53:13 jkh Exp $
+ *      $Id: scsiconf.c,v 1.64.2.26.1.3 1998/06/13 14:02:19 akiyama Exp $
  */
 
 #include "opt_scsi.h"
@@ -180,6 +180,7 @@
 #define SC_SHOWME	0x01
 #define	SC_ONE_LU	0x00
 #define	SC_MORE_LUS	0x02
+#define	SC_DUAL_FACE	0x04
 
 static struct scsidevs unknowndev =
 	{
@@ -246,11 +247,29 @@
  * than their respective fields, trailing spaces are implied.
  */
 
+#if NOD > 0
+static struct scsidevs DVD_LF_D100[] =
+{
+#if NCD > 0
+	/*
+	 * Panasonic DVD-RAM drive.  This drive is a dual-faced.
+	 */
+	{
+		T_READONLY, T_READONLY, T_REMOV, "MATSHITA", "PD-2 LF-D*", "*",
+		"cd", SC_ONE_LU
+	},
+#endif	/* NCD */
+	{
+		0
+	}
+};
+#endif	/* NOD */
+
 static struct scsidevs knowndevs[] =
 {
 #if NOD > 0
 	{
-		T_OPTICAL, T_OPTICAL, T_REMOV, "MATSHITA", "PD-1 LF-100*", "*",
+		T_OPTICAL, T_OPTICAL, T_REMOV, "MATSHITA", "PD-1 LF-1*", "*",
 		"od", SC_MORE_LUS
 	},
 	{
@@ -265,6 +284,13 @@
 		T_DIRECT, T_OPTICAL, T_REMOV, "RICOH", "RO-*", "*",
 		"od", SC_ONE_LU
 	},
+	/*
+	 * Panasonic DVD-RAM drive.  This drive is a dual-faced.
+	 */
+	{
+		T_READONLY, T_OPTICAL, T_REMOV, "MATSHITA", "PD-2 LF-D*", "*",
+		"od", SC_ONE_LU | SC_DUAL_FACE, 0, DVD_LF_D100
+	},
 #endif	/* NOD */
 #if NSD > 0
 	{
@@ -419,6 +445,13 @@
 		T_READONLY, T_READONLY, T_REMOV, "IODATA", "CD-C68E" ,"*",
 		"cd", SC_MORE_LUS
 	},
+	/*
+	 * COMPAQ PD drive probed CD-UNIT first.
+	 */
+	{
+		T_READONLY, T_READONLY, T_REMOV, "COMPAQ", "PD-1 LF-1*", "*",
+		"cd", SC_MORE_LUS
+	},
 #endif /* !UKTEST */
 #endif	/* NCD */
 #if NWORM > 0
@@ -513,9 +546,11 @@
 /*
  * Declarations
  */
-static struct scsidevs *scsi_probedev __P((struct scsi_link *sc_link,
+static struct scsidevs *scsi_probedev __P((struct scsidevs *known_devs,
+				    struct scsi_link *sc_link,
 				    boolean *maybe_more, int *type_p));
-static struct scsidevs *scsi_selectdev __P((u_int32_t qualifier, u_int32_t type,
+static struct scsidevs *scsi_selectdev __P((struct scsidevs *known_devs,
+				     u_int32_t qualifier, u_int32_t type,
 				     boolean remov, char *manu, char *model,
 				     char *rev));
 
@@ -1084,6 +1119,8 @@
 	struct scsi_link *sc_link = NULL;
 	boolean maybe_more;
 	int type;
+	struct scsidevs *known_devs;
+	int again;
 
 	if ((bus < 0 ) || ( bus >= scbusses->nelem)) {
 		return ENXIO;
@@ -1123,41 +1160,53 @@
 				maybe_more = 1;
 				continue;
 			}
-			/*
-			 * If we presently don't have a link block
-			 * then allocate one to use while probing
-			 */
-			if (!sc_link) {
-				sc_link = malloc(sizeof(*sc_link), M_TEMP, M_NOWAIT);
-			}
-			*sc_link = *sc_link_proto;	/* struct copy */
-			sc_link->device = &probe_switch;
-			sc_link->target = targ;
-			sc_link->lun = lun;
-			sc_link->quirks = 0;
-			bestmatch = scsi_probedev(sc_link, &maybe_more, &type);
-			if (bestmatch) {
-			    sc_link->quirks = bestmatch->quirks;
-			    sc_link->devmodes = bestmatch->devmodes;
-			} else {
-			    sc_link->quirks = 0;
-			    sc_link->devmodes = NULL;
-			}
-			if (bestmatch) {		/* FOUND */
-				sc_link->device = scsi_device_lookup(type);
-
-				(void)scsi_assign_unit(sc_link);
-
-				if (scsi_alloc_unit(sc_link)) {
-
-					if (scsi_device_attach(sc_link) == 0) {
-						(*scsibus_data->sc_link)[targ][lun] = sc_link;
-						sc_link = NULL;		/* it's been used */
+			known_devs = knowndevs;
+			do {
+				/*
+				 * If we presently don't have a link block
+				 * then allocate one to use while probing
+				 */
+				if (!sc_link) {
+					sc_link = malloc(sizeof(*sc_link),
+							 M_TEMP, M_NOWAIT);
+				}
+				*sc_link = *sc_link_proto;    /* struct copy */
+				sc_link->device = &probe_switch;
+				sc_link->target = targ;
+				sc_link->lun = lun;
+				sc_link->quirks = 0;
+				bestmatch = scsi_probedev(known_devs, sc_link,
+							  &maybe_more, &type);
+				if (bestmatch) {
+					sc_link->quirks = bestmatch->quirks;
+					sc_link->devmodes = bestmatch->devmodes;
+					known_devs = bestmatch->devmodes;
+					again = bestmatch->flags & SC_DUAL_FACE;
+					sc_link->flags &= (~SC_DUAL_FACE);
+				} else {
+					sc_link->quirks = 0;
+					sc_link->devmodes = NULL;
+					known_devs = knowndevs;
+					again = 0;
+				}
+				if (bestmatch) {		/* FOUND */
+					sc_link->device =
+					  scsi_device_lookup(type);
+
+					(void)scsi_assign_unit(sc_link);
+
+					if (scsi_alloc_unit(sc_link)) {
+
+						if (scsi_device_attach(sc_link)
+						    == 0) {
+							(*scsibus_data->sc_link)[targ][lun] = sc_link;
+							sc_link = NULL;		/* it's been used */
+						}
+						else
+							scsi_free_unit(sc_link);
 					}
-					else
-						scsi_free_unit(sc_link);
 				}
-			}
+			} while (again);
 
 			if (!(maybe_more)) {	/* nothing suggests we'll find more */
 				break;				/* nothing here, skip to next targ */
@@ -1214,7 +1263,8 @@
  * entry.
  */
 static struct scsidevs *
-scsi_probedev(sc_link, maybe_more, type_p)
+scsi_probedev(known_devs, sc_link, maybe_more, type_p)
+	struct scsidevs *known_devs;
 	boolean *maybe_more;
 	struct scsi_link *sc_link;
 	int *type_p;
@@ -1365,7 +1415,8 @@
 	 * available sub drivers
 	 */
 	bestmatch = (scsi_selectdev(
-		qualifier, type, remov ? T_REMOV : T_FIXED, manu, model, version));
+		known_devs, qualifier, type, remov ? T_REMOV : T_FIXED,
+		manu, model, version));
 	if ((bestmatch) && (bestmatch->flags & SC_MORE_LUS)) {
 		*maybe_more = 1;
 	}
@@ -1430,7 +1481,8 @@
  * available sub drivers
  */
 static struct scsidevs *
-scsi_selectdev(qualifier, type, remov, manu, model, rev)
+scsi_selectdev(known_devs, qualifier, type, remov, manu, model, rev)
+	struct scsidevs *known_devs;
 	u_int32_t qualifier, type;
 	boolean remov;
 	char   *manu, *model, *rev;
@@ -1440,7 +1492,7 @@
 
 	type |= qualifier;	/* why? */
 
-	for ( thisentry = knowndevs; thisentry->manufacturer; thisentry++ )
+	for ( thisentry = known_devs; thisentry->manufacturer; thisentry++ )
 	{
 		if (type != thisentry->type) {
 			continue;
----------------------------------------------------------------------
