Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Oct 2006 21:59:02 GMT
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 108529 for review
Message-ID:  <200610262159.k9QLx2Im038505@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=108529

Change 108529 by marcel@marcel_cluster on 2006/10/26 21:58:36

	Add new common field d_unit to struct devdesc. This
	makes to possible for libefi to function without
	requiring architecture specific extensions. As such,
	libefi can be used on amd64, i386 and ia64 without
	enforcing identical struct devdesc definitions.

Affected files ...

.. //depot/projects/ia64/sys/boot/common/bootstrap.h#9 edit
.. //depot/projects/ia64/sys/boot/i386/libi386/bioscd.c#8 edit
.. //depot/projects/ia64/sys/boot/i386/libi386/biosdisk.c#13 edit
.. //depot/projects/ia64/sys/boot/i386/libi386/bootinfo32.c#3 edit
.. //depot/projects/ia64/sys/boot/i386/libi386/devicename.c#5 edit
.. //depot/projects/ia64/sys/boot/i386/libi386/libi386.h#13 edit
.. //depot/projects/ia64/sys/boot/i386/loader/main.c#13 edit
.. //depot/projects/ia64/sys/boot/ofw/libofw/libofw.h#8 edit
.. //depot/projects/ia64/sys/boot/pc98/libpc98/bioscd.c#2 edit
.. //depot/projects/ia64/sys/boot/pc98/libpc98/biosdisk.c#12 edit
.. //depot/projects/ia64/sys/boot/pc98/loader/main.c#11 edit

Differences ...

==== //depot/projects/ia64/sys/boot/common/bootstrap.h#9 (text+ko) ====

@@ -43,6 +43,7 @@
 #define DEVT_DISK	1
 #define DEVT_NET	2
 #define	DEVT_CD		3
+    int			d_unit;
 };
 
 /* Commands and return values; nonzero return sets command_errmsg != NULL */

==== //depot/projects/ia64/sys/boot/i386/libi386/bioscd.c#8 (text+ko) ====

@@ -195,7 +195,7 @@
 	va_start(ap, f);
 	dev = va_arg(ap, struct i386_devdesc *);
 	va_end(ap);
