diff options
author | sos <sos@FreeBSD.org> | 1998-04-09 17:46:45 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 1998-04-09 17:46:45 +0000 |
commit | 42733ffc1682bbf2d0338f29fd55c19da9294ff5 (patch) | |
tree | 7e4d616b7b774daa776e0f15414c7ef29f483daa | |
parent | dc4e7fd7a91d6daa7a2f1d63f600b6a41dd69b98 (diff) | |
download | FreeBSD-src-42733ffc1682bbf2d0338f29fd55c19da9294ff5.zip FreeBSD-src-42733ffc1682bbf2d0338f29fd55c19da9294ff5.tar.gz |
Try to use the "right" CHS translations of a LBA device.
Drives bigger than 8.4G is still in question until I get a drive
to test on...
-rw-r--r-- | sys/i386/isa/wd.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/sys/i386/isa/wd.c b/sys/i386/isa/wd.c index 552f1e3..6bd2cce 100644 --- a/sys/i386/isa/wd.c +++ b/sys/i386/isa/wd.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)wd.c 7.2 (Berkeley) 5/9/91 - * $Id: wd.c,v 1.152 1998/04/02 02:10:47 eivind Exp $ + * $Id: wd.c,v 1.153 1998/04/08 20:04:36 sos Exp $ */ /* TODO: @@ -1901,9 +1901,26 @@ failed: du->dk_dd.d_secsize = DEV_BSIZE; if ((du->cfg_flags & WDOPT_LBA) && wp->wdp_lbasize) { du->dk_dd.d_nsectors = 63; - du->dk_dd.d_ntracks = 64; - du->dk_dd.d_ncylinders = wp->wdp_lbasize / (63*64); - du->dk_dd.d_secpercyl= 63*64; + if (wp->wdp_lbasize < 16*63*1024) { /* <=528.4 MB */ + du->dk_dd.d_ntracks = 16; + } + else if (wp->wdp_lbasize < 32*63*1024) { /* <=1.057 GB */ + du->dk_dd.d_ntracks = 32; + } + else if (wp->wdp_lbasize < 64*63*1024) { /* <=2.114 GB */ + du->dk_dd.d_ntracks = 64; + } + else if (wp->wdp_lbasize < 128*63*1024) { /* <=4.228 GB */ + du->dk_dd.d_ntracks = 128; + } + else if (wp->wdp_lbasize < 128*63*1024) { /* <=8.422 GB */ + du->dk_dd.d_ntracks = 255; + } + else { /* >8.422 GB */ + du->dk_dd.d_ntracks = 255; /* XXX */ + } + du->dk_dd.d_secpercyl= du->dk_dd.d_ntracks*du->dk_dd.d_nsectors; + du->dk_dd.d_ncylinders = wp->wdp_lbasize/du->dk_dd.d_secpercyl; du->dk_dd.d_secperunit = wp->wdp_lbasize; du->dk_flags |= DKFL_LBA; } |