Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Jul 2001 18:03:39 -0700 (PDT)
From:      Matthew Jacob <mjacob@feral.com>
To:        <alpha@FreeBSD.ORG>
Subject:   MFC'ing cdrom/floppy changes?
Message-ID:  <20010730180224.P57563-100000@wonky.feral.com>

next in thread | raw e-mail | index | archive | help

All I could actually chase down were 3 file changes- does anyone have any
objection to having this committed and us doing testing over the next 2-3
weeks?

Index: alpha/cdboot/Makefile
===================================================================
RCS file: /home/ncvs/src/sys/boot/alpha/cdboot/Makefile,v
retrieving revision 1.3.2.1
diff -u -r1.3.2.1 Makefile
--- alpha/cdboot/Makefile	2000/11/27 02:16:39	1.3.2.1
+++ alpha/cdboot/Makefile	2001/07/31 00:42:55
@@ -1,12 +1,11 @@
-#	$FreeBSD: src/sys/boot/alpha/cdboot/Makefile,v 1.3.2.1 2000/11/27 02:16:39 obrien Exp $
+#	$FreeBSD: src/sys/boot/alpha/cdboot/Makefile,v 1.5 2001/04/07 23:52:31 gallatin Exp $

-BINDIR=		/boot
 BASE= 		cdboot
 PROG= 		${BASE}
 NOMAN=
-STRIP=
+NEWVERSWHAT=	"SRM CD9660 boot" alpha
+LOAD_ADDRESS=	${PRIMARY_LOAD_ADDRESS}

-${BASE}: ${BASE}-4.0R.gz.uu
-	uudecode -p ${.CURDIR}/${BASE}-4.0R.gz.uu | gunzip > ${BASE}
+CFLAGS+=	-DLOADER_CDROM_SUPPORT

-.include <bsd.prog.mk>
+.include	<${.CURDIR}/../common/Makefile.common>
Index: alpha/libalpha/srmdisk.c
===================================================================
RCS file: /home/ncvs/src/sys/boot/alpha/libalpha/srmdisk.c,v
retrieving revision 1.8.2.1
diff -u -r1.8.2.1 srmdisk.c
--- alpha/libalpha/srmdisk.c	2000/03/16 18:13:25	1.8.2.1
+++ alpha/libalpha/srmdisk.c	2001/07/31 00:49:10
@@ -96,6 +96,8 @@
     int		bd_unit;		/* SRM unit number */
     int		bd_namelen;
     int		bd_flags;
+    int		bd_fd;
+    int		bd_opencount;
 } bdinfo [MAXBDDEV];
 static int nbdinfo = 0;

@@ -113,6 +115,8 @@
     ret.bits = prom_getenv(PROM_E_BOOTED_DEV,
 			   bdinfo[0].bd_name, sizeof(bdinfo[0].bd_name));
     bdinfo[0].bd_namelen = ret.u.retval;
+    bdinfo[0].bd_fd = -1;
+    bdinfo[0].bd_opencount = 0;
     nbdinfo++;

     return (0);
@@ -155,7 +159,7 @@
     struct disklabel		*lp;
     int				sector, slice, i;
     int				error;
-    int				unit;
+    int				unit, fd;
     prom_return_t		ret;

     va_start(args, f);
@@ -169,11 +173,17 @@
     }

     /* Call the prom to open the disk. */
-    ret.bits = prom_open(bdinfo[unit].bd_name, bdinfo[unit].bd_namelen);
-    if (ret.u.status == 2)
-	return (ENXIO);
-    if (ret.u.status == 3)
-	return (EIO);
+    if (bdinfo[unit].bd_fd < 0) {
+	ret.bits = prom_open(bdinfo[unit].bd_name, bdinfo[unit].bd_namelen);
+	if (ret.u.status == 2)
+	    return (ENXIO);
+	if (ret.u.status == 3)
+	    return (EIO);
+	bdinfo[unit].bd_fd = fd = ret.u.retval;
+    } else {
+	fd = bdinfo[unit].bd_fd;
+    }
+    bdinfo[unit].bd_opencount++;

     od = (struct open_disk *) malloc(sizeof(struct open_disk));
     if (!od) {
@@ -182,7 +192,7 @@
     }

     /* Look up SRM unit number, intialise open_disk structure */
-    od->od_fd = ret.u.retval;
+    od->od_fd = fd;
     od->od_unit = dev->d_kind.srmdisk.unit;
     od->od_flags = bdinfo[od->od_unit].bd_flags;
     od->od_boff = 0;
@@ -321,7 +331,11 @@
 {
     struct open_disk	*od = f->f_devdata;

-    (void)prom_close(od->od_fd);
+    bdinfo[od->od_unit].bd_opencount--;
+    if (bdinfo[od->od_unit].bd_opencount == 0) {
+	(void)prom_close(od->od_fd);
+	bdinfo[od->od_unit].bd_fd = -1;
+    }

     free(od);
     f->f_devdata = NULL;


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-alpha" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010730180224.P57563-100000>