-	if (dev->d_kind.bioscd.unit >= nbcinfo) {
+	if (dev->d_unit >= nbcinfo) {
 		DEBUG("attempt to open nonexistent disk");
 		return(ENXIO);
 	}
@@ -230,7 +230,7 @@
 	if (rw != F_READ)
 		return(EROFS);
 	dev = (struct i386_devdesc *)devdata;
-	unit = dev->d_kind.bioscd.unit;
+	unit = dev->d_unit;
 	blks = size / BIOSCD_SECSIZE;
 	if (dblk % (BIOSCD_SECSIZE / DEV_BSIZE) != 0)
 		return (EINVAL);
@@ -331,7 +331,7 @@
     int major;
     int rootdev;
 
-    unit = dev->d_kind.bioscd.unit;
+    unit = dev->d_unit;
     biosdev = bc_unit2bios(unit);
     DEBUG("unit %d BIOS device %d", unit, biosdev);
     if (biosdev == -1)				/* not a BIOS device */

==== //depot/projects/ia64/sys/boot/i386/libi386/biosdisk.c#13 (text+ko) ====

@@ -251,7 +251,7 @@
 	pager_output(line);
 
 	/* try to open the whole disk */
-	dev.d_kind.biosdisk.unit = i;
+	dev.d_unit = i;
 	dev.d_kind.biosdisk.slice = -1;
 	dev.d_kind.biosdisk.partition = -1;
 	
@@ -454,7 +454,7 @@
     int				error;
     char			buf[BUFSIZE];
 
-    if (dev->d_kind.biosdisk.unit >= nbdinfo) {
+    if (dev->d_unit >= nbdinfo) {
 	DEBUG("attempt to open nonexistent disk");
 	return(ENXIO);
     }
@@ -466,14 +466,14 @@
     }
 
     /* Look up BIOS unit number, intialise open_disk structure */
-    od->od_dkunit = dev->d_kind.biosdisk.unit;
+    od->od_dkunit = dev->d_unit;
     od->od_unit = bdinfo[od->od_dkunit].bd_unit;
     od->od_flags = bdinfo[od->od_dkunit].bd_flags;
     od->od_boff = 0;
     od->od_nslices = 0;
     error = 0;
     DEBUG("open '%s', unit 0x%x slice %d partition %c",
-	     i386_fmtdev(dev), dev->d_kind.biosdisk.unit, 
+	     i386_fmtdev(dev), dev->d_unit, 
 	     dev->d_kind.biosdisk.slice, dev->d_kind.biosdisk.partition + 'a');
 
     /* Get geometry for this open (removable device may have changed) */
@@ -1177,8 +1177,8 @@
     char			*nip, *cp;
     int				unitofs = 0, i, unit;
 
-    biosdev = bd_unit2bios(dev->d_kind.biosdisk.unit);
-    DEBUG("unit %d BIOS device %d", dev->d_kind.biosdisk.unit, biosdev);
+    biosdev = bd_unit2bios(dev->d_unit);
+    DEBUG("unit %d BIOS device %d", dev->d_unit, biosdev);
     if (biosdev == -1)				/* not a BIOS device */
 	return(-1);
     if (bd_opendisk(&od, dev) != 0)		/* oops, not a viable device */
@@ -1186,7 +1186,7 @@
 
     if (biosdev < 0x80) {
 	/* floppy (or emulated floppy) or ATAPI device */
-	if (bdinfo[dev->d_kind.biosdisk.unit].bd_type == DT_ATAPI) {
+	if (bdinfo[dev->d_unit].bd_type == DT_ATAPI) {
 	    /* is an ATAPI disk */
 	    major = WFDMAJOR;
 	} else {

==== //depot/projects/ia64/sys/boot/i386/libi386/bootinfo32.c#3 (text+ko) ====

@@ -172,13 +172,13 @@
     switch(rootdev->d_type) {
     case DEVT_CD:
 	    /* Pass in BIOS device number. */
-	    bi.bi_bios_dev = bc_unit2bios(rootdev->d_kind.bioscd.unit);
+	    bi.bi_bios_dev = bc_unit2bios(rootdev->d_unit);
 	    bootdevnr = bc_getdev(rootdev);
 	    break;
 
     case DEVT_DISK:
 	/* pass in the BIOS device number of the current disk */
-	bi.bi_bios_dev = bd_unit2bios(rootdev->d_kind.biosdisk.unit);
+	bi.bi_bios_dev = bd_unit2bios(rootdev->d_unit);
 	bootdevnr = bd_getdev(rootdev);
 	break;
 

==== //depot/projects/ia64/sys/boot/i386/libi386/devicename.c#5 (text+ko) ====

@@ -142,7 +142,7 @@
 	    goto fail;
 	}
 
-	idev->d_kind.biosdisk.unit = unit;
+	idev->d_unit = unit;
 	idev->d_kind.biosdisk.slice = slice;
 	idev->d_kind.biosdisk.partition = partition;
 	if (path != NULL)
@@ -165,10 +165,7 @@
 	    goto fail;
 	}
 
-	if (dv->dv_type == DEVT_NET)
-	    idev->d_kind.netif.unit = unit;
-	else
-	    idev->d_kind.bioscd.unit = unit;
+	idev->d_unit = unit;
 	if (path != NULL)
 	    *path = (*cp == 0) ? cp : cp + 1;
 	break;
@@ -205,12 +202,12 @@
 	break;
 
     case DEVT_CD:
-	sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_kind.bioscd.unit);
+	sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_unit);
 	break;
 
     case DEVT_DISK:
 	cp = buf;
-	cp += sprintf(cp, "%s%d", dev->d_dev->dv_name, dev->d_kind.biosdisk.unit);
+	cp += sprintf(cp, "%s%d", dev->d_dev->dv_name, dev->d_unit);
 	if (dev->d_kind.biosdisk.slice > 0)
 	    cp += sprintf(cp, "s%d", dev->d_kind.biosdisk.slice);
 	if (dev->d_kind.biosdisk.partition >= 0)
@@ -219,7 +216,7 @@
 	break;
 
     case DEVT_NET:
-	sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_kind.netif.unit);
+	sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_unit);
 	break;
     }
     return(buf);

==== //depot/projects/ia64/sys/boot/i386/libi386/libi386.h#13 (text+ko) ====

