diff options
author | nyan <nyan@FreeBSD.org> | 2005-03-30 13:03:33 +0000 |
---|---|---|
committer | nyan <nyan@FreeBSD.org> | 2005-03-30 13:03:33 +0000 |
commit | eb3dd13248cffadeef829d1f2442d3872f760c9e (patch) | |
tree | 7a47b401e41328b8fe95550157b5f183f2cb663d | |
parent | a855c5b2ce13e59931362db506824d8b6e383539 (diff) | |
download | FreeBSD-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.c | 25 | ||||
-rw-r--r-- | usr.sbin/sade/disks.c | 2 | ||||
-rw-r--r-- | 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 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 |