summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_pc98.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2002-04-09 15:43:32 +0000
committerphk <phk@FreeBSD.org>2002-04-09 15:43:32 +0000
commita90e28ebbb699c856787836be56197be575fad47 (patch)
treeb29d97c613e2113a270ed79ca6d8e042d070ec82 /sys/geom/geom_pc98.c
parentc2f17d16c728a0248466b433fc6c8ad52023ac3d (diff)
downloadFreeBSD-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.c17
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, &sectorsize);
+ error = g_getattr("GEOM::sectorsize", cp, &sectorsize);
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)
OpenPOWER on IntegriCloud