@@ -36,24 +36,19 @@
 {
     struct devsw	*d_dev;
     int			d_type;
+    int			d_unit;
     union 
     {
 	struct 
 	{
-	    int		unit;
+	    void	*data;
 	    int		slice;
 	    int		partition;
-	    void	*data;
 	} biosdisk;
 	struct
 	{
-	    int		unit;
 	    void	*data;
 	} bioscd;
-	struct 
-	{
-	    int		unit;		/* XXX net layer lives over these? */
-	} netif;
     } d_kind;
 };
 

==== //depot/projects/ia64/sys/boot/i386/loader/main.c#13 (text+ko) ====

@@ -201,11 +201,11 @@
         if ((kargs->bootflags & KARGS_FLAGS_CD) != 0) {
 	    /* we are booting from a CD with cdboot */
 	    new_currdev.d_dev = &bioscd;
-	    new_currdev.d_kind.bioscd.unit = bc_bios2unit(initial_bootdev);
+	    new_currdev.d_unit = bc_bios2unit(initial_bootdev);
 	} else if ((kargs->bootflags & KARGS_FLAGS_PXE) != 0) {
 	    /* we are booting from pxeldr */
 	    new_currdev.d_dev = &pxedisk;
-	    new_currdev.d_kind.netif.unit = 0;
+	    new_currdev.d_unit = 0;
 	} else {
 	    /* we don't know what our boot device is */
 	    new_currdev.d_kind.biosdisk.slice = -1;
@@ -240,10 +240,10 @@
      * which one we booted off of, just use disk0: as a reasonable default.
      */
     if ((new_currdev.d_type == biosdisk.dv_type) &&
-	((new_currdev.d_kind.biosdisk.unit = bd_bios2unit(biosdev)) == -1)) {
+	((new_currdev.d_unit = bd_bios2unit(biosdev)) == -1)) {
 	printf("Can't work out which disk we are booting from.\n"
 	       "Guessed BIOS device 0x%x not found by probes, defaulting to disk0:\n", biosdev);
-	new_currdev.d_kind.biosdisk.unit = 0;
+	new_currdev.d_unit = 0;
     }
     env_setenv("currdev", EV_VOLATILE, i386_fmtdev(&new_currdev),
 	       i386_setcurrdev, env_nounset);

==== //depot/projects/ia64/sys/boot/ofw/libofw/libofw.h#8 (text+ko) ====

@@ -31,6 +31,7 @@
 struct ofw_devdesc {
 	struct devsw	*d_dev;
 	int		d_type;
+	int		d_unit;
 	ihandle_t	d_handle;
 	char		d_path[256];
 };

==== //depot/projects/ia64/sys/boot/pc98/libpc98/bioscd.c#2 (text) ====

@@ -192,7 +192,7 @@
 	va_start(ap, f);
 	dev = va_arg(ap, struct i386_devdesc *);
 	va_end(ap);
-	if (dev->d_kind.bioscd.unit >= nbcinfo) {
+	if (dev->d_unit >= nbcinfo) {
 		DEBUG("attempt to open nonexistent disk");
 		return(ENXIO);
 	}
@@ -227,7 +227,7 @@
 	if (rw != F_READ)
 		return(EROFS);
 	dev = (struct i386_devdesc *)devdata;
-	unit = dev->d_kind.bioscd.unit;
+	unit = dev->d_unit;
 	blks = size / BIOSCD_SECSIZE;
 	if (dblk % (BIOSCD_SECSIZE / DEV_BSIZE) != 0)
 		return (EINVAL);
@@ -321,7 +321,7 @@
     int major;
     int rootdev;
 
-    unit = dev->d_kind.bioscd.unit;
+    unit = dev->d_unit;
     biosdev = bc_unit2bios(unit);
     DEBUG("unit %d BIOS device %d", unit, biosdev);
     if (biosdev == -1)				/* not a BIOS device */

==== //depot/projects/ia64/sys/boot/pc98/libpc98/biosdisk.c#12 (text+ko) ====

@@ -256,7 +256,7 @@
 	pager_output(line);
 
 	/* try to open the whole disk */
-	dev.d_kind.biosdisk.unit = i;
+	dev.d_unit = i;
 	dev.d_kind.biosdisk.slice = -1;
 	dev.d_kind.biosdisk.partition = -1;
 	
@@ -385,7 +385,7 @@
     int				error;
     char			buf[BUFSIZE];
 
-    if (dev->d_kind.biosdisk.unit >= nbdinfo) {
+    if (dev->d_unit >= nbdinfo) {
 	DEBUG("attempt to open nonexistent disk");
 	return(ENXIO);
     }
@@ -397,14 +397,14 @@
     }
 
     /* Look up BIOS unit number, intialise open_disk structure */
-    od->od_dkunit = dev->d_kind.biosdisk.unit;
+    od->od_dkunit = dev->d_unit;
     od->od_unit = bdinfo[od->od_dkunit].bd_unit;
     od->od_flags = bdinfo[od->od_dkunit].bd_flags;
     od->od_boff = 0;
     od->od_nslices = 0;
     error = 0;
     DEBUG("open '%s', unit 0x%x slice %d partition %c",
-	     i386_fmtdev(dev), dev->d_kind.biosdisk.unit, 
+	     i386_fmtdev(dev), dev->d_unit, 
 	     dev->d_kind.biosdisk.slice, dev->d_kind.biosdisk.partition + 'a');
 
     /* Get geometry for this open (removable device may have changed) */
@@ -1058,8 +1058,8 @@
     char			*nip, *cp;
     int				unitofs = 0, i, unit;
 
-    biosdev = bd_unit2bios(dev->d_kind.biosdisk.unit);
-    DEBUG("unit %d BIOS device %d", dev->d_kind.biosdisk.unit, biosdev);
+    biosdev = bd_unit2bios(dev->d_unit);
+    DEBUG("unit %d BIOS device %d", dev->d_unit, biosdev);
     if (biosdev == -1)				/* not a BIOS device */
 	return(-1);
     if (bd_opendisk(&od, dev) != 0)		/* oops, not a viable device */
@@ -1067,7 +1067,7 @@
 
     if ((biosdev & 0xf0) == 0x90 || (biosdev & 0xf0) == 0x30) {
 	/* floppy (or emulated floppy) or ATAPI device */
-	if (bdinfo[dev->d_kind.biosdisk.unit].bd_type == DT_ATAPI) {
+	if (bdinfo[dev->d_unit].bd_type == DT_ATAPI) {
 	    /* is an ATAPI disk */
 	    major = WFDMAJOR;
 	} else {
@@ -1093,7 +1093,7 @@
     }
     /* default root disk unit number */
     if ((biosdev & 0xf0) == 0xa0)
-	unit = bdinfo[dev->d_kind.biosdisk.unit].bd_da_unit;
+	unit = bdinfo[dev->d_unit].bd_da_unit;
     else
 	unit = biosdev & 0xf;
 

==== //depot/projects/ia64/sys/boot/pc98/loader/main.c#11 (text+ko) ====

@@ -193,11 +193,11 @@
         if ((kargs->bootflags & KARGS_FLAGS_CD) != 0) {
 	    /* we are booting from a CD with cdboot */
 	    new_currdev.d_dev = &bioscd;
-	    new_currdev.d_kind.bioscd.unit = bc_bios2unit(initial_bootdev);
+	    new_currdev.d_unit = bc_bios2unit(initial_bootdev);
 	} else if ((kargs->bootflags & KARGS_FLAGS_PXE) != 0) {
 	    /* we are booting from pxeldr */
 	    new_currdev.d_dev = &pxedisk;
-	    new_currdev.d_kind.netif.unit = 0;
+	    new_currdev.d_unit = 0;
 	} else {
 	    /* we don't know what our boot device is */
 	    new_currdev.d_kind.biosdisk.slice = -1;
@@ -236,10 +236,10 @@
      * which one we booted off of, just use disk0: as a reasonable default.
      */
     if ((new_currdev.d_type == biosdisk.dv_type) &&
-	((new_currdev.d_kind.biosdisk.unit = bd_bios2unit(biosdev)) == -1)) {
+	((new_currdev.d_unit = bd_bios2unit(biosdev)) == -1)) {
 	printf("Can't work out which disk we are booting from.\n"
 	       "Guessed BIOS device 0x%x not found by probes, defaulting to disk0:\n", biosdev);
-	new_currdev.d_kind.biosdisk.unit = 0;
+	new_currdev.d_unit = 0;
     }
     env_setenv("currdev", EV_VOLATILE, i386_fmtdev(&new_currdev),
 	       i386_setcurrdev, env_nounset);



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