diff options
author | phk <phk@FreeBSD.org> | 2002-04-09 15:43:32 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2002-04-09 15:43:32 +0000 |
commit | a90e28ebbb699c856787836be56197be575fad47 (patch) | |
tree | b29d97c613e2113a270ed79ca6d8e042d070ec82 /sys/geom/geom_pc98.c | |
parent | c2f17d16c728a0248466b433fc6c8ad52023ac3d (diff) | |
download | FreeBSD-src-a90e28ebbb699c856787836be56197be575fad47.zip FreeBSD-src-a90e28ebbb699c856787836be56197be575fad47.tar.gz |
Implement DIOCGFRONTSTUFF ioctl which reports how many bytes from the start
of the device magic stuff might occupy.
Sponsored by: DARPA & NAI Labs.
Diffstat (limited to 'sys/geom/geom_pc98.c')
-rw-r--r-- | sys/geom/geom_pc98.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/sys/geom/geom_pc98.c b/sys/geom/geom_pc98.c index ce5e181..a89bf36 100644 --- a/sys/geom/geom_pc98.c +++ b/sys/geom/geom_pc98.c @@ -89,12 +89,13 @@ g_pc98_taste(struct g_class *mp, struct g_provider *pp, int flags) struct g_geom *gp; struct g_consumer *cp; struct g_provider *pp2; - int error, i, j, npart; + int error, i, npart; u_char *buf; struct g_pc98_softc *ms; u_int sectorsize, u, v; u_int fwsect, fwhead; off_t mediasize, start, length; + struct g_slicer *gsp; g_trace(G_T_TOPOLOGY, "g_pc98_taste(%s,%s)", mp->name, pp->name); g_topology_assert(); @@ -104,40 +105,38 @@ g_pc98_taste(struct g_class *mp, struct g_provider *pp, int flags) gp = g_slice_new(mp, 8, pp, &cp, &ms, sizeof *ms, g_pc98_start); if (gp == NULL) return (NULL); + gsp = gp->softc; g_topology_unlock(); gp->dumpconf = g_pc98_dumpconf; npart = 0; while (1) { /* a trick to allow us to use break */ if (gp->rank != 2 && flags == G_TF_NORMAL) break; - j = sizeof sectorsize; - error = g_io_getattr("GEOM::sectorsize", cp, &j, §orsize); + error = g_getattr("GEOM::sectorsize", cp, §orsize); if (error) { sectorsize = 512; printf("g_pc98_taste: error %d Sectors are %d bytes\n", error, sectorsize); } - j = sizeof mediasize; - error = g_io_getattr("GEOM::mediasize", cp, &j, &mediasize); + error = g_getattr("GEOM::mediasize", cp, &mediasize); if (error) { mediasize = 0; printf("g_error %d Mediasize is %lld bytes\n", error, (long long)mediasize); } - j = sizeof fwsect; - error = g_io_getattr("GEOM::fwsectors", cp, &j, &fwsect); + error = g_getattr("GEOM::fwsectors", cp, &fwsect); if (error || fwsect == 0) { fwsect = 17; printf("g_pc98_taste: error %d guessing %d sectors\n", error, fwsect); } - j = sizeof fwhead; - error = g_io_getattr("GEOM::fwheads", cp, &j, &fwhead); + error = g_getattr("GEOM::fwheads", cp, &fwhead); if (error || fwhead == 0) { fwhead = 8; printf("g_pc98_taste: error %d guessing %d heads\n", error, fwhead); } + gsp->frontstuff = fwsect * sectorsize; buf = g_read_data(cp, 0, sectorsize < 1024 ? 1024 : sectorsize, &error); if (buf == NULL || error != 0) |