Module Name: src Committed By: christos Date: Wed May 29 00:47:49 UTC 2013
Modified Files: src/sys/arch/emips/ebus: ace_ebus.c flash_ebus.c src/sys/arch/sparc64/dev: fdc.c src/sys/arch/xen/xen: xbd_xenbus.c src/sys/dev: cgd.c dksubr.c dkvar.h ld.c vnd.c src/sys/dev/ata: wd.c src/sys/dev/dkwedge: dk.c src/sys/dev/dm: device-mapper.c src/sys/dev/isa: fd.c src/sys/dev/raidframe: rf_netbsdkintf.c src/sys/dev/scsipi: cd.c sd.c src/sys/kern: subr_disk.c src/sys/sys: param.h Log Message: phase 1 of disk geometry cleanup: - centralize the geometry -> plist code so that we don't have n useless copies of it. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/emips/ebus/ace_ebus.c \ src/sys/arch/emips/ebus/flash_ebus.c cvs rdiff -u -r1.36 -r1.37 src/sys/arch/sparc64/dev/fdc.c cvs rdiff -u -r1.57 -r1.58 src/sys/arch/xen/xen/xbd_xenbus.c cvs rdiff -u -r1.78 -r1.79 src/sys/dev/cgd.c cvs rdiff -u -r1.45 -r1.46 src/sys/dev/dksubr.c cvs rdiff -u -r1.16 -r1.17 src/sys/dev/dkvar.h cvs rdiff -u -r1.70 -r1.71 src/sys/dev/ld.c cvs rdiff -u -r1.221 -r1.222 src/sys/dev/vnd.c cvs rdiff -u -r1.402 -r1.403 src/sys/dev/ata/wd.c cvs rdiff -u -r1.65 -r1.66 src/sys/dev/dkwedge/dk.c cvs rdiff -u -r1.29 -r1.30 src/sys/dev/dm/device-mapper.c cvs rdiff -u -r1.100 -r1.101 src/sys/dev/isa/fd.c cvs rdiff -u -r1.303 -r1.304 src/sys/dev/raidframe/rf_netbsdkintf.c cvs rdiff -u -r1.310 -r1.311 src/sys/dev/scsipi/cd.c cvs rdiff -u -r1.299 -r1.300 src/sys/dev/scsipi/sd.c cvs rdiff -u -r1.101 -r1.102 src/sys/kern/subr_disk.c cvs rdiff -u -r1.429 -r1.430 src/sys/sys/param.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/emips/ebus/ace_ebus.c diff -u src/sys/arch/emips/ebus/ace_ebus.c:1.5 src/sys/arch/emips/ebus/ace_ebus.c:1.6 --- src/sys/arch/emips/ebus/ace_ebus.c:1.5 Sat Oct 27 13:17:45 2012 +++ src/sys/arch/emips/ebus/ace_ebus.c Tue May 28 20:47:48 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ace_ebus.c,v 1.5 2012/10/27 17:17:45 chs Exp $ */ +/* $NetBSD: ace_ebus.c,v 1.6 2013/05/29 00:47:48 christos Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ace_ebus.c,v 1.5 2012/10/27 17:17:45 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ace_ebus.c,v 1.6 2013/05/29 00:47:48 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -198,7 +198,7 @@ int acedetach(device_t, int); int aceactivate(device_t, enum devact); void acedone(struct ace_softc *); -static void ace_params_to_properties(struct ace_softc *ace); +static void ace_set_geometry(struct ace_softc *ace); CFATTACH_DECL_NEW(ace_ebus, sizeof(struct ace_softc), ace_ebus_match, ace_ebus_attach, acedetach, aceactivate); @@ -968,7 +968,7 @@ sysace_identify(struct ace_softc *sc) DBGME(DEBUG_PROBE, printf("Sysace::sc_capacity x%qx\n", sc->sc_capacity)); - ace_params_to_properties(sc); + ace_set_geometry(sc); } else { DBGME(DEBUG_ERRORS, printf("Sysace::Bad card signature?" @@ -1462,7 +1462,7 @@ sysace_send_config(struct ace_softc *sc, * Rest of code lifted with mods from the dev\ata\wd.c driver */ -/* $NetBSD: ace_ebus.c,v 1.5 2012/10/27 17:17:45 chs Exp $ */ +/* $NetBSD: ace_ebus.c,v 1.6 2013/05/29 00:47:48 christos Exp $ */ /* * Copyright (c) 1998, 2001 Manuel Bouyer. All rights reserved. @@ -2464,48 +2464,16 @@ bad144intern(struct ace_softc *ace) #endif static void -ace_params_to_properties(struct ace_softc *ace) +ace_set_geometry(struct ace_softc *ace) { - prop_dictionary_t disk_info, odisk_info, geom; - const char *cp; + struct disk_geom *dg = &ace->sc_dk.dk_geom; - disk_info = prop_dictionary_create(); + memset(dg, 0, sizeof(*dg)); - cp = ST506; + dg->dg_secperunit = ace->sc_capacity; + dg->dg_secsize = DEV_BSIZE /* XXX 512? */; + dg->dg_nsectors = ace->sc_params.CurrentSectorsPerTrack; + dg->dg_ntracks = ace->sc_params.CurrentNumberOfHeads; - prop_dictionary_set_cstring_nocopy(disk_info, "type", cp); - - geom = prop_dictionary_create(); - - prop_dictionary_set_uint64(geom, "sectors-per-unit", ace->sc_capacity); - - prop_dictionary_set_uint32(geom, "sector-size", - DEV_BSIZE /* XXX 512? */); - - prop_dictionary_set_uint16(geom, "sectors-per-track", - ace->sc_params.CurrentSectorsPerTrack); - - prop_dictionary_set_uint16(geom, "tracks-per-cylinder", - ace->sc_params.CurrentNumberOfHeads); - - prop_dictionary_set_uint64(geom, "cylinders-per-unit", - ace->sc_capacity / - (ace->sc_params.CurrentNumberOfHeads * - ace->sc_params.CurrentSectorsPerTrack)); - - prop_dictionary_set(disk_info, "geometry", geom); - prop_object_release(geom); - - prop_dictionary_set(device_properties(ace->sc_dev), - "disk-info", disk_info); - - /* - * Don't release disk_info here; we keep a reference to it. - * disk_detach() will release it when we go away. - */ - - odisk_info = ace->sc_dk.dk_info; - ace->sc_dk.dk_info = disk_info; - if (odisk_info) - prop_object_release(odisk_info); + disk_set_info(sc->sc_dev, &sc->sc_dk, ST506); } Index: src/sys/arch/emips/ebus/flash_ebus.c diff -u src/sys/arch/emips/ebus/flash_ebus.c:1.5 src/sys/arch/emips/ebus/flash_ebus.c:1.6 --- src/sys/arch/emips/ebus/flash_ebus.c:1.5 Sat Oct 27 13:17:45 2012 +++ src/sys/arch/emips/ebus/flash_ebus.c Tue May 28 20:47:48 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: flash_ebus.c,v 1.5 2012/10/27 17:17:45 chs Exp $ */ +/* $NetBSD: flash_ebus.c,v 1.6 2013/05/29 00:47:48 christos Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: flash_ebus.c,v 1.5 2012/10/27 17:17:45 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: flash_ebus.c,v 1.6 2013/05/29 00:47:48 christos Exp $"); /* Driver for the Intel 28F320/640/128 (J3A150) StrataFlash memory device * Extended to include the Intel JS28F256P30T95. @@ -1302,7 +1302,7 @@ static int eflash_write_at (struct eflas /* Rest of code lifted with mods from the dev\ata\wd.c driver */ -/* $NetBSD: flash_ebus.c,v 1.5 2012/10/27 17:17:45 chs Exp $ */ +/* $NetBSD: flash_ebus.c,v 1.6 2013/05/29 00:47:48 christos Exp $ */ /* * Copyright (c) 1998, 2001 Manuel Bouyer. All rights reserved. @@ -1414,7 +1414,7 @@ int eflashdetach(device_t, int); int eflashactivate(device_t, enum devact); void eflashdone(struct eflash_softc *); -static void eflash_params_to_properties(struct eflash_softc *sc); +static void eflash_set_geometry(struct eflash_softc *sc); struct dkdriver eflashdkdriver = { eflashstrategy, minphys }; @@ -1447,7 +1447,7 @@ eflashattach(struct eflash_softc *sc) device_xname(self), pbuf, 1, 1, sc->sc_capacity, DEV_BSIZE, (unsigned long long)sc->sc_capacity); - eflash_params_to_properties(sc); + eflash_set_geometry(sc); /* * Attach the disk structure. We fill in dk_info later. @@ -2293,45 +2293,17 @@ bad144intern(struct eflash_softc *sc) #endif static void -eflash_params_to_properties(struct eflash_softc *sc) +eflash_set_geometry(struct eflash_softc *sc) { - prop_dictionary_t disk_info, odisk_info, geom; - const char *cp; + struct disk_geom *dg = &sc->sc_dk.dk_geom; - disk_info = prop_dictionary_create(); + memset(dg, 0, sizeof(*dg)); - cp = ST506; + dg->dg_secperunit = sc->sc_capacity; + dg->dg_secsize = DEV_BSIZE /* XXX 512? */; + dg->dg_nsectors = sc->sc_capacity; + dg->dg_ntracks = 1; + dg->dg_ncylinders = sc->sc_capacity; - prop_dictionary_set_cstring_nocopy(disk_info, "type", cp); - - geom = prop_dictionary_create(); - - prop_dictionary_set_uint64(geom, "sectors-per-unit", sc->sc_capacity); - - prop_dictionary_set_uint32(geom, "sector-size", - DEV_BSIZE /* XXX 512? */); - - prop_dictionary_set_uint16(geom, "sectors-per-track", - sc->sc_capacity); - - prop_dictionary_set_uint16(geom, "tracks-per-cylinder", 1); - - prop_dictionary_set_uint64(geom, "cylinders-per-unit", sc->sc_capacity); - - prop_dictionary_set(disk_info, "geometry", geom); - prop_object_release(geom); - - prop_dictionary_set(device_properties(sc->sc_dev), - "disk-info", disk_info); - - /* - * Don't release disk_info here; we keep a reference to it. - * disk_detach() will release it when we go away. - */ - - odisk_info = sc->sc_dk.dk_info; - sc->sc_dk.dk_info = disk_info; - if (odisk_info) - prop_object_release(odisk_info); + disk_set_info(sc->sc_dev, &sc->sc_dk, ST506); } - Index: src/sys/arch/sparc64/dev/fdc.c diff -u src/sys/arch/sparc64/dev/fdc.c:1.36 src/sys/arch/sparc64/dev/fdc.c:1.37 --- src/sys/arch/sparc64/dev/fdc.c:1.36 Mon Aug 8 10:49:06 2011 +++ src/sys/arch/sparc64/dev/fdc.c Tue May 28 20:47:48 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: fdc.c,v 1.36 2011/08/08 14:49:06 jakllsch Exp $ */ +/* $NetBSD: fdc.c,v 1.37 2013/05/29 00:47:48 christos Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. @@ -101,7 +101,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fdc.c,v 1.36 2011/08/08 14:49:06 jakllsch Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fdc.c,v 1.37 2013/05/29 00:47:48 christos Exp $"); #include "opt_ddb.h" #include "opt_md.h" @@ -383,7 +383,7 @@ static void establish_chip_type( bus_addr_t, bus_size_t, bus_space_handle_t); -static void fd_set_properties(struct fd_softc *); +static void fd_set_geometry(struct fd_softc *); #ifdef MEMORY_DISK_HOOKS int fd_read_md_image(size_t *, void **); @@ -971,7 +971,7 @@ fdattach(device_t parent, device_t self, */ mountroothook_establish(fd_mountroot_hook, fd->sc_dev); - fd_set_properties(fd); + fd_set_geometry(fd); /* Make sure the drive motor gets turned off at shutdown time. */ if (!pmf_device_register1(self, fdsuspend, NULL, fdshutdown)) @@ -2564,57 +2564,33 @@ fd_read_md_image(size_t *sizep, void **a #endif /* MEMORY_DISK_HOOKS */ static void -fd_set_properties(struct fd_softc *fd) +fd_set_geometry(struct fd_softc *fd) { - prop_dictionary_t disk_info, odisk_info, geom; - struct fd_type *fdt; - int secsize; + const struct fd_type *fdt; - fdt = fd->sc_deftype; - - disk_info = prop_dictionary_create(); - - geom = prop_dictionary_create(); + fdt = fd->sc_type; + if (fdt == NULL) { + fdt = fd->sc_deftype; + if (fdt == NULL) + return; + } - prop_dictionary_set_uint64(geom, "sectors-per-unit", - fdt->size); + struct disk_geom *dg = &fd->sc_dkdev.dk_geom; + memset(dg, 0, sizeof(*dg)); + dg->dg_secperunit = fdt->size; + dg->dg_nsectors = fdt->sectrac; switch (fdt->secsize) { case 2: - secsize = 512; + dg->dg_secsize = 512; break; case 3: - secsize = 1024; + dg->dg_secsize = 1024; break; default: - secsize = 0; + break; } - - prop_dictionary_set_uint32(geom, "sector-size", - secsize); - - prop_dictionary_set_uint16(geom, "sectors-per-track", - fdt->sectrac); - - prop_dictionary_set_uint16(geom, "tracks-per-cylinder", - fdt->heads); - - prop_dictionary_set_uint64(geom, "cylinders-per-unit", - fdt->cylinders); - - prop_dictionary_set(disk_info, "geometry", geom); - prop_object_release(geom); - - prop_dictionary_set(device_properties(fd->sc_dev), - "disk-info", disk_info); - - /* - * Don't release disk_info here; we keep a reference to it. - * disk_detach() will release it when we go away. - */ - - odisk_info = fd->sc_dk.dk_info; - fd->sc_dk.dk_info = disk_info; - if (odisk_info) - prop_object_release(odisk_info); + dg->dg_ntracks = fdt->heads; + dg->dg_ncylinders = fdt->cyls; + disk_set_info(fd->sc_dev, &fd->sc_dkdev, NULL); } Index: src/sys/arch/xen/xen/xbd_xenbus.c diff -u src/sys/arch/xen/xen/xbd_xenbus.c:1.57 src/sys/arch/xen/xen/xbd_xenbus.c:1.58 --- src/sys/arch/xen/xen/xbd_xenbus.c:1.57 Fri May 25 11:03:38 2012 +++ src/sys/arch/xen/xen/xbd_xenbus.c Tue May 28 20:47:48 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: xbd_xenbus.c,v 1.57 2012/05/25 15:03:38 elric Exp $ */ +/* $NetBSD: xbd_xenbus.c,v 1.58 2013/05/29 00:47:48 christos Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -50,7 +50,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xbd_xenbus.c,v 1.57 2012/05/25 15:03:38 elric Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xbd_xenbus.c,v 1.58 2013/05/29 00:47:48 christos Exp $"); #include "opt_xen.h" @@ -513,7 +513,6 @@ static void xbd_backend_changed(void *ar { struct xbd_xenbus_softc *sc = device_private((device_t)arg); struct dk_geom *pdg; - prop_dictionary_t disk_info, odisk_info, geom; char buf[9]; int s; @@ -576,30 +575,16 @@ static void xbd_backend_changed(void *ar /* Discover wedges on this disk. */ dkwedge_discover(&sc->sc_dksc.sc_dkdev); - disk_info = prop_dictionary_create(); - geom = prop_dictionary_create(); - prop_dictionary_set_uint64(geom, "sectors-per-unit", - sc->sc_dksc.sc_size); - prop_dictionary_set_uint32(geom, "sector-size", - pdg->pdg_secsize); - prop_dictionary_set_uint16(geom, "sectors-per-track", - pdg->pdg_nsectors); - prop_dictionary_set_uint16(geom, "tracks-per-cylinder", - pdg->pdg_ntracks); - prop_dictionary_set_uint64(geom, "cylinders-per-unit", - pdg->pdg_ncylinders); - prop_dictionary_set(disk_info, "geometry", geom); - prop_object_release(geom); - prop_dictionary_set(device_properties(sc->sc_dksc.sc_dev), - "disk-info", disk_info); - /* - * Don't release disk_info here; we keep a reference to it. - * disk_detach() will release it when we go away. - */ - odisk_info = sc->sc_dksc.sc_dkdev.dk_info; - sc->sc_dksc.sc_dkdev.dk_info = disk_info; - if (odisk_info) - prop_object_release(odisk_info); + struct disk_geom *dg = &sc->sc_dksc.sc_dkdev.dk_geom; + memset(dg, 0, sizeof(*dg)); + + dg->dg_secperunit = sc->sc_dksc.sc_size; + dg->dg_secsize = pdg->pdg_secsize; + dg->dg_nsectors = pdg->pdg_nsectors; + dg->dg_ntracks = pdg->pdg_ntracks; + dg->dg_ncylinders = pdg->pdg_ncylinders; + + disk_set_info(sc->sc_dksc.sc_dev, &sc->sc_dksc.sc_dkdev, NULL); /* the disk should be working now */ config_pending_decr(); Index: src/sys/dev/cgd.c diff -u src/sys/dev/cgd.c:1.78 src/sys/dev/cgd.c:1.79 --- src/sys/dev/cgd.c:1.78 Tue Dec 4 21:23:20 2012 +++ src/sys/dev/cgd.c Tue May 28 20:47:48 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: cgd.c,v 1.78 2012/12/05 02:23:20 christos Exp $ */ +/* $NetBSD: cgd.c,v 1.79 2013/05/29 00:47:48 christos Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.78 2012/12/05 02:23:20 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.79 2013/05/29 00:47:48 christos Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -694,7 +694,7 @@ cgd_ioctl_set(struct cgd_softc *cs, void cs->sc_dksc.sc_flags |= DKF_INITED; - dk_set_properties(di, &cs->sc_dksc); + dk_set_geometry(di, &cs->sc_dksc); /* Attach the disk. */ disk_attach(&cs->sc_dksc.sc_dkdev); Index: src/sys/dev/dksubr.c diff -u src/sys/dev/dksubr.c:1.45 src/sys/dev/dksubr.c:1.46 --- src/sys/dev/dksubr.c:1.45 Tue May 29 06:20:33 2012 +++ src/sys/dev/dksubr.c Tue May 28 20:47:48 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: dksubr.c,v 1.45 2012/05/29 10:20:33 elric Exp $ */ +/* $NetBSD: dksubr.c,v 1.46 2013/05/29 00:47:48 christos Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 1999, 2002, 2008 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dksubr.c,v 1.45 2012/05/29 10:20:33 elric Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dksubr.c,v 1.46 2013/05/29 00:47:48 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -627,43 +627,20 @@ dk_makedisklabel(struct dk_intf *di, str } void -dk_set_properties(struct dk_intf *di, struct dk_softc *dksc) +dk_set_geometry(struct dk_intf *di, struct dk_softc *dksc) { - prop_dictionary_t disk_info, odisk_info, geom; + struct disk_geom *dg = &dksc->sc_dkdev.dk_geom; - disk_info = prop_dictionary_create(); + memset(dg, 0, sizeof(*dg)); - geom = prop_dictionary_create(); + dg->dg_secperunit = dksc->sc_size; + dg->dg_secsize = dksc->sc_geom.pdg_secsize; + dg->dg_nsectors = dksc->sc_geom.pdg_nsectors; + dg->dg_ntracks = dksc->sc_geom.pdg_ntracks; + dg->dg_ncylinders = dksc->sc_geom.pdg_ncylinders; - prop_dictionary_set_uint64(geom, "sectors-per-unit", dksc->sc_size); + disk_set_info(dksc->sc_dev, &dksc->sc_dkdev, NULL); - prop_dictionary_set_uint32(geom, "sector-size", - dksc->sc_geom.pdg_secsize); - - prop_dictionary_set_uint16(geom, "sectors-per-track", - dksc->sc_geom.pdg_nsectors); - - prop_dictionary_set_uint16(geom, "tracks-per-cylinder", - dksc->sc_geom.pdg_ntracks); - - prop_dictionary_set_uint64(geom, "cylinders-per-unit", - dksc->sc_geom.pdg_ncylinders); - - prop_dictionary_set(disk_info, "geometry", geom); - prop_object_release(geom); - - prop_dictionary_set(device_properties(dksc->sc_dev), - "disk-info", disk_info); - - /* - * Don't release disk_info here; we keep a reference to it. - * disk_detach() will release it when we go away. - */ - - odisk_info = dksc->sc_dkdev.dk_info; - dksc->sc_dkdev.dk_info = disk_info; - if (odisk_info) - prop_object_release(odisk_info); } /* This function is taken from ccd.c:1.76 --rcd */ Index: src/sys/dev/dkvar.h diff -u src/sys/dev/dkvar.h:1.16 src/sys/dev/dkvar.h:1.17 --- src/sys/dev/dkvar.h:1.16 Fri May 25 06:53:46 2012 +++ src/sys/dev/dkvar.h Tue May 28 20:47:48 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: dkvar.h,v 1.16 2012/05/25 10:53:46 elric Exp $ */ +/* $NetBSD: dkvar.h,v 1.17 2013/05/29 00:47:48 christos Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -32,6 +32,7 @@ struct pathbuf; /* from namei.h */ +/* XXX: GC */ struct dk_geom { u_int32_t pdg_secsize; u_int32_t pdg_nsectors; @@ -112,6 +113,7 @@ int dk_dump(struct dk_intf *, struct dk_ void dk_getdisklabel(struct dk_intf *, struct dk_softc *, dev_t); void dk_getdefaultlabel(struct dk_intf *, struct dk_softc *, struct disklabel *); -void dk_set_properties(struct dk_intf *, struct dk_softc *); +/* XXX: GC use disk_set_info() */ +void dk_set_geometry(struct dk_intf *, struct dk_softc *); int dk_lookup(struct pathbuf *, struct lwp *, struct vnode **); Index: src/sys/dev/ld.c diff -u src/sys/dev/ld.c:1.70 src/sys/dev/ld.c:1.71 --- src/sys/dev/ld.c:1.70 Sat Oct 27 13:18:14 2012 +++ src/sys/dev/ld.c Tue May 28 20:47:48 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ld.c,v 1.70 2012/10/27 17:18:14 chs Exp $ */ +/* $NetBSD: ld.c,v 1.71 2013/05/29 00:47:48 christos Exp $ */ /*- * Copyright (c) 1998, 2000 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ld.c,v 1.70 2012/10/27 17:18:14 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ld.c,v 1.71 2013/05/29 00:47:48 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -66,7 +66,7 @@ static void ldminphys(struct buf *bp); static bool ld_suspend(device_t, const pmf_qual_t *); static bool ld_shutdown(device_t, int); static void ldstart(struct ld_softc *, struct buf *); -static void ld_set_properties(struct ld_softc *); +static void ld_set_geometry(struct ld_softc *); static void ld_config_interrupts (device_t); static int ldlastclose(device_t); @@ -143,7 +143,7 @@ ldattach(struct ld_softc *sc) sc->sc_nsectors, sc->sc_secsize, sc->sc_secperunit); sc->sc_disksize512 = sc->sc_secperunit * sc->sc_secsize / DEV_BSIZE; - ld_set_properties(sc); + ld_set_geometry(sc); /* Attach the device into the rnd source list. */ rnd_attach_source(&sc->sc_rnd_source, device_xname(sc->sc_dv), @@ -889,44 +889,19 @@ ldminphys(struct buf *bp) } static void -ld_set_properties(struct ld_softc *ld) +ld_set_geometry(struct ld_softc *ld) { - prop_dictionary_t disk_info, odisk_info, geom; + struct disk_geom *dg = &ld->sc_dk.dk_geom; - disk_info = prop_dictionary_create(); + memset(dg, 0, sizeof(*dg)); - geom = prop_dictionary_create(); + dg->dg_secperunit = ld->sc_secperunit; + dg->dg_secsize = ld->sc_secsize; + dg->dg_nsectors = ld->sc_nsectors; + dg->dg_ntracks = ld->sc_nheads; + dg->dg_ncylinders = ld->sc_ncylinders; - prop_dictionary_set_uint64(geom, "sectors-per-unit", - ld->sc_secperunit); - - prop_dictionary_set_uint32(geom, "sector-size", - ld->sc_secsize); - - prop_dictionary_set_uint16(geom, "sectors-per-track", - ld->sc_nsectors); - - prop_dictionary_set_uint16(geom, "tracks-per-cylinder", - ld->sc_nheads); - - prop_dictionary_set_uint64(geom, "cylinders-per-unit", - ld->sc_ncylinders); - - prop_dictionary_set(disk_info, "geometry", geom); - prop_object_release(geom); - - prop_dictionary_set(device_properties(ld->sc_dv), - "disk-info", disk_info); - - /* - * Don't release disk_info here; we keep a reference to it. - * disk_detach() will release it when we go away. - */ - - odisk_info = ld->sc_dk.dk_info; - ld->sc_dk.dk_info = disk_info; - if (odisk_info) - prop_object_release(odisk_info); + disk_set_info(ld->sc_dv, &ld->sc_dk, NULL); } static void Index: src/sys/dev/vnd.c diff -u src/sys/dev/vnd.c:1.221 src/sys/dev/vnd.c:1.222 --- src/sys/dev/vnd.c:1.221 Sat Jun 9 02:20:45 2012 +++ src/sys/dev/vnd.c Tue May 28 20:47:48 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: vnd.c,v 1.221 2012/06/09 06:20:45 mlelstv Exp $ */ +/* $NetBSD: vnd.c,v 1.222 2013/05/29 00:47:48 christos Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2008 The NetBSD Foundation, Inc. @@ -91,7 +91,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.221 2012/06/09 06:20:45 mlelstv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.222 2013/05/29 00:47:48 christos Exp $"); #if defined(_KERNEL_OPT) #include "opt_vnd.h" @@ -127,8 +127,6 @@ __KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.22 #include <dev/dkvar.h> #include <dev/vndvar.h> -#include <prop/proplib.h> - #if defined(VNDDEBUG) && !defined(DEBUG) #define DEBUG #endif @@ -187,7 +185,7 @@ static void handle_with_rdwr(struct vnd_ struct buf *); static void handle_with_strategy(struct vnd_softc *, const struct buf *, struct buf *); -static void vnd_set_properties(struct vnd_softc *); +static void vnd_set_geometry(struct vnd_softc *); static dev_type_open(vndopen); static dev_type_close(vndclose); @@ -1296,7 +1294,7 @@ vndioctl(dev_t dev, u_long cmd, void *da vnd->sc_geom.vng_ncylinders = vnd->sc_size; } - vnd_set_properties(vnd); + vnd_set_geometry(vnd); if (vio->vnd_flags & VNDIOF_READONLY) { vnd->sc_flags |= VNF_READONLY; @@ -1998,45 +1996,20 @@ vnd_free(void *aux, void *ptr) #endif /* VND_COMPRESSION */ static void -vnd_set_properties(struct vnd_softc *vnd) +vnd_set_geometry(struct vnd_softc *vnd) { - prop_dictionary_t disk_info, odisk_info, geom; - - disk_info = prop_dictionary_create(); - - geom = prop_dictionary_create(); - - prop_dictionary_set_uint64(geom, "sectors-per-unit", - vnd->sc_geom.vng_nsectors * vnd->sc_geom.vng_ntracks * - vnd->sc_geom.vng_ncylinders); - - prop_dictionary_set_uint32(geom, "sector-size", - vnd->sc_geom.vng_secsize); - - prop_dictionary_set_uint16(geom, "sectors-per-track", - vnd->sc_geom.vng_nsectors); + struct disk_geom *dg = &vnd->sc_dkdev.dk_geom; - prop_dictionary_set_uint16(geom, "tracks-per-cylinder", - vnd->sc_geom.vng_ntracks); + memset(dg, 0, sizeof(*dg)); - prop_dictionary_set_uint64(geom, "cylinders-per-unit", - vnd->sc_geom.vng_ncylinders); - - prop_dictionary_set(disk_info, "geometry", geom); - prop_object_release(geom); - - prop_dictionary_set(device_properties(vnd->sc_dev), - "disk-info", disk_info); - - /* - * Don't release disk_info here; we keep a reference to it. - * disk_detach() will release it when we go away. - */ + dg->dg_secperunit = vnd->sc_geom.vng_nsectors * + vnd->sc_geom.vng_ntracks * vnd->sc_geom.vng_ncylinders; + dg->dg_secsize = vnd->sc_geom.vng_secsize; + dg->dg_nsectors = vnd->sc_geom.vng_nsectors; + dg->dg_ntracks = vnd->sc_geom.vng_ntracks; + dg->dg_ncylinders = vnd->sc_geom.vng_ncylinders; - odisk_info = vnd->sc_dkdev.dk_info; - vnd->sc_dkdev.dk_info = disk_info; - if (odisk_info) - prop_object_release(odisk_info); + disk_set_info(vnd->sc_dev, &vnd->sc_dkdev, NULL); } #ifdef _MODULE Index: src/sys/dev/ata/wd.c diff -u src/sys/dev/ata/wd.c:1.402 src/sys/dev/ata/wd.c:1.403 --- src/sys/dev/ata/wd.c:1.402 Wed Jan 9 17:03:49 2013 +++ src/sys/dev/ata/wd.c Tue May 28 20:47:48 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: wd.c,v 1.402 2013/01/09 22:03:49 riastradh Exp $ */ +/* $NetBSD: wd.c,v 1.403 2013/05/29 00:47:48 christos Exp $ */ /* * Copyright (c) 1998, 2001 Manuel Bouyer. All rights reserved. @@ -54,7 +54,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.402 2013/01/09 22:03:49 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.403 2013/05/29 00:47:48 christos Exp $"); #include "opt_ata.h" @@ -1727,56 +1727,22 @@ bad144intern(struct wd_softc *wd) static void wd_params_to_properties(struct wd_softc *wd, struct ataparams *params) { - prop_dictionary_t disk_info, odisk_info, geom; - const char *cp; + struct disk_geom *dg = &wd->sc_dk.dk_geom; - disk_info = prop_dictionary_create(); + memset(dg, 0, sizeof(*dg)); - if (strcmp(wd->sc_params.atap_model, "ST506") == 0) - cp = "ST506"; - else { - /* XXX Should have a case for ATA here, too. */ - cp = "ESDI"; - } - prop_dictionary_set_cstring_nocopy(disk_info, "type", cp); - - geom = prop_dictionary_create(); - - prop_dictionary_set_uint64(geom, "sectors-per-unit", wd->sc_capacity); - - prop_dictionary_set_uint32(geom, "sector-size", - DEV_BSIZE /* XXX 512? */); - - prop_dictionary_set_uint16(geom, "sectors-per-track", - wd->sc_params.atap_sectors); - - prop_dictionary_set_uint16(geom, "tracks-per-cylinder", - wd->sc_params.atap_heads); - - if (wd->sc_flags & WDF_LBA) - prop_dictionary_set_uint64(geom, "cylinders-per-unit", - wd->sc_capacity / - (wd->sc_params.atap_heads * - wd->sc_params.atap_sectors)); - else - prop_dictionary_set_uint16(geom, "cylinders-per-unit", - wd->sc_params.atap_cylinders); - - prop_dictionary_set(disk_info, "geometry", geom); - prop_object_release(geom); - - prop_dictionary_set(device_properties(wd->sc_dev), - "disk-info", disk_info); - - /* - * Don't release disk_info here; we keep a reference to it. - * disk_detach() will release it when we go away. - */ + dg->dg_secperunit = wd->sc_capacity; + dg->dg_secsize = DEV_BSIZE /* XXX 512? */; + dg->dg_nsectors = wd->sc_params.atap_sectors; + dg->dg_ntracks = wd->sc_params.atap_heads; + if ((wd->sc_flags & WDF_LBA) == 0) + dg->dg_ncylinders = wd->sc_params.atap_cylinders; + + /* XXX Should have a case for ATA here, too. */ + const char *cp = strcmp(wd->sc_params.atap_model, "ST506") ? + "ST506" : "ESDI"; - odisk_info = wd->sc_dk.dk_info; - wd->sc_dk.dk_info = disk_info; - if (odisk_info) - prop_object_release(odisk_info); + disk_set_info(wd->sc_dev, &wd->sc_dk, cp); } int Index: src/sys/dev/dkwedge/dk.c diff -u src/sys/dev/dkwedge/dk.c:1.65 src/sys/dev/dkwedge/dk.c:1.66 --- src/sys/dev/dkwedge/dk.c:1.65 Sat Oct 27 13:18:15 2012 +++ src/sys/dev/dkwedge/dk.c Tue May 28 20:47:48 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: dk.c,v 1.65 2012/10/27 17:18:15 chs Exp $ */ +/* $NetBSD: dk.c,v 1.66 2013/05/29 00:47:48 christos Exp $ */ /*- * Copyright (c) 2004, 2005, 2006, 2007 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dk.c,v 1.65 2012/10/27 17:18:15 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dk.c,v 1.66 2013/05/29 00:47:48 christos Exp $"); #ifdef _KERNEL_OPT #include "opt_dkwedge.h" @@ -228,35 +228,18 @@ dkwedge_array_expand(void) static void dkgetproperties(struct disk *disk, struct dkwedge_info *dkw) { - prop_dictionary_t disk_info, odisk_info, geom; + struct disk_geom *dg = &disk->dk_geom; - disk_info = prop_dictionary_create(); + memset(dg, 0, sizeof(*dg)); - prop_dictionary_set_cstring_nocopy(disk_info, "type", "ESDI"); + dg->dg_secperunit = dkw->dkw_size >> disk->dk_blkshift; + dg->dg_secsize = DEV_BSIZE << disk->dk_blkshift; + dg->dg_nsectors = 32; + dg->dg_ntracks = 64; + /* XXX: why is that dkw->dkw_size instead of secperunit?!?! */ + dg->dg_ncylinders = dkw->dkw_size / (dg->dg_nsectors * dg->dg_ntracks); - geom = prop_dictionary_create(); - - prop_dictionary_set_uint64(geom, "sectors-per-unit", - dkw->dkw_size >> disk->dk_blkshift); - - prop_dictionary_set_uint32(geom, "sector-size", - DEV_BSIZE << disk->dk_blkshift); - - prop_dictionary_set_uint32(geom, "sectors-per-track", 32); - - prop_dictionary_set_uint32(geom, "tracks-per-cylinder", 64); - - prop_dictionary_set_uint32(geom, "cylinders-per-unit", dkw->dkw_size / 2048); - - prop_dictionary_set(disk_info, "geometry", geom); - prop_object_release(geom); - - odisk_info = disk->dk_info; - - disk->dk_info = disk_info; - - if (odisk_info != NULL) - prop_object_release(odisk_info); + disk_set_info(NULL, disk, "ESDI"); } /* Index: src/sys/dev/dm/device-mapper.c diff -u src/sys/dev/dm/device-mapper.c:1.29 src/sys/dev/dm/device-mapper.c:1.30 --- src/sys/dev/dm/device-mapper.c:1.29 Tue Mar 13 14:40:30 2012 +++ src/sys/dev/dm/device-mapper.c Tue May 28 20:47:48 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: device-mapper.c,v 1.29 2012/03/13 18:40:30 elad Exp $ */ +/* $NetBSD: device-mapper.c,v 1.30 2013/05/29 00:47:48 christos Exp $ */ /* * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -673,28 +673,20 @@ dmminphys(struct buf *bp) void dmgetproperties(struct disk *disk, dm_table_head_t *head) { - prop_dictionary_t disk_info, odisk_info, geom; uint64_t numsec; unsigned secsize; dm_table_disksize(head, &numsec, &secsize); - disk_info = prop_dictionary_create(); - geom = prop_dictionary_create(); - prop_dictionary_set_cstring_nocopy(disk_info, "type", "ESDI"); - prop_dictionary_set_uint64(geom, "sectors-per-unit", numsec); - prop_dictionary_set_uint32(geom, "sector-size", secsize); - prop_dictionary_set_uint32(geom, "sectors-per-track", 32); - prop_dictionary_set_uint32(geom, "tracks-per-cylinder", 64); - prop_dictionary_set_uint32(geom, "cylinders-per-unit", numsec / 2048); - prop_dictionary_set(disk_info, "geometry", geom); - prop_object_release(geom); + struct disk_geom *dg = &disk->dk_geom; - odisk_info = disk->dk_info; - disk->dk_info = disk_info; + memset(dg, 0, sizeof(*dg)); + dg->dg_secperunit = numsec; + dg->dg_secsize = secsize; + dg->dg_nsectors = 32; + dg->dg_ntracks = 64; - if (odisk_info != NULL) - prop_object_release(odisk_info); + disk_set_info(NULL, disk, "ESDI"); disk_blocksize(disk, secsize); } Index: src/sys/dev/isa/fd.c diff -u src/sys/dev/isa/fd.c:1.100 src/sys/dev/isa/fd.c:1.101 --- src/sys/dev/isa/fd.c:1.100 Thu Feb 2 14:43:04 2012 +++ src/sys/dev/isa/fd.c Tue May 28 20:47:48 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: fd.c,v 1.100 2012/02/02 19:43:04 tls Exp $ */ +/* $NetBSD: fd.c,v 1.101 2013/05/29 00:47:48 christos Exp $ */ /*- * Copyright (c) 1998, 2003, 2008 The NetBSD Foundation, Inc. @@ -81,7 +81,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.100 2012/02/02 19:43:04 tls Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.101 2013/05/29 00:47:48 christos Exp $"); #include "opt_ddb.h" @@ -252,7 +252,7 @@ void fdcretry(struct fdc_softc *fdc); void fdfinish(struct fd_softc *fd, struct buf *bp); static const struct fd_type *fd_dev_to_type(struct fd_softc *, dev_t); int fdformat(dev_t, struct ne7_fd_formb *, struct lwp *); -static void fd_set_properties(struct fd_softc *fd); +static void fd_set_geometry(struct fd_softc *fd); void fd_mountroot_hook(device_t); @@ -572,7 +572,7 @@ fdattach(device_t parent, device_t self, rnd_attach_source(&fd->rnd_source, device_xname(fd->sc_dev), RND_TYPE_DISK, 0); - fd_set_properties(fd); + fd_set_geometry(fd); if (!pmf_device_register(self, NULL, NULL)) aprint_error_dev(self, "cannot set power mgmt handler\n"); @@ -600,7 +600,7 @@ fddetach(device_t self, int flags) pmf_device_deregister(self); #if 0 /* XXX need to undo at detach? */ - fd_set_properties(fd); + fd_set_geometry(fd); #endif rnd_detach_source(&fd->rnd_source); @@ -917,7 +917,7 @@ fdopen(dev_t dev, int flags, int mode, s fd->sc_cylin = -1; fd->sc_flags |= FD_OPEN; - fd_set_properties(fd); + fd_set_geometry(fd); return 0; } @@ -1651,11 +1651,9 @@ fd_mountroot_hook(device_t dev) } static void -fd_set_properties(struct fd_softc *fd) +fd_set_geometry(struct fd_softc *fd) { - prop_dictionary_t disk_info, odisk_info, geom; const struct fd_type *fdt; - int secsize; fdt = fd->sc_type; if (fdt == NULL) { @@ -1664,49 +1662,22 @@ fd_set_properties(struct fd_softc *fd) return; } - disk_info = prop_dictionary_create(); - - geom = prop_dictionary_create(); - - prop_dictionary_set_uint64(geom, "sectors-per-unit", - fdt->size); + struct disk_geom *dg = &fd->sc_dk.dk_geom; + memset(dg, 0, sizeof(*dg)); + dg->dg_secperunit = fdt->size; + dg->dg_nsectors = fdt->sectrac; switch (fdt->secsize) { case 2: - secsize = 512; + dg->dg_secsize = 512; break; case 3: - secsize = 1024; + dg->dg_secsize = 1024; break; default: - secsize = 0; + break; } - - prop_dictionary_set_uint32(geom, "sector-size", - secsize); - - prop_dictionary_set_uint16(geom, "sectors-per-track", - fdt->sectrac); - - prop_dictionary_set_uint16(geom, "tracks-per-cylinder", - fdt->heads); - - prop_dictionary_set_uint64(geom, "cylinders-per-unit", - fdt->cyls); - - prop_dictionary_set(disk_info, "geometry", geom); - prop_object_release(geom); - - prop_dictionary_set(device_properties(fd->sc_dev), - "disk-info", disk_info); - - /* - * Don't release disk_info here; we keep a reference to it. - * disk_detach() will release it when we go away. - */ - - odisk_info = fd->sc_dk.dk_info; - fd->sc_dk.dk_info = disk_info; - if (odisk_info) - prop_object_release(odisk_info); + dg->dg_ntracks = fdt->heads; + dg->dg_ncylinders = fdt->cyls; + disk_set_info(fd->sc_dev, &fd->sc_dk, NULL); } Index: src/sys/dev/raidframe/rf_netbsdkintf.c diff -u src/sys/dev/raidframe/rf_netbsdkintf.c:1.303 src/sys/dev/raidframe/rf_netbsdkintf.c:1.304 --- src/sys/dev/raidframe/rf_netbsdkintf.c:1.303 Thu May 23 10:15:52 2013 +++ src/sys/dev/raidframe/rf_netbsdkintf.c Tue May 28 20:47:49 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: rf_netbsdkintf.c,v 1.303 2013/05/23 14:15:52 christos Exp $ */ +/* $NetBSD: rf_netbsdkintf.c,v 1.304 2013/05/29 00:47:49 christos Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2008-2011 The NetBSD Foundation, Inc. @@ -101,7 +101,7 @@ ***********************************************************/ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.303 2013/05/23 14:15:52 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.304 2013/05/29 00:47:49 christos Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -280,7 +280,7 @@ static void raidunlock(struct raid_softc static int raid_detach_unlocked(struct raid_softc *); static void rf_markalldirty(RF_Raid_t *); -static void rf_set_properties(struct raid_softc *, RF_Raid_t *); +static void rf_set_geometry(struct raid_softc *, RF_Raid_t *); void rf_ReconThread(struct rf_recon_req *); void rf_RewriteParityThread(RF_Raid_t *raidPtr); @@ -1961,7 +1961,7 @@ raidinit(struct raid_softc *rs) dkwedge_discover(&rs->sc_dkdev); - rf_set_properties(rs, raidPtr); + rf_set_geometry(rs, raidPtr); } #if (RF_INCLUDE_PARITY_DECLUSTERING_DS > 0) @@ -3859,33 +3859,18 @@ raid_detach(device_t self, int flags) } static void -rf_set_properties(struct raid_softc *rs, RF_Raid_t *raidPtr) +rf_set_geometry(struct raid_softc *rs, RF_Raid_t *raidPtr) { - prop_dictionary_t disk_info, odisk_info, geom; - disk_info = prop_dictionary_create(); - geom = prop_dictionary_create(); - prop_dictionary_set_uint64(geom, "sectors-per-unit", - raidPtr->totalSectors); - prop_dictionary_set_uint32(geom, "sector-size", - raidPtr->bytesPerSector); - - prop_dictionary_set_uint16(geom, "sectors-per-track", - raidPtr->Layout.dataSectorsPerStripe); - prop_dictionary_set_uint16(geom, "tracks-per-cylinder", - 4 * raidPtr->numCol); - - prop_dictionary_set_uint64(geom, "cylinders-per-unit", - raidPtr->totalSectors / (raidPtr->Layout.dataSectorsPerStripe * - (4 * raidPtr->numCol))); - - prop_dictionary_set(disk_info, "geometry", geom); - prop_object_release(geom); - prop_dictionary_set(device_properties(rs->sc_dev), - "disk-info", disk_info); - odisk_info = rs->sc_dkdev.dk_info; - rs->sc_dkdev.dk_info = disk_info; - if (odisk_info) - prop_object_release(odisk_info); + struct disk_geom *dg = &rs->sc_dkdev.dk_geom; + + memset(dg, 0, sizeof(*dg)); + + dg->dg_secperunit = raidPtr->totalSectors; + dg->dg_secsize = raidPtr->bytesPerSector; + dg->dg_nsectors = raidPtr->Layout.dataSectorsPerStripe; + dg->dg_ntracks = 4 * raidPtr->numCol; + + disk_set_info(rs->sc_dev, &rs->sc_dkdev, NULL); } /* Index: src/sys/dev/scsipi/cd.c diff -u src/sys/dev/scsipi/cd.c:1.310 src/sys/dev/scsipi/cd.c:1.311 --- src/sys/dev/scsipi/cd.c:1.310 Fri Mar 15 12:16:12 2013 +++ src/sys/dev/scsipi/cd.c Tue May 28 20:47:49 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: cd.c,v 1.310 2013/03/15 16:16:12 martin Exp $ */ +/* $NetBSD: cd.c,v 1.311 2013/05/29 00:47:49 christos Exp $ */ /*- * Copyright (c) 1998, 2001, 2003, 2004, 2005, 2008 The NetBSD Foundation, @@ -50,7 +50,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cd.c,v 1.310 2013/03/15 16:16:12 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cd.c,v 1.311 2013/05/29 00:47:49 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -174,7 +174,7 @@ static int mmc_gettrackinfo(struct scsip static int mmc_do_op(struct scsipi_periph *, struct mmc_op *); static int mmc_setup_writeparams(struct scsipi_periph *, struct mmc_writeparams *); -static void cd_set_properties(struct cd_softc *); +static void cd_set_geometry(struct cd_softc *); CFATTACH_DECL3_NEW(cd, sizeof(struct cd_softc), cdmatch, cdattach, cddetach, NULL, NULL, NULL, DVF_DETACH_SHUTDOWN); @@ -448,7 +448,7 @@ cdopen(dev_t dev, int flag, int fmt, str cdgetdisklabel(cd); SC_DEBUG(periph, SCSIPI_DB3, ("Disklabel fabricated ")); - cd_set_properties(cd); + cd_set_geometry(cd); } } @@ -3906,33 +3906,14 @@ mmc_setup_writeparams(struct scsipi_peri } static void -cd_set_properties(struct cd_softc *cd) +cd_set_geometry(struct cd_softc *cd) { - prop_dictionary_t disk_info, odisk_info, geom; + struct disk_geom *dg = &cd->sc_dk.dk_geom; - disk_info = prop_dictionary_create(); + memset(dg, 0, sizeof(*dg)); - geom = prop_dictionary_create(); + dg->dg_secperunit = cd->params.disksize; + dg->dg_secsize = cd->params.blksize; - prop_dictionary_set_uint64(geom, "sectors-per-unit", - cd->params.disksize); - - prop_dictionary_set_uint32(geom, "sector-size", - cd->params.blksize); - - prop_dictionary_set(disk_info, "geometry", geom); - prop_object_release(geom); - - prop_dictionary_set(device_properties(cd->sc_dev), - "disk-info", disk_info); - - /* - * Don't release disk_info here; we keep a reference to it. - * disk_detach() will release it when we go away. - */ - - odisk_info = cd->sc_dk.dk_info; - cd->sc_dk.dk_info = disk_info; - if (odisk_info) - prop_object_release(odisk_info); + disk_set_info(cd->sc_dev, &cd->sc_dk, NULL); } Index: src/sys/dev/scsipi/sd.c diff -u src/sys/dev/scsipi/sd.c:1.299 src/sys/dev/scsipi/sd.c:1.300 --- src/sys/dev/scsipi/sd.c:1.299 Tue Apr 16 17:01:09 2013 +++ src/sys/dev/scsipi/sd.c Tue May 28 20:47:49 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: sd.c,v 1.299 2013/04/16 21:01:09 jakllsch Exp $ */ +/* $NetBSD: sd.c,v 1.300 2013/05/29 00:47:49 christos Exp $ */ /*- * Copyright (c) 1998, 2003, 2004 The NetBSD Foundation, Inc. @@ -47,7 +47,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sd.c,v 1.299 2013/04/16 21:01:09 jakllsch Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sd.c,v 1.300 2013/05/29 00:47:49 christos Exp $"); #include "opt_scsi.h" @@ -125,7 +125,7 @@ static int sd_setcache(struct sd_softc * static int sdmatch(device_t, cfdata_t, void *); static void sdattach(device_t, device_t, void *); static int sddetach(device_t, int); -static void sd_set_properties(struct sd_softc *); +static void sd_set_geometry(struct sd_softc *); CFATTACH_DECL3_NEW(sd, sizeof(struct sd_softc), sdmatch, sdattach, sddetach, NULL, NULL, NULL, DVF_DETACH_SHUTDOWN); @@ -2160,7 +2160,7 @@ page0: dp->rot_rate = 3600; setprops: - sd_set_properties(sd); + sd_set_geometry(sd); return (SDGP_RESULT_OK); } @@ -2298,42 +2298,17 @@ sd_setcache(struct sd_softc *sd, int bit } static void -sd_set_properties(struct sd_softc *sd) +sd_set_geometry(struct sd_softc *sd) { - prop_dictionary_t disk_info, odisk_info, geom; + struct disk_geom *dg = &sd->sc_dk.dk_geom; - disk_info = prop_dictionary_create(); + memset(dg, 0, sizeof(*dg)); - geom = prop_dictionary_create(); + dg->dg_secperunit = sd->params.disksize; + dg->dg_secsize = sd->params.blksize; + dg->dg_nsectors = sd->params.sectors; + dg->dg_ntracks = sd->params.heads; + dg->dg_ncylinders = sd->params.cyls; - prop_dictionary_set_uint64(geom, "sectors-per-unit", - sd->params.disksize); - - prop_dictionary_set_uint32(geom, "sector-size", - sd->params.blksize); - - prop_dictionary_set_uint16(geom, "sectors-per-track", - sd->params.sectors); - - prop_dictionary_set_uint16(geom, "tracks-per-cylinder", - sd->params.heads); - - prop_dictionary_set_uint64(geom, "cylinders-per-unit", - sd->params.cyls); - - prop_dictionary_set(disk_info, "geometry", geom); - prop_object_release(geom); - - prop_dictionary_set(device_properties(sd->sc_dev), - "disk-info", disk_info); - - /* - * Don't release disk_info here; we keep a reference to it. - * disk_detach() will release it when we go away. - */ - - odisk_info = sd->sc_dk.dk_info; - sd->sc_dk.dk_info = disk_info; - if (odisk_info) - prop_object_release(odisk_info); + disk_set_info(sd->sc_dev, &sd->sc_dk, NULL); } Index: src/sys/kern/subr_disk.c diff -u src/sys/kern/subr_disk.c:1.101 src/sys/kern/subr_disk.c:1.102 --- src/sys/kern/subr_disk.c:1.101 Fri Feb 8 19:31:21 2013 +++ src/sys/kern/subr_disk.c Tue May 28 20:47:49 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_disk.c,v 1.101 2013/02/09 00:31:21 christos Exp $ */ +/* $NetBSD: subr_disk.c,v 1.102 2013/05/29 00:47:49 christos Exp $ */ /*- * Copyright (c) 1996, 1997, 1999, 2000, 2009 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: subr_disk.c,v 1.101 2013/02/09 00:31:21 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_disk.c,v 1.102 2013/05/29 00:47:49 christos Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -508,3 +508,84 @@ disk_ioctl(struct disk *diskp, u_long cm return (error); } + +void +disk_set_info(device_t dev, struct disk *dk, const char *type) +{ + struct disk_geom *dg = &dk->dk_geom; + + if (dg->dg_secperunit == 0 && dg->dg_ncylinders == 0) { +#ifdef DIAGNOSTIC + printf("%s: secperunit and ncylinders are zero\n", dk->dk_name); +#endif + return; + } + + if (dg->dg_secperunit == 0) { + if (dg->dg_nsectors == 0 || dg->dg_ntracks == 0) { +#ifdef DIAGNOSTIC + printf("%s: secperunit and (sectors or tracks) " + "are zero\n", dk->dk_name); +#endif + return; + } + dg->dg_secperunit = dg->dg_nsectors * + dg->dg_ntracks * dg->dg_ncylinders; + } + + if (dg->dg_ncylinders == 0) { + if (dg->dg_ntracks && dg->dg_nsectors) + dg->dg_ncylinders = dg->dg_secperunit / + (dg->dg_ntracks * dg->dg_nsectors); + } + + if (dg->dg_secsize == 0) { +#ifdef DIAGNOSTIC + printf("%s: fixing 0 sector size\n", dk->dk_name); +#endif + dg->dg_secsize = DEV_BSIZE; + } + + prop_dictionary_t disk_info, odisk_info, geom; + + disk_info = prop_dictionary_create(); + geom = prop_dictionary_create(); + + prop_dictionary_set_uint64(geom, "sectors-per-unit", + dg->dg_secperunit); + + prop_dictionary_set_uint32(geom, "sector-size", dg->dg_secsize); + + if (dg->dg_nsectors) + prop_dictionary_set_uint16(geom, "sectors-per-track", + dg->dg_nsectors); + + if (dg->dg_ntracks) + prop_dictionary_set_uint16(geom, "tracks-per-cylinder", + dg->dg_ntracks); + + if (dg->dg_ncylinders) + prop_dictionary_set_uint64(geom, "cylinders-per-unit", + dg->dg_ncylinders); + + prop_dictionary_set(disk_info, "geometry", geom); + + if (type) + prop_dictionary_set_cstring_nocopy(disk_info, "type", type); + + prop_object_release(geom); + + odisk_info = dk->dk_info; + dk->dk_info = disk_info; + + if (dev) + prop_dictionary_set(device_properties(dev), "disk-info", + disk_info); + + /* + * Don't release disk_info here; we keep a reference to it. + * disk_detach() will release it when we go away. + */ + if (odisk_info) + prop_object_release(odisk_info); +} Index: src/sys/sys/param.h diff -u src/sys/sys/param.h:1.429 src/sys/sys/param.h:1.430 --- src/sys/sys/param.h:1.429 Tue May 21 04:37:27 2013 +++ src/sys/sys/param.h Tue May 28 20:47:49 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: param.h,v 1.429 2013/05/21 08:37:27 roy Exp $ */ +/* $NetBSD: param.h,v 1.430 2013/05/29 00:47:49 christos Exp $ */ /*- * Copyright (c) 1982, 1986, 1989, 1993 @@ -63,7 +63,7 @@ * 2.99.9 (299000900) */ -#define __NetBSD_Version__ 699002000 /* NetBSD 6.99.20 */ +#define __NetBSD_Version__ 699002100 /* NetBSD 6.99.21 */ #define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \ (m) * 1000000) + (p) * 100) <= __NetBSD_Version__)