summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornyan <nyan@FreeBSD.org>2005-03-30 13:03:33 +0000
committernyan <nyan@FreeBSD.org>2005-03-30 13:03:33 +0000
commiteb3dd13248cffadeef829d1f2442d3872f760c9e (patch)
tree7a47b401e41328b8fe95550157b5f183f2cb663d
parenta855c5b2ce13e59931362db506824d8b6e383539 (diff)
downloadFreeBSD-src-eb3dd13248cffadeef829d1f2442d3872f760c9e.zip
FreeBSD-src-eb3dd13248cffadeef829d1f2442d3872f760c9e.tar.gz
Add over 32GB disk support on pc98 (userland part).
Submitted by: Hirokazu WATANABE
-rw-r--r--lib/libdisk/change.c25
-rw-r--r--usr.sbin/sade/disks.c2
-rw-r--r--usr.sbin/sysinstall/disks.c2
3 files changed, 26 insertions, 3 deletions
diff --git a/lib/libdisk/change.c b/lib/libdisk/change.c
index 12812bd..7b63561 100644
--- a/lib/libdisk/change.c
+++ b/lib/libdisk/change.c
@@ -40,7 +40,11 @@ Sanitize_Bios_Geom(struct disk *disk)
if (disk->bios_cyl > 1024)
#endif
sane = 0;
+#ifdef PC98
+ if (disk->bios_hd >= 256)
+#else
if (disk->bios_hd > 16)
+#endif
sane = 0;
#ifdef PC98
if (disk->bios_sect >= 256)
@@ -68,8 +72,8 @@ Sanitize_Bios_Geom(struct disk *disk)
return;
/* Hmm, try harder... */
-#ifdef PC98
/* Assume standard SCSI parameter */
+#ifdef PC98
disk->bios_sect = 128;
disk->bios_hd = 8;
#else
@@ -77,6 +81,25 @@ Sanitize_Bios_Geom(struct disk *disk)
#endif
disk->bios_cyl = disk->chunks->size /
(disk->bios_sect * disk->bios_hd);
+
+#ifdef PC98
+ if (disk->bios_cyl < 65536)
+ return;
+
+ /* Assume UIDE-133/98-A Challenger BIOS 0.9821C parameter */
+ disk->bios_sect = 255;
+ disk->bios_hd = 16;
+ disk->bios_cyl = disk->chunks->size /
+ (disk->bios_sect * disk->bios_hd);
+
+ if (disk->bios_cyl < 65536)
+ return;
+
+ /* BIG-na-Drive? */
+ disk->bios_hd = 255;
+ disk->bios_cyl = disk->chunks->size /
+ (disk->bios_sect * disk->bios_hd);
+#endif
}
void
diff --git a/usr.sbin/sade/disks.c b/usr.sbin/sade/disks.c
index 1e35c7b..a60ced5 100644
--- a/usr.sbin/sade/disks.c
+++ b/usr.sbin/sade/disks.c
@@ -120,7 +120,7 @@ print_chunks(Disk *d, int u)
for (i = 0; chunk_info[i]; i++)
Total += chunk_info[i]->size;
#ifdef PC98
- if (d->bios_cyl >= 65536 || d->bios_hd > 16 || d->bios_sect >= 256) {
+ if (d->bios_cyl >= 65536 || d->bios_hd > 256 || d->bios_sect >= 256) {
#else
if (d->bios_cyl > 65536 || d->bios_hd > 256 || d->bios_sect >= 64) {
#endif
diff --git a/usr.sbin/sysinstall/disks.c b/usr.sbin/sysinstall/disks.c
index 1e35c7b..a60ced5 100644
--- a/usr.sbin/sysinstall/disks.c
+++ b/usr.sbin/sysinstall/disks.c
@@ -120,7 +120,7 @@ print_chunks(Disk *d, int u)
for (i = 0; chunk_info[i]; i++)
Total += chunk_info[i]->size;
#ifdef PC98
- if (d->bios_cyl >= 65536 || d->bios_hd > 16 || d->bios_sect >= 256) {
+ if (d->bios_cyl >= 65536 || d->bios_hd > 256 || d->bios_sect >= 256) {
#else
if (d->bios_cyl > 65536 || d->bios_hd > 256 || d->bios_sect >= 64) {
#endif
OpenPOWER on IntegriCloud