From eb3dd13248cffadeef829d1f2442d3872f760c9e Mon Sep 17 00:00:00 2001 From: nyan Date: Wed, 30 Mar 2005 13:03:33 +0000 Subject: [PATCH] Add over 32GB disk support on pc98 (userland part). Submitted by: Hirokazu WATANABE --- lib/libdisk/change.c | 25 ++++++++++++++++++++++++- usr.sbin/sade/disks.c | 2 +- usr.sbin/sysinstall/disks.c | 2 +- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/libdisk/change.c b/lib/libdisk/change.c index 12812bda47ef..7b6356156733 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 1e35c7b3a11c..a60ced521f87 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 1e35c7b3a11c..a60ced521f87 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