summaryrefslogtreecommitdiffstats
path: root/lib/libdisk/change.c
diff options
context:
space:
mode:
authornyan <nyan@FreeBSD.org>2002-10-14 13:15:14 +0000
committernyan <nyan@FreeBSD.org>2002-10-14 13:15:14 +0000
commit879ba46c821eedc1cfe8c27f035e715da0f3fad1 (patch)
tree73f7c02c8ce25f3eda5665080ad971f277b19f1e /lib/libdisk/change.c
parent92b6682eed09c447913d957533c0e302d822e235 (diff)
downloadFreeBSD-src-879ba46c821eedc1cfe8c27f035e715da0f3fad1.zip
FreeBSD-src-879ba46c821eedc1cfe8c27f035e715da0f3fad1.tar.gz
Fix to check disk geometry.
Submitted by: kawanobe@st.rim.or.jp (Kawanobe Koh)
Diffstat (limited to 'lib/libdisk/change.c')
-rw-r--r--lib/libdisk/change.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/libdisk/change.c b/lib/libdisk/change.c
index ca3df99..18b8bc3 100644
--- a/lib/libdisk/change.c
+++ b/lib/libdisk/change.c
@@ -26,7 +26,6 @@ Set_Bios_Geom(struct disk *disk, u_long cyl, u_long hd, u_long sect)
disk->bios_sect = sect;
}
-/* XXX - parameters should change to fit for PC-98, but I'm not sure */
void
Sanitize_Bios_Geom(struct disk *disk)
{
@@ -34,11 +33,19 @@ Sanitize_Bios_Geom(struct disk *disk)
sane = 1;
+#ifdef PC98
+ if (disk->bios_cyl >= 65536)
+#else
if (disk->bios_cyl > 1024)
+#endif
sane = 0;
if (disk->bios_hd > 16)
sane = 0;
+#ifdef PC98
+ if (disk->bios_sect >= 256)
+#else
if (disk->bios_sect > 63)
+#endif
sane = 0;
if (disk->bios_cyl*disk->bios_hd*disk->bios_sect != disk->chunks->size)
sane = 0;
@@ -50,11 +57,21 @@ Sanitize_Bios_Geom(struct disk *disk)
disk->bios_hd = 16;
disk->bios_cyl = disk->chunks->size / (disk->bios_sect*disk->bios_hd);
+#ifdef PC98
+ if (disk->bios_cyl < 65536)
+#else
if (disk->bios_cyl < 1024)
+#endif
return;
/* Hmm, try harder... */
+#ifdef PC98
+ /* Assume standard SCSI parameter */
+ disk->bios_sect = 128;
+ disk->bios_hd = 8;
+#else
disk->bios_hd = 255;
+#endif
disk->bios_cyl = disk->chunks->size / (disk->bios_sect*disk->bios_hd);
return;
OpenPOWER on IntegriCloud